From f519c8fa2022cb239ee373d459495db75513b5ed Mon Sep 17 00:00:00 2001 From: Elemer Lelik <ethlel@esekilxxen1845.rnd.ericsson.se> Date: Fri, 16 Jan 2015 10:41:31 +0100 Subject: [PATCH] Titan HTTPmsg TP Initial Contribution --- HTTPmsg_CNL113312.tpd | 64 ++ demo/HTTP_Test.cfg | 34 + demo/HTTP_Test_no_ASPs.ttcn | 409 +++++++++ demo/HTTP_test.prj | 48 + demo/Makefile | 152 ++++ demo/installCAI.script | 80 ++ demo/lssl_script | 12 + demo/server.crt | 69 ++ demo/server.key | 18 + doc/15517-CNL113312_EN_E_PDFV1R2.pdf | Bin 0 -> 65542 bytes doc/19817-CNL113312_EN_G_PDFV1R2.pdf | Bin 0 -> 156835 bytes src/HTTPmsg_MessageLen.ttcn | 24 + src/HTTPmsg_MessageLen_Function.cc | 49 + src/HTTPmsg_PT.cc | 1233 ++++++++++++++++++++++++++ src/HTTPmsg_PT.hh | 161 ++++ src/HTTPmsg_PortType.ttcn | 41 + src/HTTPmsg_Types.ttcn | 153 ++++ 17 files changed, 2547 insertions(+) create mode 100644 HTTPmsg_CNL113312.tpd create mode 100644 demo/HTTP_Test.cfg create mode 100644 demo/HTTP_Test_no_ASPs.ttcn create mode 100644 demo/HTTP_test.prj create mode 100644 demo/Makefile create mode 100644 demo/installCAI.script create mode 100644 demo/lssl_script create mode 100644 demo/server.crt create mode 100644 demo/server.key create mode 100644 doc/15517-CNL113312_EN_E_PDFV1R2.pdf create mode 100644 doc/19817-CNL113312_EN_G_PDFV1R2.pdf create mode 100644 src/HTTPmsg_MessageLen.ttcn create mode 100644 src/HTTPmsg_MessageLen_Function.cc create mode 100644 src/HTTPmsg_PT.cc create mode 100644 src/HTTPmsg_PT.hh create mode 100644 src/HTTPmsg_PortType.ttcn create mode 100644 src/HTTPmsg_Types.ttcn diff --git a/HTTPmsg_CNL113312.tpd b/HTTPmsg_CNL113312.tpd new file mode 100644 index 0000000..b8043a7 --- /dev/null +++ b/HTTPmsg_CNL113312.tpd @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2014 Ericsson + + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + + File: HTTPmsg_CNL113312.tpd + Description: tpd project file + Rev: R8D + Prodnr: CNL 113 312 + Updated: 2014-09-03 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>HTTPmsg_CNL113312</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/HTTPmsg_CNL113312_FS.pdf" relativeURI="doc/HTTPmsg_CNL113312_FS.pdf"/> + <FileResource projectRelativePath="doc/HTTPmsg_CNL113312_PRI.pdf" relativeURI="doc/HTTPmsg_CNL113312_PRI.pdf"/> + <FileResource projectRelativePath="doc/HTTPmsg_CNL113312_UG.pdf" relativeURI="doc/HTTPmsg_CNL113312_UG.pdf"/> + <FileResource projectRelativePath="src/HTTPmsg_MessageLen.ttcn" relativeURI="src/HTTPmsg_MessageLen.ttcn"/> + <FileResource projectRelativePath="src/HTTPmsg_MessageLen_Function.cc" relativeURI="src/HTTPmsg_MessageLen_Function.cc"/> + <FileResource projectRelativePath="src/HTTPmsg_PT.cc" relativeURI="src/HTTPmsg_PT.cc"/> + <FileResource projectRelativePath="src/HTTPmsg_PT.hh" relativeURI="src/HTTPmsg_PT.hh"/> + <FileResource projectRelativePath="src/HTTPmsg_PortType.ttcn" relativeURI="src/HTTPmsg_PortType.ttcn"/> + <FileResource projectRelativePath="src/HTTPmsg_Types.ttcn" relativeURI="src/HTTPmsg_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/HTTPmsg_CNL113312</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/demo/HTTP_Test.cfg b/demo/HTTP_Test.cfg new file mode 100644 index 0000000..0ae7194 --- /dev/null +++ b/demo/HTTP_Test.cfg @@ -0,0 +1,34 @@ +[LOGGING] +FileMask := LOG_ALL | TTCN_MATCHING | TTCN_DEBUG +ConsoleMask := TTCN_PORTEVENT | TTCN_DEBUG +SourceInfoFormat := Single + +[MODULE_PARAMETERS] +HTTP_Test_no_ASPs.HttpServerHostName := "localhost" +HTTP_Test_no_ASPs.HttpServerPort := 1025 +HTTP_Test_no_ASPs.HTTPClientUseSSL := false +HTTP_Test_no_ASPs.HttpServerListenPort := 1025 +HTTP_Test_no_ASPs.HttpServerUseSSL := false + +[TESTPORT_PARAMETERS] +#system.HTTP_client_port.VERIFYCERTIFICATE := "no" +#system.HTTP_client_port.TRUSTEDCALIST_FILE := "certificates/CAcert.pem" +system.HTTP_client_port.http_debugging := "yes" +system.HTTP_client_port.use_notification_ASPs := "no" +system.HTTP_server_port.use_notification_ASPs := "no" +system.HTTP_server_port.KEYFILE := "/mnt/unix/vobs/ttcn/TCC_Common/TestPorts/HTTPmsg_CNL113312/demo/server.key" +system.HTTP_server_port.CERTIFICATEFILE := "/mnt/unix/vobs/ttcn/TCC_Common/TestPorts/HTTPmsg_CNL113312/demo/server.crt" +system.HTTP_server_port.PASSWORD := "katinka1" +system.HTTP_server_port.TRUSTEDCALIST_FILE := "certificates/CAcert.pem" +system.HTTP_server_port.http_debugging := "yes" + +[MAIN_CONTROLLER] +KillTimer := 1 +TCPPort := 9036 + +[EXECUTE] +#HTTP_Test_no_ASPs.parallel_TC_client +#HTTP_Test_no_ASPs.stress_TC_Persistent_both +#HTTP_Test_no_ASPs.tc_http_encDec +HTTP_Test_no_ASPs.tc_http_encDec2 +//saved by GUI diff --git a/demo/HTTP_Test_no_ASPs.ttcn b/demo/HTTP_Test_no_ASPs.ttcn new file mode 100644 index 0000000..3d69543 --- /dev/null +++ b/demo/HTTP_Test_no_ASPs.ttcn @@ -0,0 +1,409 @@ +// +// File: HTTP_Test_no_ASPs +// Description: To demonstrate how to use the test port +// Rev: R8C +// Prodnr: CNL 113 469 +// Updated: 2007-11-09 +// Contact: http://ttcn.ericsson.se +// Author: ETH/RZX Eduard Czimbalmos +module HTTP_Test_no_ASPs { + +modulepar { + charstring HttpServerHostName := "www.eth.ericsson.se"; + integer HttpServerPort := 80; + boolean HTTPClientUseSSL := false; + integer HttpServerListenPort := 1026; + boolean HttpServerUseSSL := false +} + +import from HTTPmsg_Types all; +import from HTTPmsg_PortType all; + +type component MTC {}; + +type component HTTP_client { + port HTTPmsg_PT HTTP_client_port; +}; + +type component HTTP_server { + port HTTPmsg_PT HTTP_server_port; +}; + +//========================================================================= +// Data Types +//========================================================================= + +type record of charstring CHARSTRINGS; +type record of octetstring OCTETSTRINGS; + +type record of HTTP_client ptcList; + + +template Half_close h := { client_id := ? }; +template HTTPMessage recv_resp := { response := ? }; +template HTTPMessage recv_req := { request := ? }; +template HTTPMessage recv_err := { erronous_msg := ? }; + +function TC() runs on HTTP_client +{ +/* var HeaderLines hd := { {header_name := "Host", header_value := HttpServerHostName}, + {header_name := "Connection", header_value := "close" } }; + var HTTPRequest r := { method := "GET", uri := "/x1.xml", + version_major := 1, version_minor := 1, header := hd, body := omit };*/ + var HeaderLines hd := { {header_name := "Content-Type", header_value := "text/xml"}, + {header_name := "Content-Length", header_value := "508" }, + {header_name := "Expires", header_value := "Sat, 01 Jan 2000 00:00:00 GMT" }, + {header_name := "Pragma", header_value := "no-cache" } }; + var HTTPRequest r := { client_id := omit, method := "POS T", uri := "/", + version_major := 1, version_minor := 0, header := hd, body := "<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?><!DOCTYPE ANS SYSTEM 'file://mpp50_ans.dtd'><ANS ver=\"5.00\"><PUSH_USER><PUSH_ID>clientPush</PUSH_ID><PUSH_PWD>clientPush</PUSH_PWD></PUSH_USER><LPA><GMT_OFF>+0100</GMT_OFF><POS msid=\"4670112345\"><PD><TIME>20040117132719</TIME><POLYGON><LL_POINT><LAT>N100410</LAT><LONG>E0202020</LONG></LL_POINT><LL_POINT><LAT>N101610</LAT><LONG>E0202620</LONG></LL_POINT><LL_POINT><LAT>N101610</LAT><LONG>E0201420</LONG></LL_POINT></POLYGON></PD></POS></LPA></ANS>" }; + var HTTPMessage send_req := { request := r }; + var Connect conn := { hostname := HttpServerHostName, + portnumber := HttpServerPort, use_ssl := HTTPClientUseSSL }; + var Close c := { client_id := omit }; + + map(self:HTTP_client_port, system:HTTP_client_port); + + var boolean conn_ok := false; + while(conn_ok == false) + { + timer t_connect := 2.0; + t_connect.start; + HTTP_client_port.send(conn); + alt { + [] HTTP_client_port.receive(recv_err) { + timer t_wait := 2.0; + t_wait.start; + t_wait.timeout; } + [] t_connect.timeout { + conn_ok := true; + log("connection to server ok"); } + } + } // endwhile + + timer T_guard := 5.0; + T_guard.start; + HTTP_client_port.send(send_req); + + alt { + [] HTTP_client_port.receive(h) { + HTTP_client_port.send(c); + setverdict(fail); } + [] HTTP_client_port.receive(recv_resp) { + timer t := 10.0; + t.start; + alt { + [] HTTP_client_port.receive(h) { + HTTP_client_port.send(c); + t.stop; + setverdict(pass); } + [] t.timeout { + HTTP_client_port.send(c); + t.stop; + setverdict(fail); } + }; + } + [] HTTP_client_port.receive { + HTTP_client_port.send(c); + setverdict(fail); + } + [] T_guard.timeout { + setverdict(fail); } + }; + + unmap(self:HTTP_client_port, system:HTTP_client_port); +} + +function server_TC() runs on HTTP_server +{ + var Listen listen := { local_hostname := omit, portnumber := HttpServerListenPort, use_ssl := HttpServerUseSSL }; + var HTTPResponse resp := { client_id := omit, version_major := 1, version_minor := 1, statuscode := 200, statustext := "OK", + header := { { header_name := "Server", header_value := "TTCN Test Suite simulated HTTP/1.1 server" }, + { header_name := "Content-Length", header_value := "643" } }, + body := "<?xml version= '1.0' encoding='ISO-8859-1' standalone='yes'?>\n<!DOCTYPE ANS>\n<ANS ver=\"3.00\">\n<LIA>\n<GMT_OFF>+0100</GMT_OFF>\n<POS msid=\"1234512345\">\n<PD>\n<TIME>20000626171825</TIME>\n<ARC>\n<LL_POINT>\n<LAT>N301628</LAT>\n<LONG>W974425</LONG>\n</LL_POINT>\n<IN_RAD>1100</IN_RAD>\n<OUT_RAD>1650</OUT_RAD>\n<START_ANGLE>120</START_ANGLE>\n<STOP_ANGLE>240</STOP_ANGLE>\n</ARC>\n</PD>\n</POS>\n<POS msid=\"1234512346\">\n<PD>\n<TIME>20000626171825</TIME>\n<ARC>\n<LL_POINT>\n<LAT>N301630</LAT>\n<LONG>W974450</LONG>\n</LL_POINT>\n<IN_RAD>0</IN_RAD>\n<OUT_RAD>1650</OUT_RAD>\n<START_ANGLE> 120 </START_ANGLE>\n<STOP_ANGLE>240</STOP_ANGLE>\n</ARC>\n</PD>\n</POS>\n</LIA>\n</ANS>\n\n" }; + var HTTPMessage send_resp := { response := resp }; + var Close c := { client_id := omit }; + + map(self:HTTP_server_port, system:HTTP_server_port); + + HTTP_server_port.send(listen); + + timer T_guard := 500.0; + T_guard.start; + var boolean ready := false; + + while(ready == false) { + alt { + [] HTTP_server_port.receive(recv_req) { + HTTP_server_port.send(send_resp); + } + [] HTTP_server_port.receive(h) { + HTTP_server_port.send(c); + ready := true; + setverdict(pass); + } + [] T_guard.timeout { + setverdict(fail); + } + }; + } + + unmap(self:HTTP_server_port, system:HTTP_server_port); +} + +//==== Encode decode test ==== + +function f_singleEncDecCheck( in HTTPMessage p_msg) +{ + var template HTTPMessage tr_expectedMsg := p_msg; + if(ischosen( p_msg.request ) ){ + tr_expectedMsg.request.client_id := *; + } + else if(ischosen( p_msg.response )){ + tr_expectedMsg.response.client_id := *; + } + + var octetstring vloc_encodedMsg; + log("Original message:",p_msg); + log("\n======================\n"); + vloc_encodedMsg := enc_HTTPMessage(p_msg); + log("Encoded message:",vloc_encodedMsg); + + //==== Request decoding ==== + var HTTPMessage vloc_decodedMsg; + var integer vl_lengthOfRemainingMsg := dec_HTTPMessage( vloc_encodedMsg, vloc_decodedMsg ); //socket debugging has default value + log("length of the encoded msg: ", lengthof(vloc_encodedMsg)); + log("length of the remaining msg after encoding:", vl_lengthOfRemainingMsg); + if( vl_lengthOfRemainingMsg<lengthof(vloc_encodedMsg)) + { + log( "The decoded message:", vloc_decodedMsg); + + if(match( vloc_decodedMsg,tr_expectedMsg)) + { + setverdict(pass); + } + else + { + log(match( vloc_decodedMsg,tr_expectedMsg)); + setverdict(fail); + } + } + else + { + log( "Decoding not happened"); + setverdict(fail); + } +} + +function f_EncDec() runs on MTC +{ + + //=== Request Test ==== + + var HeaderLines hd := { {header_name := "Content-Type", header_value := "text/xml"}, + {header_name := "Content-Length", header_value := "510" }, + {header_name := "Expires", header_value := "Sat, 01 Jan 2000 00:00:00 GMT" }, + {header_name := "Pragma", header_value := "no-cache" } }; + var HTTPRequest r := { client_id := omit, method := "POST", uri := "/", + version_major := 1, version_minor := 0, header := hd, body := "<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?><!DOCTYPE ANS SYSTEM 'file://mpp50_ans.dtd'><ANS ver=\"5.00\"><PUSH_USER><PUSH_ID>clientPush</PUSH_ID><PUSH_PWD>clientPush</PUSH_PWD></PUSH_USER><LPA><GMT_OFF>+0100</GMT_OFF><POS msid=\"4670112345\"><PD><TIME>20040117132719</TIME><POLYGON><LL_POINT><LAT>N100410</LAT><LONG>E0202020</LONG></LL_POINT><LL_POINT><LAT>N101610</LAT><LONG>E0202620</LONG></LL_POINT><LL_POINT><LAT>N101610</LAT><LONG>E0201420</LONG></LL_POINT></POLYGON></PD></POS></LPA></ANS>xy" }; //xy will be fragmented????? + + var HTTPMessage send_req := { request := r }; + f_singleEncDecCheck( send_req ); + + //==== Response Test ==== + var HTTPResponse resp := { client_id := omit, version_major := 1, version_minor := 1, statuscode := 200, statustext := "OK", + header := { { header_name := "Server", header_value := "TTCN Test Suite simulated HTTP/1.1 server" }, + { header_name := "Content-Length", header_value := "643" } }, + body := "<?xml version= '1.0' encoding='ISO-8859-1' standalone='yes'?>\n<!DOCTYPE ANS>\n<ANS ver=\"3.00\">\n<LIA>\n<GMT_OFF>+0100</GMT_OFF>\n<POS msid=\"1234512345\">\n<PD>\n<TIME>20000626171825</TIME>\n<ARC>\n<LL_POINT>\n<LAT>N301628</LAT>\n<LONG>W974425</LONG>\n</LL_POINT>\n<IN_RAD>1100</IN_RAD>\n<OUT_RAD>1650</OUT_RAD>\n<START_ANGLE>120</START_ANGLE>\n<STOP_ANGLE>240</STOP_ANGLE>\n</ARC>\n</PD>\n</POS>\n<POS msid=\"1234512346\">\n<PD>\n<TIME>20000626171825</TIME>\n<ARC>\n<LL_POINT>\n<LAT>N301630</LAT>\n<LONG>W974450</LONG>\n</LL_POINT>\n<IN_RAD>0</IN_RAD>\n<OUT_RAD>1650</OUT_RAD>\n<START_ANGLE> 120 </START_ANGLE>\n<STOP_ANGLE>240</STOP_ANGLE>\n</ARC>\n</PD>\n</POS>\n</LIA>\n</ANS>\n\n" }; + var HTTPMessage send_resp := { response := resp }; + + f_singleEncDecCheck( send_resp ); + + +}//f_EncDec + + +function f_EncDec2() runs on MTC { + + var CHARSTRINGS test_msgs := { + "HTTP/1.1 302 Moved Temporarily\r\nDate: Wed, 22 Feb 2006 13:37:49 GMT\r\nPragma: no-cache\r\nLocation: http://caylem.etm.ericsson.se:7001/McxOwu/list_useractions.jsp?reload\r\nContent-Type: text/html\r\nExpires: Sat, 6 May 1995 12:00:00 GMT\r\nTransfer-Encoding: chunked\r\nCache-Control: no-store, no-cache, must-revalidate\r\nCache-Control: post-check=0, pre-check=0\r\n\r\n014d\r\n<html><head><title>302 Moved Temporarily</title></head>\r\n<body bgcolor=\"#FFFFFF\">\r\n<p>This document you requested has moved temporarily.</p>\r\n<p>It's now at <a href=\"http://caylem.etm.ericsson.se:7001/McxOwu/list_useractions.jsp?reload\">http://caylem.etm.ericsson.se:7001/McxOwu/list_useractions.jsp?reload</a>.</p>\r\n</body></html>\r\n\r\n0000\r\n\r\n", + "HTTP/1.1 200 OK\r\nDate: Wed, 22 Feb 2006 13:37:49 GMT\r\nContent-Type: text/html\r\nTransfer-Encoding: chunked\r\n\r\n0fe8\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n\r\n<html>\r\n<head>\r\n<title>Presence</title>\r\n\r\n<script>\r\nvar frameset2 = null;\r\nvar frameset1 = null;\r\n\r\nvar winW = 630, winH = 460;\r\n\r\nfunction getWinSize() {\r\n if (parseInt(navigator.appVersion)>3) {\r\n if (navigator.appName==\"Netscape\") {\r\n winW = window.innerWidth;\r\n winH = window.innerHeight;\r\n }\r\n if (navigator.appName.indexOf(\"Microsoft\")!=-1) {\r\n winW = document.body.offsetWidth;\r\n winH = document.body.offsetHeight;\r\n }\r\n }\r\n //alert(\"winW=\" + winW + \" winH=\" + winH);\r\n}\r\nvar currRow = null;\r\nfunction tr_mouseover(row) {\r\n if (!row) {\r\n row = getrow(window.event.srcElement);\r\n if (!row)return;\r\n }\r\n if (row.style.backgroundColor == \"\") {\r\n row.style.backgroundColor = \"lightgrey\";\r\n }\r\n}\r\n\r\nfunction tr_mouseout(row) {\r\n if (!row) {\r\n row = getrow(window.event.srcElement);\r\n if (!row)return;\r\n }\r\n if (row.style.backgroundColor == \"lightgrey\") {\r\n row.style.backgroundColor= \"\";\r\n }\r\n}\r\n\r\nfunction getrow(obj)\r\n{\r\n while(obj && obj.tagName != \"TR\") obj = obj.parentNode;\r\n return obj;\r\n}\r\n// Remove leading and trailing white space\r\nfunction trim(txt) { \r\n //alert(\"trim=\" + txt);\r\n \r\n try {\r\n return txt.replace(/(^ +)|( +$)|(\t)/g,\"\");\r\n } catch (e) {\r\n var x = new String(txt);\r\n //alert(\"x=\" + x);\r\n while (x.charAt(0) == \" \") {\r\n x = x.substring(1);\r\n if (x.length == 0) return \"\";\r\n //alert(\"x=\" + x);\r\n }\r\n if (x.length == 0) return \"\";\r\n while (x.charAt(x.length - 1) == \" \") {\r\n x = x.substring(0, x.length-1);\r\n if (x.length == 0) return \"\";\r\n }\r\n \r\n return x; \r\n \r\n \r\n }\r\n\r\n}\r\n\r\nfunction notyetimplemented()\r\n{\r\n alert(\"not yet implemented\");\r\n}\r\n\r\nfunction logout()\r\n{\r\n top.frames[\"_owu_hidden\"].location.assign(\"hidden_logout.jsp\");\r\n// window.parent.frames[\"_owu_hidden\"].location.assign(\"hidden_logout.jsp\");\r\n}\r\nfunction dorefresh()\r\n{\r\n try {\r\n top.frames[\"_owu_sidebar\"].location = \"PrepareSidebar?noselect\";\r\n } catch (e) {\r\n alert(\"failed to reload frames\" + e.toString());\r\n }\r\n}\r\n\r\nfunction NumberChanged(obj) {\r\n\r\n var val = obj.value;\r\n var leadingplus = false;\r\n if (val.search(/^\\+/) == 0) {\r\n leadingplus = true;\r\n val = val.substring(1);\r\n }\r\n if (val.search(/[^0-9]/) >= 0) { \r\n //alert(\"Give a number\");\r\n val = val.replace(/[^0-9]/g, \"\");\r\n if (leadingplus) {\r\n obj.value = \"+\" + val;\r\n } else {\r\n obj.value = val;\r\n }\r\n }\r\n \r\n}\r\n\r\nvar modalObj, modalFunc, modalWin;\r\nfunction showModal(obj, func, filename, args, args1) {\r\n var retval = \"\";\r\n// if (window.showModalDialog) {\r\n// retval = window.showModalDialog(filename, args, args1);\r\n// } else {\r\n modalObj = obj;\r\n modalFunc = func;\r\n document.getElementById(\"modalArg\").value = args;\r\n args1 = args1.replace(/;/g, \",\");\r\n args1 = args1.replace(/:/g, \"=\");\r\n args1 = args1.replace(/dialogWidth/g, \"width\");\r\n args1 = args1.replace(/dialogHeight/g, \"height\");\r\n args1 = args1.replace(/dialogTop/g, \"top\");\r\n args1 = args1.replace(/dialogLeft/g, \"left\");\r\n args1 = args1.replace(/scroll/g, \"scrollbars\");\r\n \r\n //alert(\"modal:\" + args1 );\r\n //alert(\"window.left=\" + window.screen.left + \" window.top=\" + window.screen.top\r\n // + \"\\window.screeX=\" + window.screenX + \" window.screenY=\" + window.screenY);\r\n\r\n //alert(\"showmodal:\" + args1);\r\n //modalWin = window.open(filename, \" \", args1 );\r\n //filename = \"indexpopup.jsp?\" + filename;\r\n modalWin = window.open(filename, \"_owu_popup\", args1);\r\n modalWin.focus();\r\n \r\n// }\r\n return retval;\r\n}\r\n\r\nfunction modalDone() {\r\n if (modalObj && modalFunc) {\r\n modalFunc(modalObj, document.getElementById(\"modalRetval\").value);\r\n }\r\n}\r\n\r\nfunction goBack() {\r\n if (window.name == \"_owu_list\") {\r\n window.location.assign(\"list_catalog.jsp?catalog=catalogue\");\r\n } else {\r\n window.history.go(-1);\r\n }\r\n}\r\nfunction scroll2View(obj)\r\n{\r\n try {\r\n var parent = obj.parentNode;\r\n while (parent && parent.tagName != (\"DIV\")) parent = parent.parentNode;\r\n" & + // wrapped into max. 8000 columns lines because ClearCase complains about too long lines + " \r\n //alert(\"scroll2view=\" + parent.id);\r\n var totsize = parent.offsetHeight; // this is the visible area \r\n0fe8\r\nsize\r\n var currtop = parent.scrollTop; //here begins the visible area\r\n var beginPos = obj.offsetTop;\r\n var step = obj.offsetHeight + 3;\r\n // alert(\"step=\" + step + \" padding=\" + obj.style.paddingTop);\r\n var endPos = beginPos + step;\r\n \r\n while (endPos > (currtop + totsize)) {\r\n currtop += step;\r\n }\r\n while (beginPos < currtop) {\r\n currtop -= step;\r\n }\r\n parent.scrollTop = currtop;\r\n //window.status = \"scrolltop=\" + currtop;\r\n } catch(e) {\r\n window.status = \"Failed scroll2view\";\r\n }\r\n}\r\n\r\n</script>\r\n\r\n<script>\r\n\r\nfunction init() {\r\n //document.getElementById(\"p_text\").select();\r\n\r\n\r\n var doreload = \"reload\";\r\n if (doreload== \"reload\") {\r\n dorefresh();\r\n }\r\n \r\n var errormsg = \"\";\r\n if (errormsg != \"\") {\r\n errormsg = errormsg.replace(/^error=/i, \"\");\r\n errormsg = errormsg.replace(/\\%20/g, \" \");\r\n alert(errormsg);\r\n }\r\n \r\n}\r\n\r\nfunction removePresence() {\r\n document.getElementById(\"presence_code\").value = \"0\";\r\n document.forms[\"presenceform\"].submit();\r\n}\r\n\r\nfunction pcodeChanged(obj) {\r\n //alert(\"pcodechanged=\" + obj.options[obj.selectedIndex].value);\r\n var pcodes = obj.options[obj.selectedIndex].value;\r\n if (pcodes == \"\") return;\r\n \r\n var tmp = pcodes.split(\"_\");\r\n var pcode = tmp[0];\r\n var number = tmp[1];\r\n \r\n var actionimage = document.getElementById(\"actionimage\");\r\n if (actionimage) {\r\n if (number == \"\") {\r\n actionimage.src=\"img/not_available_no_CFP.gif\";\r\n } else {\r\n actionimage.src=\"img/not_available_CFP.gif\";\r\n }\r\n }\r\n if (number == \"x\") {\r\n document.getElementById(\"diversionnbr\").style.display = \"\";\r\n } else {\r\n document.getElementById(\"diversionnbr\").style.display = \"none\";\r\n }\r\n}\r\nfunction setPresence() {\r\n var pcodelist = document.getElementById(\"pcodelist\");\r\n if (pcodelist.selectedIndex <0 || pcodelist.options[pcodelist.selectedIndex].value == \"\") {\r\n alert(\"do pick a valid option\")\r\n return;\r\n }\r\n var pcodes = pcodelist.options[pcodelist.selectedIndex].value ;\r\n var tmp = pcodes.split(\"_\");\r\n var pcode = tmp[0];\r\n var number = tmp[1];\r\n \r\n document.getElementById(\"presence_code\").value = pcode;\r\n if (number == \"x\") {\r\n number = trim(document.getElementById(\"diversionnbr\").value);\r\n } \r\n document.getElementById(\"presence_divertnbr\").value = number;\r\n \r\n var until = document.getElementById(\"untildate\").value \r\n + \" \" + document.getElementById(\"untiltime\").value;\r\n until = trim(until);\r\n if (until != \"\") {\r\n document.getElementById(\"presence_until\").value = until;\r\n }\r\n \r\n var msgelem = document.getElementById(\"p_text\");\r\n //just make sure that the text is not the initial expl. text.\r\n if (msgelem.onkeydown == null) { \r\n var ptext = trim(msgelem.value);\r\n if (ptext != \"\") {\r\n document.getElementById(\"presence_text\").value = ptext;\r\n }\r\n }\r\n document.forms[\"presenceform\"].submit();\r\n}\r\nfunction presetPresence(idx) {\r\n document.getElementById(\"presence_preset\").value = idx;\r\n document.forms[\"presenceform\"].submit();\r\n \r\n}\r\n\r\nfunction SetDeflect()\r\n{\r\n var elems = document.getElementsByName(\"cf\");\r\n for (var i=0; i <elems.length; i++) {\r\n if (elems[i].checked) {\r\n var deflectnr = elems[i].value;\r\n if (deflectnr == \"X\") {\r\n deflectnr = document.getElementById(\"cf_number\").value;\r\n }\r\n document.getElementById(\"calldeflectnr\").value = deflectnr;\r\n break;\r\n }\r\n }\r\n document.forms[\"calldeflectform\"].submit();\r\n}\r\n\r\nfunction cfClicked(obj) {\r\n //alert(\"obj=\" + obj.checked);\r\n if (obj.checked && obj.value == \"X\") {\r\n document.getElementById(\"cf_number\").style.visibility = \"\";\r\n document.getElementById(\"cf_number\").focus();\r\n } else {\r\n document.getElementById(\"cf_number\").style.visibility = \"hidden\";\r\n }\r\n}\r\n\r\nfunction ActivateGroups()\r\n{\r\n document.forms[\"hgsettng\"].submit();\r\n}\r\n\r\nfunction showmoreoptions() {\r\n document.getElementById(\"moreoptionstable\").style.display = \"\";\r\n document.getElementById(\"moreoptionsbutton\").style.display = \"\";\r\n}\r\nfunction divmsgChanged(obj) {\r\n if (parseInt(obj.value.length) > 255) {\r\n obj.value = obj.value.substring(0,255);\r\n alert(\"Max 255\");\r\n \r\n0fe8\r\n}\r\n //window.status = obj.value.length;\r\n} \r\nfunction resetUserSettings() \r\n{\r\n document.forms[\"resetuserform\"].submit();\r\n}\r\n</script>\r\n<style type=\"text/css\">\r\n\r\nbody {\r\n font-family: verdana, arial;\r\n font-size: 100%;\r\n background-image: url(img/body.gif);\r\n color : black;\r\n}\r\n\r\ntable {\r\n font-family: verdana, arial;\r\n font-size: 90%;\r\n}\r\n\r\n.loginform {\r\n font-size: 90%;\r\n color : black;\r\n}\r\n.button {\r\n font-size:80%;\r\n font-weight:bold;\r\n padding:1;\r\n}\r\n.mainform {\r\n color : black;\r\n background-color:#E0E0E0;\r\n font-size:70%;\r\n width:100%;\r\n height:100%;\r\n padding:0;\r\n margin:0;\r\n\r\n} \r\n.attendantform {\r\n color : black;\r\n background-image: url(img/body.gif);\r\n margin:0;\r\n padding:0;\r\n width:100%;\r\n height:100%;\r\n}\r\n\r\n.maintitle {\r\n font-weight: bold;\r\n color : black;\r\n letter-spacing:1;\r\n height:50px;\r\n width:230px;\r\n padding:0;" & + "\r\n margin:0;\r\n background-image: url(img/top.gif);\r\n}\r\n\r\n.actionmenu {\r\n font-size: 90%;\r\n color : black;\r\n background-color:#E0E0E0;\r\n margin : 5;\r\n padding:5;\r\n width:99%;\r\n\r\n}\r\n.actiondropdown {\r\n color : black;\r\n}\r\n\r\n.searchform {\r\n font-size: 90%;\r\n color : black;\r\n background-image: url(img/body.gif);\r\n}\r\n\r\n/* Used by the sidebar */\r\n#mainbody {\r\n height:99%;\r\n background-color:#E0E0E0; \r\n min-width:130px;\r\n left:5;\r\n top:3;\r\n position:absolute;\r\n \r\n}\r\n\r\n.menutree {\r\n padding:0;\r\n align:center;\r\n color: black;\r\n min-width:230px;\r\n width:100%;\r\n}\r\n\r\n.settingsbody {\r\n padding:0;\r\n align:center;\r\n color: black;\r\n min-width:198px;\r\n width:100%;\r\n background-image: url(img/body.gif);\r\n top:70px;\r\n position:absolute;\r\n font-weight:normal;\r\n height:90%;\r\n font-size:80%;\r\n}\r\n.settingslist {\r\n font-size:80%;\r\n}\r\n.inputfield {\r\n font-size:90%;\r\n}\r\n.settingsheading {\r\n padding:0 0 0 12;\r\n width:30%;\r\n}\r\n.treerow {\r\n font-weight:normal;\r\n font-size:85%;\r\n vertical-align:text-top;\r\n padding:3 0 3 0 ;\r\n margin:0;\r\n color : black;\r\n cursor:hand;\r\n min-height:16px;\r\n}\r\n.rowheading {\r\n background-color:#CCCCCC;\r\n font-weight:bold;\r\n color:black;\r\n border:3 outset lightgray;\r\n margin:2px;\r\n padding-left:5;\r\n cursor:hand;\r\n align:center;\r\n}\r\n\r\n#maincatalogbody {\r\n height:99%;\r\n background-image: url(img/body.gif);\r\n width:100%;\r\n left:5;\r\n top:3;\r\n position:absolute;\r\n}\r\n\r\n.imgbutton {\r\n background-color:#CCCCCC;\r\n font-weight:bold;\r\n color:black;\r\n border:3 outset lightgray;\r\n margin:2px;\r\n padding:2;\r\n cursor:hand;\r\n align:center;\r\n font-size:80%;\r\n}\r\n\r\n.numberbutton {\r\n background-color:#CCCCCC;\r\n font-weight:normal;\r\n color:black;\r\n margin:1px;\r\n cursor:hand;\r\n align:center;\r\n border:3 outset lightgray;\r\n height:20px;;\r\n width:120px;\r\n vertical-align:bottom;\r\n padding : 0 0 0 5;\r\n font-size:80%;\r\n \r\n}\r\n\r\n.numberbuttonpushed {\r\n background-color:#E0E0E0;\r\n font-weight:bold;\r\n /*color:blue;*/\r\n margin:1px;\r\n cursor:hand;\r\n align:center;\r\n border:3 inset lightgray;\r\n height:20px;;\r\n width:120px;\r\n vertical-align:bottom;\r\n padding : 0 0 0 5;\r\n font-size:80%;\r\n \r\n}\r\n.actionsmallbutton {\r\n background-color:#CCCCCC;\r\n font-weight:bold;\r\n color:black;\r\n margin:1px;\r\n cursor:hand;\r\n align:center;\r\n font-size:70%;\r\n border:2 outset lightgray;\r\n height:11px;\r\n width:11px;\r\n vertical-align:bottom;\r\n}\r\n.actionbutton {\r\n background-color:#CCCCCC;\r\n font-weight:bold;\r\n color:black;\r\n margin:2px;\r\n cursor:hand;\r\n align:center;\r\n font-size:60%;\r\n border:5 outset lightgray;\r\n height:25px;\r\n width:25px;\r\n vertical-align:top;\r\n}\r\n\r\n.actionbuttonpushed {\r\n background-color:#E0E0E0;\r\n font-weight:bold;\r\n color:black;\r\n margin:2px;\r\n align:center;\r\n font-size:70%;\r\n border:5 inset lightgray;\r\n height:25px;\r\n width:25px;\r\n vertical-align:top;\r\n cursor:hand;\r\n \r\n}\r\n\r\n\r\n.treecell {\r\n padding:0 0 2 2;\r\n}\r\n.treespacer {\r\n padding:0;\r\n margin:0;\r\n min-height:2px;\r\n font-size:1px;\r\n width:200px;\r\n \r\n}\r\n.popupform {\r\n align : center;\r\n font-size: 90%;\r\n color : black;\r\n background-image: url(img/body.gif);\r\n}\r\n\r\n.popuptitle {\r\n font-size: 120%;\r\n font-weight : bold;\r\n letter-spacing : 1;\r\n}\r\n.popuptab {\r\n font-size: 110%;\r\n letter-spacing : 1;\r\n border-top : 1 solid black;\r\n border-right : 1 solid black;\r\n bor\r\n0438\r\nder-left : 1 solid black;\r\n padding : 4;\r\n margin : 8 3 0 3;\r\n width : 100%;\r\n height:80%;\r\n vertical-align:text-top;\r\n background-color:black;\r\n align:center; \r\n color:black;\r\n cursor:hand;\r\n}\r\n.tabselected {\r\n font-size: 110%;\r\n letter-spacing : 1;\r\n border : 1 solid black;\r\n border-bottom : 0;\r\n padding : 4 4 0 4;\r\n margin : 0;\r\n text-align : left;\r\n vertical-align:text-top;\r\n align:center;\r\n background-color:#E0E0E0;\r\n color:black;\r\n}\r\n\r\n.popupbutton {\r\n width: 100px;\r\n}\r\n\r\n.resultlist {\r\n align:center;\r\n color: black;\r\n width:100%;\r\n height:89%;\r\n overflow:auto;\r\n position:absolute;\r\n background-color:#E0E0E0;\r\n \r\n}\r\n.resultrow {\r\n font-weight:normal;\r\n font-size:75%;\r\n vertical-align:text-top;\r\n padding:1;\r\n margin:0;\r\n color : black;\r\n cursor:hand;\r\n min-height:16px;\r\n}\r\n.resultheading {\r\n background-color:#CCCCCC;\r\n font-weight:bold;\r\n color:black;\r\n border:3 outset lightgray;\r\n margin:2px;\r\n padding-left:5;\r\n cursor:hand;\r\n align:center;\r\n font-size:85%;\r\n}\r\n.actiontextarea {\r\n font-size:90%;\r\n text-align:left;\r\n width:100%;\r\n height:100px;\r\n}\r\n\r\n</style>\r\n0fe8\r\n\r\n\r\n</head>\r\n<body onload=\"init();\" >\r\n\r\n\r\n<div id=\"mainbody\" >\r\n\r\n<form name=\"resetuserform\" target=\"_self\" action=\"servlet/DrsResetUser\" method=\"post\">\r\n<input type=hidden name=\"resetuser_dirid\" id=\"resetuser_dirid\" value=\"3619010001:046182\">\r\n</form>\r\n\r\n<form name=\"presenceform\" target=\"_self\" action=\"DrsPresence\" method=\"post\">\r\n<input type=hidden name=\"presence_code\" id=\"presence_code\" value=\"\">\r\n<input type=hidden name=\"presence_divertnbr\" id=\"presence_divertnbr\" value=\"\">\r\n<input type=hidden name=\"presence_until\" id=\"presence_until\" value=\"\">\r\n<input type=hidden name=\"presence_dirid\" id=\"presence_dirid\" value=\"\">\r\n<input type=hidden name=\"presence_text\" id=\"presence_text\" value=\"\">\r\n<input type=hidden name=\"presence_preset\" id=\"presence_preset\" value=\"\">\r\n</form>\r\n\r\n<div class=\"maintitle\" style=\"width:100%\">\r\n<table cellspacing=0 cellpadding=3 width=\"100%\" >\r\n<tr>\r\n <td class=\"maintitle\" style=\"width:100%\" align=baseline>\r\n <img src=\"img/spacer.gif\" height=50 width=2>\r\n Sambal Bij (1100)\r\n<!-- toolbox -->\r\n <td align=right valign=baseline nowrap> \r\n \r\n <span id=\"resetbutton\" class=\"actionbutton\" onclick=\"resetUserSettings()\" >\r\n <img src=\"img/spacer.gif\" width=\"25\" heigth=\"25\">Reset user settings\r\n </span>\r\n \r\n <span id=\"logoutbutton\" class=\"actionbutton\" onclick=\"logout()\" >\r\n <img src=\"img/spacer.gif\" width=\"25\" heigth=\"25\">Log out\r\n </span>\r\n<tr><td colspan=2><hr>\r\n\r\n</table>\r\n\r\n</div>\r\n\r\n<div class=\"settingsbody\" id=\"presencemenu\">\r\n\r\n<table style=\"width:100%;color:black;background-color:#E0E0E0\" border=0 cellpadding=3 cellspacing=2>\r\n<tr><td style=\"width:35%;border:1 solid gray;\">\r\n\r\n <table style=\"width:100%;color:black;background-color:#E0E0E0\" border=0 cellpadding=3 cellspacing=2>\r\n <tr><td style=\"font-size:100%\"><b>Presence\r\n \r\n\r\n <td nowrap> <img src='img/not_available_no_CFP.gif'>Left for the day\r\n\r\n\r\n <tr>\r\n <td colspan=2><hr>\r\n \r\n\r\n" & + " <tr style=\"display:\"><td colspan=2>Predefined options\r\n \r\n\r\n <tr style=\"display:\">\r\n <td colspan=2 >\r\n <span style=\"width:70%\" class='imgbutton' onclick=\"presetPresence('0');\" >\r\n <img src='img/available.gif' width=16 height=16>Change to Available\r\n </span>\r\n <br>\r\n\r\n <tr style=\"display:\">\r\n <td colspan=2 >\r\n <span style=\"width:70%\" class='imgbutton' onclick=\"presetPresence('1');\" >\r\n <img src='img/not_available_no_CFP.gif' width=16 height=16>Change to Busy\r\n </span>\r\n <br>\r\n\r\n <tr style=\"display:\">\r\n <td colspan=2 >\r\n <span style=\"width:70%\" class='imgbutton' onclick=\"presetPresence('2');\" >\r\n <img src='img/not_available_no_CFP.gif' width=16 height=16>Change to Meeting\r\n </span>\r\n <br>\r\n\r\n <tr style=\"display:\">\r\n <td colspan=2 >\r\n <span style=\"width:70%\" class='imgbutton' onclick=\"presetPresence('3');\" >\r\n <img src='img/not_available_no_CFP.gif' width=16 height=16>Change to Lunch\r\n </span>\r\n <br>\r\n\r\n <tr style=\"display:\">\r\n <td colspan=2 >\r\n <span style=\"width:70%\" class='imgbutton' onclick=\"presetPresence('4');\" >\r\n <img src='img/not_available_no_CFP.gif' width=16 height=16>Change to Left for the day\r\n </span>\r\n <br>\r\n\r\n <tr>\r\n <td colspan=2><br><hr>\r\n \r\n <tr><td ><a href=# onclick=\"showmoreoptions()\" >More options...</a>\r\n \r\n <td style=\"display:none\" id=\"moreoptionsbutton\" nowrap align=right><span class=\"imgbutton\" style=\"font-size:75%\" onclick=\"setPresence();\">\r\n <img id=\"actionimage\" src=\"img/spacer.gif\"> \r\n Change now</span>\r\n \r\n\r\n <tr>\r\n <td colspan=2>\r\n <table id=\"moreoptionstable\" style=\"display:none\">\r\n <tr>\r\n <td colspan=2 valign=top >\r\n <select style=\"width:100%\" id=\"pcodelist\" onchange=\"pcodeChanged(this)\" >\r\n <option value=''>------------------------------------</option>\r\n<option value='1_'>Busy - No diversion\n<option value='1_-1'>Busy - All calls to main number\n<option value='1_-2'>Busy - All calls to voicemail\n<option value='1_x'>Busy - All calls to number\n<option value=''>------------------------------------</option>\n<option value='2_'>Meeting - No diversion\n<option value='2_-1'>Meeting - All calls to\r\n0f53\r\n main number\n<option value='2_-2'>Meeting - All calls to voicemail\n<option value='2_x'>Meeting - All calls to number\n<option value=''>------------------------------------</option>\n<option value='3_'>Lunch - No diversion\n<option value='3_-1'>Lunch - All calls to main number\n<option value='3_-2'>Lunch - All calls to voicemail\n<option value='3_x'>Lunch - All calls to number\n<option value=''>------------------------------------</option>\n<option value='4_'>Left for the day - No diversion\n<option value='4_-1'>Left for the day - All calls to main number\n<option value='4_-2'>Left for the day - All calls to voicemail\n<option value='4_x'>Left for the day - All calls to number\n<option value=''>------------------------------------</option>\n<option value='5_'>Returns - No diversion\n<option value='5_-1'>Returns - All calls to main number\n<option value='5_-2'>Returns - All calls to voicemail\n<option value='5_x'>Returns - All calls to number\n<option value=''>------------------------------------</option>\n\r\n \r\n </select>\r\n <tr><td colspan=2>\r\n <input type=text value=\"\" onkeyup=\"NumberChanged(this)\" style=\"display:none\" id=\"diversionnbr\">\r\n\r\n <tr>\r\n <td style=\"font-size:90%;\" nowrap colspan=2>Back \r\n <span style=\"font-size:75%\">(MM/dd/yyyy)</span>\r\n <input type=text id=\"untildate\" value=\"\" size=\"10\">\r\n <span style=\"font-size:75%\">(HH:mm)</span>\r\n <input type=text id=\"untiltime\" value=\"\" size=\"5\">\r\n <tr>\r\n <td colspan=2 valign=top width=30%><b>Message\r\n \r\n <tr > \r\n <td colspan=2 valign=top >\r\n <textarea style=\"width:99%;\" rows=5 classname=\"actiontextarea\"\r\n id=\"p_text\" onkeydown=\"this.value='';this.onkeydown=null\" onkeyup=\"divmsgChanged(this)\">Here you can write your message to the attendant and others. Max 255 characters.</textarea>\r\n \r\n \r\n </table><!--more options-->\r\n </table>\r\n\r\n<!-- Call deflect -->\r\n<td style=\"width:35%;border:1 solid gray;display:none\" valign=top>\r\n <table style=\"color:black;background-color:#E0E0E0;width:100%\" border=0 cellpadding=3 cellspacing=2>\r\n <tr><td style=\"font-size:100%\"><b>Deflect call\r\n <td align=right><input class=\"imgbutton\" style=\"font-size:80%;\" \r\n type=\"button\" value=\"Change\" onclick=\"SetDeflect()\" >\r\n \r\n <tr><td colspan=2><hr> \r\n <tr onmouseover=\"tr_mouseover(this);\" onmouseout=\"tr_mouseout(this)\" class=treerow>\r\n <td colspan=2><input onclick=\"cfClicked(this);\" type=radio id=\"cf_operator\" name=\"cf\" value=\"-1\" > Main number\r\n <tr onmouseover=\"tr_mouseover(this);\" onmouseout=\"tr_mouseout(this)\" class=treerow>\r\n <td colspan=2><input onclick=\"cfClicked(this);\" type=radio id=\"cf_voicemail\" name=\"cf\" value=\"-2\" > Voicemail\r\n <tr onmouseover=\"tr_mouseover(this);\" onmouseout=\"tr_mouseout(this)\" class=treerow>\r\n <td colspan=2><input onclick=\"cfClicked(this);\" type=radio id=\"cf_x\" name=\"cf\" value=\"X\" > Phone\r\n <input type=text name=\"cf_number\" id=\"cf_number\" onkeyup=\"NumberChanged(this);\" style=\"visibility:hidden\" value=\"\">\r\n \r\n </table>\r\n\r\n\r\n<form name=\"calldeflectform\" target=\"_self\" action=\"servlet/DrsDeflect\" method=\"post\">\r\n<input type=hidden name=\"dirid\" id=\"dirid\" value=\"\">\r\n<input type=hidden name=\"calldeflectnr\" id=\"calldeflectnr\" value=\"\">\r\n</form>\r\n\r\n<!-- CDG/huntgroups -->\r\n<td style=\"width:35%;border:1 solid gray;\" valign=top>\r\n <form name=\"hgsettng\" target=\"_self\" action=\"servlet/DrsHuntGroup\" method=\"post\">\r\n <input type=hidden name=\"dirid\" id=\"dirid\" value=\"\">\r\n <table style=\"color:black;background-color:#E0E0E0;width:100%\" border=0 cellpadding=3 cellspacing=2>\r\n <tr><td style=\"font-size:100%;\"><b>Activate/deactivate <br>Call distribution groups\r\n <td align=right valign=top><input class=\"imgbutton\" style=\"font-size:80%;\" \r\n type=\"button\" value=\"Change\" onclick=\"ActivateGroups()\" >\r\n <tr><td colspan=2><hr> \r\n<tr><td>Not member of any call distribution group\n\r\n </form>\r\n </table>\r\n\r\n</table>\r\n</div>\r\n</div>\r\n\r\n</body>\r\n</html>\r\n\r\n0000\r\n\r\n" + }; + + var HTTPResponse resp := { client_id := omit, version_major := 1, version_minor := 1, statuscode := 200, statustext := "OK", + header := { { header_name := "Server", header_value := "TTCN Test Suite simulated HTTP/1.1 server" }, + { header_name := "Content-Length", header_value := int2str(lengthof(test_msgs[0])+ lengthof(test_msgs[1])) } }, + body := test_msgs[0] & test_msgs[1] }; + var HTTPMessage send_resp := { response := resp }; + + f_singleEncDecCheck( send_resp ); + + var octetstring received_reply := '485454502F312E3120333032204D6F7665642054656D706F726172696C790D0A446174653A205765642C2032322046656220323030362031333A33373A343920474D540D0A507261676D613A206E6F2D63616368650D0A4C6F636174696F6E3A20687474703A2F2F6361796C656D2E65746D2E6572696373736F6E2E73653A373030312F4D63784F77752F6C6973745F75736572616374696F6E732E6A73703F72656C6F61640D0A436F6E74656E742D547970653A20746578742F68746D6C0D0A457870697265733A205361742C2036204D617920313939352031323A30303A303020474D540D0A5472616E736665722D456E636F64696E673A206368756E6B65640D0A43616368652D436F6E74726F6C3A206E6F2D73746F72652C206E6F2D63616368652C206D7573742D726576616C69646174650D0A43616368652D436F6E74726F6C3A20706F73742D636865636B3D302C207072652D636865636B3D300D0A0D0A3C68746D6C3E3C686561643E3C7469746C653E333032204D6F7665642054656D706F726172696C793C2F7469746C653E3C2F686561643E0D0A3C626F6479206267636F6C6F723D2223464646464646223E0D0A3C703E5468697320646F63756D656E7420796F752072657175657374656420686173206D6F7665642074656D706F726172696C792E3C2F703E0D0A3C703E49742773206E6F77206174203C6120687265663D22687474703A2F2F6361796C656D2E65746D2E6572696373736F6E2E73653A373030312F4D63784F77752F6C6973745F75736572616374696F6E732E6A73703F72656C6F6164223E687474703A2F2F6361796C656D2E65746D2E6572696373736F6E2E73653A373030312F4D63784F77752F6C6973745F75736572616374696F6E732E6A73703F72656C6F61643C2F613E2E3C2F703E0D0A3C2F626F64793E3C2F68746D6C3E0D0A485454502F312E3120323030204F4B0D0A446174653A205765642C2032322046656220323030362031333A33373A343920474D540D0A436F6E74656E742D547970653A20746578742F68746D6C0D0A5472616E736665722D456E636F64696E673A206368756E6B65640D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A3C21444F43545950452048544D4C205055424C494320222D2F2F5733432F2F4454442048544D4C20342E3031205472616E736974696F6E616C2F2F454E223E0D0A0D0A3C68746D6C3E0D0A3C686561643E0D0A3C7469746C653E50726573656E63653C2F7469746C653E0D0A0D0A3C7363726970743E0D0A766172206672616D6573657432203D206E756C6C3B0D0A766172206672616D6573657431203D206E756C6C3B0D0A0D0A7661722077696E57203D203633302C2077696E48203D203436303B0D0A0D0A66756E6374696F6E2067657457696E53697A652829207B0D0A09696620287061727365496E74286E6176696761746F722E61707056657273696F6E293E3329207B0D0A0920696620286E6176696761746F722E6170704E616D653D3D224E657473636170652229207B0D0A09202077696E57203D2077696E646F772E696E6E657257696474683B0D0A09202077696E48203D2077696E646F772E696E6E65724865696768743B0D0A09207D0D0A0920696620286E6176696761746F722E6170704E616D652E696E6465784F6628224D6963726F736F66742229213D2D3129207B0D0A09202077696E57203D20646F63756D656E742E626F64792E6F666673657457696474683B0D0A09202077696E48203D20646F63756D656E742E626F64792E6F66667365744865696768743B0D0A09207D0D0A097D0D0A092F2F616C657274282277696E573D22202B2077696E57202B20222077696E483D22202B2077696E48293B0D0A7D0D0A7661722063757272526F77203D206E756C6C3B0D0A66756E6374696F6E2074725F6D6F7573656F76657228726F7729207B0D0A096966202821726F7729207B0D0A0909726F77203D20676574726F772877696E646F772E6576656E742E737263456C656D656E74293B0D0A09096966202821726F772972657475726E3B0D0A097D0D0A0969662028726F772E7374796C652E6261636B67726F756E64436F6C6F72203D3D20222229207B0D0A0909726F772E7374796C652E6261636B67726F756E64436F6C6F72203D20226C6967687467726579223B0D0A097D0D0A7D0D0A0D0A66756E6374696F6E2074725F6D6F7573656F757428726F7729207B0D0A096966202821726F7729207B0D0A0909726F77203D20676574726F772877696E646F772E6576656E742E737263456C656D656E74293B0D0A09096966202821726F772972657475726E3B0D0A097D0D0A0969662028726F772E7374796C652E6261636B67726F756E64436F6C6F72203D3D20226C69676874677265792229207B0D0A0909726F772E7374796C652E6261636B67726F756E64436F6C6F723D2022223B0D0A097D0D0A7D0D0A0D0A66756E6374696F6E20676574726F77286F626A290D0A7B0D0A097768696C65286F626A202626206F626A2E7461674E616D6520213D202254522229206F626A203D206F626A2E706172656E744E6F64653B0D0A0972657475726E206F626A3B0D0A7D0D0A2F2F2052656D6F7665206C656164696E6720616E6420747261696C696E672077686974652073706163650D0A66756E6374696F6E207472696D2874787429207B090D0A092F2F616C65727428227472696D3D22202B20747874293B0D0A090D0A09747279207B0D0A090972657475726E207478742E7265706C616365282F285E202B297C28202B24297C2809292F672C2222293B0D0A097D20636174636820286529207B0D0A09097661722078203D206E657720537472696E6728747874293B0D0A0909092F2F616C6572742822783D22202B2078293B0D0A09097768696C652028782E636861724174283029203D3D2022202229207B0D0A09090978203D20782E737562737472696E672831293B0D0A09090969662028782E6C656E677468203D3D2030292072657475726E2022223B0D0A0909092F2F616C6572742822783D22202B2078293B0D0A09097D0D0A090969662028782E6C656E677468203D3D2030292072657475726E2022223B0D0A09097768696C652028782E63686172417428782E6C656E677468202D203129203D3D2022202229207B0D0A09090978203D20782E737562737472696E6728302C20782E6C656E6774682D31293B0D0A09090969662028782E6C656E677468203D3D2030292072657475726E2022223B0D0A09097D0D0A090D0A090972657475726E20783B090D0A09090D0A090D0A097D0D0A0D0A7D0D0A0D0A66756E6374696F6E206E6F74796574696D706C656D656E74656428290D0A7B0D0A09616C65727428226E6F742079657420696D706C656D656E74656422293B0D0A7D0D0A0D0A66756E6374696F6E206C6F676F757428290D0A7B0D0A09746F702E6672616D65735B225F6F77755F68696464656E225D2E6C6F636174696F6E2E61737369676E282268696464656E5F6C6F676F75742E6A737022293B0D0A2F2F0977696E646F772E706172656E742E6672616D65735B225F6F77755F68696464656E225D2E6C6F636174696F6E2E61737369676E282268696464656E5F6C6F676F75742E6A737022293B0D0A7D0D0A66756E6374696F6E20646F7265667265736828290D0A7B0D0A09747279207B0D0A0909746F702E6672616D65735B225F6F77755F73696465626172225D2E6C6F636174696F6E203D202250726570617265536964656261723F6E6F73656C656374223B0D0A097D20636174636820286529207B0D0A0909616C65727428226661696C656420746F2072656C6F6164206672616D657322202B20652E746F537472696E672829293B0D0A097D0D0A7D0D0A0D0A66756E6374696F6E204E756D6265724368616E676564286F626A29207B0D0A0D0A097661722076616C203D206F626A2E76616C75653B0D0A09766172206C656164696E67706C7573203D2066616C73653B0D0A096966202876616C2E736561726368282F5E5C2B2F29203D3D203029207B0D0A09096C656164696E67706C7573203D20747275653B0D0A090976616C20203D2076616C2E737562737472696E672831293B0D0A097D0D0A096966202876616C2E736561726368282F5B5E302D395D2F29203E3D203029207B200D0A09092F2F616C6572742822476976652061206E756D62657222293B0D0A090976616C203D2076616C2E7265706C616365282F5B5E302D395D2F672C202222293B0D0A0909696620286C656164696E67706C757329207B0D0A0909096F626A2E76616C7565203D20222B22202B2076616C3B0D0A09097D20656C7365207B0D0A0909096F626A2E76616C7565203D2076616C3B0D0A09097D0D0A097D0D0A090D0A7D0D0A0D0A766172206D6F64616C4F626A2C206D6F64616C46756E632C206D6F64616C57696E3B0D0A66756E6374696F6E2073686F774D6F64616C286F626A2C2066756E632C2066696C656E616D652C20617267732C20617267733129207B0D0A097661722072657476616C203D2022223B0D0A2F2F096966202877696E646F772E73686F774D6F64616C4469616C6F6729207B0D0A2F2F090972657476616C203D2077696E646F772E73686F774D6F64616C4469616C6F672866696C656E616D652C20617267732C206172677331293B0D0A2F2F097D20656C7365207B0D0A09096D6F64616C4F626A203D206F626A3B0D0A09096D6F64616C46756E63203D2066756E633B0D0A0909646F63756D656E742E676574456C656D656E744279496428226D6F64616C41726722292E76616C7565203D20617267733B0D0A09096172677331203D2061726773312E7265706C616365282F3B2F672C20222C22293B0D0A09096172677331203D2061726773312E7265706C616365282F3A2F672C20223D22293B0D0A09096172677331203D2061726773312E7265706C616365282F6469616C6F6757696474682F672C2022776964746822293B0D0A09096172677331203D2061726773312E7265706C616365282F6469616C6F674865696768742F672C202268656967687422293B0D0A09096172677331203D2061726773312E7265706C616365282F6469616C6F67546F702F672C2022746F7022293B0D0A09096172677331203D2061726773312E7265706C616365282F6469616C'O & + '6F674C6566742F672C20226C65667422293B0D0A09096172677331203D2061726773312E7265706C616365282F7363726F6C6C2F672C20227363726F6C6C6261727322293B0D0A09090D0A09092F2F616C65727428226D6F64616C3A22202B20617267733120293B0D0A09092F2F616C657274282277696E646F772E6C6566743D22202B2077696E646F772E73637265656E2E6C656674202B20222077696E646F772E746F703D22202B2077696E646F772E73637265656E2E746F700D0A09092F2F092B20225C77696E646F772E7363726565583D22202B2077696E646F772E73637265656E58202B20222077696E646F772E73637265656E593D22202B2077696E646F772E73637265656E59293B0D0A0D0A09092F2F616C657274282273686F776D6F64616C3A22202B206172677331293B0D0A09202020092F2F6D6F64616C57696E203D2077696E646F772E6F70656E2866696C656E616D652C202220222C20617267733120293B0D0A09202020092F2F66696C656E616D65203D2022696E646578706F7075702E6A73703F22202B2066696C656E616D653B0D0A09096D6F64616C57696E203D2077696E646F772E6F70656E2866696C656E616D652C20225F6F77755F706F707570222C206172677331293B0D0A09096D6F64616C57696E2E666F63757328293B0D0A09090D0A2F2F097D0D0A0972657475726E2072657476616C3B0D0A7D0D0A0D0A66756E6374696F6E206D6F64616C446F6E652829207B0D0A09696620286D6F64616C4F626A202626206D6F64616C46756E6329207B0D0A09096D6F64616C46756E63286D6F64616C4F626A2C2020646F63756D656E742E676574456C656D656E744279496428226D6F64616C52657476616C22292E76616C7565293B0D0A097D0D0A7D0D0A0D0A66756E6374696F6E20676F4261636B2829207B0D0A096966202877696E646F772E6E616D65203D3D20225F6F77755F6C6973742229207B0D0A090977696E646F772E6C6F636174696F6E2E61737369676E28226C6973745F636174616C6F672E6A73703F636174616C6F673D636174616C6F67756522293B0D0A097D20656C7365207B0D0A090977696E646F772E686973746F72792E676F282D31293B0D0A097D0D0A7D0D0A66756E6374696F6E207363726F6C6C3256696577286F626A290D0A7B0D0A202020747279207B0D0A2020202076617220706172656E74203D206F626A2E706172656E744E6F64653B0D0A202020207768696C652028706172656E7420262620706172656E742E7461674E616D6520213D20282244495622292920706172656E74203D20706172656E742E706172656E744E6F64653B0D0A2020200D0A202020202F2F616C65727428227363726F6C6C32766965773D22202B20706172656E742E6964293B0D0A2020202076617220746F7473697A6520203D20706172656E742E6F66667365744865696768743B20202F2F2074686973206973207468652076697369626C652061726561200D73697A650D0A202020207661722063757272746F70203D20706172656E742E7363726F6C6C546F703B2020202020202F2F6865726520626567696E73207468652076697369626C6520617265610D0A2020202076617220626567696E506F73203D206F626A2E6F6666736574546F703B0D0A202020207661722073746570203D206F626A2E6F6666736574486569676874202B20333B0D0A2020202F2F09616C6572742822737465703D22202B2073746570202B20222070616464696E673D22202B206F626A2E7374796C652E70616464696E67546F70293B0D0A2020202076617220656E64506F73203D20626567696E506F73202B20737465703B0D0A202020200D0A202020207768696C652028656E64506F73203E202863757272746F70202B20746F7473697A65292920207B0D0A2020202020202063757272746F70202B3D20737465703B0D0A202020207D0D0A202020207768696C652028626567696E506F73203C2063757272746F7029207B0D0A2020202020202063757272746F70202D3D20737465703B0D0A202020207D0D0A20202020706172656E742E7363726F6C6C546F70203D2063757272746F703B0D0A202020202F2F77696E646F772E737461747573203D20227363726F6C6C746F703D22202B2063757272746F703B0D0A2020207D206361746368286529207B0D0A20202020202077696E646F772E737461747573203D20224661696C656420207363726F6C6C3276696577223B0D0A2020207D0D0A7D0D0A0D0A3C2F7363726970743E0D0A0D0A3C7363726970743E0D0A0D0A66756E6374696F6E20696E69742829207B0D0A092F2F646F63756D656E742E676574456C656D656E74427949642822705F7465787422292E73656C65637428293B0D0A0D0A0D0A090976617220646F72656C6F6164203D202272656C6F6164223B0D0A090969662028646F72656C6F61643D3D202272656C6F61642229207B0D0A090909646F7265667265736828293B0D0A09097D0D0A09090D0A0909766172206572726F726D7367203D2022223B0D0A0909696620286572726F726D736720213D20222229207B0D0A0909096572726F726D7367203D206572726F726D73672E7265706C616365282F5E6572726F723D2F692C202222293B0D0A0909096572726F726D7367203D206572726F726D73672E7265706C616365282F5C2532302F672C20222022293B0D0A090909616C657274286572726F726D7367293B0D0A09097D0D0A090D0A7D0D0A0D0A66756E6374696F6E2072656D6F766550726573656E63652829207B0D0A09646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F636F646522292E76616C7565203D202230223B0D0A09646F63756D656E742E666F726D735B2270726573656E6365666F726D225D2E7375626D697428293B0D0A7D0D0A0D0A66756E6374696F6E2070636F64654368616E676564286F626A29207B0D0A092F2F616C657274282270636F64656368616E6765643D22202B206F626A2E6F7074696F6E735B6F626A2E73656C6563746564496E6465785D2E76616C7565293B0D0A097661722070636F646573203D206F626A2E6F7074696F6E735B6F626A2E73656C6563746564496E6465785D2E76616C75653B0D0A096966202870636F646573203D3D202222292072657475726E3B0D0A090D0A0976617220746D70203D2070636F6465732E73706C697428225F22293B0D0A097661722070636F6465203D20746D705B305D3B0D0A09766172206E756D626572203D20746D705B315D3B0D0A090D0A0976617220616374696F6E696D616765203D20646F63756D656E742E676574456C656D656E74427949642822616374696F6E696D61676522293B0D0A0969662028616374696F6E696D61676529207B0D0A0909696620286E756D626572203D3D20222229207B0D0A090909616374696F6E696D6167652E7372633D22696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966223B0D0A09097D20656C7365207B0D0A090909616374696F6E696D6167652E7372633D22696D672F6E6F745F617661696C61626C655F4346502E676966223B0D0A09097D0D0A097D0D0A09696620286E756D626572203D3D2022782229207B0D0A0909646F63756D656E742E676574456C656D656E74427949642822646976657273696F6E6E627222292E7374796C652E646973706C6179203D2022223B0D0A097D20656C7365207B0D0A0909646F63756D656E742E676574456C656D656E74427949642822646976657273696F6E6E627222292E7374796C652E646973706C6179203D20226E6F6E65223B0D0A097D0D0A7D0D0A66756E6374696F6E2073657450726573656E63652829207B0D0A097661722070636F64656C697374203D20646F63756D656E742E676574456C656D656E7442794964282270636F64656C69737422293B0D0A096966202870636F64656C6973742E73656C6563746564496E646578203C30207C7C2070636F64656C6973742E6F7074696F6E735B70636F64656C6973742E73656C6563746564496E6465785D2E76616C7565203D3D20222229207B0D0A0909616C6572742822646F207069636B20612076616C6964206F7074696F6E22290D0A090972657475726E3B0D0A097D0D0A097661722070636F646573203D2070636F64656C6973742E6F7074696F6E735B70636F64656C6973742E73656C6563746564496E6465785D2E76616C7565203B0D0A0976617220746D70203D2070636F6465732E73706C697428225F22293B0D0A097661722070636F6465203D20746D705B305D3B0D0A09766172206E756D626572203D20746D705B315D3B0D0A090D0A09646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F636F646522292E76616C7565203D2070636F64653B0D0A09696620286E756D626572203D3D2022782229207B0D0A09096E756D626572203D207472696D28646F63756D656E742E676574456C656D656E74427949642822646976657273696F6E6E627222292E76616C7565293B0D0A097D200D0A09646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F6469766572746E627222292E76616C7565203D206E756D6265723B0D0A090D0A0976617220756E74696C203D20646F63756D656E742E676574456C656D656E74427949642822756E74696C6461746522292E76616C7565200D0A090909092B20222022202B20646F63756D656E742E676574456C656D656E74427949642822756E74696C74696D6522292E76616C75653B0D0A09756E74696C203D207472696D28756E74696C293B0D0A0969662028756E74696C20213D20222229207B0D0A0909646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F756E74696C22292E76616C7565203D20756E74696C3B0D0A097D0D0A090D0A09766172206D7367656C656D20203D20646F63756D656E742E676574456C656D656E74427949642822705F7465787422293B0D0A092F2F6A757374206D616B6520737572652074686174207468652074657874206973206E6F742074686520696E697469616C206578706C2E20746578742E0D0A09696620286D7367656C656D2E6F6E6B6579646F776E203D3D206E756C6C29207B200D0A0909766172207074657874203D207472696D286D7367656C656D2E76616C7565293B0D0A090969662028707465787420213D20222229207B0D0A090909646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F7465787422292E76616C7565203D2070746578743B0D0A09097D0D0A097D0D0A09646F63756D656E742E666F726D735B2270726573656E6365666F726D225D2E7375626D697428293B0D0A7D0D0A66756E6374696F6E2070726573657450726573656E6365'O & + '2869647829207B0D0A09646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F70726573657422292E76616C7565203D206964783B0D0A09646F63756D656E742E666F726D735B2270726573656E6365666F726D225D2E7375626D697428293B0D0A090D0A7D0D0A0D0A66756E6374696F6E205365744465666C65637428290D0A7B0D0A0976617220656C656D73203D20646F63756D656E742E676574456C656D656E747342794E616D652822636622293B0D0A09666F72202876617220693D303B2069203C656C656D732E6C656E6774683B20692B2B29207B0D0A090969662028656C656D735B695D2E636865636B656429207B0D0A090909766172206465666C6563746E72203D20656C656D735B695D2E76616C75653B0D0A090909696620286465666C6563746E72203D3D2022582229207B0D0A090909096465666C6563746E72203D20646F63756D656E742E676574456C656D656E7442794964282263665F6E756D62657222292E76616C75653B0D0A0909097D0D0A090909646F63756D656E742E676574456C656D656E7442794964282263616C6C6465666C6563746E7222292E76616C7565203D206465666C6563746E723B0D0A090909627265616B3B0D0A09097D0D0A097D0D0A09646F63756D656E742E666F726D735B2263616C6C6465666C656374666F726D225D2E7375626D697428293B0D0A7D0D0A0D0A66756E6374696F6E206366436C69636B6564286F626A29207B0D0A092F2F616C65727428226F626A3D22202B206F626A2E636865636B6564293B0D0A09696620286F626A2E636865636B6564202626206F626A2E76616C7565203D3D2022582229207B0D0A0909646F63756D656E742E676574456C656D656E7442794964282263665F6E756D62657222292E7374796C652E7669736962696C697479203D2022223B0D0A0909646F63756D656E742E676574456C656D656E7442794964282263665F6E756D62657222292E666F63757328293B0D0A097D20656C7365207B0D0A0909646F63756D656E742E676574456C656D656E7442794964282263665F6E756D62657222292E7374796C652E7669736962696C697479203D202268696464656E223B0D0A097D0D0A7D0D0A0D0A66756E6374696F6E20416374697661746547726F75707328290D0A7B0D0A09646F63756D656E742E666F726D735B226867736574746E67225D2E7375626D697428293B0D0A7D0D0A0D0A66756E6374696F6E2073686F776D6F72656F7074696F6E732829207B0D0A09646F63756D656E742E676574456C656D656E744279496428226D6F72656F7074696F6E737461626C6522292E7374796C652E646973706C6179203D2022223B0D0A09646F63756D656E742E676574456C656D656E744279496428226D6F72656F7074696F6E73627574746F6E22292E7374796C652E646973706C6179203D2022223B0D0A7D0D0A66756E6374696F6E206469766D73674368616E676564286F626A29207B0D0A09696620287061727365496E74286F626A2E76616C75652E6C656E67746829203E2032353529207B0D0A09096F626A2E76616C7565203D206F626A2E76616C75652E737562737472696E6728302C323535293B0D0A0909616C65727428224D61782032353522293B0D0A097D0D0A092F2F77696E646F772E737461747573203D206F626A2E76616C75652E6C656E6774683B0D0A7D090D0A66756E6374696F6E2072657365745573657253657474696E67732829200D0A7B0D0A09646F63756D656E742E666F726D735B22726573657475736572666F726D225D2E7375626D697428293B0D0A7D0D0A3C2F7363726970743E0D0A3C7374796C6520747970653D22746578742F637373223E0D0A0D0A626F6479207B0D0A09666F6E742D66616D696C793A2076657264616E612C20617269616C3B0D0A09666F6E742D73697A653A20313030253B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A09636F6C6F72203A20626C61636B3B0D0A7D0D0A0D0A7461626C65207B0D0A09666F6E742D66616D696C793A2076657264616E612C20617269616C3B0D0A09666F6E742D73697A653A203930253B0D0A7D0D0A0D0A2E6C6F67696E666F726D207B0D0A09666F6E742D73697A653A203930253B0D0A09636F6C6F72203A20626C61636B3B0D0A7D0D0A2E627574746F6E207B0D0A09666F6E742D73697A653A3830253B0D0A09666F6E742D7765696768743A626F6C643B0D0A0970616464696E673A313B0D0A7D0D0A2E6D61696E666F726D207B0D0A09636F6C6F72203A20626C61636B3B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A09666F6E742D73697A653A3730253B0D0A0977696474683A313030253B0D0A096865696768743A313030253B0D0A0970616464696E673A303B0D0A096D617267696E3A303B0D0A0D0A7D090D0A2E617474656E64616E74666F726D207B0D0A09636F6C6F72203A20626C61636B3B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A096D617267696E3A303B0D0A0970616464696E673A303B0D0A0977696474683A313030253B0D0A096865696768743A313030253B0D0A7D0D0A0D0A2E6D61696E7469746C65207B0D0A09666F6E742D7765696768743A20626F6C643B0D0A09636F6C6F72203A20626C61636B3B0D0A096C65747465722D73706163696E673A313B0D0A096865696768743A353070783B0D0A0977696474683A32333070783B0D0A0970616464696E673A303B0D0A096D617267696E3A303B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F746F702E676966293B0D0A7D0D0A0D0A2E616374696F6E6D656E75207B0D0A09666F6E742D73697A653A203930253B0D0A09636F6C6F72203A20626C61636B3B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A096D617267696E203A20353B0D0A0970616464696E673A353B0D0A0977696474683A3939253B0D0A0D0A7D0D0A2E616374696F6E64726F70646F776E207B0D0A09636F6C6F72203A20626C61636B3B0D0A7D0D0A0D0A2E736561726368666F726D207B0D0A09666F6E742D73697A653A203930253B0D0A09636F6C6F72203A20626C61636B3B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A7D0D0A0D0A2F2A2055736564206279207468652073696465626172202A2F0D0A236D61696E626F6479207B0D0A096865696768743A3939253B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B200D0A096D696E2D77696474683A31333070783B0D0A096C6566743A353B0D0A09746F703A333B0D0A09706F736974696F6E3A6162736F6C7574653B0D0A090D0A7D0D0A0D0A2E6D656E7574726565207B0D0A0970616464696E673A303B0D0A09616C69676E3A63656E7465723B0D0A09636F6C6F723A20626C61636B3B0D0A096D696E2D77696474683A32333070783B0D0A0977696474683A313030253B0D0A7D0D0A0D0A2E73657474696E6773626F6479207B0D0A0970616464696E673A303B0D0A09616C69676E3A63656E7465723B0D0A09636F6C6F723A20626C61636B3B0D0A096D696E2D77696474683A31393870783B0D0A0977696474683A313030253B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A09746F703A373070783B0D0A09706F736974696F6E3A6162736F6C7574653B0D0A09666F6E742D7765696768743A6E6F726D616C3B0D0A096865696768743A3930253B0D0A09666F6E742D73697A653A3830253B0D0A7D0D0A2E73657474696E67736C697374207B0D0A09666F6E742D73697A653A3830253B0D0A7D0D0A2E696E7075746669656C64207B0D0A09666F6E742D73697A653A3930253B0D0A7D0D0A2E73657474696E677368656164696E67207B0D0A0970616464696E673A30203020302031323B0D0A0977696474683A3330253B0D0A7D0D0A2E74726565726F77207B0D0A09666F6E742D7765696768743A6E6F726D616C3B0D0A09666F6E742D73697A653A3835253B0D0A09766572746963616C2D616C69676E3A746578742D746F703B0D0A0970616464696E673A33203020332030203B0D0A096D617267696E3A303B0D0A09636F6C6F72203A20626C61636B3B0D0A09637572736F723A68616E643B0D0A096D696E2D6865696768743A313670783B0D0A7D0D0A2E726F7768656164696E67207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A09626F726465723A33206F7574736574206C69676874677261793B0D0A096D617267696E3A3270783B0D0A0970616464696E672D6C6566743A353B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A7D0D0A0D0A236D61696E636174616C6F67626F6479207B0D0A096865696768743A3939253B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A0977696474683A313030253B0D0A096C6566743A353B0D0A09746F703A333B0D0A09706F736974696F6E3A6162736F6C7574653B0D0A7D0D0A0D0A2E696D67627574746F6E207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A09626F726465723A33206F7574736574206C69676874677261793B0D0A096D617267696E3A3270783B0D0A0970616464696E673A323B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09666F6E742D73697A653A3830253B0D0A7D0D0A0D0A2E6E756D626572627574746F6E207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A6E6F726D616C3B0D0A09636F6C6F723A626C61636B3B0D0A096D617267696E3A3170783B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09626F726465723A33206F7574736574206C69676874677261793B0D0A096865696768743A323070783B3B0D0A0977696474683A31323070783B0D0A09766572746963616C2D616C69676E3A626F74746F6D3B0D0A0970616464696E67203A20302030203020353B0D0A09666F6E742D73697A653A3830253B0D0A090D0A7D0D0A0D0A2E6E756D626572627574746F6E707573686564207B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A09666F6E742D7765696768743A626F6C643B0D0A092F2A636F6C6F'O & + '723A626C75653B2A2F0D0A096D617267696E3A3170783B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09626F726465723A3320696E736574206C69676874677261793B0D0A096865696768743A323070783B3B0D0A0977696474683A31323070783B0D0A09766572746963616C2D616C69676E3A626F74746F6D3B0D0A0970616464696E67203A20302030203020353B0D0A09666F6E742D73697A653A3830253B0D0A090D0A7D0D0A2E616374696F6E736D616C6C627574746F6E207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A096D617267696E3A3170783B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09666F6E742D73697A653A3730253B0D0A09626F726465723A32206F7574736574206C69676874677261793B0D0A096865696768743A313170783B0D0A0977696474683A313170783B0D0A09766572746963616C2D616C69676E3A626F74746F6D3B0D0A7D0D0A2E616374696F6E627574746F6E207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A096D617267696E3A3270783B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09666F6E742D73697A653A3630253B0D0A09626F726465723A35206F7574736574206C69676874677261793B0D0A096865696768743A323570783B0D0A0977696474683A323570783B0D0A09766572746963616C2D616C69676E3A746F703B0D0A7D0D0A0D0A2E616374696F6E627574746F6E707573686564207B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A096D617267696E3A3270783B0D0A09616C69676E3A63656E7465723B0D0A09666F6E742D73697A653A3730253B0D0A09626F726465723A3520696E736574206C69676874677261793B0D0A096865696768743A323570783B0D0A0977696474683A323570783B0D0A09766572746963616C2D616C69676E3A746F703B0D0A09637572736F723A68616E643B0D0A090D0A7D0D0A0D0A0D0A2E7472656563656C6C207B0D0A0970616464696E673A302030203220323B0D0A7D0D0A2E74726565737061636572207B0D0A0970616464696E673A303B0D0A096D617267696E3A303B0D0A096D696E2D6865696768743A3270783B0D0A09666F6E742D73697A653A3170783B0D0A0977696474683A32303070783B0D0A090D0A7D0D0A2E706F707570666F726D207B0D0A09616C69676E203A2063656E7465723B0D0A09666F6E742D73697A653A203930253B0D0A09636F6C6F72203A20626C61636B3B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A7D0D0A0D0A2E706F7075707469746C65207B0D0A09666F6E742D73697A653A20313230253B0D0A09666F6E742D776569676874203A20626F6C643B0D0A096C65747465722D73706163696E67203A20313B0D0A7D0D0A2E706F707570746162207B0D0A09666F6E742D73697A653A20313130253B0D0A096C65747465722D73706163696E67203A20313B0D0A09626F726465722D746F70203A203120736F6C696420626C61636B3B0D0A09626F726465722D7269676874203A203120736F6C696420626C61636B3B0D0A09626F726465722D6C656674203A203120736F6C696420626C61636B3B0D0A0970616464696E67203A20343B0D0A096D617267696E203A20382033203020333B0D0A097769647468203A20313030253B0D0A096865696768743A3830253B0D0A09766572746963616C2D616C69676E3A746578742D746F703B0D0A096261636B67726F756E642D636F6C6F723A626C61636B3B0D0A09616C69676E3A63656E7465723B090D0A09636F6C6F723A626C61636B3B0D0A09637572736F723A68616E643B0D0A7D0D0A2E74616273656C6563746564207B0D0A09666F6E742D73697A653A20313130253B0D0A096C65747465722D73706163696E67203A20313B0D0A09626F72646572203A203120736F6C696420626C61636B3B0D0A09626F726465722D626F74746F6D203A20303B0D0A0970616464696E67203A20342034203020343B0D0A096D617267696E203A20303B0D0A09746578742D616C69676E203A206C6566743B0D0A09766572746963616C2D616C69676E3A746578742D746F703B0D0A09616C69676E3A63656E7465723B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A09636F6C6F723A626C61636B3B0D0A7D0D0A0D0A2E706F707570627574746F6E207B0D0A0977696474683A2031303070783B0D0A7D0D0A0D0A2E726573756C746C697374207B0D0A09616C69676E3A63656E7465723B0D0A09636F6C6F723A20626C61636B3B0D0A0977696474683A313030253B0D0A096865696768743A3839253B0D0A096F766572666C6F773A6175746F3B0D0A09706F736974696F6E3A6162736F6C7574653B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A090D0A7D0D0A2E726573756C74726F77207B0D0A09666F6E742D7765696768743A6E6F726D616C3B0D0A09666F6E742D73697A653A3735253B0D0A09766572746963616C2D616C69676E3A746578742D746F703B0D0A0970616464696E673A313B0D0A096D617267696E3A303B0D0A09636F6C6F72203A20626C61636B3B0D0A09637572736F723A68616E643B0D0A096D696E2D6865696768743A313670783B0D0A7D0D0A2E726573756C7468656164696E67207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A09626F726465723A33206F7574736574206C69676874677261793B0D0A096D617267696E3A3270783B0D0A0970616464696E672D6C6566743A353B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09666F6E742D73697A653A3835253B0D0A7D0D0A2E616374696F6E7465787461726561207B0D0A09666F6E742D73697A653A3930253B0D0A09746578742D616C69676E3A6C6566743B0D0A0977696474683A313030253B0D0A096865696768743A31303070783B0D0A7D0D0A0D0A3C2F7374796C653E0D0A0D0A3C2F686561643E0D0A3C626F6479206F6E6C6F61643D22696E697428293B22203E0D0A0D0A0D0A3C6469762069643D226D61696E626F647922203E0D0A0D0A3C666F726D206E616D653D22726573657475736572666F726D22207461726765743D225F73656C662220616374696F6E3D22736572766C65742F44727352657365745573657222206D6574686F643D22706F7374223E0D0A3C696E70757420747970653D68696464656E206E616D653D227265736574757365725F6469726964222069643D227265736574757365725F6469726964222076616C75653D22333631393031303030313A303436313832223E0D0A3C2F666F726D3E0D0A0D0A3C666F726D206E616D653D2270726573656E6365666F726D22207461726765743D225F73656C662220616374696F6E3D2244727350726573656E636522206D6574686F643D22706F7374223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F636F6465222069643D2270726573656E63655F636F6465222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F6469766572746E6272222069643D2270726573656E63655F6469766572746E6272222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F756E74696C222069643D2270726573656E63655F756E74696C222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F6469726964222069643D2270726573656E63655F6469726964222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F74657874222069643D2270726573656E63655F74657874222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F707265736574222069643D2270726573656E63655F707265736574222076616C75653D22223E0D0A3C2F666F726D3E0D0A0D0A3C64697620636C6173733D226D61696E7469746C6522207374796C653D2277696474683A31303025223E0D0A3C7461626C652063656C6C73706163696E673D302063656C6C70616464696E673D332077696474683D223130302522203E0D0A3C74723E0D0A093C746420636C6173733D226D61696E7469746C6522207374796C653D2277696474683A313030252220616C69676E3D626173656C696E653E0D0A093C696D67207372633D22696D672F7370616365722E67696622206865696768743D35302077696474683D323E0D0A0953616D62616C2042696A20202831313030290D0A3C212D2D20746F6F6C626F78202D2D3E0D0A093C746420616C69676E3D7269676874202076616C69676E3D626173656C696E65206E6F777261703E200D0A09090D0A09093C7370616E2069643D227265736574627574746F6E222020636C6173733D22616374696F6E627574746F6E22206F6E636C69636B3D2272657365745573657253657474696E677328292220203E0D0A090909093C696D67207372633D22696D672F7370616365722E676966222077696474683D22323522206865696774683D223235223E526573657420757365722073657474696E67730D0A09093C2F7370616E3E0D0A09090D0A09093C7370616E2069643D226C6F676F7574627574746F6E222020636C6173733D22616374696F6E627574746F6E22206F6E636C69636B3D226C6F676F757428292220203E0D0A090909093C696D67207372633D22696D672F7370616365722E676966222077696474683D22323522206865696774683D223235223E4C6F67206F75740D0A09093C2F7370616E3E0D0A3C74723E3C746420636F6C7370616E3D323E3C68723E0D0A0D0A3C2F7461626C653E0D0A0D0A3C2F6469763E0D0A0D0A3C64697620636C6173733D2273657474696E6773626F647922202069643D2270726573656E63656D656E75223E0D0A0D0A3C7461626C6520207374796C653D2277696474683A313030253B636F6C6F723A626C61636B3B6261636B67726F756E642D636F6C6F723A23453045304530'O & + '2220626F726465723D302063656C6C70616464696E673D332063656C6C73706163696E673D323E0D0A3C74723E3C7464207374796C653D2277696474683A3335253B626F726465723A3120736F6C696420677261793B223E0D0A0D0A093C7461626C6520207374796C653D2277696474683A313030253B636F6C6F723A626C61636B3B6261636B67726F756E642D636F6C6F723A234530453045302220626F726465723D302063656C6C70616464696E673D332063656C6C73706163696E673D323E0D0A09093C74723E3C746420207374796C653D22666F6E742D73697A653A31303025223E3C623E50726573656E63650D0A090D0A0D0A09093C7464206E6F777261703E093C696D67207372633D27696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966273E4C65667420666F7220746865206461790D0A0D0A0D0A093C74723E0D0A09093C746420636F6C7370616E3D323E3C68723E0D0A090D0A0D0A09093C7472207374796C653D22646973706C61793A223E3C746420636F6C7370616E3D323E507265646566696E6564206F7074696F6E730D0A090D0A0D0A09093C747220207374796C653D22646973706C61793A223E0D0A0909093C74642020636F6C7370616E3D32203E0D0A0909093C7370616E207374796C653D2277696474683A3730252220636C6173733D27696D67627574746F6E27206F6E636C69636B3D2270726573657450726573656E636528273027293B22203E0D0A090909093C696D67207372633D27696D672F617661696C61626C652E676966272077696474683D3136206865696768743D31363E4368616E676520746F20417661696C61626C650D0A0909093C2F7370616E3E0D0A0909093C62723E0D0A0D0A09093C747220207374796C653D22646973706C61793A223E0D0A0909093C74642020636F6C7370616E3D32203E0D0A0909093C7370616E207374796C653D2277696474683A3730252220636C6173733D27696D67627574746F6E27206F6E636C69636B3D2270726573657450726573656E636528273127293B22203E0D0A090909093C696D67207372633D27696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966272077696474683D3136206865696768743D31363E4368616E676520746F20427573790D0A0909093C2F7370616E3E0D0A0909093C62723E0D0A0D0A09093C747220207374796C653D22646973706C61793A223E0D0A0909093C74642020636F6C7370616E3D32203E0D0A0909093C7370616E207374796C653D2277696474683A3730252220636C6173733D27696D67627574746F6E27206F6E636C69636B3D2270726573657450726573656E636528273227293B22203E0D0A090909093C696D67207372633D27696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966272077696474683D3136206865696768743D31363E4368616E676520746F204D656574696E670D0A0909093C2F7370616E3E0D0A0909093C62723E0D0A0D0A09093C747220207374796C653D22646973706C61793A223E0D0A0909093C74642020636F6C7370616E3D32203E0D0A0909093C7370616E207374796C653D2277696474683A3730252220636C6173733D27696D67627574746F6E27206F6E636C69636B3D2270726573657450726573656E636528273327293B22203E0D0A090909093C696D67207372633D27696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966272077696474683D3136206865696768743D31363E4368616E676520746F204C756E63680D0A0909093C2F7370616E3E0D0A0909093C62723E0D0A0D0A09093C747220207374796C653D22646973706C61793A223E0D0A0909093C74642020636F6C7370616E3D32203E0D0A0909093C7370616E207374796C653D2277696474683A3730252220636C6173733D27696D67627574746F6E27206F6E636C69636B3D2270726573657450726573656E636528273427293B22203E0D0A090909093C696D67207372633D27696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966272077696474683D3136206865696768743D31363E4368616E676520746F204C65667420666F7220746865206461790D0A0909093C2F7370616E3E0D0A0909093C62723E0D0A0D0A09093C74723E0D0A09093C74642020636F6C7370616E3D323E3C62723E3C68723E0D0A09090D0A09093C74723E3C7464203E3C6120687265663D23206F6E636C69636B3D2273686F776D6F72656F7074696F6E73282922203E4D6F7265206F7074696F6E732E2E2E3C2F613E0D0A09090D0A0909093C7464207374796C653D22646973706C61793A6E6F6E65222069643D226D6F72656F7074696F6E73627574746F6E22206E6F7772617020616C69676E3D72696768743E3C7370616E20636C6173733D22696D67627574746F6E22207374796C653D22666F6E742D73697A653A37352522206F6E636C69636B3D2273657450726573656E636528293B223E0D0A09090909093C696D672069643D22616374696F6E696D61676522207372633D22696D672F7370616365722E676966223E266E6273703B266E6273703B0D0A090909094368616E6765206E6F773C2F7370616E3E0D0A09090D0A0D0A09093C74723E0D0A09093C746420636F6C7370616E3D323E0D0A09093C7461626C652069643D226D6F72656F7074696F6E737461626C6522207374796C653D22646973706C61793A6E6F6E65223E0D0A09093C74723E0D0A0909093C746420636F6C7370616E3D322076616C69676E3D746F70203E0D0A0909093C73656C656374207374796C653D2277696474683A31303025222069643D2270636F64656C6973742220206F6E6368616E67653D2270636F64654368616E67656428746869732922203E0D0A0909093C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0D0A3C6F7074696F6E2076616C75653D27315F273E42757379202D204E6F20646976657273696F6E0A3C6F7074696F6E2076616C75653D27315F2D31273E42757379202D20416C6C2063616C6C7320746F206D61696E206E756D6265720A3C6F7074696F6E2076616C75653D27315F2D32273E42757379202D20416C6C2063616C6C7320746F20766F6963656D61696C0A3C6F7074696F6E2076616C75653D27315F78273E42757379202D20416C6C2063616C6C7320746F206E756D6265720A3C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0A3C6F7074696F6E2076616C75653D27325F273E4D656574696E67202D204E6F20646976657273696F6E0A3C6F7074696F6E2076616C75653D27325F2D31273E4D656574696E67202D20416C6C2063616C6C7320746F206D61696E206E756D6265720A3C6F7074696F6E2076616C75653D27325F2D32273E4D656574696E67202D20416C6C2063616C6C7320746F20766F6963656D61696C0A3C6F7074696F6E2076616C75653D27325F78273E4D656574696E67202D20416C6C2063616C6C7320746F206E756D6265720A3C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0A3C6F7074696F6E2076616C75653D27335F273E4C756E6368202D204E6F20646976657273696F6E0A3C6F7074696F6E2076616C75653D27335F2D31273E4C756E6368202D20416C6C2063616C6C7320746F206D61696E206E756D6265720A3C6F7074696F6E2076616C75653D27335F2D32273E4C756E6368202D20416C6C2063616C6C7320746F20766F6963656D61696C0A3C6F7074696F6E2076616C75653D27335F78273E4C756E6368202D20416C6C2063616C6C7320746F206E756D6265720A3C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0A3C6F7074696F6E2076616C75653D27345F273E4C65667420666F722074686520646179202D204E6F20646976657273696F6E0A3C6F7074696F6E2076616C75653D27345F2D31273E4C65667420666F722074686520646179202D20416C6C2063616C6C7320746F206D61696E206E756D6265720A3C6F7074696F6E2076616C75653D27345F2D32273E4C65667420666F722074686520646179202D20416C6C2063616C6C7320746F20766F6963656D61696C0A3C6F7074696F6E2076616C75653D27345F78273E4C65667420666F722074686520646179202D20416C6C2063616C6C7320746F206E756D6265720A3C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0A3C6F7074696F6E2076616C75653D27355F273E52657475726E73202D204E6F20646976657273696F6E0A3C6F7074696F6E2076616C75653D27355F2D31273E52657475726E73202D20416C6C2063616C6C7320746F206D61696E206E756D6265720A3C6F7074696F6E2076616C75653D27355F2D32273E52657475726E73202D20416C6C2063616C6C7320746F20766F6963656D61696C0A3C6F7074696F6E2076616C75653D27355F78273E52657475726E73202D20416C6C2063616C6C7320746F206E756D6265720A3C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0A0D0A09090909090D0A0909093C2F73656C6563743E0D0A0909093C74723E3C746420636F6C7370616E3D323E0D0A090909093C696E70757420747970653D746578742076616C75653D2222206F6E6B657975703D224E756D6265724368616E67656428746869732922207374796C653D22646973706C61793A6E6F6E65222069643D22646976657273696F6E6E6272223E0D0A0D0A093C74723E0D0A093C7464207374796C653D22666F6E742D73697A653A3930253B22206E6F7772617020636F6C7370616E3D323E4261636B200D0A09093C7370616E207374796C653D22666F6E742D73697A653A373525223E284D4D2F64642F79797979293C2F7370616E3E0D0A0909093C696E70757420747970653D746578742069643D22756E74696C64617465222076616C75653D22222073697A653D223130223E0D0A09093C7370616E207374796C653D22666F6E742D73697A653A373525223E2848483A6D6D293C2F7370616E3E0D0A0909093C696E70757420747970653D746578742069643D22756E74696C74696D65222076616C75653D22222073697A653D2235223E0D0A093C74723E0D0A0909093C746420636F6C'O & + '7370616E3D322076616C69676E3D746F702077696474683D3330253E3C623E4D6573736167650D0A09090D0A09093C7472203E0909090D0A0909093C746420636F6C7370616E3D322076616C69676E3D746F70203E0D0A0909093C7465787461726561207374796C653D2277696474683A3939253B2220726F77733D3520636C6173736E616D653D22616374696F6E7465787461726561220D0A0909090969643D22705F7465787422206F6E6B6579646F776E3D22746869732E76616C75653D27273B746869732E6F6E6B6579646F776E3D6E756C6C22206F6E6B657975703D226469766D73674368616E676564287468697329223E4865726520796F752063616E20777269746520796F7572206D65737361676520746F2074686520617474656E64616E7420616E64206F74686572732E204D61782032353520636861726163746572732E3C2F74657874617265613E0D0A09090D0A09090D0A0909093C2F7461626C653E3C212D2D6D6F7265206F7074696F6E732D2D3E0D0A093C2F7461626C653E0D0A0D0A3C212D2D2043616C6C206465666C656374202D2D3E0D0A3C7464207374796C653D2277696474683A3335253B626F726465723A3120736F6C696420677261793B646973706C61793A6E6F6E65222076616C69676E3D746F703E0D0A093C7461626C6520207374796C653D22636F6C6F723A626C61636B3B6261636B67726F756E642D636F6C6F723A234530453045303B77696474683A313030252220626F726465723D302063656C6C70616464696E673D332063656C6C73706163696E673D323E0D0A09093C74723E3C7464207374796C653D22666F6E742D73697A653A31303025223E3C623E4465666C6563742063616C6C0D0A0909093C746420616C69676E3D72696768743E3C696E7075742020636C6173733D22696D67627574746F6E22207374796C653D22666F6E742D73697A653A3830253B22200D0A09090909747970653D22627574746F6E222076616C75653D224368616E676522206F6E636C69636B3D225365744465666C656374282922203E0D0A0909090D0A09093C74723E3C746420636F6C7370616E3D323E3C68723E090D0A09093C7472206F6E6D6F7573656F7665723D2274725F6D6F7573656F7665722874686973293B22206F6E6D6F7573656F75743D2274725F6D6F7573656F75742874686973292220636C6173733D74726565726F773E0D0A0909093C746420636F6C7370616E3D323E3C696E707574206F6E636C69636B3D226366436C69636B65642874686973293B2220747970653D726164696F2069643D2263665F6F70657261746F7222206E616D653D226366222076616C75653D222D3122203E266E6273703B266E6273703B4D61696E206E756D6265720D0A09093C7472206F6E6D6F7573656F7665723D2274725F6D6F7573656F7665722874686973293B22206F6E6D6F7573656F75743D2274725F6D6F7573656F75742874686973292220636C6173733D74726565726F773E0D0A0909093C746420636F6C7370616E3D323E3C696E707574206F6E636C69636B3D226366436C69636B65642874686973293B2220747970653D726164696F2069643D2263665F766F6963656D61696C22206E616D653D226366222076616C75653D222D3222203E266E6273703B266E6273703B566F6963656D61696C0D0A09093C7472206F6E6D6F7573656F7665723D2274725F6D6F7573656F7665722874686973293B22206F6E6D6F7573656F75743D2274725F6D6F7573656F75742874686973292220636C6173733D74726565726F773E0D0A0909093C746420636F6C7370616E3D323E3C696E707574206F6E636C69636B3D226366436C69636B65642874686973293B2220747970653D726164696F2069643D2263665F7822206E616D653D226366222076616C75653D225822203E266E6273703B266E6273703B50686F6E650D0A0909093C696E70757420747970653D74657874206E616D653D2263665F6E756D626572222069643D2263665F6E756D62657222206F6E6B657975703D224E756D6265724368616E6765642874686973293B22207374796C653D227669736962696C6974793A68696464656E222076616C75653D22223E0D0A09090D0A093C2F7461626C653E0D0A0D0A0D0A3C666F726D206E616D653D2263616C6C6465666C656374666F726D22207461726765743D225F73656C662220616374696F6E3D22736572766C65742F4472734465666C65637422206D6574686F643D22706F7374223E0D0A3C696E70757420747970653D68696464656E206E616D653D226469726964222069643D226469726964222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2263616C6C6465666C6563746E72222069643D2263616C6C6465666C6563746E72222076616C75653D22223E0D0A3C2F666F726D3E0D0A0D0A3C212D2D204344472F68756E7467726F757073202D2D3E0D0A3C7464207374796C653D2277696474683A3335253B626F726465723A3120736F6C696420677261793B222076616C69676E3D746F703E0D0A093C666F726D206E616D653D226867736574746E6722207461726765743D225F73656C662220616374696F6E3D22736572766C65742F44727348756E7447726F757022206D6574686F643D22706F7374223E0D0A093C696E70757420747970653D68696464656E206E616D653D226469726964222069643D226469726964222076616C75653D22223E0D0A093C7461626C6520207374796C653D22636F6C6F723A626C61636B3B6261636B67726F756E642D636F6C6F723A234530453045303B77696474683A313030252220626F726465723D302063656C6C70616464696E673D332063656C6C73706163696E673D323E0D0A09093C74723E3C7464207374796C653D22666F6E742D73697A653A313030253B223E3C623E41637469766174652F64656163746976617465203C62723E43616C6C20646973747269627574696F6E2067726F7570730D0A0909093C746420616C69676E3D72696768742076616C69676E3D746F703E3C696E7075742020636C6173733D22696D67627574746F6E22207374796C653D22666F6E742D73697A653A3830253B22200D0A09090909747970653D22627574746F6E222076616C75653D224368616E676522206F6E636C69636B3D22416374697661746547726F757073282922203E0D0A09093C74723E3C746420636F6C7370616E3D323E3C68723E090D0A3C74723E3C74643E4E6F74206D656D626572206F6620616E792063616C6C20646973747269627574696F6E2067726F75700A0D0A093C2F666F726D3E0D0A093C2F7461626C653E0D0A0D0A3C2F7461626C653E0D0A3C2F6469763E0D0A3C2F6469763E0D0A0D0A3C2F626F64793E0D0A3C2F68746D6C3E0D0A'O; + + // + + var integer vl_remainingStringLength := lengthof(received_reply); + var CHARSTRINGS vl_decodedMessagePieces := {}; + var HTTPMessage vloc_decodedMsg; + while( vl_remainingStringLength >0 ) + { + log("Original msg string length = ", lengthof(received_reply) ); + vl_remainingStringLength:= dec_HTTPMessage( received_reply, vloc_decodedMsg, true) + log(" The decoded message Piece = ", vloc_decodedMsg ); + log("remaining msg string length:", vl_remainingStringLength); + } + + +}//eof TC + + + function singleTC() runs on HTTP_client + { + // These may be declared as templates at global scope. + // Variables are used for performance reasons: + // sending is faster in this way. + var HeaderLines hd := { {header_name := "Host", header_value := HttpServerHostName}, + {header_name := "Content-Length", header_value := "0" } }; + // {header_name := "Connection", header_value := "close" } + + var HTTPRequest r := { client_id := omit, method := "GET", uri := "/", + version_major := 1, version_minor := 1, header := hd, body := "" }; + + var HTTPMessage send_req := { request := r }; + var Connect conn := { hostname := HttpServerHostName, + portnumber := HttpServerPort, use_ssl := HTTPClientUseSSL }; + var Close c := { client_id := omit }; + timer T_guard := 5.0; + var integer i; + var integer how_many_times := 1; //100 + + map(self:HTTP_client_port, system:HTTP_client_port); + + HTTP_client_port.send(conn); + + for(i := 0; i < how_many_times; i := i + 1 ) { + HTTP_client_port.send(send_req); + if(T_guard.running) { T_guard.stop } + + T_guard.start; + + alt { + [] HTTP_client_port.receive(recv_resp) { + if(i == how_many_times - 1) { + HTTP_client_port.send(c); + setverdict(pass); + } + } + [] HTTP_client_port.receive(h) { + HTTP_client_port.send(c); + setverdict(fail); + i := how_many_times; + } + [] HTTP_client_port.receive { + HTTP_client_port.send(c); + setverdict(fail); + } + [] T_guard.timeout { + setverdict(fail); } + }; + } + + unmap(self:HTTP_client_port, system:HTTP_client_port); + } + //================================== + //= Testcases = + //================================== + + + testcase parallel_TC_client() runs on HTTP_client + { + var HTTP_client client_PTC; + client_PTC := HTTP_client.create; + client_PTC.start(TC()); + client_PTC.done; + } + + testcase tc_parallel_server() runs on HTTP_server + { + var HTTP_server server_PTC; + server_PTC := HTTP_server.create; + server_PTC.start(server_TC()); + server_PTC.done; + } + + testcase tc_stress(in integer n) runs on HTTP_client + { + var ptcList ptc; + var integer r; + + for( r := 0; r < n; r := r + 1 ) { + ptc[r] := HTTP_client.create; + }; + + for( r := 0; r < n; r := r + 1 ) { + ptc[r].start(singleTC()); + }; + + for( r := 0; r < n; r := r + 1 ) { + ptc[r].done; + }; + } + + testcase tc_stress_Persistent_both() runs on HTTP_client + { + var HTTP_client client_PTC; + client_PTC := HTTP_client.create; + var HTTP_server server_PTC; + server_PTC := HTTP_server.create; + + server_PTC.start(server_TC()); + timer t_wait := 0.1; + t_wait.start; + t_wait.timeout; + client_PTC.start(singleTC()); + + client_PTC.done; + server_PTC.done; + } + + testcase tc_server() runs on HTTP_server + { + server_TC(); + } + + testcase tc_client() runs on HTTP_client + { + singleTC(); + } + + + testcase tc_http_encDec() runs on MTC + { + f_EncDec(); + } + + testcase tc_http_encDec2() runs on MTC + { + f_EncDec2(); + } + control + { + log("control started"); + //execute(tc_parallel_server()); + //execute(tc_stress(1)); + //execute(tc_stress_Persistent_both()); + //execute(tc_server); + //execute(tc_client); + execute(tc_http_encDec()); + execute(tc_http_encDec2()); + } + +} diff --git a/demo/HTTP_test.prj b/demo/HTTP_test.prj new file mode 100644 index 0000000..d5db577 --- /dev/null +++ b/demo/HTTP_test.prj @@ -0,0 +1,48 @@ +<!DOCTYPE TITAN_GUI_project_file> +<Project> + <General> + <Project_Name>HTTP_test</Project_Name> + <Executable_Path>../bin/HTTP_test</Executable_Path> + <Working_Dir>../bin</Working_Dir> + <Build_Host>alpha</Build_Host> + <Execution_Mode>Parallel</Execution_Mode> + <ScriptFile_AfterMake>lssl_script</ScriptFile_AfterMake> + <Log_Format>yes</Log_Format> + <Update_Symlinks>yes</Update_Symlinks> + <Create_Absolute_Symlinks>no</Create_Absolute_Symlinks> + <Update_Makefile>yes</Update_Makefile> + <Localhost_Execute>yes</Localhost_Execute> + <Execute_Command>rsh %host "cd %project_working_dir ; "%executable" %localhost %mctr_port"</Execute_Command> + <Execute_Hosts>alfa, beta, gamma</Execute_Hosts> + <UnUsed_List></UnUsed_List> + </General> + <Modules> + <Module>../src/HTTPmsg_PortType.ttcn</Module> + <Module>../src/HTTPmsg_Types.ttcn</Module> + <Module>HTTP_Test_no_ASPs.ttcn</Module> + </Modules> + <TestPorts> + <TestPort>../src/HTTPmsg_PT.cc</TestPort> + <TestPort>../src/HTTPmsg_PT.hh</TestPort> + </TestPorts> + <Other_Sources> + <Other_Source>../../Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.cc</Other_Source> + <Other_Source>../../Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.hh</Other_Source> + </Other_Sources> + <Configs> + <Config>HTTP_Test.cfg</Config> + </Configs> + <Test_Cases> + <Test_Case>HTTP_Test_no_ASPs.control</Test_Case> + <Test_Case>HTTP_Test_no_ASPs.parallel_TC_client</Test_Case> + <Test_Case>HTTP_Test_no_ASPs.parallel_TC_server</Test_Case> + <Test_Case>HTTP_Test_no_ASPs.stress_TC_Persistent_both</Test_Case> + <Test_Case>HTTP_Test_no_ASPs.server_testcase</Test_Case> + <Test_Case>HTTP_Test_no_ASPs.client_testcase</Test_Case> + </Test_Cases> + <Others> + <Other>lssl_script</Other> + <Other>server.crt</Other> + <Other>server.key</Other> + </Others> +</Project> diff --git a/demo/Makefile b/demo/Makefile new file mode 100644 index 0000000..a85067f --- /dev/null +++ b/demo/Makefile @@ -0,0 +1,152 @@ +# This Makefile was generated by the Makefile Generator +# of the TTCN-3 Test Executor version 1.7.pre0 build 2 +# for Attila Balasko (ethbaat@ehubuux110) on Mon Jan 15 16:28:23 2007 + +# Copyright 2000-2006 Test Competence Center, Ericsson R & D, Hungary +# For trouble reporting use the tool MTTSMS. +# For TR writers guide please visit the web page: http://ttcn.ericsson.se + +# The following make commands are available: +# - make, make all Builds the executable test suite. +# - make archive Archives all source files. +# - make check Checks the semantics of TTCN-3 and ASN.1 modules. +# - make clean Removes all generated files. +# - make compile Translates TTCN-3 and ASN.1 modules to C++. +# - make dep Creates/updates dependency list. +# - make objects Builds the object files without linking the executable. +# - make tags Creates/updates tags file using ctags. + +# +# Set these variables... +# + +# The path of your TTCN-3 Test Executor installation: +# Uncomment this line to override the environment variable. +# TTCN3_DIR = + +# Your platform: (SOLARIS, SOLARIS8, LINUX, FREEBSD or WIN32) +PLATFORM = SOLARIS8 + +# Your C++ compiler: +CXX = g++ + +# Flags for the C++ preprocessor (and makedepend as well): +CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include + +# Flags for the C++ compiler: +CXXFLAGS = -Wall + +# Flags for the linker: +LDFLAGS = + +# Flags for the TTCN-3 and ASN.1 compiler: +COMPILER_FLAGS = -L + +# Execution mode: (either ttcn3 or ttcn3-parallel) +TTCN3_LIB = ttcn3-parallel + +# The path of your OpenSSL installation: +# If you do not have your own one, leave it unchanged. +OPENSSL_DIR = $(TTCN3_DIR) + +# Directory to store the archived source files: +# Note: you can set any directory except ./archive +ARCHIVE_DIR = backup + +# +# You may change these variables. Add your files if necessary... +# + +# TTCN-3 modules of this project: +TTCN3_MODULES = HTTP_Test_no_ASPs.ttcn HTTPmsg_PortType.ttcn HTTPmsg_Types.ttcn + +# ASN.1 modules of this project: +ASN1_MODULES = + +# C++ source & header files generated from the TTCN-3 & ASN.1 modules of +# this project: +GENERATED_SOURCES = HTTP_Test_no_ASPs.cc HTTPmsg_PortType.cc HTTPmsg_Types.cc +GENERATED_HEADERS = HTTP_Test_no_ASPs.hh HTTPmsg_PortType.hh HTTPmsg_Types.hh + +# C/C++ Source & header files of Test Ports, external functions and +# other modules: +USER_SOURCES = Abstract_Socket.cc HTTPmsg_PT.cc +USER_HEADERS = Abstract_Socket.hh HTTPmsg_PT.hh + +# Object files of this project that are needed for the executable test suite: +OBJECTS = HTTP_Test_no_ASPs.o HTTPmsg_PortType.o HTTPmsg_Types.o Abstract_Socket.o HTTPmsg_PT.o + +# Other files of the project (Makefile, configuration files, etc.) +# that will be added to the archived source files: +OTHER_FILES = Makefile + +# The name of the executable test suite: +TARGET = HTTP_Test_no_ASPs + +# +# Do not modify these unless you know what you are doing... +# Platform specific additional libraries: +# +SOLARIS_LIBS = -lsocket -lnsl -lxml2 +SOLARIS8_LIBS = -lsocket -lnsl -lxml2 +LINUX_LIBS = -lxml2 +FREEBSD_LIBS = -lxml2 +WIN32_LIBS = -lxml2 + +# +# Rules for building the executable... +# + +all: $(TARGET) ; + +objects: $(OBJECTS) ; + +$(TARGET): $(OBJECTS) + $(CXX) $(LDFLAGS) -o $@ $(OBJECTS) \ + -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \ + -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) + +.cc.o .c.o: + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $< + +$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile + @if [ ! -f $@ ]; then rm -f compile; $(MAKE) compile; fi + +check: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler -s $(COMPILER_FLAGS) \ + $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES) + +compile: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) \ + $(TTCN3_MODULES) $(ASN1_MODULES) - $? + touch $@ + +browserdata.dat: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler -B -s $(COMPILER_FLAGS) \ + $(TTCN3_MODULES) $(ASN1_MODULES) + +tags: $(TTCN3_MODULES) $(ASN1_MODULES) \ +$(USER_HEADERS) $(USER_SOURCES) + $(TTCN3_DIR)/bin/ctags_ttcn3 --line-directives=yes \ + $(TTCN3_MODULES) $(ASN1_MODULES) \ + $(USER_HEADERS) $(USER_SOURCES) + +clean: + -rm -f $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) compile \ + browserdata.dat tags *.log + +dep: $(GENERATED_SOURCES) $(USER_SOURCES) + makedepend $(CPPFLAGS) $(GENERATED_SOURCES) $(USER_SOURCES) + +archive: + mkdir -p $(ARCHIVE_DIR) + tar -cvhf - $(TTCN3_MODULES) $(ASN1_MODULES) \ + $(USER_HEADERS) $(USER_SOURCES) $(OTHER_FILES) \ + | gzip >$(ARCHIVE_DIR)/`basename $(TARGET) .exe`-`date '+%y%m%d-%H%M'`.tgz + +# +# Add your rules here if necessary... +# + +# DO NOT DELETE diff --git a/demo/installCAI.script b/demo/installCAI.script new file mode 100644 index 0000000..fc9491d --- /dev/null +++ b/demo/installCAI.script @@ -0,0 +1,80 @@ +#! /bin/sh +# Run this script from _MAIN library. It will create links in bin to all necessary +# files. If you store test ports in different location set TESTPORT_PATH variable first, +# so that this script can locate test port files. + +# Create bin/ directory if does not exist +if [ ! -d ../bin2 ] ; then mkdir ../bin2 ; fi + +# Creating softlinks from main & protocols' directories +# +# Linking non-protocol-bound files + + +# NOTE: after creating dependencies using the make utility the soft link in the bin +# directory is overwritten with a new Makefile; copy this new Makefile back to the +# _Main directory if you want to preserve it. +ln -sf ../_Main/MakefileCAI ../bin2/Makefile + +#Test Execution + +ln -sf ../CAI/PortMappingTelnet.ttcn ../bin2 +ln -sf ../_Main/CAIConfigBuild.ttcn ../bin2 +ln -sf ../_Main/TestExecCAI.ttcn ../bin2 +ln -sf ../_Main/TestExecCAI.cfg ../bin2 + + + +# Linking CAI files + +tmppath=${PROTOCOLMODULE_PATH:-'/vobs/ttcn/TCC_Common/ProtocolModules/CAI_CNL113422/src'} + +ln -sf $tmppath/CAITopLevel.ttcn ../bin2 +ln -sf $tmppath/CAICommonDefinitions.ttcn ../bin2 +ln -sf $tmppath/CAI_Cms11AC.ttcn ../bin2 +ln -sf $tmppath/CAI_Cms11Hlr.ttcn ../bin2 +ln -sf $tmppath/CAI_FmcCac.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmAAA.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmAuc.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmEir.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmFnr.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmHlr.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMMC.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMML.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMMS.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMc.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMoIP.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMpc.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmPps.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmVIG.ttcn ../bin2 +ln -sf $tmppath/CAI_Imsich.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmGMRM.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmIPMM.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmFBC.ttcn ../bin2 +ln -sf $tmppath/CAI_EMM2_1.ttcn ../bin2 +ln -sf $tmppath/CAI_EMM2_0.ttcn ../bin2 +ln -sf $tmppath/CAI_MINSAT.ttcn ../bin2 +ln -sf $tmppath/CAI_IMT3_0.ttcn ../bin2 +ln -sf $tmppath/CAI_EPC1_0.ttcn ../bin2 + +#Encoders +ln -sf $tmppath/CAI_EncDec.cc ../bin2 +ln -sf ../CAI/CAI_DecEnc.cc ../bin2 + + +# Linking test ports + +tmppath=${TESTPORT_PATH:-'/vobs/ttcn/TCC_Common/TestPorts'} + +ln -sf $tmppath/TELNETasp_CNL113320/src/TELNETasp_PT.cc ../bin2 +ln -sf $tmppath/TELNETasp_CNL113320/src/TELNETasp_PT.hh ../bin2 +ln -sf $tmppath/TELNETasp_CNL113320/src/TELNETasp_PortType.ttcn ../bin2 +ln -sf $tmppath/HTTPmsg_CNL113312/src/HTTPmsg_Types.ttcn ../bin2 +ln -sf $tmppath/HTTPmsg_CNL113312/src/HTTPmsg_PT.cc ../bin2 +ln -sf $tmppath/HTTPmsg_CNL113312/src/HTTPmsg_PT.hh ../bin2 +ln -sf $tmppath/HTTPmsg_CNL113312/src/HTTPmsg_PortType.ttcn ../bin2 + +tmppath=${TESTPORT_PATH:-'/vobs/ttcn/TCC_Releases/TestPorts'} + +ln -sf $tmppath/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.cc ../bin2 +ln -sf $tmppath/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.hh ../bin2 diff --git a/demo/lssl_script b/demo/lssl_script new file mode 100644 index 0000000..e0db83f --- /dev/null +++ b/demo/lssl_script @@ -0,0 +1,12 @@ +#!/bin/sh + +editcmd=' + +s/OPENSSL_DIR = $(TTCN3_DIR)/OPENSSL_DIR = \/mnt\/TTCN\/Tools\/openssl-0.9.8e/g + +s/CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)\/include/CPPFLAGS = -D$(PLATFORM) -DAS_USE_SSL -I$(TTCN3_DIR)\/include -I$(OPENSSL_DIR)\/include/g + +s/ -lcrypto/ -L$(OPENSSL_DIR)\/lib -lssl -lcrypto/g +' +sed -e "$editcmd" <$1 >$2 + diff --git a/demo/server.crt b/demo/server.crt new file mode 100644 index 0000000..2381e9f --- /dev/null +++ b/demo/server.crt @@ -0,0 +1,69 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 2 (0x2) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=HU, ST=Pest, L=Budapest, O=Ericsson Telecom Hungary, OU=RUST, CN=a99027.eth.ericsson.se/emailAddress=Eduard.Czimbalmos@ericsson.com + Validity + Not Before: Jan 8 11:39:44 2004 GMT + Not After : Jan 7 11:39:44 2005 GMT + Subject: C=HU, ST=Pest, O=Ericsson Telecom Hungary, OU=RUST, CN=a99027.eth.ericsson.se/emailAddress=Eduard.Czimbalmos@ericsson.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:ac:e3:07:4b:97:49:4f:27:35:fd:c5:7f:d1:b5: + 4a:f4:3c:53:cf:bf:36:31:02:19:e0:6f:8f:a2:34: + 39:0f:d7:4f:4f:e0:4b:36:dc:5c:ef:3f:a4:fb:60: + 07:3d:50:50:d5:6f:0e:ce:60:7e:98:ed:de:b9:de: + 63:60:9b:ec:86:ff:d6:79:34:3f:e7:c2:16:d4:d3: + d8:6d:c6:a5:9f:ef:7d:7a:be:25:c1:c5:88:ec:65: + 0a:ca:c5:16:2b:3d:3d:d8:de:a8:32:b5:c4:9b:5d: + 9c:25:91:ef:65:9a:3a:9c:80:ea:95:0b:90:b0:9f: + 75:ba:aa:6d:8a:24:35:54:89 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + Netscape Comment: + OpenSSL Generated Certificate + X509v3 Subject Key Identifier: + C1:32:B9:1E:DC:0C:44:1C:69:7F:AE:6C:85:B6:DA:59:35:0C:D2:E6 + X509v3 Authority Key Identifier: + keyid:E5:52:E4:91:CB:97:9B:48:D2:67:A3:49:EE:7E:C3:44:4B:BE:9B:2C + DirName:/C=HU/ST=Pest/L=Budapest/O=Ericsson Telecom Hungary/OU=RUST/CN=a99027.eth.ericsson.se/emailAddress=Eduard.Czimbalmos@ericsson.com + serial:00 + + Signature Algorithm: md5WithRSAEncryption + 9b:bd:ab:b4:4b:da:df:e1:f9:97:6a:37:ad:34:c8:01:6b:ba: + 20:7a:f3:77:ba:f7:d9:68:8e:f5:e6:82:dd:e3:e1:50:77:b7: + 02:39:12:4c:b9:92:2e:ac:0e:a2:1d:2e:9a:eb:50:fa:df:3e: + d3:45:57:64:9c:3f:fc:7b:d3:f1:39:ff:68:61:46:cd:68:13: + 5d:71:cf:60:9b:68:2b:87:99:31:54:3d:a9:54:27:c3:f3:eb: + 43:6c:ef:d7:bb:3d:72:f8:5b:13:e6:39:a9:f6:d7:1c:d5:23: + ca:be:3a:93:d3:39:43:a0:54:e8:29:21:cf:aa:d8:90:88:0a: + a2:c4 +-----BEGIN CERTIFICATE----- +MIIEBjCCA2+gAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBsTELMAkGA1UEBhMCSFUx +DTALBgNVBAgTBFBlc3QxETAPBgNVBAcTCEJ1ZGFwZXN0MSEwHwYDVQQKExhFcmlj +c3NvbiBUZWxlY29tIEh1bmdhcnkxDTALBgNVBAsTBFJVU1QxHzAdBgNVBAMTFmE5 +OTAyNy5ldGguZXJpY3Nzb24uc2UxLTArBgkqhkiG9w0BCQEWHkVkdWFyZC5Demlt +YmFsbW9zQGVyaWNzc29uLmNvbTAeFw0wNDAxMDgxMTM5NDRaFw0wNTAxMDcxMTM5 +NDRaMIGeMQswCQYDVQQGEwJIVTENMAsGA1UECBMEUGVzdDEhMB8GA1UEChMYRXJp +Y3Nzb24gVGVsZWNvbSBIdW5nYXJ5MQ0wCwYDVQQLEwRSVVNUMR8wHQYDVQQDExZh +OTkwMjcuZXRoLmVyaWNzc29uLnNlMS0wKwYJKoZIhvcNAQkBFh5FZHVhcmQuQ3pp +bWJhbG1vc0Blcmljc3Nvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB +AKzjB0uXSU8nNf3Ff9G1SvQ8U8+/NjECGeBvj6I0OQ/XT0/gSzbcXO8/pPtgBz1Q +UNVvDs5gfpjt3rneY2Cb7Ib/1nk0P+fCFtTT2G3GpZ/vfXq+JcHFiOxlCsrFFis9 +PdjeqDK1xJtdnCWR72WaOpyA6pULkLCfdbqqbYokNVSJAgMBAAGjggE9MIIBOTAJ +BgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0 +aWZpY2F0ZTAdBgNVHQ4EFgQUwTK5HtwMRBxpf65shbbaWTUM0uYwgd4GA1UdIwSB +1jCB04AU5VLkkcuXm0jSZ6NJ7n7DREu+myyhgbekgbQwgbExCzAJBgNVBAYTAkhV +MQ0wCwYDVQQIEwRQZXN0MREwDwYDVQQHEwhCdWRhcGVzdDEhMB8GA1UEChMYRXJp +Y3Nzb24gVGVsZWNvbSBIdW5nYXJ5MQ0wCwYDVQQLEwRSVVNUMR8wHQYDVQQDExZh +OTkwMjcuZXRoLmVyaWNzc29uLnNlMS0wKwYJKoZIhvcNAQkBFh5FZHVhcmQuQ3pp +bWJhbG1vc0Blcmljc3Nvbi5jb22CAQAwDQYJKoZIhvcNAQEEBQADgYEAm72rtEva +3+H5l2o3rTTIAWu6IHrzd7r32WiO9eaC3ePhUHe3AjkSTLmSLqwOoh0umutQ+t8+ +00VXZJw//HvT8Tn/aGFGzWgTXXHPYJtoK4eZMVQ9qVQnw/PrQ2zv17s9cvhbE+Y5 +qfbXHNUjyr46k9M5Q6BU6Ckhz6rYkIgKosQ= +-----END CERTIFICATE----- diff --git a/demo/server.key b/demo/server.key new file mode 100644 index 0000000..8d6ece8 --- /dev/null +++ b/demo/server.key @@ -0,0 +1,18 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,EBFCB69E20E5D263 + +KrzktC2qxWrTeP4NnRvqaI6TZWi7yyiEhSaj5/mH4RTCb2eDd6Ro+7TxTUQHVPW5 ++FVkdYIa6sMXjUmiKIiFTqcVH6uYl2SgK+tqaAIsEUIzJIYiwQh3sXMOcN3ZuFET +JYb1EypMCqFHAjfYHxFF4lJzryc5I16uOV8ajIfxvPZVcE7V5YPr9sMRxrZV8k/p +qj/TNWuDNnwJzVEtZnEUKPuHqLEXHI8kq9sqrDiDHZMAVwQb6ABpE74RfHbCYO2N +PnYZE6veiOTSZATQzjEhzGXiXslQqozRWH5iFpTI5ND00Zvm7u9AfYxgX/OWHm0/ +8SF0sxC/A+oSu00XKWVLQPvHekxGRdfqHqygdXAdlZS0BxtkUtln/ago9/QekRHL +u8O1iGz03mozFWn52VmEy9O1+V22fmpiuM95T+mzPCOwEAuN3O4BxGUkP/kwLrkY +uxeCe+Cm/3jKijMkm2ejKJhlmDS4sLuvEHG+H5C78W+7U3mNJ9/aMTTQR44H0vXz +f45OfrSt3eZsH10OoNWGk/T1EiJauOQx948bF3e6Pl4TrB2/O2GdRUKrZk5cvNQw +zHmY9JNTTPWA5rmc7HfRn7rHJ5O1eZ1P4oBA+1rTuIbqwykf1CzTWZvOH1cK77uP +0ZsL/lzJRz8NrRv768rqEm8UpDdP96XwZ9rx9euW1r+cA0NGcD+bRssm4vIWxI3F +JMG5cN2X58URsIpkTvQtA5s7XJ0y0TqMcnhtcrSz+dXyq6otT92uO3qfGZWbAdva +Gsogib7OS/BSNfvaEHIplT5u/xy4ney1G7PkoEr89WFwR6gufElJyw== +-----END RSA PRIVATE KEY----- diff --git a/doc/15517-CNL113312_EN_E_PDFV1R2.pdf b/doc/15517-CNL113312_EN_E_PDFV1R2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dcc542c739156b7d93b9298648e08e4fcce2e308 GIT binary patch literal 65542 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 literal 0 HcmV?d00001 diff --git a/doc/19817-CNL113312_EN_G_PDFV1R2.pdf b/doc/19817-CNL113312_EN_G_PDFV1R2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b82b0e7696caed67114adbeb7373a7446fa081cc GIT binary patch literal 156835 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	%OM~-1AgAqyuPySLZD70;m@Mu%T zQtL#*rL7U4>xSwZkY4*rMBW9W03YJ#WZk7xZQH^rN7sUi2wAii*w1ESSIm29eheZ4 z=wj#j0y}ZesaaTaigsAssAh0lRkf84_<G}Q3-5a|sXA<82)S+sBE*?jiU%jE1HPuf zYUS72V&zhbm!WTI$D~aos*zR(M2yKdafozv8p+n|y0z8S35=z92;do6WYj5oAdL&H zToT*mn-{aT#}-u5FBrv;0!Cv_ZEfvV5MPASD{*>M5iEdDNtBTr!&O)uiU%7f+i`;$ zSxAU3Uk*$%pC~^U?GO)dw5Qd@lXt^qx8^|1<yubJz+8nevlSvQ!AH9I4EL@;r`&l3 zifE3IO?9f%lRpL!-}c-Y_S$iZ?i@q{l+Dd04)ki4^P=Sa*qY|zNoB56lv~Pm^`zt% zPA!PkfdJn))tPzHohT+r#z`oG=b%|3vG{e?x46yqNZ4dPb}!3gbZy$X9KBB~3M-o~ zWpuRv14d)`CvfG?Rm)pd0Si>T2>3zlg%nBAtC*S3ZSqqzIR&2*IKj@QxSrQyHVD|3 zDRw#xVZX52F0#Cr8$}-rhyFAFj?CHP6DOPsGqlP?FQWqjoC@yBD%O{PM#Y$z&E~th ztLE*n-UE7-dF~Qg|3_*Q*;-=l0pkR57tUH??P~w_x$q;3;_HgjwaZZXzV{?KhXX3_ z1F9hl!Xrr`FGxLa+cJRf0VOpscP}Wx*o<0(R4pxbsfmkjeD53M5c~QVmYfo07>BZB zOpJW*gI-kD9hlVz<_7J1+PY!t{9_SuNWOL=!}a-M;D&=bQg#8V$XOfp45H0E{UQna zJjis8^6={j=<t#rd_~}AQy~IwD9o`djO=B5aDo+;%xeg?VL)W?sE#~D-y@VAaCuZY zpY5jv+s>tap1S^mN7OMl7Gj4E&L49&;S_f8%XB(rB+;=9RxY;CR8`HOyaSZ$jbG)H zPFnEN3st8~w<gL;78gjWwO;N_Q}%~P9(VWPO)Mx(HciP3h*NemA}Eg2GsGsmNXhbH zB-~P<5~6@FOL(AZ706mL`^moQ)&kIzJIQLh?ECZqz;Jz-`d4}Hr$q7hTvhOMujJ1f zs!tE&UnIMKi+mMq|HusS>FK16jm-7`*s}Q}8)o@jRbgjl{7i@)Z0-KHCl!nxZJiwq zjU7K1SN{0x|CBKPLsj|9jPu`+Vg6&0=RY#c&*c|}-x=m_{o=QN@ms(6tzZ1sFMjJ6 zzx9j%p8CZf87A%T4D)w}`4<`HN_EqZA#42S&FbxSO5ub?tMSw&`WlGm8opXJd><|R zIFdCa!o=_7->$b@Z59SoGJg~Z%RA{(OJc))PNpBhFsK`T=9e;4A>Lgbwtx<MK1d3M zeS3CCoVjpMRw=o(Q=#4x)$X}{Jqw=j!;(^F)4hK9BE-43kmM_+L}5e|EET&ilVB2v z7M7ujg=U=m@|e<O@>CK<;k||5v!rt_Y8Beq>1t-&-qT6~GxTp6pzR6G%ao{rNcNGU z^9E{s<g`r4)1io+cE_2avLd2SGm|Qfn;vFmkxOc@2#d_~b_;66wFuw@@x@B>dd`(A zv)ILK<Z5$!y#mfup?K-|oe_dfBL`k7NyAydf~w9|Gjf&nFC5Q6hN*4KJJJj0#)ICk z+n;%bt5W4cp><<dQ1q@!8xH+rvRNoM*U-#}_}GmHp<FqEkMeS5aQp`3ltld<8L-ZG zv>q2;%N+_i9bcFGE`OSfYBT$7(gK1KNgQEVT)vVQalxe4J63WH46R65J0_Nol^4=f zd?09qC?2x)R(FR-wwdmy5e@nu)+%B1p+F!pmP<_ngKyrdKpSWXO_lXy3>lU9W5=#P zhQj&<&0wt%Ivxt8q}F6VsaOcqXoE<Q8okEHu=S&F>w!l>dvP;?5!V@VrUmKmGH?({ zh43WQqb8zN!1f|}`h(hUAW**@e^I+k@00SH(XB~!B2zsHlmGzBncvn^E>505h@}0Z zarSfOZ8&fJpzG(1b>3J1BaTAUR@UU_G)iI>*9GyealmSOdE=%{)4SD-T@XtWs|sC5 z)z)gzpN26sKm8p^X2`iZVuDq&U=ya95JBi45W(8VbVn4npbTX0EG&};8Fy<b9Vq-u z5*ZG;queOX*mEVZ56u;^*0dJqi@UR>pVDM9nc1i#9s7*L*yM8W!zh8)_+&WYJPc`? zlCCKVGIbQg7=6v(mi7r;(^sq-(|S@${FjElj*iTD$_$tSdv@(bQw%Y)>_P8L5TS9; zptM$5`E;mArLD4EXAOQ|S7%NJ1xJ7m!}~xE^mK;1o&5sAw8CZwRFyXs^+iaTLxmVX zWUGA5ykN@}50{tM8kdKcyJqyO0K<_g7x2lsRk)NiBq$HJGRAA`2U8Cdd5W~vA$DeH zirFDbQ0BKH_bKA09tgJ}18eK2ibHUsFB1L<^IkR&q(8xVy+T#hv_L<70!5f#YP1dD z>dLRqj*RePIUaj6C}3;4eId=h(N4oWs7Mj);&+IaQjeTaYkj$jJBq7<6q&f|bU@`A z`Y&+@M%YTrSN3I7QL&;BtA4Z}MIJr+0Zaz~)GAz$NhOx>^wQGgyHNNC-`;4Fv{Yum z$4cr%%Rsp(&Yp<bkttTlP9ixima;`k*V1(i6v`^gO@W+DE0fl=OPq8^>8kf$%K;ds zqm>e0AKMALBjB4@7d5P9lfiK3w4A?`;-L?p@FAUl&u*j?cUrbxKIjN{TVPcp(jSde zV?5r+hY5l<#4PR?6-vXW42f!o$PUA4bl1!t5Mvc<$;v8KHI}!XT#RNmd#4Q1g~h1+ z`L=KSjXzl(96dxwsp`sga{K!Nbez6Km9R*8`}l)12C{Thd<r$#SN5s(BsLo-JD!WX z@~&ExAq$|Px}IbnIJxTldWHslC0ztJ<l7+NT%CHfm4?UOD(H&xhtuT^*@aC22wb_L zW})dy<LUJJ;7XVi&RJduPxsrCq>8Xt$QE)w;?J@#kla(?yIQEc@y30Xv-q{8<SkMy z+yz=X0#h!ZuYNCv<`2eR?0Ukdbq&73COqaR(%y=mp>@#GI`O-K8Mr-~-gn0DPozSu z<YCAF*_GiE#JDjt%g-`3z?0E$eYdG&tL;0Di3KSp;iRZ8GsvmS*wEwkxE#&q*;nFo z6*rFl<6DmW5+Q8Z$*0zxw%g>}tNq>s92*ujlhC{b;5G@}EJR{gM#mb%ia$ZSw^XX| zq|0?RMdqu+m&z1_Szjmx2e4W2O8}DKQwag?edFwke(WSkX1{Av@QypTY(L|5guc~1 z?Zg5C6q}PI|7EcAkJgKS1UrB3<o;FV$G;`m`Lj^upMsr#tnmJ2u=CGTxc{?X{NHlV z+CT1L{CnO*&&v8=<~{2%*v*LExz)$Rmmu?`k;^^}#=W)3=po!-0ct*R2k|tb?NsNK zzt~>DZ?X)uM|Ral1@ZM3P2DI|7R&l~MRUFPQgd@;a<ydev}tP|4{n~F&P8>w-wR{0 zUEn3}&FQxL99qA&9+V&#aUUe5j8g@rZpmy_jn^6D>B*kedHX)?-n}~9jAtI~Ck~gj z@UIwZT~ZHyY$EaW7_4Y7JVn{+?HusYZ?iQ7BCQZ0sh~6RhoQc3udQ~i8cOA~b!rIO zpv!Q<0Ok8YaBATAcQ~cT2G9faj`ZhP!Jdz(<z9}U_5lT~UxvZs*fKbLyNF=N_9Rh* zEk7qMK-CRuT<eTMg)w|an9nH)s1fO1ePl7dy*Rngl?g2@-F<i4Z=dfyF??*|M-Sy! zg53qd4;Z6gg1l*xIaK-e2oMqsyx&WW6URE0^+;q^Gr9-NyoB-+_-Gs#$&Gl7rN(@? zD99v)ia1xd&?KVvpaq#g1!0I4eeo#{hV&3D&Ejh+o4}1|tgeo)1@4`2ygLyOSI!8r zZ=w<ei{;y5Sk<g_ki(ed=Dm<dS<Nm&28c%rAF#XRdM02lpzL;`KC^0&6beOy4NhXy z1aPXTXc*{^^-~Jq7S$Gz5wa5Qr)PaD052Hh6B~7Tz2I=mN)*@{D9&I3W=?2n^P41@ z^4u;ZtW0vbK|q5NUC~kjGd7f?%*Z<4Hx2bPR=QED5KCW?Z#poIOdM~#^v15ZpF!F` z8RlXAb!`6~nfc&E6Tqe>D{yY6rmPq2TaB8F5!)BOqZSAu0L>cFAG5*>i*j7(Vny-A zs4+<@j)+A3V2&(xazX`@t_kc{Z4ILJrbsHP(uD%strMqX*Qr@}$)I#du`Fu^z|n<V zX#>)fYW_4}F`<SH1dQyr>=0aTt(iAOl=HX9%)2?paz-WkoRnfs`e8D7$l}MIt??V| z<-$@AeF+;6ZHa}fS>W{^@ezg^eY?%U{%C?1@>t~p1i0l2RWWucunvn-BvVn*NY&W% z{_#ykxD?D8J(92m>=iy5=9Bevhd)kT<$G1o3lYyb&zfgs$nYvjEpGL`b|FjaHC5gr zg&Jz{v{;X3BP+P|sLyi($dscl`w6kSRAjtJcfcqFrOQ%Qa?Rm>{l-$RfoD$JQ4~-> zWgS_>LGB=HlDupoP>~%H)O5L2ZQ+gkeBy27D#YI@OBgAolUv2kmbM2{@kLs<7`0S? z{*GD9EB^biXBTSG^zEFn8QSqd201mv`}Y2*_g=3(j1q58v{U0~-)deYP51Mr#%`B| z{MfV4?9insT`bte;#LiKWWCONC>Wv$(~LkChRL8!U%aGhiRf+gKwSu5vM3zbX^0WL zl9rAA(!E~iFB)FtlqP>?r1eAW&|(ksGv$JH#ljfP61r(jqv>GE)PfR~4ql*@7V+*5 zhKLP3ogDmcq5_wekiv2%0bsL%`W6c|TKb(7K`vFNK$XA^idMIB&R@;pPZxf$c^R$K zVz*)8!PhdSI_GY^gqG9!#Yih|O=4IHo|He)-WpcC>6pTpxNMdThVRW?5OaiNaZ1A{ z#<1+Qahap6sLbITb>39;Sjfq<lH3O(&AbG1F1L#?m+FRgeGM?_p>!Ljgyh`1ShYD4 zahZtLJ?h)Gl4f7W>MqCiv$syN-s^Cug1GmHZ@yATe=s8p?Of{&NNLcUDU^WfgL}KN zAwPhW@s=~HWn)igQ|%|w%u>ROxHjxF&&V}(R2P1ni5g#@F<<H6whHC8XzE2?&y!Z$ z4LChXtp@{pqpCBxZ(^v6LO-uJR!++iLh_j}2D@+w9_(?>5%DMz2%^jbJ?foW_JC2S z6m2@8(g5bK9^ooA5F#rN@kgRklV*w##Z2p;nP^wEZ;B;<6BZnc`v%+LuQeW=`xP00 zmL%H^nB>61C?I>?s{_j{Mpv&Tba?t#t7^nA1{A2ECVL9)N%JE@4SaoJa(Qr(Q1@d_ z^Ysac?s^1RXR1(2-8gO-^O-iMBqdVe?*V{<xKZ=<kk$8AbI@n@`y`4#h`G)igBdkQ zNcA}H2p1`=olowC1H;WJ7ef%F=(G#EI>Yv1Le<mS$TC?Z4DUVInwgi(LNT13_sYDf z+7sxUuLAqs$^`e#!~yvbL3eHt$OHY|EobG_N6PC00(o52Gto2cc^TX}(Q=ueI+2lN zGx*lAcr<}%j5qN?y#ehGN_zC?Y$!lY8e9}3>a(+isGONdX$2gEEA$5ulkBMZ<=0p{ zRSKE?!G?PY@rp!*8vAS4ziQ+~RLQ8+4t9F68c=!O-j?T=>DM40pwscn*VAyO9JCsi zt8?DZe&DB=Kovj8+M3so-~+n<5BA<ENYls9vrOBzZQHhOTa~tLXQgf1uC#4d+BUZO zHyhj0z5kAxnAnb;i@JQS@_jNg;*B`@J?HaTbehfpSENx(kq!TeX$Vxz{fsWNUD!^I zD3yP|G;SZcJ!Ron$uKE7XQo-J<f#_jqo-vp8?^7<*zu0(1w!PtIEZ@Of?Ds~j=Qlj zeH4nS8ytKDFPU~&p<pCSs^?hfnA*`XB={PeC#S56zGb1jRJM8IS%gg?KET{L+;Gq? zRaSQef#3Z;yRJrHU%|A5y}4KtnY>)HLtaLkCg+B<2jb1=b3*o$MSq%!YmI__oaP8& zL7O%14xYi-vy;qF=>bhaG-J#W_Y*N_x$*c_b148$`QU~G9@dOo%dIY|5(Ob*P(f$8 zcrK~XPLPH7J(*GJfE?Y#MEmjv->><`%#oq>LHCMbBTc>3WsR;kD|YyhEsYO|!)Iof zd}b?~I-i!Kb*4kdm)ob6Z^z-fi_gx`r*V&%y|y+d2ak>C*z<eiXfFG4Dh{Of!R^(X zd*m^vXUAUE*Qd)*^1JttHuds-0^Pl>amQ!equqO)Enm|fpRexGzSpBCoALF0Wdk$4 zl`hxTJh}W)J2cm?BRey-Y6ks7V!9o5@ZM-^dKIp!r)zZ-;XOMICsk?iz=2}RFn9Gx zJyYB$Z^S&SLvN?syX&jXW_KC=d}7M@VK&Nasa76a>ieyZ=QGOhdoK+(Ug!LA>HYBb z?cr+g%hFn%RxB3%gQ2$9&SJH;sa?*a+puKiFu=Tr{Neub$G@Gdt<K6rP<B2}RBL+f z;=00}+)q#{o-0y4+Nij^jNps+183{a42~&d`Z@qHM|FUZu)>1MUl%iqRlYIY{V36h za<vPYm^;ESpQ_^y)<<{lDt@5H_xX&wj81I*>MrJ~no#fU6(5<Inh8P1Wt5@Kal-)p z^rctE^VP+IH2A!Ct)Z@nHOCO{|Mnr42YeO!qw%ya*HnL%@yw+$Uq4(-^qxXpA5zl@ z@*BQBQRP0j{+MYWfjwmjsfJfvbw(*PTZ`Dp!+>*rL!-0#2;}D(IsZK@*W2Uu{BlEm zcZWGoP{q%VWl-JyMy|{%+UhGsOuqpEcG_WshwG{#ad}Mr{Xs4FM7aI&_V(u9?dS3t zWM6K1{!JiT5b8q)OCrAQXCXtpFk&VY5=0*aPa9LP^=*0z-X>w+xO%n!ofJEhaX>(w z*};-}@{66Hhe9%!m(^wby!YC#YrmAg%)}Idl`>Rp^$C@zr%laaoAB6MH`{TBbs0!t z=z1n2dTv|+imLeQ=61R18k=ufAF|K3!Kl+eB<!+w3OR-_Ukjv^r^TfI&)Hhy)^H4g z=ZyM80+^YJQ-TO4FfcM<7+_!k;5z~Vco2~`6ElkT?mmrvuDY~x0f~JWf#4BQed}3; zr|M&c3+^5kKCM?*mksQJpf`?VA<?<J6D~e@&fue@XV(RxkDO;<$S-O5LQp_1B!^Ih zQkmR)3>a4zfpGQU=DPjEPhKU&_U4ko1xqAkN?p=hXL+f~i2h^M4OY!<-c8OTO*fzJ z`mMp~^`mu~%K7E&*W~+eVa?5-18d8RHNT~UPmCx)(gQvVZMgkBNZgFU1EDXczm{ji zj%0-ID}6d7C?_bTjrYkBEZ<MwD)RW_f5=SEU6Wz4w~Dkl)xmzQS2dS3yBIQ65O8#y z9U2b~!A!~yhKx3IgRml6mo`Wx=uK>SETNn7;#6&FN?K1N)ai%V5KK+QhIAIp3?&*Z zLWqDb!$)w+|9ab*h)tx1#FJH1Evc*YZJcA$Syn<}H#=TWRe@DAJ%mpd5aRbLPbvb% z40_MT%dR5=AXzeyAU7OE1)=IjV8Q<s+a389SG+Iw9j|D(A-pSQFtuhoOscMh|845X zhF73Dx{`$5^s%ERE<lDiDzcS}12hH;Bg_fC3Vy;iuC)hjmx-tX9Xfs?f|DBuL5q3p zfDVr75=b$nN00;$bPbUzV#v984sxLnEM_A>y;+C~rKM~?f>&)4ml_7x#OVcB9oO*! zBh)IfcV9jc@kYe7V_8DBnDc#}&b4@{uEaWLn}7i95dG55J%mgl^*p84hLHj2<FiW$ zaV~6V@UTgsXEg`y5rm?^ou7p$-^o=OZHu+?lhzCII>@F_UxF*?9vzEm6K}NX&jnKF zdwM*CBYA+rin~y_Ll>dU@+>jThHULIN-U#S%ue8`cObh?;K~^bmxTw(*^sb4?oL<N z_fVCtK03a;M85vAsd|CKrzm^(u!`_YY1m$G{7oFt4lXWfpN)h+3rBsZ{cW^I!E-~s zCio0St69v}8M~)rHS@1)4<GT@x42U;EnSfv{E3Y7ON}i!cyT+@?Wz~a{CvFR`2$6v zS*z|@=^MB}POfz2cPy~%v9$^<=zv-*YCl)efIL${^lS-yc|I*%FWgj}uBOC(rtT-~ zRPd<}+iNHMbmEA^yDs~T*0!@EDj&8Uu(fq5(z*Ra$@215+ux+0PT)xn32<wL2dgO4 zoK@<~e$!|@CO>4EC&Z~cdtaH3@$DLBX3h|F3s9apW<jfW40mlUMZ<VmnkFI?vTdqS z#qg{49l#?xdqVWPi=AVzHE(sCTIiD-+d15%DGR;9yS2$`RGM(i=t)XB(!(K5mK<az zhmiAs!fj<jpF{+9Sc^1itGY(DM_l-tgZNZ5R(IzwM@4EIu8=Z9SviI=OzU>jvHK8{ zn#QPj^LCX8yAQp~kO-MF9~p@i`48_0a-x5d%yJq~XRdCrOtG4!opK~CRY$AjrHMPh z#^fN`!Tjmj|2AevS6+vhFs+?7cS$(SuSfH1h{RVJQr(GI5NjO_U@B<|I0;`Dw3}VD z;!p!ltoZfX6EK%RZ)+PcI0U4JRNk0Z1Q5{%Ut~$a0WWfzY>_}dRrkl|)bu1zqW~Yk zO&`lq2xk_-I;mrPJ*~Xrww_0={T4{-QJFu3DeGl8AGVz`HO!?;XmJVX$4=P$(^;s4 zig`l_bQ!p;S}#2DXe>W0gO8#e+s8!<Z{`BUAB3e!SxlnUPWOK={~|JR>YR~|vn8ug z<Y$;uaA(YECiI-<rFR$CZu<^#^X>TFy9NaK5>%W0mx$!wox=ayb!7X`k|W!HDLMXs zK}^{GljQi%kN>YtLskZke_OmGU}gS;PM8?~WhC{_wamZW?r3Og5ioMF6EOWrkJ`D| z*yz$LyBIlpIGEDQSlU_B3;%Pm!=U@`u;!nS^1oyn{(nJe{`s~32dj{UnT6pmq4`T_ z{t}wMgyt`y`Aca25}Ln+=KoYequ!&@%G?56Nl(wl^vm~{G^}`$ffGl{ZI!&`b?GPp z<Kz~zv}VPP9>12K4!iAf=*{sSgZH68^YMHkbiS95M*e$$$M3}ym}JG%=h4@ri?7?O z&2N2OH7emZDF5VnEjHE@wQY^Ep8d~L7mwZaYsgP;pUsTj8hW+|WTA1pPe<!iJom6{ z;I|J)sYTCZDPC+<+^^da#T$Xrm3xOfl~DYwzR3bQKuKBQ{)InM;amk@^#70wwf7vG zIEOWvFW~l8KymFUKPSZXzm2&I532p_DdErWmaeboZk_I(_C&;Cl%tMu#RPkICX&PS z)5L%@zPqx|BP)Jm4lCUF?Tji5^e7A`h}Se*SMpQIKO9bS^S<BNcMN#FLP^icYxH!F zAAj0zI$iw`=8`o$7e-;j9V*jw-Djf+4a)8bfyVCLg`c^7YpY+Vz24^K`-trF4rPHj zpNRp}u&(_YQ<0sk&Yd5fU<(xNpvx2w!$tdJ6^`?NM<)4%v-kG&@abLa>wfQQTdlwG zOC*&U=1KyOB|PI}EsQ?Yrz`C3PV5Rx7g{{~X}$r{&2P}ObiRBS{ca@V933yAiy`H@ zoq~s#nm3o1&AxlPe#ftUIfbXv#1xT@%tvhT2??jKLCta-<<wU%-E@j+22i+tZzMBr zVoDB_D(Cm^V!eD1jeArFa>%S&r8C$we7C+AF_tJp>!*yP)x5!fsw^3?#SY(or*^M| zao$=gJrq?SSVf!4hd_%6!owoSBV9*RONCLCYWRFir<Y1z*|5pL^J*Yf8cb)mKY}&I zJ;BPQ?eyl{5IUIi#+lC>IRA5y^Nn-IiI;nDJV941uPJXp_+xp{A_g)WvyC8}a_pE2 z47BqJ<QB_ms^aC|47eDgxp^>dfh9sQxh9DtTO@*ovCTHDLq&Fj+B$FiElAOA8OF47 z`=rDs?(ETFGehpv4r}4G=W?;Mf`68f#+i`=gbjG1Y49sgYU{lCp3n&0fY<@1B<J*I zk<pnn@nt>`8LG1nixrBj(|=muz)Pk0wQaOs9&LEM1eXbBbz$Ea1xEH2IjU^_Lo6V6 zq-jqo7(Qlu(3}zLSoVPpR_jGaHFa76_?rmJMlseP_{CWhuxY#JQ#kc{y9*6hf0`^{ zG|CGHR1N2eHr!Gb%MqBwi6g(7WmTCxcCDLY)^uqSeG&Ktf{51{00AZU&%fn-L61i1 zApuZOaO5mPxTu0h;l-9RrtZwUEWAkV`4eSfv2q3znzxt5vRN)^;fCp!sFiblS)aDy z+4~7cLb%xqR0nR?fp4oV=B`)!<B~uLGum?G+rv3Qpa`I**;wQzSsbncT<JZ)y?&<v z+|D2_5%Z%@f;sd}s!i!#I;&>hG5HnJ{JN&ZQmpP=w}{dQ_JUyM@aDe3pGNUy{(*H& z7n!vXfLWVSfOm4yvE{X>*H8aqv=lJ~iM*~fi7p^IPCuB$6$An=qt#K9Z`Crm{n`(6 z_vxA3*c+&9ZQERZCRL@n>;HkfTK8+N@3vY)C+9b;Rc?X|p^ka>>7TqV@g5hqy|{wx znZ=thG|p-CRb`8ZoKlVj6?P=6kwW~gPFctU5V5R4B<7D`Bm3mVce%H*kjOMQ@p|Hg z@CyrR&eD*vSEyPfM~46{=ya}g1ExuZ_^VNSBL*&&CRuyF=NVyHt$KOW!14MKh%{)! zY(z(HHH1AJ1xR4jX@96=fqb`*b#J``yw45VOoBX+F&2uqMyc5k-(ZRlD3R!iYCGRw z)KOqe={2>ks`-W{n*r&yiIh6rOs18P`PL4feQC%86k*d|OrjwnZAkY0vO(Z?T(F9q z!<ln2mOb^eUDB!9Q;aXs9)N48fA)^7&Rxf&!3gi7if!7Wr+)`}fh_)6q`?!2D~i6= z<c?viB1Gnk2+l_4BXTD4PLY5;kN-8Jgv+IC6q1QZoEz|4G94fpNx<D7AURRY8=S|7 zeRVszmHr&c`OZTigg9xLPl=Nlm02l0OoeK%nup931Qpp7H_P4_FJ@wz$av{4X@e() z(vJ7%D|5CGvI3u0(EF;iFSGEDV$zfsh%WaB^YBi7E+g;C&iamB<pQ9XLSPqj%XP(o z^$#m>;nOHF{3&|<T<%_W^pl7*IQh-=62@rx2bDR{5{FkH`#B%<9u`q{&o~RlaU)6B zZ|=!$)@RxG@_am-4mbj;_4&;*^o2pwwl93AuP8?F7E;G=so@FiPv}C2_E;4Wb<Upd z`dtLp-=@CV(!#ps{OCWxyb&JHv3}Vj9^X(-;tgwcvq$mN1%}+yW6}FIY8(HoO<i#q znY_I_#r?R*__^Xc5#_SwyU%4f%<h%m?%gxENS{fw#enH&fp@3YNK2I!`mLUnZ@G+R z9X<YQp9A!F(uPHmc=l+l0tGRYEx!90Yqy6%cRJPmohX^y$On-ZSC7R5yEijdf_#@y z<UopgI`J>g4fp0X8iVZ)Z3U{!ufZ_xre?U4N7%|Y*kME28F_p;6))!`S%#}ZZN|pu z>!4@oj~lUW>k9`U`{NBMQFDdK7p<*+xV9A+qitrd5M}GuzKH$Mjjcj!TCfn>(faRG zF`S|E8%u$oPL9GcS+&aeu5T%~4-A3{9k&cZk?uc~r0yvrP0qSfT$ED0VkV-}MQurS zNlcW)1RtM?%mqn=szVgoOACZZiwwE%>-7yBQybj97(g}K)Di8IQZ#&p0sH7XXnxA* z$qXO%!zfJ%$McOd9LP$61q3)@=|yi6p{k?M3<dmXW43c#;7Q?J_+V-62XFKFc8=z< z$N_+T+!HY4<n%tDJ#?-^F$wUVD-&8AQ{s0UEV>oz-eKeS#st^{kD~uq%!=(__*!iL zt-co9fAY2ddH!D^MSOh!o6V_z-seBiAyy^^*1vS<FCF?zhyK!`zjWv?9r{a${?eiU zQ|VCU=TJv>J+6k2M|}d}6E{64O>yYho<heUU;R`qTih>!xET(Y?jEmK_s<_|ebw~K zX_+G@`RG#>`nhb$Uyp_!Z|L7&gY?)0?aSwt&lA5NPqzj?7nW<ZqH*Y74E6lBX6y7V zowDyd2md6efM>krPma%jFN3)G)aU0SD7l`eX*WLfabMuf9;Yc6EElSrt(BeK#PP=l zf^&7}ge8?See8mmp}9axSYbisY)czQt34VX{FbRlyWE6IE1Y7S&M<U?=%qVxmp;|! zdwav*z$CT*^pf__NUQbri;K<8%!MZBGWw~-bIkzt_NiCG^U=YA)c1CLsiUrfJHrqf z`28-H19TU{6wBjSt*ia1=utp#zJ0ou=C^>lJ)y1<=sR$Csmgb4|2xMi4tw4bN*lkR z?vz4ossXuGkP+wNfmUbr1=P<yc4Z_c+t=s$>UK~4;E=gUP{YrTrBBQ2QNF|~((W@^ zOs@qIX5M9uhwGv)etky$>s3ALLb&Vo@$vE2^ZV=#d`D?v`CBkU1omA9OCq-Gd-kVT zN!(O06u3SZz802f=l8@syhFmaS^d_~H#u%D>zJS#n~NpQT!g)^yFwzLm(^MFir>z+ z`;fe!!q_;0l@iRK=oGbx_mAq`F5&6d4z9x->nc$H$emnP%)*p>6cwq@z2DWAJM7+7 zy-5BWCPS`((C{1jndDf)Ld_6z9yViv-*x(|-7&=C4>|gCqo(Ek>-8_BV|B1JW@xLz zaKO=y8K5vy1*S%p^MvJ?lh+cy4i#srteFia@^q32lafYmE-o%UU7p47$u(nhEkhH| z)<j;9V>;nbPnJhqd~&xBE2R^^ZJ|#&FDY${N__BYIr5M}$+3*cE}aq-z&oL^_EAT$ zbZ_a;Ss!IveRmr*Q_1F&l&<)flb9wFLfDG2;Z)IhTeo&I_R9|<qYJsK^ky(hHvgnW zAaX6^cDuqR)#2Dc8?aj9Iu_WjT3Nr&XT+TW=HkUnYyEJx*e8lBBduDg**P3muc@1c z%)T4XC;F$MXyT!Cu6#YokLd}ydw{eO1kc?@QUrCx^`_{%Gk@rJt6T!JjLPHj&a9?- zHJtS&6UO|aLbG|&a9D}&LZywZ))MtQY8HKn@ek)VuicrRj#Mjk;~7^UJ3DfK_)#ly z`4R!`jQV(mxq`~<>mqJe>7R4%=>woAgNZ;493F?TH90)$g-^2x-dnvA_z?jz)@x`G zSK>cox(IKC`Hc3qVo7uXr#%o%ioc%XnO9~taNYr0blqJ3@DZEE%OD>P7hd#ECcY7L zo;y+fQHw{Cz7L@-=famt*q%Y+c$SO&n={UlEcW48GssQ!?5U0{szMC?K|9wwhPaj4 zwdx%l0$p3k?&@1Iu5_v5M};O5qc~Aw`G#7`IPy>Rd5B|s4rj-%*+x`Vh%1#-ttB0! z9dSn3LXP8jAC9z%URT|XAJ>HrKBzcxw5?cEOEomENjOa;PvsQ3sZqM^w5lJ_sZx@? z+1kQ4pV2!nb3Pw8t=F>rGok2p8BTGZ2&pb;l7VwBSJa)1q9gL<Fp<Nuq6g$`GV`L` zB~ojhqYmbgWAL!C7q*pFEft55LQB!gEo+_G!7&kcOFwC{ej$pdj5gpwP=zU{G8HHq zw>F3=_NrihU)-nDDo-3sG>v+&Mx0G2g11zz%u9rL+Mab*91pJEQ<ZU$vLo{_55wOU z>8k#en3BvD=l{(N65OtV<9oi<?b}h2)>tzig-?Q-vShwrzga`39VzRjaGt#dAgRiO zS;^tU7q9$a`K4$F9HpBdw!LDj-=Xi$G!d@K0OBK}MsoJ+)YQ&fxAdz|OxG82O4L~0 z_FPJ~vH0D}&9cU`*p6TPI;zAHylbm@#`O1F>PdB6PSrcq(@{bpR_TTb?z534?GF{f zNJr;7E(8z7*n}BZnIsQYBaO;Hy^s&WBfu4h;K*$R_lN2$XnKih6|aG&?FRQNLn~CY z52PoOx-g*U6)3i<m+DJqHEG%vpj;{j(3zn_pc{dJYR*2)(xsA3w6JZZ=Al>c!yI;y z8|nT?iEU@{owU**bb4fvYh}*947^swgLQK~C<H=ynSNteWDz|EqRKRN2v{O4;sT!U zG0qqYO<z_pWqAoL9gi7Hk|p++Q}M8L9b(4fGi}G*3He}`kh*Do_)1X+#xaUep}jY# zwX<*ze;fMwJ;S|3T%{DSRTC-2mCKfRbNXV(w2RC@C~&Bs>{SK)?yH9z;1N76a8`n+ zDo=n~Bwv+<FSUIDX-8=;;Z9w86>RPDD-aiQeaJ|DhuGP!9TkA>hCto(ABDN(wK+ST zNwk7Pgum8?!aLz#=p6DY;Im7x&_JM?=RBGhM<9nsL9Q@B;6YcgY0It}+ONmI6wXWE z50m^!;SCq5fv_K-#z-_R;jF&JU{=l_9K~g*xaM|NsmI3QX>$vsUZY=c4;2CDBS6P= z$1u@G+@12z1ziRX@vKr6tR1K^TgnYo8i}t8qQ&D4?UYA}nAYk{`Xf;SSnZWO3m2`? z(w9HW5<F^`FWlz}X{-r@Stm5JsX)yAd;79<%xYER8_Q?Wr`NxWnYL7>;MQ1k8NhsV zAB)EJ7pYb}inK)h)M>*Um29;9JL`ob%&SmPZ(W|t_F>N-ZUu=uc_w=GP#A`bHY@T( z%C#U387Zg?g$9B&?5ccJ!c#sqZtji^!oIWD^?l7R3ok}8;0;GF$PwHdKV}5By-%ST z!bUj6(9_MBo(Zh9!MhG1v9Yag=N;|L2lD9MJus&TonatYpzlB!fdY5K3Igr$;H7xH zEpU=3X-2z%z>+C|rJC81ZBT=j4RO+K`X-V1>nNC|6*Jp+g^HwN(oD+&oNW#@O-2U# z$#d=+kkvf&QnM{~F|pjAo=~2$t6)?kDrTbBqZRUjq~_NR#$tJ}uz?h2-@(?*TVh@1 zXicu4XGc{KL&)-iiHERA9Z+X%bz~JoxW`U?*#JoQwbx71xP`NBNGuM*oKSYGiPMYb zaqK$l4f}=Sp$c9QuNT`$j79kw+-{haHb5ISY=pQE&kTUgOA7rVY7q)1fra;n*j|<> z%QJO={qtOaZ&;w>jp!r@OG`&Qvp3ENvwW7XQD7W%jVQf~%LY)`F{2{ijbK<x7pH7B z-9bz5LiO^JiLjHt)cokpctR&dN1&esgz<s<Et~4LjFA}i-8-3AyXnDyE=xm`ukWD9 z+o(Qx1;^}|n}G2ae1ip_JPN!Xw1~!7Rc`?!)b1vw(CwF^3{6VAm)tGHSQ)}20=4N~ zUGzX;pE7X5wPD=tQb*ugsNkE7`a!0bpq+gVYne>P+i)el;H{xYUNCh@RV5qH6yevv zC^&`G6bq^22&}Be0X}U_vLA9+bw%ixx01toHL8U%MUXTQ0pJW##PJ9)(9aWIu8$Sq zDi?<ur59jGI`EnXGL-LWlq3_dnMN9S4HVL%VVA+w6Pi_><ksukQ5(W2s$QwULdcs9 zK$#c`SX$vbU#kMV18RSV)g7)`^>E<%rsm-aM5i}-Xg^1Txp;@*;8xMmD*=eX^=Y{G zX+RnL@|`r~x6AJcEyA09$Ld7L=43E3O;jiwubJwh9NMeqF43%HM#vwWIsI|N&xP=3 zcfu~JpR5am*+@{(Kd?HQ%`e`4vK2n*4>Xl!OveWHH0~(3bm!5)!~?mXu^j$F61PWz z;AJ8aA9e7EhSkz|1;Iud3<X(@{}~^k=?{C0XaSz1fn|ivRHSDSqz_PcPL@W&WP*qJ zbGq~Sh_&a=cb(v7XmAD_;4P4YnulZ^%z050^WJ5ng9=->v)1)0RXhs^SnjLgg)%Dj zhi}b`%kw4Tv2wYSc-*#3$`0Q<qgl~BC63IYmhmoy8!_2z7Z?6W*6HHicwJHsmTL<E zpl4JL#gEqUpB_|PNA6a473zm^!vp};>#T_p*BGI`yT2&2einVgXSrjOll8sr{EE<D z@q1eVkjS4L{FnIkUs#oF|E*Rf+kdhu|9SrJ#jpP_eew@}W%{4u*T2bsg%aw_77SE> zQU<y4TFOj(`0Fp{GO$9Z_rU~vxRiPE8{;6mKkJ5y;Ya|ZsDb%1@hz-8t??sEh?6J; z=Zo`zKYoiu)anJs;Hi_>53i~pqzREdi1^#f6*AVUj3H=&gijc4U>U3_3x?MKz}T`h z=_3+h@`PxJ@!G3~bH=XRO{cD?MV1!7{7!(W7eX?$(Duh53TQE{>#w>enyvKdx*%qV z7gZ)ZQPE-<Z@yxCBw?kX4EAAdvTbq@OTdC{$fUG57}wBrhzMnbtpu<{7-`6YSc8Z+ zQ%Y^XfuIH^_?!IyoBaQq{QsN$|C{{(oBaPjH~G)@U*)nwQ!MUBrhpjxeiO^+&gAOt z<nGXAGM`sIKAI7F?us^At%SiA`E_gKeTnw=zS=qo)I55Bwr%F(^KEVM*<4nHjLrqJ z-@o01g<eKxP9(cwn|SJ8SsW1;=+8WBBX2$~f%$UbCu#bvW)yR;8<zU(Wy2wA$LZ9W z4^{;6w=Bbeb9H5g6%H|doPijjxk3t9;oPC^NE^ebKN{}-!(SJn(h6i5<q{2*)Ah+6 z{>`71_kA021sT)+-d4I=IUL!+@4q#^cghz5hxl`y2P-1jgYPlEbzGd#SM9eQYYMtl z4-zzU(`$P$7TYT@93Wou=Q^)CglyfrC_CrthF#N;*6(#_qEuTi=k@-H>5B5P4KTZ; z?vW5CGg@eoh1(DtVerq~^8jc}ZtId#SC8dI(|M`<vs-RJntTA5?`QKIfYs$&uE-L` z<Qt5*UMnKRyvG_1hfUre{A&L8$}H2ur}Oc4<?Ywg&G+5ky4v(7Tta3v$d@!M8no?a zD?{{e`sAxrTK`Ha*z(nP!vnR>uU1V9x7%;Yky2Sl{}fqWENPSdFm^Yg`BHe<?D@Cr zjaKuQCRFKEaKWTN`(RsrzP>1Hmtm~kEZR!MtMp;5W1WEOW7%Pc;u*|jCEph_>-Fcr z*hh7cD<;i+-M-1eC-q~<5q|~RKxI7bhOa^2r3<!LoIS6c0;fWMO;Hp-5?LHzV0k!T zl70fVhA>_Xl(mNRe2EZRt{Y>U91hh-)mDiyE$(L>oBGa*j<55|;%(&)GV>KaJ-rq( zM}*v8Kq?OM+$)^iL(Dw6H8Zt7619@@r$mqQzYjx!xe#xL1tv|rYmhPwqUHp29I6;m zzi(~?oECU4ezH%@i<l{m-;c}`tsYC%a5}308LBPP5HZsxCb1ndm8?(vEyoX+j0u89 zG^<pu81tn)Zzf7g&C&u2U5pU0aFP<y)+l(El-8OT;ZRpSPW$RNZ5&*ltP#l`k$lAQ zyWV2F#?}&xQgX$YjlG*zr&Og?<;gmG_#lFmN6;zVKz#sr<elJ_Ps0*>{~~VAjma}3 z6KErz8IB<s8fnL?VKlvfRXGt4xFZwClMPji{iK1?tG)W{Y0S?Px_sG4rtjjyp(1VW z_~Blk$~+HCmzay1Kf19@2`^UHv*UBLaG9gI45gp{BtIC}kwse@4frZ6J1_U}j-9Dm zIL|GE`E46^1384@Xzo(So`Z@9BIi=FS<$Yp+uF~}%G~P79j$r6oJ-+3QOL`ql4+;~ zTj1!GoIV)c?S+n@&<>0OTCLFs6*U?UO4jlmo%4~fM1^9QFGJ-wl}W)sGj|ck2tgE{ z<^dRH^8j$>DD2dncl-A=WJ_{jz8DJS2(yLE+G5M2(%JZj<#6}T2Z$u&DgKmC_Dihb zC0%KMy}{))_JsUbsx_rvaetsYazR%hXmP85)La~T26nPRH;0_jaM+*?p~1RZ^f)E8 z?T*{ansT-JGJ=kox^FruCg$BEwQ+v0Ul5`nF$?dA{QcI`%uqk3&m*Rg)h1V*G-<(} z0!#kvM_mzMPex^XRwxIp;i0R0Mx)nQIs9m74kNc}Fbl6omVNW-T>DWz3!?)=U8vHK z^4@9p;&Z2l2L0mg4uz)re53kk5K2VG>#(F{d!k50v{wo|xxUm;bH6W;E+C|=Qw7L) zKr??Wb{O042R81PzWV-3L4{|RA+Bm=lAFxj%V0sET8SO(*yqfWg-O4oZdFzIr~>8L zS<0Vza~~p|Y+>S^*rfwg4%M<ztm1?m#Tk$UC|)5sMx4%W2)g7tx~LKlR5fLnWz0a( z@xmF3e7r#Cn%WN+G-wT4EliC0OH=XUh#w^^%^by)T>(UOOV+j=?JR@VxaOEt?`dVH zIekLc>Q0cGn#vkFDBhzT-n>KbK+w%Ezz%uNjxB!ua8!C^esXofa?3wFkeoT14FJM1 znv?U*R<xuwP>KrxiG(cEU{8{Da*-p;eHFxKlCg+FUYG%<H^y2yI2n{4ew^2@JZg2H z;0JPi*sMedt>s<j(k?LS?;eG>D7amg<Gtnq@RLeEieKW$u6$ykUSc`17wx!D(#t1J z7eeueNn&Cp@{B`xV8~b3a+<Ecv!odxt7wv_qE!`m^6~Y8q71XjjFp{oix>MS+DAv- z{YZY%q}a$8)O;CVqS_n#DYAftB|A(aGps^xOqImw&rYAeNBIjtm93<jxAv-kg|N1g z{Ftl<UKW1D!fewk_82%lHSl7bCABh25og_~hOT&tDyk*0Aa(wHZLx>qapkv<`d8iC zZTh$AgS^Fs9@r1G?n#h=RdE#cKu5!B&>Z{`oud+v$IPPmQkXbT^}UDG30{I(EpQL2 zYQach0~D@^GGZdHg)$8L%q8`QpIF0y;MovoDHjXP`?1Axkb?-rr6pwbsVhkqJKekB zz1fNT7fT#(pEP2M-P|?wdD}rmZbLR%vL?U#Q(679QRq7p=Ff0umZ}xx74b<nS#bj# z!NRpSBxtR9YcL^c#a~yu$F65R?!vA8Fkk8Knw1?lmi4OiVID)N*<)&^bE0B)&6OyS zFOsKMeEAie9}aF4Gp0FoWZbqTA$LRbyg!o}!Faxx3AAhE*MA9S$~3oI4~UHZ!qrK; zoZB?OkaV2L@s#|ft~4iM+f(k~3T<|;!*Nsj%*foHt#Qbv<3djmxO$cpTMbM>fzlP= z^5U6+C`b47jtQ^mlgzX&1SEL+1+1AKTot_+d<`1|u>NTyt(|BWr>*-m?W)GlG@Ull zL7N$%u7f2ikNncMCwRDugGT;gB3HaGE#++46~VGiQ&rHBi!{lULV9rd7|)V*;-a|R zD-t%{?y1e*ELB;}{O06u&>XbkR*E#^b!*l$&HkEVSCxkT$)Vz1gZk|>*UBoU&K<Nr zuT=CLI++J%i&>`9rV?6c<M1}OH*O3_P!8fHziaUk4+0hBPn>h7RR&a2gxMnGi|Ak_ z$Q_`Xeq0YoVb~UVwDpwRbq~3c56zZi0rBZWfJ@&x27cPe=|~Xktax63tZ7o_tIU{V z0I3hZYZ<HYdIn5**5UG|*|bYbiO==1dCFCeGQ-i_0U2x_n|x_f>I+M|PPiqF7dz}j zr$9=K(U}l^^ac{4=h~4`fk}G0AD-GWuavtv!(<<u)8w1o%``yQP$M3Vz`g?erc1;~ zF*hFI_Xx2Nyl!kRN!}1Rne$sZ#@oHbwF}&wkS33*19Ki2JZ04uyE6?2lE~M1#Q=DI zHVe&a92YWf3~|*{&hL^Y4J;cPBKgx<=D<rqp6-BaO_@eR{4LU=1428hvd}0dvy~n_ zP|ztLbe@}Pb91^Vn#UIrN-Ca1amh7^A`lu!weh@<kb7sPO)w7HC@4??CL?4h%8g^1 z#nG*jz0?ITCiY|G{XDX961^=DnkKe%8_(<ZWLrzoB(z$^op*g*4aPRxk%HeiJjE!S z<83z*Gpy~HEBUI+B_BKywXl>qJyHj^0AS`%z9D%dmWcyr_U9I(xX>~~nDOG*RTj^V zCt@h-KwWUIS|Ni0ysqO~izhlzLatUsuu<Wsfe)Q679QCyz^fTJQ3|`iGO=*ihPvaY zM8kEATrBM<Cmm8@%&+jF>Bs!%+l8TyAASSJ-Q_$3<OIBdUzQ}ZK;+2*a+nrkL43iF z*gd_|Naa=E;wOHw3Q*!7gHNmiw{iw8zR5#BJ|um2^5viat~>gN!p4bVb*(t{>`*!n z9Y8}8XvYk+uYRC|6ArZ$_D%pD04=0?N<g`CZ11@*dYnXUu6Wc058A1A{csU=+8LW5 zX6Xpc=M<i|x;jo*-#7yyi!b(ZsS3|ic_R~$qAu{lOYT$2)@ydEJ@DGPa%Al4{f+`x z=_Brnys8Uz5!NoJcLTYhymuxaqzknTDg7~qtraw(wag?tmj#BQOQ{cvzZnR*{`I=& z_KgdWeH04tFWKwA>)QWM(T@EegZjU#XvhAK4*u_w^gqx4E9~{p^eWq*HP!zChW~w< z^^ZEuPVi?Y;h+73|IOprf8O{%9>=n>{m;h?{>JV8#_j&b?f%B?{>JV8#_j&b?f%B? z{(p+w1%3RD+x?B({TFdNjz4<_EeRxVeEM@32LU?28r(~PV9*3FK)`Uc>zY@?U<?#Y zCiX*(tVPFiyoayQ?YBB4r5w%b7z`@xmzI`F<+4+M_**-(*j!Ki*<<CtR}}bXkJY6M z=W4+g|9E8ZNouD7Z&1Ld8hj6i-q~bVMo^~A+YC{q?lg};?zX0#YM_fGg1AP+a8<ov zl!!R#S0;PMNz<9Lb~#WI!_(qjAAe2+d>(KnGYu|f3Y>r#jQc7vjsNj^iw&IW7GLEs z&%`Ebzs1o~%++G*)ZE)FbIMP8!pi(*BhHGw4rJ^2dAvx`IhKm~iNVIlLc6%nvvb?% z=0_;FCRSZ_`tuSrYgP^des~*=>A8U?F&eo83X>bhdVslnG-?)DDcV2r`#u9R;GbqV zeIp|qrQ*OS&E{o(ee!nv+{v&Vi*2&8O9<y%(5(*(Vs5&(Rk<?nP5ZB?XNi3^Y6dzf zJR424C<a&P+{3vAdV8cuFX~X<127TIS!mRngib@Ml#88PhTK=R(_*fWC3}{?KLK1t zn~A5Z#-OXCtA-nL_H(jrv@FqA957ZO#&&?1fApcmH04RdVZx@1Bf?x#UhdMu^XWDC z7C0E@xjVKWUuD!{s?|ox(KfeCH85t^ke!(gArE!XaChFP&L+8wk)_YGoDIzYiYS?z z2!;L1*xjzUvdFSyHnK+6<HeO6&LyirT!ka<JC^SfM~!yiIb8ONI{Q+g>pYu2(qkNj z5<!M<6(7^LY3)Ej=NipC3X3Dc^cNMg>EVX!pT(mwmdMqxYPv9m1hET=NpIkZZWH3m z$gcP$w^i|}l{@3RHXm-=mGfMY+II4z<+(@M35VdkX;7KQ9qL3bdj^6WFp-;UV<{vi zaqDKfgA|-=UCC(Wz5;`%ofFPPvgPoN>ys?mD0rSd4ieE{2Q%;2a$dsd26Y~45uu&b zi<Kh}AwB{a!g~kJF96QmNbSVDa&oYzBE7g_mbh|Y3W#;WCllZ*EU&dD3vN1EB}k#D z=wD8f*zH9rnC6(=qx(7aP9v+QoWp1p(-+{>d&uDKg|FOXmIN&LxUT^FObC%|B2_<m zIhc-4lij)QOvb}YjUhIYB|XVVvezSwga<(;W`pFk`eVyT8690~@bolLM+qg0ECSMh zmT@~Q(q6{TN*?ODw2@~My+X#2mtJqOq)Av;M-~fu23Iik|32jJZLr_wtrWbW2vOQs z9wJn~5uXa$g$n%n4lwQo0L8BNB8(tfb%KkT=tBL9l&mZbk(^5->F3*{OhH>lLZ$(H znXSNZi?y;oMh1hQEF4YXf=QmJBuS#hz_3rHNf~rQ_0SeQC5AbfAVj^X1w9s6jqW#` z23ZxIU~t0W)u-5g!zNMLfT8(&Lh4(}cZiN6f3w5#XG=e1(OrgiFj-rYtsnsySMgqR z3-BVYp@W3pu5!HiFMtBv@%nXCThb)9GfiUd-&MG)vhhkHW-UkwQgKrN8|6l&h-@tS zB}*+|dt}*d8aGm$^2U{jE^5ejIeWTNT;Qo113;5tSJutj*R438@M(PeS4epEvz|Ua z*$NvrE*mZ!q_-InYrOXt6IXSjfmwutcjKzJ*JByt{l@OFp4eD+3a;b*zK@FVU&wS= zrx;Nzv!c;}wb31f%m_oglj8^!4Hk0Sd;-Br*RfxIn5(~%y@G7yB=QzI=9g--93p=a zhLa5HlOkbEnQia*EEc*_9jd`y4^W&g0pFN~qxR1(ZaoL87fcU3!lQ~2Vjc<A0X&o- zZfg#7GcxxT<F<uHL!4%Dk#eAOr?$Mvj0t|(r1Lx0iaZdtQ=T$h#1i4|L*5(iM}daY z$*t{zaH3e#I@By(aj;}&qi%F@Cjr<5w2_^|SWusOAkdfDace@-mwz?kCmh^6)g8V& zp;I&mni#>5cRCEv-1G#EK(q?2W4Py*DU5kPu!#~JB?}N*lSaM^#A`J|DH4H|`AvOl zy&b{3>DL{6>x26BB#plj9kiKCEuVF^6f0AxiY<oT0comG(Z#2<Ug3^NTGKs={Lv?L z-x;IE1As8<DyvVeyfhqT?P-YbRrX%CoB1m{V*MK(UYwy~m(rGoAE7O&$d3<Hyo(c3 z+=u`=tLe(sf>o$@MZD#&2nV{&Nbtkx;Sd5mH&bCdy17!lgjS7xIuKnf9!X_sZ(Tr# zg67bW){R>CGy~2C95mQmJRB{s4upI2X@lH>bofH}zfk)gCxuW&5zd{VVA>GdMbUw> zcu2t>99=%e>(|&EsQhkg^#kK=gQxpg`c+K~sCpfIQo)#eX1$SKUP@GQWjZTz;T6tq zVE4r}xj+>cvM89_e9x&qq3&#ewu3omCHWj!CvjYnw$F?!AMg=C%eJw>NH}Wn(C)Ch z%tA&Z-Nw`8i%~mh;|}ro_A#K-`)KmT7XTO^M*GTwE-w8m#*YA0fpT2~Q(XMYlK=cc zI3!a92pdL_j!^b|_m{!l86$~e%46O1v(Ew+oN>xd)jvvR0UtgOcYo)s!Y&vXa763e z0Kw%{oZUvH<XSw@QW^6f)KAoQCasV^j_=V65v*t?B1xOiRqb#)kgz)?@)ZLKjIWTY z+kq!57nb|@1JR!sER3A3418jg8p60`K6Av-$R%y=v5>sx_q-)H>^zPiA0Oz8Spd`o z3kT=aZNQqFQ%mxdU|oTTxO5chqz2&mj1-YP7~xPtZb*J3ilWkjw8XPlDI`uV#%_nI zP+YGFWuyjYbTlr6<z4#}TKK?$WX@&|P}_Ox6hnUNGfw}MA#Mxwo&XvHrXG>f!U=ZN zMQ+wWM(d~UU>nv!kt+dsR5o=GLZg<mjog~F#=6&PO$8R44;_-;?M7&{$bnBYVUt0U z0ZG|LcL|~&4vG&=yv|UcZGzntKk<o&^rHeNI(DJc+bJZI{G%1&b~WVG*tNax8jq>; z)(e|Q(lvYt9F@>vsO=aRo7e$&CD27505IYc9G{2jUbUk;^R*H9(5%#9A7~NsGuk|) zBAQ8ZxN|Z_sSIlTBqcP9X!GXm_a3b7j;n=irgLwd<}x#JBXEZBeGl!G?e01Nd|7gd zu~EFKV$TJ_WWM&lQ5EF6y%<`jGMLHG%u5c&;tAlTnn;R|gBt0mcQ5BYBmdl(9~73f z)za)!P`ToK(DCBZlx5PSU28(ZXAsC)gWqd;+0foJ0hZv@k!+|9=7O8jV=Zawh$4-$ zB;V(?p<G<3Z&QqA4$qJ>J_UOnO_bA)d0+_?4X@X^|0p=5H#gd+IO*b|!s@hEtjFp= zAUg0c&gI&QHA$DoHpt<#AFy1XP*oFGmK=Iz%_0j$KLX{`X293H(Kk$h1MK>M!X+oZ zU}@yqt(L0V_$=G(Nn?`sWZYK{qM%$MeyvYlzlda<n%7CnuNY#`a3H51nT4x4Y3D>% zTqxaXgdlfckKhN5n?Td}S;fF!Ty@zI(dH#$kM8(@oaiJm2^x`mbU)MTUpV@HB3}Ot zDoOW%=i@2+Is7QC>wu;Ida~EK!)qh9jkBCE{(chnGOX?0bG!tv@AvExiE|aG&Cc@y zXXSUGNeyjL{D2ZLT-qrS&PGxY!)tw-$Zh@A#M4b84f{+;9NhwJW6+Fr{URa%?cU`} z)QT*C_#vRMokK_#t(XN%;Qr%2wu$ux7Ci-s1QKZFh96jGUoLL(UV^ukf%7@XVhlBA zn*a}p1C4E0!{o5R&XTC>D4g{cpe(Asw%|JhmDj_)`{mFN7+?ozq3T~jaQ1)ej{XPy z%gDsU{I9Na>Ho*}2_pg1pH?UvAD@%6qp6`SER;mVqM8>^@+;Q&6e@AMI83)l`}-7% zW3MP>^k$)n%plD0<aD%-e7dIO8d0m7HpF2A8>%fEYO@wfwuIbV%Ow((XjY1x;ZB5W z>ojNQclN~fvj>0gb9>LsJ>Sl;hrT}`01c=m0QkVlyNAusR~2g1!)U;~1hISOQYd^! z7J%7kQI7x^xa?Ls%XcjR9ycKWwXs!Fksik?d$Gf60EE$mE{bXBPD5;fcyWMTQN?=6 z1j|EpC%`%pTN7*znYU@Si*iB$?@9%~RGQ@cc+v$xf4(#LlX{MUU++VoXB63x0F;cW z6M4Xnj_?4}g%sK2`Q&#+Ot+S0yj0*4IN5_)Jl5`*0Q4%c^hZBHg;?O7J({Htc=(b= z?qpO!0SZVEV*m}dZO0&4jAoTVyR@-jD3(_RlNrZXf8I*L5r@#CTEFDc$kTucYeJ<V z6r+=900H(n5RLr|?>GLXrUBEli2f#!wDV)sbluX#;Ms0L00aSmE*w;bK!hHAEOa#N z>jr8vv2K`PXP&27bq=`WBdtKGew>tISc=Z4YM|th_nZ&eo-}upZZ*H-Q;;+HomCD7 z4^~`7Mia0(ybXXy(nFIVY39jTe2DPt!#x1u)(i@{?E@ncOC^P3l#1S`)*#UR7vm%a z*{p?N-5t9$TUf*k<S7mwHyzZi@ts>erp&Lj2~?$Jp|il2dUn{`2M5>Nn}?g7NRG~q zj@OsYYIZ>wjL>DZ(Xbi+bt}hZwb?+SkZZN@3>+P3%Gt<{;equ5t^+@QK*h1^9nMey zhk~FJubnv5h(26qlfV=!BP%kZT+*D%<nBBQ^u=p8dfz(Zn7Q_C%k<f1WqHRVlhjST zS(w)nYZI>fi`!J6x0x@bDuQsiuGfgO3%CA-P<^m4)O~YVVw51!1MJ*`oh4Yd-i>l0 ziPo;4`U|_wr(@9CTeUz@uID&WQx<DYdlJrrloOryrZU$o8h!yo`Tk!JNE|G5o_$JT z$t^m?Tai#<&fH$-DKWz0EAV4vXzCX^70LV7-%T!E%svi&J;(m+K3zTgF`eBrT5Cvp zyAOngyjHDv%o$0mN<fXwpkUy>zIw`Ajones!h&S)YChS5hSrIOo>xJyQHpff@`n^K ztPAF`ue{UeXdKg%c%{WFV9qmCOtZcN#`zfN%8`RcbsC_jCev(oB6ycZ=T+x%RA(dK z_=3?!sZzSngyFP)pg&IEUnIU!c8ts#zS)?yExPjr9?kDKfr7CkenJ0)&<(E(7Ru=x z-sB-9?6*O;q7jIh!qAE3%oR@qfuc-aQqVVwR$l)4eUXn*_|6zRgyG?TC#k^*2CS8M z`ks?r`HPVyhV=w~fv(Id#q4mEy?R<!z23LwIn|Jk(a{(**3}_djZ+bQ*|w+a@@C?G zh%(H@jyE0uA;(=?9bt2n0hf=(wrqQd`{4faet@hrfcmYF4$x=8i#&o@Q`BS}MXqP% z{%6h{u<Vr0?PB_^RIOmjxcHinZI$)Iu9fdK%%()A{j@2;^Yacusm_M?*ltHSD-(@t zg-a`?&!xrM;o8A9QsSgcx-`Dk#;*Q*%%_G{=5XaQE0JQDVt*#DA=|s73K-YaKKY1o z=w;<#ZJU9W1#7-)Y)3K@>C#Fd^7=ka*R8T!6*;+ANStQBS)qtg$LyCw%NW>rry3PH ztI(XsiAb^-IadHd$N(}ZOz^d3_}FX`3TQQC8sV;w1`6be4nYz0Z%_p=+Q?L<br67> zv`r#+FN*R;8~0%`nc-+`Fc;XEyne3{jY+0Ed{t~J>8_LCX#(?J$XP7ODGZ0V?l`Hd zcl0IxrzkOqb_LttjX7QRpNZy=X$4Pu+OIqtx>vPWdg>)gNr)1v=B9^iicw^DShlJW zmC87EA`1CQnKd#UU$4fcdFLRXa~)hmCubuq?73B0)9jm9C=4$1*Y2IgF|5j31Z8<o zi%V>+h!;m&!#%i{E9X5!9JI=>N90ren&wK*gj}G>v$d=IXeItUZBPvt7fh&~xFwjz z{2V?!Anqu}7HzW-9W^?7NV&K}NKy*13RQEl4@S%{I)Lm-;cbquJj{`7B=i)Oz7%_R zr$TJ(u?4{DG%TTS_Kss90$IO9Xy|fjWwbt66e$q2XkA%RmCCFsq7M8B3;3<)tu78L zy9_rZ?PY@!i6abeEHxhmKXI9zKywb!k7CmZ;mWngdnhL0N{5|0FJwFwJ1Yl!{qEN4 zVH{m0Jxx9ze;$OV_-MJpA2PNVhEz|LB#6f~sG)APFk0$4^0_amJ|iX$b_gX|0iRbe z#>wk~EgWXX4uj2F50#S-$RhLPqOe{x@tz5nNSv1^tHj~3so}SLXXPW|$rz+sXue)~ zsdDDTeahX-Ir(dUel?k8GJbnsFEpl%;pDqzdz$A*2f#s$Lz-)|+NvcsKxe`GC?iTH z@+}cV!C-x_v)QCm0PgVn96D?DZ>HDq`lMie*t)XQ$x5W14|wix$9j?odR)Ut$!dX$ zlINGn1p310Iip0z7EuOoAH_7j4pFyWsBs><SbQBpe);wI?(_F^$SDm5Dz2plDT^=C z=CB(*T#-`9*+Q45qD*W%6W~lwUe#ePr)NQoGjr;9<ntPRT<&n$+6q_Dey%xr;*7*j zXM_bWUQ>c!N~5^X$vR1~xVTPiY}5or5<*;Bib&~B-MJc5`z%mTB1?fk9AX~UevH++ zaJ{LNdRzb2DOYMVYEB<ftasEdq3?aL?c|w<+95(om#GF4hOO<?T1}!~z}v$T`u2T# zf67CbiDT3MuEll$le*{hL7rdh#E#SXo*y@%@F=4)bWo>k!@YEG9=YoyHZP`%vY0vn zjKcRCd&#F__x2jiaQUHU(jE?7)G%|k`RL|+O$45`4@<FjF%d;yenBZ(Dg^#!|L0q1 zhd`?(d>IIDnc`{N=`G}qDK5;>_V<fT=rGe$RXUb*>LBw10?`D5aW%~RSSliMG)7i_ zNI8cUmqb?4&wMd0oUnS6Z;2lgl#~TzLS5Miv``+o`9qekUEkf;8z0QM?>$$?9#`)@ zzAMiiHOj~5;$QT20RA`t^#&h|YuNh^27sL`AV}>TbE193@k|VE>{&1bq!{6&c|4zm zf&E$1;Jw6<5)fn|ropXXN&^;q$#LAmKKAB2+$DJqUuQox3?AnhlT)=R47S0OLJ2PI z$+Q9%`@Ch5e*nsgpjjsRNlaIZqr?-K(EX%hm&N`SRz1QczhekH^Udf7E2f}qk9qWv z^t}yVxS@M7XrGj}RbcyJ<VP82YNc+sk0fU|5Ro1_<?7sI&sVLZv$}AeXQ}90&C6;X z&w{$loZ5VwFk3BI^Zqsg=8FsYwTy$b23W0dx|*2)YttH4a?@djr>29#{aXvQS+M^B zh(2BQ&N`y8G9yamwF9K5jWWb+L8#1WbhP}iq6c-L<HfRcdp4cRnd<%Sl}|<FgEvrh zy?tDlmOEJ$dRg)yeoqRGe4)aQhgEzwf~wqJMr@pJZRBz}VHNU`JpwX!$6aYv@d?y< zp$q4rehYYoFh3sz76V1EFSrKuTKH4@74^%QKn$sUU-+F89F!W6!lZs%B}HJA*reG_ zN3rHagIzD_y!m>{A=9^!!;m)b<rGj8L&yddY9A~DOk0)cmzAa<;1)<8x-|xcGaw;I zU;qEb-a7|Z_N@!M9otSiwr$(CjTPHYx?>w1vt!#GbZpzUdDFj*v(Kq>zVp?sx^@5A zE44Dln5cKmIo7C}>!~%Kx67_))OBT(vJAw@9Q)MRI6||7IDCP}L&~L{x|1Q=CNyke zg<7lF&vE?62tE^^k&LGCSeH?bQ`t3M?OB>!pK)QI*Gpq)YM0K8OB3Vif(R#${;;5w z(-c$(u@B$`cQPs8?M>O(2;7queHOtKPuM+H-d;t9oylr&g0xOWBN}$Yahe;SXHF%` zn{zo$-UB-IPEmrbu5OHK-b-w8zj3FH&?BY%<Y(b9&v&!78y94+S)J>(lLjT?=BM0Y zm|f!0Wf5_@g9%*+QEHf#xG2|&W>aGhPIf0;kv^eBpASXaZJqAJX3y)1JFzBlhpNjC zK5sD{R{OB@U51f(O9ei$d*D<d3q&)!WP|V57|BFJp!~hpBgn}09Q@EMptpS>-`$13 zFtCtd!W=fi2WJy5o<n{YAUf#sL41Aag?#^!@;1nHEadv*w+C27O6z`}9J-hB9n8vz zUEQw?nWG2hVf;E=+IDZ-<<=}Ci!OpSg<2dpJLDybs5FOc?1!^Y(4q>%<JncA3bWyn z%EOgLr^#HQUBv-Afh4Q+gO1Tqbu8j%x+p;Jde&xUJVn}g7;XSv!}c3K?+mJ91)G>V zuZ{a^|J&v$NDlDL5Q=8!8ursrnNRpcMMB+5en~*bjNFK#$)&KbFB0*u$*i{HsbouH z$Hg}ZFKW+(d@pWl>Ulzs`XT70S^_@wQ!GS}q~qVj>%AGkZ^OoGBC@yxFQc8Tg2#SX z&d6Djqqc;ks%b8kkLxeo80XnKsMbqN%#ipkr1dIdjJe61QK_`8QfRcHH-%!`85FOh ziE9-LO$KBh;JT;b+aP@Dg{r@`8v=e21>i<V?0yMrf!f%G5AnVC>lvwnfraQ%n?n@o zhORcqsADHd^R_qwCKA5u<Lfl9xd~sCMH|Hy5t*i#0=lID5p0Ic1B*oUnY<KDq$ip} z<fa$S!a2$IrXa(4sH{HS_s#`a-CfQsTxvFT_MQ^CMo$4AnTvi5A9F3;7Yim+YwgY$ zp0kI|x5JxW!~=MGbv!j16q*?t47w`3A|2JtxLmGtuj+k<MS@LD^;^7zh}$*0jBNPB zDW`<Ik<Bl3zsYdgVqyDM`0dXITfAAKj&#?*dTfpH{_a@}s3rX7qv|^8)H=4ZEUhf$ zbI^914p3cGx&o`Cq||<%g*IvI71lCFRuR-vRewi_3F~&r^aE>YcQ(=cD*Pb4arFj& zT6<%=5YdcuF&$A3Z64OK(K7sOGqC;|QL-vmZc^jauEr%>$M=Z4K!os8ekUW#6irD& z+)V^~YL7DFhk5x1vTh_1N7~dYP*sb94^o@$xUWSahY8<`twTOkfZyH)9E~EJ$43(& zh_rdmA0y&`-0fKQwPaZyfyjOu^0ybO8dxOaM`QXAjQ8V6U}c-f+C3u<{_YT2iS8gu zE<|Mb+@K>a<X(RRf((NCen#+ZAT1(7Ma1K6Sn$B0L*YwA|NOL^cfr+~ni~DkjPcMM zFwtjmQ07h=6eJmn0tIkK3nAKyBAa#QclSnYDY)o7*INePBQKYG+v<TIzplZ)!SMAB zmSB<2Jb?(#)k%rt{v_cfRGKNN5Kdm@%I9^GLre3vC8O7wA`xTK%oh4RujS%(N53Al zXzWYE;g-v>t5ucJjxbQR=K;Mr*eo5m0k<i8%3;1Shp0vAs?Veq@59m1#;kK|O~>>q zX<3^6@S@IS?nBOo%H2Q}t~pk_7;}&NL2IYo%FVnlf@lW;-L>y{gC3I<YO)S!lO!!v z0PuE9(FhHb_>L9}+&n<v4b7xH=v6eVFG<kfM#p3`#<d{ilD+*p$V%+6%sA-CnXHiL zSVwoe?;uS#b^728fpP*)Wq6s$6538>K(QaTS6nhBIJCEn&;eDYx<JB|L@R+3j*g7Z zGu8n<s;M7ZYfkcCjh7+iqnqrD?FG4Y@bn*#2YPvuw8SitX!X+w7KpbEh+~}f?-tG6 zg8bqOXsC>!9tblrm31VF>tIk5$vZQvt%%AJcqZWcc!EnUkkDC#Umk~DINtZz_Al>E zqjx?7qoBd4J}eGkK%KoHk3fW{Er9~1MYQEzADT3IQGZS{&6dD-By?d@TZ2w>!c2ev zo>eRD^h3Vn(iFiU&{z+HJ&KR<jPrwFelthB@YasmTddXNA)CsZxxq-2IV7Sp2%vC# zcaWj1(<T=_K4(i#GA0=6fljoQ2hlJoc_7v5)S9~2=1xiuagupk_mXw7A;&Bv1Atw^ zcxqsU#0slEiCQxQ5!RVHVPBN~@HH`12)Fmnp*pp2oc$S)RB4rc4yQAxYXj~+w%gHl zW7k;*O7rssI@{~Q3#2v}2n~s(bE}4eA#WQP(>W0f(cVzOc|e0ZM?rzOk*cCbKLTy< z1SI8g?w5r&1{I(_yVD^owb|#s%sFhTAd0L=D=OV=>QPkIT6XWwukYG0<NgPy(?rX` zs?&t)MFxN`4%fHgPQ!@;r*p#1^hP^_=mGvViT1_7$V^J*dPRI^ZHYP=W4G~xPl(6b zy?*=jPIyf3AfNQPksqJS<GrW!4P#t9y0h`Qkhqofxi|JE#f)?HTs17C@$1)e-}I*m z#8NK4C^%k6b{bPkBoy%_viPuF8%MIrn1S&)aRs!Pc#agBc$%Fx8pFysPhRC>`3yPu zys8%Oww<<e{Ykj{R-yVGyA+wySG>D~6+rc>KdxS(pvb_O?dfBU0|FDyz>5*CGk@NP zFFJ_dlqB}Y&XF4H{59i-L9V%}zx9h598do(Ry7_+44WcXhcHS>lG#j*1%`Ct%cOlz zf`WH;E--ck&YAM0p4K?*FI9mA!xtK50NGnQ{8WVVxciU5A*s0fFAw@?*5^g~TldsO zQO=p`Nxc-2d6Z$_V>8kZQP+(7%N0ilc+(NAsE>3#W3)qsM<kW6FiHZno|+zE5(7HO zXNXpdt75b9swG^-sTh?aqXx|K*B-fP&?i|uqwgo7xZoafH|Y}6e)v$JDw@-<yJFjQ z@4yZV1=r=cgwstzgzoEGqpnQQRk!hckJ+&?YUNqDRE8`x<fnhK_oC0|(h@BLz_HGN zTL#=QJ7+*WBKB`DDX_(x)><|u+64U2=E*9)hJ7!`B-83wbkM{m?Xu<(5Frc&5b#L! zXcMH65gD;>YXgs*#Acwozf%!$%N-chC92k7&yTv+fSfYC1jcMDKMuZjhN8h4)h*Ja z4e!O!yI7yNm+e#{nI>XYVfl#`_EKbm&)9d1P(ceYIw}QPbVdEJjQw#jgMc{5HEls{ zQ;b_8Lw%Ot7kWtZ7Vs|8bm+889DipnUpHk<lhJKf<051H>BMFpnj$}SqH_n0*$?y2 z4XsaY^Pt`6Zo1;tIlv`SO$;^OPJfibCg_(4XZcK0sYTpDfg4LV?6fO-jqOp^J`#^u z|9HaBhc}NjuQ*rJwZoN%X%fk9hBbk65>+;YzGX@`1Pm#rQgfIsa$AIJrvP!iF9LzC zKxqJ;G^LX+KgYo+tw33)W)@j?NFG`X<*_D`0f0Fx&<(vsyFKLN5*k!^ODNgOxMkB7 zL-2-dmc*YTcTRa11jj0|L4+~h8WJI4iW^djjc~B$$ru=3)M@-OS8BQe!UCMW#CGqr zYmQ)LDz3p@>l~+RhR+-%-A*5~W9&|s{p*J}cz0jQwb(oG#<=#A!@IU`nEsaflerMG zq)~kdGCvBfzt0!lOeFoVL1f9?X-q(av-okWWaDp?Jt32;$W^*7;t$bITgtl3dLHO& z@WI$<jeA~?X3@Zsd@ZwLDF@&mE@@gCbahv#uGwr77=_e4!pHKW(;VoeoqetZ%y!$O zdZt^BocKdb_JQ(YR31^J0n>r#3E_2hK?_PW+~jaZpI<0cdJitSvZ#MrWMWdv?xhqU zZF|~BI{V8a(PmBp>^5P?joEHpiKue5YQw%RaV}{Zi<?G&W#lnV<>jSyIgCx*Ef8Vt zDT4Lo@>S3|?M?-ndV9Hx3a=OALBm7Go+jrQBHFP-%y&*nzfit4$)+PMOCVp7)uSC0 z@u-5zt~8+fki^x!0-H@FXT_Z?e@2iMFD}X#PtZ&<Kg9BC-Bv<-%T!ifUi{hwaqC%p zta{50<Z0=j91kMHftdkEjjArwpgff(?{M_wGM7Gb5X|dmA(54?j%6fI?k7Ppq@dv0 z**ZIMJy`dp=SG*)SFUI4Qi}fb8MZ^gC7te&=(lR80KJ2k&NxTLn3ep3=DK%-5V=b{ zUL3kYZhJRdE2%sJv~~V$>Xt&nwmg3YYm;VaZwh*&fUW}HLVko}Rg1Vux?T>~UEqP; zz~an`#)(YKI(b#pl*|Mp71QzCw>!Dwg;iRriJ3)hUO9`(RP25e)(XWbw^rVcLbjWg zlW&S%o(`ph;8m*Xbw=M6kD)}q<kOIW$fY}(rTzd?|4HXG(4;W+Qj#!hX_Jf4A3o<y zr3>K3)ZXPV)5#}F$s4;ZVe=8nJf?MnzkVRDaNf%m3Q>A2_?30uB<5<i{GlR(frP%E zQF0mwR^s0(*>iHP!aPIVfJmE1eS_w{t>}`KXzHtK7RSa9W9i-wi&Y``?w!s$NE4iC zqKbAVEks=6X3Nj1yv}MYS?eoF256L)9}!%aJplkbEq^Xi3VKk`^5Ecaim%L^+#0!* zs!m13F;QI^#IciuP&O@%Qn5F1mH<cUUEDigL#zJ6B@q`(S3lrWc5Kz2?ix*;b(8i? zeo?8vF*Iscem?2>&6^Er<*cvn5<Q;x5z}0&9KExn^ctU8kmMde(oocFlKmau_WsuU ztElXVdXo28aZ(f39okPLRaQTTn#S3^6Zq0Gjy2R`?(~j1SjjnN?z-HEv71ni^Roi? z%rB}u!nCdvR}^$(3#!ePY2{zc^&&4>4#h$uC`_=|`RVUGFfTh6`uqS#>Dx=X95H$* zS1Q!B%#~6j7Imida~ku==Ym?l9+W_;5q!ziBrXzQo~?R5P>my6(4UjKPXzE4K=>e5 zA$5RO;a>@>;ae-ZX{+PxmKnusvR1EYp%Yf3=r7x9zBU6rSnv(FT+?Vlwqkca{vt^S z#tG_~=x!&r;3e(uO53#RNioogX3gJ4)PmuIsAa5vVmS0s+FMH`xnRSSU@w96-RSFt z!h|q*jS?9EnJjBFs_xC!0Z_k^r$;@(0-(nRTUk1j#V$Pt07oRIfp|}L<0Jfyr6=J# z2b~+yJBtNCLQ3x61q!!ocydCs`{}m^4_A>eASEFUZiG>Y%aD(|!Dm9*DW_(`jkH{F zg1%@|egA?c48WO=0+pqX!zB74#a0iMiaCOa%pf*ZkZZPalcjH9_+spId-c%ab<uY5 z`3%CjFg0lO3a91o5W(;+%Cq8ct{*EugZ}8i^=!7aguKWKVi^$X{cYZOTs?{U(bOT) zx&4FGZEbvcW0%#-%IL+3jrW@|@u?T`AYTfl!EUTgpJ7{8utg&e?n`=aX92j~W~XWk z(S2_tc)1ndeNiN1Xjae|Mt4e56btwR(qfAYZ`7R)2?#3l<(-5nf5UHtAu)XsuR$z+ z{q%55Zn>gc7ifz|*0PF1vPK9i&7j2-=WRpc3V+<0+?~V>6(T$Aub^&Ml`zvIkNQLh z)b|L>=tOis4Q@a_6GCJU3VgYGRz>Xpnr{elp&$I9SN^)qJNknjjmQ_~NIKfjmH<9X zPe7(K#2o$VCiUTI)wiBktsLU&fn*$yaU`_;?b`l+i=qP(RROYhlWq`e5p>?4*8tC` z0d!~3Vb$@}KGHGMKGI;F;WXpo7hRPxsq8>j<oMpWmHT^}0di;`2LHrWO$z(hHtRBW z_Cd_S=wjPUr&sB~n}CIptG&{M5avVG#vq?=hy7At>?il2B1bw$zUpCO-6Z%)mT2Sq zn&M-82)nv$_X$pUPWA7zbqF3KEjy(NAfbx#A>IkfE=;5i6y6Al9;hku1_=83Rh0bS zIz<u^Nd|fD-^~wkq(`=55cVid_P4sg&ro(xxX3HZ3})61pN+-3XxPdQN(QeUOg*Ka zaVyO1eV|)W`EcA%>--+h?EO5B&qkEPu?JlSl-JoyT`ryF?DlT6%2<-D2p5PeLv#`n z^?BAK2sf&Fbp~@eyZHA$41Mv>FSdpo5>L`FVy10RRc+tocm?E~WH;Tq*+a{Ey6pKE zd~7Jk3z9gfFZ(oCKwG;hXM<mY5IUBtc!E3JRx@{a&Gf6sTD-N#ciLO4_#C(E;s)*C z4zAka8)e%d{qpy5oZ@2Y0H2p{eS`k1UsJ2hTMDM&rR4VoQPE_PJ*{7w7{?vtn<Moy z1Ng~Lw}BeJg?zmO%hp%krsSX4jt1wO_?a(^?u{^vgHC+CZ@$y@v@FtaJs9h4&F`Hj zjhqd>C}Uf!W#T3MOA$IYTOF+9Ga@_iq<2^xBhU<H-BECZ>gJldet-rYjMA~xfUiGf zU9=FEF?m4vWu0G>Zt@SP?-n?$7S(wUh<}>u140=0J(S=^ZFIWt4AYHOj9$_0vF}{@ zZ~1r+G6f4CtDw!(y-`n=g`ebf*tg$l#zJJ1`+)2r7{eHU23qO8*iej1jUzmfjl=wk zO^$Kp!~XzsB_zX(?WaH}(SQ*&H(CcN35aoYy7m}+3h>x_yX4$vcRP=AzTV=<;*W8_ z+=)DBl^jaZl9KWx8j0B2I_|IEpO5J0P=D^>j{+GgjHrjc$pY$vNa^;dKXW+=WD#tk z2==tTO!kynKHAphFYQC(wZ*5tG1>T7e*Yl2D;q@Q=4|dH43X@jr9r$;w8E7L`VAg- z!R*QUjU^8vN3o$4W)zfmlj+_ZdATg^!zKs%mw!}C#%9$IG>^n&y<%7n(AFN(BbPP- z-MLjOvS);Q{gadp%X5}Pkh(5j%k(Z(?kj25o(&>bORuUW%JB87EaUIg&;?boVABL3 z=Rip`Q=*NBwb^mLwLceR0++k))0<L3&3H}M0YQttbvEKv9(0ToGW9n;S%A5fJ0+hy zSo)H;l8%K_a9K3bZLUH=@Kq2EyiQ>PSQ-Nm)$+z0Mqg(B8HT}v@TF-XDhQ}pP=GzK z4zOE*pic`ml#4fEvPD=~>Iqf9Ai^QYLIB%rI;boG96TJ3i@Z()#7#8oZTc+IF{GOY zuB&*vaQ?A^OY`#2#<HC`>@%1%n2WmmrI+m&7E4IhV4QOBHp2BBMcEQE9pkx0)_Z|= zvUN=S%Wn|nKwbik(B(P01`sdM&w=R;W9wv^+^4uop4w&^iR*Dogli{=ohNTbt`qm2 zXG*QSGjy6~u5F2O1rw&oX-?s#sg^BDl~hG0!|{?uu`-6kg!&X3bi;eq^j{;xORS&D z4U$UYZL)D?LW93P^an*bMzm|=tx?2xnpBIjJf#P=i7uzW<Dp{dlco9zeZ9toc8w^f z$7v_=^u8bD?Xk+6Sil%%zl-hCL3qh;-K(0m@e_)9!MQ8w61BU&n4ftM@*MCJ;@`cP zuX~sFjQL1kKcI)Q6ztHUUO>Ab`YC!BoIDwogRIggr4dD?*q{hd(N09a%W+f~W1myV z(Sd`=`-xVfbS5Aa1%W+hk|SyZeX2GS5M)VaFT{&_s8$ysZ7IK*zKlVUn`a-Vn@Fc* zab;wpvjy3whkTB@AWxeH-f}u@Uimto6jAv)kfh&IyPTw2IoqnVBh^4%)vUBP%%Lu& zOX*-*-vRXe<rVi8ZWXAhhxU?^1ERG@(;m4#s7VmV0&D|_yPK^V%Ni7_8hkcL>wwqK zRo|^ANl%@xMqKzJaH8Aray%YD>`m;QCRa1xcsGi~8`SX}m-UpK<smy^J;{7>J1XUq z$JhgjvlD3^g`B^LX^M*VO>BsQ;W~<^kAX#)kpzU3taf6Ek+QK}=~pc;4n-qhrcZNw zx$<sDEmc{vYPhvwq!Be$L|q*bqe_73Qd*pbTFk;i7V7p`Yx!-EoFKI&cRyyQ9qkx8 zT?uax7fYRsI^~JMNo6Y+Hk!w?GLJK<(bbtb;@yOANk;a`ev?ame{w!$pKRL1UF3`k zja>gxNR5jf$>8*4{)gfA$2C$!XHP`rLKaI&t!<B``bNsD2Lq=jS7)W8N(rFT_+#~| zpIf>O6<K@;zjS0jMb!+%zpY3`rgW1ImGhiRz=>f&wcY9bahlG7WC2a+29hIINn5#e zzv8h#i89Voj<rg*!bS{*Z?%<mI&*nBGw|E_LTr!sN;@m^61JqGnpQm}4){IJZ|i1j zLpAOCQsrl}N<$$m%L0L{l1Jh+=k(iv+VtDGJmqk25sycpyz{sTiG<MMu4b%ONyYap z%P9OS`pz=G#;}{njhFQw6AsoJPuAJE8~rstSDX&pzg)J1Nxtihn43#61u*B%3zP*O z_X-I;N=c`PBqH*u2<4haf)Pzs&{~SCfRhM-VPggOlt?7x)xf6n%k<BhYAepylCgP> z!_J<?P>$nt#n4~Bymn@BSM?*n1iG5>?j~s_k(q6J97B`PEk<{OyUEJsMRF8)@)A0W zygMM4Jp-EucH^-b&O;2exr9zSaK%K=!sYYLsc;C?FE7r6%%iAT;|3TikIRzJ)ZD5R z@p6i?m>FGqQt@;tM?D5EmY82-f+S2RaCIq_4?&maTf`5vD)pPgS_=unM)bO~Bau2U zk==%#8Za!*2$LvIA4hS3uG<=qhEDxnw@@u0vn*8`j$J6O)3z1@37?&xofm2GC!+7I zD{jPnx7OR6dn=tuLwm_D+zTLH#G;D$<$G(ma9#U7Yo7a7!y0h^_;wOhg`obp-D!0E zM%0xz+OBi@A?R~lVK-G21K$gJ45p$7tP(g>L3hl0QPXL~XXzu}N-Zl5D~+Utf>vB= z|AcHw*&*W@pha3JLun;-%;KWOUC2AFIJ`<i7=2gGz_e)Fh;QVK$zQyD9q}mD8E3bR za7pftJA!eQy1-{}gA%xD7zmY`7=^iGxLS@*C}P04C2MaR!+ol@Hg<07)|ElH`qf(E zfx%V@hSxJoR)b^wOaRvec&9fnx;Get?_yjxPJy(mhj9}?s+A=85&IFIP4b$#v4ilk z@>;K-Um5w*%8Mmk%*;rakSTSsc|!F=836MdW@;p|gUY})hq?2fyvxK$Ay>GPpu_c~ zg4sYG=9)7|rB1*p4z8fAZ5m*MHH@@VqZYS8Sf0W~Ge-a9u74k`v-$~7^_pYPmzrB> z95HN4wUro{-E4$8FpmocYm2({lz`K!*7@Q!eUBCPQ}FPgo%Yq*Sp;z5DZ0m$+?4_k zNb>wOiqiXtdcg=(=2IDtrodPPF{gf!kA5lZAe{`hJgT*1^06pPFHfn+*8H8Rr>iwH z>BRLWQjtD;>L{lI&(Z#N^&7<gw(xN_*|e~|&cVE>&|DCTzMp-@_)1`BbkjS67>_<p zzCuwGB2yM@O=Q!Wh%s;6qsM*Z5o0GZ&U0YaTFYwL(sRan(Ru9GVdPJ!1S8->ADX!R zObN`uJ&jSzU*I%P-o1GTT%%Cvm5NKO_WdMf#Euzei;aQ-hV(+rz`GZ}uyC0TJXY(+ z7%5<()IsA>p1%oh6){jw2F^F#2A{GNd$2C>L40K&V1f0Yyy(vHDBJJiRJj_w0DDb} zuzP<+*b?nbvp;B;sJ_+h&a3w>;-%OSOCHr|uT5V*T1eFbnqVmV0*CJ)zs9pGMEPv0 zPX5;FQ07u+h2Jr;Xm#d_n;(PqQt?JtCrSlsNF1rZx5|ddLUgN9HpSP*+{1Yr*^@FU z{Hn=;d~+@ohU#M|h?Wkfgt?ctvuK~GdnOP)KgYLgh30SoK(Fa5QK#MF=A0t_-fvc; zeTo6mFL{M;ghyy8iWbfSA>AbrPJAdWwBNZ7TJ4V{umeDBy-%pWjOIE^nN$b|M2J$) zo>fw;$aXQduJA}jMFV?sUdEE83CvnOq{XcfS*h9kr|##LfF1j9L4W>aJfAPU*LkM) zS+&ke|7862d=57`w4>UHkC&}3$-B|&{Oi}46gxeRggh~`jnh?dZp#D9Yw6AbgYTp3 zkM@D@v~OTN$lpY=TMb)mNxOPE11FBZj~S1G{O~2UWo%khlUn(G=8V52{t$M7^F7V! zdtI{AE9Z*l3)mpof#{XcR@b2&EU;TV!MB8Go&|T(LZuW+CYg#{hPxJ*OlHqWL*tA% zOSXF)2V2JIP0?8X7=dBaH<g{lecVG{Awd~qse7~?3s(KpOGB8!Aje0F5VZKVQ1lp` zAw8Z4$@}NxgQ<3D^$UKEjkmIBxP>En-yggVFRu5+#_ChgD}F*{gIObb!<|3QhSpaj zhKu8XlJ0``!ptt!9LBYQ^3?B=4+}-~vMlDUl`;_tK}gUj@L6FYv#!{n75hTfJo3<r zLJD0Z1Tr^)h+{c%676Tsejj0CNL$I6PfOAs7GdLq>Dby!+F~(t^%pl|$-~4m(ug`6 z!fcU7XumV(4SRYTa40gQ8_>PUTYMRl@KT3cg4DAdXzCQ4z0Y2o;H#ES!Z*Q&Pf1au ze<FOo9oR!i!Fx6^2H|D%xIaDqp;@$g964yp?n0vy@3Hsm>6~{0v@G}GI7EMnJof>T zG3HUt^x|ledLYrgJ{I=qMwYDkLlrH>#HocOCDASq)JL^<C+txgh4lHmhzJaJ@4!;J zO@R$&RGD7%jlH4V9>sZ9Y;hHw1l=R~u$6BAQml>JnL9iesS29K-KWbMpeih!OHCLL z=|CuNAzMN_i`$Bo4tta#Oi|FYl!_9JUd$j|RFt3`0}JB&yS|uED@#Bd;%?1ZbP4C{ zVm}l^TmBvPsEbr$sSV+YgAL5j+%j!QG5!#13qgiVqnMg`7I1eMSDaO-<{Dvp$d-U0 zQ~X6Lg@A_An-7VSfjYPMr|qXH5S%RdRv$VyMU|#*&x@tIytRJ54ma82In6t@{TGP7 z-0<O`!{ejennx@1#_`-i-<x%5@$4qB?UnHh*q7{!A>Z2$QdT#&2HGK=+q!voohzk5 zG*TzWg;H7{Bs-{G`kE8N^k=ZgI$+Y-N#74W(_Z;`Yz!RL6spPs?E=(}@n*T>f+i{c zTssb1jw(q%SbN0|W>tpB<B3qploMpLP+${+uR|UK(MlR+%9Qc#!GKT!5bv-XnU=6` z{uwGMzr$sd(fWVIpSL(BwCkP6BMgCDU+hinb&VjH3diX@+1;11vqTexceSjo?itBc zE=bd;Ryy$lyjt$3cb9)zR7jq)NY*G?3Cff@IJKo@khOH2+A38lkk}K1;=d}06o^!# zS|NRiPTJ#xz8T!LJ=O$*ziu8GB@_w9-;9~C3RW8dL`@zZ$6h)<vyzUDS6{4);P=3D zV&8ppTf?<UBzEb9@hZIhM)rX+UHywb#ZH1%owVH=`3U9O(9LI8#O?CQfbbEZ0DnzI zRJ~Tt4OAl#InWukRFl5gen4pfr!(k>sK>H-6d@xZlDyl{w<{?VN6$vG4d*_;LU6fb z^bM3MA_<O+udYpNoBMEHp`wdTFJvK;a}g=rUh<WekML;zlE(vHTJLIXZ1ghEKHiy3 zbS@wS8#=+OH>(Iy#O?fEw2366htna;3IXp>qLE$NNf=~(y>G!xI^{E!fZtO@T!WQ9 zeLL^c#)i=O$D__u%|ay|ub1myT|$awR+^@6^VM7V6npaWT%2E-y{XOKs&rNewH1Gd zTce%zW_Qrr()9s#hrrJW)!36V&GMd%gB+4LCd#ce9Z=3{m4NxV#<xxh<pRC+`xAsJ z^BxcIk2V6TF1c5z19k%a&ua;42HMot3Hgw12T6J-<a6BW{RV?Ur_*fjKpx=6PjoyH zOL5|FE$+V6$kTS!3gQK%m0Q6J1;Neca<`rZ>2?{Hi@yS1(vN$+9J35^zjL2(KXY&2 z0BunGjn4vq$8*OGhu@r?oqu{`;Ae>X2c|l>eRJ^C2z*MM-;q82wcXcq5IA&q(50B< zmm#DOubcoAT)Nyf$L7dav=FbjuAoc;2qxJ|j#UVK$&eZAM9tI4A|=%t)buGB(V(b( znpSeOd>dWevzO|lf<Y&2-k%39Wg3$fQtZ&Jxf(JP<Q5Z;9B9NcmKH^3GFFy>MfL5h zrl|DFW=h|*zUNt@gfoiWo$8N^$RB8siIXQ1;ZE8AR5a5{4>&RMNS}h07WA+jHYgfq zTHTN-@C1LE4ssx$mu>Jf=8O%*YZtu}#9raB#NO=*q-4l}98|y&<%5SlX1{5l>ttbw z>{c+h2lrCRfdq2_(*$>>$Vnk=ceE(1hA<D!wGN_tZRq0*amhR5c($O3*>2|P?X3Yb zl*~0FIH(}XbBF=GzujDk%3lpNgq9U9&CNtFlM3ZztKg|cp_O^OPSP^cL*pg;r5BYe z8*)lp9@Y!^+H<+)H1uRGnn-LEOgJ7S-tcRA{vjev5zBDvrLi&_`DC~AXX@F*ldQyR z%({pP@dV8)aEJl2B|{x30W^XkIMy}IO(Y=`k|de5c;hS2s=Ec$c?DYO(KZPF>4D?> z^X=qvTN(XJ%G-hB9XIhNI}rGnXsBI*|8{Y}e<X)g@vt|g7qhc<7BO`)b_Ccv+d2N# z6a!eBG7<c>ia_bF4MIY8?%K4BpE(z4nHks#7@1f;%{5F6jJkjAl{2(4r56^I6Bm)A z7B;nYc5(Ee7qd1rcOqb;S9UhFQ6u1Bp%?yKfoBRZw{Rw4XXK#Q_<Nm&m6=}9$@udm z0!|KA`ak{nQ>Xo0j6g5xY-kNI7PK|DHYH&ATfYo#0M;H9e~&@=*EZ$P6${SB7W8s< zjy8tYe{E9#TO1Y!hJUg0{7F#xw<Qt(;RX8RX;=FH%nS5)g%6ymt;uI#IQBp7zxCkH zE$89+^#3q@`hWhc)%fg$3d?8xFO56>e{unF5^(<2&HvYlGTHybM*p|P9t14R%*_9* zsr}zBpnto7{_O(#w+rasE}(zAfd1_Q`nL<{|0fra>hWKRGP@@*aIlQJZsPltEK|S2 z7jmDXth`#@NWk7cMk+6yw57x>;HSW?J{$S8ctqlPPL)630fdkA@so@Ft}ggrYk}ge zIyybOc=WQ@c~|*u&VKd}T?OLr-z~twy(F<MP*$;z-nQ~wjy?qYcJkTE+Am<>JVOzh zHu<)&N+Y!QjRX1ka*|r|N)={B{e=H`+@WyKnK|*`@Sy5LkTWn-Oz|%$%H2HbU>UGb z#TVlnN41(7udwG_{<>3+<r;E%5*Xc-_`a84^-=Rf@p`_iDKW(5>G<K{@Ui8o#XgVt zdujg-e16Wxh3Rl#l{7I>x!?M@i|E`HtTDx7m)$NUfj-5~5b?rt!yJAR`LpBxk1U@j zcHONG?{B1s<TM+4dpGZF=bR7Cgnx<Jp);b5W@)$`a8N%*?Hj${qVz9A4%~fK7mpU) zF7WVuMfLcEv4igp#6Zd$)IUsq79GyZ19nYudI)q=#`62%VM^b;_p<%^fAjsy(AU?; zuX?De^t+^GwRyuYkescaC<xdcdO?T+m^?4al-OUIUgj1m*1vSoynVqqvO!<bef68Z z(oFbjVyc`nfc)ceKLmpGsIIt3&g1RjEk^zI79yz}Hjk`-5^|+e=oiKU^f>o!W>uN; zdCP#-my*Xf%>+g*EGfalS$w|r^n0Ja!DniqW?40BjOxqkw+4?qMiP~X&BVcEnplT| z6F-VSI-n?m=k=;Z2!5I^4fG3>fG@Hp#rC<20l&Tg842V_a1jY51X2{<nb#vct&iJK z#>Xq(iq5W^nVU_Fra6d@>~}<3138kfH<T)Dxg53(3~uqZope~VTW8&}9^uiri?yEp zddvX<GKZWZe}>gHs0PF!7C+99hF4EK@TQ~<ImCvAzJ{WA9-9Ph?F*Y2NRza?y!CwF zjrZ@`%!_UfZM&Vwa2r9Zp0{kt%zr&0ad2l=fy%{skaymM;RVmO3{V78^a_qEu8Wdl zrVbQO4ntmFp5nKl+KWv|3KXvpaxrFZqeLxn_*QZiP+l49*_6q@E1<?l_%1*-vVWp7 zzx$2KYW-&<izHK@rjwJte1nbq%=mS59g52X$;qymKfMR2?gil%PFLu~5oSDo3m7!N zLu5=eWmM^eg|5V>=C`S!{$1>ebJ}jwcWLN*>$5_BTr|=IL<Uzy<SmAlnqRVN;jtLm zTq`2y5rUR{Ky`qqOHyUoc9gZ$i4Io76g{JdbOtAOy_YKjI%dfep2jGSnn+|HUO6O5 zB$86ZSx~Sp1_{_~5A~ysK+IR0FP>7rxf|)~@EArblfkK^O*JSq7q1APSb`+KL6Ta` z`Ny{=Uk*v2KQm3<vCo~VsMfyb(U~SFE{ATe)rV!WI`@7-YIG1H0APnRO^PS@SR+XG zo@x*r62V=L{S?-l_on4J+z3%~tz2&Oq+XF6&wYe&0iI~+*F)Dh6UewpFg!Khi$D;) z;u)tJEa_r;@nriU%|N=bG2Iq5Gb*`n|9CmK)}QbD=<J0+p})48TOdJ?S7FuIVZiu< zPC=kW;o^Sx7jAQ}9=MRumH{N=>@NO1&lmrnmSdye&8vGM{3htqdgy>KSZ+prSFbB; zjY<Y?-`)EMWKhKjvJ+1IO^oGtW<nvk3kwaZ()YP_wv~(xjc|7=wlGBmIG(KyuJ0lA zme5&?BH(BXJqUrghVcy~q_GT$1Sdw^c;YR-->N9bX51=bh{`!SsX8(-UymOvT% zRwF4;1#4K-ik|`G<OsJ{rpN8uEC}dg0N&T6x9Mm{wOPkX-@bQ(Jz!8>#AHD}A)2yy z<ZM8{AcwN5#-S!>UPb#*IytA)$Bu&v95O-*0tm3lxx|`Iup5X=9TI-^P6J#oD)}6{ z9{hjL&$DMAG)dnjuW+*lKBVn>^j3%M<{+g=*7l~L>>sCw<B>BSm_76sRc3nc8z$hp z19$h>{g8jwVQ<_J`z9h?HDar{>e3N07jGSXchDbc17E7jWA0?{T(tJh84*u*fTwXw zt!9&kkZdNOo#&3_>oAoV<!004NcdP{eTB*$aO|{HJ4;);ijC9ePHlSHOSGU!IgD?5 z>g6*%L<?>uafnT8H__LQhyg-BVM$oDPQBM?KBww%@kFDusKciueyM1v%&%|jy?N&` zD_C~=>2JF30Yr3cdLRY9{o$(!Iwmx6hlfik^lL}w=}%)JoDInrGz&Y=xQa9n0+{+& zO@z%65p=%F80fALV)X|2Nq14TTcwEYP<(xL?d)5mk>mzY@r?uku>n?jHB!HYD&#B4 z^Fn(_0$PQ5q7jf*Bx{E;2>LAPKyUdwbUm4vk4KBzLu$I1OR+;zoiI2yb|WX@_PAG+ zLt?mTL|D`tAqE8Qrf>|Y_wpX*aU^d<_R+W=lG-<Atq;n2TLG@C7amV3No%xOtQ`8< z7#Wi`jFBGqMI%_rF=Pfsu)s|JvF#*zr(qsEVxH;W5QO3V;_)NV!SUZUD{ii*X(E}y zSt~5ImZHt6ICuP-cy9zr16d_hD?<tqQ;}W-H|$(zNy`NEFsKh5?u4xwJC(8ufiV!O zfNbH$e5I;zp=3zCN-EI&RVm-jX)K7g_*=oG(7nG0qTe4XLfnv6Ua~2R-b9BBMfqvF zNBJMJ<P?R%Q|eJ4H5DaYjOvPg>boZMxGq^>cBExkQI*s2nKRvE&yX1e`&g({$$MI! zk$QdL)-wu(KRgl`>LFB(QhbGXy2}aIZ(t*(%Vif6YxjjlIOjmf#N&Tt-5Y;lv_p&( zGo@({_VeBVV0dRGB2dx0O~$dTntefP$r+0fZGer9Ubs56xgO~P`GUBZdi~!bvOgT= zZ>Z*fLS%m<VyvGow!erN69WSS0V4ww+rJPo6@ZPYlborWlAVpAt%5SGke#)OtjgcX z7&FV?(HJ8$+rO|eHdeNOvN48#kTDKU#{Ww)_E$)P&zJ;%1^wR$8T)@CWPi`-r~TO- zYb9}^Pe3JW=<En^*Jhw&`6PY>40NB8kWZLI$H2(>$q?z7S^uCVI(A0ZPlQFs$jJFu z!NKs!x#$?!nf|mmSs7S$>BS9gYz(!T=$QVz2>wf{ORsJLa5h!21K2u$M*4FG0V4q; z9RmlaE+3!nKk3<jc)kBQB=n-T#&#wETXTAKfUTgd6X2h1AwwtAKah=H*v`cfVCwjJ zM--I*+<Sndle4gep(DYk4MoQA?{!8N4tix5Bj-OfRK?N7^q&F#1B()H{AKz63}oVL z;iS#>Iokj8-=Dqz=Og}c?teY%U)%qv|7-b=`ajP9NBOtyfBye(@BjIT|9;P(2>(;m ze?<T9%fI*Ja}fVAhJW3||C?#W#7IEP_IWfLGsmAv^`9{Fe;LrfF!Mhr6ARP7%q3R# zf8oqbjQ^ZXpF{so&dkif@PFXUe~a~JKK*Yq=|8b%jz7Nnzg_3wi7Pt;%O}AGSUa13 z0(NUdXHyZ=&rh!DKkYk=j4Vu_u=+pjJFDt2Dk$dYSv&y+?dds{(svNy&?JVy;CrTU zgqzI*3{Z?(CtOe<Vf&(HUnr>%(R$QNiTFxODoP}LQ1MslT&@nEbA+x`r|ueRZ5#N0 zqBTGtzJsVv&aXM$XRg(mn~(dMoxgQ?eO!E8bhMxZ2M~l}C`DGs0>ZFqo|FV{NJ?6w z2!wK_Q1BQpdf><d9|h6!n6(@RJ5ZA`1;rx85XCYXV}Nr*xDWa~cmwShHKVOhgm3NP z17Wj(O)spa1?L-|?jVp%Fm1Y4L^jj>Dzk+MLMc#&70F62(d(oTO-jIqFVf3rM_-+- zVH2qlgO^NeaIOR$g0^#fKy)Td`^~vhY2;|@<%8V~`YJ>Q%bg#wm7uP&xlc*J9t1~F zc`xjdqdC_hwmbtOkb=QH2qUvHe2D^WA5n>TQ#J{Ykyj5qgOj7FeNKPd8_zd`F610D zCG^C4=Gr-|d6|EHfee(}x$bR-W$R-N|81~PGUco?E5Fm_AW_4Qyx>%Z2qHw}`YR9- z5^NCjS*)k*eUWeE7+uG1--R}YJ6q?0M$Wf+VDAm@*odtcsTUP`7)Oq-UD4~2dTFXb zdN}<%8^9SqKa0MFX)#vmH~Dn#A-9eicm_FU4soVg6z2+f{kTp%FaR{k&TTvvUgXW< zi~i;vFadDt7)4z8<m7r-4xe;g(id##Ca%#&>m0&N4>Mw*SyygS+%U1*yuN7_0<Z*f z1Ikoa<XCFdVdn}aMNlzJ;XLsG^#y?t*xN|FZ^H#hhZLxK3AvcGQK5<NH18L7IVL_I z%;xrpYQK@)&-X^-k$3AsSDD9<!$?Wr+nU>~o?g6p$@M1d_ZsnIVAp*1;|5=d@mI^; z_pj7W^nJOX5XLrmsa90inh74~tve7nefAePeb>ZqV}y=xmCF{_jDo5<e|1q7Ut8z! zy`Dl5n(NJ`B&}d84Q{mK;Am87^O76<D6Dtzz8*e;%g7&h^$3+`7pXF>HBjnGMy45} z9&lUp9#2(fkKl%xusvJUo9sW*Ldr&|XSM#7)DN8Znq~pClmFWaR<^UDANK_w^5Ms9 zMb?(B0^ZW&5|}0u`DLy0DBa%d_%&v=PD%5FyTEait@OgP#_fcAZIbNXNmVuOiIDk@ zG{XAkLHUv+%SbF@R~{3Ck*dK{Z*kiB1s~5H>b@QGS4A2AUFr>13{*E@u7um0;f(lU zs=y2A;<pddE7v1?mga@4SU<U)ez_;R)uS%atNy1;UkAR<5_aA#GW$Vm)UA3XR4t{q zh(tZm{Az!>Bd%9D;kWqk-S7ywPUSHS57F<?mGv!q9!rCg2i2*=8RpFwstb0RoKN=& zboojR*>=Kyi<qk9_sxzQeC^{-y)4l(s<U~j4d*DN^;g;{r`gZmb`Dlvs=|r{$(zQU z9hT(6O-GaL@pp{4qT06^6JW>-7z<-M4}&+qp^6^*>)IX|u*&r%El%pk=ej;-U;B@Q z#8U|^B#2V0iH9yI`n?0+IJ_?t&k8x29;(Ihbvs*&j|cLWHyRQK2Ru|R+N%!(H)_e| zU1AJyAKL2W6Zp9~8IMLS*82SSh5L;9dyr_Ys@?$B*AF)HyX_}Yhh!Jq$$5>7oS%=r z!BTy%S$HVxE%i5M-&f;E(8mOI@iMk9D-9X3WQybk)sk$^$LBjDn{4Ky;6&v724qqv zAFDE-Gl)^cq`W}zo|%YIUCWZ}vB#RhEKW65_|8cLJS%&Q$Yg^PK%qV4rJ}{erScVS zO{J!dL<(rM(0Q?382KJ!5@N}6!#c#So}QlKc`PJ^gu|w6;X-g1<<cqJ>Iih=DsvaA zxp9#VD85({NfYJWXvOEr7C3QAae+sj+!0H&m}gKn6C^{TqGyr_k{|}D)J*}%3BU2- zajhDS|Dvp01HUFJ@SY87Jb+Hc!Y=)CR|w_?WJe^IZg8aNnlTG;cgzdT&Kd`3SYav@ zR`Ap6Lw>$%Q5T4IHIG@rxOrtC?E?X?Qjd$+3KQtyp6NFrfI}<(Zu9%~g|<t0qT-t) z+C>;IOR*@EL>(v5@iEqnzUkWHijAu7FLrD~j&8p9t-c+2tGzQ6{ZmNM1(8GZvo$Va z4lkFThSv+u1wV@_Po0U6vHgjiea^}^lkB{7n+G*&jOQQ3bOXS0Ua#OI!<e74txdV^ z1p~ls$oH1a9l@Zs*}0W6<)7pIg-1KO-`sdjT6v2GK=%eTj*7+`(SBfwi)ypsLMt{n z({v4DYq@XGo1Mt7OdmLwfA@+2HO-%Bdhv>bXff{k>TsxbQ=6F&QR`|q3GO>Gk##o{ z7<hfA*=~c9<;o4xD#gz+&A5Kj_?foeW(_UDL-q3atnp0+C5Y><wjQDN-EAEq-OL-_ zDG%{(vpmS*V*QRKYxD%=pyb3U<RD$8$Z^Vh%JSzGNzo?2T+kG`bq)WuE>7gfHz7xd z)LU{gYyoCNX3U8t5Jf^Mzo$E&B{&1dwQwX%8_2Di77CIH+=$ji#Wx0?<=KAtz~fw2 z!u~#4)I9>@-o6h}Lu>n*`;=x4IIV;<P_bUgw7OBTOd|i5VuM2yVu@DEOcC@g5^FIb zP<w4M24#{VQo=}3l06n2N@<{&QC1o9NYtEDB7ro>NjFIPx9Pk1^IuV@Ylwzcd63kG z`Q4C1B*74XcoqRF!7U<>=A}R!8kPk0jysz#n<}suvN%zNn$-Pjhv3^^bOcXH937$J zi3U5v>$p7-pMf7OWkd;t&~c&qLi^w;Cx~;1=CZ8v?T4hy$*x5if(blHxR~Noa^r+E z^Sc4#Y>LhaiDKg79sBTKTKa)!SptLkMMzG6ixh!UBwAK{mEMs}EStM#p)H#A7m>-A zh%+u779o(AK3xb=u2z9<G=z!~D>elDW)$F-gJNQl%8?4JN-Y}1O%A5q)gtxJ6Du1) zT~3q~NQh(5E1d+c2xr?mO0<N1zmhr$8B_rf=)NKBm+_RBQb+t*j}A4U`wOg`PZVsH zDGY{=B8gOjBv#^!=qw=t0kjB|0%8pz9Y_geB`sYuH~Psmx~R73VJO%3VTmb?s<vW} z;cQIfd2)MJj(^{%_r@#hMtefa?z-DV$H4>lNXNtsx5i$D2yZ5V02XGXnRbf8kuza) z)+QG6X)%<Lwh67+u@)la&o32Pck^a@ur{$u#VE@PgirzN$B6hRG&UVf_1pqjyJsO| z=!xkBJ?dy*EmR-+Ke7VnQEYDE6}`ZrmSYJj#EQR8wGTNbY0-jO2Ab*(o5jx#n}ONM z=E!l<f<~!({1nfT%AwLgdsZv%*MQ4|M)u|b;VGtYsSK1WP1JPIdVo3k$|v=;aGr2x z9engn#5s+y$cJWN0IP;ZWC9HtE^NL!JS-xs%qsyh>vt+v9A&CN?IFvo9sIe9kGE94 zL1ytFhXe}=Ox%=EA`t$VO_qoq>aC(8rKBAb!$54}WF~X%Ec*&vbhku<R?f9^(wQrB z)Vtkudm;ZiqLqDAR79LPZlfA<z{oN^`)}F!Xe8>lp<xUuB2rN9Oj0%tRd+mUiz?p_ z2VW9Nyd|#qVc|X3j^#OFPCT{Hw}NCja%1K?2ODk&D_NxNo!hudA#bMrUjA&l+^6^l z&*EuLdp1WXHSX7X?gtHdOPsm3X<^HF^9pRG8hMLI`ZuCJc4M!p?Su#tUsv9|GPAb! z)cvfw!^4EEooUN?ykiT;k?gakCz{BFqhYcbG$)%M$OglQ2fmgI1=-Y9v^Lj_uv#w* zE~0MiJU=nEg!*?1d^c=N!v=@*nZ$~on(g%CUOb<MYsM?@UIwD>IG#@E&BVW@;RLfb z^9!XEzaren_&H&olGJzzL+^Pk#<?i0HzgIq%Uqog^loA0SIj9+*{;MPSSatJ@;2MP z;ztsf0Y@k5S-ZP3T<IJbJDzd(aZ|SMCb-=)-T~tl2m^}*0&NTWW4_7;@BRpq4Jx0y zWlKfYf@d9@O3X||{*l?q@a%RL&61hcJ?hkWu)kn8GWFqJ`;q@jTpM2jkB8vqd4C@j zRyoSub=vIFxUjq$@{~gM#^KU`5b=Wd4mc6Kr#iiz4{rOdZfVu-mwuv?e6Pgp=X0?G z^n-qFBub}lv(9z}d@SL8vd+$Pe6w0yZiE>3rKnKBRwwSm<fXQYQkXXr<V9j5!ci)d z(|TvaykmIr-c;#h6yzoQsMXFxt7+Mrwz$N5bGxzuu4%_iB$Dd3xcH6l&0YR}7~;H% zHl0@e#A<wQ0HMv7YP)RMV*%#J?f3z6)zJl7uwG-tMQ(VrII@b^ihQH!;`-8wyN!eC zcLmEfcYS;$C8wXq(C0d^BW0}e?bWV+jeFa_BVY1uVcpgNWa^hH>T~-rVZAbPh6_+u zv8GAy8(m#W+#GWq)dMe6-3y(}$p^1X?A(4sJ6T9)z^pRs2WuQ>i_5Xduru@I?RjN) zbHap!Zg4F|qa{<!AEYuk(AV7h8>HN=&K-}duEy#g_ku~LN@g^&kn)&2Npa6>Z#Xde z%PtS}kY$y_G#JLLcmu`KwgZuIbfIeZr`uof!>Z)a@a&h;wbbM3@X}MC-pZro@iHPs z*ASemCv;p4H?QL~c}M6sFp?KoB1hrnyPSlbIjVEJ`!aF(Ox7ya<o9^nUFmQOG}n7B z77}c=SG(SCwG7sdjq)2xkj{~RL*V(-?}{5b4Q1#zf*4uE$VDDNkt#v$6;7T*Gmu~# zIOb1MT$j;ynk34KD;Zk)3{QZARec9?e=x@B1`=q$x$iWGLcza+>7HWJZ$FwvgYbL0 z_jNilgd7FJNQFk5ge?BeFxiWB1ufD8`%Ks#^JcZhkr}YE3E~tG$g2q)*o>yur=S7O zZNOtrpX`r~x9I#$j{%bm5k#UJ-pG)<1&Zo&kaN`#dRGA1SHAE4z~n0*Awkem^E3D& zaPb!XCCF_*mToS#?uX7RbbC#nh#+{T|4KVX7qoTmm-{{-ijbFINvDKxr!^WxYGEG& zv=|EhIKjquVZkodD1&Dq5wme;=x6<~S25cjhavMA#K(>t5mvm!z)+-$&iK+z?Z_zo zM!UHv%aQZ>?nLPV65l&GYO(ba;3>?gCJ`(W3)>cP3K+gnuiDqsgHo?64Si<~%|i^| zWZ)sdkM-C^_K@LLMxotlm=*vSgwz(<^;2#$>*S-ridYr*0ZRyvxm4q^<?hSroXAr| zO^U3Ba$gZpA&bn%Cz;TD2!_mD99hkOb1@~>z>F}E)}ZwQ^sxhIGHBIBDpJ4eAn)pY z&$<=M>|uaG4@BY%CN&T`xmLK2>o7_r9x}%oX19kq&ztQ5aSvr2Bo@QM`c5S7K%Veh z1zE^f-Y6{2nru*ll2dj(9{f5uy6E%AUUQQK*wPr&Ch77qllk?L>-k+dNhqoDSWDvN zsjAgCr&MKI{u#qZEgW>;R=RPwI`^<!$TPn|tRwX&E!=RYyK27DZfz?}=|-Y1gg#Lq z#O}O@no)2N;?a7tLc1kuh%_Lg=N1sVQ6o-~Ek>_uE^&hwUb2b-z@D3sD+S=T+rSzw zzv>Zjs(HJb5O`!$#BNBMKo85@DpP3+$&kdL5>1FpLJea%q9|%18dAXJJ6TZa3N1{I zIm7S@PE1<f1`m-OhVfZL-<Z#6a%A+yFOl6dz69Hti<T$;FiiToM`o`@7p6V1=hW8R zx5{~r?Us;obM8$yjMN#--~a!#_a@*}eqF=3$~;sursSl|!<i>hnaMmQQaa{&IA(<u zQdH7Flp&-<Ng<TVRG~B|4J4&Vh6be&|9zjq8PxOqp7;CS@4Eii^>A_Sv+jNGwf36! z-fOSD?=ItLqm^q5<TQ-W+qxVLunBaHhre05GBN!}jYWkqo-De4&G%GSc}IQEhlj3a zW!AJc@o6EBaOCc*8|m=s+u5%yZF2UCB1+^J`l#fx#jmz(s7f(QR9=5%F!Mw^mvr^= z*!MRVXyux0@I2PxZq_fSmK2p{D1nh)+Gr&4@Q7BZjDe}VDW}APRV5!IM>&`4Z1Xxf zzEp{8$@zZ#*A%sD`#(jGj`~EX-E<@Qy=d@imL>jhl+51eT%zWXzM6OCE0mr<;c>U@ zm!?}Yjq}2kjwR(6%0?c$C+Ier>7kK>2}6w>k3V$E`26h4++E0b;hQ$VG+%x^*5Jl_ z`mE&l?(Z+3D?RDIa(es6?r-%2!!;A5H`=PdjF6ScN2kq9(efGTH#erwE}iHQ>fXAj zd+Sg0Yq~RvTKity|8{d@_PdA1@-i8>J5)6?V7}LkD?(;Er^kND^v9W&TwAi>L)(YF zPQ3Qrqtl`hT%)%W@60Z}*eEtCHQZ9&l6Dzv7``zPw(H4oyrC0vv{<s<a4}D9t;Wqa zV_t#2{x2$`Y(k#2v<TI6m(`D+biCwwqxM1BwP(*tgE!j~l~p!pT&l=;vB~5>3V#__ z#ac(s>y<jXdLzb)o!NPN?0f2a?nGku@99Tr?@?A9a`4tYo<KTVdQ~v*eY}MOx47ye zlM_v6f8HMRwUjN<*}!{Y)1l#!!)s#HONaPx_&%%?bo?x3ibMtAqZNhkcx}mFo3H29 z@#s<LTH%&26^YN%q@*rSO2K^9^eUDrIi6qjAidSxWvP>Up;lYGQ>w!wAMDC}JD<#= zjZqeBiKbJN?~ar|8F>~XbSxpMQ<SSR`-D#tUqULvR?zAmZ$awiJMmXGRgrMNeI9V1 zPuPqpU92#1M=7_{Ar&R`F3I~nK9HDGPPnEey5Wk`r~W6xcQPBEhfb#I^bQ|}chx#v z`b6NKB<JMl)$-`xJYbjFBAVKA`q{f<r&`kZcP{&3E6{;IW01Kv*fO8Xr&=Rxedev2 z^X4{^k`Wg6_B<Y6yYe;86!N?)$qpylX)WJ=RBhk*t)I;$yR9p&-}&Bs*(%PTt)_(C zf9CD`rn~76@&rQ+^m$Gwn`|){x^hkS9I9}Ke6U#V`Qu@0%F<T(=%f8KwBZ`5Xq16~ z&i<=qr|+HIP#Ni0l0G9D#C0xWw$?fwBX{P`4<sVJ>}XMC(xiTtk5t(uPZK@<zEduT zPIKRE?h3-(;d<JL;}SlxWU{=<_{I(4wz2RleCx9XHu5izuGmn2OC^nLuA67|L@8rO z)(idnLp`P;WUDLvIhMh4&JEuLc3_X+FqyU9+FWwiYn`0fthQD~-r<%`ui4kvmKiIw zzck>n4-%MsCU@HSkzGDvtl#uN$k!xsiT5*dt}RU|=ic1D>7_c<cWUjs63kk?kNH(i zKN7cB*Y@NBd^bC;3ywG4H$7VAtMcoR*z|$%1CKT3RU>N#-@FceS?k18>P7B*XFfck z89VTZ`<GlnYTGNZzD1gL4pW?;efA-^s#P;!N*s|1q(O<|9of&hU;VOqc&JvJQ)Xzp z?rENpn;vhwu2t<?^?u#b(KQ%Y(^Am{(LIOCMf$e#{&re%Jtasy=68E8X=Y{9a{pgK z$F}~srO_1LhqD#H=Wh;e2=7xqr})if+U$hvp#Do&;^Oz#Lf`JqF8_7<43Gaz67f3k z_P!V|{ociG-sf(0SLa`RYR%L0Ha0avL^<eG?twU29^tX_1S{@eI~RVAyLFidc{n&> z)yx9DhZ7Fkd;O;u@2bD>=3VT<)lI^kmkhj?#U^(Y-bNc;nckZAO!#oV8GO>`TyN5M zL6?g$(}v|sg4Z0XJ3K4xB-gvoxGBWzrb8s}g}Vv{P8)8&(8(>^qOw#!Q&_)3_)D+w zs@9!(=CwjrD`yk++XMG3Dh-cpID8T-Z8*C~QsM6G%Eeh&kMf-6^aZ25_BFWWUk5(F z5Ce<jzk)xL{Oc8a<l(Mm(L#hJ#!YpSZz9Wh)p(`luWnTrR?%5K<a&2(DbJ4N`2IZ} z<2}1CbH8}GvB#kO2?u)iw8sp0i{^^U7jNsw1@m+k9Bz5Fx=L^d->Nq;?-s-kNM@Rz z=@1?t>(BbUZjdnXY~jY_>H+70k!}G2N!!Akt~<u%j+V<`lNxqXo4I~UV(}6FZfR%K z<UneD+u#a^4y-x8)`=L<IG!ztHSOwL?I@#o-D<?Aq_S?hGWC*R=&qs%VKF7GVT<}s zzx3!*nepgSN-#($xQniPd0wL{|D~?8)_9MuXM*^-bGIC-GVaB%tohZ}^PcNHm)gmd zzrym&TBkR)IvqnfpFlNQe~40gvc|n?(@7y~gQKWbN>{ckXN**ssUJykyP(>3M)mF~ zL2{IOoL1iD`_AewC6{qM6X5oLx1|H8QO`$^4fz>nX#d4ZUFy@>GDnQUdmgV8@gnQq z`p6S$e9}e7cFGy<K;*26lGgxlRQ@5jG<`$N18<jY3RW8HI3FF;k!k5%dHHQh>zQy7 zpTjz#<*ycq8P=@?FQ2Zc%K2<loAAQdB1?Dc>oYO$#`dPHB*{4U7p0_s3fph&s(4@W zvEWe;!Se-4Ifq-`hL#u<-%q{UHQ4X+nfykwj%RJ>U0$6%Ia(S+c?vcM(uJIGaNgH? zK3>QA`gw1Z9!l`uD5Ub@&E?{Ahmm2HLY{qF+z>fh;*xw8Jd188X9<2nKQys^F}Yu? zufAF`fP2VzsMoOli0F!n9R1<bk(-+M&W^eZD{N`v6Tggq=&P5S+FWaV6`pfEf9svb zJGUfibX3gk8a_U&Q}Nrk?qJlXpmpYiUXk6`g%TshCHih$l#D;WOWQf^e9&!#9beto zlgfAYFRuQk^|k7JMgBF@5$=)XALoC_`o2j{O<cZ19{tN<wEt?))6$Q_r}~}?CpgDl zI~e>}W1+9UH?O-mDVgVj*YdYf7i%{zOX9V?7gn~otn0_Eo4&7meRmG_x@S-5X2iYj z$n!3!Yv1<a_Tny_ruEMkh6@CyMJ!G^ygOFcx~(z7dG$5V-3l2C<+zsFN~GB7H&1l? zZ7G{LF|s&xr1sU-BgayPG{#Qc--^fD2X%c=zmCLDv?LPMuk9X4eRBEN>~QgH#_!bQ zuCKSZ2EQ+t*n-`|o7+?Wh3Gevk<D@7kwEGCiJo86I)OW5KUUp|`yjcQaM|s*KgZDz z`JzM@1Eoa1qvA(qgjd)pZX88k_kGOyEM4j7hrER8XN6J6I!<2QJ-+CuI7!V@X61(I zOV%aZi%5$6G7A$o?wefL@S-U0#U9y~(DEIdjIXr$N52vc2r)?)uc(<^X};~W^e$fK zTlelgdOG>OD*UQ0-@w?q-d}txFP=KE<!e%b9y!lu8;6Utr^)I4E*EXKmt1SsvPxc4 z82&WX(6LN;?Lh2-+KZpUvn<V1w2BC)I?`naEI**Ow(TDiif(+BVpSvQE2cNQPt?lT z1oTYWNYy9Y%dA|ccVmjuTsmC73cG(+QQO@iv^QR{v--_<L3Q)t&h>sR7#)L0L$~h5 ze<wwJtL=aL$ueY&$o<_ie}`^od$}&DL}$Eh_42ZOh3B^m7T{Jb+aBAl<gM+BR=YKQ zK&#Oy@pr|VZkvj_PrDjRvuX@d9(<m~f3Eit+G`v2>BzLgooFwom{$W;@wsE$;VM() z*_q2dGfuB^!=*{T$G*lb(CgP~{!>Z-0ota)vZjYZV*jwD$GnJVYl#eKL<n|&=RYKb zx+`AGiMU>vvJa;}5^BHprI@A7LbW9`F>=jjkK%bg-))pu>gX{sRNu49GcY<8p;3{V z;`{>E9Yp4=T=>bfyKaxivjuL;CSENI9`zc3h|!5H>{}MKx0pnbzOd-7z*aXy8<(7? z-_gk5QVsYAM#9QoTgwUjQL#_^%sO~0cxUgD1b9ovzmJZnscWxrGZWD%82Yi;=*R4^ zeejC=86KAdH*czx9U1l8{N8sJUwiARhT}&~68uJaWt{oeyIpd6YY5)h(X`Xs_K&>z zr#p%$3!_XsiV$F<4+`W>AdzUW&I_dqK#TVD?L>N(Ix03%{w{%jb6FGgqzMGmGVffP z1XKfKWfz4c{(WVaTJ3+fsLR+uG?yO$XXF`Zo3oP3NHjn*5)Ht%n|XN#wt;p5-q2z& zjG|&x?l31FK+LtKCmvvM2<8QK#+D)mO>;>Qe@}|gHrLnHQK98V044roQUn&kAQogs zfVYRUY!rhLsGF7MWkfKt1?ag5^c({EcWMbnIY#~f9Y+78=N>@cng1By{!};hY3B0u zYkFzsdYP~3<^J}`!27one}dC7FxvUguIP19o@W;Oyd7O=0s`{~XT&N%U1s0pX6I`w zYQL=h{=*&^q5!?T8?75{$;%rrq^Qil_E560Rl)P!%dLXkj%Do5la$H(lzk4lntMt8 zvtfS4^_EM;^o!u>-+w2|3%|S9f;BjLuFj#$_Ndh1ot~So?0k?jYO`UqY_epi&bg;e z*kVaT@G1328mpCp`#<e({$}!RWzof=9Z%cO$7ns}aGtfhmVf7A$g#NNX)%|6-qw@e z)xD2<d}fn{CgI{W&CA!^NZzl9yQAV4c_eWeEJ=|Tzdc;8SbZ@3ReZp@yZ-yGjaXJ6 z6uSCB^p$k{QHc}xL)w)DOx3d-oE)v4G+cAm3{1qwKWk{XWh+5;*ill@Zsqu3v-1ff z!Vlq`rGbZjdMD>BMXz4A`ZpinvoypZz36o995=%1FA3L;!T87^`bcnnlY!By)y)a2 zu(gN6EHsmoFzJ_w(h{xB!MKaZF7&B~9M*iR`7CNzG2henhkj2^b#{Lj{NDbxyG>x) zPg^B*X-T4riwx4*R2<zLc>V2-XOTVMR`uOznd;ge_&uxllglNUn2MOJm|GFGfyK^& zH}A*xyyPA68(FP3xF=LM^hxDQAISt^e$73f`xpNfad+ei8b6ZWOUm3N__3{1IT@X! z<|kBkRA=aCr`pLn^X$RzN$UIktHEIT<_i}^*h&6`;{8d2C^OY=N6YNGN1yh0JDWyr zXcu;ic0P48_VGkb`t7RWT^}p40|%~4DM!=~AmsGmo2p*;NO_thl@+3ec$8%KYO3PY z2-n7qj!V>=uhwzn+C6agrc<r=<D?1OpogZ|k{b%QGUeB<&WIOYEib5bc=fhN*89?a zb?K$So^!rDQ7nD9XqL0nTF5EU<J|@nOqP$JWaf4E%{uO@<GN*hdqu2TSGMZZjh^1O zlo#v$h*u^kO^{FOr^3(WYdBS6Z#j!zMP!h7#IKOT3Ve`KdYz^}V*R-<Z`s;|Lr*>Y zR9~Z?SXriT@Qkqf^m<X;Yq&S^+`!h+dZ{9-u8F1<=m?D(Pl-br-(H5<mTkRtJNDT< zgSZ2M=fh;xa~j%YQ+?i^b|4(kw%@&kv+m6-hxoxEfq{ds#HG!1n?DQuIKI*c?5Z_x zD9f3xKFhV_y=QC81xKup&@jTf*iPI|#bCKuG1koOymsD0gOIH67hn?ddm2Am{;u0# zCW169dw+RT5^RCZsqonAf;E^;goO*2lr<nle<B>b5~2)BmkCxogbhUc%h_cpb{Co3 z6?@sfFTFfW$UVCLY`;HxsBx@uqvVoH;k%;xt~9h4oap24FEU#?F#P6|=kuz<Y@`OS zndJV)`a4~)_s{P4+<D;W)bxCLTMmD>YqurAKjC@8*59*hV=xMFzx~h`Pt=|M!MXfv zVnNx8lC7#15uv?_qDQYcWICR7L~WBAkhCIU3-<ZMsdoE2WXC+NsJ=$>OTG6rTs+aQ zWFH5Y%b-N3fslFQr6KLOOjTEooZYI)%Z*93e$A41#f8khnmPE7o_7E0U#zuVJa+FJ zSbD>bNja6z$4c-zC0A_gKVH2l*C>7<X8D6R5`?|0R~$O?;(pD+J$v=Z{GI5t>c5_F zK7DN#e4_i{;!>VFY6oh*s@cmLL~B0JTjkGJ@iRS5<Ak4*O{?Y8#k%Kh;JT$x4qcuN zlQilH32v2He<WA~hrYR9H2ZzA`OcfY*DqQ}Hk_*eTzs<R#=*C~vXk!?O-pOO3EsV{ z!8^A#=p*OTdgI+oi{ZV>8`Fl`x(FjjyMNaqVhbNOBkHYuU+}7C#08r#{gPID;Etk% zMKG!~->6e`f#a#RUn_jd^0sYy+I-CS?9d9;QNgQ{ahVHWc-<+KOl^skoPuM}MS{Qh z+Lx-_vopY?>IhGriPKEp@zXqBF*)JdUdh?B{Vu3f9U<RHMB*aBvBH;KKdU2TNC^q+ zoV^N8x~xsmcJ6!o{^bMlw&H`?OJs2OW<u;wsBeS0iym@5?PIXYCvz{kq@n7L^_9<! zHQ&1VPa5TCYWs>kZ(jWI>;@s>ZyyWS5l6O5_>NZXss3pGVPJ3#>DBD1PQ5pYx;A5Z zGY`EkRr*{N)_NH7eVw(UsBT=J*HqT9g<7_F%=q@2{a@0!TysQJdVZb~jQZRblD-<A z^u;v2%lpW}kxi?x!wN|)?n5%9v?Cv6E{~-d;OniB(TBTIM~cD}OeNHFt}7rjo=6LX zWUD4^Mp?#x8E)w@`H(C`{8+i%Lr_WrhdEQXV~Rh8)LZeYW}}q)z3r99Wlm&dx0q)N zW7OSurkJ7HSNEU}<;ynu2w&;waeCz8;eGqt<%O@|hMx(EdR?=dN+(Y$OOdid(B=ih zdraMGpWMr{>_i@vb4ec5cq7|-d9W?Da$f+cG%fe-fb5V#|B~GIKO;SlVElUzs5f(7 zjNs~Ot^SfsAQx1s*eH7uZO&&}<Xq5t=tu0nIx@^9;^ay8w+}f#BcgbF+4sdCv~&7O z`r;>#uF$ZU(Qe}ORCj#pG_$^W*{`fyEmu#>I_{2mF7)F}{GuJ}%nxfP8Qd6M+?ICf zz;hXU7es0QC9A9V>^Y4ZL^NASfy)&?@x0Y5Z{XX$!hC0_DbGM=y>g>NX}uv&^nrUF z%1s$N+g@Zp77rLcf6Hz8ct_|tPn)C_=E0vj_oZ@n@6dd|i_qL`hD(e;oj1}M5w_4y z(4;dwPD60>{_l1|CPPIZzD7(4B5!I%Yrj});xBcx=u7l(v2Qamz7nHVooW{!+{cR@ zc<N9!blxM??C?o1<kiDkAf?IP{&47Y_K=Uzfw!#<gN1dTJ)&1kUoG|ic%rg%+frjI z?Wkn_tOeVgoQ2-**~Fo(X4$|k)_i;$30ZMqkCh~LnOu`4Y)PZ;fmVb>A*b+`g&ML; zt?Vy1X(|tX9PYdGdR2PaS9^=znu+cwy}uv)syA7?K7=n~r6y;6RL_a>OpY%dmz|#; zJ3TvWeR(>n^1I&A=av~qw<%b-f0ogC75}ADtc5rC9{z$_n(S^K)RGT1flk@smU~PF z&!z_L`rvjscVWQF-tIPO<&v$7%w@0b5(sR>I0WZNl#{<$2dYTQ8`Q}x^!>u0w({_n zzB|vndzVHU+^&78RwyE`rRJr(J9(^S;gj$E*`yt>92YA*ZIj=mAeW`mD-}c9n|xdT z)OYon1)*c{!KIhp8ceO&A8Ym|k^AW)&t>O+yfxtRco%;09Xx+vjh^TYiM)+RHr^2O z&K>$R`PD;>%au4`VN|f=TDFe(oAK|5Wwbs?&*U81yM@@h)_1?U+z!9f&t7nEsQlD< z;8NmVwe}x*d8v{}k5?a6*7X;*DLoVK(g_phX+b>9hd&@s81Q+HpIN+l@xfzuVaC2Y zs&{Xw7)c!Ixs?n%-eK`XncI)ETT#VjYuHfKchA1g(X@t0q;Rp!L|a-2`rG3r*8;+e z<wzm+wuXD|?bz!!SssL+u@mqUx_2+X;oy<YWgmv_@-#&r<ZwKXh&adHx<TvC68|?o z;fZ#f2L{EG+jS1d6W@dkj2{1R$u0D)xPH-_SNRv<IVr~~WHZ;C*tdL*ETJc`sMx^O zk_UTLSnf97>;9goww*~iv9G=?{9qfU{3G0lr~CCc^(RBpo!1<0g^kvwOitJ<1f-<j zO0D?%&^*QVEssLY<k_u4+uoK(rO3LTy}51c;K1R%w|PITPyFmUy#!GbyLvZCOo~9j z{Yu=p^}eK<{h}6?@}>Trugh=lmbcQ*@#gY0YT5Dpp2fN9)B7bd9*TB}?$jzAklxM} z805Cyvh>&r)r&fK1F@Oh!z)VPy&RH^eLFeYS9IU^d+RYHu_ql$MSjznL+-rp7PSl8 z<Wqv*Upn7XB~`ayK6Aa>2ftV&=?MAk+onp+afQUb1EIJz@A_kr$|TRn+iNC2Uu;zj z-r4&4*bUT%PJ-cOQ>pDo6g4E)4_w?{YyCp;HL+%T4E1`K|KTsjGnMMHIa*V}50=-w zEx6vqX<vGIEc(*%Rmy|dw5aTtm-2Tdy<2hN$_ndEMFLalDQEO;wzNJ|JXsxf=G9r@ z>-a?c=|zd%2WxXmwz|Z8>NQ1)`=rUN-l&z6c<u`JesSe=<eKSKVkKt-Z|n;Rer95! zoF(9Vom0Y?sIJN@s4d?7*;Ci`_nOb^K7$Ne-h+Xhkqa#_^)Z2o0}14!{Ti=^3Z9;P zzib0$nT*pF)A4N?qDS?-#{<i>O|!fmzh~9U2Yq?JcJw^&p?7fY!Z#0NEUP0cXV2u- z?=Rlg_=ZFM_}zfWkZg~I9azUDE`=MXZNKqqzw}Mgsi{5ov~uQcMV@r*7qZ9KM@@S6 zqIYI_4@qkk`I{}PG}_*|VyE}l*62$`T~+Jy>Kyn~ukF^gcq8jQwBuc=L9)E9a>-Nm zpO=D$tw)<n1tuTs%H$Y}OC<5A_`20gj7y%~Eh3kH^vna8B;QtI{iH&WS7~{2QAS9( z*j<}JsXM$k9@#n^#Trap(0?PFS_(&=PB$&Se%Sv;NyqfsPjB_R4&BlJzASJ}{|=wi z*I)Cm7yjb(qAK}}S?Au1spDoUM!(1Nx|jL4$=rSP%|eQ-#^t_lytu+*Woxid%SS_z z#^V+j3W~zHGL9IG7JT?H&Li8qr1o}|)lMl3#p45yD>S=c{aa4{&bA*G6tmgT4mUqO zk$HIY@j4yx?>dp<3B014m14FuS$V!oBQ3wSv$E92_koPpHA(C%<NXmEznz}BDmYSB zFC0>%_9eS|*4VTs<mGh>^IxiUC9PuhoioiMPTe)ve9u32Zu6ZD-d0+9YV@YUH=YK? zjIz3k^V}|&##NaD`!OGqZ|KV@|8~3^6`5Q6YpR{&wpOd6K$`+M*>}=X$Tnk4=|@pf zIVbt{K6U9z_;;(x!N+pXhXmYB1?xCXVs5vN+g!O|Tk&S&n$U{9X&aJ%wX22er06LX zW$nMriR;^?7|EaCxl*&@4!@lvQE;Px`?<s#v!J7o@9Pliziy06s_w&Z@!xe3m$E~@ z<6V@NTiwgM>a(;=TgJH;2w3UvT`fmr%&K)xf9q^hnRK~1C3GQQqjF2#q*>BqscH9L zA^w$87k}{Qs5)2dF&}j?OS9;`+FR{#r?J^5P&it=v0&M*4Tlp;_sD#ezhE8|c<57{ z^sLZH?br*4I;ML$zNAIG{9}OX-|y#vj=Vv`2++)$DL|!$0{eSVSTF$x7hq=#Yk-O+ zh(g_nfTiu~!6GRaMlf)}IQa&PL(T2(!Ju&T9SJxTkrB5-V)1NoD`>xpjeDpfJS2$Z z>JATbCwm9F!Cm1Va8I}kndIv09_r`r5em13>%(o}mT(KWH9Rc9&7B<L8c24BYs1ax z#mLb4JMb`g2;3bW01t$R!oA@nI2j%ecY*uD{or2kAh;WRGu#+%0C#}v!j0hmaMwVv zc?TW^2dCJOLcHLC0bthxJQyAUH;3!NgTn$t-Q8ULDER4Ls90PB{Q?8v?!jT;P#&+S zATRd-xE<Ur(9e%Vh6j<z?g5l%C|A@6Li|AeN=&;&X#0_%gL3}GIYnp~5sIcT3k?b< zQly5*5P{TKwvT|&m%&`<i?St)wjm3JLm}}*`lc)d_2eQW){~1^<cB6Q<cDLDAJ~J! zdU6q){A_`E?0}&30snM?bW8!enZ#uP`0oHW0dlkll8gd!A^|CQ19^u6sf7S(1p=8s zy!CSr34uq#J;58B!M+k^&ixPfO8tp9e~t};-86H7%s<8kA=%9ZEulEpfBs8-iupf1 zjz*7*(LbTO8Re)~R0u1SUY`C*e~L~Uqcr^v6~d^We#NMPfrqs$_{J2mqo^qB>H*m2 z_Mb-V1T3F!mNFle<5PAzp5|-fM}Asjhum?VpO=46c=<b#tuhy6Ewt0B7pnW{m&q=< zQ*EcJoUB;8Tk-7yOE)pK&0EB{!nXNdAeK8CwoDfP9t+23JpMR5y!M;LgL`rHV;g#Z zecg9<SWwjL$%6$mSI(N{YRJP#VPsRcug}l(1q)aGn!p};c53A6?ZqBT+NYvEbbN2$ zDH`S&l<@2K>bN(@Z^s<gu;R`-<RG1vmU(356<Lj^U$uWKwh@3D+iOMFOf&^+Jt|Nz zAKWjp^GtE`2HDlBkC&Y~k}g%F+`LRwCMWGwX4=Xuspa`wRA+*NPekF`Mcc05J$APr zJ2^aSYxHPRf4^vvgq%&M<$>s4ql0G^?X$?mN=uTyo>km%AZwFVyeRhc84t@&)kR`{ zdE$>c5i#$M#iNFZZRhTH3PmpkF`c|P%s9Rj(Z76jxtQz4(|dc|>iomQQl-D~T}iF! zaC{zGl@Ri_p~l+$O0S=Dm#1ZJk^B?x&(RCFV-jvV705Sk>+>5<JQ-4;qkHtgK=1iW zCFhPHdPiqJnDRXHN_jF^=eXOdt!J&~`*MM#jS_d;Z5~MNjum|D6u8*3s*wD7+3sh( z@iO0pc}^?3DlC2^V@51Yyyc@awp%qQA<W=lrZHllK&2>mwc^9v=KY(|Xv26_RF0ZI z33gQNcjgz{=L?_9<*j?Q0KNPPw_Qk_d6!7!IjPDI;j6DDI!Ld$wktjPLq~1ztu2Vo zo{N`EOiE8|v)eKt-a4}FW_i0!(~={N3kb_=vIzp4bGYs_Je#W6p6($(zCvtM=vDb^ zs-b1O-Z`p>8K}NmF8g-*`}n8B1-G_~uiqWv2-6LJrM&CZDg=I$qln1K8&2bo+i#UW z9B63j!<CMipSW<RWK2Zi&C^^Xu|8+-jP|AH^RxmMcIEEjy)(;WEp{kQ48xh!ARm+b zn^$k^mE++nj+n_xnjPq<{IoQEa<iJkwCjxh2><lf-D1yFi|+gUu*u8X5qBs~u%P#W zC2_{yDC~)$wzwqsit*Jy-bYt+)zziGT!p^P7kyGB`RUdL@C(at#J)RugL~Qcm5y9I zMtGlyb~nz9=+!l-dW{>Q4vn=7KPP<|!-$yLKe$X-)gu}736|NVV!Y}L*Sd?B^A*47 z_4gG<sH|7Zb+~$KCgQEIa-ncRc(b6Pm|zp;bZ`8QqmSLObwk4|a(n|4)W;GsIu5?X zTPodJx<s;AA^LDr-(Zr-Ml#oc%<WH$OHXu1@aD9o8G81AxDoR-N=)!pL*6&9#m7Qx zyEylR={O|1{pRfO{hes?$@gt*(aZPoJbU#t^Fqgu?L3nA5j#%GcfL~)@IuXbOV+7V zIdWxN#ZHT?ncVmpUG=lGsw1VpqP^j{m^v=Xi8pfa)*`#)M=94m<zrWp-$aLRu!$So z^~68J*Z5%W>0|r_x?dahR5y=)f9NI>7v$}E)6nKoYk}3iGril24~p*ERh4A)?$#pi z^5*-m&bFTYUYlrFj0@wBKj`x&B<FKPrS)ggP59I8n(}Icl3!{jVy6nFwWqS2O5ock z_cc}9Z;qWAc=A<J%%#V=X0J+P#J&_ldt5?S`kK{t!Km5BUL6hctE%VDucLkZliS`V zixo(y5p7p0_e3-rRi0{7E;aTO`BjI=n-Z6d#m9&(I64ykqx0bG=G~FLt6M}QdF6Z7 zEaumg8$6er&BrqY_Sfep#GY^P*w(MErVop>{MfW`w4hUN&5_rg)0Lc_wy)fH#6uR; zovltX`XbR06Kq_%zPdWkIzU~`+c!8q<<!T!Qfi40Uy;^5Ompqr{$s~`#SX&C)SG!+ zv80!L0roGqWcr(tcm=ehBL=q}7g~;J`S5f!$L=G4pG&z5rzlc;*hq7gkmvFnNrLY$ z`CY01u|Pl&!?91ulxOFYq{mkRi{F*wGWr`G>yInEY+O}XxoHu8WsKo&xJ}@S9@k%+ zgYLwn251;^)vtNJ<P>p6<67hTmV~IV&_h2O&fU1Bng3wYCErXY@NwB|S#x_kaMY`( zPuG1nRAh)4(e9-C<3`1+ZN?(SlX42NvKbaGhql)^2AQe)wB@J;z6o#A>o-ivJe4?B z)V6CRRbHmNF6dX=9+73aCquqo*t@e(Zl$w;%u6+A4Y)^=<f`CnrBx%A+gzJZ3|l*l zC0Uj{?y@DE$-X*tr2Gv|WPP0Wu;`;Z)dn#^H$K|Azi(-`sptsVGMMu~I@#eedXwI) z@nACM5GN0KnQiVV|DVse$KhWS9^&~r2MxO;xAETSXu6+u0%O-ye;NN^*J|HIFS>6; z#Sz~wJez;`k@48sy}PV#*U#!nY39bp4Nd#sTPVD6^JRO1n@TmxIGp=~4FTVz`qO<8 z2a;|y@%FqlSYRM@+iK;?D*>IyCpu@Bd=f3+p>94|ruIJFxangOKliH<&CIyM{FCi_ zIkzQLHFw=;Y(Q<6Gag7k6JB&6_yVqQC`(J@K>en5AIvwy_WgX>v}u5UvCKN#wVQ_z znH;?=>~zo1sK52VrXQlo#S?4&j$N+IXfq6pE{n5M?!DOabVG1*-_I<Y6(;DEqHn=* zljQiH-a!T~neEjXeWLGg%ZOr^KCtV;jlsnNM^aPLf@egx+OM(H85B7E@M3j+bh5<m zFMHMx?(^u62~wSGcuuVSL=5td=SxplNX-!)T6c%MQqUqG?)Rec3tzI;zHct7p7l-$ zd|IDaywLf}(-V8t_7%P@wG(^N{PBuzgT%dEpL&DOFBJXYD0=_n%>~yM7|sk%ZJI#y zh?HMCf2sKD8Qv4Q1t;=X6dsNzACg%dH>f^gIWnQ6KDg}dfabf2umSykkt~tpKl3Ie z#X4=OP106P2_NSQIcRjGT<YqZwER^fSy!v~>@1ZLDX|&g5jioT0}tgn>ACHg^9qcD zyW*741T6khqKwGNOUcz~CDFVm5)Z}imhv`@-fZlceT=+H#PJcFM<i>?a^M_KbX9#^ z{R)xe6N~yA-vL?%CQc46m_QCL`dM8kwsU}Mr>BDRrWG5Ls;gusbSCx;PVJdku0FNg zRK0a-3(u7FmxxDQ&o30WuUeckIFUNI?DWL0sep;_*Au=|t`oaNo{Mz;d?7x#j%P}C zLW)b|`2_z2H`mL-DPQ$d+*USbja<2dQ{n18+!KqZc)3LSr&dl$auL-hb`1t_Kks_6 zfh$Ozd-0UX;7{GbW$6=Sz{8T7i2#wopM4V_#RjJW)T?=>mQ1-!Eu3)SsvVpnt9Now zV5VvbQ_=v})I#-%lEF>f6UTn)axIR{{P{3rO8Ml3T1HwHfE}H-N#%(-`SW4sl*-A8 zw|P_gDZCTA(?6$7UpmM)$Ui8MD!BOPu;~3M$D%(?Pl=5E;&U^de{i;eHrboxN14J< z=Nl~N8{qMbv;!pK-=A-QrkqwvPctB(p{#>{@{7enQ)cKFx&jA_Qm#>WXaWF1z!md2 zn2|;EpSSc6tz<dH0f}c!O8#<+0|p{=ZeBvA@}IQwpO&GVdO_g;0!HT{4hKaasCRHk zNYwLxsa&M}r_7d^A@uT4jS!sq58^l$JOQ-@z?pgdhpe1`pjFH#X3QN~@|Rg4>fbV) z2xZO8F`O|)qBe;>jiSS;pUhDD9Xbo3Pev*F^}m>e(Mr=xvOmj=i%~ZN8>2jP$^Z14 zmA=0`%`Cb<<Qg$jf+&eN)bnS+G0bXsB+xDdI7t}w*Ml<V<j8tj21uA<4o(r#jNlX+ zPY-So{x^=xU^#e(_@^u;=FBRVbEW505l3KnI3kF<{hI?^@GN;$cwjCJW5s|ottrx{ zm?{B@g+ccjhKoZpG=lXCm>#p-7>POmiF^CoK|ym(MS@%`#%VRoiCKT~bF_n`X}MW! zL^6V*z}CTG+d#mS6fkfCH^o>XOfVu8L$YQ><0$v25e({6M7Sjs#RDaw`mCV<Sm;*B zyII4xI5>h&JQ5EJ2=ns;F;l1^KtHK>Db)jIr4%)Hj|6uRRK&L4AdsmzGs|Jj5x^13 zLFNeLaN`K$a0S=i;5vXQ#6=;GnH<!g$iYz>L8Awa!LZUp@w3(x#sU(k#95Nv!=WQ* zD8$Xtqt6k^LE`Y|2;%VLaOVhNq63%^C`u)S&JQY53O`s0K;mcw&{|DJIfq3TY9ogS zXsah^H5p)}wVMM*fdbqtn4!o28D<m~O~XuUA4D`bbDYj^Gl0t%v<$+{j)l=<)7!@+ zZ!9x|QQ(Xys=z7jqiPVGhLLK0a~SObMlxuvH~8}e?emBD3Vuo88#{*?{TNmAkbe?2 zhN?nT)x#m^l+aWUe1{rLRXy4lnh>a>rcp^91kF*Y4`_t6ko<2bWVmY@kB|szdnrml z86nZF0*gk{m^6n)8)&&3-~?UTBp?GA;KE;VgS!ylV8Aj+fM@RD$_D(JQXr5H1pwHb z)qoN(3b&zhVU+T2EPBLnzkiT0FdBwQV-ZAV3Da9iV;*(wWUg6efJjf!2&x)W#T*I= z7c>+G{)bVTOec!22-X}(jz|{r7(Vsik%z<4)tn|<syJ!nQPp;iJUc)FRoh@35foCq z09nQymVl2KaK#`sh@t_ZEJQJU=%0w98a7oIF>|^|BZ|r<8c}SHkC`Y)v@k#pq=2E| z&lUVZieUymA-BkGs8ChR9ufIRmk9bchCFd|et~W$RC}h{2^d#EMQLPH*+(Ip)=$i_ z(w4)EqJ*|{(zOIMk~vse235`CuIO%`+H<hbg~GDv8InrY96}3@aDa*o{(FPZ2xiGp zh-PNP92Z#7VVFgPN72=q#s<nLo$fA>%pL-)EI~Y(qr`?HnxHvBxdM71;gDH<HKjt< z#?!b<X*?@6z;`gYQ6vrj97<gv`9Po>bc=!XVxGyfuw<SKNB$K#21oCss0vEs#2j*4 z4qFag4s#AQ4m4;pL*P&k3Hh8b3O|?^qoBpOe<gS{)gGwEf(6U0EN!Q%AdMEPE1ILl z24D=JcuvT<z#*Ok3fuu>AibbE93w!ZEij^g*~1_i{+l);qW3T?Is>$X$#lSwkY#j3 zGc20vP#Z-x9h%P28o}m<AO(WDLdYjlZT)X5G|x?gL*pm}QB;VPIB<p{GaJDk3l^>Y zpGa|@8~!_b6c|5I(No*Zj-JtGx|m3y^-xC!nKblY6@2#tLWKGXNXYbZ9u&U<b$rlW z=nllUe{TT{cg;40U=c8jZ$yI;1*?FmzM3Xr>KB@TsdAtRn9W!HbyUY<q73IvA3=c8 zGbFS5&Jl&7kE`b_fuZH|dM&`7Ac}%P<5zbIJIR!e1!5`G%TZmoHLw!>IadDTF(}0` zv-&mKSbjd;STvn(8rPV56eJi}uxO|;pbio~G#2s$|L4yD!0U&=BdoapY7iI<T_b6@ znLA;c*yp%Ol^A0TMIX8Z0{*ZmDzgkJ(;F6gX#FIW6_obThNoc0%VM5vj?Eef3UXnP zkB59a3<!y83sA2b#e#I6Z)ZWu+^OPG^nQhAm26#^0dU@sJEbZLWLeaKD3u+MR|*0! zmdOvOkxc~5*r_H$Z893e)@0^R6*^m%wNs6vS-wALJH(A(K$|ycyE{dRA=+5!fGVJ} zo@(D%x&vpXhq=qg0BNyUHyCk1G*GP@I^`C8q3Q~yk=C?%3~dfOrz_eVE<i+3uSc~d zNK7yeJphCHLdfC(u`B|c@5X7(pQk2hb~RzM5hH*lf`S*)Oo&Y+AijS}$9#XzOb3hX z=IEd)4qF!njRMG^t&m57hNyv{H)d5*hWn*^x4+@Sf<uH^OoQ1_!Qg;JPax*IP_zQF zmN_TErW^BJD>HItr9h$S(?*))nLQM(gPoH+#BUEu%OM#<=E16xkg!<10p$qgIgd_h z3C%Wu%VcRYwV5<#Q}uEVEi^`e*iE+y$VWg<AI4!qVSfY=05k*z(`aV3qXe*+Ed&J1 zO}yPgwj#lN6fhNrL{lts8{=(gA&lS;wGhkW2>Rm`V!?^cP$jf$3du04MZu_igHeZh zFzQGbMx9l{sFQYPoOHWIQV3>>KT+vpCV|!fFol6oQzzLlYCr-U983X%!7Ox-8ij%3 zDQ@N;Vq<u=xtFHlkyPfGxrdV6NTH;;kmD9JQ^wXh%?*(tO%LSc!Cc%uy#urq#_Db= zz`WhG6zs8P2(utvcQ0?FXtKLaw7IQow681CO<}`&e$5Re@RB%pwMbHsng`{a;1C#i z7oL`^uC=Lw?1uG1{F;#(k^Vvc05>es-!C9UBT`F&@{9(!hQM$I7^O(4ua?3VGfP-# zV4$C`cPKb-o2ZUdL!wn-9%S&MzKB4wFF0NsrvTMScJt7%)-#~h2)=14c!h=rX~5wT z5fSPUX!Ss{Cmcy665$9G9EDN?CDcNq0zyfVY5^f@0742S-dpA#3kXrC5Ty>%2I1aY z;NTo@_#7tS;V5qz^bQPwL6}J{fnlLq3SnX1ZW=fY5{-7jxT_)E32tf_7gvlL0lW`S z4e8;5aY3Sq2v-7<jxUIbP8NjV2Ed30oB&rEmgGRUFjsf7mV&k`Inad^3e)or3H1ia ziewm09RX7W8)V%ABSMrE)@wrLP28gZbKFAK8`;`gs>19-Kn5ku5D@21{UT2a3Jh7t z0;1oxwbeCO1004v!)c$;2Z)KnECb1*ns62bnsBK3Ozfb`f(i70$|0a0G*Pm%D3ZaW zNDUkBXm>3In@|!+?<BiX7#FEwN(%4{BYA=w`rz%0-XUIgCbT=CRv-q@m`Dvhkaeh~ z0A2!#P($F=5OlDOyDK<yJv2(!j}#IDDj<8ihJ*wLL;yCzi~~TTVgSjHUPGWOwAWip z!OlkC8fIu`tfx=A1AJc)h%N)8(YG~%TRU!nSvH;r&jJbhdxw$(!(lKL;8Bp^Rfc#F z$H!opY77J<f^Hv)SJO2&1$)cUFf^D#+qnnO%2>OHdxroO)KV~<gLt@uP_`?e#8BJD z1VsaD2L%C4?ru6!b7bhk6m7j-0?9Dlkj5&IVhePK$_!g~{~+jGZ)$rCwDmv`8T0@M zaJWB`ULU>8W}sIT{MJZq+T(hGu3`Qlm=3KPFr)!#4w>W~N-G4VC|i<3y|fezNPZ#i zG^mj~$;~D-$`3p@cgaSSu^#;qilRqq=z^SHfGuSGpBW{;CQ@%5U=z%cqPI-tAv=kr z8_NHdoiGsmuiFW5w|_PhaD(c*VBkta7fP`WB-;Xy%5Wx@dIn}BUz#uR06Jk0oCk1G zpu8D)D}hH8n}OhMkys5ZK?8|aL7+4c2x?JE)$V^Oia;<IrT063DLhy2`u`VfGc)_w zjPv)0`Xf@1nVAM%xgj;A_<A=4$YaNNVATjH4}uy7g+;0n5k#=Z*cC}YV(=(;4-cXO z{QtI3baS1fI4F$lN9o$!T;cA1?i5=9;zk0J-CQ+*Ed5EKUm^tsf%ngnLV>M9?i=(H z;ASYaX0o2raccX8QZM|xp^i|)4|q*2g-A6wcMnpSU#J4bKKw&Goq-<$ZV2*1a~%Q< zQW$El0fW>k1dJCVyhFWUw#K&F=G6X%+PP4L>E}(8Dg`N=K?t~VrD`XY7900qI#KKY zq3>kFK&b)3Fjw!NdMgSH3>_dT!RLl1;2Z4!!Owq@{6|dwFT4KBuK$Pw|54%pYS(|+ z^&fHIKPvoR?fU;0yFes^9{&J42DKC-Ky*WhA6(MjZ3M1B5Jw0JLT&W;7&HY{q|ZQ= z;9&3!jc^t9G@!X90*?SM7{d}Mqgw?qYF2_%hRk44_J>lG0W-A}HDU%$<^PX|U;rg; z!ld};36m3<GFzgN7D!g42OR!5M^FM$X6pP}ac+981dmiiDuEy~HDobY0c*s<i5{|W zQc{9zhlP3pRC9y8kN;|ZtOTcUi!obQg44qtihl`rDEyBi9ZGPP0D$5j=l_5j>eOG6 zG4qESPo4Dt^Cp2x0{<csB{+SauV@He(`NXJlnMS^<Nt5Boe?siH$oTYG#4`X0YwZT z(a|FTP_#giEm**~ON$dIf-nJvVRI3JIb)#*2*5#hwAg?mB{ZM}p9=*j&RsDoHrAsR zV?=l($?hIP{NN})G!}f!{lIWoEXWLpZb3gtED;J5LqD(pIt+(^^4Hm5;7x(^V3g!= zwsIIO@B?fxEFJ`q*<g4|Gz9?X@S@NtXkneD914wwG9TGsSSZ(!4F=w`I1dKpe6p7# zLiv5H&teczt~@J@h`>Y99`M7UkBEZ8&ulO>VIB@57Rtt8D~FrMXA}`Xk5?!n0eS@^ z+p|O{Ba;P&Mo?Bu*<kbOL*ocg1}tkiJa~8>jN-r9%AufLt}HMN8VjXTvcYgTc6|X+ zJOaBcF(Bs4&Swk;0j&YC)`vkt3B)Wgz)@&rnhl1UhZl>)AlUhb1+TN5|11v2-Zm_r zNSIfSfP$6|S@9Ck^K=bMz|7Ne90r49w*?$H?vWh_4uhYk8#oLB$IfRw5;u=NJdyw{ zz_8GVM-u1Z#iJ0=>5i=BKzjK+7#=-OMtD4sI{UMDEVMC%r9J|Z04>O{!oX`(=fjZD zN)l^1+<aLQaPwtJz|EH>0b~iX^OT50fRh4PaS)N<IDmOD)I9$}1TK=D_e2~HI?R)W zW+Dy`z5kLK2J(y%?9W24yJUYBz|c@?1M9PRB3M&rg@MEyc0B-wkA+e)Se`{8pf_u> z!|>o`wrnsglHF#2Fy`?Yz_9E(1l|;j0Qt^r_2E#^k{|R#_mdzlhQ_n;3c%+1X8<D* z*xQQ+zL-s~fMdc!YmKZp2q4Hf4>r$cz%mn(-Jb#&c#kOCvmko_Hy;L^)4Xzc_C5fK zL8I7h8o)3hsfU$j3>wF-lb{@kkIpMcm`@7^0VVFS@Bo7Wq1AaX6tp(VRt}Ay|11{D zk7p|frQ5Q@2+(pYYdP@fJih!vuYlO*=_wc;%x@bOJD)x*9!kt$!%G0WW7uItXd4J? zIUE@C%!7gV!p?(XQ1kc)y0UpVaCmkffyCg5^Xv$NN6gb_5c_8Ddw|f;^V@+3CE4l2 z<L2`ZkTOrccp{YW#L5E#@G$dW;I+u}U?}$S0VsrFAHP7b`FtioS^4aE@$>W<B*-)C s6|?{b7HmP3SrZOT6rm9+7`F0<gp$ai)KM!Ei4)?Nlhd~_5aR#;0FzJ=DF6Tf literal 0 HcmV?d00001 diff --git a/src/HTTPmsg_MessageLen.ttcn b/src/HTTPmsg_MessageLen.ttcn new file mode 100644 index 0000000..99453a8 --- /dev/null +++ b/src/HTTPmsg_MessageLen.ttcn @@ -0,0 +1,24 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +/////////////////////////////////////////////////////////////////////////////// +// +// File: HTTPmsg_MessageLen.ttcn +// Description: HTTP Message length calculator +// Rev: R8D +// Prodnr: CNL 113 469 + +module HTTPmsg_MessageLen{ + external function f_HTTPMessage_len(in octetstring stream) return integer +} diff --git a/src/HTTPmsg_MessageLen_Function.cc b/src/HTTPmsg_MessageLen_Function.cc new file mode 100644 index 0000000..fd6c7fd --- /dev/null +++ b/src/HTTPmsg_MessageLen_Function.cc @@ -0,0 +1,49 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +// +// File: HTTPmsg_MessageLen_Function.cc +// Description: HTTP Message length calculator +// Rev: R8D +// Prodnr: CNL 113 469 + +#include "HTTPmsg_PT.hh" +#include "HTTPmsg_Types.hh" +#include "HTTPmsg_MessageLen.hh" + +using namespace HTTPmsg__Types; +using namespace HTTPmsg__PortType; + +namespace HTTPmsg__MessageLen { +INTEGER f__HTTPMessage__len(OCTETSTRING const& stream) { + HTTPMessage msg; + TTCN_Buffer *buf_p = new TTCN_Buffer() ; + buf_p->put_os(stream); + + int buf_len = buf_p->get_read_len(); + if( buf_len > 0) + { + if(f_HTTP_decodeCommon(buf_p, msg, true, false, NULL, NULL)) + { + buf_len -= buf_p->get_read_len(); + } + else + buf_len = -1; + + + } else buf_len = -1; + delete buf_p; + return buf_len; +} +} diff --git a/src/HTTPmsg_PT.cc b/src/HTTPmsg_PT.cc new file mode 100644 index 0000000..71de291 --- /dev/null +++ b/src/HTTPmsg_PT.cc @@ -0,0 +1,1233 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +// +// File: HTTPmsg_PT.cc +// Description: HTTP test port implementation +// Rev: R8D +// Prodnr: CNL 113 469 + + +#include "HTTPmsg_PT.hh" + +#include <ctype.h> +#include <arpa/inet.h> + +#ifdef AS_USE_SSL +#include <openssl/ssl.h> +#include <openssl/rand.h> +#include <openssl/err.h> +#endif + +static bool report_lf=true; + +namespace HTTPmsg__PortType { + +HTTPmsg__PT::HTTPmsg__PT(const char *par_port_name) + : HTTPmsg__PT_BASE(par_port_name) +{ + parameter_set(use_connection_ASPs_name(), "yes"); + parameter_set(server_backlog_name(), "1024"); + use_notification_ASPs = false; + set_ttcn_buffer_usercontrol(true); + set_handle_half_close(true); + adding_client_connection = false; + adding_ssl_connection = false; + server_use_ssl = false; +#ifdef AS_USE_SSL + + set_ssl_use_ssl(true); +#endif +} + +HTTPmsg__PT::~HTTPmsg__PT() +{ + +} + +void HTTPmsg__PT::set_parameter(const char *parameter_name, + const char *parameter_value) +{ + log_debug("entering HTTPmsg__PT::set_parameter(%s, %s)", parameter_name, parameter_value); + if(strcasecmp(parameter_name, use_notification_ASPs_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) use_notification_ASPs = true; + else if (strcasecmp(parameter_value,"no")==0) use_notification_ASPs = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, use_notification_ASPs_name()); + } + else if((strcasecmp(parameter_name, use_connection_ASPs_name()) == 0) || !parameter_set(parameter_name ,parameter_value)) { + log_warning("HTTPmsg__PT::set_parameter(): Unsupported Test Port parameter: %s", parameter_name); + } + log_debug("leaving HTTPmsg__PT::set_parameter(%s, %s)", parameter_name, parameter_value); +} + +void HTTPmsg__PT::Handle_Fd_Event(int fd, + boolean is_readable, boolean is_writable, boolean is_error) +{ + log_debug("-------------- entering HTTPmsg__PT::Handle_Fd_Event() - event received on a connection"); + Handle_Socket_Event(fd, is_readable, is_writable, is_error); + log_debug("leaving HTTPmsg__PT::Handle_Fd_Event()"); +} + +void HTTPmsg__PT::Handle_Timeout(double time_since_last_call) +{ + log_debug("entering HTTPmsg__PT::Handle_Timeout()"); + Handle_Timeout_Event(time_since_last_call); + log_debug("leaving HTTPmsg__PT::Handle_Timeout()"); +} + +void HTTPmsg__PT::user_map(const char *system_port) +{ + log_debug("entering HTTPmsg__PT::user_map(%s)",system_port); + if(TTCN_Logger::log_this_event(TTCN_DEBUG)) { + if(!get_socket_debugging()) + log_warning("%s: to switch on HTTP test port debugging, set the '*.%s.http_debugging := \"yes\" in the port's parameters.", get_name(), get_name()); + } + map_user(); + log_debug("leaving HTTPmsg__PT::user_map()"); +} + +void HTTPmsg__PT::user_unmap(const char *system_port) +{ + log_debug("entering HTTPmsg__PT::user_unmap(%s)",system_port); + + unmap_user(); + + log_debug("leaving HTTPmsg__PT::user_unmap()"); +} + +void HTTPmsg__PT::user_start() +{ +} + +void HTTPmsg__PT::user_stop() +{ +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::Close& send_par) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(Close)"); + + if(send_par.client__id().ispresent()) + remove_client((int)send_par.client__id()()); + else + remove_all_clients(); + + log_debug("leaving HTTPmsg__PT::outgoing_send(Close)"); +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::Connect& send_par) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(Connect)"); + + adding_ssl_connection = send_par.use__ssl(); + adding_client_connection = true; + +#ifndef AS_USE_SSL + if(adding_ssl_connection) + { + log_error("%s: HTTP test port is not compiled to support SSL connections. Please check the User's Guide for instructions on compiling the HTTP test port with SSL support.", get_name()); + } +#endif + + int client_id = open_client_connection(send_par.hostname(),int2str((INTEGER)send_par.portnumber()),NULL,NULL); + + adding_ssl_connection = false; + adding_client_connection = false; + + log_debug("leaving HTTPmsg__PT::outgoing_send(Connect),client_id: %d", client_id); +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::Listen& send_par) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(Listen)"); + + server_use_ssl = send_par.use__ssl(); + + if(server_use_ssl) + { + #ifndef AS_USE_SSL + log_error("%s: HTTP test port is not compiled to support SSL connections. Please check the User's Guide for instructions on compiling the HTTP test port with SSL support.", get_name()); + #endif + } + + if(send_par.local__hostname().ispresent()) + { + + open_listen_port(send_par.local__hostname()(),int2str((INTEGER)send_par.portnumber())); + + } + else + { + log_debug("using IN_ADDR_ANY as local host name"); + open_listen_port(NULL,int2str((INTEGER)send_par.portnumber())); + + } + + log_debug("leaving HTTPmsg__PT::outgoing_send(Listen)"); + +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::Half__close& send_par) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(Half_close)"); + + if(send_par.client__id().ispresent()) + send_shutdown((int)send_par.client__id()()); + else + send_shutdown(); + + log_debug("leaving HTTPmsg__PT::outgoing_send(Half_close)"); + +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::Shutdown& /*send_par*/) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(Shutdown)"); + + close_listen_port(); + + log_debug("leaving HTTPmsg__PT::outgoing_send(Shutdown)"); +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::HTTPMessage& send_par) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(HTTPMessage)"); + + TTCN_Buffer snd_buf; + int client_id = -1; + + switch(send_par.get_selection()) + { + case HTTPmsg__Types::HTTPMessage::ALT_request: + { + if(send_par.request().client__id().ispresent()) + client_id = send_par.request().client__id()(); + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_request__binary: + { + if(send_par.request__binary().client__id().ispresent()) + client_id = send_par.request__binary().client__id()(); + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_response: + { + if(send_par.response().client__id().ispresent()) + client_id = send_par.response().client__id()(); + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_response__binary: + { + if(send_par.response__binary().client__id().ispresent()) + client_id = send_par.response__binary().client__id()(); + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_erronous__msg: + { + if(send_par.erronous__msg().client__id().ispresent()) + client_id = send_par.erronous__msg().client__id()(); + break; + } + default: + TTCN_error("Unknown HTTP_Message type to encode and send!"); + } + + f_HTTP_encodeCommon(send_par, snd_buf); + + if(client_id >= 0) + send_outgoing(snd_buf.get_data(), snd_buf.get_len(), client_id); + else + send_outgoing(snd_buf.get_data(), snd_buf.get_len()); + + log_debug("leaving HTTPmsg__PT::outgoing_send(HTTPMessage)"); +} + +void HTTPmsg__PT::client_connection_opened(int client_id) +{ + log_debug("entering HTTPmsg__PT::client_connection_opened(%d)", client_id); + + if(use_notification_ASPs) + { + HTTPmsg__Types::Connect__result asp; + asp.client__id() = client_id; + incoming_message(asp); + } + else if(client_id < 0) + log_error("Cannot connect to server"); + + log_debug("leaving HTTPmsg__PT::client_connection_opened()"); +} + +void HTTPmsg__PT::listen_port_opened(int port_number) +{ + log_debug("entering HTTPmsg__PT::listen_port_opened(%d)", port_number); + + if(use_notification_ASPs) + { + HTTPmsg__Types::Listen__result asp; + asp.portnumber() = port_number; + incoming_message(asp); + } + else if(port_number < 0) + log_error("Cannot listen at port"); + + log_debug("leaving HTTPmsg__PT::listen_port_opened()"); +} + +void HTTPmsg__PT::message_incoming(const unsigned char* /*msg*/, int /*messageLength*/, int client_id) +{ + log_debug("entering HTTPmsg__PT::message_incoming()"); + + TTCN_Buffer* buf_p = get_buffer(client_id); + + while(buf_p->get_read_len() > 0) + { + log_debug("HTTPmsg__PT::message_incoming(): decoding next message, len: %d", (int)buf_p->get_read_len()); + if(!HTTP_decode(buf_p, client_id)) + break; + } + + log_debug("leaving HTTPmsg__PT::message_incoming()"); +} + +void HTTPmsg__PT::peer_half_closed(int client_id) +{ + log_debug("entering HTTPmsg__PT::peer_half_closed(client_id: %d)", client_id); + + TTCN_Buffer* buf_p = get_buffer(client_id); + buf_p->rewind(); + while(buf_p->get_read_len() > 0) + { + log_debug("HTTPmsg__PT::remove_client(): decoding next message, len: %d", (int)buf_p->get_read_len()); + if(!HTTP_decode(buf_p, client_id,true)) + break; + } + + HTTPmsg__Types::Half__close asp; + asp.client__id() = client_id; + incoming_message(asp); + + log_debug("leaving HTTPmsg__PT::peer_half_closed(client_id: %d)", client_id); +} + +void HTTPmsg__PT::peer_disconnected(int client_id) +{ + log_debug("entering HTTPmsg__PT::peer_disconnected(client_id: %d)", client_id); + + if(use_notification_ASPs) + { + HTTPmsg__Types::Close asp; + asp.client__id() = client_id; + incoming_message(asp); + } + else Abstract_Socket::peer_disconnected(client_id); + + log_debug("leaving HTTPmsg__PT::peer_disconnected(client_id: %d)", client_id); +} + +//void HTTPmsg__PT::peer_connected(int client_id, sockaddr_in& addr) + +void HTTPmsg__PT::peer_connected(int client_id, const char * host, const int port) +{ + log_debug("entering HTTPmsg__PT::peer_connected(%d)", client_id); + + if(use_notification_ASPs) + { + HTTPmsg__Types::Client__connected asp; + asp.hostname() = host; + asp.portnumber() = port; + asp.client__id() = client_id; + + incoming_message(asp); + } + else Abstract_Socket::peer_connected(client_id, host, port); + + log_debug("leaving HTTPmsg__PT::peer_connected()"); +} + +bool HTTPmsg__PT::add_user_data(int client_id) +{ + log_debug("entering HTTPmsg__PT::add_user_data(client_id: %d, use_ssl: %s)", + client_id, (adding_client_connection && adding_ssl_connection) || (server_use_ssl && !adding_ssl_connection) ? "yes" : "no"); + + set_server_mode(!adding_client_connection); + + if((adding_client_connection && !adding_ssl_connection) || (!adding_client_connection && !server_use_ssl)) + { + log_debug("leaving HTTPmsg__PT::add_user_data() with returning Abstract_Socket::add_user_data()"); + return Abstract_Socket::add_user_data(client_id); + } + else + { +#ifdef AS_USE_SSL + log_debug("leaving HTTPmsg__PT::add_user_data() with returning SSL_Socket::add_user_data()"); + return SSL_Socket::add_user_data(client_id); +#else + log_error("%s: HTTP test port is not compiled to support SSL connections. Please check the User's Guide for instructions on compiling the HTTP test port with SSL support.", get_name()); +#endif + } + + // Programming error in HTTPmsg__PT::add_user_data() + return false; +} + +bool HTTPmsg__PT::remove_user_data(int client_id) +{ + log_debug("entering HTTPmsg__PT::remove_user_data(client_id: %d", client_id); + +#ifdef AS_USE_SSL + if(get_user_data(client_id)) + { + // INFO: it is assumed that only SSL_Socket assigns user data to each peer + log_debug("leaving HTTPmsg__PT::remove_user_data() with returning SSL_Socket::remove_user_data()"); + return SSL_Socket::remove_user_data(client_id); + } +#endif + + log_debug("leaving HTTPmsg__PT::remove_user_data() with returning Abstract_Socket::remove_user_data()"); + return Abstract_Socket::remove_user_data(client_id); +} + +int HTTPmsg__PT::receive_message_on_fd(int client_id) +{ + log_debug("entering HTTPmsg__PT::receive_message_on_fd(client_id: %d)", client_id); + +#ifdef AS_USE_SSL + if(get_user_data(client_id)) + { + // INFO: it is assumed that only SSL_Socket assigns user data to each peer + log_debug("leaving HTTPmsg__PT::receive_message_on_fd() with returning SSL_Socket::receive_message_on_fd()"); + return SSL_Socket::receive_message_on_fd(client_id); + } +#endif + + log_debug("leaving HTTPmsg__PT::receive_message_on_fd() with returning Abstract_Socket::receive_message_on_fd()"); + return Abstract_Socket::receive_message_on_fd(client_id); +} + +void HTTPmsg__PT::remove_client(int client_id) +{ + log_debug("entering HTTPmsg__PT::remove_client(client_id: %d)", client_id); + + TTCN_Buffer* buf_p = get_buffer(client_id); + + while(buf_p->get_read_len() > 0) + { + log_debug("HTTPmsg__PT::remove_client(): decoding next message, len: %d", (int)buf_p->get_read_len()); + if(!HTTP_decode(buf_p, client_id,true)) + break; + } + +#ifdef AS_USE_SSL + if(get_user_data(client_id)) + { + // INFO: it is assumed that only SSL_Socket assigns user data to each peer + log_debug("leaving HTTPmsg__PT::remove_client() with returning SSL_Socket::remove_client()"); + return SSL_Socket::remove_client(client_id); + } +#endif + + log_debug("leaving HTTPmsg__PT::remove_client() with returning Abstract_Socket::remove_client()"); + return Abstract_Socket::remove_client(client_id); +} + +int HTTPmsg__PT::send_message_on_fd(int client_id, const unsigned char * message_buffer, int length_of_message) +{ + log_debug("entering HTTPmsg__PT::send_message_on_fd(client_id: %d)", client_id); + +#ifdef AS_USE_SSL + if(get_user_data(client_id)) + { + // INFO: it is assumed that only SSL_Socket assigns user data to each peer + log_debug("leaving HTTPmsg__PT::send_message_on_fd() with returning SSL_Socket::send_message_on_fd()"); + return SSL_Socket::send_message_on_fd(client_id, message_buffer, length_of_message); + } +#endif + + log_debug("leaving HTTPmsg__PT::send_message_on_fd() with returning Abstract_Socket::send_message_on_fd()"); + return Abstract_Socket::send_message_on_fd(client_id, message_buffer, length_of_message); +} + + +// HTTP specific functions + +// replaced by f_HTTP_encodeCommon: +// void HTTPmsg__PT::HTTP_encode(const HTTPmsg__Types::HTTPMessage& msg, TTCN_Buffer& buf) +// { +// f_HTTP_encodeCommon( msg, buf); +// } + +//Encodes msg type of "HTTPMessage" into buffer +void f_HTTP_encodeCommon(const HTTPmsg__Types::HTTPMessage& msg, TTCN_Buffer& buf) +{ + buf.clear(); + if( msg.get_selection() == HTTPmsg__Types::HTTPMessage::ALT_erronous__msg ) + buf.put_cs(msg.erronous__msg().msg()); + else + { + const HTTPmsg__Types::HeaderLines* header = NULL; + const HTTPmsg__Types::HTTPRequest* request = NULL; + const HTTPmsg__Types::HTTPResponse* response = NULL; + const HTTPmsg__Types::HTTPRequest__binary__body* request_binary = NULL; + const HTTPmsg__Types::HTTPResponse__binary__body* response_binary = NULL; + const CHARSTRING* body = NULL; + const OCTETSTRING* body_binary = NULL; + + if(msg.get_selection() == HTTPmsg__Types::HTTPMessage::ALT_request) + { + request = &msg.request(); + header = &request->header(); + body = &request->body(); + buf.put_cs(request->method()); + buf.put_c(' '); + buf.put_cs(request->uri()); + buf.put_cs(" HTTP/"); + buf.put_cs(int2str(request->version__major())); + buf.put_c('.'); + buf.put_cs(int2str(request->version__minor())); + buf.put_cs("\r\n"); + } + else if(msg.get_selection() == HTTPmsg__Types::HTTPMessage::ALT_response) + { + response = &msg.response(); + header = &response->header(); + body = &response->body(); + buf.put_cs("HTTP/"); + buf.put_cs(int2str(response->version__major())); + buf.put_c('.'); + buf.put_cs(int2str(response->version__minor())); + buf.put_c(' '); + buf.put_cs(int2str(response->statuscode())); + buf.put_c(' '); + buf.put_cs(response->statustext()); + buf.put_cs("\r\n"); + } + else if(msg.get_selection() == HTTPmsg__Types::HTTPMessage::ALT_request__binary) + { + request_binary = &msg.request__binary(); + header = &request_binary->header(); + body_binary = &request_binary->body(); + buf.put_cs(request_binary->method()); + buf.put_c(' '); + buf.put_cs(request_binary->uri()); + buf.put_cs(" HTTP/"); + buf.put_cs(int2str(request_binary->version__major())); + buf.put_c('.'); + buf.put_cs(int2str(request_binary->version__minor())); + buf.put_cs("\r\n"); + } + else if(msg.get_selection() == HTTPmsg__Types::HTTPMessage::ALT_response__binary) + { + response_binary = &msg.response__binary(); + header = &response_binary->header(); + body_binary = &response_binary->body(); + buf.put_cs("HTTP/"); + buf.put_cs(int2str(response_binary->version__major())); + buf.put_c('.'); + buf.put_cs(int2str(response_binary->version__minor())); + buf.put_c(' '); + buf.put_cs(int2str(response_binary->statuscode())); + buf.put_c(' '); + buf.put_cs(response_binary->statustext()); + buf.put_cs("\r\n"); + } + + for( int i = 0; i < header->size_of(); i++ ) + { + buf.put_cs((*header)[i].header__name()); + buf.put_cs(": "); + buf.put_cs((*header)[i].header__value()); + buf.put_cs("\r\n"); + } + + buf.put_cs("\r\n"); + + if(body && body->lengthof() > 0) + { + buf.put_cs(*body); + } + else if(body_binary && body_binary->lengthof() > 0) + { + buf.put_os(*body_binary); + } + } +} + +bool HTTPmsg__PT::HTTP_decode(TTCN_Buffer* buffer, const int client_id, const bool connection_closed) +{ + + //HTTPmsg__Types::HTTPMessage * msg = new HTTPmsg__Types::HTTPMessage(); + + HTTPmsg__Types::HTTPMessage msg; + + if(f_HTTP_decodeCommon(buffer, msg, connection_closed, get_socket_debugging(), test_port_type, test_port_name )) + { + TTCN_Logger::log(TTCN_DEBUG,"HTTPmsg__PT::HTTP_decode, before calling incoming_message"); + f_setClientId(msg,client_id); + incoming_message(msg); + TTCN_Logger::log(TTCN_DEBUG,"HTTPmsg__PT::HTTP_decode, after calling incoming_message"); + return true; + } + return false; +} + +void f_setClientId( HTTPmsg__Types::HTTPMessage& msg, const int client_id) +{ + switch(msg.get_selection()) + { + case HTTPmsg__Types::HTTPMessage::ALT_request: + { + msg.request().client__id()=client_id; + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_request__binary: + { + msg.request__binary().client__id()=client_id; + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_response: + { + msg.response().client__id()=client_id; + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_response__binary: + { + msg.response__binary().client__id()=client_id; + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_erronous__msg: //is this case redundant code(?) + { + msg.erronous__msg().client__id()=OMIT_VALUE; + break; + } + default: + break; + }//switch + return; +}//f_setClientId + +// +// returns with true if the buffer is not empty and it contain valid message +// Postcondition: if buffer contains valid message, msg will contain the first decoded HTTP message, the decoded part will be removed from the buffer +bool f_HTTP_decodeCommon( TTCN_Buffer* buffer, HTTPmsg__Types::HTTPMessage& msg, const bool connection_closed, + const bool socket_debugging, const char *test_port_type, const char *test_port_name) +{ + + TTCN_Logger::log(TTCN_DEBUG, "starting f_HTTP_decodeCommon "); + if(buffer->get_read_len() <= 0) + return FALSE; + + buffer->rewind(); + + Decoding_Params decoding_params; + decoding_params.non_persistent_connection = FALSE; + decoding_params.chunked_body = FALSE; + decoding_params.content_length = -1; + decoding_params.error = FALSE; + decoding_params.isMessage = TRUE; + + if (TTCN_Logger::log_this_event(TTCN_DEBUG)) + { + if( test_port_name!= NULL) + TTCN_Logger::log(TTCN_DEBUG, "%s DECODER: <%s>\n", test_port_name, + (const char*)CHARSTRING(buffer->get_read_len(), (const char*)buffer->get_read_data())); + else + TTCN_Logger::log(TTCN_DEBUG, "DECODER: <%s>\n", + (const char*)CHARSTRING(buffer->get_read_len(), (const char*)buffer->get_read_data())); + } + + CHARSTRING first; + bool isResponse; + + // Decoding the first line + + switch(get_line(buffer, first, false)) + { + case TRUE: // The first line is available + { + //HTTPmsg__Types::HTTPMessage msg; + HTTPmsg__Types::HeaderLines header = NULL_VALUE; + OCTETSTRING body=OCTETSTRING(0, (const unsigned char*)""); + const char *cc_first = (const char *)first; + //fprintf(stderr, "first: %s\n", cc_first); + int version__major, version__minor, statusCode; + + char* method_name; + const char* pos = strchr(cc_first, ' '); + if(pos == NULL) + { + TTCN_Logger::log(TTCN_DEBUG, "could not find space in the first line of response: <%s>", cc_first); + decoding_params.isMessage = FALSE; + decoding_params.error = TRUE; + break; + } + method_name = (char*)Malloc(pos - cc_first + 1); + strncpy(method_name, cc_first, pos - cc_first); + method_name[pos - cc_first] = '\0'; + + char* stext = (char*)Malloc(strlen(cc_first)); + + TTCN_Logger::log(TTCN_DEBUG, "method_name: <%s>", method_name); + if(strncasecmp(method_name, "HTTP/", 5) == 0) + { + // The first line contains a response like HTTP/1.1 200 OK + isResponse = true; + + if(sscanf(cc_first, "HTTP/%d.%d %d %[^\r]", &version__major, &version__minor, + &statusCode, stext) != 4) + { + decoding_params.isMessage = FALSE; + decoding_params.error = TRUE; + Free(method_name); + Free(stext); + break; + } + if (version__minor == 0) + decoding_params.non_persistent_connection = TRUE; + } + else + { + isResponse = false; + // The first line contains a request + // like "POST / HTTP/1.0" + if(sscanf(pos + 1, "%s HTTP/%d.%d", + stext, &version__major, &version__minor ) != 3) + { + decoding_params.isMessage = FALSE; + decoding_params.error = TRUE; + Free(method_name); + Free(stext); + break; + } + } + + // Additional header lines + TTCN_Logger::log(TTCN_DEBUG, "Decoding the headers"); + HTTP_decode_header(buffer, header, decoding_params, socket_debugging, isResponse, test_port_type, test_port_name); + TTCN_Logger::log(TTCN_DEBUG, "Headers decoded. %s headers.", decoding_params.isMessage ? "Valid" : "Invalid"); + + if(isResponse && decoding_params.content_length==-1){ + if( (statusCode>99 && statusCode <200) || statusCode==204 || statusCode==304 ) decoding_params.content_length=0; + } + + if(decoding_params.isMessage) + HTTP_decode_body(buffer, body, decoding_params, connection_closed, socket_debugging, test_port_type, test_port_name); + + if(decoding_params.isMessage) + { + TTCN_Logger::log(TTCN_DEBUG, "Message successfully decoded"); + bool foundBinaryCharacter = false; + + int len = body.lengthof(); + const unsigned char* ptr = (const unsigned char*)body; + for(int i = 0; i < len && !foundBinaryCharacter; i++) + { + if(!isascii(ptr[i])) + foundBinaryCharacter = true; + } + if(foundBinaryCharacter) + TTCN_Logger::log(TTCN_DEBUG, "Binary data found"); + if(isResponse) + { + if(foundBinaryCharacter) + { + HTTPmsg__Types::HTTPResponse__binary__body& response_binary = msg.response__binary(); + response_binary.client__id() = OMIT_VALUE; + response_binary.version__major() = version__major; + response_binary.version__minor() = version__minor; + response_binary.statuscode() = statusCode; + if(strlen(stext) > 0) + response_binary.statustext() = CHARSTRING(stext); + else + response_binary.statustext() = ""; + response_binary.header() = header; + response_binary.body() = body; + } + else + { + HTTPmsg__Types::HTTPResponse& response = msg.response(); + response.client__id() = OMIT_VALUE; + response.version__major() = version__major; + response.version__minor() = version__minor; + response.statuscode() = statusCode; + if(strlen(stext) > 0) + response.statustext() = CHARSTRING(stext); + else + response.statustext() = ""; + response.header() = header; + response.body() = oct2char(body); + } + } + else + { + if(foundBinaryCharacter) + { + HTTPmsg__Types::HTTPRequest__binary__body& request_binary = msg.request__binary(); + request_binary.client__id() = OMIT_VALUE; + request_binary.method() = CHARSTRING(method_name); + request_binary.uri() = CHARSTRING(stext); + request_binary.version__major() = version__major; + request_binary.version__minor() = version__minor; + request_binary.header() = header; + request_binary.body() = body; + } + else + { + HTTPmsg__Types::HTTPRequest& request = msg.request(); + request.client__id() = OMIT_VALUE; + request.method() = CHARSTRING(method_name); + request.uri() = CHARSTRING(stext); + request.version__major() = version__major; + request.version__minor() = version__minor; + request.header() = header; + request.body() = oct2char(body); + } + } + //incoming_message(msg); <- outer function calls if necessary + } + Free(method_name); + Free(stext); + } + break; + case BUFFER_CRLF: + case BUFFER_FAIL: + decoding_params.error = TRUE; + case FALSE: + decoding_params.isMessage = FALSE; + } + + if(decoding_params.error) + { + + if(buffer->get_read_len() > 0) + msg.erronous__msg().msg() = CHARSTRING(buffer->get_read_len(), (const char*)buffer->get_read_data()); + else + msg.erronous__msg().msg() = "The previous message is erronous."; + msg.erronous__msg().client__id() = OMIT_VALUE; + //incoming_message(msg); + buffer->clear(); + decoding_params.isMessage = TRUE; + } + + if(decoding_params.isMessage) + { + buffer->cut(); + } + + return decoding_params.isMessage; +} + +void HTTP_decode_header(TTCN_Buffer* buffer, HTTPmsg__Types::HeaderLines& headers, Decoding_Params& decoding_params, + const bool socket_debugging, const bool resp, const char *test_port_type, const char *test_port_name) +{ + CHARSTRING cstr; + const char* separator; + char* header_name = NULL; + bool length_received = false; + + for(int i = 0; ; i++) + { + switch(get_line(buffer, cstr, true)) + { + case TRUE: + { + char h[cstr.lengthof() + 1]; + strcpy(h, (const char*)cstr); + separator = strchr(h, ':'); + if(separator) + { + header_name = (char*)Realloc(header_name, separator - h + 1); + strncpy(header_name, h, separator - h); + header_name[separator - h] = '\0'; + separator++; + while(*separator && isspace(separator[0])) + separator++; + char* end = h + strlen(h); + while(isspace((end - 1)[0])) + { + end--; + *end = '\0'; + } + headers[i] = HTTPmsg__Types::HeaderLine(header_name, separator); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "+Header line: <%s: %s>", header_name, separator); + + if(!strcasecmp(header_name, "Content-Length")) + { sscanf(separator, "%d", &decoding_params.content_length); length_received=true;} + else if(!strcasecmp(header_name, "Connection") && !strcasecmp(separator, "close")) + decoding_params.non_persistent_connection = TRUE; + else if(!strcasecmp(header_name, "Connection") && !strcasecmp(separator, "keep-alive")) + decoding_params.non_persistent_connection = FALSE; + else if(!strcasecmp(header_name, "Transfer-Encoding") && !strcasecmp(separator, "chunked")) + decoding_params.chunked_body = TRUE; + + } + continue; + } + case BUFFER_FAIL: + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "BUFFER_FAIL in HTTP_decode_header!"); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "whole bufer now: <%s>", (const char*)buffer->get_data()); + log_to_hexa(buffer); + decoding_params.error = TRUE; + case FALSE: + decoding_params.isMessage = FALSE; + case BUFFER_CRLF: + break; + } + break; + } + if(decoding_params.isMessage && !resp && !length_received && !decoding_params.chunked_body) decoding_params.content_length=0; + Free(header_name); +} + +void HTTP_decode_body(TTCN_Buffer* buffer, OCTETSTRING& body, Decoding_Params& decoding_params, const bool connection_closed, + const bool socket_debugging, const char *test_port_type, const char *test_port_name) +{ + if(buffer->get_read_len() > 0) + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "Decoding body, buffer length: %d", buffer->get_read_len()); + + if (decoding_params.chunked_body) + { + HTTP_decode_chunked_body(buffer, body, decoding_params, socket_debugging, test_port_type, test_port_name); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- After chunked body decoding:"); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- non_persistent_connection: %s", decoding_params.non_persistent_connection ? "yes" : "no"); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- chunked_body: %s", decoding_params.chunked_body ? "yes" : "no"); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- content_length: %d", decoding_params.content_length); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- error: %s", decoding_params.error ? "yes" : "no"); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- isMessage: %s", decoding_params.isMessage ? "yes" : "no"); + + } + else if(decoding_params.content_length >= 0) + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "lengthof body: %d, content_length given: %d", buffer->get_read_len(), decoding_params.content_length); + if(buffer->get_read_len() >= (unsigned)decoding_params.content_length) + { + body = OCTETSTRING(decoding_params.content_length, buffer->get_read_data()); + buffer->set_pos(buffer->get_pos() + decoding_params.content_length); + } + else + { + decoding_params.isMessage = FALSE; + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "The decoder's body length %d is less than the Content_length in the message header %d; The HTTP port is waiting for additional data.", buffer->get_read_len(), decoding_params.content_length); + buffer->set_pos(buffer->get_pos() + buffer->get_read_len()); + } + } + else if(connection_closed) + { + /* if(buffer->get_read_len() >= 0)*/ // Always true + { + body = OCTETSTRING(buffer->get_read_len(), buffer->get_read_data()); + buffer->set_pos(buffer->get_pos() + buffer->get_read_len()); + } + } else { + decoding_params.isMessage = FALSE; + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "The HTTP port is waiting for additional data."); + buffer->set_pos(buffer->get_pos() + buffer->get_read_len()); + } +} + +void HTTP_decode_chunked_body(TTCN_Buffer* buffer, OCTETSTRING& body, Decoding_Params& decoding_params, + const bool socket_debugging, const char *test_port_type, const char *test_port_name) +{ + OCTETSTRING chunk; + CHARSTRING line; + unsigned int chunk_size = 1; + + while(chunk_size > 0) + { + switch(get_line(buffer, line, false)) + { + case TRUE: + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "line: <%s>", (const char*)line); + if(sscanf((const char *)line, "%x", &chunk_size) != 1) + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "No chunksize found"); + body = body + OCTETSTRING(line.lengthof(), (const unsigned char*)(const char*)line); + chunk_size = 0; + decoding_params.error = TRUE; + } + else + { + if(chunk_size == 0) + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "chunk_size 0 -> closing chunk"); + if(get_line(buffer, line, false) == BUFFER_CRLF) + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "Trailing \\r\\n ok!"); + else + TTCN_Logger::log(TTCN_WARNING,"Trailing \\r\\n after the closing chunk is not present, instead it is <%s>!", (const char*)line); + } +/* else if(chunk_size < 0) // the chunk_size is unsigned, never true + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "chunk_size less than 0"); + decoding_params.error = TRUE; + chunk_size = 0; + }*/ + else // chunk_size > 0 + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "processing next chunk, size: %d", chunk_size); + if(buffer->get_read_len() < chunk_size) + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "chunk size is greater than the buffer length, more data is needed"); + decoding_params.isMessage = FALSE; + chunk_size = 0; + } + } + } + break; + case FALSE: + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "buffer does not contain a whole line, more data is needed"); + decoding_params.isMessage = FALSE; + chunk_size = 0; + break; + case BUFFER_CRLF: + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "beginning CRLF removed"); + continue; + case BUFFER_FAIL: + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "BUFFER_FAIL"); + decoding_params.error = FALSE; + chunk_size = 0; + break; + default: + decoding_params.isMessage = FALSE; + chunk_size = 0; + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "more data is needed"); + } + + body = body + OCTETSTRING(chunk_size, buffer->get_read_data()); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "pull %d bytes from %d", chunk_size, buffer->get_read_len()); + buffer->set_pos(buffer->get_pos() + chunk_size); + // hack + if(buffer->get_read_data()[0] == '\n') + { + TTCN_Logger::log(TTCN_WARNING, "hack: adjusted buffer position after the '\\n'"); + buffer->set_pos(buffer->get_pos() + 1); + } + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "remaining data: <%s>, len: %d", (const char *)CHARSTRING(buffer->get_read_len(), (const char*)buffer->get_read_data()), buffer->get_read_len()); + } +} + +int get_line(TTCN_Buffer* buffer, CHARSTRING& to, const bool concatenate_header_lines) +{ + unsigned int i = 0; + const unsigned char *cc_to = buffer->get_read_data(); + + if(!buffer->get_read_len()) + return FALSE; + + while(1) + { + for( ; i < buffer->get_read_len() && cc_to[i] != '\0' && cc_to[i] != '\r' && cc_to[i] != '\n'; i++); + + if(i >= buffer->get_read_len()) + { + to = CHARSTRING(""); + return FALSE; + } + else + { + if(cc_to[i] == '\n') {// + if(report_lf){ + switch(HTTPmsg__Types::crlf__mode){ + case HTTPmsg__Types::strict__crlf__mode::ERROR_: + return BUFFER_FAIL; + break; + case HTTPmsg__Types::strict__crlf__mode::WARNING__ONCE: + report_lf=false; + // no break + case HTTPmsg__Types::strict__crlf__mode::WARNING: + TTCN_warning("Missing '\\r'."); + break; + default: + break; + } + } + if(i > 0 && (i + 1) < buffer->get_read_len() && concatenate_header_lines && (cc_to[i+1] == ' ' || cc_to[i+1] == '\t')) + i += 1; + else + { + to = CHARSTRING(i, (const char*)cc_to); + buffer->set_pos(buffer->get_pos() + i + 1); + return i == 0 ? BUFFER_CRLF : TRUE; + } + + } else + { + if((i + 1) < buffer->get_read_len() && cc_to[i + 1] != '\n') + return BUFFER_FAIL; + else if(i > 0 && (i + 2) < buffer->get_read_len() && concatenate_header_lines && (cc_to[i+2] == ' ' || cc_to[i+2] == '\t')) + i += 2; + else + { + to = CHARSTRING(i, (const char*)cc_to); + buffer->set_pos(buffer->get_pos() + i + 2); + return i == 0 ? BUFFER_CRLF : TRUE; + } + } + } + } +} + +void log_to_hexa(TTCN_Buffer* buffer) +{ + int len = buffer->get_read_len(); + const unsigned char* ptr = buffer->get_read_data(); + for(int i = buffer->get_pos(); i < len; i++) + { + TTCN_Logger::log_event(" %02X", ptr[i]); + } +} + + +const char* HTTPmsg__PT::local_port_name() { return "";} +const char* HTTPmsg__PT::remote_address_name() { return "";} +const char* HTTPmsg__PT::local_address_name() { return "";} +const char* HTTPmsg__PT::remote_port_name() { return "";} +const char* HTTPmsg__PT::use_notification_ASPs_name() { return "use_notification_ASPs";} +const char* HTTPmsg__PT::halt_on_connection_reset_name(){ return "";} +const char* HTTPmsg__PT::server_mode_name() { return "";} +const char* HTTPmsg__PT::socket_debugging_name() { return "http_debugging";} +const char* HTTPmsg__PT::nagling_name() { return "";} +const char* HTTPmsg__PT::server_backlog_name() { return "server_backlog";} +const char* HTTPmsg__PT::ssl_use_ssl_name() { return "";} +const char* HTTPmsg__PT::ssl_use_session_resumption_name() { return "";} +const char* HTTPmsg__PT::ssl_private_key_file_name() { return "KEYFILE";} +const char* HTTPmsg__PT::ssl_trustedCAlist_file_name() { return "TRUSTEDCALIST_FILE";} +const char* HTTPmsg__PT::ssl_certificate_file_name() { return "CERTIFICATEFILE";} +const char* HTTPmsg__PT::ssl_password_name() { return "PASSWORD";} +const char* HTTPmsg__PT::ssl_verifycertificate_name() { return "VERIFYCERTIFICATE";} + + +} //eof namespace "HTTPmsg__PortType" + +namespace HTTPmsg__Types { + +using namespace HTTPmsg__PortType; + +//========================================================================= +//==== Working Functions independent from sending and receiving:=== +//========================================================================= + +//from AbstractSocket +void log_debug(const bool socket_debugging, const char *test_port_type, const char *test_port_name, const char *fmt, ...) +{ + if (socket_debugging) { + TTCN_Logger::begin_event(TTCN_DEBUG); + if ((test_port_type!=NULL && test_port_name!=NULL)&&(strlen(test_port_type)!=0 && strlen(test_port_name)!=0)) + TTCN_Logger::log_event("%s test port (%s): ", test_port_type, test_port_name); + va_list args; + va_start(args, fmt); + TTCN_Logger::log_event_va_list(fmt, args); + va_end(args); + TTCN_Logger::end_event(); + } +} + +void log_warning(const char *test_port_type, const char *test_port_name, const char *fmt, ...) +{ + TTCN_Logger::begin_event(TTCN_WARNING); + if (test_port_type!=NULL && test_port_name!=NULL) + TTCN_Logger::log_event("%s test port (%s): ", test_port_type, test_port_name); + va_list args; + va_start(args, fmt); + TTCN_Logger::log_event_va_list(fmt, args); + va_end(args); + TTCN_Logger::end_event(); +} + +//========================================================================= +//==== Encoder-decoder Functions independent from sending and receiving:=== +//========================================================================= + +/********************************************************* +* Function: enc__HTTPMessage +* +* Purpose: +* To encode msg type of HTTPMessage into OCTETSTRING separated from sending functionality +* It is for users using this test port as a protocol module +* +* References: +* RFC2616 +* +* Precondition: +* msg is filled in properly +* Postcondition: +* +* +* Parameters: +* msg - the HTTP Message to be encoded +* +* Return Value: +* OCTETSTRING - the encoded message +* Detailed Comments: +* - +* +*********************************************************/ +OCTETSTRING enc__HTTPMessage( const HTTPmsg__Types::HTTPMessage& msg ) { + TTCN_Buffer buf; + buf.clear(); + HTTPmsg__PortType::f_HTTP_encodeCommon( msg, buf); + return OCTETSTRING(buf.get_len(), buf.get_data()); +} +/********************************************************* +* Function: dec__HTTPMessage +* +* Purpose: +* To decode msg type of OCTETSTRING into HTTPMessage separated from receiving functionality +* It is for users using this test port as a protocol module +* +* References: +* RFC2616 +* +* Precondition: +* stream is filled in properly +* Postcondition: +* - +* +* Parameters: +* stream - the message to be decoded +* msg - reference to the record type of HTTPMessage which will contain the decoded value if the return value less than the length of the original stream +* Return Value: +* integer - the length of the remaining data which is not decoded yet. +* Detailed Comments: +* If the full stream is decoded, the return value is zero +* If nothing is decoded (decoding failed) the return value equals to the original length of the stream +* +*********************************************************/ + +INTEGER dec__HTTPMessage(OCTETSTRING const& stream, HTTPMessage& msg, const BOOLEAN& socket_debugging = dec__HTTPMessage_socket__debugging_defval ) +{ + TTCN_Logger::log(TTCN_DEBUG, "starting HTTPmsg__Types::dec__HTTPMessage"); + TTCN_Buffer *buf_p = new TTCN_Buffer() ; + buf_p->put_os(stream); + + int buf_len = buf_p->get_read_len(); + if( buf_len > 0) + { + if(f_HTTP_decodeCommon(buf_p, msg, true, socket_debugging, NULL, NULL)) + { + log_debug(socket_debugging,"","","dec__HTTPMessage, after decoding:\nbuf_len: %d\nget_len: %d\nget_read_len:%d", + buf_len, + buf_p->get_len(), + buf_p->get_read_len()); + buf_len = buf_p->get_read_len(); //remaining data length + } + else + buf_len = -1; + + + } else buf_len = -1; + delete buf_p; + return buf_len; +} + +}//namespace diff --git a/src/HTTPmsg_PT.hh b/src/HTTPmsg_PT.hh new file mode 100644 index 0000000..3d3f6eb --- /dev/null +++ b/src/HTTPmsg_PT.hh @@ -0,0 +1,161 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +// +// File: HTTPmsg_PT.hh +// Description: HTTP test port header file +// Rev: R8D +// Prodnr: CNL 113 469 + + +#ifndef HTTPmsg__PT_HH +#define HTTPmsg__PT_HH + +#include "HTTPmsg_PortType.hh" +#include "Abstract_Socket.hh" + +#define BUFFER_FAIL 2 +#define BUFFER_CRLF 3 +//============================== +namespace HTTPmsg__PortType { +//============================== +typedef struct { + bool non_persistent_connection; + bool chunked_body; + int content_length; + bool error; + bool isMessage; +} Decoding_Params; + +#ifdef AS_USE_SSL +class HTTPmsg__PT : public SSL_Socket, public HTTPmsg__PT_BASE { +#else + class HTTPmsg__PT : public Abstract_Socket, public HTTPmsg__PT_BASE { +#endif + +public: + + HTTPmsg__PT(const char *par_port_name = NULL); + ~HTTPmsg__PT(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + +protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + void outgoing_send(const HTTPmsg__Types::Close& send_par); + void outgoing_send(const HTTPmsg__Types::Connect& send_par); + void outgoing_send(const HTTPmsg__Types::Listen& send_par); + void outgoing_send(const HTTPmsg__Types::Half__close& send_par); + void outgoing_send(const HTTPmsg__Types::Shutdown& send_par); + void outgoing_send(const HTTPmsg__Types::HTTPMessage& send_par); + + const char* local_port_name(); + const char* remote_address_name(); + const char* local_address_name(); + const char* remote_port_name(); + const char* use_notification_ASPs_name(); + const char* halt_on_connection_reset_name(); + const char* server_mode_name(); + const char* socket_debugging_name(); + const char* nagling_name(); + const char* server_backlog_name(); + const char* ssl_use_ssl_name(); + const char* ssl_use_session_resumption_name(); + const char* ssl_private_key_file_name(); + const char* ssl_trustedCAlist_file_name(); + const char* ssl_certificate_file_name(); + const char* ssl_password_name(); + const char* ssl_verifycertificate_name(); + + void message_incoming(const unsigned char* msg, int length, int client_id = -1); + void Add_Fd_Read_Handler(int fd) { Handler_Add_Fd_Read(fd); } + void Add_Fd_Write_Handler(int fd) { Handler_Add_Fd_Write(fd); } + void Remove_Fd_Read_Handler(int fd) { Handler_Remove_Fd_Read(fd); } + void Remove_Fd_Write_Handler(int fd) { Handler_Remove_Fd_Write(fd); } + void Remove_Fd_All_Handlers(int fd) { Handler_Remove_Fd(fd); } + void Handler_Uninstall() { Uninstall_Handler(); } + void Timer_Set_Handler(double call_interval, boolean is_timeout = TRUE, + boolean call_anyway = TRUE, boolean is_periodic = TRUE) { + Handler_Set_Timer(call_interval, is_timeout, call_anyway, is_periodic); + } + +// overriden functions in order to distinguish between normal and SSL connections + virtual bool add_user_data(int client_id); + virtual bool remove_user_data(int client_id); + virtual int send_message_on_fd(int client_id, const unsigned char * message_buffer, int length_of_message); + virtual int receive_message_on_fd(int client_id); + virtual void client_connection_opened(int client_id); + virtual void listen_port_opened(int port_number); + virtual void peer_connected(int client_id, const char * host, const int port); + + + virtual void peer_disconnected(int client_id); + virtual void peer_half_closed(int client_id); + virtual void remove_client(int client_id); + +// HTTP specific functions + + // returns encoded message in buf + //void HTTP_encode(const HTTPmsg__Types::HTTPMessage &msg, TTCN_Buffer& buf); //replaced by f_HTTP_encodeCommon + bool HTTP_decode(TTCN_Buffer*, const int, const bool connection_closed = false); + //void HTTP_decode_header(TTCN_Buffer*, HTTPmsg__Types::HeaderLines&, Decoding_Params&); //moved outside the class + //void HTTP_decode_body(TTCN_Buffer*, OCTETSTRING&, Decoding_Params&, const bool); //moved outside the class + //void HTTP_decode_chunked_body(TTCN_Buffer*, OCTETSTRING&, Decoding_Params&); //moved outside the class + +private: + void Handle_Fd_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error); + void Handle_Timeout(double time_since_last_call); + + //int get_line(TTCN_Buffer*, CHARSTRING&, const bool concatenate_header_lines = true); + //void log_to_hexa(TTCN_Buffer*); + + bool adding_ssl_connection; + bool adding_client_connection; + bool server_use_ssl; + + bool use_notification_ASPs; +}; +//=================================== +//== Functions outside the class: === +//=================================== +void f_setClientId( HTTPmsg__Types::HTTPMessage& msg, const int client_id); +void f_HTTP_encodeCommon(const HTTPmsg__Types::HTTPMessage& msg, TTCN_Buffer& buf); +bool f_HTTP_decodeCommon(TTCN_Buffer* buffer,HTTPmsg__Types::HTTPMessage& msg, const bool connection_closed, + const bool socket_debugging, const char *test_port_type, const char *test_port_name); +int get_line(TTCN_Buffer* buffer, CHARSTRING& to, const bool concatenate_header_lines); +void log_to_hexa(TTCN_Buffer*); + +void HTTP_decode_header(TTCN_Buffer*, HTTPmsg__Types::HeaderLines&, Decoding_Params&,const bool socket_debugging, const bool resp,const char *test_port_type, const char *test_port_name); + +void HTTP_decode_body(TTCN_Buffer*, OCTETSTRING&, Decoding_Params&, const bool, + const bool socket_debugging, const char *test_port_type, const char *test_port_name); + +void HTTP_decode_chunked_body(TTCN_Buffer*, OCTETSTRING&, Decoding_Params&, + const bool socket_debugging, const char *test_port_type, const char *test_port_name); +}//namespace + +//============================== +namespace HTTPmsg__Types +//=============================== +{ +void log_debug(const bool socket_debugging, const char *test_port_type, const char *test_port_name, const char *fmt, ...); +void log_warning(const char *test_port_type, const char *test_port_name, const char *fmt, ...); +} + +#endif diff --git a/src/HTTPmsg_PortType.ttcn b/src/HTTPmsg_PortType.ttcn new file mode 100644 index 0000000..f56fdde --- /dev/null +++ b/src/HTTPmsg_PortType.ttcn @@ -0,0 +1,41 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +// +// File: HTTPmsg_Types.ttcn +// Description: HTTP port type definition +// Rev: R8D +// Prodnr: CNL 113 469 + + +module HTTPmsg_PortType +{ + import from HTTPmsg_Types all; + + type port HTTPmsg_PT message + { + // Connection handling ASPs + inout Close; + out Connect; + in Connect_result; + in Client_connected; + inout Half_close; + out Listen; + in Listen_result; + inout Shutdown; + + // Message to send and receive + inout HTTPMessage; + }; +} diff --git a/src/HTTPmsg_Types.ttcn b/src/HTTPmsg_Types.ttcn new file mode 100644 index 0000000..c7ef281 --- /dev/null +++ b/src/HTTPmsg_Types.ttcn @@ -0,0 +1,153 @@ +/****************************************************************************** +* Copyright (c) 2004, 2014 Ericsson AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +// +// File: HTTPmsg_Types.ttcn +// Description: HTTP Message and TCP connection handling ASP types +// Rev: R8D +// Prodnr: CNL 113 469 + + +module HTTPmsg_Types { + +modulepar { + boolean tsp_socket_debugging := false; + strict_crlf_mode crlf_mode:=WARNING_ONCE; +} + +external function enc_HTTPMessage( in HTTPMessage msg) return octetstring; +external function dec_HTTPMessage( in octetstring stream, inout HTTPMessage msg, in boolean socket_debugging := tsp_socket_debugging) return integer; + + +type enumerated strict_crlf_mode {ERROR, WARNING, WARNING_ONCE, ACCEPT}; +/* Basic types */ + +type record HeaderLine { + charstring header_name, + charstring header_value +}; + +type record of HeaderLine HeaderLines; + +type record HTTPResponse { + // client_id is used only in case of multiple connections, otherwise set it to omit + integer client_id optional, + integer version_major, + integer version_minor, + integer statuscode, + charstring statustext, + HeaderLines header, + charstring body +}; + +type record HTTPRequest { + // client_id is used only in case of multiple connections, otherwise set it to omit + integer client_id optional, + charstring method, + charstring uri, + integer version_major, + integer version_minor, + HeaderLines header, + charstring body +}; + +type record HTTPResponse_binary_body { + // client_id is used only in case of multiple connections, otherwise set it to omit + integer client_id optional, + integer version_major, + integer version_minor, + integer statuscode, + charstring statustext, + HeaderLines header, + octetstring body +}; + +type record HTTPRequest_binary_body { + // client_id is used only in case of multiple connections, otherwise set it to omit + integer client_id optional, + charstring method, + charstring uri, + integer version_major, + integer version_minor, + HeaderLines header, + octetstring body +}; + +type record HTTP_erronous_msg { + // client_id is used only in case of multiple connections, otherwise set it to omit + integer client_id optional, + charstring msg +} + +type union HTTPMessage { + HTTPResponse response, + HTTPRequest request, + HTTPResponse_binary_body response_binary, + HTTPRequest_binary_body request_binary, + HTTP_erronous_msg erronous_msg +}; + +/* + * Connection handling ASPs + */ + +// Closes all connections, or the specified one only. +// client_id = omit means close all connections. +// Close comes when a connection gets disconnected +type record Close { + // when sending, client_id shall be used in case of multiple connections + // when receiving, client_id determines the client which has disconnected + integer client_id optional +}; + +type record Connect { + charstring hostname, + integer portnumber, + boolean use_ssl +}; + +// Received by the client after Connect is sent. +// The client_id will be filled with -1 if unsuccessful. +// Returned client_id shall be used to distinguish between the open connections. +type record Connect_result { + integer client_id +} + +// Received when the server has accepted an incoming connection. +type record Client_connected { + charstring hostname, + integer portnumber (1..65535), + integer client_id +}; + +// Sent when the local end of the connection has to be shut down for writing. +// Received when the remote end of the connection has been shut down for writing. +type record Half_close { + integer client_id optional +}; + +type record Listen { + charstring local_hostname optional, + integer portnumber, + boolean use_ssl +}; + +// Received after Listen. Sends back the listening port number, -1 on fail +type record Listen_result { + integer portnumber (-1..65535) +}; + +type record Shutdown {}; + +} -- GitLab