DL 9B %/J:s#4K H<O% CtcActionbUC  T-TInvalid parameter VersionTv1.05 10/02/2009 %#CVersion Library  Zip#TCZip  UnzipWTCUnzip  Send Email!TCSend Dynazip managerTCa T Is DynazipTC  DLL ManagerO&TC TK BdynazipUTCACTIONTVPARM1TVPARM2TVPARM3TVP4TVP5TVP6TVP7LBRETURNMSGBOXWLZIPLMAILDZEASY ISDYNAZIP DLLMANAGERDYNAZIP UUUUUUU%CExist }%CDynaWrapa y@C)Dynazip compression tool is not installedWarningB-BaUDZEASYMSGBOXW CloseDown!RMDIR,PICKLIST3 UTLBAKPATH:REGFNACALLFNH CLEANPATHO IsDynaZipV>rQQ1AAaqeAR4A511111>qqAAq1 =! C" D#" E$2 0 F%C A G&W  H'/ V%i U T5'f 4       J(J(!J(   J(  Ja(N%Ct CtcActionbC CtcParmsbC C C :$TInsufficient parametersB-TCC]C]%CExist (TDZEasy DLL is not installedB-T  % HM C@zip T C@unzip T2M TInvalid action B-%CT No parameters T-B-TCTC@%zip Ta Ta+TC )TC +T C +TC  T- H7 C@zipTZIP  C@unzipTUNZIP 27 TInvalid action B-%CvT No parameters T-B-TCTC  %?TCC=6%~C@~~pkzip~pkunzip~zip~unzip~;(T~C@~ ~pkzip~zip~TCCTC  %TCC=TCC\TCC@ %TC  %TCC=TCC\TCC@T C-x %C {TC-x T CC , T  %T C%C C  %C "TCCC]C]C@ %T C%C C 4TSource folder does not exist:C   T-TCzip%C0 /TZIP file does not exist:C  T- HV   % :%CZip Quick Zip*.*  l!T ZIP failedC   T-  C <%CUnzip Quick Zip*.*   %C  ? #T UNZIP failedC   T-2V T- BUTCACTIONTCPARMSTCERRORLNATLCINPUTLCACTION LCOUTFILELCSOURCE LCOPTIONS LCERRORTEXT LCEXCLUDE LCCOMMENT LCFOLDER1 LCFOLDER2 LCDEFAULT LBGOAHEADLBZIPLBXMLZIPDZEASYFILLINGrQ1AqAsqBaqAqABAaQqqAqAAaqAAAAAAAAAA"ADa!ADAAaAAAC4AA1%J,y35O~4 SendEmail  %C Available gB-&C Create cursor vSendMailF vSendMail^    T-T CReplyToaT C ReplyNameaT CSubjectaTC SignatureaTCMessageaTCAddressa TC CarbonCopyaTC BlindCopya!TC AttachmentsaT CSMTPaT C T C T  +T C C C C T T 6T  CC C , 6T r vSendMail  T)TCSend vSendMail % A TC vSendMail C vEmailAuto BU!TCACTIONTCXMLTCOUTXMLTCERROR SENDEMAILLCEMAILSLCBLINDLCBLINDSLNBLINDLCSMTPLCFOLDER LCREPLYTO LCREPLYNAME LCSUBJECT LCSIGNATURE LCMESSAGE LCADDRESS LCCARBONCOPY LCBLINDCOPY LCATTACHMENTS LBSENDCOPYWRAPMREPLYTO MREPLYNAMEMSUBJECTMMESSAGEMTOMCCMBCCMATTACH LCERRORTEXT LBMAILSENTKILL6qqAa1qq1qc1Bbq1#%NWPQx%7h)4 T  PeB T Ct H` Zip.BC   Unzip.BC   GetBC  ! CC@CCDynaWrap@GBC Help BQ'Zip', , <source>, <destination> [, <options> [, <include> [, <exclude>]]]C C E�'Unzip', <title>, <source>, <destination> [, <options> [, <include>]]� ���Install9�BC� ������� �� �Uninstalle�BC� ����� ���Exist�BC� ����� �� �File list �BC�� �� �Available �BC�� �� �Zip start �BC�� �� �Set zip value-�BC�������� �� �Get zip value]�BC������ ���Set zip string�BC�������� ���Get zip string�BC���������� ���Zip easy�BC���� ���Zip end�BC���� �� �Unzip start> �BC� � ���Set unzip valuet�BC������� � ���Get unzip value�BC�����!� ���Set unzip string�BC�������!� ���Get unzip string�BC���������� �� �Unzip easyA�BC�� �� �� �Unzip endi�BC��!�(� CC��@CC�Dynazip Manager@�BC����"���U#� �TCFUNCTION�TVP1�TVP2�TVP3�TVP4�TVP5�TVP6�TVP7�TVP8�_REFOX_�LNPARMS�DZIP�DUNZIP�DGET�DYNAWRAP�DINSTALL �DUNINSTALL�DEXIST �DFILELIST �DAVAILABLE �DZIPSTART �SETZIPVALUE �GETZIPVALUE �SETZIPSTRING �GETZIPSTRING�DZIPEASY�DZIPEND �DUNZSTART �SETUNZVALUE �GETUNZVALUE �SETUNZSTRING �GETUNZSTRING�DUNZEASY�DUNZEND �DZMANAGER>'�4�����������5 � � � � �� �5���5��� �5���5��5��� �5�� �T����%�� �.�T�!�Insufficient parameters in dZip()�B-� �T�� �T�- �T�- �T ��.�T�C� C���"��"�C�6.�T �C� C���"��"�C�6�T �C�� �����6�T �C�� �����6�T�C�� �����6�T��Title:C � �T�C^�T�CC$"�T�C���Time:��;�"�T�C���Date:��;�2�%C �m.p_UserIDb�C�C ��None $�T�C���User: ��;���%�� � I�C�Source: �C �Dest.:  �C  �Options:  �C  �Include:  �C  �Exclude: �C C��;C  �Zip diagnose@ ���%C���!� V�C�Cannot create �C �DynaZIP(TM) is not installed�ERROR: �@ ��B-��T�C"�^�%CC���C�-u ���6$�#��CC�� �%�#� �CC���%�#� ;�%�-q � T�T����C��" �%��C��$��%C�c:\tempa&��T��c:\temp\�C���%��C��$���%C ���C��$��C�� �%���%C�/�`�C��$��C���%���%�-rp ��T���CC��$�'���CC��$�'���C�Zip(��%CC��$�'��C���%�� �%a&�T��@��%�-t ��T�C �� �-t� )��%C�Date�*��%CC��$�'��CC����%�#�����%�-& ��CC�� ���$�'���%���CC��!��$�#���%CC��+�#�7 �T�a���CC��,�#� �T��!�%��C� � � .�C�Source: �C �Dest.:  �C  �Options:  �C  �Include:  �C  �Exclude: �C �Error: �C C��;C  �Zip diagnose@ �� �B��U-��TNPARMS�TCTITLE�TCSOURCE�TCDEST �TCOPTIONS�TCINC�TCEXC�TCERROR �TBDIAGNOSE �LCZIPTITLE �LCZIPFILE �LCZIPDEST�LCZIPOPT�LCZIPINC�LCZIPEXC �LCZIPCOMMENT �LCZIPTEMP�LNID�LNRETURN �LNSUBOPTION�LBRETURN�LBERROR �LCZIPERROR �LCZIPTIME �LCZIPDATE �LCZIPAUTO�LNABC�LCZIPABC �LCZIPITEMS�ADDTEXT�P_USERID �P_DEVELOP�MSGBOXW�DEXIST �DZIPSTART�DZE �SETZIPVALUE �SETZIPSTRING�ISDIRMEN�DUE�DZEASYF�FILLING�VALIDOPT�DZIPEASY�DZIPEND'� �4����BCC ��]gC��� �U��TDDATE�TCTIME�HMSTOS1 �4����5� �H�#!� ���Date ��/� ��%CC�#X��B-���T�CC�#-�T�C�\C�\C�\�Ba�� ���Date�%C���B-�-�T�C�\C�\C�\�Ba��2#�B-��B-�U��TCOPTION�TCSTRING�LCSTRING'�4�����������5 � � � � ���5� �5�� �5�� �T����%�� �$�T��Invalid parameter count�B-��%C���� V�C�Cannot unpack �C �DynaZIP(TM) is not installed�ERROR: �@��B-� �T�- �T�- �T �� �T �� �T ���T �C�� �����6)�T �C�� �C� ��*��6�%�� � @�C�Title: �C �Source:  �C �Dest.:  �C  �Options:  �C  �Include:  � �Zip diagnose@��#�T�C�Comment� �� ���T�C�a�%CC������CC�� ��� �CC�� ��� �CC�� ��� �%CC�����C�� ����C����%�-o �J�CC�����j�CC�������%�-d ��CC�� �����C�Unzip��%CC���� �T�a���CC���� �T�� �B��U��TNPARMS�TCTITLE�TCSOURCE�TCDEST �TCOPTIONS�TCINC �TCCOMMENT�TCERROR �TBDIAGNOSE �LCZIPTITLE �LCZIPFNAME �LCZIPDEST�LCZIPOPT�LCZIPINC �LCZIPCODE �LCZIPERROR�LNID�LNRETURN�LBRETURN�LBERROR�DEXIST�MSGBOXW �P_DEVELOP�DGET �DUNZSTART�DUE �SETUNZVALUE �SETUNZSTRING�DZEASYF�DUNZEASY�DUNZENDD�4�������5����5��5 ��5 � �5 � � �T����%�� m� �B����%C��� � �W�C�Cannot process �C �DynaZIP(TM) is not installed�ERROR: �@� �B��� �T �- �T �- �T�� �T�� �T��� �H4n� ��CommentY �T ����2n �T �����T �C��%CC� �����%CC� ����C� �����C� �� �H� ��Comment,�%CC� ���� �CC� ���  �T�C� � ��%�� �T���T�C�XG�%CC� ���� �CC� ��� �CC� ������ �%C�RC� �T�C�C�>=� �T ��������CC� ��� �T�� �B ��U��TNPARMS�TCMODE�TCTITLE�TCSOURCE�TCERROR �LCZIPTITLE �LCZIPFNAME�LCVALUE �LCZIPERROR�LNID�LVRETURN�LBRETURN�LBERROR�DEXIST�MSGBOXW �DUNZSTART�DUE �SETUNZSTRING �SETUNZVALUE�DUNZEASY�LNSIZE �GETUNZVALUE �GETUNZSTRING�DUNZEND��4���5��5� �T�� �T���,�%CC������ �CC����� ��T�C��� ��%����T���T�C�XG�%CC������ �CC����� �CC�������� ���� �B��U ��TNID�LNSIZE�LCVALUE�LVVALUE�DUE �SETUNZVALUE�DUNZEASY �GETUNZVALUE �GETUNZSTRING  �4��� �5�� �5�� �5�� �5� � �5 � ��5 � �5 ���J��( � � �T��� �T ����T�C��%C�� �B����%C���� � �B��� �T �- �T�-�%C��� �T���� �T���� �T����T�C��%CC�������%CC������%CC���� �T��T�C�X!�%CC��)������T �C������CC���� �T�� �T����T �CC]�.ini�% ��p�C ��Michael Napier �C ��[�C?7��T�C]C]�*.ini!�T�C]�\dzeasymen.zip�%C�0 ����T�C�4�%CC�������CC������ �%CC������%CC���� �T��T�C�X!�%CC��%������T �C������%C�0 ����CC����!�T�C����C C  �!�T �C� �� �C C  � �B ��U!��TCTITLE�TCERROR �LCZIPTITLE�LCVALUE �LCZIPERROR �LCDYNAEXE �LCZIPITEMS �LCZIPFILE�LNID�LNH�LCVZIP�LCVUNZIP�LVRETURN�LBRETURN�LBERROR�DYNAEXE�DEXIST �DUNZSTART�DUE �SETUNZSTRING �SETUNZVALUE�DUNZEASY�LNSIZE �GETUNZSTRING�DUNZEND �DZIPSTART�DZE �SETZIPSTRING �SETZIPVALUE�DZIPEASY �GETZIPSTRING�DZIPEND�ADDTEXT�4�� �5�� �T�- �T��� �H7�� ���g��T��success �T�a� ����T� �can't reenter� ���'�T��unexpected end of zip file� ���%�T��zip file structure error� ��+�T� �out of memory� ��]!�T��internal logic error� ��%�T��entry too large to split� ��#�T��invalid comment format� �� 2�T�%�zip test (-T) failed or out of memory� �� 6�T��user cancelled� �� k$�T��error using a temp file� �� �T��read or seek error� �� �T� �nothing to do� �� &�T��missing or empty zip file� ��2$�T��error writing to a file� ��f#�T��couldn't open to write� ��#�T��bad control parameters� ��)�T��could not complete operation� ��4�T�'�could not open a specified file to read� ��h>�T�1�media error... disk not ready, HW r/w error, etc.� ��0�T�#�bad Multi-Volume control parameters� ��6�T�)�Improper usage of a Multi-Volume Zip File�2$�T��unknown error: CC��Z��%� I�T�C����C ���%��� a��C���ERROR: �@�� �T�a �B��U��TNVALUE�LBOK�LCTEXT �LCZIPERROR�ADDTEXT�LBERROR�MSGBOXW �LCZIPTITLEo�4�� �5�� �T�- �T��� �H7�� ���g��T��success �T�a� ���'�T��unexpected end of zip file� ���(�T��structure error in zip file� ���T� �out of memory� ��.�T� �out of memory� �� `!�T��file not found error� �� �T��nothing to do � �� F�T�9�same volume for src and dest not allowed for multi-volume� �� �T��index out of bounds� ��L'�T��error creating output file� ��&�T��error opening output file� ��'�T� �crc error� ��(,�T��application cancelled operation� ��)$�T��file skipped, encrypted� ��*T'�T��unknown compression method� ��,(�T��bad or missing decrypt code� ��-#�T��re-entry not permitted� ��.&�T��can't unzip a volume item� ��/+"�T��bad command structure� ��0f*�T��user cancelled this operation� ��1(�T��user skipped this operation� ��2�T� �disk full�2�T� �unknown error��%� �T�C����C ���%��� -�T�C���ERROR: �@�� �T�a �B��U��TNVALUE�LBOK�LCTEXT �LCZIPERROR�ADDTEXT�LBERROR�MSGBOXW �LCZIPTITLEV�4���5� �5 ��5� �5��D�C �1:wdynawrap)�Please wait|Installing Dynazip components�?�R,:4�Installing Dynazip components: locate dynazip(v).app �T �- �T�-�%�VISUALCChf��T� �dynazipv.app��T� �dynazip.app� �%��n �T�-�T�C��.app��$�T�C��dynazipv�dynazip��T�C���%C�0��� a@�R,:5�Installing Dynazip components: running dynazip(v).app�%C�p_Launchb�U�T �CC]C]�C�DO &lcCommand WITH 'Install', Addbs( m.p_Launch + 'dynazipq') �K� �%�&A�R,:6�Installing Dynazip components: removing dynazip(v).app�T�C�ERROR �T�-�1 �lbError = .T.� �dynazip.app� �dynazipv.app�ON ERROR &lcOnError ��R �C �-1:wdynawrap� �B ��U � �TBINTEGRAL �LCCOMMAND�PVRETURN �LBUNPACKED �LCONERROR�LBERROR�PWAIT �UNPACKEXE�P_LAUNCH�DYNAZIP�APP�DYNAZIPV �5����5����5��� �5� � �T��� �T�- �T�- �T�- �T�C� �dyna???.exe�%����%C�m.p_Homeb�C�-�T�C� ��master\dyna???.exe �T�a���%C�m.p_Homeb�C~-�T�C � ��master\dyna???.exe�%��z �C ��T�C�� � �T�a����%�� �C�4�T��C�� ��master\���6C����%�����  ����T�� ��master\���%C��0�RUN &lcDynaExe -o �T �CB�+C �dynazip.app0 �C �dynazipv.app0  �C � �C333333? ��C?7� �T�a���CC]C] � �B��U� �LCDYNAEXE�LCMFILE�LNFILES�LNI�LNMFILES �LBUNPACKOK�LBMASTER�LBMFILE �ADYNAFILES �ADYNAMFILE�P_HOME �LNTIMENOW�PAUSE �DUNINSTALLn��5�� �T��C� �dyna???.exe�%���V� �C��BC�����g� �B����U��LNFILES �LADYNAFILE�4���� �5���T�C�� �����6�T�C�� �����6 �C��%C��$�T�CC�System directory���%�VISUALCChfI�C �1:wdInstall*�Please wait|Copying Dynazip components to ���C?7�%C�) �T�����%C �dunzip32.dll������C �dzip32.dll����� �C �dz_ez32.dll����� �C �dzprog32.exe����� l �T �C{�+C� �dunzip32.dll0 �C� �dzip32.dll0 �C� �dz_ez32.dll0 �C� �dzprog32.exe0  �C � H�C333333? ���C �-1:wdInstall��Ba��C �-1:wdInstall��B-���%C� �T����y�%C �dunzip.dll������C�dzip.dll����� �C �dz_easy.dll����� �C �dzprog.exe�����  �T �Cv�+C� �dunzip.dll0 �C��dzip.dll0 �C� �dz_easy.dll0 �C� �dzprog.exe0  �C � �C333333? ���Ba��B-���U ��TNPARMS�TCSOURCE�TCDEST�LCSOURCE�LCDEST �DLOADFTOOLS�FNSYSTEM�PWAIT�DZCOPY �LNTIMENOW�PAUSE �4����5��T�C�� �����6 �C��%C�n�$�T�CC�System directory���%�VISUALCChfu�� �dunzip32.dll�� �dzip32.dll�� �dz_ez32.dll�� �dzprog32.exe�T�CC]C]�� �dunzip32.dll�� �dzip32.dll�� �dz_ez32.dll�� �dzprog32.exe��� �dunzip.dll���dzip.dll�� �dzeasy.dll�� �dzprog.exe��U��TNPARMS �TCINSTALLDIR �LCINSTALLDIR �DLOADFTOOLS�FNSYSTEM��BC������U��DEXISTY �4����5��T�C�� �����6 �C��%C�n�$�T�CC�System directory���%�VISUALCChf�c�BC� �dz_ez32.dll0�C� �dzip32.dll0 �C� �dunzip32.dll0 �C� �dzprog32.exe0 �R]�BC� �dz_easy.dll0�C��dzip.dll0 �C� �dunzip.dll0 �C� �dzprog.exe0 ��U��TNPARMS�TCDIR�LCDIR �DLOADFTOOLS�FNSYSTEM��%�VISUALCChfT�<�B3�dz_ez32.dll, dzip32.dll, dunzip32.dll, dzprog32.exe��6�B-�dz_easy.dll, dzip.dll, dunzip.dll, dzprog.exe��U��g �4��� �5��%�T��Dynazip Compression Tool �T��� �5���T�C�ERROR �T�-�1 �lbError = .T.� �dynazip.app� �dynazipv.app�ON ERROR &lcOnError �H�Y*� ���Dynazip: is it installed?q�%C��� �9(�C�Dynazip is installed��@ ��m,�C�Dynazip is NOT installed��@ ��!� ���Dynazip: installx�%C��� �0�C�Dynazip is already installed��@ ��t6�%C�Do you wish to install Dynazip?��-a �p7�C �1:wdzeasy�Please wait|Installing Dynazip ��C�� ��C �-1:wdzeasy ���� ���Dynazip: setup�%C��� �0�C�Dynazip is already installed��@ ���C�� �� � ���Dynazip: removeC�%C��� � 5�%C�Do you wish to remove Dynazip?��-a ��C�-��%C��� �9�C%�De-installation of Dynazip has FAILED��@ ��B�C.�De-installation of Dynazip has been successful��@ ����?,�C�Dynazip is NOT installed��@ ��!� ���Dynazip: version'�%C��� � �T����T�C����!�C��� �: Version@ ��%C� �C�Error: ���@ ���#,�C�Dynazip is NOT installed��@ ���2Y*�C�WARNING�Unknown option �����Ba�U� �TCOPTIONS �TBINTEGRAL�LCMHEAD�LCERROR �LCONERROR�LBERROR�DYNAZIP�APP�DYNAZIPV�DEXIST�MSGBOXW�APPASK�PWAIT �DZDBLEWRAP �DUNINSTALL �LCVERSION �GETVERSION�APPERROR�4���%C����<�%C����h�;�C'�Dynazip has been successfully installed��@��8$�%C� �dyna???.exe��4�C�WARNING�Dynazip has failed to install��4d�C�WARNING�Dynazip has failed to installC &�File dyna100.exe or similar is missing����+�%C� �dyna???.exe���� 4�C�WARNING�Dynazip has failed to install��d�C�WARNING�Dynazip has failed to installC &�File dyna100.exe or similar is missing����U� �TBINTEGRAL�DYNAWRAP�DEXIST�MSGBOXW�LCMHEAD �ADYNAFILES�APPERROR��U����4�����5� �5���T�C��T�C� �T�a�%CC���0b����%C���0��C��a�����(����� �T�-�� �B��U��TCFILE�TCFROM�TCTO�LBRETURN�LCFROM�LCTO�ISDIRMEN)��| �dzipstart�dz_ez32 �BC���U� �DZIPSTART�DZ_EZ32K��4����#�| �setzipvalue�dz_ez32�BC���������U��TNID�IVALUE�THEVALUE �SETZIPVALUE�DZ_EZ32A� �4���!�| �getzipvalue�dz_ez32�BC�������U��TNID�IVALUE �GETZIPVALUE�DZ_EZ32M��4����%�| �setzipstring�dz_ez32�BC��������U��TNID�IVALUE �LPTHESTRING �SETZIPSTRING�DZ_EZ32W��4�����'�| �getzipstring�dz_ez32�BC����������U��TNID�IVALUE �LPTHESTRING �STRINGLEN �GETZIPSTRING�DZ_EZ324��4���|�dzipeasy�dz_ez32�BC�����U��TNID�DZIPEASY�DZ_EZ323��4���|�dzipend�dz_ez32�BC�����U��TNID�DZIPEND�DZ_EZ32)��| �dunzstart�dz_ez32 �BC���U� �DUNZSTART�DZ_EZ32K��4����#�| �setunzvalue�dz_ez32�BC���������U��TNID�IVALUE�THEVALUE �SETUNZVALUE�DZ_EZ32A� �4���!�| �getunzvalue�dz_ez32�BC�������U��TNID�IVALUE �GETUNZVALUE�DZ_EZ32M��4����%�| �setunzstring�dz_ez32�BC��������U��TNID�IVALUE �LPTHESTRING �SETUNZSTRING�DZ_EZ32W��4�����'�| �getunzstring�dz_ez32�BC����������U��TNID�IVALUE �LPTHESTRING �STRINGLEN �GETUNZSTRING�DZ_EZ324��4���|�dunzeasy�dz_ez32�BC�����U��TNID�DUNZEASY�DZ_EZ323��4���|�dunzend�dz_ez32�BC�����U��TNID�DUNZEND�DZ_EZ32�dZip'���� �F1timedate&�����ValidOpti�����dUnzip�����dGet���� �GetComment*���� �GetVersion�����dze"�����due(�����dynawrap.���� �UnpackExeo2�����DynaExe5�����dInstallx6���� �dUnInstall:���� �dAvailable<�����dExist=���� �dFileList>���� �dzManagerC?���� �dzDbleWrap\E���� �dLoadFtoolsG�����dzCopyG���� �dzipstartH���� �setzipvalueI���� �getzipvalueI���� �setzipstringI���� �getzipstringzJ�����dzipeasyK�����dzipendcK���� �dunzstartK���� �setunzvalueK���� �getunzvaluepL���� �setunzstringL���� �getunzstring\M�����dunzeasyM�����dunzendEN���� ar���AaA�Q a!a!���a!a���a!a��!A�`1�q���q����q�A�������!!!AA�b A�Rbq�A��CB�RCQQAA���AQA���AQA�B�A�QA��A�1A�A�A�1A�A�c�A�A�!� A��2��5��q��q��q�A�Q�q��q�A��q�A�q��1�qq����Aq�A�Qbq�A������a5A�1�QA�B2�A�1A�!b�A�A�!��9�q�q�q�q����A�Qr�A����������A��QA�B�Q�sA��A�A�A�J�A�!��3�q�r�q���Q�sA�A�A��5�������q�������A�Q�A�������A���a���A�A�A�A�!���A�1A���A��Ba���A�A�A�A���A�!�5�q�����A�qQQ1!AaA11Aa�AA��A�A�A���5�q�����A�qaqaaAq1a!a�A��A�A�A���5�q�q��q��A���A���A��A�aA�1R�E��Q�Q1AqA�Q��3����������A���Q�A�A�A��B�A��q�!Q1A��C�A��3�q����A�5�����AA�1��A��QA�q��q�A����A��dQA�q��q�A�A�5��q���AA��qA�5�5��q���AA�4�A�5��aA�5���Q��R�Q1Aq��A�A�A�aq�qA�A�A��A�AQ�A�!A�A��A�A�aA��A��A�q�3�q�!A�AA�BA�A��A�BA�A�6�?��q���a�1���A�A��1��@1��3a01��!01��Ta1�1tP1�q�� 1�q��1��`1��4a 1��!01��Ta 1�1tP1�q�� 1�q��1�����������������;���5��xG��<�����G��H�������H��5N�������HN��W�������W��_��5���� `��b��~��+��c��k����t��k��zt������t��}��.����1}��i��r����������H��������Q��'��I����y��`��Ö��!����ږ��ŗ��>����ؗ����D������$��a����:����l����̧��������Ы��H������[��u���� ������1������3��{����K����������m������������$��������)��������.����!��#��2��9����_��7����K��x��<��d�� ����A��"��W����F��l������K������������%�������������A�����",3���#�4����������T� ���PeB�5 � �5 � � �5 � �G�%C�tcSecondb�L�C�tcFirstb�L �C�tcStringb�L ��%C�� �B����,�C�FATAL�Insufficient parameters����T �CC����6 �T ��� �%�n �%�M�T �CC�fC��f ��j�T �C��� ��� �%��T �CC�fC��f ���T �C��� ����% ���T � �C�>�T �C�� �\� �B��� �%�/�T �CC�fC �f�I�T �C� ���%�� �� t �5���T�CC C�� �=�% ���T�CC C � �\C � �T���%�T� �� ���T�C����\�+C�=C ;�T�C�\��+C�RC p�T�C�C�>=���% ���BC � �=� �%� �B ��� �B ��U��TCSTRING�TCFIRST�TCSECOND�TBLAST�TNO �TBCASELESS�TBLINE�TCLINE�_REFOX_�LCSTRING�LNFIRST�LNSECOND�LNPARMX�LNO�CHECKAPP�APPERROR�LNLINE1�LNLINE201aq���s���A�A�����QA����QA�A�1!��A��a�!A����A�Q!A�A�A�!���A�A��1��������������������%��� ������?�������#6���������� �H ��� �� �AvailableH��BC��� �� �Create cursort��BC���� ���Send��BC������� ���Preview��BC�����U��TCACTION�TVPARM1�TVPARM2�TVPARM3�SNDEXIST �SNDCURSOR �SNDMAILWWW �SNDPREVIEW��4�� ��� �T��� �T���.�%C�Exist� �wwIPStuff.dll��a��Ba��(�T���wwIPStuff.dll not installed�B-��U��TCERROR �LCDLLFOLDER�LCERROR�DLLMNGRW{�����C����\�h����M��M��M��M��M��M��M ��M ��L ��M�Ba�U ��TCCURSOR�KILL�MSUBJECT�MTO�MCC�MBCC�MMESSAGE�MREPLYTO �MREPLYNAME�MATTACH�BSUCCESS�MERROR?������������� �T��� �T����%C���T��mail.cix.co.uk�T��25��)�T�C�Filling �IP address�� �#�T�C�Filling�Port�� ���%C� � ��B-��R,:�Sending e-mail#�G+(�\wwclient\classes\wwUtils)�G~(�\wwclient\classes\wwIPStuff.vcx � � ��T �C �wwIPStuffN�R,:�Sending e-mail�T � ���T ��C�g �F������ �T�-�%��mail.cix.co.uk_�%C�pop3.txt0[�%C �Available�W*�T�C�ConnectC�pop3.txt������R,:�Sending e-mail �T���~�T���T ��� �T ��CC�����6�T ����T ����T ����T ����T ����T � �C!��, �,�T �C �"��R,:�Sending e-mail �F�� �% � �>#�a��T� �$� �>%���T���C C �� �T�� �%��C �Disconnect����<���R �<�wwUtils�BCC��a�-6�U'��TCCURSOR�TCSMTP�TCERROR�LCIP�LCPORT�LCFOLDER�LCERROR�LCE1�LNRECORD�MARKUP�SNDEXIST�O�LLRESULT �CMAILSERVER �NSMTPPORT�LBPOP3�LOPOP3�GETEMAIL �CSENDEREMAIL�MREPLYTO �CSENDERNAME �MREPLYNAME �CRECIPIENT�MTO�CSUBJECT�MSUBJECT�CCCLIST�MCC�CBCCLIST�MBCC�CMESSAGE�MMESSAGE �CATTACHMENT�MATTACH�SENDMAIL�BSUCCESS �CERRORMSG�MERROR�WWUTILS���������� ��� �T���)�T�C�Filling �IP address�� �#�T�C�Filling�Port�� ��T�C]C]�\9�%C� �dbxSMTP.dll0�C� �eReports.dll0  8W�T�F�Required files dbxSMTP.dll and/or eReports.dll are not found in folder��B-��B- � � �;�C+�Company Name (DEVELOPER) / YP4C5EYLY219BMDG � ��T � ���T ��C�g �F�� �T���~]�T���T ����%�,�H$��(C���,�D#�C��C�����,� ����g�C���� ����T ����%�,�$��(C���,�#�C��C�����,� �����C���� ����T ����T �C �oProgress ���% ��Y �T�� ��C C �� �T���BCC��a�-6�U��TCCURSOR�TCSMTP�TCERROR�LCIP�LCPORT�LCFOLDER�LCERROR�LNRECORD�LNI�MARKUP�OSMTP�LNRESULT�UNLOCK �SMTPSERVER�SMTPPORT �FROMADDRESS�MREPLYTO�MTO�OCCASION �ADDRECIPIENT�SUBJECT�MSUBJECT�MCC �MESSAGEBODY�MMESSAGE�SENDMAIL �SMPTERRORt�����%C��)� �F���t&� �m�<�C�Alias ��� does not exist�Preview e-mails���U��TCCURSOR�MSGBOXW�sndExistG���� �sndCursor���� �sndMailwww���� �sndMailesmtp���� �sndPreview) ����>���Qa�A�4�q����r��q�A�4�q��q�;��rq������1A�2q�A�1�!�s�q��qB�A�A��������A�A���q�A�Q��Q9��2��1rq�A�r��!���!A1A��qA�!A1A��qA�A�A��R4�q���Q�A��A�1����������������� �����\��������r�� ��,������ ��5��E���^���N��V��������m�����������%������������� ������肮.�����4�����%C�'� �B���� �%�e�)�BC����<��>�</��>���&�B�<��>���</��>���U� �TCCONTENT �TCKEYWORD�TBUNWRAP�FILLING������aA�A�1���������������������%�������������&���e��)M0 ��!�4 �� � � � ��T� ���PeB �5 �� �T �- �T�-�%C �� �%C ���"�%C �Buffering ����Ca ��� �Q �� �T �a��% ��%C ��.dbf0� ��.dbf �T�a���% �n�%C ��.cdx0j� ��.cdx �T�a���% ��%C ��.fpt0� ��.fpt �T�a�� �%� �C��� �B ��U ��CALIAS�CFILE�BDELDBF�BDELCDX�BDELFPT�_REFOX_�BRETURN�LBFLUSH�FLUSHXa���!"�A���A��Q�C�A��Q�C�A��Q�C�A���A�A��1���������������������%�������������$���]��]61���4���������T� ���PeB�� �T�Ct �5 � ��%� r� �T�����%� � �T������%� ��T�C � �%���T �C���T �CCC������6�) �T ����T �CC������6��%C ��� M �B ���%C �i �B ���%�� � �  �B �� �%��B �� ���B �� ���U ��TCSTRING�TCTEXT�TCSEP�TBBEFORE�TBFORCE�TBTRIM �TBNOREPEAT�_REFOX_�LNPARMS�LCSTRING�LCTEXTar����A��A��A�����A�s�A���A��A���A�1�������������������%���a3��5��:����5��-5[�� �4���� �5���5����5� � �#�5 � � ������)�J��( � � �������T� ���PeB�� �T�Ct�T�CC��������6�T�CC������6!�%�VISUALCChf�C� �T��Message��T�CC�����6 �%C �m.p_nTimeoutb�Un�T ���T�C�G�T �C���G !�T �C�� �� 8 �T���T�CC��|C �T�C�MEMOv�T�C� �G$(� �B��U��TCTEXT�TCTITLE�TNMODE �LNSETMEMO�LNRETURN�LCTEXT�LCTITLE�LNMODE �LNBUTTONS�LNICON �LNDEFAULT�JCOK�JCCANCEL�JCABORT�JCRETRY�JCIGNORE�JCYES�JCNO�JCQUIT�_REFOX_�LNPARMS �P_NTIMEOUT �XMSGBOXWIN^ �5 �� � � ��5 � � ��5 � � � ��5 � � �� �5���T��msgboxwq7�T�CC��� ��TITLE "C��"���"6 �%- �T �� �255,255,0�T ��0,0,128�T ��0,0,128�T ��0,0,128��T ���0,0,0�T � �255,255,255�T � �128,128,128�T � �192,192,192��T��Arial �T� �T��B,�T �CC%C � ��$ z �G$( ��T �C��T ��� �( �^/�T �C �CC� � � � �#D� �Ho/� �� �T� �T�� C� �T��T�C����6� C�� �T� �2/ �T� �T� �T���T � ��T �C ��C�>D�T ��T �������?�5�����5� �T�� �T�� �T�� �T�� �T�-�5� �T�-�%CCChg8 �BC���DEFINE WINDOW &lcWname AT 0, 0 SIZE m.lnHeight, m.lnWidth IN SCREEN NOCLOSE FLOAT NOGROW NOZOOM NOMINIMIZE SYSTEM COLOR RGB(,,,&rgb_bckgrd) FONT m.lcF, m.lnP STYLE m.lcS &lcWtitle �H?� C �gcSDIWindowb�C�C� �C��� �C� @�T�C���$�)�T�C���$�C %�T�9��T�� ��T��!��%�� �T� ����%�� �T�!���3�ACTIVATE WINDOW &lcWname IN WINDOW &gcSDIWindow �MOVE WINDOW &lcWname CENTER #� �VISUALCChf�9"�- z�T�C���$�)�T�C���$�C % �T�9�T�� ��T��!��%�� �T� ����%�� #�T�!��� �T9"�a �T�a�MOVE WINDOW &lcWname CENTER �ACTIVATE WINDOW &lcWname �2�MOVE WINDOW &lcWname CENTER �ACTIVATE WINDOW &lcWname � �H � �� �C�#�� ��� #�C#� �C$�� ��� g�C%� �C�&� �C'�� ��� �C(� �C�)� �C$�� ��� �C(� �C)�� ���  �C&� �C$�� ��� P �C$��C#�� ���  �C�&� �C'��C%�� ���  �C�)� �C$��C(�� ���  �C)��C(�� ��� F �C$��C&�� ���  �C'��C%� �C�&�� ���  �C$��C(� �C�)��2 �T��Application error �C�*��� �( �` @�@ m.lnI,2 SAY MLINE( lcText,m.lnI) COLOR RGB( &rgb_text,,,) ��%C �silent.txt0  �C�Chord+���9�RELEASE WINDOW &lcWname �%�� ��� �  �T� ����%�� ���!�  �T�!��� �%�5 �T9"�-��%,� N �8� �B,��U-��RGB_TEXT �RGB_BRIGHT �RGB_SHADOW �RGB_BCKGRD�LCF�LNP�LCS�LNWIDTH�LNHEIGHT�LNX�LNY�LNI�LNCHARS �LNMAXWIDTH �LNWBUTTONS�LCWNAME�LCWTITLE�LCTITLE�LNLINES�LCTEXT �LNBUTTONS �LNDEFAULT�LNPH�LNPW�LNFH�LNFW�LOFRAME�LBHIDE �VMSGBOXWIN �GCSDIWINDOW �ISNULLFP2 �ACTIVEFORM�WIDTH�HEIGHT�VISIBLE�SETOK �SETCANCEL�SETABORT�SETRETRY �SETIGNORE�SETYES�SETNO�SETQUIT�DING�LNRETURN��4�� �T�����U��TN�LNRETURNs �4��� �H�l� ���Buttons1 �H=�-� ��Y� �B�OK� �|��B �OK Cancel� ���B�Abort Retry Ignore� ���B �Yes No Cancel� ���B�Yes No� ��B �Retry Cancel�2-�B�Illegal�� ���Iconl �HSh� ��m �B��� C�"�B�White cross on red circle� C� &�B�Blue question on white speach� C� #�B�Black ! on yellow triangle� C�@K�B�Blue i on white speach�2h�B �Illegal icon���U��TCMODE�TNVALUE��4�� �H��� ���7��B�  $� ���C� m��B�  #� ���C� ��B� � ����B�  � ����B� ��U��TNPOS�LNWIDTH �LNBUTTONSu��4��k��C�����@�Arial A�B ������?�@*HN OK*C��U��TNPOS�LNHEIGHT�GETLEFT�JCOK�VBUTTONy��4��o��C�����@�Arial A�B ������? �@*HN Cancel*C��U��TNPOS�LNHEIGHT�GETLEFT�JCCANCEL�VBUTTONz��4��p��C�����@�Arial A�B ������? �@*HN \<Abort*C��U��TNPOS�LNHEIGHT�GETLEFT�JCABORT�VBUTTONz��4��p��C�����@�Arial A�B ������? �@*HN \<Retry*C��U��TNPOS�LNHEIGHT�GETLEFT�JCRETRY�VBUTTON{��4��q��C�����@�Arial A�B ������? �@*HN \<Ignore*C��U��TNPOS�LNHEIGHT�GETLEFT�JCIGNORE�VBUTTONx��4��n��C�����@�Arial A�B ������? �@*HN \<Yes*C��U��TNPOS�LNHEIGHT�GETLEFT�JCYES�VBUTTONw��4��m��C�����@�Arial A�B ������? �@*HN \<No*C��U��TNPOS�LNHEIGHT�GETLEFT�JCNO�VBUTTONy��4��o��C�����@�Arial A�B ������? �@*HN \<Quit*C ��U��TNPOS�LNHEIGHT�GETLEFT�JCQUIT�VBUTTON��4�� �BC���U��TVVALUE<�4���T�CC�������6�T�C�G�T�C���G !�T�C���� 8�G)( �\libs\common3�T�&�lnR1 = msgbox( 'Test', 'test', tnMode)�&lcCommand �T�C�Test�test�������C�CC�Return�� �C C�Return�� � �Return values��U ��TNMODE�LNMODE �LNBUTTONS�LNICON �LNDEFAULT �LCCOMMAND�LNR2�MSGBOXW�LNR1�WHATMODE �4��� �H�� ���Buttons1 �H=�-� ��Y� �B�OK� �|��B �OK Cancel� ���B�Abort Retry Ignore� ���B �Yes No Cancel� ���B�Yes No� ��B �Retry Cancel�2-�B�Illegal�� ���Iconl �HSh� ��m �B��� C�"�B�White cross on red circle� C� &�B�Blue question on white speach� C� #�B�Black ! on yellow triangle� C�@K�B�Blue i on white speach�2h�B �Illegal icon�� ���Return �H{� � �B�OK� ��B�Cancel� ��B�Abort� � �B�Retry� �*�B�Ignore� �G �B�Yes� �c �B�No�2{�B�Unknown���U��TCMODE�TNVALUE ������ �5���T�C � � �$�T�C � � �$�T��C�formN ���{ �T�-�T � ���T � ���T � ��T� ��T��B ��T��I ��T�CC������6�T� �T�- �T�a�T��T�C^ �T�- �T�-� �H>D� C �gcSDIWindowb�C�C� �C��� �C� �- �T�C���$ �)�T�C���$ �C %�T�9��T �� ��T!�� ��% �� j�T� ����%!�� �T� ���3�ACTIVATE WINDOW &lcWname IN WINDOW &gcSDIWindow �MOVE WINDOW &lcWname CENTER (� �VISUALCChf�9�- �- (�T�C���$ �)�T�C���$ �C % �T�9�T �� ��T!�� ��% �� �T� ����%!�� �T� ��� �T9�a �T"�a�MOVE WINDOW &lcWname CENTER �ACTIVATE WINDOW &lcWname �2>�T��#�a� �HO� $��r�C����a%�� $��&� �C���%��C���a'�� $��&� �C���a(��C����)��C���*�� $��&� T�C���+��C����,��C���a'�� $��&� �C���+��C���a,�� $��&� �C���)��C���a'�� $��&� �C���a'��C���%�� $��&� e�C����)��C���*��C���a(�� $��&� �C����,��C���a'��C���+�� $��&� �C���a,��C���+�� $��&� 6�C���a'��C���)�� $��&� �C���*��C���a(��C����)�� $��&� �C���a'��C���+��C����,��2�T-��Application error�C����a.��� /�( 0�* 1�C�lblLineCC /�Z �lblTextMsgBox��1�'�T�C�loForm.lblLineCC /�Z�T�C-� /� ��& �T2���T3� /���T���T � ��T� ��T��B ��T��I ����<��%C �silent.txt0 a �C�Chord4���T���a �C��5��<�� �%"� �T9�-��%6�  �8� �B6��U7��LOFORM�LOLABEL�LCLINE�LNHF�LNVF�LCF�LNP�LCS�VISIBLE�HEIGHT�LNHEIGHT�WIDTH�LNWIDTH�FONTNAME�FONTSIZE�FONTBOLD �FONTITALIC�CAPTION�LCTITLE �WINDOWTYPE �MINBUTTON �ALWAYSONTOP �BORDERSTYLE �BACKCOLOR �CONTROLBOX�CLOSABLE �GCSDIWINDOW �ISNULLFP2�LNPW�LNPH�LOFRAME �ACTIVEFORM�LNFW�LNFH�LBHIDE �AUTOCENTER �LNBUTTONS�VSETOK �LNDEFAULT �VSETCANCEL �VSETABORT �VSETRETRY �VSETIGNORE�VSETYES�VSETNO�LCTEXT�VSETQUIT�LNI�LNLINES �ADDOBJECT�LEFT�TOP�DING�SHOW�LNRETURNo��4����'�C�cmdOk�cmdButtonMsgBox���6�C����\<OK��C��� �����U ��TOFORM�TNPOS�TBESCAPE �ADDOBJECT �VSETBUTTON�CMDOK�LNHEIGHT�LNVF�GETLEFT�LNHF��4������� �����T���T���T���T ���T � ��T � ��T�� �T�a �T�a�T��Arial�T� ��U��TOBUTTON �TCCAPTION�TNTOP�TNLEFT�TNRETURN�TBESCAPE�NRETURN�CAPTION�TOP�LEFT�HEIGHT�LNVF�WIDTH�LNHF�CANCEL�VISIBLE�FONTBOLD�FONTNAME�FONTSIZEw��4����+�C �cmdCancel�cmdButtonMsgBox���:�C����\<Cancel��C��� �����U ��TOFORM�TNPOS�TBESCAPE �ADDOBJECT �VSETBUTTON �CMDCANCEL�LNHEIGHT�LNVF�GETLEFT�LNHFu��4����*�C�cmdAbort�cmdButtonMsgBox���9�C����\<Abort��C��� �����U ��TOFORM�TNPOS�TBESCAPE �ADDOBJECT �VSETBUTTON�CMDABORT�LNHEIGHT�LNVF�GETLEFT�LNHFu��4����*�C�cmdRetry�cmdButtonMsgBox���9�C����\<Retry��C��� �����U ��TOFORM�TNPOS�TBESCAPE �ADDOBJECT �VSETBUTTON�CMDRETRY�LNHEIGHT�LNVF�GETLEFT�LNHFw��4����+�C �cmdIgnore�cmdButtonMsgBox���:�C����\<Ignore��C��� �����U ��TOFORM�TNPOS�TBESCAPE �ADDOBJECT �VSETBUTTON �CMDIGNORE�LNHEIGHT�LNVF�GETLEFT�LNHFq��4����(�C�cmdYes�cmdButtonMsgBox���7�C����\<Yes��C��� �����U ��TOFORM�TNPOS�TBESCAPE �ADDOBJECT �VSETBUTTON�CMDYES�LNHEIGHT�LNVF�GETLEFT�LNHFo��4����'�C�cmdNo�cmdButtonMsgBox���6�C����\<No��C��� �����U ��TOFORM�TNPOS�TBESCAPE �ADDOBJECT �VSETBUTTON�CMDNO�LNHEIGHT�LNVF�GETLEFT�LNHFs��4����)�C�cmdQuit�cmdButtonMsgBox���8�C����\<Quit��C��� � ����U ��TOFORM�TNPOS�TBESCAPE �ADDOBJECT �VSETBUTTON�CMDQUIT�LNHEIGHT�LNVF�GETLEFT�LNHF ��T���� �C���U��LNRETURN�THIS�NRETURN�THISFORM�RELEASE �xmsgboxwin�����vButton�����WhatMode6�����getLeft�����setOk���� �setCancels�����setAbort�����setRetry���� �setIgnoreq�����setYes�����setNo�����setQuitg���� �isnullfp2���� �ttmsgboxw1�����WhatMode���� �vMsgBoxWind�����vSetOk!+���� �vSetButton+���� �vSetCancel_-���� �vSetAbort4.���� �vSetRetry/���� �vSetIgnore/�����vSetYes0�����vSetNoy1�����vSetQuitB2�����Click3������ �T��� ������U��NRETURN&� �T��a �T�a �T���U��AUTOSIZE�VISIBLE �BACKSTYLE�cmdButtonMsgBox �CommandButton25���� �lblTextMsgBox�LabelY5��������1br���AA�A�"�2���5�Q�Qq�aaa�AA�(����A�����Q�����A��q6q������r��s�A� ��AA�AA�41�AA�AA����A�����������������������������������A�A�!A�a�A�A���B�A�A��1�q��Q�4�����!a�Q�A�Q��Q!QaQ1Q�QA�A�@1�q��!A!1!!!aA�4�q�4�q�4�q�4�q�4�q�4�q�4�q�4�q�4�q��;�q�!S3��24�����!a�Q�A�Q��Q!QaQ1Q�QA�q���������A�J�4��q��A��AAQQ����q��A��A�AA�AA�1�AA�AA�����C��!!!1!!!!!!!!1!!!!!!1!!�!A�qA�!A�QQA�A�q�!A���q���B�A�A��6��qa<������!!���1�A�4��4��4��4��4��q4��qa4��8��<���4����1��������������������9 ��j.��a������~.��B/�������W/��4�������&4��5�������6��g7�������}7��8�� ����8��R:��-����g:��;��:�� ��;��?=��G�� ��R=��>��T����>��@��a����+@��A��n����A��B��{����B��G����%��G��wM����\��M��a������a��c������c��e������e���g������g��fh������|h��i������i��6k������Jk��l���� ��l��m������n��Ro������o��p������o��p�� ����p��q�������%��� ������ �����2 ��Va5���4�� ��� �5 ��T ����%C �E��B-��%C �b��Ba��% �� � ��%C ���Ba���B-�%C�\ �C �>��T �C �C �>=��%C �=�\�T �C] ���%� U�%CC �=�B�Q�B-���%C� ��t�Ba��% � �B-��BC� ���U��TCPATH �BMAKEDIRS �TBNOCHECK�TBQUIET�CPATH�ISDISKX�DIREXIST�MADEPATH �4 ���5� ����� �5�� �T�- �T �-�T�C�ERROR�T�C��f�T��C]�T���C:7�T����  � � �C�CheckC�= � �%�e�%CC ��`>&8�C �1:wDirExist�Checking for folderC �� ��a3�C �1:wDirExist�Checking for folder �� ����1 �lbError = .T.5�T �C� ���DH���DC� �ON ERROR &lcOnError �%� �%��C �-1:wDirExist ���B-��% � X+�%C ��>�C ��\�: T �T �a�� �%��C �-1:wDirExist �� �B ��U ��TCP �ADIREXISTS�BDIR�LBERROR �LBDEFAULT�LBC�LBPWAIT �LCONERROR�LCFOLDER�TBQUIET�ISMAPPED�PWAIT� �4 ���5 � � ��T �C�\ ��� �( ��0�T �C ��C�\ ���\ �=$�%C� �� �C� �� ��B-���BC� ����U��CP�NSLASH�CPX�NI�DIREXIST�MAKE_DIR��4���5��5��%� �� ��"�� K��T��"���"�`� �T�����MKDIR &lcPath �Ba�U��TCPATH�LNRETURN�LCPATH�4���5��5������T�CC��=f �T�a�T��C]�T���C:�T����  �� �T�- �%��%C�Check��� >�C �1:wIsDiskIn�Checking drive C�=� exists� �T�a���%C�� � ,�%��aAbB�%��Cw�%��� s�C �-1:wIsDiskIn����C�Remove����B-�(�%C�� ���$�%��C�%��� �C �-1:wIsDiskIn����C�Remove����B-����%C�� ��F��%��C�%��� �C �-1:wIsDiskIn����C�Remove����B-��%��C�%��� �C �-1:wIsDiskIn����C�Add����Ba�U ��TCPATH�LCDRIVE �LBDEFAULT�LBC�LBPWAIT �LBISPWAIT�LBQUIET�ISMAPPED�PWAIT�DOCHECK3�CLUSTERw�4���5� �5�� �5�� �T�- �T�-"�T�C��= �:\a~b~c~.men�T��T�C�ERROR�1 �lbError = .T.�T�C�0�%� ��T�C���ON ERROR &lcOnError !�%���� �� Z�%�� �C���1 �lbError = .T. ���ON ERROR &lcOnError �Ba�i�B-��B-�U��TCDRIVE�LNH�LBFILE�LBERROR �LCONERROR�LCFILE�DirExist�����MadePath�����Make_dir �����IsDiskx�����DoCheck3, ����R��q�A�-q�A���!q�A�A�q�A�qA���q�A�A�Cq�A�q�A�3�����Q�11q�q�1A�A�QQq��A�q�A��A�A��A��3��QqBq�A�A�5�q�q�q�q��A�q�9�r�v�qA�11���A�A�1Q!AA�A�qq��a�!AA�A�qq�A�A�A�b�!AA�A�qq�A�!AA�A�Aq�4�q�q�����!�QQ���A�q�A�Q�qq��q�A�q�1�����������������$����� ��F���H��� �� ��n���S��� �� �����^��� ��6��������K��P���������%�������������>�����W}-���4���%���Zip �H(�� �-S+�U4�T�C�String�/auto��CCC���#�����T�C���@=�%C�>�Q�CC� � � ��CC� �� � � �T ��'�+C �AZ �C �az  �T �CC@8@��T�C � &�T�C�� �Status:Locked�;��� �-s��T�C���-s� ��%C�>� �T���CC� � � ��CC� �� � �����5��������5��T�C�C�Date:�\ �T�C���Status:�;��T�C���Key:�;� �Hp� C� R�T�C���Time:�;��T�C���Date:�;�4�T�C�String�/auto��CCC���#�����T�C���@=�%C�>�N�CC� �� ��CC� ��� ��� C� W�T�C���Time:�;��T�C���Date:�;��T�C�\�T�C�=�T�C�$�T�C�Decode�/a������T�C���@=�%C�>�S�CC� �� ��CC� ��� ��� �-s��T�C���-s� ��%C�>� �T���CC� �� ��CC� ��� �����U��TCMODE�LCZIPOPT �LCZIPAUTO�FLOATING �F1TIMEDATE�DSTODATE �LCZIPDATE �LCZIPTIME �LCZIPCODE�DUE �SETZIPVALUE�LNID �SETZIPSTRING�LNABC�LCZIPABC �LCZIPCOMMENT�ADDTEXT�FILLING�LCZIPKEY�LCCODE�LNSEED �LCZIPSTATUS �TCCOMMENT �SETUNZVALUE �SETUNZSTRINGw�A�AA1�qaA��aA�21�A�E��q��A1A�!!�A2A�11�A�A�A�1���������������������%�����������,�� �����CA9��� �4 ���5 � � �&�T ��C ���;.,�:::�:::$�T �CC ��C�: ��=g$�T �CC ��C�: ��\g'�T �CC ��C�: ��\g �B �< �< ��U��CTIME�NHRS�NMINS�NSECS0�QaAAq1��������������������%��������������J��,3��%�4 �� � � � ���T� ���PeB�� �T�Ct�5��5 ��5 � �T���% � ��T ����% � ��T �����% � ��T ����% �  �T �-��T ��wPWait�%C�tnSwitchb�NC �T �����T �C��g�%�:���T �CC��C�:��\�� �H� ���C � "�HIDE WINDOW &lcWname IN SCREEN � ��C � �SHOW WINDOW &lcWname !� C � �C � L� ��C?7� �� �C � �RELEASE WINDOW &lcWname &�%C �gbPwaitHideb�L� �  �T9 �-���Ba�U��TNSWITCH�TCSTRING�TCMODE�TNPOINTS�TLBRIGHT �TNSECONDS�_REFOX_�LNPARMS�LNPARMZ�LNSWITCH�LCWNAME�NEWPWAIT �GBPWAITHIDE�VISIBLEJ�5 �� � ��T ��C�T �C �MEMOWIDTHv�% � �C � u��T � �Please Wait���T �CC ��|C ��%�WINDOWSCChf���������%�(�%C �� "�ACTIVATE WINDOW &lcWindow SAME �$�t&��5�t&��G$( ��U ��LCWINDOW�LNLINES �LNMEMOWDTH�LNPARMZ�TCSTRING�CTEXT �XPWAITWIN �XPWAITDOS�LNSWITCHS�5 �� � ��G$(C�T �C ��T ��� ��( ��!�T �C �CC � ��>D��DEFINE WINDOW &lcWname FROM 0, 0 TO m.lnLines+1, m.lnChars + 3 IN SCREEN SHADOW NOCLOSE NOFLOAT NOGROW NOZOOM COLOR SCHEME 7 �MOVE WINDOW &lcWname CENTER �ACTIVATE WINDOW &lcWname )�T ��COLOR CC�/�*/� ��( �H �HD� ��NOBLINK$� ��C � ��� C � $� ��C � ���2D6�@ m.lnI - 1,1 SAY MLINE( m.cText, m.lnI) &lcColour ���B�U��LNI�LNCHARS�LCCOLOUR�LNLINES�CTEXT�TCMODEP�5 �� � � ��5 � � ��5 � � � ��5 � � ��% ���T �� �255,255,0�T ��0,0,128�T ��0,0,128�T ��0,0,128�3�T ���0,0,0�T � �255,255,255�T � �128,128,128�T � �192,192,192�0�T �CC �� �MS SANS SERIF� �6#�T �CC �� � �6�T ��B,�T �CC%C � ��$ z �G$( ��T �C ��T ��� �( �A1�T �C �CC � � � � �#D��T � ��T � ��T ��T �������?�DEFINE WINDOW &lcWname AT 0, 0 SIZE m.lnHeight, m.lnWidth IN SCREEN NOCLOSE NOFLOAT NOGROW NOZOOM NOMINIMIZE COLOR RGB(,,,&rgb_bckgrd) FONT m.lcF, m.lnP STYLE m.lcS �5� �T�- �H_?� C �gcSDIWindowb�C�C� �C��� �C� 3�ACTIVATE WINDOW &lcWname IN WINDOW &gcSDIWindow �MOVE WINDOW &lcWname CENTER #� �VISUALCChf�9�- �%C �gbPwaitHideb�UD�7� �T�a� �T9�a �T�a�MOVE WINDOW &lcWname CENTER �ACTIVATE WINDOW &lcWname �2�MOVE WINDOW &lcWname CENTER �ACTIVATE WINDOW &lcWname �W�@ m.lnHeight, 0.000 TO m.lnHeight, m.lnWidth PEN 1,8 COLOR RGB(&rgb_shadow,,,) V�@ 0.000, m.lnWidth TO m.lnHeight, m.lnWidth PEN 1,8 COLOR RGB(&rgb_shadow,,,) M�@ 0.000, 0.000 TO 0.000, m.lnWidth PEN 1,8 COLOR RGB(&rgb_bright,,,) N�@ 0.000, 0.000 TO m.lnHeight, 0.000 PEN 1,8 COLOR RGB(&rgb_bright,,,) l�@ m.lnHeight - m.lnY, m.lnX TO m.lnHeight -m.lnY, m.lnWidth -m.lnX PEN 1,8 COLOR RGB(&rgb_bright,,,) h�@ m.lnY, m.lnWidth-m.lnX TO m.lnHeight-m.lnY, m.lnWidth-m.lnX PEN 1,8 COLOR RGB(&rgb_bright,,,) S�@ m.lnY, m.lnX TO m.lnY, m.lnWidth-m.lnX PEN 1,8 COLOR RGB(&rgb_shadow,,,) T�@ m.lnY, m.lnX TO m.lnHeight-m.lnY, m.lnX PEN 1,8 COLOR RGB(&rgb_shadow,,,) � �( ��@�@ m.lnI,2 SAY MLINE(m.cText,m.lnI) COLOR RGB( &rgb_text,,,) ��%C� E�G] �9��G] �RELEASE WINDOW &lcWname ��B�U��RGB_TEXT �RGB_BRIGHT �RGB_SHADOW �RGB_BCKGRD�LCF�LNP�LCS�LNWIDTH�LNHEIGHT�LNX�LNY�LNI�LNCHARS �LNMAXWIDTH�TLBRIGHT�TCMODE�TNPOINTS�LNLINES�CTEXT�LBHIDE �GCSDIWINDOW �ISNULLFP2�VISIBLE �GBPWAITHIDE �TNSECONDS��4�� �BC���U��TVVALUE�Newpwaitz���� �xpwaitdos!���� �xpwaitwin���� �isnullfp2����@Qar��v�q�q��1�A�1�A�1�A�1�A�1���!A�A��!q�1b�A�B�q�5�Q��A�q��q�A�!!�Q�A��Q�A��5�Q�1�A��A!A�aA�A�A�5�QQ�aaa�AA�1�4�A�TQ�q q���11q��A����A�qb2BA�a��a�A�C�4�q��3�����������������.���6����p���F����������]�����-,��������C,��,��K������%������������� ������b,3*����4 �� ��T� ���PeB�� �T�Ct�%� Y��T ����T �C�3� ���+C�3� � ���Ba�U��NTIME�NEND�_REFOX_�LNPARMS�TIMESTMP�ar���A�A�q�1��������������������%���������h��C�����!L|7P���4�������T� ���PeB�� �T�Ct �HN�� C�� ����? ���Windows version��Windows directory��System directory�� � ���Windows version %�BCCCJCCJ �01234567890.����g"� ���Windows directory9�BC����!� ���System directoryh�BC����!� ���Is Network Alive�BC��������U� �TCFUNCTION�TVP1�TVP2�TVP3�TVP4�_REFOX_�LNPARMS�WINAPI�4����������T�C�X �T�� �T�� �T�- �Hd�"� ���Windows directory�+�|�GetWindowsDirectory�Win32API�T�C���!� ���System directory(*�|�GetSystemDirectory�Win32API�T�C�� �!� ���Is Network Alive#�|�IsNetworkAlive�sensapi �| �GetLastError�kernel32 ��� ��� �T��� �T��� �T���T�C� ��%�� �T����T�C ���%C�G:�T���,LAN��T�C� 8�%C�G|�T���,WAN��T�C�\� �T�� �T����%���T�C��=� �T���� �B��U� �TCFUNCTION�TVP1�TVP2 �LCLOCATION�LNSIZE�LBFLAG�LNFLAG�GETWINDOWSDIRECTORY�WIN32API�GETSYSTEMDIRECTORY�ISNETWORKALIVE�SENSAPI �GETLASTERROR�KERNEL32�LNMODE�LNRETURN�LCRETURN�LCERROR�winApi ����rbr���q�R%��aA�1��6����!aa5�����!���aQA�1aQA�!A���A�!��A��1��������������������i ����f�������%����������������x��AM4|���4������T� ���PeB�%C�F��T�� �[� �T��� �%�� �%���BC�����$����BC�����$���  �%���BC�����$���BC�����$����U��TCTEXT�TCTITLE�TBYES�TBLARGE�_REFOX_�LCTITLE�MSGBOXW1b����A����A����A�A�1��������������������%��� ������ ��w��� ��\,3��R�4������T� ���PeB�� �T�Ct�5��� ��5 � � ��5 � �T �- �H~�@� ���T�C��f �T���T�C� �T ��� �T ���� �3�T�C��f �T �a �T�� �T ���T�C� �T ���#� ��C��f�SORRY �T�C��f �T �a �T�� �T �� �T�� �T ���� ��T�C��f �T ���T�C� �T�� �T ����2@�T�C��f�T �� CC�Z �T �� �T��� �% �1�T ��Please inform C�AuthorC ��T � �C C +�T �C �C C C C C �O1�T ��Please inform C�AuthorC �%�T �C C  �C C +�T �C �C C C C C � �H`D� � ���SORRY O�C � �C C �quoting FATAL ERROR in program ��Sorry��%C�m.p_Appb�C�� ��� �B-� � ���FATAL O�C � �C C �quoting FATAL ERROR in program ��Sorry��%C�m.p_Appb�C�� ��� �B-� ����WARNING K�C � �C C �quoting WARNING in program ��Sorry��Ba� ����INFORM d"�C � � �Please note@��Ba� ����NOTIFY Y�C �C � �Please inform&�If the problem persists please contact�Problem@��Ba� ����CONTACT IA�C �C � �Please inform�Please contact�Problem@��Ba� C�m.p_Appb�U8�C� � � in program � � ��Sorry�� ��FATAL/C�C �FATAL ERROR � � in program � � ��Sorry��%C�m.p_Appb�C �� ��� �B-� ��WARNING?�C�WARNING � � in program � � ��Sorry@��Ba� ��SORRY�C � ��Sorry@��2DC�C �FATAL ERROR � � in program � � ��Ooops��%C�m.p_Appb�C5�� ��� �B-��Ba�U��TCTYPE�TCVALUE1�TVVALUE2�TCVALUE3�_REFOX_�LNPARMS�LCTYPE �LCFUNCTION�LNERROR �LCMESSAGE�LCREPORT�LCTEXT�LCERROR�LBPARM2 �GETFUNCTION�APPINFO�MSGBOXW �CLOSEDOWN�P_APP �5��� �T��+CC�t <��T��� �T����,�T��C���C���..���6���1�T��C���C� �C�t���6�.�1�T��C���C� �C�t���6�.�1�T��C���C� �C�t���6�.�1�T��C���C� �C�t���6�.��%C��W �BC�t�-�BC�tC  �in function C��@�()��U� �LCPROGRAM�LNCOUNT�ADDTEXT �GetFunction0 ����1ar��6�q��������������1�������������a��A���QA��A�A�q�A�A�q�q�!q�q�q�b2A�B�q�q�a�2A�B�q�A�q�5���1A�����A�8�����������������f���k�����������%�����������d������`���m}7��0�-�BC�m.p_Appb�C�CC ���OCOMM �U��P_APP1��������������������%���������D!��E����s|o5��n������������ � � �� �� �������:�T �CCC �m.p_Masterb�C� � �C]C]6&�T�CC�� ��Install�C��6�%��Function��Ba�)�T�CC� ���* �����6 �T�CC�� ��C�64�T �CC��CC�System directory���6)�T �CC�� ��dllIndex��6 �T ����%��Match�BC��� �������-�%��Exist�C� ��,�  �T� ��BC �C�`0��C�dllIndex��C� ���T �C� �T����T�C��� ���e�%��Unpack�C� �C�dllIndex  .�� ��C � �C� �C�dllIndex  �C����� ���C�dllIndex��C� ���T �C���C����F��T�C �vDllManagerN��~7�T��'�C��CC��@��� � �C��� ��%��Check.�%C �vDllCheck�C �vDllCheckN� �F� �C �� �C�Nothing to check!����%� Q�T � �CC �6�$�File dll0611.zip or later is missingC C ���6P�T � �CC�dllIndex ,��There is no dllIndex tableC C ���6K�T � �CC �vDllManagerN�!��No list of DLLsC C ���6� �T� ��C �vDllCheck��C�dllIndex��C �vDllManager� �B��U"��TCACTION �TCDLLLIST�TCFOLDER�TCSOURCE �TCVERSION�TCERROR�LCACTION �LCDLLLIST�LCSOURCE�LCFOLDER �LCVERSION�LCERROR�LCMASTER �LCZIPLATEST �LCZIPNAME �LCZIPFOLDER�LBRETURN�LNSELECT�P_MASTER�FNSYSTEM�DLLMATCH�KILL �GETDLLINDEX �GETZIPLATEST �GETZIPNAME �UNPACKZIP �DLLCURSOR �VDLLMANAGER �DLLACTION�FILENAME�VERSION �VDLLCHECK�APPBROW�MSGBOXW�4�� ����� �%C���C�dllIndex }�D�o�dllIndex-Q�C� = �dllManager �vDllManager�I�h �vDllManager��C2��C ��C2��L�T�C����, ���(��T�CCC������, �@�T ���T ����T ��� �T �-�%C��F��-CC�@� �%C4�T ����T �� ����r �vDllManager���Ba�U � �TCDLLLIST�LNFILES�LNI�LCFILE�COMPLETE�DLLINDEX�FILENAME �VDLLMANAGER�VERSION�ORIGINAL�OCCASIONp�4����������� � � �� � � ���� �T���T����T����T �C�0�T �C�0�J��( � � �% ���T �C���� �% ���T �C���� �T�� �H `� C���Check�%C �vdllCheck u8�h �vDllCheck��C2��C��M�7�r �vDllCheck���� �C��� �T�a+� C���Install�Update�Unpack�%���Update?(�% �� � �C� �� �� ; �� �T �-���% �� � j��(���T�C�0 �%��C������/�T��Unable to install �� in ��� ���Remove �% � ����T�C�0 � ���Exist` �T� � �%�\�C������� �B��U��TCACTION�TCFILE�TCSOURCE�TCFOLDER�TCERROR �TCVMANAGER�LCFILE�LCSFILE�LCFFILE�LBSOURCE�LBFOLDER �LCVSOURCE �LCVFOLDER �LCXMLSOURCE �LCXMLFOLDER�LBOK �GETVERSION �LCVMANAGER �VDLLCHECK�FILENAME�VERSION�DETAIL �XMLVERSION�COMPVER �REMOVELOCALu� �4������T�CCC]C]@�%C��@�@��n��%C��0j�������U��TCFOLDER�TCFILE�LCLOCALY��4�����T�C����%��A� �BC��R� �B����U��TCFILE�LNRETURN �LAGETVERSION��4�� ����� �T����T�C�����(�|�*�T��CC�Z�: C���C � �B��U��TCFILE�LNRETURN�LNI�LCOUT �LAGETVERSIONy �4��� ����������T�C���, �.�T�C��, �.�T�C�g�T�C�.��..�T�CC��..�\g�T�C�g�T�C�.��..�T�CC��..�\g �H�r� ����� ! �B�� ��; �B� ����� ` �B�2r �B��U ��TCV1�TCV2�LCV1�LCV2�LNV11�LNV12�LNV21�LNV22�LN2NDDOT�4������������ � ��T�C ���*.dll�T�C ���*.dllo�h �vDllMatch��C2��L��L��L��L��C��C��M��M��(�p�T�C�� ��%C��0l�C����C���?�T�C�C��C�C� �C�C� �T �C�C� �% ��T �C������ �T �-��F ��r �vDllMatch���������� � �C���C���C���C������F ��>���5�C�TITLE "DLL Match: �� and ��"��%C�  �(���C �vDllMatch��U � �TCDLLLIST�TCDIRONE�TCDIRTWO�TCTABLE�LNONE�LNTWO�LNI�LNJ�LBSAME�LBSIZE�LBIDENT�LAONE�LATWO �VDLLMATCH�FILENAME�DT_MATCH�DS_MATCH�DI_MATCH�D_MATCH �VERSION_1 �VERSION_2�DETAIL_1�DETAIL_2�LCFILE�LAFONE�LAFTWO�FCOMPARE �GETVERSION �XMLVERSION�ALL�APPBROW�KILLb� �4��������T�C���T�C��T��� �<�� �B��U��TCFILE1�TCFILE2�LCF1�LCF2 �LBIDENTICAL��4��I�%C�� �C���.dbf0 %�C��@CCC]C]�dllIndex@ �� �dllIndex.dbf&����.dbf( �dllIndex.dbf��U� �TCVERSION���� �T�����C�dllIndex��%C �dllIndex.dbf0��Q���dllIndex��F�"�-��dllManager: Zip file �%C4��T��C���� �B���U� �LCZIPORIGINAL�KILL�DLLINDEX�FILENAME�ORIGINALQ�4���������T�CC]C]�T�C����%C�� ��T�C�����%���C� � �T�� �T������%C� ����  �T�C����%���C�  �T�� �T�����%C�, �T����A �T��� �B��U��TCSOURCE�TCMASTER�TCFOLDER �LCMAXNAME�LCNAME�LCFOLDER �GETZIPNAME2��4�� ��� ��$�T�C��� �dll????.zip�%����C��BCCC�@�� �B����U��TCFOLDER�LNFILES�LNI�LAFILES��4�����%C���0 *��B-��%C��a� I��B-��%C�������� �<�C�Failed to unpack DLL archive �� �dll Manager���Ba�U� �TCZIPNAME �TCZIPFOLDER�TCMASTER�ISDIRMEN �ACTIONUNZIP�MSGBOXW%�4������ �T�-=�C �1:wDllManagr!�Please wait|Unpacking DLL archive�'�C�Deltree�c:\temp\dllneper�4�C�Init �DLL files�Unpack �DLL archive��%C �Check dzEasy�2�%C�Make workspace�c:\temp\dllneper�7�%C�Copy specific zip to workspace�������%C �Unzip archive�)�%C�Check OKC��temp\��%�%C�*.*��temp\��a � �T�a������C�Clear workspace-���C �-1:wDllManagr��C�Release� �B��U � �TCARCHIVE�TCFOLDER�TCMASTER �LBSUCCESS�PWAIT�DIRLIST�UZIP �ISDLLDATA �PCUZIPDIR�FILECOPY%��4���BC�� �dllIndex.dbf0�U��TCFOLDER �dllCursor���� �dllActionH ���� �RemoveLocal ���� �GetVersionO���� �XmlVersion�����CompVer�����DllMatchC�����Fcompare]���� �GetDllIndex���� �GetZipLatest���� �GetZipName���� �GetZipName2 ���� �UnpackZip���� �ActionUnZip���� �IsDllData`����0q��q�q�aq�A�A�bA��A�S���XaQ��A��s��qA�dq���A�A��A��aQ�4�q��q�D�q�����q�!�!!A�A�QA�A�q�4���1q�����!A��!A���qA�r�q��A�A�Q!A���!�A�q��A�a��!A�A��4��q�1�1�A�A�4�q�q�R���A�4�q��q��QqA��`1���q��������A�4�12�sQ1QQ���A�q�DA�A�q�!Q�A�a4�����4�q�qaA�4�r��Qq�!�!A�A��4���!!��A�A�!��A�A�����A��4�q���AA��A�4��Aq�A�Aq�A�A�q�4��q��qA"qR�A�A�A�A�A�A�A�4�q�2�����������������<�������g���W�����q��������������������W��������n��#��������#��~&�� �����&��,��*�����-��X.��V�����p.��/��a�����0��#2��j�����:2��T5��{����l5��6������7��8����*��8��=����B��*=��j=�������%���*������D/����^+��ĔI7,���4��������� �T�Ct �5���5 ��T�C����: ��T�C����: � �T ��� �H�x� ��Update�"�T �C���������� �� ��Fill�"�T �C���� �C C � ��Fillingb-�T �C���<��>�</��> � �%�^�T �C ��� � �Filling/U2�T �C���<��>�</��>-�a � �%��T �C ��� ��Value1�%�<��>���</��>� -�T �C���<��>�</��> � �HO� C�tvParm3b�Cj� C�tvParm3b�NY�T �C �g� C�tvParm3b�D�5��T�C �STRICTDATEv �G(��T �C �# �G(�� C�tvParm3b�TQ�T�C �STRICTDATEv �G(��T �C � �G(�� C�tvParm3b�L4�T �C �f�T �C �f�.T. �C �@�yes � C�tvParm3b�U�2�� �T ���� ��Wrap�C� $&�T �CC���� �C���� �6&� ��Expand ���href \�T �C���*� � �Expand all ���href �T �C���� ��Collapse�T �C������ � �Breakdown�T �C�������� � �Remove open-�T �C������ � �Remove allZ�T �C���� � �Remove tag�T �C������ ��Is mark�T �C����@� ��Are tags matched���Are tags all matched  �T �C���� � �Swop value@�T �C�������&� ��Remove unmatched tagsx�T �C���� �B ��U� �TCCOMMAND�TVVALUE�TVPARM2�TVPARM3�TVPARM4�TVPARM5�LNPARMS �LCCOMMAND �LCMODIFIER�LVRETURN�OCCASION�UPDXML�WRAPX�FILLING�LNSETSTRICTDATE �EXPANDHREF�ALLHREF�COLLAPSE �BREAKDOWN �REMOVEOPEN �REMOVEALL �REMOVETAG�ISMARKUP �ISTAGMATCH �SWOPVALUE �REMOVESOLO��4�����5�-�T�C����<��>�</��>�K�BC���<��>��</��>�<��>��</��>�U��TCHTML�TCTAG�TCVALUE�LCVALUE�FILLINGS��4����A�B�<�CC���� �� C�A6�>���</��>�U��TCT�TCC�TCMw� �4��� �5�� �T����T��~�+�� g� �T���T�C������ �B��U��TCS�TCA�LCOUT�LCLAST �COLLAPSE2  �4����5���� �5���5��T��<��>�T��</��>�T�C����T�C����T�C��� �H�'� ����� ��� � �T���� ���T�C������ ��+�T�C������ �� f�T�C������T�C����� �� ��� �T�C������T�C�����2�T��C�>'�T�C���=CC���\�� �� �B��U ��TCT�TCK�LNF1�LNF2�LNT1�LNCUT�LCHEAD�LCTAIL�LCR�COLLAPSE��4���� �5�� �T� ����T����+C�V���DECLARE &tcArray[ lnRows] ��(��#�&tcArray[ lnI] = c_markup[ lnI] � �B��U��TCSTRING�TCMARK�TCARRAY�LNROWS�LNI�C_MARKUP�BREAK�5������5��5�����J��(���� �T�- �T��� �T� ���(�|�T�����T�C��� �"�%C��� ���� �x�T � � � � �"�� �(��"�T ��C� ���T �����T �����T �����T������ �B ���U ��LNSOURCE�LNI�LNR�LNJ�LBBROKEN�LCT�LCSTART�LCMIDDLE�LCEND�LNROWS�C_MARKUP �BREAKTEXT�TCMARKc�4�������5����5� � � � � � �5���5��T��<��>�T��</��>�T�C����T �C����T �C��� �H�'� ��� �� � �� � �T�-� �� �T�-� ��8 �T�-� �� T �T�-(� �� �C�>C��>  �T�-� � � � �� �T�C���=�T�C��� �C�>�\�T�C�� �C�>\ �T�a�2�T �C��� �T�-� �( ��T �C��� ��T �C�C�� �=�% � �(�%�� �C�>C��>  �T�-�!��T�C���=�T�C��� �C�>�\�T�C�� �C�>\ �T�a�!���� �%�S �T�� �T�� �T��� �B��U��TCT�TCK�TCSTART�TCMIDDLE�TCEND�LCS�LCM�LCE�LNF1�LNF2�LNT1�LNCUT�LNHEADS�LNB�LCHEAD�LCTAIL�LBRZ�4�� �5�� �T���+�+�mailto:���MAILTO:� u�+�T�CC��mailto:���MAILTO:���+�+�http://���HTTP://� �+�T�CC��http://���HTTP://����T�C�� ���%�@���T��mailto:�+�T��http://�(�BC���a�href="���"��U��TCSTRING�LCTEMP1�LCTEMP2�WRAPX��4�� �5�� �5�� �� �T���!�T�C����a�laPackup� �T�����(���T�C����%�<a>���T��CC���a�����T������<� �B��U ��TCSTRING�LNR�LNI�LCOUT�LCROW�LAPACKUP �BREAKDOWN �EXPANDHREF�COLLAPSEw� �4��� �5�� �T����T��~�+�� g� �T���T�C������ �B��U��TCSTRING�TCTAG�LCOUT�LCLAST �REMOVEOPN2 �4����5�����5��� ��T�C��@�T ��<C�@�T��>�T�C ���T�C ���%���#�T��C�>C��\�� �T��� �H�'� ����� ���  �T���� ��8 �T���� ��V �T���� �� t �T���� � ��C��>  �T���� �� ��� #�T�C���=C���\�2 �T���� �B��U ��TCS�TCT �LCLSTRING�LCLTAG�LCR�LCTAIL�LNTAG1�LNTAG2�LNCLOSE�LNHEADS�LCTAG��4���5��� �T��� �T����T��~#�+C���� ��� � �T���T�C������ �B��U��TCSTRING�LCOUT�LCTAG�LCLAST�ISMARKUP �REMOVETAG �4����5����5�����T�C�<���%��X��B-��T�C���\�T�C� ��T�C�>��T�C�/� �H�t'� ����� ��� ��B-� ���B-� ����� 7�T�C��=�Ba� ��e�T�C��=�Ba�2t�B-��B-�U ��TCS�TCTAG�LCTAG�LCTAIL�LCREST�LNOPEN�LNCLOSE�LNSLASH�LNSPACE �4����5�����5��� ��T�C��@�T �C����� ��T��</C�@�>�T�C ���T�C ���%����T�C�C��\�%����T����� �T��� �H'� ����� ��� I �T���� ��g �T���� ����� %�T�C���=C���C �>\� ��  �T���(� ���C�>C��> %�T�C���C �>��C �>\� �� ��� pA�T�C���=C���C �>��C �>\C���C�>\�2 �5 � ��T �C �� �T���� �( ��T�C�� ��T�C �C��=�%� �(�%���C�>C��> C%�T�C���C �>��C �>\�A�T�C���=C���C �>��C �>\C���C�>\��!��%�T�C���=C���C �>\� �B��U ��TCS�TCT �LCLSTRING�LCLTAG�LCR�LCTAIL�LNTAG1�LNTAG2�LNTAIL�LNHEADS�LCTAG�FULLTAG�LNB� �4����5� �5���T�C��@�T�C�<C�@��T�C�>C��\�%�� ��C�> ��BC���\���B�<��>��U��TCSTRING�TCTAG�LCLS�LNATTAG �LNATCLOSE�LNATTAIL�4���5��%�<�� ��>�� �T�C�W�h �istagmatch��N��M��M��M��N��N ��N ��L ��L ��LI�r �istagmatch�� � �C �istagmatchN��a- �T �a�+ �m�F��- �T �-�~i�T � �� � �% �e �C���� �T�-�~ � �T�a��F��Q �istagmatch �F� �B� ��Ba��U��TCTEXT�LNSELECT �ISTAGMATCH�TAGID�TAGTEXT�TAGTAG �TAGATTRIB�TAGPRE �TAGCONTENT�TAGPOST �TAGPROCESS�TAGDONE�TAGERROR �LBPROCESS�TAGSPLIT�LBERROR�5���5�����5�����5 � � � �T� ��%�<� ��>� �T��C �istagmatchO�T�C���<�> �#�T�C�<�� �<� �$�%��/�C� �C� ��>�-�a�a��T�C�<��>��T�C�<��>>�T��</C�@�>�T�C�>�T�C�C�@+�%����� ���� �T�C��=!�T�C������\�T�C���\�J�( � � ��%C� uI�r �istagmatch� ���C �istagmatchN�a-�T �C �istagmatchO��%C� I�r �istagmatch� ���C �istagmatchN�a-�T �C �istagmatchO��%C� aI�r �istagmatch� ���C �istagmatchN�a-�T �C �istagmatchO��# �istagmatch��E�>����� �� �� ��-�a��>�-�a�a��� �>�-�a��U��LNRECORD�LCTAG�LCATTRIB�LCTEXT�LCTAIL�LNTAG�LNTAIL�LNLENTAG �LNLENTAIL�LNPRE �LNCONTENT�LNPOST�TAGTEXT�FILLING �TAGPROCESS�TAGDONE�TAGERROR�LCPRE �LCCONTENT�LCPOST�TAGID�TAGTAG �TAGATTRIB�TAGPRE �TAGCONTENT�TAGPOST/�4�������5� �%�c��%C��0J��T�C���_� �T�����x� �T�����%�<��>�� �%�����T�C����������&�T��C�����C C � �%��T�C����� �B��U��TCXML�TCTAG�TCVALUE�TBNOSWOP�TBFILE�LCXML �SWOPVALUE�WRAPX��4�� �5���5� �T�� �T����T�C���<�>��+C� ��C�> ��T�C�>�T�C��<��>���T�C���<�>�� �B��U��TCTEXT�LCTEXT�LCTAG�LNTEXT�FILLING �SwopValue�����Wrapx~�����Collapse���� �Collapse2 ���� �BreakDown �����Break ���� �BreakText���� �ExpandHref�����AllHref#���� �RemoveOpenh���� �RemoveOpn2���� �RemoveAlli�����IsMarkup6���� �RemoveTag�����FullTag7���� �IsTagMatch �����TagSplit"�����updXml'���� �RemoveSolo)����r���q���q"Q$��A�"��A�a��q������A�B���A�aa!!ba!aa!b!A��5��q�6��5�����1�aA��3��1�q�qQQQ�q�RRRQ�2qA��5�����1�A�q1A��3�1q�1���q!!�"A�2qqA�A��3�q��q�qQQQ�q�����b��"�qQq�A��a�A�A�A�A�A�����A��5�q���A�A�a!A�AA�5�q������q!A�A�A�q��7�����1�aA��5��11�A�QQ1��A��q�����2��A��6�q�����1�aA��7���11q�A�a111�qq�r�aq�aq��q�A�q�6��11�cQQA���A��q��T�R��!�qQqQ�A�A�A�A�TB��5��q����1A�4�q�q����q�A���A��A�A�A����A�q�Q���q�A�5�q�11��1A��AcaQA�A�A�W�A�A��2A�4�qr�����A���A���B��bB��bD��4�q��q����A��1�����������������M�������|���R����������U�����4�����_���J�������{���&������������ �������� ��'��������'��*��A�����+��-��X�����-��/��q����2/��@3����!��V3��5����,��+5��<8����G��R8��A����x��A��C��)����C��aH��8����vH��Q��_����R��U������U��8W����5��%���LE��M��T��H��<N��Rx,T����G+(�wwUtils�U��WWUTILS#� �����C��������U� �TCSETTING �TVNEWVALUE�THIS�SET� �����T�����T��C��v4�%C �tvNewValueb�C�CC�f�ON�OFF ��SET &tcSetting &tvNewValue ��%�SET &tcSetting TO (tvNewValue) ��U� �TCSETTING �TVNEWVALUE�THIS�CSETTING �VOLDVALUE� �����T�����T���1�%C�lvValueb�C�CC�f�ON�OFF w��SET &lcSetting &lvValue ��"�SET &lcSetting TO (lvValue) ��U� �LCSETTING�LVVALUE�THIS�CSETTING �VOLDVALUEx �4��������T��CC��������6 �T�CC� �C����6�%C��m��B-��T�C�wwEvalN�%C� �<�C,�USE (lcTable) EXCLUSIVE IN 0 ALIAS (lcAlias)��� �F�8�C(�USE (lcTable) EXCLUSIVE ALIAS (lcAlias)����T��� �%� V�Q������h �F�� �B��U��LCTABLE�LCALIAS �LCOLDERROR�LLRETVAL�LOEVAL�EXECUTECOMMAND�LERRORE ���������T��CC��������6�%C��C� �T����T�C����%���T�C���C����T�C�� �C���5�T�CC������6�T�C���%��B-��C�� �C��Ba� �B��U� �TCFILENAME�TCSTRING�LCRETVAL�LNHANDLE�LNSIZEo���-��������� �!�%C �loInput.Classb�Ch��T�C�� �N���T�C�RelationN��T�C���b��(�_�T�CC���@�%C�,��,�'1�,classlibrary,baseclass,comment,controls,objects,)�class,name,helpcontextid,whatsthishelpid,,�tag,picture,onetomany,childalias,childorder,/�parent,parentclass,relationalexpr,controlcount,��.��T�C�loInput.�b �H[*� C �ALEN(loInput.��)b�Nf!�%C �loObject.�b�UD�C��[1]� ��%�lnLength = ALEN(loInput.&lcField) )�DIMENSION loObject.&lcField[lnLength] ��( �b'�%C�loInput.��[z]b�O L�loObject.&lcField[z] = CopyObject(EVAL( "loInput." + lcField + "[z]")) �^6�loObject.&lcField[z] = EVAL("loInput." + lcField) ��� ��O!�%C �loObject.�b�U�C��� ��=�loObject.&lcField = CopyObject(EVAL("loInput."+lcField)) �2[!�%C �loObject.�b�U%�C��� ��2�loObject.&lcField = EVAL("loInput." + lcField) �� �B��U ��LOINPUT�LOOBJECT�LAFIELDS�X�LCFIELD�LCTYPE�LLCLASS�LNCOUNT�Z�LNLENGTH�CLASS �ADDPROPERTY��������%C�� A��T�C �lcObjNameN���T�C�RELATIONN�C�nCount���C�aRows(1)��� �T���~��T�������^J�����T��� �B��U� �LCOBJNAME�X�LALITEMS�LORESULT �ADDPROPERTY�AROWS�NCOUNTl ���� ��� �T�C�%C �wwFileCacheC��F��~�3�h �wwFileCache��Cx��T��M��-�C��@ �%C4�#�%�����C� ��>�C��� ��C� �T���>�T�C��� �6�r �wwFileCache���C��@C���%C� \ �F�� �B��U � �LCFILENAME�LNREFRESHSECONDS�LCOUTPUT�LNHANDLE�LCALIAS �WWFILECACHE�FILENAME�TIMEREAD�CONTENT�FILE2VAR��4���5� �T�C �F��T�C�&�%C��M� �Q����Q����� �Q� �F���B�U� �PCNEWNAME �LCOLDALIAS�LCDBF�4�������5���� � ��%C�k�*�BC����C����6�"�T�CC�>���,��6$�T�CC�>� ��z!x��6 �T�CC� ��z!x��6�T�C����%�� �B����T��C�>�T �C���\�T �C� ��% ��b�BC � �\��T �C� ��% ���BC � �\� �%��BC �\� �B���U ��LCSTRING�LCDELIM1�LCDELIM2�LCDELIM3�LLENDOK�X �LNLOCATION�LCRETVAL�LCCHAR �LNNEWSTRING�LNEND �LCNEWSTRINGS��������T�C�������a�!�BC���������U��LCSOURCE�LCSTART�LCEND �LCREPLACE �LCEXTRACT�EXTRACT �4������%C��C7��T��ADD��%C��N��B��T��CCC��`@�T�CC�PATHv@�%��ADD�%C���C�� � �B���*�%C�;���;�;��;�� �B����T���;���*�%C�;���;�;��; > �B���%�T�C��;�;���;�;�T�C�C�>\��SET PATH TO &lcOldPath �B��U��PCPATH�PCMETHOD �LCOLDPATHp� ����)�T�CCC��@�//�/� ��/���%� [��T�C��www.����BC�2�U��LCURL �LLNOSTRIPWWW�LCTEXT�EXTRACT��������T�C���b �T�����(�!�T�C �loObject.C���b�%C��UO�!�T�C �loObject.C����%��C �C�>P ��T�C�P=�6�T��C C CC���@� = CC���_�|`�T��C C CC���@� = CC �loObject.C���b�O ��Object��NULL6�� �B��U��LOOBJECT�X�LNCOUNT�LCOUTPUT�LAFIELDS�LCTYPE�LVVALUE. ���������� �T� �+a�T�C�<pre����T�C�/pre>����%����� ��!��T�C�����\,�T�C��<p>C C C C !�T�C��<br>C C �T��C�����T��� �B���U��LCHTML �LNCOLWIDTH�LCPRE�LCFIXED �LCPRECOUNT�LNAT1�LNAT2 �LNPRECOUNT����'�lcHTML = STRTRAN(lcHTML,"<","<") '�lcHTML = STRTRAN(lcHTML,">",">") )�lcHTML = STRTRAN(lcHTML,["],""") �B���U��LCHTMLy�����T��C��C C C �T��C��C C �T��C��C C �<p>�BC��C �<br>�U��LCHTML�����@�T��CC�tcUrlb�C�����http://www.west-wind.com/6.�T�CC�tcActionb�C����OPEN6 �T�CC� �C]��6.�| �ShellExecute �SHELL32.dll!�| �FindWindow�WIN32API(�BCC�9�������������U ��TCURL�TCACTION �TCDIRECTORY �SHELLEXECUTE�SHELL32�DLL �FINDWINDOW�WIN32API�CAPTION�������T��CC��������64�T�CC��C]�\ww_HTMLView.htm��6�C������ �%C �loWebBrowserb�O��C�������%C �_oscreenxb�O��C������C�����B�U��LCHTML�LCFILE �LOWEBBROWSER�FILE2VAR�NAVIGATE �_OSCREENX�GOURLy�������%C�R�4�T�CC��C]�\ww_HTMLView.xml��6� � ��BC���������U��LCHTML�LCFILE �LOWEBBROWSER�SHOWHTML�������%C�R�4�T�CC��C]�\ww_HTMLView.txt��6�$�%C��C ���MODI ��C������ �/��B��BC���������U��LCHTML�LCFILE �LOWEBBROWSER�FILE2VAR�SHOWHTML�����T�C�wwAPINW�T�C ��,�SOFTWARE\Microsoft\Windows NT\CurrentVersion�CurrentVersion���%�� ��%C���B-���Ba���%C�� �B� �BC�g�U��LLRETURNVERSIONNUMBER�LOAPI �LCVERSION�READREGISTRYSTRING,������T�CC���<��6�T�CC���>��6�%C����j� �B���'�T��C����BR�C C 2�T��C����P�C C C C '�T��C����br�C C 2�T��C����p�C C C C 1�lcHTMLText = STRTRAN(lcHTMLText," "," ") �T��x�+C� �T�C���������%C��!��T��C��������/�lcHTMLText = STRTRAN(lcHTMLText,"<","<") /�lcHTMLText = STRTRAN(lcHTMLText,">",">") �B���U� �LCHTMLTEXT�LCLTAG�LCRTAG �LCEXTRACT�EXTRACTN�����T�CC���@0_R+�B�#C�\C�\C�=�U� �LNRGBCOLOR�LCCOLORw���� ��� �T����(C��>g�/�T��CC���\�� �B��U��TCWORD�I�LNWORD-�������BC�����U��LCSTRING�LCSOURCE �LCREPLACE� �����T�C�CENTURYv�T�C�DATEv�G �G (�YMD �%�m��T��'C���'���T��{^C���}��SET DATE TO &lcDateMode �SET CENTURY &lcCentury �B��U��LTTIME�LLSQL �LCCENTURY �LCDATEMODE�YMD�LCDATE1�����%C��� �B��� �BC��*�U��LDDATE�����%C��� �B����%C���DTI��T�C���^� �T����0�BC�\�/C� \CC�\@�U��LTTIME �LCTIMESTAMP �H ��� C���;��T�C���� ����b��T�C]C� C�.APPC�]���T�CC�]�2��T�CC�]�%C �PROCEDURE����T�C�C�:�\�� �BC��U� �APPLICATION �STARTMODE�LCPATH �SERVERNAME����+�|�GetShortPathName�Win32API �T�����T�CX�T�C�>�T�C�������%��� �B����BC��=�U��LCPATH�GETSHORTPATHNAME�WIN32API �LCSHORTNAME�LNLENGTH�LNRESULT� �4����5����T�CC��,��6�T�C�����(��+�T�CCC���*� C����%��C �� CC��C������Ba�U� �LCFILESPEC �LNTIMEOUT�X�LNFILES�LOAPI�LAFILES�LDTIMEG���� ���%C����DH 9��B-��Ba�U��LCPATH�LATEMPm���� ����T�C���%�=� �B��T�C�� �C� �B��U� �LCFILENAME�LH�LNSIZE� ����+�T�CC�lcStyleb�C�C�f���6�%��WEBa��T��C���\�/���T��C���/�\� �B���U��LCPATH�LCSTYLEG����(3��%CC��]/��!�� �B���U��X�����������T�C�� ���� �T���(���%�� �'�T���C��C����\���T���C��\��T�C���C�>� �B��U��LARESULT�LCSTRING �LCDELIMITER �LNLASTPOS �LNITEMCOUNT�I���������%C��>�1�| �URLDecode �WWIPSTUFFQ �API_URLDecode�T�C����%����T��C���\�� �T����� �B����T��C���+� �T��� �+a�T�C�%��"�%�C��>�� 6�T�����!��T�C���\(�T��C���=CC�0x� �%C��>��T��C���\��!�� �B��U��LCTEXT�LNSIZE�LNLOC�LCHEX�LCRETVAL �URLDECODE �WWIPSTUFF �API_URLDECODE� ����������"�T�CC�������&��6�T�CC��� ��6�T�C�� �+'�T�C��&��=�&�BC����U� �TCURLSTRING�LCKEY�LNLOC�C2�CSTR �LCURLSTRING�LCRETVAL �URLDECODE���������%C��>��T�C��>�T��C���%�| �VFPURLEncode �WWIPSTUFF�T�C������%����BCC��`�\� �B��� �T�����(C��>�T�C���\:�%C�$�ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789�L�T����.��%�� x�T���+�.�$�T���%CCC��@0_R� �B��U��TCVALUE�LCRESULT�LCCHAR�LNSIZE�X �VFPURLENCODE �WWIPSTUFFP����������T�C�wwEvalN�BC�����������U��TCSTRING �TCDELIMITER �TCDELIMITER2 �LLNOASPSYNTAX�__LOEVAL �MERGETEXT�������%C��%��B-��T�C�wwAPIN,�T�C ����������\CLSID�����%C�� �T��� �T����B-�#�T�C ���������������%C�� �T�����Ba�U��LCPROGID �LCCLASSID�LCCLASSDESCRIPT�LOAPI�READREGISTRYSTRING�LCCLASSDESCRIPTION����������%C��0 5��B-� �T�-�%� 8�T�C]C�T�C�� �� �|�DllRegisterServer���%C����%� �&�R,:��� has been registered...� �T�a�*/�R,��� could not be registered...� ���"�|�DllUnregisterServer���%C���%� (�R,:��� has been unregistered...� �T�a�� �B��U� �LCSERVERPATH �LLUNREGISTER�LLSILENT�LLRETVAL�LCPATH �LCOLDPATH�DLLREGISTERSERVER�DLLUNREGISTERSERVER�����������9�T�CC�lcRunAsb�C����Interactive User6*�T��CC�lcProgIdb�C������6�T�CC������6�T�C�wwAPIN,�T�C ����������\CLSID����&�T�C ����������������%C��C� C�R,:�Invalid Class Id...�B�K�R,: �Configuring server security for C C ��C C ��%C� &#�%C�dcompermissions.exe0 4�R,$�Couldn't find dcompermissions.exe...�B�"�T�C�dcompermissions.exe�T�C���F�T ��RUN �� -runas �� �� � � > dcom.txt �&lcCMD �T �C�DCOM.TXT� �DCOM.TXT&�%C � �C�ERROR: �� "I�C��C  �Account:  �C C  �0�DCOM Permissionsx�B-��eC�%C ���SOFTWARE\Classes\CLSID\��AppId��a�� )�R,:�Unable to write AppID value...�B�5�%C ��������AppID\�C� C� a�� '�R,:�Unable to write AppID key...�B�-�C ��������AppID\�����a��2�C ��������AppID\��RunAs��a���-�R,:�DCOM security context set to: ��B�U��LCPROGID�LCRUNAS �LCPASSWORD�LOAPI �LCCLASSID �LCSERVERNAME�READREGISTRYSTRING�LCPATH �SHORTPATH�LCCMD�LCRESULT�DCOM�TXT �LCUSERNAME�WRITEREGISTRYSTRING������%C�� u� �T����T�C������%C�q��R,�Invalid Prog ID�B-��� �T����"�T�C�dcompermissions.exe�T�C����%C�"E�T��RUN �� -da �� set �� permit > dcom.txt �T��{E�T��RUN �� -aa �� set �� permit > dcom.txt �T�� �&lcCMD �T �C�DCOM.TXT� �DCOM.TXT&�%C � �C�ERROR: �� &I�C��C  �Account: �C C  �0�DCOM Permissionsx�B-��%C�E�T��RUN �� -dl �� set �� permit > dcom.txt �T��E�T��RUN �� -al �� set �� permit > dcom.txt �T�� �&lcCMD �T �C�DCOM.TXT� �DCOM.TXT&�%C � �C�ERROR: �� I�C��C  �Account: �C C  �0�DCOM Permissionsx�B-��B�U ��LCPROGID �LCUSERNAME �LCERRORMSG �LCCLASSID�LLRESULT �ISCOMOBJECT�LCPATH �SHORTPATH�LCCMD�LCRESULT�DCOM�TXTK ������������ �T�X �T�Z�T�#�|�GetActiveWindow�win32api#�|�GetActiveWindow�win32api�|�GetDC�win32api$�| �GetDeviceCaps�win32api�T�C ��T�C�� ��T�C���� ��T�C���� ��T���� �T��� �B�U � �LNXFACTOR �LNYFACTOR �LN_X_PIXELS �LN_Y_PIXELS�LN_TWIPS �LN_PARTIAL_X �LN_PARTIAL_Y�LN_HWND�LN_HDC�GETACTIVEWINDOW�WIN32API�GETDC �GETDEVICECAPS"����T�C�wwAPIN�%�� �b�T�C�HKLM5�SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon�DefaultPassword����b�T�C�HKLM5�SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon�DefaultUserName����%C� �B��� �B��U� �LLUSERNAME�LOAPI�LCPASS�READREGISTRYSTRINGT����J�BCCX�Please enter your password�Password Entry�PASSWORD��U� �LCMESSAGE �INPUTFORMJ����������5����%CtK� �T ���^� �T ���T��CC��������6)�T�CC�� �Please enter��6�T�CC��9 ���6�T�CC��,��6!�T�CC� ����6�T�CC���@K��6�T �C� �T����T�C�frmInputN�T� ���T� ���T� ���T����T����%��PASSWORD�T���@K�T����*� �C���%C�pcResultb�C%�T��C�`�: �T���� �B���U��LCVALUE �LCMESSAGE �LCCAPTION �LNFORMWIDTH �LNFIELDWIDTH�LCFORMAT �LCCANCELVALUE�PCRESULT�O �PCCANCELVALUE�CAPTION�LCTYPE�WIDTH �NFIELDWIDTH�CMESSAGE�CFORMAT�TXTINPUT �PASSWORDCHAR�SHOW��T���9��T��������T��������T��� � ��U�T�� � � ���%C�� � ��%C�@�� ����T��� ��� ����T������ ����U��THIS�ICON�TXTINPUT�WIDTH �NFIELDWIDTH �LBLMESSAGE�CAPTION�CMESSAGE �CMDCANCEL�LEFT�THISFORM�CMDOK�CFORMAT�FORMAT �INPUTMASK ��<���U��THISFORM�����%C���T��C�pcResultb �H:��� ���CMZ� �T���� ���NIBY��T�  � ���DT��T���������� ���L� �T�-��� �T����<��U��LCTYPE �PCCANCELVALUE�PCRESULT�THISFORM*�������C�������B�U��LNBYTESDOWNLOADED �LNBUFFERREADS�LCCURRENTCHUNK�THIS�PARENT �VPROGRESS�InitF�������Set�������Destroyx����� �OpenExclusiveS�����File2Var���� �CopyObject�����CursorToObjectArrayi ���� �CacheFile �����WrCursor �����Extract.���� �ReplaceTextr�����Path���� �DomainName���� �PropertyDumpi���� �FixPreTags8�����FixHTMLForDisplay���� �DisplayMemoJ�����GoUrl�����ShowHTMLC�����ShowXML�����ShowText&�����IsWinnt���� �StripHTML.���� �HTMLColor���� �CharToBin�����StrTranC ���� �TimeToCStrict �����DateToC!�����TimeToC"�����GetAppStartPath"���� �ShortPath#���� �DeleteFiles$�����IsDir�&�����FileSize[&�����Slash&���� �ProgLevel'���� �AParseString'���� �URLDecode)�����GetURLEncodedKey+���� �URLEncode,���� �MergeText .���� �IsCOMObject.�����RegisterOleServer/�����DCOMCnfgServer)2�����DCOMLaunchPermissionsm7���� �TwipsFactor};�����GetSystemPasswordd=���� �GetPassword>���� �InputForm'?�����Show:B���� �cmdOk.ClickC�����cmdCancel.ClickC�����OnFTPBufferUpdateD����,� ���� ����� ����� ������U��CSETTING �VOLDVALUE �T���T� �Please enter: �T��� �T�� �T�� �T�Z�T�, �T�-�T��frmInput �T � �T �a �T � �T � �T �- �T � �T�-�.�Q��a� �Message Text:��� �Q� �lblMessage��Tahoma�{�.�Q���pcResult����u��txtInput��Tahoma�a��.�Q��7�����F��OK�a��Tahoma��-��cmdOK�.�Q��7���K��F��\<Cancel��Tahoma��a� �cmdCancel ��2��� ��3��� ��4����U� �NFIELDWIDTH�CMESSAGE�CFORMAT�TOP�LEFT�HEIGHT�WIDTH �CONTROLBOX�NAME �WINDOWTYPE �AUTOCENTER �SHOWWINDOW �BORDERSTYLE �MINBUTTON �MAXBUTTON �LBLMESSAGE�LABEL�AUTOSIZE�CAPTION�FONT�FONTSIZE�TXTINPUT�TEXTBOX �CONTROLSOURCE�DEFAULT�CMDOK �COMMANDBUTTON�THISFORM�FONTNAME�CANCEL �CMDCANCEL � ��5����U���wwEnv�CustomuI�����frminput�formI�����myFtp�wwFTPM����`1��Q7��"C�QA�7���!A�@1����q�A�b��A��a��A��5���R�#!Q!�A���!q�A���q�A��4�|�2�A�SqAdA�A��qA�Tqq�bA�A�#A��A�#A�A��4�{��aA���!A��4����q��4B��4A���!bB��A��5�}�q������A�r��B�3�}�A�#A"�A�2#"QA�&QA���A���1�15��q�RA��A�A�BQB�A��A�a��A�QA��5���A��4�x��R�q!A�a�A�A��5��q��A�A�RA��4�0q�rq�3�v�r`1�`�4��A"�A��B�B�4���AA��a3���AA�B!�A�A�b4�u�Rs��q��q�A�A���A��6��b�A�s!q!��A�A�A��3�w�5�w���A��3�� 1��b1a����A��3�w���A��6�w���A�b��A�4��1S!Q�QA�A��5�w����A��4���RrQA�A�r�5�w��q�A�q�3�v���!�A�R��5��Aq�qA��4�vAA�A�A��4���b��rr�A�A��3�w�13"Q��A��A�s��2#A�A�sa�A�A�A��5��q"qs�5�x�14�aUb1A��A��QA�A�!!A�A�BA��P1�`1q�a6���q�A�R���q�A�4��A�r�3���q�A���!�"�aA���A���""�A��A�A��3��1SbA�A�1AA�A�!!c��bq�A��5A�A�UqA�A�'A�A�1���a�q�A���A�"!�R��R�A���bq�A��R��R�A���bq�A�B�8�����21A�!baA�;�q�R�!�!A���A��<�q�5�q�q����A��!AA�����A��P1�!aa1a�aA�A�2�q�2�q��q�1�Q11!�A���A�q�9��AA�1������1��������Q������� +���01��4��������������������H����%������)��&��.����������@������4 ����`���/���#�������G���0�������q��� ��z$�������$��Q*��8�����*��.��n�����.��7�������7��W8�������8��<�������<��c?�������|?��C��#�����C��H��B�� ��!H��J��d����J��aQ������sQ��W����$��X��Y\����2��m\��_�� ��9��_��Vc����D��jc��)f��7��S��?f�� l��U��j�� l��|n����n��n��p����v��p��s����z��s��u������/u��w������3w��y������z��d~������z~��4��%����L��]��=����Ƅ��q��X������\��g����n����~������p��������h������~������ ����̙������)������1��������7��������H��ٴ��Ϻ����g������ ��������������D������b��������$��������"���� �������������������� ������"��������&���������-�� ����J��F��u������0 ���m�������������������PLATFORM���C������������������UNIQUEID���C ��� ���������������TIMESTAMP��N��� ���������������CLASS������M������������������CLASSLOC���M!������������������BASECLASS��M%������������������OBJNAME����M)������������������PARENT�����M-������������������PROPERTIES�M1������������������PROTECTED��M5������������������METHODS����M9������������������OBJCODE����M=�����������������OLE��������MA������������������OLE2�������ME������������������RESERVED1��MI������������������RESERVED2��MM������������������RESERVED3��MQ������������������RESERVED4��MU������������������RESERVED5��MY������������������RESERVED6��M]������������������RESERVED7��Ma������������������RESERVED8��Me������������������USER�������Mi������������������ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� COMMENT Class ������������������������������������������������������������������������������� WINDOWS _RSF1BV09P 661345687��a��S��������������+�������������������������*��8���������� COMMENT RESERVED ������������������������������������������������������������������������������ WINDOWS _S4V1AH8YO 675178905 ��J�� ��)������ ������2�� �����������t��"����������������/ ������ COMMENT RESERVED ������������N������������������������������.���������������������������������� WINDOWS _RRH1DWTNG 690648672������3��"������ ������Q������������ �������������������� COMMENT RESERVED ������������v������������������������������������������������������������������ WINDOWS _RVI03274G 729423083�������������� ����dK��U(���������������������� ���������� COMMENT RESERVED ������������������������������������������������������������������������������ WINDOWS _RRH1DWTNG 742112186 �� �� �� ������/������B����������� ��}������������ ������������ COMMENT RESERVED ������������������������������������������6(���������������������������������� WINDOWS _RZW1FBE3Y 742369059 �� ��! �� ������0������Q=�o��������� ����V���������� ��["�� ������ COMMENT RESERVED ������������ ������������������������������(���������������������������������� WINDOWS _0FJ1DT3YH 742564038������ ��{ �����������up��7a������������p��HR���������������������� COMMENT RESERVED ������������:������������������������������'���������������������������������� WINDOWS _RSF1BV09P 749124300������ �� ������%^��D ���@����������A��y����������1��_������ COMMENT RESERVED ������������_������������������������������'�����������������������������������}���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������VERSION = 3.00������ wwhttpfile������Pixels������HTTP File transfer class. Allows sending of files from a VFP client to a Web Connection back end server. Both client and server methods are provided.������Class������1������ ahttpdata������ wwhttpfile������=chttplink = wc.wcs?wwHTTPData~SendFile Name = "wwhttpfile" ������custom������ wwipstuff.vcx������ ahttpdata������ authorize ������Pixels������Pixels������ ..\qj\������ ..\qj\������Abstract HTTP transfer class������Class������1������custom������ ahttpdata������custom������Class������ wwhttpcom������ wwipstuff������1������1������1������ wwhttpasync������cpollfile nstartseconds ������Pixels������ wwipstuff.bmp������ wwipstuff.bmp������Class������1������timer������custom������ wwhttpcom������wwsocket������ wwipstuff.vcx������ ..\wconnect.h������1������1������Pixels������ ..\wconnect.h������clog ������ wwipstuff.bmp������Class������ wwipstuff.bmp������ wwhttpasync������timer�����cforcedsavepath Directory (physical or relative) used to save an uploaded file to. If specified this directory is used to save files, otherwise the client may determine where to save the file with filespeck. RECOMMEND YOU SET THIS VALUE! ctargetfile Filename to save to on the server only. If cForceSavePath is not set the client may specify a full path. Otherwise, only the file portion will be used and appended to the forced path. csourcefile Filename used on the client to send file. Physical (DOS) path on disk. *sendfile Method called by client to upload a file to the server. *s_sendfile Server Request Method that is can handle a file send with SendFile. Fully self-contained as a WC process method. ������Pixels������Class������custom������ wwipstuff������ZAllows downloading of HTTP data in the background. Event notifcation occurs on completion.������wwsocket������custom������custom������wwftp������Pixels������ ahttpdata������ ..\wconnect.h������Class������custom������ wwipstuff������wwftp������custom������ ..\wconnect.h������Hcdllpath hhttpsession hipsession lhttpcanceldownload setproxylogin ������ wwipstuff.vcx������custom������ wwipstuff.vcx������ohttp = .NULL. cservername = lsecure = .F. cusername = cpassword = cerrormsg = nerror = 0 lerror = .F. chttplink = wc.wcs?wwHTTPData~Execute nmaxbuffersize = 0 liszipped = .F. Name = "ahttpdata" ������Height = 16 Width = 100 cprogid = cmethod = clocation = cresultbuffer = crequestid = cexcludedobjects = scripting.filesystemobject,scripting.file, crequestbuffer = chttplink = wc.wc?wwHTTPData~HTTPCom Name = "wwhttpcom" ������ wwhttpdata������ ahttpdata������Class������Pixels�����Height = 23 Width = 23 Enabled = .F. Interval = 1000 oip = .NULL. cserver = clink = cusername = cpassword = lsecure = .F. lbusy = .F. cpollfile = ntimeout = 30 cresultbuffer = lerror = .F. cerrormsg = nstartseconds = 0 nbuffersize = 65535 Name = "wwhttpasync" ������ntimeout = 10 nerror = 0 cerrormsg = lstripnulls = .T. llogsession = .F. clogtext = olog = .NULL. nbuffersize = 512 nlastreadsize = 0 Name = "wwsocket" ������ wwhttpdata������ ..\wconnect.h�����CPROCEDURE authorize LPARAMETER lcAuthUser, loProcess lcAuthUser=UPPER(IIF(EMPTY(lcAuthUser),"",lcAuthUser)) lcUserName=UPPER(Request.GetAuthenticatedUser()) IF !EMPTY(lcAuthUser) IF (lcAuthUser = "ANY" AND EMPTY(lcUserName)) AND lcUserName # lcAuthUser loHeader = CREATE("wwHTTPHeader") loHeader.DefaultHeader() loHeader.Authenticate(Request.GetServername(),"Error: Authentication failed...") Response.Write(loHeader.Getoutput()) RETURN .F. ENDIF ENDIF ENDPROC PROCEDURE Init THIS.oHTTP=CREATE("wwIPStuff") ENDPROC �����oip wwIPStuff object used to create connection and file access cserver clink cusername cpassword lsecure lbusy cpollfile The temporary result file that holds the HTTP result before returning it to you. ntimeout The timeout for the request in seconds. When timeout is up CancelRequest() is called. cresultbuffer lerror cerrormsg nstartseconds nbuffersize Size of the result buffer. Set this to 0 to allow any size buffer to be returned. *navigatecomplete *startrequest *addpostkey *cancelrequest ����� vPROCEDURE sendfile LPARAMETER lcFileName LOCAL lcFileName, lcZipname, lcFileText, lnResult, lcbuffer, lnSize THIS.lError = .F. lcFileName=IIF(EMPTY(lcFileName),THIS.cSourceFile,lcFileName) IF THIS.lIsZipped lcZipname = SYS(2023) + "\WWZ_" + SYS(3) + ".zip" IF THIS.oHTTP.ZipFiles(lcZipName,; lcFileName) # 0 THIS.cErrorMsg = "Error: unable to zip the file or file not found." THIS.lError = .T. THIS.nError = 0 RETURN .F. ENDIF lcFileText = THIS.oHTTP.EncodeDBF( lcZipName ) ERASE (lcZipName) ELSE lcFileText=THIS.oHTTP.EncodeDBF(lcFileName,.T.) ENDIF IF EMPTY(lcFileText) THIS.cErrorMsg= "Error: Couldn't find the file..." THIS.nError = 0 THIS.lError = .T. RETURN .F. ENDIF lnResult = THIS.oHTTP.HTTPConnect(THIS.cServerName,THIS.cUsername,THIS.cPassWord,THIS.lSecure) IF lnResult # 0 THIS.cErrorMsg = THIS.oHTTP.cErrorMsg THIS.nError = lnResult THIS.lError = .T. RETURN .F. ENDIF THIS.oHTTP.nHTTPPostMode = 2 && Send Multipart form THIS.oHTTP.AddPostKey("txtFileBuffer",lcFileText) THIS.oHTTP.AddPostKey("txtFileName",THIS.cTargetFile) THIS.oHTTP.AddPostKey("txtMaxBufferSize",LTRIM(STR(THIS.nMaxBufferSize))) IF THIS.lIsZipped THIS.oHTTP.AddPostKey("IsZipped","True") ENDIF lcbuffer = SPACE(THIS.nMaxBufferSize) lnSize = THIS.nMaxBufferSize lnResult = THIS.oHTTP.HTTPGetEx(THIS.cHTTPLink,@lcBUffer,@lnSize) IF lnResult # 0 THIS.cErrorMsg = THIS.oHTTP.cErrorMsg THIS.nError = lnResult THIS.lError = .T. RETURN .F. ENDIF IF lcBuffer # "OK" THIS.cErrorMsg = lcBuffer THIS.lError = .T. THIS.nError = 0 RETURN .F. ENDIF RETURN .T. ENDPROC PROCEDURE s_sendfile LPARAMETER loProcess, lcAuthUser *** Check for Authorization - if it fails sends Authentication request *** or failure message IF !THIS.Authorize(lcAuthUser, loProcess) RETURN .f. ENDIF THIS.lError = .f. lcFileText = Request.GetMultiPartFormVar("txtFileBuffer") llIsZipped = IIF(EMPTY(Request.GetMultiPartFormVar("IsZipped")),.F.,.T.) lcTargetFile = Request.GetMultiPartFormVar("txtFileName") IF EMPTY(lcTargetFile) OR llIsZipped *** Retrieve the filename from the encode header lcTargetFile = TRIM(SUBSTR(lcFileText,6,40)) ENDIF *** Override the save path explicitly *** NOTE: always overridden in FULL - no relative or physical allowed if specified IF !EMPTY(THIS.cForcedSavePath) lcTargetFile = ADDBS(THIS.cForcedSavePath) + JustFname(lcTargetFile) ENDIF IF !THIS.oHTTP.DecodeDBF(lcFileText,lcTargetFile) Response.Write("Error: Invalid file format...") RETURN .F. ENDIF IF llIsZipped *** Unzip the real file and then delete the ZIP file IF THIS.oHTTP.UnzipFiles(lcTargetFile,JustPath(lcTargetFile),"*.*" ) # 0 ERASE (lctargetFile) Response.Write("Error: Unzipping failed. Most likely you selected too many messages to download...") THIS.lError = .T. RETURN .f. ENDIF ERASE (lctargetFile) && get rid of the ZIP file ENDIF loProcess.oResponse.Write("OK") RETURN .T. ENDPROC �����ohttp Internally used object to hold wwIPStuff object. cservername Server DNS name or IP address lsecure Whether to use SSL or not. cusername User name for Basic Authentication on the Web Server cpassword Password for Basic Authentication on the server. cerrormsg nerror Error number - reserved for future use. lerror chttplink Relative Server HTTP link to specify the request to run. nmaxbuffersize Maximum size of the file or result to send. If this value is 0 any size is allowed. liszipped If the DynaZip DLLs are installed on the client and server you can optionally Zip the result cursor for faster transmission. *authorize Authenticates users on the server side. ������LThe FTP class provides for basic FTP functionality for uploads and downloads�����"cprogid ProgId of the server to execute. cmethod Method to execute on the server. This method call should include all parameter values inside of parenthesis (). Parameters must be literal. clocation Optional DCOM machine name where the component is to run. The component must be registered on the target machine and the client must either also have this component or at least its type lib registered. cresultbuffer The full result buffer from the request crequestid Unique ID that identifies a request uniquely from the client side. Set in Execute and/or CreateXML cexcludedobjects These objects, specified in a comma delimited list, may not be activated. This applies only to the server side. callowedobjects Add objects to the list of allowed objects. crequestbuffer *callcomobject Calls a COM object remotely by passing in a ProgId and full method call interface. *execute *s_execute Server side execution routine that pulls the parameters out of the request data and then calls the COM object. *createxml Creates the HTTPCOM XML structure from the call parameters *createerrorxml Creates a full Error XML response. *returnvaluefromxml Returns the actual result value from the COM call rather than the XML. THis method parses the result XML and retrieves the actual value including proper type. ������� �..\wconnect.hs,������� �..\wconnect.hs,������� �..\wconnect.hs,������� �..\wconnect.hs,����� �����������������������������Aa���%��� ��������4���������������U��� �����U��LCREQUESTBUFFER�LLERROR3�%���W��T���a2�T���"�Control is already in use and busy�B-�+�T���C]�\wwip_C]�.tmp�T���-�T������T������T���C(�C�� ��� ��� ��� �����"�C������������ ��T���a�T���a�Ba�U��THIS�LBUSY�LERROR �CERRORMSG �CPOLLFILE �CRESULTBUFFER �NSTARTSECONDS�OIP �HTTPCONNECT�CSERVER �CUSERNAME �CPASSWORD�LSECURE�HTTPGETEXASYNC�CLINK �NBUFFERSIZE�ENABLED&� �����C���������U��TCKEY�TCVALUE�THIS�OIP �ADDPOSTKEY��T���-�T���-�U��THIS�ENABLED�LBUSY��T���C �wwIPStuffN�U��THIS�OIP�T���-�%C���0��T���C�����%C���>�� � ����T���-�%����Error: ��T���a�T���C���\��C������������T���a���%�� ��� �C g �C�� ��T���a!�T����Request timed out)�C�Error: Request timed outa����}�T���a���U ��THIS�ENABLED �CPOLLFILE �CRESULTBUFFER�FILE2VAR�LBUSY�LERROR �CERRORMSG�NAVIGATECOMPLETE �NSTARTSECONDS�NTIMEOUT �CANCELREQUEST�navigatecomplete,����� �startrequestX����� �addpostkey?���� �cancelrequest�����Init�����Timer����1��2��!q�A���!��r�2��2���2�6��!sa���A���A������A�A�3�����������������������������������������������������"��H��!������c����&����������.����)���������������������������� �..\wconnect.hs,�����csql = csqlcursor = THTTPQuery callowedcommands = select,execute callowedtables = nresultsize = 0 nresultmode = 0 cxmlresult = lcreatexmlstructure = .F. nxmlmode = 0 csqlconnectstring = csqlparameters = ohttp = .NULL. cservername = lsecure = .F. cusername = cpassword = cerrormsg = nerror = 0 lerror = .F. chttplink = wc.wcs?wwHTTPData~Execute nmaxbuffersize = 200000 liszipped = .F. Name = "wwhttpdata" ������Height = 17 Width = 98 HelpContextID = 703 nftpworkbuffersize = 4096 lcanceldownload = .F. hftpsession = 0 nftpbinary = 1 cftpserver = cftpsource = cftptarget = nhttpport = 21 cserver = Name = "wwftp" ������Internet Protocol Class that encapsulates simplefied SMTP, HTTP, FTP, DNS resolution and RAS dialing. Relies on wwIPStuff.dll for various support functionality to access TCP/IP and WinInet functions.�����PROCEDURE callcomobject LPARAMETER lcProgId, lcMethod, lcLocation LOCAL loXML, lcXML, lcResult, lcCode, loEval, lcOutput lcProgId=IIF(EMPTY(lcProgId),THIS.cProgId,lcProgId) lcMethod=IIF(EMPTY(lcMethod),THIS.cMethod,lcMethod) lcLocation=IIF(EMPTY(lcLocation),THIS.cLocation,lcLocation) loXML = CREATE("wwXML") *** We support XML input as well IF ATC("<?xml",lcProgId) = 1 loXML = CREATE("wwXML") lcXML = lcProgId lcProgId = loXML.GetObjVar("ProgId",lcXML) lcMethod = loXML.GetObjVar("Method",lcXML) lcLocation = loXML.GetObjVar("Location",lcXML) THIS.cProgId = lcProgId THIS.cMethod = lcMethod THIS.cLocation = lcLocation ENDIF *** Handle security issues with allowed objects IF !EMPTY(THIS.cAllowedObjects) IF ATC("," + lcProgId + ",","," + THIS.cAllowedObjects + ",") = 0 RETURN THIS.CreateErrorXML(lcProgId + " is not in the list of allowed objects to be executed.",-1) ENDIF ELSE *** Otherwise check for excluded objects IF ATC(lcProgId + ",",THIS.cExcludedObjects) > 0 RETURN THIS.CreateErrorXML(lcProgId + " is excluded from remote access for security reasons.",-1) ENDIF ENDIF lcResult = "" IF EMPTY(lcLocation) loXML = CREATE("wwXML") lcCode = ; "PRIVATE loObject" + CRLF + ; "loObject = CREATEOBJECT('" + lcProgId + "')" + CRLF + ; "lvResult = loObject." + lcMethod + CRLF + ; "RETURN lvResult" + CRLF ELSE lcCode = ; "PRIVATE loObject" + CRLF + ; "loObject = CREATEOBJECTEX('" + lcProgId + "'," +lcLocation+ ")" + CRLF + ; "lvResult = loObject." + lcMethod + CRLF + ; "RETURN lvResult" + CRLF ENDIF *** Safely Evaluate this block of code with CodeBlock loEval = CREATE("wwEval") loEval.Execute(lcCode) *** Check for errors IF loEval.lError lcOutput = THIS.CreateErrorXML(loEval.cErrorMessage,loEval.nError) ELSE *** Generate the result XML lcResult = TRANSFORM(loEval.Result) IF CHR(13) $ lcResult OR ">" $ lcResult OR "<" $ lcResult OR "&" $ lcResult OR CHR(0) $ lcResult lcResult = "<![CDATA[" + TRIM(STRTRAN(lcResult,CHR(0),"�")) + "]]>" ENDIF lcOutput = [<?xml version="1.0"?>] + CRLF +; [<httpcom>] + CRLF +; [ <comresult>] + lcResult + [</comresult>] + CRLF +; [ <resulttype>] + VARTYPE(loEval.Result) + [</resulttype>] + CRLF + ; [</httpcom>] + CRLF ENDIF RETURN lcOutput ENDPROC PROCEDURE execute LPARAMETER lcProgId, lcMethod, lcLocation LOCAL loIP, lnResult, lcbuffer, lnSize, loXML, lcValue, lcType THIS.cProgId=IIF(EMPTY(lcProgId),THIS.cProgId,lcProgId) THIS.cMethod=IIF(EMPTY(lcMethod),THIS.cMethod,lcMethod) THIS.cLocation=IIF(EMPTY(lcLocation),THIS.cLocation,lcLocation) lnResult = THIS.oHTTP.HTTPConnect(THIS.cServerName,THIS.cUsername,THIS.cPassWord,THIS.lSecure) IF lnResult # 0 THIS.cErrorMsg = THIS.oHTTP.cErrorMsg THIS.nError = lnResult THIS.lError = .T. RETURN .F. ENDIF ** Convert property values into XML string THIS.cRequestBuffer = THIS.CreateXML(lcProgId,lcMethod,lcLocation) *** And post that buffer to the server THIS.oHTTP.AddPostKey("RESET") THIS.oHTTP.AddPostKey("",THIS.cRequestBuffer) lcbuffer = "" lnSize = 0 lnResult = THIS.oHTTP.HTTPGetEx(THIS.cHTTPLink,@lcBUffer,@lnSize) THIS.cResultBuffer = lcBuffer IF lnResult # 0 THIS.cErrorMsg = THIS.oHTTP.cErrorMsg THIS.nError = lnResult THIS.lError = .T. RETURN .F. ENDIF *** Check for blank result IF EMPTY(lcBuffer) THIS.cErrorMsg = "No data returned" THIS.nError = -1 THIS.lError = .T. RETURN .F. ENDIF RETURN THIS.ReturnValueFromXML(lcBuffer) ENDPROC PROCEDURE s_execute LPARAMETER loProcess IF VARTYPE(loProcess) = "C" lcXML = loProcess ELSE Request = loProcess.oRequest Response = loProcess.oResponse lcXML = Request.cFormVars ENDIF IF ATC("<?xml",Request.cFormVars) > 1 lcXML = Request.cFormvars loXML = CREATE("wwXML") lcProgid = loXML.GetObjVar("ProgId",lcXML) lcMethod = loXML.GetObjVar("Method",lcXML) lcLocation = loXML.GetObjVar("Location",lcXML) lcRequestId =loXML.GetObjVar("RequestId",lcXML) ELSE lcProgId = Request.Form("ProgId") lcMethod = Request.Form("Method") lcLocation = Request.Form("Location") lcRequestId = Request.Form("RequestId") ENDIF Response.Write( THIS.CallCOMObject(lcProgid,lcMethod,lcLocation) ) RETURN ENDPROC PROCEDURE createxml LPARAMETER lcProgId, lcMethod, lcLocation lcProgId=IIF(EMPTY(lcProgId),THIS.cProgId,lcProgId) lcMethod=IIF(EMPTY(lcMethod),THIS.cMethod,lcMethod) lcLocation=IIF(EMPTY(lcLocation),THIS.cLocation,lcLocation) THIS.cRequestId = sys(2015) RETURN ; [<?xml version="1.0" ?>] + CR + ; [<httpcom>] + CR + ; [ <requestid>] + THIS.cRequestId + [</requestid>] + CR + ; [ <progid>] + lcProgId + [</progid>] + CR + ; [ <method>] + lcMethod + [</method>] + CR + ; [ <location>] + lcLocation + [</location>] + CR + ; [</httpcom>] + CR ENDPROC PROCEDURE createerrorxml LPARAMETER lcMessage, lnError, lcDocRoot LOCAL loXML, lcOutput lcDocRoot=IIF(EMPTY(lcDocRoot),"httpcom",lcDocRoot) lnError=IIF(EMPTY(lnError),0,lnError) loXML = CREATE("wwXML") lcOutput = [<?xml version="1.0" ?>] + CRLF +; [<] + lcDocRoot + [>] + CRLF +; loXML.CreateErrorXML(lcMessage,lnError,1) + ; [</] + lcDocRoot + [>] + CRLF RETURN lcOutput ENDPROC PROCEDURE returnvaluefromxml LPARAMETER lcXML LOCAL loXML, lcValue, lcType *** Resultset should be XML loXML = CREATE("wwXML") *** Check for ErrorMsg lcErrorMsg = loXML.GetObjVar("ErrorMessage",lcXML) IF !EMPTY(lcErrorMsg) THIS.cErrorMsg = lcErrorMsg THIS.nError = -1 THIS.lError = .T. RETURN .F. ENDIF *** Otherwise retrieve the result value lcValue = loXML.GetObjVar("COMResult",lcXML) lcType = loXML.GetObjVar("ResultType",lcXML) DO CASE CASE lcType = "C" RETURN lcValue CASE lcType = "N" RETURN VAL(lcValue) CASE lcType = "D" or lcType = "T" RETURN EVAL( "{" + lcValue + "}" ) CASE lcType = "L" IF lcValue = ".T." or Upper(lcValue)="ON" return .T. ELSE return .F. ENDIF CASE lcType = "" RETURN .F. ENDCASE RETURN EVAL(lcValue) ENDPROC �����PROCEDURE navigatecomplete * lcRequestBuffer - The result text * llError - .T. if an Error occurred or timeout LPARAMETER lcRequestBuffer, llError ENDPROC PROCEDURE startrequest IF THIS.lBusy THIS.lError = .T. THIS.cErrorMsg = "Control is already in use and busy" RETURN .F. ENDIF THIS.cPollFile = SYS(2023)+"\wwip_"+SYS(3)+".tmp" THIS.lError = .F. THIS.cErrorMsg = "" THIS.cResultBuffer = "" THIS.nStartSeconds = SECONDS() THIS.oIP.HTTPConnect(THIS.cServer,THIS.cUsername, THIS.cPassWord,THIS.lSecure) THIS.oIP.HTTPGetExAsync(THIS.cLink, THIS.cPollFile,THIS.nBufferSize) THIS.lBusy = .T. THIS.Enabled = .T. RETURN .T. ENDPROC PROCEDURE addpostkey LPARAMETERS tcKey, tcValue THIS.oIP.ADdPostKey(tcKey,tcValue) ENDPROC PROCEDURE cancelrequest THIS.Enabled = .F. THIS.lBusy = .F. ENDPROC PROCEDURE Init THIS.oIP = CREATE("wwIPStuff") ENDPROC PROCEDURE Timer THIS.Enabled = .F. IF FILE(THIS.cPollFile) *** If the file is still being written to the buffer *** will come back 0 THIS.cResultBuffer = File2Var(THIS.cPollFile) IF LEN(THIS.cResultBuffer) > 0 ERASE (THIS.cPollFile) THIS.lBusy = .F. IF THIS.cResultBuffer = "Error: " THIS.lerror = .T. THIS.cErrorMsg = SUBSTR(THIS.cResultBuffer,8) ENDIF THIS.NavigateComplete(THIS.cResultBuffer,THIS.lError) ELSE THIS.Enabled = .T. ENDIF ELSE *** Check for timeout IF THIS.nStartSeconds + THIS.nTimeout < SECONDS() THIS.CancelRequest() THIS.lerror = .T. THIS.cErrorMsg = "Request timed out" THIS.NavigateComplete("Error: Request timed out",.T.) ELSE THIS.Enabled = .T. ENDIF ENDIF ENDPROC �����pntimeout Socket timeout used to determine when an operation fails due to timeout. nerror Error Number cerrormsg Error Message if an error occurred. lstripnulls Strips CHR(0) NULLS from the received buffer. Otherwise the full buffer will be passed back which is padded with CHR(0)'s. llogsession clogtext olog nbuffersize nlastreadsize Size of data read on the last Receive() operation. clog Internal Log string property *connect Connects to a socket on a server. *send Sends data to a socket on the server. *receive Receives data from a socket *socketsend High level method that connects to a socket, sends data and receives a result then disconnects from the socket. Great for various XML services. *disconnect Disconnects from a socket on the server. *close Closes the socket. *sendreceive Sends a string to a socket and waits for a response and returns the value. *log *getlog *listen *waitfor A receive method that keeps retrieving input until a specified character is found based on the timeout specified. *waitforsize Waits for the specified number of bytes from the socket, by using Receive() in a loop. �����]nftpworkbuffersize The size of the FTPGetEx download buffer. For each buffer chunk the OnFTPBufferUpdate event is fired to allow you to cancel and display status information lcanceldownload Cancel flag that can be set in OnFTPBufferUpdate to let wwFTP know to stop downloading a file from the Internet. hftpsession The FTP Session handle used in Internet Access. One of two (hIPSession is the other) nftpbinary Flag to determine whether FTP file sent is ASCII (0) or Binary (1) cftpserver The FTP server to connect to. cftpsource The Source file to upload from the client or download from the server. cftptarget The file to download to from the server or upload to on the server. *ftpgetfileex Retrieves a file from an FTP site and allows trapping the OnFTPBufferUpdate event. This event allows for status information and also cancellation of a download. *onftpbufferupdate Event that fires whenever the buffer is updated by FTPGetFileEx(). This method is passed the current download total and the number of chunks retrieved already. You can set lCancelDownload to .T. to force FTPGetEx to stop the file download. *ftpconnect Connects to an FTP site and allows passing of a user name and password. *ftpclose Closes a connection with an FTP Site *ftpsendfileex Uploads a file to an FTP site with event progress information and the ability to cancel. *parsefiletime Returns a datetime value from a date time structure (binary form) *ftpsendfile Sends a file via FTP *ftpgetfile Receives a file via FTP *aftpdir Retireves an FTP directory listing. *ftpcreatedirectory Creates a new FTP directory on the server. *ftpremovedirectory Removes a directory on the Web server. *ftpdeletefile Deletes file on the server. Must be called after explicitly connecting with FTPConnect first. *ftpcommand *ftprenamefile Renames a file on the server. Requires existing connection. ����� Height = 17 Width = 99 cattachment = cbcclist = ccclist = cdllpath = cerrormsg = cmailserver = cmessage = cpassword = crecipient = csenderemail = csendername = csubject = cusername = hhttpsession = 0 hipsession = 0 lsecurelink = .F. lusezip = .F. nconnecttimeout = 25 nerror = 0 nrashandle = 0 ccontenttype = text/plain nhttpconnecttype = 1 cserver = clink = nhttpport = 0 nhttpworkbuffersize = 4096 chttpheaders = cpriority = Normal lhttpcanceldownload = .F. nhttppostmode = 1 cversion = 4.10 chttpproxyname = .NULL. chttpproxybypass = .NULL. nsmtpport = 25 nserviceflags = 0 cuseragent = West Wind Internet Protocols 4.10 cextraheaders = chttpproxyusername = chttpproxypassword = cpostbuffer = Name = "wwipstuff" �����6 �����������������������������$ ���%��� ����������� ������������U��� �����%��+��T�����.�|�wwSocketConnect �wwIPStuff.dll�T�C�X�T �C��������% ����T� ��T� �CC�C� `�B-��Ba�U ��LCSERVER�LNPORT�THIS �LLOGSESSION�CLOG�WWSOCKETCONNECT �WWIPSTUFF�DLL�LCERROR�LNRESULT�NERROR �CERRORMSG�����%��2��C����CLIENT:����T�C��>-�| �wwSocketSend �wwIPStuff.dll�T�C�X �T �C����� �����% ����T� ��T� ���B-��Ba�U ��LCINPUT�THIS �LLOGSESSION�LOG�LNSIZE �WWSOCKETSEND �WWIPSTUFF�DLL�LCERROR�LNRESULT�NTIMEOUT�NERROR �CERRORMSGg����%C��&��T������T�C��X,�| �wwSocketRecv �wwIPStuff.dll�T�C�X�T�C��� ���%C� ��� ��T� ���T� �C�C� �T� � �B����T� ���%� �(�T�C�C� ����%��W�C���SERVER:��� �B��U��LNSIZE�THIS �NBUFFERSIZE�LCOUTPUTBUFFER �WWSOCKETRECV �WWIPSTUFF�DLL�LCERROR�LNBYTES�NTIMEOUT �NLASTREADSIZE �CERRORMSG�NERROR �LSTRIPNULLS �LLOGSESSION�LOG�������� ����T�C7��X�T�C�X�%C�`� �T� �.�|�wwSocket �wwIPStuff.dll&�T�C�������������%����T � ����T�C�` �BC�`�U ��LCINPUT�LCSERVER �LNSERVERPORT�LNCONNECTTIMEOUT�LCERROR�LCHTTPRESPONSE�LNRESULT�WWSOCKET �WWIPSTUFF�DLL�THIS�NERROR2�%�| �wwSocketClose �wwIPStuff.dll �C���U� �WWSOCKETCLOSE �WWIPSTUFF�DLL|� ���� ����%C����� 5� �B����T�C�����%��l� �B��� �B��U ��LCINPUT�LNSIZE�LLRESULT �LCRECEIVE�THIS�SEND�LCOUTPUT�RECEIVE�NERRORI� �����%C�'� �T�����T��������U��LCSTRING�LCPREFIX�THIS�CLOG� �B����U��THIS�CLOG� �����%C��N-� �T� �-�|�wwSocketListen �wwIPStuff.dll�T�CX�T�C��������%���T���T� ���B-��Ba�U ��LNPORT �LNTIMEOUT�WWSOCKETLISTEN �WWIPSTUFF�DLL�LCERROR�LNRESULT�THIS�NERROR �CERRORMSG� �������T��� �T����+C��� ��T��C�����%���|� �B���� �B��U��LCSEARCH�LNSIZE�LCRESULT�THIS�NERROR�RECEIVE\��������%C��5��T����� �T�� �T��� �T���.�+��� ���� �� �� �!�T��CC��� �� �=�T��� ��T��� ���%C�>��L�%���H�T��5�T� �%�Buffer size doesn't match output size�� �B��U ��LNSIZE �LNTOTALREAD �LNLNEXTREAD�LCRESULT�THIS �NBUFFERSIZE �LNNEXTREAD�LCOUTPUT�NERROR �NLASTREADSIZE�RECEIVE �CERRORMSG��U��� �C����U��THIS �DISCONNECT�connect,������sendy�����receive���� �socketsend���� �disconnectj���� �sendreceive�����log�����getlog�����listen�����waitforI ���� �waitforsize �����Init �����Destroy ����1��A�q�A�r�2�q�A��q�A�r�2�q��A��q�A�qA�A��2�q�"��A�dA���2�R�3���b�A�RQ�A��3����A�2��2��R�A��q�A�r�3��q��qA�A�A��2�q���A����AAA�2AQA�A��3�9��1�������������������������������������������A��2���5���b����T���D��� ��Y ��r���G���{ ��B ��y���R���\ �� �����X��� �� �����Z���# �� �����h��� �� �����t��� ��a��������|��@��������^��o������)��������������������������zPROCEDURE connect LPARAMETERS lcServer, lnPort IF THIS.lLogSession THIS.cLog = "" ENDIF DECLARE Integer wwSocketConnect ; in wwIPStuff.dll ; STRING lpDomain,; INTEGER dwPort,; STRING @lpError lcError = SPACE(512) lnResult = wwSocketConnect(lcServer, lnPort,@lcError) IF lnResult = 0 THIS.nError = -1 THIS.cErrorMsg = TRIM(STRTRAN(lcError,CHR(0))) RETURN .F. ENDIF RETURN .T. ENDPROC PROCEDURE send LPARAMETERS lcInput IF THIS.lLogSession THIS.Log(lcInput,"CLIENT:") ENDIF lnSize = LEN(lcInput) DECLARE Integer wwSocketSend ; in wwIPStuff.dll ; STRING lpInput,; STRING @lcError,; INTEGER dwSeconds,; INTEGER dwSize lcError = SPACE(512) lnResult = wwSocketSend(lcInput,@lcError,THIS.nTimeout,lnSize) IF lnResult = 0 THIS.nError = -1 THIS.cErrorMsg = lcError && if any RETURN .F. ENDIF RETURN .T. ENDPROC PROCEDURE receive LPARAMETERS lnSize IF EMPTY(lnSize) lnSize = THIS.nBufferSize ENDIF lcOutputBuffer = SPACE(lnSize) DECLARE Integer wwSocketRecv ; in wwIPStuff.dll ; STRING @lpOutput,; STRING @lcError,; INTEGER dwSeconds lcError = SPACE(512) lnBytes = wwSocketRecv(@lcOutputBuffer,@lcError,THIS.nTimeout) IF !EMPTY(lcError) OR lnBytes < 0 THIS.nLastReadSize = 0 THIS.cErrorMsg = STRTRAN(lcError,CHR(0)) THIS.nError = -1 RETURN "" ENDIF THIS.nLastReadSize = lnBytes IF THIS.lStripNulls lcOutputBuffer = STRTRAN(lcOutputBuffer,CHR(0),"") ENDIF IF THIS.lLogSession THIS.Log(lcOutputBuffer,"SERVER:") ENDIF RETURN lcOutputBuffer ENDPROC PROCEDURE socketsend LPARAMETERS lcInput, lcServer, lnServerPort, lnConnectTimeOut, lcError LOCAL lcHTTPResponse, lnResult lcHTTPResponse = SPACE(65335) lcError = SPACE(1024) IF EMPTY(lnConnectTimeout) lnConnectTimeout = 10 ENDIF DECLARE INTEGER wwSocket ; IN wwIPStuff.dll ; STRING lcInput,; STRING @lcOutput,; STRING @lcError,; STRING lcDomain,; INTEGER lnPort,; INTEGER lnTimeout lnResult = wwSocket(lcInput,@lcHTTPResponse,@lcError,; lcServer,lnServerPort,lnConnectTimeout) IF lnResult # 0 THIS.nError = lnResult ENDIF lcError = TRIM(lcError) RETURN TRIM(lcHTTPResponse) ENDPROC PROCEDURE disconnect DECLARE wwSocketClose in wwIPStuff.dll wwSocketClose() ENDPROC PROCEDURE sendreceive LPARAMETERS lcInput, lnSize LOCAL llResult, lcReceive IF !THIS.Send(lcInput) RETURN "" ENDIF lcOutput = THIS.Receive(lnSize) IF THIS.nError = -1 RETURN "" ENDIF RETURN lcOutput ENDPROC PROCEDURE log LPARAMETERS lcString,lcPrefix IF EMPTY(lcPrefix) lcPrefix = "" ENDIF THIS.cLog = THIS.cLog + lcPrefix + lcString ENDPROC PROCEDURE getlog RETURN THIS.cLog ENDPROC PROCEDURE listen LPARAMETERS lnPort, lnTimeout IF VARTYPE(lnTimeout) # "N" lnTimeout = 10 ENDIF DECLARE INTEGER wwSocketListen ; IN wwIPStuff.dll ; integer nPort,string @cError, integer nTimeout lcError = SPACE(255) lnResult = wwSocketListen(lnPort,@lcError,lnTimeOut) IF lnResult # 1 THIS.nError = -1 THIS.cErrorMsg = lcError && if any RETURN .F. ENDIF RETURN .T. ENDPROC PROCEDURE waitfor LPARAMETERS lcSearch,lnSize LOCAL lcResult THIS.nError = 0 lcResult = "" DO WHILE ATC(lcSearch,lcResult) < 1 lcResult = lcResult + THIS.Receive(lnSize) IF THIS.nError # 0 RETURN "" ENDIF ENDDO RETURN lcResult ENDPROC PROCEDURE waitforsize LPARAMETERS lnSize LOCAL lnTotalRead, lnlnextRead, lcResult IF EMPTY(lnSize) lnSize = THIS.nBufferSize ENDIF lnTotalRead = 0 lnNextRead = lnSize lcOutput = '' DO WHILE lnTotalRead < lnSize AND THIS.nError = 0 AND THIS.nLastReadSize > 0 lcOutput = lcOutput + LEFT( THIS.Receive( lnNextRead ),THIS.nLastReadSize ) lnTotalRead = lnTotalRead + THIS.nLastReadSize lnNextRead = lnNextRead - THIS.nLastReadSize ENDDO IF LEN(lcOutput) # lnSize IF THIS.nError = 0 THIS.nError = -1 THIS.cErrorMsg = "Buffer size doesn't match output size" ENDIF ENDIF RETURN lcOutput ENDPROC PROCEDURE Init #IF .F. WAIT WINDOW NOWAIT ; "Welcome to West Wind Internet Protocols..." + CHR(13) + ; "This is a shareware copy of wwPOP3." + CHR(13)+ CHR(13) +; "Please register your copy." #ENDIF ENDPROC PROCEDURE Destroy THIS.Disconnect() ENDPROC �����Rcsql SQL statement to be run. This property can be set explicitly or the SQL command can directly be passed to the Execute method. csqlcursor The name of the result cursor that any records returned from a query are returned to. callowedcommands The commands that are allowed to be used. Use Upper case values here separated by commas. Blank means all commands are allowed. Default is: SELECT callowedtables Allows you to specify a list of tables that may be accessed over HTTP. User upper case names of the tables without an extension separated by commas. Blank is the default and means all tables are allowed. nresultsize Size of the HTTPResult buffer nresultmode Format of the data returned. 0 - VFP Cursor, 1 - XML cxmlresult If nResultMode = 1 this property is set with the XML result in addition to the cursor conversion. lcreatexmlstructure Flag that determines whether XML data is sent to the client with a DTD/Schema header. nxmlmode 0 - standard XML format, 1 - ADO format csqlconnectstring SQL Connect string for a remote data source. csqlparameters XML String that contains SQL parameters *execute Client side execute method. This method requires that the various base properties like server name, link and sql statement etc are set prior to making the call. This method calls the server and returns a result cursor from the SQL statement. *s_execute Server side execute method handles the server processing of a data request. Runs the parses the input from a Web Connection Request object, creates and runs the SQL statement and packages and returns the result set if any. Acts as full wwProcess method! *addsqlparameter Use this method to create SQL parameters that can be embedded into the SQL statement. This is required for any literal values that exceed 256 characters in length. *xmlerrordocument Creates an XML error resu *s_returnerror ����� �����������������������������B ���%���������0�����������������U��� �����T��CCC��������6f�T�CC��f�%C�� �)�%���ANY�C� ���� ��T�C �wwHTTPHeaderN �C��6�CC���Error: Authentication failed...���CC� � � ��B-���U � �LCAUTHUSER �LOPROCESS �LCUSERNAME�REQUEST�GETAUTHENTICATEDUSER�LOHEADER �DEFAULTHEADER �AUTHENTICATE �GETSERVERNAME�RESPONSE�WRITE �GETOUTPUT��T���C �wwIPStuffN�U��THIS�OHTTP �authorize,������Init����1��1�aAq�A�A�3�2���������������������������������8������)��������������������������?cattachment SMTP File Attachment cbcclist Comma Delimited Blind Carbon Copy list ccclist Comma Delimited Carbon Copy list cdllpath cerrormsg Last Error Message Text for the last operation. Implemented only for SMTP and HTTP operations. cmailserver Domain name or IP address for your SMTP Server cmessage SMTP Message text cpassword Password to log on to server (applies to FTP and HTTP) crecipient SMTP Message Recipient list. Comma Delimited if multiples. csenderemail Email address of the SMTP message sender (return address). csendername Display name of SMTP message Sender. csubject SMTP Message Subject. cusername Username for log in operations (FTP and HTTP). hhttpsession hipsession lsecurelink lusezip Flag to determine whether Encode and DecodeDBF use zipping (not implemented) nconnecttimeout The timeout for a request to either connect to the server or to start receiving a response. Make sure this timeout is long enough to allow for the request to process. nerror The last error code. nrashandle Internal handle to the RAS Session created with RASDial(). Exposed to allow further access to the handle via API calls. ccontenttype nhttpconnecttype Allows to specify how the connection is opened: 1 - Direct*, 3 - Proxy (IE 4 and later) and 0 - PreConfig (using IE settings) cserver HTTP Server Address. Format: www.west-wind.com, or 111.111.111.111 clink HTTP Link to visit on a site. Site relative URL. Example: /default.asp, /, /wconnect.dll?wwDemo~TestPage nhttpport The port to use for HTTP Connections. If the default value of 0 is used, the HTTP and HTTPS default ports (80 and 443) are used. nhttpworkbuffersize Size of the download HTTP buffer used while downloading dynamically sized requests with HTTPGetEx. This is the size of chunks that will be pulled at a time and also determines how often OnHTTPBufferUpdate is called. chttpheaders This property is set when calling HTTPGetEx and contains the entire HTTP header of a request cpriority Priority of the email message. lhttpcanceldownload Flag that can be set in OnHTTPBufferUpdate to allow cancellation of the current HTTP download nhttppostmode HTTP Post mode determines how requests are posted to the server. 1 - Form URLEncoded (default) 2 - Multipart forms 4 - XML. This property must be set prior to calling AddPostKey and HTTPGetEx cversion Version of the wwIPStuff library. This value should match the DLL Version number. chttpproxyname String that specifies the name or IP address of the proxy server and its port. chttpproxybypass Address of a string variable that contains an optional list of host names or IP addresses, or both, that should not be routed through the proxy nsmtpport nserviceflags Otional flags used for InternetOpen calls. cuseragent cextraheaders Extra SMTP Headers used for sending email. Note these values should not conflict with existing default values - check SMTP headers for details. chttpproxyusername Proxy Authentication User name chttpproxypassword Proxy Authentication Password cpostbuffer Contains the HTTP Post Buffer set with AddPostKey *addpostkey Adds a POST key and value pair to be used in a POST operation with HTTPGetEx(). *decodedbf Takes a string encoded with EncodeDbf() and converts it back into a physical file. If the string contains a DBF with a memo the memo is also restored. *encodedbf Takes a single file (DBF or otherwise) or a DBF/MEMO pair and encodes it into a string. String includes a header for verification and information about the file. Use DecodeDbf() to restore the string to a file. *getdomainfromip Retrieves the Domain Name from an IP Address. *getipfromdomain Retrieves the IP address from a Domain name by resolving DNS. *getlastinterneterror Return the last WinInet Error Message. Applies only to FTP functions. *getpostbuffer Retrieves the current Post buffer. Post buffer is implemented as a memo field in a cursor. *getsystemerrormsg Returns a WinInet or Win32 API error message. *httpclose Closes an HTTP Session opened with HTTPConnect(). *httpget Retrieves the content of a URL and stores it to a string. *httpgetasync Same as HTTPGet except the request returns control immediately to the calling program. Operation occurs on a new thread and does not return a result code. *httpgetex Extended HTTPGet that allows POST operations. Requires HTTPConnect() to open a connection first and HTTPClose() to shut down. *httpgetheader Retrieves an HTTP header from a URL *rasdial Dials a RASConnection *rashangup Hangs up a previously dialed RAS connection. Requires handle! *sendmail Send SMTP mail Synchronously and returns .T. or .F. Check THIS.cErrorMsg for results *sendmailasync Same as SendMail() but operation runs on a separate thread and immediately returns to the calling code. No error code is returned. *unzipfiles Simple file UnZipping interface to the DynaZip Unzip DLL (not provided). This method call talks directly to the DLL bypassing the ActiveX Control. *wininetsettimeout Allows setting the timeout period for each type of connection and transfer operation. Specify in seconds. (WinInet does not always respect this setting correctly) *zipfiles Simple file Zipping interface to the DynaZip Zip DLL (not provided). This method call talks directly to the DLL bypassing the ActiveX Control. *httpconnect Establishes a connection with a server. Options allow setting username and password and secure protocol. *encodefile Takes a single file (DBF or otherwise) or a DBF/MEMO pair and encodes it into a string. String includes a header for verification and information about the file. Use DecodeDbf() to restore the string to a file. *decodefile Takes a string encoded with EncodeDbf() and converts it back into a physical file. If the string contains a DBF with a memo the memo is also restored. *httpgetexasync *onhttpbufferupdate Gets called whenever the buffer is updated on an HTTPGetEx update. Only applies if the buffer size is set to 0 (Automatic sizing) *httpcanceldownload Cancels an HTTPGetEx download if the buffer is sized dynamically *sendmapimail Sends a message using the MAPI extensions and the default profile. *httpping Use this method to determine if an Internet Connection is available. It uses HTTP to connect to a specified URL using a timeout and it returns .T. or .F. if connection was successful. *internetcrackurl Breaks a URL into its components. *base64encode Encodes a string to Base64. *base64decode Decodes a Base64 string. *httpgetlight Lightweight HTTP method that uses Sockets rather than Wininet. Minimal HTTP support (No SSL, No Auto Proxy etc.) *setproxylogin Log in for proxy authentication with cHTTPProxyUsername/cHTTPProxyPassword �����1PROCEDURE execute LPARAMETER lcSQL LOCAL lnSize, lnBuffer, lnResult, llNoResultSet, lcbuffer lcSQL=IIF(VARTYPE(lcSQL)="C",lcSQL,THIS.cSQL) THIS.lError = .F. THIS.cErrorMsg = "" IF !INLIST(LOWER(lcSQL),"select","create","execute") llNoResultSet = .T. ELSE llNoResultSet = .F. ENDIF lnResult = THIS.oHTTP.HTTPConnect(THIS.cServerName,THIS.cUsername,THIS.cPassWord,THIS.lSecure) IF lnResult # 0 THIS.cErrorMsg = THIS.oHTTP.cErrorMsg THIS.nError = lnResult THIS.lError = .T. RETURN .F. ENDIF THIS.oHTTP.AddPostKey() THIS.oHTTP.AddPostKey("cSQL",lcSQL) THIS.oHTTP.AddPostKey("nMaxBufferSize",TRANS(THIS.nMaxBufferSize)) THIS.oHTTP.AddPostKey("nResultMode",TRANS(THIS.nResultMode)) THIS.oHTTP.AddPostKey("cSQLCursor",THIS.cSQLCursor) THIS.oHTTP.AddPostKey("cSQLConnectString",THIS.cSQLConnectString) *** Named SQL parameters for query THIS.oHTTP.AddPostKey("cSQLParameters",THIS.cSQLParameters) IF THIS.lIsZipped THIS.oHTTP.AddPostKey("lUseZip","True") ENDIF IF THIS.lCreateXMLStructure THIS.oHTTP.AddPostKey("lCreateXMLStruture","True") ENDIF IF THIS.nMaxBufferSize = 0 lcbuffer = "" lnSize = 0 ELSE lcbuffer = SPACE(THIS.nMaxBufferSize) lnSize = THIS.nMaxBufferSize ENDIF lnResult = THIS.oHTTP.HTTPGetEx(THIS.cHTTPLink,@lcbuffer,@lnSize) IF lnResult # 0 THIS.cErrorMsg = THIS.oHTTP.cErrorMsg THIS.nError = lnResult THIS.lError = .T. RETURN .F. ENDIF THIS.nResultSize = lnSize IF llNoResultSet IF EMPTY(lcbuffer) RETURN .T. ENDIF ELSE IF EMPTY(lcbuffer) or lcBuffer = "OK" THIS.cErrorMsg = "No data was returned from this request..." THIS.nError = -1 THIS.lError = .T. RETURN .F. ENDIF ENDIF IF lcbuffer = "Error" THIS.cErrorMsg = lcbuffer THIS.nError = -1 THIS.lError = .T. RETURN .F. ENDIF IF llNoResultSet RETURN .T. ENDIF IF THIS.nResultMode > 0 && XML THIS.cXMLResult = lcBuffer IF THIS.nResultMode = 1 && XML into a cursor *** Force new table instead of appending IF USED(THIS.cSQLCursor) SELE (THIS.cSQLCursor) USE ENDIF loXML = CREATE("wwXML") loXML.XMLToCursor(THIS.cXMLResult,THIS.cSQLCursor) IF loXML.lError THIS.cErrorMsg = "Error: Unable to parse XML into cursor" THIS.lError = .T. THIS.nError = -1 RETURN .F. ENDIF ENDIF ELSE *** Retrieve the file name from the buffer lcFileName = FORCEEXT(ADDBS(SYS(2023))+TRIM( SUBSTR(lcbuffer,6,40) ),"dbf") IF !THIS.oHTTP.DecodeDbf( lcbuffer, IIF(THIS.lIsZipped,FORCEEXT(lcFileName,"zip"),lcFileName) ) THIS.cErrorMsg = "Error: Error Decoding the downloaded file" IF AT("401",lcbuffer) > 0 AND ATC("Unauthorized",lcbuffer) > 0 THIS.cErrorMsg = "Error: Unauthorized access. Check username/password" ENDIF THIS.nError = -1 THIS.lError = .T. RETURN .F. ENDIF IF THIS.lIsZipped IF THIS.oHTTP.UnzipFiles(FORCEEXT(lcFileName,"zip"),ADDBS(SYS(2023)) ) # 0 ERASE (FORCEEXT(lcFileName,"*")) THIS.cErrorMsg = "Error: Unzipping failed. Most likely you selected too many messages to download..." THIS.nError = -1 THIS.lError = .T. RETURN .F. ENDIF ENDIF USE (lcFileName) ALIAS THTTPImport IN 0 SELECT * FROM THTTPImport WHERE .T. INTO CURSOR ( THIS.cSQLCursor ) USE IN THTTPImport ERASE (FORCEEXT(lcFileName,"*")) ENDIF RETURN .T. ENDPROC PROCEDURE s_execute ************************************************************************ * Server side Execute ********************************* *** Function: Generic Execute request handler routine that can *** be used to pull data from the wire. *** Typically called from a wwHTTPData client in VFP *** Assume: Requires Web Connection server request (loProcess) *** Pass: loProess - wwProcess object *** lcAuthUser - User name allowed access (user,"ANY","") ************************************************************************ LPARAMETER loProcess, lcAuthUser LOCAL lcResultAlias, loEval, lcFileText, lnMaxLength, lcSQL, llUseZip, loHTML, lcUserName, lcCursorName LOCAL lcSQLParameters REQUEST = loProcess.oRequest Response = loProcess.oResponse THIS.lError = .F. THIS.cErrorMsg = "" IF !THIS.Authorize(lcAuthUser, loProcess) RETURN ENDIF lcXML = REQUEST.FormXML() IF lcXML = "<?xml" REQUEST.lUseXMLFormVars = .T. ENDIF lcFullSQL = REQUEST.FORM("cSQL") lcFullSQL = STRTRAN(lcFullSQL,CHR(13)," ") lcFullSQL = STRTRAN(lcFullSQL,CHR(10),"") lcSQL = LOWER(LEFT(lcFullSQL,10)) llUseZip = !EMPTY(REQUEST.FORM("lUseZip")) lnMaxLength = VAL(REQUEST.FORM("nMaxBufferSize")) IF lnMaxLength = 0 lnMaxLength = 99999999 ENDIF lnResultMode = VAL(REQUEST.FORM("nResultMode")) THIS.nResultMode = lnResultMode lcSQLConnectString = TRIM(Request.Form("cSQLConnectString")) lcSQLParameters = Request.Form("cSQLParameters") llXML = .F. IF lnResultMode > 0 llXML = .T. loXML = CREATE("wwXML") ENDIF IF EMPTY(lcSQL) Response.WRITE(THIS.S_ReturnError("Error: No SQL statement to process.")) RETURN ENDIF *** Check for illegal commands lnAt = AT(" ",lcSQL) lcCommand = LEFT(lcSQL,lnAt - 1) IF ATC(lcCommand+",",THIS.cAllowedCommands+",") = 0 Response.WRITE(THIS.S_ReturnError(lcCommand + " is not allowed or invalid.")) RETURN ENDIF *IF lcSQL = "select" * lcFullSQL = lcFullSQL + " INTO TABLE " + lcOrigFileName *ENDIF IF lcSQL # "select" AND lcSQL # "insert" AND lcSQL # "update" AND ; lcSQL # "delete" AND lcSQL # "create" AND lcSQL # "execute" Response.WRITE(THIS.S_ReturnError("Only SQL commands are allowed.")) RETURN ENDIF *** Check for named parameters IF !EMPTY(lcSQLParameters) IF VARTYPE(loXML) # "O" loxml = CREATE("wwXML") ENDIF loDoc=loXML.LoadXML(loXML.cXMLHeader + lcSQLParameters) CREATE CURSOR TParameter (value M) APPEND BLANK *** Create the variables and assign the value to it FOR EACH oParm in loDoc.DocumentElement.ChildNodes REPLACE value with oParm.Text lcMacro = oParm.NodeName + "= TParameter.Value" &lcMacro && Create the variable as a PRIVATE ENDFOR USE IN TParameter *** Once created they can be used as named parameter via ODBC ?Parm *** or as plain variables in straight Fox Queries ENDIF SYS(2335,0) && Disallow any UI access in COM IF !EMPTY(lcSQLConnectString) loSQL = CREATE("wwSQL") loSQL.cSQLCursor = "THTTPQuery" IF !loSQL.Connect(lcSQLConnectString) if !llXML Response.Write(THIS.S_ReturnError(loSQL.cErrorMsg)) ENDIF RETURN ENDIF lnResultCursors = loSQL.Execute(lcFullSQL) IF loSQL.lError Response.Write(THIS.S_ReturnError(loSQL.cErrorMsg)) SYS(2335,1) && Disallow any UI access in COM RETURN ENDIF ELSE IF lcSQL = "select" lcFullSQL = lcFullSQL + " INTO CURSOR THTTPQUery NOFILTER" ENDIF lnResultCursors = 1 loEval = CREATE("wwEval") loEval.ExecuteCommand(lcFullSQL) IF loEval.lError Response.WRITE(THIS.S_ReturnError("SQL statement caused an error." + CHR(13) + lcFullSQL)) SYS(2335,1) RETURN ENDIF ENDIF SYS(2335,1) IF !INLIST(lcSQL,"select","create","execute") *** If no cursor is returned nothing needs to be returned Response.WRITE(THIS.S_ReturnError("OK")) RETURN ENDIF SELE THTTPQuery lcFileText = "" IF lnResultMode > 0 && XML llCreateXMLStructure = (!EMPTY(REQUEST.FORM("lCreateXMLStructure"))) OR lnResultMode=1 lcCursorName = REQUEST.FORM("cSQLCursor") llXMLHTTP = (REQUEST.FORM("lXMLHTTP") = "True") IF EMPTY(lcCursorName) lcCursorName = "sqlcursor" ENDIF loXML = CREATE("wwXML") *loXML.cXMLHeader=[<?xml version="1.0"?>] +CRLF loXML.cDocRootName = "wwhttpdata" IF llCreateXMLStructure and lnResultCursors < 2 loXML.lCreateDataStructure = .T. ENDIF *** Dump the file to XML DO CASE CASE lnResultMode =1 OR lnResultMode = 2 IF lnResultCursors = 1 lcFileText = loXML.CursorToXML(lcCursorName) ELSE lcFileText = loXML.MultiCursorToXML(Alias(),lnResultCursors,lcCursorName) ENDIF CASE lnResultMode = 3 lcFileText = loXML.CursorToADOXML(lcCursorName) ENDCASE *** Properly encode the XML document *** workaround for XMLHTTP bug IF llXMLHTTP IF VARTYPE(loXML) # "O" loXML = CREATE("wwXML") ENDIF lcFileText = loXML.EncodeXML(lcFileText) && Turn into UTF-8 for transfer ENDIF IF llUseZip lcFileName = ADDBS(SYS(2023)) + SYS(2015) + ".xml" STRTOFILE(lcFileText,lcFileName) loIP = CREATE("wwIPStuff") IF loIP.ZipFiles(FORCEEXT(lcFileName,"zip"),; FORCEEXT(lcFileName,"*"),9 ) # 0 Response.WRITE( "Error: Unable to zip XML result" ) *ERASE (FORCEEXT(lcOrigFileName,"*")) RETURN ENDIF lcFileText = FILETOSTR(FORCEEXT(lcFileName,"ZIP")) ENDIF Response.ContentTypeHeader("text/xml") ELSE lcFileName = ADDBS(SYS(2023))+"wwd"+SYS(2015)+".dbf" *** Now select the result into another cursor that we know by name (CREATED TABLES WE MAY NOT) SELECT * FROM THTTPQuery INTO DBF (lcFileName) USE USE IN THTTPQuery loIP = CREATE("wwIPStuff") IF llUseZip IF loIP.ZipFiles(FORCEEXT(lcFileName,"zip"),; FORCEEXT(lcFileName,"*"),9 ) # 0 Response.WRITE("Error - unable to zip the file") ERASE (FORCEEXT(lcFileName,"*")) *ERASE (FORCEEXT(lcOrigFileName,".*")) RETURN ENDIF lcFileText = loIP.EncodeDBF(FORCEEXT(lcFileName,"zip") ) ELSE lcFileText=loIP.EncodeDBF(lcFileName,.T.) ENDIF IF EMPTY(lcFileText) Response.WRITE("Error: File not encoded.") ERASE (FORCEEXT(lcFileName,"*")) RETURN ENDIF IF LEN(lcFileText) >= lnMaxLength Response.WRITE("Error File is too large to send.") ERASE (FORCEEXT(lcFileName,".*")) RETURN ENDIF *** Get rid of Temporary files ERASE (FORCEEXT(lcFileName,"*")) Response.ContentTypeHeader("application/octet-stream") ENDIF Response.WRITE(lcFileText) ENDPROC PROCEDURE addsqlparameter LPARAMETER lcName, lcValue IF PCOUNT() = 0 THIS.cSQLParameters = "" RETURN ENDIF lcName=lower(lcName) lcSQLParameters = THIS.cSQLParameters lcBlock = EXTRACT(lcSQLParameters,"<sqlparameters>" + CRLF,"</sqlparameters>") lcBlock = lcBlock + CHR(9) + "<" + lcName + ">" + lcValue + "</" + lcName + ">" + CRLF THIS.cSqlParameters = ; "<sqlparameters>" + CRLF + ; lcBlock + ; "</sqlparameters>" +CRLF ENDPROC PROCEDURE xmlerrordocument LPARAMETER lcError LOCAL loXML loXML = CREATE("wwXML") RETURN loXML.cXMLHeader + "<wwhttpdata>" + CRLF + loXML.CreateErrorXML(lcERror) + CRLF +; "</wwhttpdata>" + CRLF ENDPROC PROCEDURE s_returnerror LPARAMETER lcError LOCAL lcHeader, loXML IF lcError = "OK" IF THIS.nResultmode > 0 loXML = CREATE("wwXML") lcHeader = Response.ContentTypeHeader("text/xml",.t.) RETURN lcHeader + ; loXML.cXMLHeader +; "<wwhttpdata>" + CRLF + ; " <result>OK</result>" + CRLF +; "</wwhttpdata>" + CRLF ENDIF RETURN "OK" ENDIF IF THIS.nResultmode > 0 && XML LOCAL loXML loXML = CREATE("wwXML") lcHeader = Response.ContentTypeHeader("text/xml",.t.) RETURN lcHeader + ; loXML.cXMLHeader + "<wwhttpdata>" + CRLF + ; loXML.CreateErrorXML(lcERror) + CRLF +; "</wwhttpdata>" + CRLF ENDIF RETURN "Error: " + lcError ENDPROC PROCEDURE authorize LPARAMETER lcAuthUser, loProcess lcAuthUser=UPPER(IIF(EMPTY(lcAuthUser),"",lcAuthUser)) lcUserName=JustFName(UPPER( Request.ServerVariables("REMOTE_USER") )) IF !EMPTY(lcAuthUser) IF (lcAuthUser = "ANY" AND EMPTY(lcUserName)) OR ; ATC("," + lcUserName + ",", "," + lcAuthUser + ",") = 0 loHeader = CREATE("wwHTTPHeader") loHeader.DefaultHeader() loHeader.Authenticate(Request.GetServername(),"Error: Password Authentication failed.") Response.Write(loHeader.Getoutput()) RETURN .F. ENDIF ENDIF *!* IF !loProcess.Login(lcAuthUser) *!* RETURN .F. *!* ENDIF RETURN .T. ENDPROC PROCEDURE Init THIS.oHTTP=CREATE("wwIPStuff") ENDPROC �����e ���d��d������������������������O#���%���X������b��^��[������������U���������#�T��CC���C������6#�T�CC��C�����6 �T�C!�%���RESET�Ct� ��T�����B��%C��  �H�� ���*�T�������=C����&�2 �%��T�����--*�-----------------------------7cf2a327f01aeC C &�Content-Disposition: form-data; name="�� �" filename="��"C C C C C�C C ��T�����--*�-----------------------------7cf2a327f01aeC C &�Content-Disposition: form-data; name="���"C C C C �C C ����T�������U��TCKEY�TCVALUE �LLFILENAME �LCOLDALIAS�THIS �CPOSTBUFFER �NHTTPPOSTMODE �URLENCODE ����#����������%C��>i H��B-��T�C��i\�T�CC��(\`�T�CC��. \g�T�CC��` \g�T�CC����C�f6�%��wwDBF%�R,:�Invalid Decode File Header�B-� �T��� �T����%���T�C��j�\�%C�>� 4�R,:�Invalid File Size: CC�>Z� of C�Z�B-���%��5�T�C��j��\�T �C�>�%C�>� 19�R,:�Invalid Memo File Size: CC�>Z� of C�Z�B-���C���� ��%C� |!�CC��.DBF�.FPT�� ���Ba�U ��LCBUFFER�LCDBF �LNSEPARATOR�LCHEADER�LCFNAME�LNSIZE1�LNSIZE2�LCFILE1�LCFILE2�LNSIZEX�FILE2VAR[ ������������%C��8��B-��T��C��f�%C��0 d� �B����T�C����)�T��wwDBFCC��(CC�> Z�%� ��T��C2X �B����T�C���fpt�T�C����%C��B�C2X��$�T��CC�(CC�> Z�B����U��LCDBF �LLHASMEMO �LCBUFFER1 �LCBUFFER2�LCHEADER�LCFPT�FILE2VAR������$�|�GetDomainFromIp���T�CX�T�C������%CC� �� �T�C�CC� �\�� �T���� �B��U� �LCIPADDRESS�LCDOMAIN�GETDOMAINFROMIP�THIS�CDLLPATH�LNVALUE����$�|�GetIpFromDomain���T�C8X�T�C������%CC� �� �T�C�CC� �\�� �T���� �B��U��LCDOMAIN�GETIPFROMDOMAIN�THIS�CDLLPATH �LCIPADDRESS�LNVALUE����,�T��CC�lnErrorb�N������6:�|�InternetGetLastResponseInfo �WININET.DLL�T�C�X�T�C�>�C������%� � �B����BC��\�U��LNERROR�THIS�NERROR�INTERNETGETLASTRESPONSEINFO�WININET�DLL �LCERRORMSG�LNSIZEF��%C �wwPostBuffer"��F���3� �B��� �B����U� �WWPOSTBUFFER �CPOSTBUFFER ���� ���.�T��CC �lnErrorNob�N������6�%��.c� �BC����T�CX/�| �FormatMessage�WIN32API$�|�GetModuleHandle�WIN32API�T �C �wininet.dll ��% ���� ()�T�C�� ������C�>���= �T����%�k�T�C��\�(�T�C�������C�>���%�(�T� �Win32 API: C��\� �T����� �B��U � �LNERRORNO�LLAPI �SZMSGBUFFER�LNSIZE�THIS�NERROR�GETLASTINTERNETERROR �FORMATMESSAGE�WIN32API�GETMODULEHANDLE�LNMODULE�+�|�InternetCloseHandle �WININET.DLL�T�����%���o��C�����T�����%�����C�����T�����U��INTERNETCLOSEHANDLE�WININET�DLL�THIS �CPOSTBUFFER �HHTTPSESSION �HIPSESSION�����'������� � � ��T � ���T �����%C��N� �T�� �T��� �T����� �T���T�CC������6�T�CC������6��T�C��� ���%C�F�T � �#�T ���Invalid URL passed. �B���%�T�CC��@�https�a�-6�T ��C��g#�T �C�������� ���% ���T �� �� �B����%���T�C�X �T���' �T��� �T���&�T �C������ �� �C ���% ���T �� �� �B��� �B��U��LCURL �LCUSERNAME �LCPASSWORD�LNERROR�LNSIZE�LCBUFFER�SZHEAD�LOURL�LLHTTPS�LNRESULT�HINETCONNECTION �HHTTPRESULT�THIS�NERROR �CERRORMSG �TNBUFFERSIZE�INTERNETCRACKURL �CPROTOCOL �NHTTPPORT�CPORT �HTTPCONNECT�CSERVER�LCDATA �HTTPGETEX�CPATH �CQUERYSTRING �HTTPCLOSE^����'�T��CC�lcUrlb�C������6�| �HTTPGetAsync���C�����U��LCURL �HTTPGETASYNC�THIS�CDLLPATH ����������� �T��CC�� �� ����6%�T�CC��N���C��>6 �T�C�T� �-�T� ����%C� � �%C� �R�&�!�T� �C� �C� �>=��T �C� �> �T �C �� �� ��6�9 �T �� �T ���T����T����5�|�HttpOpenRequest �WININET.DLLd�T�C��C �� ��POST��GET6��� �������AC�� ������6 ��@����%��9�T��C��T��C�� �B����C�������T���/�|�HttpSendRequest �WININET.DLL�% �� �H� ��.i�T�/�Content-Type: application/x-www-form-urlencodedC C CC� �C C ����6� ��F�T�,�Content-Type: multipart/form-data; boundary=*�-----------------------------7cf2a327f01aeC C C C CC������6�% ��BM�T � ��--*�-----------------------------7cf2a327f01aeC C �T �C �>�� ��C�T��Content-Type: text/xmlC C CC������6���T�CC� �����6��%C�� ��%C��  �B���� �T��#�T�C����C�>� �� ���%���T��C��T��C���C��� �B���/�| �HttpQueryInfo �WININET.DLL�T �C�X�T!���T�C�� �!���T�"�CC �C� ��`�T �CX �T!��T�C�� �!���T#�CC �C� ��`�%#��200�T �C�X �T!��T�C�� �!���T��C#�g�T��CC �C� ��`�C��� �B����C���"��$�0�|�InternetReadFile �WININET.DLL�%���T�C�X �T&���T�C������%��! �%C� #�T�C��%��T��+�T���Couldn't create output file�C��� �B���� �T��� �T'�� �T�� �T(� �T)�� �+a �T*�C�+�X �T(���T,�C*�>�T�C��*��,�(�%��%��(�� Y �%C� �T��C*�(�=� �C�*�(���T��(��T)�)��C���)�*��$���%� � %�T��Error: Download canceled�T�C�>�!�)�%��(��  ���  �!�� �T&���%C�  �C���C����$���%��[ �T��C��T��C����C���3�T�C���&� �C��\���6 �B���U-��TCPAGE�TCBUFFER �TNBUFFERSIZE �TCHEADERS �TCFILENAME �HHTTPRESULT �LCOLDALIAS�LHFILE�THIS�CLINK�LHTTPCANCELDOWNLOAD �CPOSTBUFFER �TNPOSTSIZE �LCPOSTBUFFER�NERROR �CERRORMSG�HTTPOPENREQUEST�WININET�DLL �HHTTPSESSION �LSECURELINK �GETLASTERROR�GETSYSTEMERRORMSG�WININETSETTIMEOUT�NCONNECTTIMEOUT�HTTPSENDREQUEST �NHTTPPOSTMODE�CHTTPPROXYUSERNAME �SETPROXYLOGIN�LNRETVAL�INTERNETCLOSEHANDLE �HTTPQUERYINFO �LCHEADERS �LNHEADERSIZE �CHTTPHEADERS �LCRESULTCODE�ONHTTPBUFFERUPDATE�INTERNETREADFILE �LNBUFFERSIZE�TNSIZE �LNBYTESREAD �LNBUFFERREADS �LCREADBUFFER�NHTTPWORKBUFFERSIZE�LNSIZE;���������+�T�CC �tcHeadersb�C�����6/�T�CC �tnHeaderSizeb�N����6�%C�� ��T�C��> �T �C�� ����6�� �T�� �T ��5�|�HttpOpenRequest �WININET.DLL]�T �C��C�� ��POST��GET6��� �������AC�� ������6� ��% ���T��C��T��C�� �B���/�|�HttpSendRequest �WININET.DLL�T�C�`#�T�C� ���C�>� �����%��]�T��C��T��C�� �B���/�| �HttpQueryInfo �WININET.DLL�T�C� �����%���T��C��T��C�� �B����C� ��,�T�C��C��\���6 �B��U��TCPAGE �TCHEADERS �TNHEADERSIZE�LNERROR�LNSIZE�LCBUFFER�THIS �CPOSTBUFFER �TNPOSTSIZE �LCPOSTBUFFER�HTTPOPENREQUEST�WININET�DLL �HHTTPRESULT �HHTTPSESSION �LSECURELINK�NERROR �GETLASTERROR �CERRORMSG�GETSYSTEMERRORMSG�HTTPSENDREQUEST �LCHEADERS�LNRETVAL �HTTPQUERYINFO�INTERNETCLOSEHANDLE����� ���&�| �DoRasDial���T�����T�C�X �T ��"�T�C������� ����%����T� � ����T� ���T��CC�C� ��`��BC���-�a6�U � �LCRASENTRY �LCUSERNAME �LCPASSWORD �LCERRORMSG�LNRESULT �DORASDIAL�THIS�CDLLPATH �CERRORMSG�LNHANDLE �NRASHANDLE��| �DoRasHangup���%���V�$�T���No Connection active�"�T�CC������a�-6 �%���T�����,�T���Invalid Connection Handle...� �B��U� �DORASHANGUP�THIS�CDLLPATH �NRASHANDLE �CERRORMSG�LLRESULT+����������� � � � �(�T��CCC���C���� � �6`&�T�CC��C��� ��6(�T�CCC��C��� ��6`(�T�CCC��C��� ��6`(�T�CCC��C��� ��6`(�T�CCC��C��� ��6`&�T�CC��C��� ��6&�T�CC��C��� ��6(�T�CCC��C��� ��6`(�T �CCC ��C� �� ��6`�T �CX4�|�SendMail ��T�T �CC������������������� �� � �� ����a�-6�% � �T ��CC �C� ��`��T ����� �B ��U� �LCMAILSERVER �LCSENDERNAME �LCSENDEREMAIL �LCRECIPIENT�LCCCLIST �LCSUBJECT �LCMESSAGE �LCATTACHMENT �LCBCCLIST �LCCONTENTTYPE�LCERROR�LLRESULT�THIS �CMAILSERVER �CSENDERNAME �CSENDEREMAIL �CRECIPIENT�CCCLIST�CBCCLIST�CSUBJECT�CMESSAGE �CATTACHMENT �CCONTENTTYPE�SENDMAIL�CDLLPATH �NSMTPPORT �CEXTRAHEADERS �CERRORMSG''�����������*�T��CCC���C����C � �`6`(�T�CC��C���C � �`6(�T�CC��C���C � �`6(�T�CC��C���C � �`6(�T�CC��C���C ��`6(�T�CC��C���C ��`6&�T�CC��C��� ��6&�T�CC��C��� ��6&�T�CC��C��� ��6&�T�CC��C��� ��64�| �SendMailAsync ��8�C��������������������� ����Ba�U� �LCMAILSERVER �LCSENDERNAME �LCSENDEREMAIL �LCRECIPIENT�LCCCLIST �LCSUBJECT �LCMESSAGE �LCATTACHMENT �LCBCCLIST�THIS �CMAILSERVER �CSENDERNAME �CSENDEREMAIL �CRECIPIENT�CCCLIST�CBCCLIST�CSUBJECT�CMESSAGE �CATTACHMENT �LCCONTENTTYPE �CCONTENTTYPE �SENDMAILASYNC�CDLLPATH �NSMTPPORT������/�T�CC �lcFileSpecb�C����*.*64�T�CC �lcDestinationb�C���C]C6�|�UnZip���BC���������U� �LCZIPFILE �LCDESTINATION �LCFILESPEC�UNZIP�THIS�CDLLPATH ����&�T��CC���N������6�%���F��B��%C�i��T����0�|�InternetSetOption �WININET.DLL�T�����T�C������T�C������T�C������U � �DWTIMEOUTSECS�LNHANDLE�THIS�NCONNECTTIMEOUT �HIPSESSION�INTERNETSETOPTION�WININET�DLL�LLRETVAL�������/�T�CC �lnCompressionb�N��� 6�|�Zip��'�BC�������C����6��U� �LCZIPFILE �LCFILELIST �LNCOMPRESSION �LLRECURSE�ZIP�THIS�CDLLPATHU�����������#�T��CCC�� ����� �6`#�T�CCC� ���� �6`#�T�CCC� ���� �6`�%� ����T�C���P6���T�� ���T� ���� � �T� ����T����T����+�|�InternetCloseHandle �WinInet.DLL �| �GetLastError�WIN32API,�| �InternetOpen �WININET.DLL�%C�� �T���)�T�C�����������%��4�T��C��T��C���� �B����T����%C�� }�%C�� y �B����5�|�InternetConnect �WININET.DLL.�T �C������������!����% ��5�C����T��C��T��C�� �B����T�"� � �B��U#��LCSERVER �LCUSERNAME �LCPASSWORD�LLHTTPS�LHIP�LHHTTP�LNERROR �LNHTTPPORT�THIS�CSERVER �CUSERNAME �CPASSWORD �NHTTPPORT �LSECURELINK�NERROR �CERRORMSG�INTERNETCLOSEHANDLE�WININET�DLL �GETLASTERROR�WIN32API �INTERNETOPEN�CHTTPPROXYNAME�NHTTPCONNECTTYPE�HINETCONNECTION �CUSERAGENT�CHTTPPROXYBYPASS�GETSYSTEMERRORMSG �HIPSESSION�CHTTPPROXYUSERNAME �SETPROXYLOGIN�INTERNETCONNECT �LHHTTPSESSION �NSERVICEFLAGS �HHTTPSESSION�����BC������U� �LCFILENAME�THIS �ENCODEDBF#� �����BC������U��LCBUFFER�LCDBF�THIS �DECODEDBF���������T����T��CC����/���6�T�� ��T �� ��T�CC������6�T�CC�����6�%C� � ��T �C� �> �T�C �� �� ��6� �T �� �T���% ���%C��%��i�T�/�Content-Type: application/x-www-form-urlencodedC C CC� �C C ����6��T�,�Content-Type: multipart/form-data; boundary=*�-----------------------------7cf2a327f01aeC C C C CC������6�% ��G�T��*�-----------------------------7cf2a327f01aeC C �T �C�>�����T�CC� �����6� �T�CC�|�HTTPGetExAsync �WWIPSTUFF.DLL�T�C�X�T�C�>`�T�C������������������ �C�����6����� �������T����T����B�U��TCPAGE �TCRESULTFILE �TNRESULTSIZE �TCHEADERS �HHTTPRESULT�TCSERVER�THIS�CSERVER �TCUSERNAME �CUSERNAME �TCPASSWORD �CPASSWORD �CPOSTBUFFER �TNPOSTSIZE �LCPOSTBUFFER �NHTTPPOSTMODE �LCOLDALIAS�HTTPGETEXASYNC �WWIPSTUFF�DLL�TCBUFFER �TNBUFSIZE�LNRET �HIPSESSION �HHTTPSESSION �LSECURELINK�NHTTPCONNECTTYPE�������U��LNBYTESDOWNLOADED �LNBUFFERREADS�LCCURRENTCHUNK��T���a�U��THIS�LHTTPCANCELDOWNLOAD���������5��T�C]C"�T��C�MSMAPI.MAPISessionN�%C�� ��T�� ����T�� �� ���T�� �a �C�� ��%�����#�T�C�MSMAPI.MAPIMessagesN�T������6$�T���MAPI Logon failed... ���B-� �C�� �T���%C��  ���T�C����,���(��T���T����T���T��C������%C��  ���T�C����,���(��T���T����T���T��C������%C�� ? ���T�C����,���(�;�T���T����T���T��C������%C��  ���T�C����,���(��T����T��CC����T��C������T�����T��� ��T�C�wwEvalN&�C�loMessages.SEND( .F. )�!� �� �C��"��%�#��T���$��B-��Ba�U%� �LOSESSION �LCOLDPATH�Y�LNRECIPS�X�LOEVAL �LOMESSAGES�THIS �CUSERNAME�USERNAME�PASSWORD �CPASSWORD �DOWNLOADMAIL�SIGNON �SESSIONID �CERRORMSG�COMPOSE �CRECIPIENT�LARECIPS �APARSESTRING �RECIPINDEX �RECIPTYPE�RECIPDISPLAYNAME�CCCLIST�CBCCLIST �CATTACHMENT�ATTACHMENTINDEX�ATTACHMENTNAME�ATTACHMENTPATHNAME �MSGSUBJECT�CSUBJECT �MSGNOTETEXT�CMESSAGE�EVALUATE�SIGNOFF�LERROR �CERRORMESSAGE������������%C�?��T��/��T�� ��T� ���#�T �C�http://��� ��T� ���%� ����Ba��B-�U � �LNTIMEOUT�LCSERVER�LCLINK�X�LCFILE �LLSUCCESS�LNHANDLE �LNSAVETIMEOUT�THIS�NCONNECTTIMEOUT�LCRESULT�HTTPGET�NERROR9����������T�C�?���%��j��T�C���\�T��C���=�� �T�����T�C�://���%� ��B��T�CC���=@ �H�F� ��http��T��80� ��https#�T��443� ��ftpF�T��21��T��C���\�T�C�:���%���T�C����:�/a��T�C���=�T��C���C�>\�O�T�C�/���%�� �T��� �T�����K�T�C���\�T��C���\���T�C�RELATIONN�C �cProtocol�����C�cServer�����C�cPath����� �C �cquerystring�����C�cPort�����C �cUserName�����C �cPassword���� �B��U ��LCURL�LNAT �LCPROTOCOL �LCQUERYSTRING�LCPORT�LCSERVER�EXTRACT�LOURL �ADDPROPERTY� ���� ����%C��O[�"�T�C�MSXML2.DOMDocumentN�T��-��C �<node></node>���T����T�� �bin.base64�T��C���BC� ��">�</node>��U ��LCINPUT�LOXML�LONODE�ASYNC�LOADXML�DOCUMENTELEMENT�DATATYPE�NODETYPEDVALUE�EXTRACT�XML� �����%C��OP�"�T�C�MSXML2.DOMDocumentN�T��-�d�T�H�<node xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="bin.base64">���</node>�C�����B����U��LCINPUT�LOXML�ASYNC �LCDOCUMENT�LOADXML�DOCUMENTELEMENT�NODETYPEDVALUE ����'�������� � ��T � ���T � ����%C�q��T� ����T�C��� ���%C���T � �#�T � ��Invalid URL passed. �B���%�T�CC��@�https�a�-6 �%�A5�T � �%�SSL not supported with HTTPGetLight()��T ��C��g�%C �wwPostBuffer�F��%C��R�&�>�C�C�>=��T�C��> �T�C�� ����6� �T�� �T��I�T� �User-Agent: ��C C �Host: ��C C �%�� �Ho� ���T�/�Content-Type: application/x-www-form-urlencodedC C �Content-length: C�_C C CC� �����6� ��8�T�,�Content-Type: multipart/form-data; boundary=*�-----------------------------7cf2a327f01aeC C �Content-length: C�_C C CC������6�%��4M�T���--*�-----------------------------7cf2a327f01aeC C �T�C�>�� ��i�T��Content-Type: text/xmlC C �Content-length: C�_C C CC������6�@�T��POST ����C C �C C ��Z�T�CC� �����6;�T��GET ����C C �C C ��T�C�wwSocketN�T����T� �a �%C��C��g�!� �T � ��T � �� � �B����%C���"� (�T � ��T � �� � �B����T#�C��$��%� ���T � �� ��T � �� � �B����%C#��T � �1�T � �!�No data available from Web Server �B���&�T%�CC C C C #��T �&�C#�%�\�T#�C#�%�\.�T�CC �&��content-length: C '�g�%���T#�#�C�C#�>�(�� �+a�T)�C�$��%C)��!��T#�#�)��� �B#��U*��LCURL �LNTIMEOUT�LNERROR�LNSIZE�LCBUFFER�SZHEAD�LOURL�LLHTTPS�LNRESULT�HINETCONNECTION �HHTTPRESULT�THIS�NERROR �CERRORMSG�NCONNECTTIMEOUT�INTERNETCRACKURL �CPROTOCOL �NHTTPPORT�CPORT �WWPOSTBUFFER �CPOSTBUFFER �TNPOSTSIZE �LCPOSTBUFFER �TCHEADERS �CUSERAGENT�CSERVER �NHTTPPOSTMODE�LCOUTPUT�CPATH �CQUERYSTRING�LOIP�NTIMEOUT �LSTRIPNULLS�CONNECT�SEND�LCDATA�RECEIVE�LNAT �CHTTPHEADERS�EXTRACT �WAITFORSIZE �LCRECEIVE  ����������!�T�CC�� ������6!�T�CC� ���� �6�%C�w��B�1�|�InternetSetOption �WinInet.dll �T �+ �T�,�%C� j �T���T�C�> �T� � �T�C������ ��%�f�T��C��T��C�����B-���%C�  �T���T�C�> �T�� �T�C������ ��%��T��C��T��C�����B-���Ba�U� �TCUSERNAME �TCPASSWORD �LCUSERNAME �LCPASSWORD�LPBUFFER�LPDWBUFFERLENGTH�NSUCCESS�THIS�CHTTPPROXYUSERNAME�CHTTPPROXYPASSWORD�INTERNETSETOPTION�WININET�DLL�INTERNET_OPTION_PROXY_USERNAME�INTERNET_OPTION_PROXY_PASSWORD�DWOPTION �HHTTPSESSION�NERROR �GETLASTERROR �CERRORMSG�GETSYSTEMERRORMSG �HIPSESSION6�"�%���� ����� /� �C�����U��THIS �HIPSESSION �HHTTPSESSION �HTTPCLOSE�����R,:*�Welcome to West Wind Internet Protocols...C &�This is a shareware copy of wwIPStuff.C C �Please register your copy.#�T��CC���C������6!�T���� �wwIPStuff.dll �| �GetLastError�WIN32API�U��LCPATH�THIS�CDLLPATH �GETLASTERROR�WIN32API �addpostkey,����� �decodedbf?���� �encodedbf5�����getdomainfromip�����getipfromdomain�����getlastinterneterror ���� �getpostbuffer �����getsystemerrormsgU ���� �httpclose �����httpget���� �httpgetasync���� �httpgetex���� �httpgetheader% �����rasdial$���� �rashangup&�����sendmail-'���� �sendmailasync$+���� �unzipfileso.�����wininetsettimeoutW/�����zipfiles0���� �httpconnect1���� �encodefile6���� �decodefile6�����httpgetexasync/7�����onhttpbufferupdateC<�����httpcanceldownload<���� �sendmapimail<�����httppingB�����internetcrackurl(D���� �base64encodeG���� �base64decodeH���� �httpgetlight(J���� �setproxyloginS�����Destroy@W�����InitW����1��r�11�A�A��A��T � A�A��sA�1��12q�A�RqqqbQq�A���Q1Bq�A�A��qq�A�A�"A�r�1��q�q�A���A�"�1�A�b"�2A�C 1�q�q�E�a��A��>�q�E�b��A��:�q��b�A�<�q���A��8���"�A�D��A����A�A��:�BA�AA�4��rR�����A�S�1�A�RQ21�A������A�b�1�A��3�q�q�?�q�R��2A�!���A�[H"A�A�r�AA2 �A�A2A��A�2!�A�A��3A��A����B�!��A�����!��A�A�������!���b�A�A�Q�A�A�A�A�A���A�rA�AA��1�1���2!���A�[#A�A��4A�A�!A�A���?���h�"�A�r�1�BAA�"��A��<��aba�AF��A�� 1�saaaaOr�P1��Ab>��cB�A��A�"�1�1r;�11211C�A�3A��A�2!�A�A�[#�A�A��3�q�2��Q3�1q�2!���A��A�2 q�A�A�A��A��1� B�1��2��2�q�""311A���Q21�A�q�A���3�rAQB�A�2�rBQA�A�2�sBQB�A�3�rBQA�A�31ba��1q�A�s�3��1��A�2Bq�A�r�3�q�q5!a��A�Rq�A��Q�aA�A�b1a�1���!A�A��3���R!�A�1 1��R!�A�B�?��r�A�R�1�A�R�QA�Qq�A�!���A��A3A �A�AA��A��1�A�b1�A�TA11�A���A�bc���A�A�A�A��2��q�A�A����1�q�A�A��1�q�A�A�r�3�"�A�9�q�3;����������������������� �������� ����f���@�����S�����X���y��<�����d���b��2 ����o���] ��#��3��z���$��%��S�����%��,��c�����5,��e-�������-��1�������2��5�������$5��"R����]��FR��1\������O\��Ta��\����ta��d������d��.o������Ro��y������y��|��!����&}����;����2��U��m����w��[���� ��|��������Ս��������?��Ý����:����%��e��<��N��l��h��>������k����٨��;������b��m����������,��������N����)����i��2��#��O����T��m������X����3�����)���d�����������������������aPROCEDURE ftpgetfileex LPARAMETER lcSourceFile, lcTargetFile LOCAL lhFileHandle, hFTPFile, tcBuffer, tnSize, tnBufferSize, lnRetVal, lnBytesRead, lnBufferReads DECLARE INTEGER FtpOpenFile ; IN WININET.DLL ; INTEGER hIPSession,; STRING @lpszFileName,; INTEGER dwAcessFlags,; INTEGER dwServiceFlags,; INTEGER dwContext DECLARE INTEGER InternetReadFile ; IN WININET.DLL ; INTEGER hFTPHandle,; STRING lcBuffer,; INTEGER cbBuffer,; INTEGER @cbBuffer hFTPFile = FtpOpenFile(THIS.hFTPSession,lcSourceFile,; GENERIC_READ,; INTERNET_FLAG_RELOAD + FTP_TRANSFER_TYPE_BINARY,0) IF hFTPFile = 0 THIS.nError = GetLastError() THIS.cErrorMsg = THIS.GetSystemErrorMsg() RETURN THIS.nError ENDIF *** Build the buffer dynamically THIS.lCancelDownload = .f. tcBuffer = "" tnSize = 0 tnBufferSize = 0 lnRetVal = 0 lnBytesRead = 1 lnBufferReads = 0 lhFileHandle = FCREATE(lcTargetFile) IF lhFileHandle=-1 THIS.cErrorMsg = "Output file couldn't be created." InternetCloseHandle(hFTPFile) RETURN FError() ENDIF DO WHILE .t. lcReadBuffer = SPACE(THIS.nFTPWorkBufferSize) lnBytesRead = 0 lnSize = LEN(lcReadBuffer) lnRetval=InternetReadFile(hFTPFile,; @lcReadBuffer,; lnSize,; @lnBytesRead) IF lnRetVal = 1 AND lnBytesRead > 0 *** Update the input parameters - result buffer and size of buffer *tcBuffer = tcBuffer + LEFT(lcReadBuffer,lnBytesRead) =FWRITE(lhFileHandle,LEFT(lcReadBuffer,lnBytesRead) ) tnBufferSize = tnBufferSize + lnBytesRead lnBufferReads = lnBufferReads + 1 *** Event Call through THIS.OnFTPBufferUpdate(tnBufferSize,lnBufferReads,@lcReadBuffer) ENDIF IF (lnRetVal = 1 AND lnBytesRead = 0) OR (lnRetVal = 0) *** Done EXIT ENDIF IF THIS.lCancelDownload =FCLOSE(lhFileHandle) ERASE (lcTargetFile) EXIT ENDIF ENDDO InternetCloseHandle(hFTPFile) lnBufferSize = tnBufferSize *** Event Call through THIS.OnFTPBufferUpdate(0,-1,"") =FCLOSE(lhFileHandle) RETURN 0 #IF .F. TEXT ******************************** * HELP BUILDER COMMENT BLOCK * ******************************** *:Help Documentation *:Topic: wwFTP::FTPGetFileEx *:Description: ...Retrieves a file from an FTP site and allows trapping the OnFTPBufferUpdate event. This event allows for status information and also cancellation of a download. *:Parameters: <<b>>cSourceFile<</b>> The source file to retrieve from the server. <<b>>cTargetFile<</b>> The target file to save it to on the local machine/network. *:Returns: numeric - API error code API Error result codes can be retrieved with wwGetSystemErrorMsg() *:Example: o=create("wwFTP") o.FTPConnect("ftp.west-wind.com") o.FTPGetFileEx("/downloads/pkzip.exe","c:\temp\pkzip.exe") *:Remarks: Fires OnFTPBufferUpdate events which you can capture to provide progress information on your download. *:SeeAlso: Class wwFTP wwFTP::OnFTPBufferUpdate *:Keywords: *:HelpId: 678 *:ENDHELP ENDTEXT #ENDIF ENDPROC PROCEDURE onftpbufferupdate LPARAMETERS lnbytesdownloaded,lnbufferreads,lccurrentchunk #IF .F. TEXT ******************************** * HELP BUILDER COMMENT BLOCK * ******************************** *:Help Documentation *:Topic: wwftp::onftpbufferupdate *:Description: Event that fires whenever the buffer is updated by FTPGetFileEx(). This method is passed the current download total and the number of chunks retrieved already. You can set lCancelDownload to .T. to force FTPGetEx to stop the file download. *:Parameters: <<b>>lnbytesdownloaded<</b>> Total bytes that have been downloaded on this request so far. <<b>>lnbufferreads<</b>> Total number of buffers that have been read so far. <<b>>lccurrentchunk<</b>> Content of the current download chunk read. File information is incremental so it's possible to capture text and append it to a file incrementally for possibly viewing information while it's downloading. *:Returns: *:Example: *** Download with Status Events SET CLASSLIB TO wwIPStuff additive SET PROCEDURE TO wwUtils additive PUBLIC o o=CREATE("myFTP") wait window nowait "Alt-x to abort download..." ON KEY LABEL ALT-X o.lCancelDownload = .T. IF o.FTPConnect("ftp.west-wind.com") # 0 ? o.nError ? o.cErrorMsg RETURN ENDIF IF o.FtpGetFileEx("wconnect.zip","c:\temp\wconnect.zip") # 0 ? o.nError ? o.cErrorMsg RETURN ENDIF ON KEY LABEL ALT-X RETURN *** Implementation of Message Display and abort code Define class myFtp as wwFTP Function OnFTPBufferUpdate LPARAMETER lnBytesDownloaded,lnBufferReads,lcCurrentChunk DO CASE CASE lnBufferReads > 0 wait window "Downloaded: " + TRANSFORM(lnBytesDownloaded)+ " bytes (Alt-X to cancel)" nowait CASE lnBufferReads = -1 wait window "Download aborted..." timeout 2 ENDCASE RETURN ENDDEFINE *:Remarks: *:SeeAlso: Class wwftp wwftp::lCancelDownload wwftp::nFTPWorkBufferSize wwftp::FTPGetFileEx wwftp::FTPSendFileEx *:Keywords: *:HelpId: 679 *:ENDHELP ENDTEXT #ENDIF ENDPROC PROCEDURE ftpconnect LPARAMETER lcServer, lcUsername, lcPassword LOCAL lhIP, lhHTTP, lnError, lnHTTPPort lcServer=TRIM(IIF(!EMPTY(lcServer),lcServer,THIS.cServer)) lcUsername=TRIM(IIF(!EMPTY(lcUsername),lcUsername,THIS.cUsername)) lcPassword=TRIM(IIF(!EMPTY(lcPassword),lcPassword,THIS.cPassword)) *** Assign Default Ports IF THIS.nHTTPPort = 0 lnHTTPPort = INTERNET_DEFAULT_FTP_PORT ELSE lnHTTPPort = THIS.nHTTPPort ENDIF THIS.cServer = lcServer THIS.nError=0 THIS.cErrorMsg="" DECLARE INTEGER InternetCloseHandle ; IN WinInet.DLL ; INTEGER DECLARE INTEGER GetLastError; IN WIN32API DECLARE INTEGER InternetOpen ; IN WININET.DLL ; STRING,; INTEGER,; STRING, STRING, INTEGER hInetConnection=; InternetOpen("West Wind Web Connection 3.00",; THIS.nHTTPConnectType,; NULL,NULL,0) IF hInetConnection = 0 THIS.nError=GetLastError() THIS.cErrorMsg=THIS.GetSystemErrorMsg(THIS.nError) RETURN THIS.nError ENDIF THIS.hIPSession=hInetConnection THIS.WinInetSetTimeout() DECLARE INTEGER InternetConnect ; IN WININET.DLL ; INTEGER hIPHandle,; STRING lpzServer,; INTEGER dwPort, ; STRING lpzUserName,; STRING lpzPassword,; INTEGER dwServiceFlags,; INTEGER dwReserved,; INTEGER dwReserved lhFTPSession=; InternetConnect(hInetConnection,; lcServer,; lnHTTPPort,; lcUsername,; lcPassword,; INTERNET_SERVICE_FTP,; THIS.nServiceFlags,0) IF (lhFTPSession = 0) lnError = 0 lcErrMsg = SPACE(256) lnErrLen = LEN(lcErrMsg) DECLARE INTEGER InternetGetLastResponseInfo ; IN WININET.DLL ; INTEGER @dwError,; STRING @szBuffer,; INTEGER @dwBufferLength lnResult = InternetGetLastResponseInfo(@lnError,@lcErrMsg,@lnErrLen) =InternetCloseHandle(hInetConnection) THIS.nError = GetLastError() IF THIS.nError = 0 THIS.cErrorMsg = lcErrMsg THIS.nError = 1 ELSE THIS.cErrorMsg = THIS.GetSystemErrorMsg() ENDIF RETURN THIS.nError ENDIF THIS.hIPSession = hInetConnection THIS.hFTPSession = lhFTPSession RETURN 0 #IF .F. TEXT ******************************** * HELP BUILDER COMMENT BLOCK * ******************************** *:Help Documentation *:Topic: wwftp::ftpconnect *:Description: Connects to an FTP site and allows passing of a user name and password. *:Parameters: <<b>>cServer<</b>> The server to connect to. Example: ftp.west-wind.com or 127.0.0.1 <<b>>lcUsername<</b>> <<i>>Optional<</i>> - username for authenticated connections to the server <<b>>lcPassword<</b>> <<i>>Optional<</i>> - password for authenticated connections to the server *:Returns: *:Example: oFTP = CREATE("wwFTP") oFTP.FTPConnect("ftp.west-wind.com") oFTP.FTPGetFile("pkzip.exe","c:\temp\pkzip.exe") oFTP.FTPClose() *:Remarks: *:SeeAlso: Class wwftp *:Keywords: *:HelpId: 680 *:ENDHELP ENDTEXT #ENDIF ENDPROC PROCEDURE ftpclose DECLARE INTEGER InternetCloseHandle ; IN WININET.DLL ; INTEGER hIPSession =InternetCloseHandle(THIS.hFTPSession) =InternetCloseHandle(THIS.hIPSession) THIS.hFTPSession=0 THIS.hIPSession=0 #IF .F. TEXT ******************************** * HELP BUILDER COMMENT BLOCK * ******************************** *:Help Documentation *:Topic: wwftp::ftpconnect *:Description: Connects to an FTP site and allows passing of a user name and password. *:Parameters: <<b>>cServer<</b>> The server to connect to. Example: ftp.west-wind.com or 127.0.0.1 <<b>>lcUsername<</b>> <<i>>Optional<</i>> - username for authenticated connections to the server <<b>>lcPassword<</b>> <<i>>Optional<</i>> - password for authenticated connections to the server *:Returns: *:Example: oFTP = CREATE("wwFTP") oFTP.FTPConnect("ftp.west-wind.com") oFTP.FTPGetFile("pkzip.exe","c:\temp\pkzip.exe") oFTP.FTPClose() *:Remarks: *:SeeAlso: Class wwftp *:Keywords: *:HelpId: 680 *:ENDHELP ENDTEXT #ENDIF ENDPROC PROCEDURE ftpsendfileex LPARAMETER lcSourceFile, lcTargetFile LOCAL lhFile, lnRetVal, lnBytesRead, lnBufferReads, lcWriteBuffer, hFTPFile DECLARE INTEGER FtpOpenFile ; IN WININET.DLL ; INTEGER hIPSession,; STRING @lpszFileName,; INTEGER dwAcessFlags,; INTEGER dwServiceFlags,; INTEGER dwContext DECLARE INTEGER InternetWriteFile ; IN WININET.DLL ; INTEGER hFTPHandle,; STRING lcBuffer,; INTEGER cbBuffer,; INTEGER @cbBuffer hFTPFile = FtpOpenFile(THIS.hFTPSession,lcTargetFile,; GENERIC_WRITE,; INTERNET_FLAG_RELOAD + FTP_TRANSFER_TYPE_BINARY,0) IF hFTPFile = 0 THIS.nError = GetLastError() THIS.cErrorMsg = THIS.GetSystemErrorMsg() RETURN THIS.nError ENDIF *** Read the file from disk lhFile = FOPEN(lcSourceFile) IF lhFile = -1 THIS.cErrorMsg = "Source file doesn't exist or is in use..." THIS.nError = 1 RETURN 1 ENDIF tnBufferSize = 0 lnBufferReads = 0 DO WHILE .T. *** Read one chunk at a time lcWriteBuffer = FRead(lhFile,THIS.nFTPWorkBufferSize) IF LEN(lcWriteBuffer) = 0 EXIT ENDIF *** And write out each chunk lnSize=LEN(lcWriteBuffer) lnBytesRead = 0 lnRetval=InternetWriteFile(hFTPFile,; lcWriteBuffer,; lnSize,; @lnBytesRead) IF lnRetVal = 1 AND lnBytesRead > 0 *** Update the input parameters - result buffer and size of buffer tnBufferSize = tnBufferSize + lnBytesRead lnBufferReads = lnBufferReads + 1 THIS.OnFTPBufferUpdate(tnBufferSize,lnBufferReads,"") ENDIF IF THIS.lCancelDownload THIS.cErrorMsg = "Download canceled by user" EXIT ENDIF IF (lnRetVal = 1 AND lnBytesRead = 0) OR (lnRetVal = 0) EXIT ENDIF ENDDO InternetCloseHandle(hFTPFile) lnBufferSize = tnBufferSize THIS.OnFTPBufferUpdate(0,-1,"") FCLOSE(lhFile) RETURN 0 #IF .F. TEXT ******************************** * HELP BUILDER COMMENT BLOCK * ******************************** *:Help Documentation *:Topic: wwftp::FTPSendFileEx *:Description: Uploads a file to an FTP site with event progress information and the ability to cancel. *:Parameters: <<b>>cSourceFile<</b>> Local file to send to the server. <<b>>cTargetFile<</b>> Filename on the server to copy the file to. *:Returns: *:Example: *:Remarks: You must have rights to write to the FTP directory based on the FTP server permissions. Write permissions are not granted to FTP directories by default, so you have to make sure that you can upload files in the first place. You can check this out with your regular FTP client. *:SeeAlso: Class wwftp wwFTP::OnFTPBufferUpdate wwFTP::lCancelDownload *:Keywords: *:HelpId: 682 *:ENDHELP ENDTEXT #ENDIF ENDPROC PROCEDURE parsefiletime LPARAMETER lcFTime LOCAL lcSysTime, lnYear, lnMonth, lnDay, lnHour, lnMinute, lnSecond, lcDTime DECLARE INTEGER FileTimeToSystemTime ; IN WIN32API ; STRING sFileTime, ; STRING @sSysTime lcSysTime = SPACE(16) FileTimeToSystemTime( lcFTime, @lcSysTime) lnYear = CharToBin(LEFT(lcSysTime,2)) lnMonth = CharToBin(SUBSTR(lcSysTime,3,2)) lnDay = CharToBin(SUBSTR(lcSysTime,7,2)) lnHour = CharToBin(SUBSTR(lcSysTime,9,2)) lnMinute = CharToBin(SUBSTR(lcSysTime,11,2)) lnSecond = CharToBin(SUBSTR(lcSysTime,13,2)) lcDTime = ALLTRIM(STR(lnMonth)) + '/' + ALLTRIM(STR(lnDay)) + '/' + ALLTRIM(STR(lnYear)) + ' ' + ; ALLTRIM(STR(lnHour)) + ':' + ALLTRIM(STR(lnMinute)) + ':' + ALLTRIM(STR(lnSecond)) RETURN CTOT(lcDTime) ENDPROC PROCEDURE ftpsendfile LPARAMETERS lcFTPServer, lcSource, lcTarget, lcUsername, lcPassword LOCAL lnResult lcFTPServer=IIF(type("lcFTPServer")="C",lcFTPServer,THIS.cFTPServer) lcSource=IIF(type("lcSource")="C",lcSource,THIS.cFTPSource) lcTarget=IIF(type("lcTarget")="C",lcTarget,THIS.cFTPTarget) lcUserName=IIF(type("lcUserName")="C",lcUserName,THIS.cUsername) lcPassword=IIF(type("lcPassword")="C",lcPassword,THIS.cPassword) lnBinary=THIS.nFTPBinary lnResult = THIS.FTPConnect(lcFTPServer,lcUserName,lcPassWord) IF lnResult # 0 RETURN lnResult ENDIF DECLARE Integer FtpPutFile ; IN WinInet.dll ; Integer hFTPSession,; STRING lpzSource,; STRING lpzTarget,; INTEGER nBinary,; INTEGER nReserved lnResult=FtpPutFile(THIS.hFTPSession,; lcSource,; lcTarget,; lnBinary,; 0) IF lnResult = 0 THIS.nError = GetLastError() THIS.cErrorMsg = THIS.GetSystemErrorMsg() THIS.FTPClose() RETURN THIS.nError ENDIF THIS.FTPClose() RETURN 0 DECLARE INTEGER FTPSendFile ; IN (THIS.cDLLPath) ; STRING cServer,; STRING cSource,; STRING cTarget,; INTEGER nBinary,; STRING cUsername,; STRING cPassword THIS.nError = 0 lnResult=FTPSendFile(lcFTPServer, lcSource, lcTarget, THIS.nFTPBinary, lcUsername,lcPassword) IF lnResult # 0 THIS.nError = lnResult THIS.cErrorMsg = THIS.GetSystemErrorMsg() ENDIF RETURN lnResult ************************************************************************ * wwIPStuff :: FTPSendFile ********************************* *** Function: Sends a file from the local machine to an FTP server *** Assume: Synchronous method - waits for completion without *** status reports *** Pass: lcFTPServer - *** lcSource - Source file on the FTP site *** lcTarget - Name to save to *** lcUsername - Username - "" for Anonymous *** lcPassword - Password - "" for Anonymous *** Return: 0 on success - otherwise Win32 API Error Code *** 12003 - Permissions error *** 3 - Path not found *** 5 - Access denied (local file) ************************************************************************ ENDPROC PROCEDURE ftpgetfile LPARAMETERS lcFTPServer, lcSource, lcTarget, lnBinary, lcUsername, lcPassword lnBinary=IIF(EMPTY(lnBinary),FTP_TRANSFER_TYPE_BINARY,lnBinary) IF EMPTY(lcFTPServer) lcFTPServer = THIS.cFTPServer ENDIF IF EMPTY(lcSource) lcSource = THIS.cFTPSource ENDIF IF EMPTY(lcTarget) lcTarget = THIS.cFTPTarget ENDIF IF EMPTY(lcUserName) lcUserName = THIS.cUserName ENDIF IF EMPTY(lcPassWord) lcPassword = THIS.cPassword ENDIF lnResult = THIS.FTPConnect(lcFTPServer,lcUserName,lcPassWord) IF lnResult # 0 RETURN lnResult ENDIF DECLARE Integer FtpGetFile ; IN WinInet.dll ; Integer dwIPSession,; String cSource,; String cTarget, ; Integer bNoOverwrite,; INTEGER nAttributes, ; Integer nFlags, ; Integer nContext lnResult = FtpGetFile(THIS.hFTPSession,lcSource,; lcTarget,0,FILE_ATTRIBUTE_NORMAL,; lnBinary + INTERNET_FLAG_RELOAD,0) IF lnResult = 0 THIS.nError = GetLastError() THIS.cErrorMsg = THIS.GetSystemErrorMsg() THIS.FTPClose() RETURN THIS.nError ENDIF THIS.FTPClose() RETURN 0 #IF .F. TEXT ******************************** * HELP BUILDER COMMENT BLOCK * ******************************** *:Help Documentation *:Topic: wwftp::FTPGetFile *:Description: Simple FTP retrieval method. This method retrieves a file from an FTP server with a single method call. This method is synchronous and does not fire any events. *:Parameters: <<b>>cServer<</b>> The server to connect to. Example: <<i>>ftp.west.wind.com<</i>> or <<i>>123.123.123.213<</i>> <<b>>cSourceFile<</b>> Source File on the FTP Server. <<b>>cTargetFile<</b>> Target file on the local system. <<b>>cUsername<</b>> <<i>>Optional<</i>> - Username when connecting to a secure directory. <<b>>cPassword<</b>> <<i>>Optional<</i>> - Password when connecting to a secure directory *:Returns: *:Example: o=create("wwFTP") o.FTPGetFile("ftp.west-wind.com","/downloads/pkzip.exe",; "c:\temp\pkzip.exe") *:Remarks: This method provides no mechanism for reporting progress information. *:SeeAlso: Class wwftp wwFTP::FTPGetFileEx *:Keywords: *:HelpId: 704 *:ENDHELP ENDTEXT #ENDIF ENDPROC PROCEDURE aftpdir LPARAMETERS lafiles,lcfilespec *** W32_FILE_FIND structure lsFileFind = SPACE(320) lnFindHandle = 0 *** Offsets into structure #DEFINE POS_FILENAME 45 #DEFINE POS_FILESIZE 33 #DEFINE POS_FILEATTRIBUTES 1 #DEFINE MAX_PATH 260 #DEFINE DIR_DIMENSIONS 4 THIS.nError = 0 DECLARE INTEGER FtpFindFirstFile ; IN WININET.DLL ; INTEGER hFTPSession,; STRING cFileSpec,; STRING @sFileFind,; INTEGER nFlags,; INTEGER nContext *** Find the first file and get info into lsFileFind structure lnFindHandle = ; FtpFindFirstFile(THIS.hFTPSession,; lcfilespec,; @lsFileFind,; 0,0) IF lnFindHandle = 0 THIS.nError = GetLastError() THIS.cErrorMsg = THIS.GetSystemErrorMsg() RETURN 0 ENDIF *** Parse out the various fields we're interested in DIMENSION lafiles[1,DIR_DIMENSIONS] lcFileName = SUBSTR(lsFileFind,POS_FILENAME,MAX_PATH) lafiles[1,1] = SUBSTR(lcFileName,1,ATC(CHR(0),lcFileName)-1) lcAttributes = SUBSTR(lsFileFind,POS_FILEATTRIBUTES,4) lafiles[1,3] = CharToBin(lcAttributes) lcSize = SUBSTR(lsFileFind,POS_FILESIZE,4) lafiles[1,2] = CharToBin(lcSize) laFiles[1,4] = THIS.ParseFileTime(SUBSTR(lsFileFind, 21, 8)) lnFileCount = 1 DECLARE INTEGER InternetFindNextFile ; IN WinInet.DLL ; INTEGER hFindHandle,; STRING @lsFileFind *** Loop through the file list DO WHILE InternetFindNextFile(lnFindHandle,@lsFileFind) # 0 lnFileCount = lnFileCount + 1 lcFileName = SUBSTR(lsFileFind,POS_FILENAME,MAX_PATH) DIMENSION lafiles[lnFileCount,DIR_DIMENSIONS] lafiles[lnFileCount,1] = SUBSTR(lcFileName,1,ATC(CHR(0),lcFileName)-1) lcAttributes = SUBSTR(lsFileFind,POS_FILEATTRIBUTES,4) lafiles[lnFileCount,3] = CharToBin(lcAttributes) lcSize = SUBSTR(lsFileFind,POS_FILESIZE,4) lafiles[lnFileCount,2] = CharToBin(lcSize) lafiles[lnFileCount,4] = THIS.ParseFileTime(SUBSTR(lsFileFind, 21, 8)) ENDDO InternetCloseHandle(lnFindHandle) RETURN lnFileCount #IF .F. TEXT ******************************** * HELP BUILDER COMMENT BLOCK * ******************************** *:Help Documentation *:Topic: wwftp::aFTPDir *:Description: This method retrieves a directory listing from an FTP directory into an array. The array returns the name, file attributes and size of the file. *:Parameters: <<b>>@aFiles<</b>> Array that contains the list of files. The array has 4 dimensions: 1 - Filename 2 - File Size 3 - File Attribute (numeric) 4 - Date Time value (not implemented yet) <<b>>cFileSpec<</b>> A filespec that specifies which directory to get a listing for. The file spec should include wild card characters like *.* to specify all files or *.txt to show all text files. *:Returns: numeric - the number of files returned by the directory. If this value is 0 you can check the nError and cErrorMsg properties for error conditions, but only if an error occurred. *:Example: oFTP = CREATE("wwFTP") oFTP.FTPConnect("ftp.west-wind.com") DIMENSION laFiles[1,4] lnResult = oFTP.aFTPDir(@laFiles,"/*.*") FOR x=1 to lnResult ? laFiles[x,1],laFiles[x,2],laFiles[x,3] ENDFOR *:Remarks: This method requires that you manually call FTPConnect and FTPClose to open and close the FTP session. *:SeeAlso: Class wwftp *:Keywords: *:HelpId: 703 *:ENDHELP ENDTEXT #ENDIF ENDPROC PROCEDURE ftpcreatedirectory LPARAMETER lcPath IF EMPTY(lcPath) RETURN .F. ENDIF DECLARE INTEGER FtpCreateDirectory ; IN WININET.DLL ; INTEGER hConnect,; STRING lpszDirectory RETURN IIF(FtpCreateDirectory(THIS.hftpsession,lcPath)=0,.F.,.T.) ENDPROC PROCEDURE ftpremovedirectory LPARAMETER lcPath IF EMPTY(lcPath) RETURN .F. ENDIF DECLARE INTEGER FtpRemoveDirectory ; IN WININET.DLL ; INTEGER hConnect,; STRING lpszDirectory RETURN IIF(FtpRemoveDirectory(THIS.hftpsession,lcPath)=0,.F.,.T.) ENDPROC PROCEDURE ftpdeletefile LPARAMETERS lcfile DECLARE INTEGER FtpDeleteFile ; IN WinInet.dll ; INTEGER hFTPSession,; STRING cFileName IF FtpDeleteFile(THIS.hFTPSession,lcFile) = 0 THIS.nError = GetLastError() THIS.cErrorMsg = THIS.GetSystemErrorMsg() RETURN THIS.nError ENDIF RETURN 0 #IF .F. TEXT ******************************** * HELP BUILDER COMMENT BLOCK * ******************************** *:Help Documentation *:Topic: wwftp::FTPDeleteFile *:Description: Deletes a file on the FTP server. *:Parameters: <<b>>cFileName<</b>> The filename to delete on the server. This filename can include a FTP server relative path such as "/uploads/somefile.txt". No wildcards are allowed. *:Returns: numeric - Windows API or WinInet API error code. 0 - on success, other on failure *:Example: oFTP = CREATE("wwFTP") oFTP.FTPConnect("ftp.west-wind.com") DIMENSION laFiles[1,4] IF oFTP.DeleteFile("/uploads/somefile.txt") # 0 ? oFTP.cErrorMsg RETURN ENDIF ? "File deleted..." oFTP.Close() *:Remarks: This method requires that you manually call FTPConnect and FTPClose to open and close the FTP session. In order to delete files you have to have the appropriate rights on the server. *:SeeAlso: Class wwftp wwFTP::FTPConnect wwFTP::FTPClose *:Keywords: *:HelpId: 702 *:ENDHELP ENDTEXT #ENDIF ENDPROC PROCEDURE ftpcommand LPARAMETER lcCommand, lcBuffer, lnSize DECLARE INTEGER FtpCommand ; IN WININET.DLL ; INTEGER hConnect,; INTEGER fExpectResponse,; INTEGER dwFlags,; STRING lpzCommand,; INTEGER dwContext,; INTEGER @phFTPCommandResultHandle lhResult = 0 lnResult = FtpCommand(THIS.hFTPSession,1,0,lcCommand,0,@lhResult) IF lnResult = 0 THIS.nError = GetLastError() THIS.cErrorMsg = THIS.GetSystemErrorMsg() RETURN lnResult ENDIF IF LEN(lcBuffer) = 0 lcBuffer = SPACE(4096) lnSize = LEN(lcBuffer) ELSE lnSize = LEN(lcBuffer) ENDIF DECLARE INTEGER InternetReadFile ; IN WININET.DLL ; INTEGER hFTPHandle,; STRING lcBuffer,; INTEGER cbBuffer,; INTEGER @cbBuffer lnBytesRead = 0 lnRetval=InternetReadFile(lhResult,; @lcBuffer,; lnSize,; @lnBytesRead) IF lnRetVal = 1 AND lnBytesRead > 0 lnSize = lnBytesRead lcBuffer = SUBSTR(lcBuffer,1,lnBytesRead) ELSE lcBuffer = "" lnSize = 0 ENDIF InternetCloseHandle(lhResult) RETURN 0 ENDPROC PROCEDURE ftprenamefile LPARAMETERS lcOldName, lcNewName Declare integer FtpRenameFile ; in wininet.dll ; INTEGER HCONNECT, ; STRING lpszExisting, ; STRING lpszNew lnResult = FtpRenameFile(THIS.hftpsession, lcOldName, lcNewName) IF lnResult # 0 THIS.nError = GetLastError() THIS.cErrorMsg = THIS.GetSystemErrorMsg() RETURN THIS.nError ENDIF RETURN 0 ENDPROC �����' ���n'��n'������������������������~���%���"������U&��K��#������������U��9 ����#�������� �,�| �FtpOpenFile �WININET.DLL/�|�InternetReadFile �WININET.DLL2�T�C����� �������A ���@���A� ��%����T��C��T��C�� �B����T��- �T��� �T�� �T�� �T�� �T� �T ���T�C��%�0�T�� �Output file couldn't be created.�C����BC� �+a�T�C��X �T���T�C�>�T�C������ ��%���� �C�C��=�T����T � ��C��� �����)�%����  ��� �!��%�� �C� � ��!���C��� �T���C����� �C� �B��U� �LCSOURCEFILE �LCTARGETFILE �LHFILEHANDLE�HFTPFILE�TCBUFFER�TNSIZE �TNBUFFERSIZE�LNRETVAL �LNBYTESREAD �LNBUFFERREADS �FTPOPENFILE�WININET�DLL�INTERNETREADFILE�THIS �HFTPSESSION�NERROR �GETLASTERROR �CERRORMSG�GETSYSTEMERRORMSG�LCANCELDOWNLOAD�INTERNETCLOSEHANDLE �LCREADBUFFER�NFTPWORKBUFFERSIZE�LNSIZE�ONFTPBUFFERUPDATE �LNBUFFERSIZE�������U��LNBYTESDOWNLOADED �LNBUFFERREADS�LCCURRENTCHUNK����������#�T��CCC�� ������6`#�T�CCC� ���� �6`#�T�CCC� ���� �6`�%� ��� �T����T�� ���T�����T� ���T� ���+�|�InternetCloseHandle �WinInet.DLL �| �GetLastError�WIN32API,�| �InternetOpen �WININET.DLL9�T�C�West Wind Web Connection 3.00�����%���T� �C��T� �C� ��� �B� ���T��� �C��5�|�InternetConnect �WININET.DLL.�T�C����������������%�� �T���T�C�X�T�C�>:�|�InternetGetLastResponseInfo �WININET.DLL�T�C�����C����T� �C��%� ��Y�T� ���T� ��u�T� �C��� �B� ���T����T� �� �B��U!��LCSERVER �LCUSERNAME �LCPASSWORD�LHIP�LHHTTP�LNERROR �LNHTTPPORT�THIS�CSERVER �CUSERNAME �CPASSWORD �NHTTPPORT�NERROR �CERRORMSG�INTERNETCLOSEHANDLE�WININET�DLL �GETLASTERROR�WIN32API �INTERNETOPEN�HINETCONNECTION�NHTTPCONNECTTYPE�GETSYSTEMERRORMSG �HIPSESSION�WININETSETTIMEOUT�INTERNETCONNECT �LHFTPSESSION �NSERVICEFLAGS�LCERRMSG�LNERRLEN�INTERNETGETLASTRESPONSEINFO�LNRESULT �HFTPSESSIONn�+�|�InternetCloseHandle �WININET.DLL�C�����C�����T����T����U��INTERNETCLOSEHANDLE�WININET�DLL�THIS �HFTPSESSION �HIPSESSION �����������,�| �FtpOpenFile �WININET.DLL0�|�InternetWriteFile �WININET.DLL-�T�C � ��� ���@ ���@���A���%����T ��C��T ��C �� �B ����T�C���%�h9�T ��)�Source file doesn't exist or is in use...�T �� �B� �T�� �T�� �+a�T�C� ���%C�>��!��T�C�> �T���T�C������� ��%���� R�T����T���C������ ����% ��)�T ���Download canceled by user�!�)�%����  ��� �!���C��� �T���C��� �� �C� �B��U� �LCSOURCEFILE �LCTARGETFILE�LHFILE�LNRETVAL �LNBYTESREAD �LNBUFFERREADS �LCWRITEBUFFER�HFTPFILE �FTPOPENFILE�WININET�DLL�INTERNETWRITEFILE�THIS �HFTPSESSION�NERROR �GETLASTERROR �CERRORMSG�GETSYSTEMERRORMSG �TNBUFFERSIZE�NFTPWORKBUFFERSIZE�LNSIZE�ONFTPBUFFERUPDATE�LCANCELDOWNLOAD�INTERNETCLOSEHANDLE �LNBUFFERSIZEk���#���������,�|�FileTimeToSystemTime�WIN32API�T�CX�C���� ��T�CC�= ��T�CC�\ ��T�CC�\ ��T�CC� \ ��T�CC� \ ��T�CC� \ �R�T�CC�Z�/CC�Z�/CC�Z� CC�Z�:CC�Z�:CC�Z �BC��U ��LCFTIME �LCSYSTIME�LNYEAR�LNMONTH�LNDAY�LNHOUR�LNMINUTE�LNSECOND�LCDTIME�FILETIMETOSYSTEMTIME�WIN32API �CHARTOBIN���������0�T��CC �lcFTPServerb�C������6-�T�CC�lcSourceb�C�����6-�T�CC�lcTargetb�C���� �6/�T�CC �lcUserNameb�C���� �6/�T�CC �lcPasswordb�C���� �6�T �� ��T�C����������%��M �B��*�| �FtpPutFile �WinInet.dll#�T�C������� ����%���T��C��T��C�� �C�� �B��� �C�� �B�(�| �FTPSendFile���T���(�T�C�������� �������%���T����T��C��� �B��U� �LCFTPSERVER�LCSOURCE�LCTARGET �LCUSERNAME �LCPASSWORD�LNRESULT�THIS �CFTPSERVER �CFTPSOURCE �CFTPTARGET �CUSERNAME �CPASSWORD�LNBINARY �NFTPBINARY �FTPCONNECT �FTPPUTFILE�WININET�DLL �HFTPSESSION�NERROR �GETLASTERROR �CERRORMSG�GETSYSTEMERRORMSG�FTPCLOSE �FTPSENDFILE�CDLLPATH���������T�CC����6�%C��W��T������%C�z��T�����%C���T�� ���%C���T�� ���%C���T�� ���T �C�������� ��% �� �B ��.�| �FtpGetFile �WinInet.dll4�T �C������� � �������A���% ���T��C��T��C�� �C�� �B��� �C�� �B��U� �LCFTPSERVER�LCSOURCE�LCTARGET�LNBINARY �LCUSERNAME �LCPASSWORD�THIS �CFTPSERVER �CFTPSOURCE �CFTPTARGET �CUSERNAME �CPASSWORD�LNRESULT �FTPCONNECT �FTPGETFILE�WININET�DLL �HFTPSESSION�NERROR �GETLASTERROR �CERRORMSG�GETSYSTEMERRORMSG�FTPCLOSE �����T�C@X �T���T���1�|�FtpFindFirstFile �WININET.DLL"�T�C� ��������%����T��C ��T� �C� � �B������T �C�-\,�T��C �CC� �\�T�C�\�T��C����T�C�!\�T��C���(�T��CC�\�� �T�/�|�InternetFindNextFile �WinInet.DLL�+C������T���T �C�-\����,�T���C �CC� �\�T�C�\�T���C����T�C�!\�T���C���(�T���CC�\����C��� �B��U��LAFILES �LCFILESPEC �LSFILEFIND �LNFINDHANDLE�THIS�NERROR�FTPFINDFIRSTFILE�WININET�DLL �HFTPSESSION �GETLASTERROR �CERRORMSG�GETSYSTEMERRORMSG �LCFILENAME �LCATTRIBUTES �CHARTOBIN�LCSIZE �PARSEFILETIME �LNFILECOUNT�INTERNETFINDNEXTFILE�INTERNETCLOSEHANDLEr�����%C����B-�,�|�FtpCreateDirectory �WININET.DLL"�BCC��������-�a6�U��LCPATH�FTPCREATEDIRECTORY�WININET�DLL�THIS �HFTPSESSIONr�����%C����B-�,�|�FtpRemoveDirectory �WININET.DLL"�BCC��������-�a6�U��LCPATH�FTPREMOVEDIRECTORY�WININET�DLL�THIS �HFTPSESSION����'�| �FtpDeleteFile �WinInet.dll�%C�������{��T��C��T��C� � �B��� �B��U ��LCFILE �FTPDELETEFILE�WININET�DLL�THIS �HFTPSESSION�NERROR �GETLASTERROR �CERRORMSG�GETSYSTEMERRORMSG�����-�| �FtpCommand �WININET.DLL �T��%�T�C� ���������%����T� �C ��T� �C� � �B���%C�>���T�C�X�T�C�>���T�C�>�/�|�InternetReadFile �WININET.DLL �T���T�C��������%����  �T���T�C��\� �T��� �T����C��� �B��U� �LCCOMMAND�LCBUFFER�LNSIZE �FTPCOMMAND�WININET�DLL�LHRESULT�LNRESULT�THIS �HFTPSESSION�NERROR �GETLASTERROR �CERRORMSG�GETSYSTEMERRORMSG�INTERNETREADFILE �LNBYTESREAD�LNRETVAL�INTERNETCLOSEHANDLE� ����)�| �FtpRenameFile �wininet.dll�T�C���������%����T��C ��T� �C� � �B��� �B��U � �LCOLDNAME �LCNEWNAME �FTPRENAMEFILE�WININET�DLL�LNRESULT�THIS �HFTPSESSION�NERROR �GETLASTERROR �CERRORMSG�GETSYSTEMERRORMSG �ftpgetfileex,������onftpbufferupdate���� �ftpconnect�����ftpclosee ���� �ftpsendfileex ���� �parsefiletime{���� �ftpsendfilef���� �ftpgetfile7�����aftpdir)�����ftpcreatedirectoryQ�����ftpremovedirectory���� �ftpdeletefile���� �ftpcommand���� �ftprenamefile\!����1��1$A�A���������!��A��!��3A�B�A���A�A�A���s��`1��1��1211C��A��A��[#���A�AA��A��p1�`1��A�A��!�A����R1A�A���A�A�A�A�A�A���q���1�q�1�!a#�2�qq��A�6A��A���AA�� 1��A��A��A��A��A��A�DA��A���1��� 'A�A�3aRR�a1RRA���1�q��q�A�"3�q��q�A�"2�q�uA�A��1���QA�A�2���A���Q���A���3��A�A��1����������������������� �����3��� �������6���7��!�����e���5!��%����l���%��0�������0��3��?�����3��<��W����� =��F�������$F��^S���� ��S��zT������T��U������U��B[����%��c[��x_����A��_�� a��;���)���n'�����������������������# ���"��"������������������������/j���%���*������E"��F��������������U�� ���������&�T��CC���C������6�T��-�T� ���.�%CC��@�select�create�execute � �T�a�� �T�-�,�T�C� �� ������ � ��%��*�T� �� � ��T����T��a�B-��C� ���C�cSQL���� ��)�C�nMaxBufferSizeC��_� ��&�C �nResultModeC��_� ��#�C �cSQLCursor��� ��*�C�cSQLConnectString��� ��'�C�cSQLParameters��� ���%��M!�C�lUseZip�True� ����%��,�C�lCreateXMLStruture�True� ����%��� �T��� �T����T�C��X�T����"�T�C����� ���%��[�T� �� � ��T����T��a�B-��T��� �%��%C��Ba���%C� ���OK 9�T� �)�No data was returned from this request...�T���T��a�B-���%��Errorm�T� ���T���T��a�B-� �%��Ba��%����T����%���%C�� �F���Q��T�C�wwXMLN�C�������%��6�T� �&�Error: Unable to parse XML into cursor�T��a�T���B-���*�T�CCC]CC�(\`�dbf6�%C��C���C��zip��6� � � 9�T� �)�Error: Error Decoding the downloaded file5�%C�401���C �Unauthorized�� C�T� �3�Error: Unauthorized access. Check username/password��T���T��a�B-��%��-�%CC��zipCC]� �!��� C��*b�T� �R�Error: Unzipping failed. Most likely you selected too many messages to download...�T���T��a�B-���Q���"�#�o �THTTPImporta���Q"�� C��*��Ba�U#��LCSQL�LNSIZE�LNBUFFER�LNRESULT �LLNORESULTSET�LCBUFFER�THIS�CSQL�LERROR �CERRORMSG�OHTTP �HTTPCONNECT �CSERVERNAME �CUSERNAME �CPASSWORD�LSECURE�NERROR �ADDPOSTKEY�NMAXBUFFERSIZE �NRESULTMODE �CSQLCURSOR�CSQLCONNECTSTRING�CSQLPARAMETERS �LISZIPPED�LCREATEXMLSTRUCTURE �HTTPGETEX �CHTTPLINK �NRESULTSIZE �CXMLRESULT�LOXML �XMLTOCURSOR �LCFILENAME �DECODEDBF �UNZIPFILES �THTTPIMPORT' ����'�������� � �� ��T ��� ��T�����T��-�T�����%C������� ��B��T�C ���%��<?xml��T ��a��T�C�cSQL ���T�C�C � �T�C�C ���T�CC� =@�T�CC�lUseZip �� $�T�CC�nMaxBufferSize ��g�%���T��!�T�CC �nResultMode ��g�T���'�T�CC�cSQLConnectString ��`"�T �C�cSQLParameters �� �T�-�%��J �T�a�T�C�wwXMLN��%C�:�CC#�Error: No SQL statement to process.�����B��T �C� ��T!�C� �=#�%C!��,�"��,�%6�CC!�� is not allowed or invalid.�����B�m�%��select���insert ���update ���delete ���create ���execute 5�CC�Only SQL commands are allowed.�����B��%C � �%C��O �T�C�wwXMLN��T#�C�%� ��$��h �TParameter'��M��(�#�)�*��>'�(�+�&�T,�(�-��= TParameter.Value�&lcMacro ��Q&���C �]�%C� �T.�C�wwSQLN�T.�/� �THTTPQuery�%C��.�0� J�%� B�CC.��������B��T1�C��.�2��%.���CC.�������C ]�B���%��select1�T�� � INTO CURSOR THTTPQUery NOFILTER� �T1��T�C�wwEvalN�C���3��%��?�CC�SQL statement caused an error.C ������C ]�B���C ],�%C��select�create�execute �CC�OK�����B��F4� �T����%�� 6�T5�CC�lCreateXMLStructure �� �� �T �C �cSQLCursor ��%�T6�C�lXMLHTTP ���True�%C ��T � �sqlcursor��T�C�wwXMLN�T�7� �wwhttpdata�%5��1� �T�8�a� �H� ��� �%1�a�T�C� ��9���T�CC�1�� ��:��� ��T�C� ��;�� �%6� �%C��O�T�C�wwXMLN��T�C���<�� �%� "�T=�CC]C]�.xml�C�=��T>�C �wwIPStuffN.�%CC=��zipC=��* >�?�� /�C�Error: Unable to zip XML result���B��T�CC=��ZIP��C�text/xml�@�� )�T=�CC]�wwdC]�.dbf�o �THTTPQueryǼ1=��Q�Q4��T>�C �wwIPStuffN �%� .�%CC=��zipC=��* >�?�� .�C�Error - unable to zip the file��� C=��*�B��T�CC=��zip>�A��% �T�C�=�a>�A���%C�u (�C�Error: File not encoded.��� C=��*�B��%C�>� 0�C �Error File is too large to send.��� C=��.*�B�� C=��*(�C�application/octet-stream�@���C�����UB� �LOPROCESS �LCAUTHUSER �LCRESULTALIAS�LOEVAL �LCFILETEXT �LNMAXLENGTH�LCSQL�LLUSEZIP�LOHTML �LCUSERNAME �LCCURSORNAME�LCSQLPARAMETERS�REQUEST�OREQUEST�RESPONSE �ORESPONSE�THIS�LERROR �CERRORMSG �AUTHORIZE�LCXML�FORMXML�LUSEXMLFORMVARS �LCFULLSQL�FORM �LNRESULTMODE �NRESULTMODE�LCSQLCONNECTSTRING�LLXML�LOXML�WRITE �S_RETURNERROR�LNAT �LCCOMMAND�CALLOWEDCOMMANDS�LODOC�LOADXML �CXMLHEADER �TPARAMETER�VALUE�OPARM�DOCUMENTELEMENT �CHILDNODES�TEXT�LCMACRO�NODENAME�LOSQL �CSQLCURSOR�CONNECT�LNRESULTCURSORS�EXECUTE�EXECUTECOMMAND �THTTPQUERY�LLCREATEXMLSTRUCTURE �LLXMLHTTP �CDOCROOTNAME�LCREATEDATASTRUCTURE �CURSORTOXML�MULTICURSORTOXML�CURSORTOADOXML �ENCODEXML �LCFILENAME�LOIP�ZIPFILES�CONTENTTYPEHEADER �ENCODEDBF( �����%Ct�0��T�����B��T��C��@�T���C�T�C���<sqlparameters>C C �</sqlparameters>�@�T��C �<���>��</���>C C O�T���<sqlparameters>C C ��</sqlparameters>C C �U��LCNAME�LCVALUE�THIS�CSQLPARAMETERS�LCSQLPARAMETERS�LCBLOCK�EXTRACT�������T�C�wwXMLN]�B�� �<wwhttpdata>C C C�����C C  �</wwhttpdata>C C �U��LCERROR�LOXML �CXMLHEADER�CREATEERRORXML��� ����%���OK��%�����T�C�wwXMLN�T�C�text/xmla��o�B��� �<wwhttpdata>C C � <result>OK</result>C C  �</wwhttpdata>C C � �B�OK��%������T�C�wwXMLN�T�C�text/xmla��a�B��� �<wwhttpdata>C C C�����C C  �</wwhttpdata>C C ��B�Error: ���U ��LCERROR�LCHEADER�LOXML�THIS �NRESULTMODE�RESPONSE�CONTENTTYPEHEADER �CXMLHEADER�CREATEERRORXML3 �����T��CCC��������6f$�T�CCC �REMOTE_USER��f�%C�� %B�%���ANY�C� !�C�,��,�,���,� !�T�C �wwHTTPHeaderN �C��=�CC��&�Error: Password Authentication failed.���CC� � � ��B-���Ba�U � �LCAUTHUSER �LOPROCESS �LCUSERNAME�REQUEST�SERVERVARIABLES�LOHEADER �DEFAULTHEADER �AUTHENTICATE �GETSERVERNAME�RESPONSE�WRITE �GETOUTPUT��T���C �wwIPStuffN�U��THIS�OHTTP�execute,����� �s_execute �����addsqlparameter�����xmlerrordocumenta���� �s_returnerror���� �authorize4�����Init����1�q�qb����A�a�q�A�a1sA�A�B���!A�"a�q�A���q�A���q�A�A�b�q�A��q�A�BB"�A�A�Ra�q�A�A��bQ1A��q�A�!�q�A�A�22�A�r�3��qq��A�A�a�A�qBAA�q!��QA��A�A�3a1aA�A�QA�A�QQA�Q�Sa�A��D��Qa�A�A�A�R�A�A��qA��a�A�A�A��A�A�r��aQ�aA�R�A��Q�A�QA��QQA�QA��!�B�A�A��A���B�A��aA��A�A�2!A�A�A�3��A�A��24�q�q�R3�q��2AQA��A�Bq�QA�B2��A"�Aq�A�A�w�3�3����������������������� �����n��� ��)�������5)��*��w����!+��+����$�� ,��/����6��!/��1����D��1��1�����)���"����������������������� �����������������������������x���%���G�����������������������U�������������� �T��CC�� � � ����6 �T�CC� � � ���6 �T�CC� � � ���6�T�C�wwXMLN�%C�<?xml��h�T�C�wwXMLN �T����T��C�ProgId��� ��T�C�Method��� � �T�C�Location��� ��T � ����T � ���T � ����%C �� -�%C�,���,�, ���,�N�BC��6� is not in the list of allowed objects to be executed. ����u�%C���, ���qM�BC��5� is excluded from remote access for security reasons. ���� �T����%C�M�T�C�wwXMLN�T��PRIVATE loObjectC C �loObject = CREATEOBJECT('���')C C �lvResult = loObject.�C C �RETURN lvResultC C ��T��PRIVATE loObjectC C �loObject = CREATEOBJECTEX('���',��)C C �lvResult = loObject.�C C �RETURN lvResultC C ��T�C�wwEvalN�C�����%��[�T�C���� ����T�C��_D�%C � ��>� ��<� ��&� �C� � 2�T� �<![CDATA[CC�C� ��`�]]>��T��<?xml version="1.0"?>C C  �<httpcom>C C  � <comresult>� �</comresult>C C � <resulttype>C�� �</resulttype>C C  �</httpcom>C C � �B��U��LCPROGID�LCMETHOD �LCLOCATION�LOXML�LCXML�LCRESULT�LCCODE�LOEVAL�LCOUTPUT�THIS�CPROGID�CMETHOD �CLOCATION �GETOBJVAR�CALLOWEDOBJECTS�CREATEERRORXML�CEXCLUDEDOBJECTS�EXECUTE�LERROR �CERRORMESSAGE�NERROR�RESULTm������������ �#�T � �CC�� � � ����6#�T � �CC� � � ���6#�T � �CC� � � ���6,�T�C �� �� �� �� ����%���T �� ����T ����T ��a�B-� �T ��C������� ���C�RESET ����C�� �� ��� �T��� �T��"�T�C ���� ����T ����%���T �� ����T ����T ��a�B-��%C�U �T ���No data returned�T ���T ��a�B-��BC�� ���U��LCPROGID�LCMETHOD �LCLOCATION�LOIP�LNRESULT�LCBUFFER�LNSIZE�LOXML�LCVALUE�LCTYPE�THIS�CPROGID�CMETHOD �CLOCATION�OHTTP �HTTPCONNECT �CSERVERNAME �CUSERNAME �CPASSWORD�LSECURE �CERRORMSG�NERROR�LERROR�CREQUESTBUFFER �CREATEXML �ADDPOSTKEY �HTTPGETEX �CHTTPLINK �CRESULTBUFFER�RETURNVALUEFROMXML����%C���C)� �T����a��T�����T�����T�����%C�<?xml��%�T����T�C�wwXMLN�T�C�ProgId��� ��T �C�Method��� � �T �C�Location��� �!�T �C �RequestId��� ���T�C�ProgId� ��T �C�Method� ��T �C�Location� ��T �C �RequestId� �� �CC��� �� ������B�U� �LOPROCESS�LCXML�REQUEST�OREQUEST�RESPONSE �ORESPONSE �CFORMVARS�LOXML�LCPROGID �GETOBJVAR�LCMETHOD �LCLOCATION �LCREQUESTID�FORM�WRITE�THIS �CALLCOMOBJECT����� �T��CC�� ������6 �T�CC� �����6 �T�CC� �����6�T��C]B�<?xml version="1.0" ?>C C  �<httpcom>C C � <requestid>�� �</requestid>C C  � <progid>�� �</progid>C C  � <method>� �</method>C C  � <location>� �</location>C C  �</httpcom>C C �U��LCPROGID�LCMETHOD �LCLOCATION�THIS�CPROGID�CMETHOD �CLOCATION �CREQUESTID������ ���$�T�CC� ��httpcom��6�T�CC�����6�T�C�wwXMLNw�T��<?xml version="1.0" ?>C C �<��>C C C��������</��>C C  �B��U� �LCMESSAGE�LNERROR �LCDOCROOT�LOXML�LCOUTPUT�CREATEERRORXML��������T�C�wwXMLN$�T�C �ErrorMessage������%C� ��T����T���T� �a�B-�!�T�C �COMResult�����"�T�C �ResultType����� �H�� ��C �B�� ��N! �BC�g� ��D ���T T�BC�{��}� ��L#�%��.T. �C�f�ON �Ba��B-�� ����B-� �BC��U ��LCXML�LOXML�LCVALUE�LCTYPE �LCERRORMSG �GETOBJVAR�THIS �CERRORMSG�NERROR�LERROR �callcomobject,������execute���� �s_execute ���� �createxml �����createerrorxml�����returnvaluefromxml����1��RQ�A�3A��A�A���Q5 � A�c�"B!A� A��3��211a�q�A���"a�q�A���q�A�3�q�R��A�Q�A�B�2��24���BRt�3�q��SC�q�A�!�!�!�Q!1q��q�A�q�A��2����������������������� �����.��� ��m��M���O�����j��}���g����������n�����[�����v�����������)��������������������������>PROCEDURE addpostkey LPARAMETERS tcKey, tcValue, llFileName LOCAL lcOldAlias tcKey=IIF(VARTYPE(tcKey)="C",tcKey,"") tcValue=IIF(VARTYPE(tcValue)="C",tcValue,"") lcOldAlias=ALIAS() IF tcKey="RESET" OR PCOUNT() = 0 THIS.cPostBuffer = "" RETURN ENDIF IF !EMPTY(tcKey) *** Regular URLEncoded format * THIS.cPostBuffer= && No good for buffers over 1meg DO CASE CASE THIS.nhttppostmode = 1 THIS.cPostBuffer = THIS.cPostBuffer + tcKey +; "="+URLEncode(tcValue)+ "&" OTHERWISE *** Multi-part formvars and file *** Check for File Flag - HTTP File Upload - Second parm is filename IF llFileName THIS.cPostBuffer = THIS.cPostBuffer + ; "--" + MULTIPART_BOUNDARY + CR + ; [Content-Disposition: form-data; name="]+tcKey+[" filename="] + tcValue + ["]+CR+CR+; FILETOSTR(tcValue) + CR ELSE THIS.cPostBuffer = THIS.cPostBuffer + ; "--" + MULTIPART_BOUNDARY + CR + ; [Content-Disposition: form-data; name="]+tcKey+["]+CR+CR+; tcValue+CR ENDIF ENDCASE ELSE *** Raw non-encoded post - Add "-" to buffer to *** allow binary data to be posted without truncation THIS.cPostBuffer = THIS.cPostBuffer + tcValue ENDIF #IF .F. ******************************** * HELP BUILDER COMMENT BLOCK * ******************************** *:Help Documentation *:Topic: wwipstuff::addpostkey *:Description: Adds a POST KEY AND VALUE pair TO be USED IN a POST operation WITH HTTPGetEx(). Does whatever... *:Parameters: <<b>>tcKey<</b>> The KEY VALUE TO SET. One SPECIAL VALUE can also be USED: RESET - clears ANY existing POST DATA. No VALUE IS required TO be passed IN THIS CASE <<b>>tcValue<</b>> The VALUE TO SET The KEY TO. IN combination these VALUES are equivalent TO a FORM Variable NAME AND VALUE. *:Returns: *:Example: *:Remarks: Internally uses a CURSOR IN ORDER TO handle large POST FIELD VALUES. The CURSOR NAME IS wwPostBuffer. IF you're using multiple wwIPStuff objects simultaneously this may cause a problem. It's recommended you ONLY USE One OBJECT AT a TIME IF you plan ON using HTTPGetEx AND posting VALUES. Depending ON The VALUE OF The <<%= TopicLink("nHTTPPostMode","wwipstuff::nhttppostmode") %>> property FORMS are posted either IN standard URLEncoded OR MULTI-PART FORM mode. MULTI-PART FORM mode can be more efficient FOR large uploads AS No encoding takes place, but The SERVER APPLICATION must support parsing MULTI-PART FORMS. Web CONNECTION Does WITH<<%= TopicLink(" wwPostRequest::GetMultipartFormVar()","wwPostRequest::GetMultiPartFormVar") %>> *:SeeAlso: CLASS wwipstuff wwipstuff::nhttppostmode *:Keywords: HTTP POST POST MULTI-PART FORMS *:HelpId: 573 *:ENDHELP #ENDIF ENDPROC PROCEDURE decodedbf LPARAMETERS lcBuffer,lcDBF LOCAL lnSeparator, lcHeader, lcFname, lnSize1, lnSize2, lcDBF, lcFile1, lcFile2 IF LEN(lcBuffer)<105 RETURN .F. ENDIF lcHeader=SUBSTR(lcBuffer,1,105) lcFname=TRIM(SUBSTR(lcBuffer,6,40)) lnSize1=VAL(SUBSTR(lcBuffer,46,10)) lnSize2=VAL(SUBSTR(lcBuffer,96,10)) *** Use parm or the filename specified in the header lcDBF=IIF(empty(lcDBF),lcFname,UPPER(lcDBF)) if lcHeader # "wwDBF" wait window nowait "Invalid Decode File Header" RETURN .f. ENDIF lcFile1="" lcFile2="" if lnSize1 > 0 lcFile1=SUBSTR(lcBuffer,106,lnSize1) IF LEN(lcFile1) < lnSize1 wait window nowait "Invalid File Size: "+; STR(LEN(lcFile1)) +" of "+ STR(lnSize1) RETURN .F. ENDIF ENDIF IF lnSize2 > 0 lcFile2=SUBSTR(lcBuffer,106 + lnSize1, lnSize2) lnSizex=LEN(lcFile2) IF LEN(lcFile2) < lnSize2 - 1 wait window nowait "Invalid Memo File Size: " +; STR(LEN(lcFile2)) +" of "+ STR(lnSize2) RETURN .F. ENDIF ENDIF =File2Var(lcDBF,lcFile1) IF !EMPTY(lcFile2) =File2Var(STRTRAN(lcDBF,".DBF",".FPT"),lcFile2) ENDIF RETURN .T. #IF .F. ******************************** * HELP BUILDER COMMENT BLOCK * ******************************** *:Help Documentation *:Topic: wwipstuff::decodedbf *:Description: Takes asdjkalsdkjasd a string encoded with<<%= TopicLink(" EncodeDbf()","wwipstuff::decodedbf") %>> and converts it back into a physical file. If the string contains a DBF with a memo the memo is also restored. Used extensively in Web data transfers *:Parameters: <<b>>lcBuffer<</b>> Buffer of the file to decode. Must be a full DBF or DBF/FPT pair properly encoded by EncodeDbf. <<b>>lcDBF<</b>> The file to save to. The file will be written to disk with this name. *:Returns: .t. or .f. *:Example: *:Remarks: *:SeeAlso: Class wwipstuff *:Keywords: *:HelpId: 575 *:ENDHELP #ENDIF ENDPROC PROCEDURE encodedbf LPARAMETERS lcDBF, llHasMemo LOCAL lcBuffer1, lcBuffer2, lcDBF, lcHeader, lcFPT IF EMPTY(lcDBF) RETURN .F. ENDIF lcDBF=UPPER(lcDBF) IF !FILE(lcDBF) RETURN "" ENDIF lcBuffer1=File2Var(lcDBF) lcHeader = "wwDBF" + PADR(justfname(lcDBF),40) + ; STR(LEN(lcBuffer1),10) if !llHasMemo lcHeader=lcHeader + SPACE(50) && Pad out header RETURN lcHeader + lcBuffer1 ENDIF lcFPT=FORCEEXT(lcDBF,"fpt") lcBuffer2=File2Var(lcFPT) IF EMPTY(lcBuffer2) *** No FPT file RETURN lcHeader + SPACE(50) + lcBuffer1 ENDIF lcHeader=lcHeader + PADR(justfname(lcFPT),40) + ; STR(LEN(lcBuffer2),10) RETURN lcHeader + lcBuffer1 + lcBuffer2 ******************************************************** * wwIPStuff :: EncodeDBF ********************************* *** Function: This function encodes a DBF file ready to *** be sent up to a server using HTTPGetEx in *** the POST buffer. The file will be URL *** encoded. *** Assume: Note you can send a ZIP file here, too! *** 100 byte header on top of file contains *** 5 byte ID (wwDBF) filename (40 bytes) and *** size(10 bytes) for each *** file *** Pass: lcDBF - Full DBF filename w/ ext *** llHasMemo - .t. or (.f.) *** Return: Encoded Buffer or "" on failure ******************************************************** ENDPROC PROCEDURE getdomainfromip LPARAMETERS lcIPAddress LOCAL lcDomain DECLARE GetDomainFromIp ; IN (THIS.cDLLPath) ; String @cDomain,; String cIpAddress lcDomain=SPACE(200) lnValue= GetDomainFromIp(@lcDomain,lcIPAddress) IF AT(CHR(0),lcDomain) > 1 lcDomain=substr(lcDomain,1,AT(chr(0),lcDomain) -1 ) ELSE lcDomain="" ENDIF RETURN lcDomain ************************************************************************ * wwIPStuff :: GetDomainFromIp ********************************* *** Function: Returns the domain name from an IP Addressed passed *** Assume: Can be slow as a reverse look up against DNS server *** is made. Over dialup this can take 5-10 seconds for *** initial connection about 1 second once connected. *** Pass: lcIPAddress - An IP Address (111.111.111.111) *** Return: Domain Name or "" if !found or failure ************************************************************************ ENDPROC PROCEDURE getipfromdomain LPARAMETERS lcDomain DECLARE GetIpFromDomain ; IN (THIS.cDLLPath) ; String @cIpAddress,; String cDomain lcIpAddress=SPACE(56) lnValue= GetIpFromDomain(@lcIpAddress,lcDomain) IF AT(CHR(0),lcIpAddress) > 1 lcIpAddress=substr(lcIpAddress,1,AT(chr(0),lcIpADdress) -1 ) ELSE lcIpAddress="" ENDIF RETURN lcIpAddress ************************************************************************ * wwIPStuff :: GetIpFromDomain ********************************* *** Function: Returns the IP address of a given domain name. *** Pass: lcDomain - Domain Name address *** Return: IP Address of "" if not resolved ************************************************************************ ENDPROC PROCEDURE getlastinterneterror LPARAMETERS lnError lnError=IIF(type("lnError")="N",lnError,THIS.nError) DECLARE INTEGER InternetGetLastResponseInfo ; IN WININET.DLL ; INTEGER @lpdwError,; STRING @lpszBuffer,; INTEGER @lpcbSize lcErrorMsg=SPACE(1024) lnSize=LEN(lcErrorMsg) =InterNetGetLastResponseInfo(@lnError,@lcErrorMsg,@lnSize) IF lnSize < 2 RETURN "" ENDIF RETURN SUBSTR(lcErrorMsg,1,lnSize) ************************************************************************ * wwIPStuff :: GetLastInternetError ********************************* *** Function: Retrieves the last WinInet error using WinInet's error *** responses. *** Assume: Currently not used by class internally *** Under Construction *** Pass: lnError - Error Code to resolve(Optional) *** Return: Error Message or "" ************************************************************************ ENDPROC PROCEDURE getpostbuffer IF USED("wwPostBuffer") SELE wwPostBuffer ELSE RETURN "" ENDIF RETURN wwPostBuffer.cPostBuffer ************************************************************************ * wwIPStuff :: GetPostBuffer ********************************* *** Function: Returns the entire Post Buffer as a string ************************************************************************ ENDPROC PROCEDURE getsystemerrormsg LPARAMETERS lnErrorNo, llAPI LOCAL szMsgBuffer,lnSize lnErrorNo=IIF(type("lnErrorNo")="N",lnErrorNo,THIS.nError) IF lnErrorNo = ERROR_INTERNET_EXTENDED_ERROR RETURN THIS.GetLastInternetError() ENDIF szMsgBuffer=SPACE(500) DECLARE INTEGER FormatMessage ; IN WIN32API ; INTEGER dwFlags ,; INTEGER lpvSource,; INTEGER dwMsgId,; INTEGER dwLangId,; STRING @lpBuffer,; INTEGER nSize,; INTEGER Arguments DECLARE INTEGER GetModuleHandle ; IN WIN32API ; STRING lnModule=GetModuleHandle("wininet.dll") IF lnModule # 0 AND !llAPI lnSize=FormatMessage(FORMAT_MESSAGE_FROM_HMODULE,lnModule,lnErrorNo,; 0,@szMsgBuffer,LEN(szMsgBuffer),0) ELSE lnSize=0 ENDIF IF lnSize > 2 szMsgBuffer=SUBSTR(szMsgBuffer,1, lnSize -2 ) ELSE *** REtry with 12000 less - WinInet return Windows API file error codes lnSize=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,lnErrorNo,; 0,@szMsgBuffer,LEN(szMsgBuffer),0) IF lnSize > 2 szMsgBuffer="Win32 API: " + SUBSTR(szMsgBuffer,1, lnSize-2 ) ELSE szMsgBuffer="" ENDIF ENDIF RETURN szMsgBuffer ******************************************************** * wwIPStuff :: GetSystemErrorMsg ********************************* *** Function: Returns an Error Message for the last *** error value set in nError property. *** Assume: nError was set by last operation *** Return: Error String or "" ******************************************************** ENDPROC PROCEDURE httpclose DECLARE INTEGER InternetCloseHandle ; IN WININET.DLL ; INTEGER hIPSession THIS.cPostBuffer = "" IF THIS.hHTTPSession # 0 InternetCloseHandle(THIS.hhttpsession) THIS.hhttpsession=0 ENDIF IF THIS.hipSession # 0 InternetCloseHandle(THIS.hipsession) THIS.hipsession=0 ENDIF ENDPROC PROCEDURE httpget LPARAMETERS lcUrl, lcUserName, lcPassword LOCAL lnError, lnSize, lcBuffer, szHead, loUrl, llHTTPS, lnResult,; hInetConnection, hHTTPResult THIS.nerror = 0 THIS.cerrormsg = "" IF VARTYPE(lcUserName) = "N" tnBufferSize=lcUserName lcUserName = "" lcPassword = "" ELSE tnBufferSize = 0 lcUserName=IIF(EMPTY(lcUserName),"",lcUserName) lcPassword=IIF(EMPTY(lcPassword),"",lcPassword) ENDIF loUrl = THIS.InternetCrackUrl(lcUrl) IF ISNULL(loUrl) THIS.nError = -1 THIS.cerrormsg = "Invalid URL passed." RETURN "" ENDIF llHTTPS = IIF(LOWER(loUrl.cProtocol)="https",.T.,.F.) THIS.nHttpPort=VAL(loUrl.cPort) lnResult = THIS.HTTPConnect(loUrl.cserver,lcUserName,lcPassword,llHTTPS) IF lnResult # 0 THIS.cerrormsg = THIS.cerrormsg RETURN "" ENDIF IF tnBufferSize # 0 lcData=SPACE(tnBufferSize) lnSize=tnBufferSize ELSE lcData = "" lnSize = 0 ENDIF lnResult = THIS.HTTPGetEx(loUrl.cPath + loUrl.cQueryString,@lcData,@lnSize) THIS.HTTPClose() IF lnResult # 0 THIS.cerrormsg = THIS.cerrormsg RETURN "" ENDIF RETURN lcData ENDPROC PROCEDURE httpgetasync LPARAMETERS lcUrl lcUrl=IIF(type("lcUrl")="C",lcUrl,"") DECLARE INTEGER HTTPGetAsync ; IN (THIS.cDLLPath) ; STRING cURL =HTTPGetAsync(lcURL) ************************************************************************ * wwIPStuff :: HTTPGetAsync ********************************* *** Function: Sends an HTTP request but doesn't wait for completion. *** You can use this one for stress testing. Each request *** fires off a new thread so make sure you let the *** thread count catch up before overrunning your machine. *** Why - use for stress testing. *** Pass: lcUrl - Location to open *** Return: nothing ************************************************************************ ENDPROC PROCEDURE httpgetex LPARAMETERS tcPage, tcBuffer, tnBufferSize, tcHeaders, tcFileName LOCAL hHTTPResult, lcOldAlias, lhFile tcPage=IIF(EMPTY(tcPage),THIS.clink,tcPage) tnBufferSize=IIF(VARTYPE(tnBufferSize)="N",; tnBufferSize,LEN(tcPage)) lcOldAlias=ALIAS() THIS.lhttpcanceldownload = .F. THIS.clink = tcPage IF !EMPTY(THIS.cPostBuffer) IF RIGHT(THIS.cPostBuffer,1) = "&" THIS.cPostbuffer = LEFT(THIS.cPostbuffer,LEN(THIS.cPostBuffer)-1) ENDIF tnPostSize=LEN(THIS.cPostBuffer) lcPostBuffer= IIF(tnPostSize > 0,THIS.cPostBuffer,NULL) ELSE tnPostSize=0 lcPostBuffer=NULL ENDIF THIS.nerror=0 THIS.cerrormsg="" DECLARE INTEGER HttpOpenRequest ; IN WININET.DLL ; INTEGER hHTTPHandle,; STRING lpzReqMethod,; STRING lpzPage,; STRING lpzVersion,; STRING lpzReferer,; STRING lpzAcceptTypes,; INTEGER dwFlags,; INTEGER dwContextw hHTTPResult=HttpOpenRequest(THIS.hhttpsession,; IIF( tnPostSize > 0, "POST","GET"),; tcPage,; NULL,NULL,NULL,; INTERNET_FLAG_RELOAD + ; IIF(THIS.lsecurelink,INTERNET_FLAG_SECURE,0) + INTERNET_FLAG_KEEP_CONNECTION,0) IF (hHTTPResult = 0) THIS.nerror=GetLastError() THIS.cerrormsg=THIS.getsystemerrormsg() RETURN THIS.nerror ENDIF THIS.wininetsettimeout(THIS.nConnectTimeOut,hHTTPResult) THIS.hhttpsession=hHTTPResult DECLARE INTEGER HttpSendRequest ; IN WININET.DLL ; INTEGER hHTTPHandle,; STRING lpzHeaders,; INTEGER cbHeaders,; STRING lpzPost,; INTEGER cbPost IF tnPostSize > 0 DO CASE CASE THIS.nhttppostmode = 1 tcHeaders = "Content-Type: application/x-www-form-urlencoded" + CRLF +; IIF(!EMPTY(tcHeaders),CRLF+tcHeaders,"") CASE THIS.nhttppostmode = 2 tcHeaders = "Content-Type: multipart/form-data; boundary=" + MULTIPART_BOUNDARY + CRLF + CRLF +; IIF(EMPTY(tcHeaders),"",tcHeaders) IF tnPostSize > 0 *** NOTE: extra dashes required to simulate browser operation! lcPostBuffer = lcPostBuffer + "--" + MULTIPART_BOUNDARY + CR tnPostSize=LEN(lcPostBuffer) ENDIF CASE THIS.nhttppostmode = 4 && XML tcHeaders="Content-Type: text/xml" + CRLF +; IIF(EMPTY(tcHeaders),"",tcHeaders) ENDCASE * tcHeaders = tcHeaders + "Content-Length: " + TRANSFORM(tnPostSize) + CRLF ELSE tcHeaders = IIF(!EMPTY(tcHeaders),tcHeaders,"") ENDIF IF !EMPTY(THIS.cHTTPProxyUserName) IF !THIS.SetProxyLogin() RETURN THIS.nError ENDIF ENDIF lnRetval=0 lnRetval=HttpSendRequest(hHTTPResult,; tcHeaders,LEN(tcHeaders),; lcPostBuffer,tnPostSize) IF lnRetval = 0 THIS.nerror=GetLastError() THIS.cerrormsg=THIS.getsystemerrormsg() =InternetCloseHandle(hHTTPResult) RETURN THIS.nerror ENDIF DECLARE INTEGER HttpQueryInfo ; IN WININET.DLL ; INTEGER hHTTPHandle,; INTEGER nType,; STRING @cHeaders,; INTEGER @cbHeaderSize,; STRING cNULL *** Retrieve the HTTP Headers lcHeaders = SPACE(1024) lnHeaderSize = 1024 lnRetval = HttpQueryInfo(hHTTPResult,; HTTP_QUERY_RAW_HEADERS_CRLF,; @lcHeaders,@lnHeaderSize,NULL) THIS.chttpheaders = TRIM(STRTRAN(lcHeaders,CHR(0),"")) *** Check the HTTP Result Code lcHeaders = SPACE(7) lnHeaderSize = 6 lnRetval = HttpQueryInfo(hHTTPResult,; HTTP_QUERY_STATUS_CODE,; @lcHeaders,@lnHeaderSize,NULL) lcResultCode = TRIM(STRTRAN(lcHeaders,CHR(0),"")) IF lcResultCode # "200" lcHeaders = SPACE(256) lnHeaderSize = 255 lnRetval = HttpQueryInfo(hHTTPResult,; HTTP_QUERY_STATUS_TEXT,; @lcHeaders,@lnHeaderSize,NULL) THIS.nerror=VAL(lcResultCode) THIS.cErrorMsg = TRIM(STRTRAN(lcHeaders,CHR(0),"")) =InternetCloseHandle(hHTTPResult) RETURN THIS.nerror ENDIF *** Call HTTP Event method THIS.OnHTTPBufferUpdate(0,0,THIS.chttpheaders) DECLARE INTEGER InternetReadFile ; IN WININET.DLL ; INTEGER hHTTPHandle,; STRING @lcBuffer,; INTEGER cbBuffer,; INTEGER @cbBuffer IF tnBufferSize > 0 *** Use Fixed Buffer Size tcBuffer=SPACE(tnBufferSize) lnBufferSize=tnBufferSize lnRetval=InternetReadFile(hHTTPResult,; @tcBuffer,; tnBufferSize,; @tnBufferSize) ELSE *** If a filename was specified output to the file instead of string IF !EMPTY(tcFileName) lhFile = FCREATE(tcFileName) IF lhFile = -1 THIS.nerror=1 THIS.cerrormsg="Couldn't create output file" =InternetCloseHandle(hHTTPResult) RETURN THIS.nerror ENDIF ENDIF *** Build the buffer dynamically tcBuffer = "" tnSize = 0 lnRetval = 0 lnBytesRead = 1 lnBufferReads = 0 DO WHILE .T. lcReadBuffer = SPACE(THIS.nhttpworkbuffersize) lnBytesRead = 0 lnSize = LEN(lcReadBuffer) lnRetval=InternetReadFile(hHTTPResult,; @lcReadBuffer,; lnSize,; @lnBytesRead) IF lnRetval = 1 AND lnBytesRead > 0 *** Update the input parameters - result buffer and size of buffer IF EMPTY(tcFileName) *** Build string tcBuffer = tcBuffer + LEFT(lcReadBuffer,lnBytesRead) ELSE *** Write to file FWRITE(lhFile,lcReadBuffer,lnBytesRead) ENDIF tnBufferSize = tnBufferSize + lnBytesRead lnBufferReads = lnBufferReads + 1 THIS.OnHTTPBufferUpdate(tnBufferSize,lnBufferReads,@lcReadBuffer) ENDIF IF THIS.lhttpcanceldownload tcBuffer = "Error: Download canceled" tnBufferSize = LEN(tcBuffer) EXIT ENDIF IF (lnRetval = 1 AND lnBytesRead = 0) OR (lnRetval = 0) EXIT ENDIF ENDDO lnBufferSize = tnBufferSize IF !EMPTY(tcFileName) FCLOSE(lhFile) ENDIF THIS.OnHTTPBufferUpdate(0,-1,"") ENDIF IF lnRetval = 0 THIS.nerror=GetLastError() THIS.cerrormsg=THIS.getsystemerrormsg() ENDIF =InternetCloseHandle(hHTTPResult); tcBuffer = (IIF(tnBufferSize > 1 AND tnBufferSize <= lnBufferSize,SUBSTR(tcBuffer,1,tnBufferSize),"")) RETURN THIS.nerror ******************************************************** * wwIPStuff :: HTTPGetEx ********************************* *** Function: Retrieves an HTTP request from the *** network and returns a string. Read an *** HTML or data file across the net. *** Assume: Blocking call - waits for completion *** before returning. Use AddPostKey *** to post data to server *** Must call HTTPConnect/HTTPClose to *** manage connection to Server. *** Pass: tcURL - URL to retrieve *** tcBuffer - HTTP result (by Reference) *** tnBufferSize - Size of the buffer (ref) *** tcHeaders - HTTP Headers sent from *** client request. Separate *** key:value pairs with CRLF *** tcFileName - if provided causes output to *** be sent to file instead of *** storing it into string to *** reduce memory overhead on large data *** Return: WinAPI Error Code (check THIS.cErrorMsg) ******************************************************* ENDPROC PROCEDURE httpgetheader LPARAMETERS tcPage, tcHeaders, tnHeaderSize LOCAL lnError, lnSize, lcBuffer tcHeaders=IIF(TYPE("tcHeaders")="C",tcHeaders,"") tnHeaderSize=IIF(TYPE("tnHeaderSize")="N",tnHeaderSize,2048) IF !EMPTY(THIS.cPostBuffer) tnPostSize=LEN(THIS.cPostBuffer) lcPostBuffer= IIF(tnPostSize > 0,THIS.cPostBuffer,NULL) ELSE tnPostSize=0 lcPostBuffer=NULL ENDIF DECLARE INTEGER HttpOpenRequest ; IN WININET.DLL ; INTEGER hHTTPHandle,; STRING lpzReqMethod,; STRING lpzPage,; STRING lpzVersion,; STRING lpzReferer,; STRING lpzAcceptTypes,; INTEGER dwFlags,; INTEGER dwContextw hHTTPResult=HttpOpenRequest(THIS.hhttpsession,; IIF( tnPostSize > 0, "POST","GET"),; tcPage,; NULL,NULL,NULL,; INTERNET_FLAG_RELOAD + IIF(THIS.lsecurelink,INTERNET_FLAG_SECURE,0),0) IF (hHTTPResult = 0) THIS.nerror=GetLastError() THIS.cerrormsg=THIS.getsystemerrormsg() RETURN THIS.nerror ENDIF DECLARE INTEGER HttpSendRequest ; IN WININET.DLL ; INTEGER hHTTPHandle,; STRING lpzHeaders,; INTEGER cbHeaders,; STRING lpzPost,; INTEGER cbPost lcHeaders=TRIM(tcHeaders) lnRetval=HttpSendRequest(hHTTPResult,; lcHeaders,LEN(lcHeaders),; lcPostBuffer,tnPostSize) IF lnRetval = 0 THIS.nerror=GetLastError() THIS.cerrormsg=THIS.getsystemerrormsg() RETURN THIS.nerror ENDIF DECLARE INTEGER HttpQueryInfo ; IN WININET.DLL ; INTEGER hHTTPHandle,; INTEGER nType,; STRING @cHeaders,; INTEGER @cbHeaderSize,; STRING cNULL lnRetval = HttpQueryInfo(hHTTPResult,; HTTP_QUERY_RAW_HEADERS_CRLF,; @tcHeaders,@tnHeaderSize,NULL) IF (lnRetval = 0) THIS.nerror=GetLastError() THIS.cerrormsg=THIS.getsystemerrormsg() RETURN THIS.nerror ENDIF InternetCloseHandle(hHTTPResult); tcHeaders = (IIF(tnHeaderSize > 1,SUBSTR(tcHeaders,1,tnHeaderSize-1),"")) RETURN lnError ************************************************************************ * wwIPStuff :: HTTPGetHeader ********************************* *** Function: Retrieves just the HTTP header of a page request. *** Assume: Must call HTTPConnect/HTTPClose to manage connection *** to Server *** Pass: tcPage - The Server relative page to view *** tcHeader - Buffer to receive headers (by reference) *** tnSize - Size of the Buffer (by Reference) *** Return: Win32API Error Code ************************************************************************ ENDPROC PROCEDURE rasdial LPARAMETERS lcRASEntry, lcUsername, lcPassword LOCAL lcErrorMsg, lnResult DECLARE INTEGER DoRasDial ; IN (THIS.cDLLPath) ; STRING szEntry,; STRING szUsername,; STRING szPassword,; INTEGER @dwHandle,; STRING @Errormsg THIS.cErrorMsg = "" lcErrorMsg = SPACE(256) lnHandle=0 lnResult = DoRasDial(lcRASEntry,lcUserName,lcPassword,; @lnHandle,@lcErrorMsg) IF lnResult # 0 THIS.nRASHandle = lnHandle ELSE THIS.nRASHandle = 0 THIS.cErrorMsg = TRIM(STRTRAN(lcErrorMsg,CHR(0),"")) ENDIF RETURN IIF(lnResult = 0,.F.,.T.) ************************************************************************ * wwIPStuff :: RASDial ********************************* *** Function: Connects via the RAS dialer - no interface except a *** MessageBox on error! *** Notes: Connection handle is stored in THIS.nRASHandle. This *** handle is necessary to close down a RAS Connection *** via RASHangup. *** Pass: lcRASEntry - Name of the RAS Connection to use *** lcUsername - Username to connect *** lcPassword - Password to connect *** Return: .t. or .f. ************************************************************************ ENDPROC PROCEDURE rashangup DECLARE INTEGER DoRasHangup ; IN (THIS.cDLLPath) ; INTEGER lnHandle IF THIS.nRASHandle = 0 THIS.cErrorMsg = "No Connection active" ENDIF llResult = IIF( DoRasHangup(THIS.nRASHandle) = 0,.T.,.F.) IF llResult THIS.nRASHandle = 0 ELSE THIS.cErrorMsg = "Invalid Connection Handle..." ENDIF RETURN llResult ************************************************************************ * wwIPStuff :: RASHangup ********************************* *** Function: Terminates the RAS Connection that was initiated with *** RASDial. *** Assume: Works only on connections opened with RASDial and the *** THIS.nRASHandle set there. Use a persistent object to *** keep this reference around! *** Return: .t. or .f. ************************************************************************ ENDPROC PROCEDURE sendmail LPARAMETERS lcMailServer, lcSenderName, lcSenderEmail, ; lcRecipient, lcCCList, lcSubject, lcMessage, ; lcAttachment, lcBCCList,lcContentType LOCAL lcError, llResult lcMailserver=TRIM(IIF(vartype(lcMailserver)="C",lcMailserver,THIS.cMailServer)) lcSendername=IIF(vartype(lcSendername)="C",lcSendername,THIS.cSenderName) lcSenderEmail=TRIM(IIF(vartype(lcSenderEmail)="C",lcSenderEmail,THIS.cSenderEmail)) lcRecipient=TRIM(IIF(vartype(lcRecipient)="C",lcRecipient,THIS.cRecipient)) lcCCList=TRIM(IIF(vartype(lcCCList)="C",lcCCList,THIS.cCCList)) lcBCCList=TRIM(IIF(vartype(lcBCCList)="C",lcBCCList,THIS.cBCCList)) lcSubject=IIF(vartype(lcSubject)="C",lcSubject,THIS.cSubject) lcMessage=IIF(vartype(lcMessage)="C",lcMessage,THIS.cMessage) lcAttachment=TRIM(IIF(vartype(lcAttachment)="C",lcAttachment,THIS.cAttachment)) lcContentType=TRIM(IIF(vartype(lcContentType)="C",lcContentType,THIS.cContentType)) lcError=SPACE(513) DECLARE integer SendMail ; IN (THIS.cDLLPath) ; STRING cFrom, ; STRING cFromName, ; STRING cTo, ; STRING cCC, ; STRING cBCC, ; STRING cSubject, ; STRING cMessage, ; STRING cAttachment,; STRING cMailHost,; STRING @cError,; STRING cContentType,; INTEGER nPort,; STRING cExtraHeaders llResult=IIF(SendMail(lcSenderEmail, lcSenderName,; lcRecipient, lcCCList,lcBCCList,; lcSubject, lcMessage, lcAttachment,; lcMailServer,@lcError,lcContentType,THIS.nSMTPPort,THIS.cExtraHeaders)=1,.T.,.F.) IF !llResult THIS.cErrorMsg = TRIM(CHRTRANC(lcError,CHR(0),"")) ELSE THIS.cErrorMsg = "" ENDIF RETURN llResult ************************************************************************ * wwIPStuff :: SendMail ********************************* *** Function: Sends SMTP mail. Call waits for completion and returns *** result code *** Assume: Message Text can't be more than 64k. *** Pass: tcMailServer - IP Address or Domain Name *** tcSenderName - Sender Display Name (Rick Strahl) *** tcSenderMailAddress Sender's full email address (rstrahl@west-wind.com) *** tcRecipientList - Recipients separated by commas (ben@test.com, jim@test.com) *** tcCCList - List of CCs separated by commas *** tcSubject - Subject Header *** tcMessage - Message Body *** tcAttachement - File Attachement (1 only) *** Return: .T. or .F. ************************************************************************ ENDPROC PROCEDURE sendmailasync LPARAMETERS lcMailServer, lcSenderName, lcSenderEmail, ; lcRecipient, lcCCList, lcSubject, lcMessage, ; lcAttachment, lcBCCList lcMailserver=TRIM( IIF(vartype(lcMailserver)="C",lcMailserver,TRIM(THIS.cMailServer)) ) lcSendername=IIF(vartype(lcSendername)="C",lcSendername,TRIM(THIS.cSenderName)) lcSenderEmail=IIF(vartype(lcSenderEmail)="C",lcSenderEmail,TRIM(THIS.cSenderEmail)) lcRecipient=IIF(vartype(lcRecipient)="C",lcRecipient,TRIM(THIS.cRecipient)) lcCCList=IIF(vartype(lcCCList)="C",lcCCList,TRIM(THIS.cCCList)) lcBCCList=IIF(vartype(lcBCCList)="C",lcBCCList,TRIM(THIS.cBCCList)) lcSubject=IIF(vartype(lcSubject)="C",lcSubject,THIS.cSubject) lcMessage=IIF(vartype(lcMessage)="C",lcMessage,THIS.cMessage) lcAttachment=IIF(vartype(lcAttachment)="C",lcAttachment,THIS.cAttachment) lcContentType=IIF(vartype(lcContentType)="C",lcContentType,THIS.cContentType) DECLARE integer SendMailAsync ; IN (THIS.cDLLPath) ; STRING cFrom, ; STRING cFromName, ; STRING cTo, ; STRING cCC, ; STRING cBCC, ; STRING cSubject, ; STRING cMessage, ; STRING cAttachment,; STRING cMailHost,; STRING cContentType,; INTEGER nPort =SendMailAsync(lcSenderEmail, lcSenderName,; lcRecipient, lcCCList, lcBCCList,; lcSubject, lcMessage, lcAttachment, ; lcMailServer, lcContentType,THIS.nSMTPPort) RETURN .T. ************************************************************************ * wwIPStuff :: SendMailAsynch ********************************* *** Function: Sends SMTP mail. This method does not block and *** returns immediately. No result code is returned. *** Assume: Attachments are not supported *** Message Text can't be more than 64k. *** IMPORTANT: If you release the DLL while a message *** is still being sent the DLL with GPF! *** Pass: tcMailServer - IP Address or Domain Name *** tcSenderName - Sender Display Name (Rick Strahl) *** tcSenderMailAddress Sender's full email address (rstrahl@west-wind.com) *** tcRecipientList - Recipients separated by commas (ben@test.com, jim@test.com) *** tcCCList - List of CCs separated by commas *** tcSubject - Subject Header *** tcMessage - Message Body *** tcAttachement - File Attachement (1 only) *** Return: always .T. and no result ************************************************************************ ENDPROC PROCEDURE unzipfiles LPARAMETERS lcZipFile, lcDestination, lcFileSpec lcFileSpec=IIF(type("lcFileSpec")="C",lcFileSpec,"*.*") lcDestination=IIF(type("lcDestination")="C",lcDestination,SYS(5) + CURDIR()) DECLARE INTEGER UnZip ; IN (THIS.cDLLPath) ; STRING ZipFile,; STRING Destination,; STRING FileSpec RETURN UnZip(lcZipFile,lcDestination,lcFileSpec) ************************************************************************ * wwIPStuff :: UnZipFiles ********************************* *** Function: Unzips files to a specified directory *** Assume: Requires DynaZip DLLs (dunzip32.dll) *** Pass: lcZipFile *** lcDestination - Dir to unzip to *** lcFileSpec - Files to unzip (*.*) *** Return: DynaZip Error Code or 0 on success ************************************************************************ ENDPROC PROCEDURE wininetsettimeout LPARAMETERS dwTimeoutSecs, lnHandle dwTimeoutSecs=IIF(VARTYPE(dwTimeoutSecs)="N",; dwTimeoutSecs,THIS.nconnecttimeout) IF dwTimeoutSecs = 0 *** Just use the default RETURN ENDIF IF EMPTY(lnHandle) lnHandle = THIS.hIPSession ENDIF DECLARE INTEGER InternetSetOption ; IN WININET.DLL ; INTEGER HINTERNET,; INTEGER dwFlags,; INTEGER @dwValue,; INTEGER dwTimeoutSecs=dwTimeoutSecs * 1000 && to milliseconds llRetVal=InternetSetOption(lnHandle,; INTERNET_OPTION_CONNECT_TIMEOUT,; @dwTimeoutSecs,4) llRetVal=InternetSetOption(lnHandle,; INTERNET_OPTION_RECEIVE_TIMEOUT,; @dwTimeoutSecs,4) llRetVal=InternetSetOption(lnHandle,; INTERNET_OPTION_SEND_TIMEOUT,; @dwTimeoutSecs,4) * dwTimeoutSecs=1 &&// Retry only 1 time * llRetVal=InternetSetOption(lnHandle,; * INTERNET_OPTION_CONNECT_RETRIES,; * @dwTimeoutSecs,4) ******************************************************** * wwIPStuff :: WinInetSetTimeout ********************************* *** Function: Sets various timeout for use with a *** WinInet Connection *** Pass: dwTimeoutSecs - Secs to wait for timeout ******************************************************** ENDPROC PROCEDURE zipfiles LPARAMETERS lcZipFile, lcFileList, lnCompression, llRecurse lnCompression=IIF(type("lnCompression")="N",lnCompression,9) DECLARE INTEGER Zip ; IN (THIS.cDLLPath) ; STRING ZipFile,; STRING FileList,; INTEGER lnCompression,; INTEGER lnRecurse RETURN Zip(lcZipFile,lcFileList,lnCompression,IIF(llRecurse,1,0)) ************************************************************************ * wwIPStuff :: ZipFiles ********************************* *** Function: Zips files *** Assume: Function requires DynaZip DLLs (dzip32.dll) *** Pass: lcZipFile - Fully qualified ZIP file name *** lcFileList - Comma Delimited file list (Wildcards OK) *** Return: DynaZip error code or 0 ************************************************************************ ENDPROC PROCEDURE httpconnect LPARAMETER lcServer, lcUserName, lcPassword, llHTTPS LOCAL lhIP, lhHTTP, lnError, lnHTTPPort lcServer=TRIM(IIF(!EMPTY(lcServer),lcServer,THIS.cserver)) lcUserName=TRIM(IIF(!EMPTY(lcUserName),lcUserName,THIS.cusername)) lcPassword=TRIM(IIF(!EMPTY(lcPassword),lcPassword,THIS.cpassword)) *** Assign Default Ports IF THIS.nhttpport = 0 lnHTTPPort = IIF(llHTTPS,INTERNET_DEFAULT_HTTPS_PORT,; INTERNET_DEFAULT_HTTP_PORT) ELSE lnHTTPPort = THIS.nhttpport ENDIF THIS.lsecurelink = llHTTPS OR THIS.lsecurelink THIS.cserver = lcServer THIS.nerror=0 THIS.cerrormsg="" DECLARE INTEGER InternetCloseHandle ; IN WinInet.DLL ; INTEGER DECLARE INTEGER GetLastError; IN WIN32API DECLARE INTEGER InternetOpen ; IN WININET.DLL ; STRING,; INTEGER,; STRING, STRING, INTEGER *** Force to Proxy Operation IF !EMPTY(THIS.cHttpProxyName) THIS.nHTTPConnectType = 3 && Proxy ENDIF hInetConnection=; InternetOpen(THIS.cUserAgent,; THIS.nhttpconnecttype,; THIS.chttpproxyname,THIS.chttpproxybypass,0) IF hInetConnection = 0 THIS.nerror=GetLastError() THIS.cerrormsg=THIS.getsystemerrormsg(THIS.nerror) RETURN THIS.nerror ENDIF THIS.hipsession=hInetConnection IF !EMPTY(THIS.cHTTPProxyUserName) IF !THIS.SetProxyLogin() RETURN THIS.nError ENDIF ENDIF DECLARE INTEGER InternetConnect ; IN WININET.DLL ; INTEGER hIPHandle,; STRING lpzServer,; INTEGER dwPort, ; STRING lpzUserName,; STRING lpzPassword,; INTEGER dwServiceFlags,; INTEGER dwFlags,; INTEGER dwReserved lhHTTPSession=; InternetConnect(hInetConnection,; lcServer,; lnHTTPPort,; lcUserName,; lcPassword,; INTERNET_SERVICE_HTTP,; THIS.nserviceflags,0) IF (lhHTTPSession = 0) =InternetCloseHandle(hInetConnection) THIS.nerror = GetLastError() THIS.cerrormsg = THIS.getsystemerrormsg() RETURN THIS.nerror ENDIF THIS.hhttpsession = lhHTTPSession RETURN 0 ENDPROC PROCEDURE encodefile LPARAMETER lcFileName RETURN THIS.EncodeDBF(lcFilename) ENDPROC PROCEDURE decodefile LPARAMETERS lcBuffer,lcDBF RETURN THIS.DecodeDBF(@lcBuffer,@lcDBF) ENDPROC PROCEDURE httpgetexasync LPARAMETERS tcPage, tcResultFile, tnResultSize, tcHeaders LOCAL hHTTPResult *** Post Buffer and lSecureLink also apply via properties tcServer=THIS.cserver tcPage=IIF(EMPTY(tcPage),"/",tcPage) tcUserName=THIS.cusername tcPassword=THIS.cpassword tcResultFile=IIF(EMPTY(tcResultFile),"",tcResultFile) tnResultSize=IIF(EMPTY(tnResultSize),256,tnResultSize) IF !EMPTY(THIS.cPostBuffer) tnPostSize=LEN(THIS.cPostBuffer) lcPostBuffer= IIF(tnPostSize > 0,THIS.cPostBuffer,NULL) ELSE tnPostSize=0 lcPostBuffer=NULL ENDIF IF tnPostSize > 0 IF EMPTY(tcHeaders) IF THIS.nhttppostmode = 1 tcHeaders = "Content-Type: application/x-www-form-urlencoded" + CR+; IIF(!EMPTY(tcHeaders),CR+tcHeaders,"") ELSE tcHeaders = "Content-Type: multipart/form-data; boundary=" + MULTIPART_BOUNDARY + CR + CR +; IIF(EMPTY(tcHeaders),"",tcHeaders) IF tnPostSize > 0 lcPostBuffer = lcPostBuffer + MULTIPART_BOUNDARY + CR tnPostSize=LEN(lcPostBuffer) ENDIF ENDIF ENDIF ELSE tcHeaders = IIF(!EMPTY(tcHeaders),tcHeaders,"") ENDIF lcOldAlias=ALIAS() DECLARE HTTPGetExAsync ; IN WWIPSTUFF.DLL ; INTEGER hInternet,; INTEGER hHTTP,; STRING SERVER,; STRING PAGE,; STRING BUFFER,; INTEGER BufferSize,; STRING HEADER,; STRING POST,; INTEGER POSTSIZE,; INTEGER SECURE,; INTEGER CONNECTTYPE,; STRING Username, STRING PASSWORD,; STRING ResultFile,; INTEGER ResultSize tcBuffer = SPACE(256) tnBufSize = LEN(tcBuffer) lnRet = httpgetexasync(THIS.hipsession, THIS.hhttpsession,; tcServer,; tcPage,; tcBuffer,tnBufSize,; tcHeaders,; lcPostBuffer, tnPostSize,; IIF(THIS.lsecurelink,1,0),; THIS.nhttpconnecttype,; tcUserName, tcPassword,; tcResultFile,tnResultSize) *** Cause HTTPClose() to have no effect on these *** handles - the C thread code will clean these up THIS.hIPSession = 0 THIS.hHTTPSession = 0 RETURN ******************************************************** * wwIPStuff :: HTTPGetExAsync ********************************* *** Function: Retrieves an HTTP request from the *** network asynchronously. This means the *** request fires and returns immediately *** without an error code. Operation runs on *** new thread in the background after returing *** control to VFP. *** *** This method is fully self contained. *** You don't need to call HTTPOpen or HTTPClose. *** *** This method allows full configuration *** of the request with: POST data, SSL, *** Passwords and creation of an output *** file. *** *** Use AddPostKey to add POST vars. Use lSecureLink *** to enable SSL operation. Use cUserName and cPassword *** for passwords. *** *** Output file option allows for async *** downloads and later checking for a result. *** Using a timer it's possible to fire 'events' *** when the download is complete. *** *** Pass: tcURL - Server relative link (/default.asp) *** tcResultFile - File where result get stored to *** Make sure this is file unique... *** tnResultSize - If you're saving the result you *** can use this to specify the size *** Default is a small 256 (used for *** not checking results). *** Used: lSecureLink, cUserName, cPassword, AddPostKey() *** Return: nothing *** If tcResultFile is passed you can check *** for this file. On success you'll get the *** document. On failure you get: *** Error: <nAPIErrorCode> ******************************************************* ENDPROC PROCEDURE onhttpbufferupdate LPARAMETER lnBytesDownloaded,lnBufferReads,lcCurrentChunk ENDPROC PROCEDURE httpcanceldownload THIS.lHTTPCancelDownload = .T. ENDPROC PROCEDURE sendmapimail LOCAL loSession, lcOldPath, Y, lnRecips, x, loEval PRIVATE loMessages lcOldPath = SYS(5) + CURDIR() loSession = CREATEOBJECT( "MSMAPI.MAPISession" ) * Signon to mail if you have a password IF !EMPTY(THIS.cUserName) loSession.UserName = THIS.cUserName loSession.PASSWORD = THIS.cPassword ENDIF loSession.DownloadMail = .T. && Force Send/Recv loSession.Signon() IF ( loSession.SessionID > 0 ) *** Create Messages Object to attach messages to loMessages = CREATEOBJECT( "MSMAPI.MAPIMessages" ) loMessages.SessionID = loSession.SessionID ELSE THIS.cErrorMsg = "MAPI Logon failed..." CD (lcOldPath) RETURN .F. ENDIF loMessages.Compose() Y=0 *** Primary Recipient IF !EMPTY(THIS.cRecipient) DIMENSION laRecips[1] lnRecips=APARSESTRING(@laRecips,THIS.cRecipient,",") FOR x=1 TO lnRecips * Set the Recipient name and resolve Y = Y + 1 loMessages.RecipIndex = y - 1 loMessages.RecipType = 1 loMessages.RecipDisplayName = laRecips[x] * loMessages.ResolveName() ENDFOR ENDIF IF !EMPTY(THIS.cCCList) *** Primary CCRecipient DIMENSION laRecips[1] lnRecips=APARSESTRING(@laRecips,THIS.cCCList,",") FOR x=1 TO lnRecips Y = Y + 1 * Set the Recipient name and resolve loMessages.RecipIndex = Y - 1 loMessages.RecipType = 2 loMessages.RecipDisplayName = laRecips[x] ENDFOR ENDIF IF !EMPTY(THIS.cBCCList) *** Primary BCCRecipient DIMENSION laRecips[1] lnRecips=APARSESTRING(@laRecips,THIS.cBCCList,",") FOR x= 1 TO lnRecips Y = Y + 1 * Set the Recipient name and resolve loMessages.RecipIndex = Y -1 loMessages.RecipType = 3 loMessages.RecipDisplayName = laRecips[x] *loMessages.ResolveName() ENDFOR ENDIF **** Attachments IF !EMPTY(THIS.cAttachment) *** Primary BCCRecipient DIMENSION laRecips[1] lnRecips=APARSESTRING(@laRecips,THIS.cAttachment,",") FOR x= 1 TO lnRecips * Set the Recipient name and resolve loMessages.AttachmentIndex = x - 1 loMessages.AttachmentName = JustFName( laRecips[x] ) loMessages.AttachmentPathName = laRecips[x] ENDFOR ENDIF loMessages.MsgSubject = THIS.cSubject loMessages.MsgNoteText = THIS.cMessage loEval = CREATE("wwEval") loEval.Evaluate([loMessages.SEND( .F. )]) CD (lcOldPath) loSession.SignOff() IF loEval.lError THIS.cErrorMsg = loEval.cErrorMessage RETURN .F. ENDIF RETURN .T. ENDPROC PROCEDURE httpping LPARAMETER lnTimeout, lcServer, lcLink LOCAL x, lcFile, llSuccess, lnHandle IF EMPTY(lcLink) lcLink = "/" ENDIF lnSaveTimeout = THIS.nConnectTimeout THIS.nConnectTimeout = lnTimeout lcResult = THIS.HTTPGet("http://" + lcServer + lcLink) THIS.nConnectTimeout = lnSaveTimeout IF THIS.nError = 0 RETURN .T. ENDIF RETURN .F. ENDPROC PROCEDURE internetcrackurl LPARAMETERS lcUrl LOCAL lnAT, lcProtocol, lcQuerystring, lcPort, lcServer *lcUrl = LOWER(lcUrl) *** Find the querystring first lnAT = AT("?",lcUrl) IF lnAT > 0 lcQuerystring = SUBSTR(lcUrl,lnAT) lcUrl = LEFT(lcUrl,lnAT-1) ELSE lcQuerystring = "" ENDIF lnAT = AT("://",lcUrl) IF lnAT < 1 RETURN .NULL. ENDIF lcProtocol = lower(LEFT(lcUrl,lnAT-1)) DO CASE CASE lcProtocol == "http" lcPort = "80" CASE lcProtocol == "https" lcPort = "443" CASE lcProtocol = "ftp" lcPort = "21" ENDCASE lcUrl = SUBSTR(lcUrl,lnAT + 3) lnAT = AT(":",lcUrl) IF lnAT > 0 lcPort = Extract(lcUrl,":","/",,.T.) lcServer = LEFT(lcUrl,lnAT-1) lcUrl = SUBSTR(lcUrl,lnAT + LEN(lcPort) + 1) ELSE lnAT = AT("/",lcUrl) IF lnAT = 0 lcServer = lcUrl lcUrl = "" ELSE lcServer = SUBSTR(lcUrl,1,lnAT-1) lcURL = SUBSTR(lcUrl,lnAt) ENDIF ENDIF loUrl = CREATE("RELATION") loUrl.ADDPROPERTY("cProtocol",lcProtocol) loUrl.ADDPROPERTY("cServer",lcServer) loUrl.ADDPROPERTY("cPath",lcUrl) && What's left of the url loUrl.ADDPROPERTY("cquerystring",lcQuerystring) loUrl.ADDPROPERTY("cPort",lcPort) *** Not implementented loURL.AddProperty("cUserName","") loUrl.AddProperty("cPassword","") RETURN loUrl ENDPROC PROCEDURE base64encode LPARAMETERS lcInput, loXML LOCAL loXML, loNode IF VARTYPE(loXML) # "O" loXML = CREATEOBJECT(XML_XMLDOM_PROGID) loXML.Async = .F. ENDIF loXML.loadXML("<node></node>") loNode = loXML.DocumentElement loNode.dataType = "bin.base64" loNode.nodeTypedValue = CREATEBINARY(lcInput) RETURN Extract(loNode.XML,[">],[</node>]) *!* LPARAMETERS lcInput *!* LOCAL lcOut, lnResult *!* DECLARE INTEGER Base64StringEncode ; *!* IN wwipstuff.dll ; *!* STRING lcInput, INTEGER lnSize, STRING @lcOutput *!* *!* lcOut = SPACE( INT( LEN(lcInput) * 3 ) ) *!* lnResult = Base64StringEncode(lcInput,LEN(lcInput),@lcOut) *!* IF lnResult = 0 *!* RETURN "" *!* ENDIF *!* RETURN LEFT(lcOut,lnResult - 2) ENDPROC PROCEDURE base64decode LPARAMETERS lcInput, loXML IF VARTYPE(loXML) # "O" loXML = CREATEOBJECT(XML_XMLDOM_PROGID) loXML.Async = .F. ENDIF lcDocument = [<node xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="bin.base64">] + lcInput + [</node>] loXML.loadXML(lcDocument) RETURN loXML.DocumentElement.nodeTypedValue *!* DECLARE INTEGER Base64StringDecode ; *!* IN wwipstuff.dll ; *!* STRING @lcInput, integer lnSize *!* lnResult = Base64StringDecode(@lcInput,LEN(lcInput)) *!* IF lnresult = 0 *!* RETURN "" *!* ENDIF *!* RETURN LEFT(lcInput,lnResult-1) ENDPROC PROCEDURE httpgetlight LPARAMETERS lcUrl, lnTimeout LOCAL lnError, lnSize, lcBuffer, szHead, loUrl, llHTTPS, lnResult,; hInetConnection, hHTTPResult THIS.nerror = 0 THIS.cerrormsg = "" IF EMPTY(lnTimeout) lnTimeout = THIS.nConnectTimeout ENDIF loUrl = THIS.InternetCrackUrl(lcUrl) IF ISNULL(loUrl) THIS.nerror = -1 THIS.cerrormsg = "Invalid URL passed." RETURN "" ENDIF llHTTPS = IIF(LOWER(loUrl.cProtocol)="https",.T.,.F.) IF llHTTPS THIS.cerrormsg = "SSL not supported with HTTPGetLight()" ENDIF THIS.nHttpPort=VAL(loUrl.cPort) IF USED("wwPostBuffer") SELE wwPostBuffer IF RIGHT(wwPostBuffer.cPostBuffer,1) = "&" REPLACE cPostBuffer WITH LEFT(cPostBuffer,LEN(cPostBuffer)-1) ENDIF tnPostSize=LEN(wwPostBuffer.cPostBuffer) lcPostBuffer= IIF(tnPostSize > 0,wwPostBuffer.cPostBuffer,NULL) ELSE tnPostSize=0 lcPostBuffer=NULL ENDIF *** Required headers tcHeaders = "User-Agent: " + THIS.cUserAgent + CRLF + ; "Host: " + loUrl.cServer + CRLF **+ IIF(!EMPTY(loUrl.cPort),":" + loUrl.cPort,"") + IF tnPostSize > 0 DO CASE CASE THIS.nhttppostmode = 1 tcHeaders = "Content-Type: application/x-www-form-urlencoded" + CRLF +; "Content-length: " + TRANSFORM(tnPostSize) + CRLF +; IIF(!EMPTY(tcHeaders),tcHeaders,"") CASE THIS.nhttppostmode = 2 tcHeaders = "Content-Type: multipart/form-data; boundary=" + MULTIPART_BOUNDARY + CRLF + ; "Content-length: " + TRANSFORM(tnPostSize) + CRLF +; IIF(EMPTY(tcHeaders),"",tcHeaders) IF tnPostSize > 0 *** NOTE: extra dashes required to simulate browser operation! lcPostBuffer = lcPostBuffer + "--" + MULTIPART_BOUNDARY + CR tnPostSize=LEN(lcPostBuffer) ENDIF CASE THIS.nhttppostmode = 4 && XML tcHeaders = "Content-Type: text/xml" + CRLF +; "Content-length: " + TRANSFORM(tnPostSize) + CRLF +; IIF(EMPTY(tcHeaders),"",tcHeaders) ENDCASE lcOutput = "POST " + loUrl.cPath + loUrl.cQueryString + CRLF + tcHeaders + CRLF + ; lcPostBuffer ELSE tcHeaders = IIF(!EMPTY(tcHeaders),tcHeaders,"") lcOutput = "GET " + loUrl.cPath + loUrl.cQueryString + CRLF + tcHeaders + CRLF ENDIF loIP = CREATEOBJECT("wwSocket") loIP.nTimeout = lnTimeout loIP.lStripNulls = .T. IF !loIP.CONNECT(loUrl.cServer,VAL(loUrl.cPort)) THIS.nerror = -1 THIS.cerrormsg = loIP.cerrormsg RETURN "" ENDIF IF !loIP.SEND(lcOutput) THIS.nerror = -1 THIS.cerrormsg = loIP.cerrormsg RETURN "" ENDIF *** Read the first buffer from the server *** To try and get the header lcData = loIP.Receive(1024) IF loIP.nerror # 0 THIS.cerrormsg = loIP.cerrormsg THIS.nerror = loIP.nerror RETURN "" ENDIF IF EMPTY(lcData) THIS.nerror = -1 THIS.cerrormsg = "No data available from Web Server" RETURN "" ENDIF lnAt = AT(CHR(13)+CHR(10)+CHR(13)+CHR(10),lcData ) THIS.cHTTPHeaders = SUBSTR(lcData,1,lnAt) *** Store the content lcData = SUBSTR(lcData,lnAt + 4) lnSize = VAL( Extract(THIS.cHTTPHeaders,"content-length: ",CHR(13)) ) IF lnSize > 0 lcData = lcData + loIP.WaitForSize(lnSize - LEN(lcData)) ELSE DO WHILE .T. lcReceive = loIP.Receive() IF EMPTY(lcReceive) EXIT ENDIF lcData = lcData + lcReceive ENDDO ENDIF RETURN lcData ENDPROC PROCEDURE setproxylogin LPARAMETERS tcUSername, tcPassword LOCAL lcUsername, lcPassword, lpBuffer, lpdwBufferLength, nSuccess lcUserName = IIF(!EMPTY(tcUserName),tcUserName,THIS.cHTTPProxyUserName) lcPassword = IIF(!EMPTY(tcPassword),tcPassword,THIS.cHTTPProxyPassword) IF EMPTY(lcUsername) RETURN ENDIF DECLARE INTEGER InternetSetOption IN WinInet.dll ; INTEGER hInternet, ; INTEGER dwOption, ; STRING @lpBuffer, ; LONG @lpdwBufferLength INTERNET_OPTION_PROXY_USERNAME = 43 INTERNET_OPTION_PROXY_PASSWORD = 44 IF !EMPTY(lcUserName) lpBuffer = lcUserName lpdwBufferLength = LEN(lpBuffer) + 1 dwOption = INTERNET_OPTION_PROXY_USERNAME nSuccess = InternetSetOption(THIS.hHTTPSession, dwOption, @lpBuffer, @lpdwBufferLength) IF nSuccess <> 1 THIS.nError = GetLastError() THIS.cErrorMsg = THIS.GetSystemErrorMsg(THIS.nError) RETURN .F. ENDIF ENDIF IF !EMPTY(lcPassword) lpBuffer = lcpassword lpdwBufferLength = LEN(lpBuffer) + 1 dwOption = INTERNET_OPTION_PROXY_PASSWORD nSuccess = InternetSetOption(THIS.hIPSession, dwOption, @lpBuffer, @lpdwBufferLength) IF nSuccess <> 1 THIS.nError = GetLastError() THIS.cErrorMsg = THIS.GetSystemErrorMsg(THIS.nError) RETURN .F. ENDIF ENDIF RETURN .T. ENDPROC PROCEDURE Destroy IF THIS.hIPSession # 0 OR THIS.hHTTPSession # 0 THIS.HTTPClose() ENDIF ************************************************************************ * wwIPStuff :: Destroy ********************************* *** Function: Clears HTTP Session Handles if open ************************************************************************ ENDPROC PROCEDURE Init LPARAMETER lcPath #IF .T. WAIT WINDOW NOWAIT ; "Welcome to West Wind Internet Protocols..." + CHR(13) + ; "This is a shareware copy of wwIPStuff." + CHR(13)+ CHR(13) +; "Please register your copy." #ENDIF lcPath=IIF(VARTYPE(lcPath)="C",lcPath,"") THIS.cDLLPath=lcPath+"wwIPStuff.dll" *** We'll use this for any of the WinInet API calls DECLARE INTEGER GetLastError; IN WIN32API ************************************************************************ * wwIPStuff :: Init ********************************* *** Function: Loads the DLL *** Pass: lcPath - Path where to find the DLL. If "" is used *** SYSTEM path or local is assumed. Path must *** be terminated with a trailing backslash ************************************************************************ ENDPROC ����� w ���^ ��^ ���������������������������%���5������ ��U���[������������U��������������T��- �T��CC�� ������6�%� �2'�T�C]�\WWZ_C]�.zip �%C������ � �� @�T� �0�Error: unable to zip the file or file not found.�T��a�T� ���B-��T�C��� �� � ��S�T�C���a� ����%C�0�T� � �Error: Couldn't find the file...�T� ���T��a�B-�,�T�C��������� ���%��7�T� �� � ��T� ���T��a�B-��T� ��$�C �txtFileBuffer��� ��$�C �txtFileName��� ��-�C�txtMaxBufferSizeCC��ZA� ���%� �"�C�IsZipped�True� ����T�C��X�T���"�T�C����� ���%���T� �� � ��T� ���T��a�B-��%��OK�T� ���T��a�T� ���B-��Ba�U� �LCFILENAME �LCZIPNAME �LCFILETEXT�LNRESULT�LCBUFFER�LNSIZE�THIS�LERROR �CSOURCEFILE �LISZIPPED�OHTTP�ZIPFILES �CERRORMSG�NERROR �ENCODEDBF �HTTPCONNECT �CSERVERNAME �CUSERNAME �CPASSWORD�LSECURE �NHTTPPOSTMODE �ADDPOSTKEY �CTARGETFILE�NMAXBUFFERSIZE �HTTPGETEX �CHTTPLINKD �����%C������� ,��B-��T��-!�T�C �txtFileBuffer��(�T�CCC�IsZipped���-�a6�T �C �txtFileName���%C ��� ��T �CC�(\`��%C� � �T �C� �C ���%C��� �� � � Y-�C�Error: Invalid file format... ���B-� �%�!(�%C� �C ��*.*� ��� � �b�CR�Error: Unzipping failed. Most likely you selected too many messages to download... ���T��a�B-� � ���C�OK�����Ba�U� �LOPROCESS �LCAUTHUSER�THIS �AUTHORIZE�LERROR �LCFILETEXT�REQUEST�GETMULTIPARTFORMVAR �LLISZIPPED �LCTARGETFILE�CFORCEDSAVEPATH�OHTTP �DECODEDBF�RESPONSE�WRITE �UNZIPFILES �ORESPONSE�sendfile,����� �s_sendfile.����1�q��q�q�A���A���q�A�a�q�A�2BA!A�""a�q�A�2�q�A�r�3��q�A��brA�4A�q�A���!�q�A��A�Rr�2����������������������������7�����k ��E����)���^ ���������������������%���A������������ڌ[5���������� �H(�'� Ct�C�tcActionb�N ]��BC����� �� �Available��BC��� �� �Create cursor��BC����� � ���Get all headers��BC��������� �$� ���Get specific header6�BC���������a �!� ���Get full e-mailsq�BC������� �� ���Connect�BC���� �� �� �Disconnect�BC�� ���U ��TCACTION�TVPARM1�TVPARM2�TVPARM3�TVPARM4�TVPARM5 �GETEMAILADD �POP3EXIST �POP3CURSOR�POP3MAILHEADALL �POP3MAILFULL�POP3MAILCONNECT�POP3MAILDISCONNECT���� ��� �T��� �T���.�%C�Exist� �wwIPStuff.dll��a��Ba��(�T���wwIPStuff.dll not installed�B-��U��TCERROR �LCDLLFOLDER�LCERROR�DLLMNGRW. �����C�����C����h����I��I��M��M��I��I ��C# ��D ��C ��M ��M��M��M��M��M��M��L��M��MK�h���I��I��M��M��M��C��I�Ba�U��TCCURSOR �TCCATTACH�KILL�IID�ILOCALID�MSUBJECT�MTO�NSIZE�NATTACH�CDATE�DDATE�CTIME�MMESSAGE �MCONTTYPE �MGLOBTYPE �MFROMEMAIL �MFROMNAME �MFULLTEXT �MBOUNDARY�BSUCCESS�MERROR�MBODY �MFILENAME�MATTACH�CTYPE���������� ���� � �T���%�T�C�Filling�Server��� �#�T�C�Filling�User��� �'�T�C�Filling�Password��� ��%C� � ��B-�#�G+(�\wwclient\classes\wwUtils&�G+(�\wwclient\classes\wwPop3.prg)�G~(�\wwclient\classes\wwIPStuff.vcx � � ��T �C�wwPop3N�T ����T ����T ����T ��a�%C �� �T� ��Ba��< ��B-�U��TCPOP3 �TOCONNECT�TCERROR�LCSERVER�LCUSER�LCPASS�LCERROR�LNRECORD�LNI�OM�MARKUP �POP3EXIST�O�LLRESULT �CMAILSERVER �CUSERNAME �CPASSWORD �LLOGSESSION�CONNECTP� �4��� �C��� �%�B��<�wwUtils�<�wwPop3��Ba�U� �TOCONNECT �TBRELEASE�QUIT�WWUTILS�WWPOP3������������ �� � � �� ��� �T ���*�T �C �toLastHeaderb�O�C� %�T�C�Filling�Server����#�T�C�Filling�User����'�T�C�Filling�Password�����%C��  �B-�#�G+(�\wwclient\classes\wwUtils&�G+(�\wwclient\classes\wwPop3.prg)�G~(�\wwclient\classes\wwIPStuff.vcx ����T�C�wwPop3N�T����T����T����T��a�%C��W"�R,:�Collecting messages ...�T ��� �F��^� � �(A6�R,:�Processing message CC �Z� of CC �Z�T�C� ��� �%C�oMb�O�C� =�T� �T� ��T����T����T �� ��T!��"��T#��#� �T$�C$ �T%�C^ �T&����T'��(��T)��*��T+��,��T-��.��T/��0��T1��2� �T3�a �T4����T5��6� �%�n �% �^Z�%��� ���� � �� � �#��#� �+��+� �/��/� Z �r��!��j�!��9 �% �(Z�%��� ���� � �� � �#��#� �+��+� �/��/� $C�R,�Already downloaded message CC �Z� of CC �Z�!�� �r�����R �C�7��y�T � �No connection��<� �T� ��<�wwUtils�BCC ��a�-6�U9��TCPOP3�TCCURSOR �TCCURSORA�TCERROR �TOLASTHEADER �TBONLYLAST�LCSERVER�LCUSER�LCPASS�LCERROR�LNRECORD�LNI�LNMSGS �LBLASTHEADER�OM�MARKUP �POP3EXIST�O�LLRESULT �CMAILSERVER �CUSERNAME �CPASSWORD �LLOGSESSION�CONNECT �NMESSAGECOUNT�GETMESSAGEHEADER�IID�ILOCALID�MSUBJECT�CSUBJECT�MTO�CTO�NSIZE�NATTACH �NATTACHMENTS�CDATE�DDATE�CTIME�MMESSAGE �MCONTTYPE �CCONTENTTYPE �MGLOBTYPE�CGLOBALCONTENTTYPE �MFROMEMAIL �CFROMEMAIL �MFROMNAME �CFROMNAME �MFULLTEXT �CFULLTEXT �MBOUNDARY�CMULTIPARTBOUNDARY�BSUCCESS�MERROR�MBODY�CBODY�QUIT�WWUTILS������������� � �� � �T���%�T�C�Filling�Server��� �#�T�C�Filling�User��� �'�T�C�Filling�Password��� ��%C� � ��B-�#�G+(�\wwclient\classes\wwUtils&�G+(�\wwclient\classes\wwPop3.prg)�G~(�\wwclient\classes\wwIPStuff.vcx ����T�C�wwPop3N�T����T����T����T��a�%C��e"�R,:�Collecting messages ...�T �C�N �F��^�~O�^ �T ��6�R,:�Processing message CC �Z� of CC �Z�T �C� ��� �%C�oMb�O�C � A�C� ����T� ���T� ���T� ���T� ���T� ���T � �!��T"� �#��T$� �%��T&� �'��T(� �)��T*� �+� �T,�a �T-����T.� �/��_ �%-=�% ��9�0�1�2��3�4�5�6� �T1�7� �F��0�( �5�-C��iId1��T3�C�0� �8�9��T5�C�0� �8�/��T6�C�0� �8�:��T2�C�0� �8���%C3�0u�T4�C3�� �T4���� �%C4;�>;� �8�9�<�4��2�.�5�=�6��1T�r�7��;�<�.��=�1� �3�4�5�2�6������ �F���R �C�>���<� �T��� �T���<�wwUtils�BCC��a�-6�U@��TCPOP3�TCCURSOR �TCCURSORA�TCERROR�LCSERVER�LCUSER�LCPASS�LCERROR�LNRECORD�LNI�LNMSGS�OM�MARKUP �POP3EXIST�O�LLRESULT �CMAILSERVER �CUSERNAME �CPASSWORD �LLOGSESSION�CONNECT�ILOCALID �GETMESSAGE�PARSEMULTIPARTMESSAGE�MSUBJECT�CSUBJECT�MTO�CTO�NSIZE�NATTACH �NATTACHMENTS�CDATE �MCONTTYPE �CCONTENTTYPE �MGLOBTYPE�CGLOBALCONTENTTYPE �MFROMEMAIL �CFROMEMAIL �MFROMNAME �CFROMNAME �MFULLTEXT �CFULLTEXT �MBOUNDARY�CMULTIPARTBOUNDARY�BSUCCESS�MERROR�MBODY�CBODY�LNA�LNID�LNSIZE �LCFILENAME �LCCONTENT�LCBODY�LCTYPE�IID �AATTACHMENTS �CFILENAME �CCONTENTSIZE �MFILENAME�MATTACH�CTYPE�QUIT�WWUTILSB������������� � �T��� �T���%�T�C�Filling�Server�� �#�T�C�Filling�User�� �'�T�C�Filling�Password�� ��%C� � ��B-�#�G+(�\wwclient\classes\wwUtils&�G+(�\wwclient\classes\wwPop3.prg)�G~(�\wwclient\classes\wwIPStuff.vcx � � ��T �C�wwPop3N�T ����T ����T ����T ��a�C ���T�C �� ����G1 ��� ����< � �T��� �T���<�wwUtils�BCC��a�-6�U��TCCURSOR�TCPOP3�TCERROR�LCSERVER�LCUSER�LCPASS�LCFOLDER�LCERROR�LCE1�LNRECORD�MARKUP �POP3EXIST�O�LLRESULT �CMAILSERVER �CUSERNAME �CPASSWORD �LLOGSESSION�CONNECT�LOMSG �GETMESSAGE�CSUBJECT �CFROMNAME�NSIZE�WWUTILSO� �4 �� �5 �!�T �C� �� ��C ��BC �CC �>4F=�U��NWHICH�CE�OCCASION�CEMAILS �pop3Exist���� �pop3Cursorc�����pop3MailConnectt�����pop3MailDisconnect�����pop3MailHeadAll}���� �pop3MailFulls�����pop3Mail���� �GetEmailAdd�����r��!Aa�D�4�q����r��q�A�4����0! q�4��2�q��T1q3q�A�2a�a��q�A�q�q�4������A�q�4�2�q�q��S1q3q�A�2a�a�!�q�aQ����������A�A��B�A���2A�A�A��A�A�A�R���A�q���Q5�12�q��S1q3q�A�2a�a�!��q��a��bQ��b��1�1��q���A���BA�A�A�A�A��A�Q��A�q����Q4��q���R1q3q�A�2a�a�C�a���w����Q6���1������������������������*�������� ��9���'��� ����^���B����������J���������������,��������,��1��x����2��2��������%������������������b,3���4 �� � � ��T� ���PeB�� �T�Ct!�5 � � � � ��T ���% ��� �B����% � ��T ��,��% �� �(�BC � ��CC �����6��T �C �>�T � � �� ��T �C � � �!�T �C � � ��% �� �B����T � � ��% �'�BCC � � � �\C ����BC � � � �\��U ��CSTRING�NOCCUR�CSEP�BNOFF�_REFOX_�LNPARMS�NPARMS�CSPLUS�NSEP�NSTART�NENDar���2�A�1A�1A�22�A�q�r�A�@1���������������������%�����������I������C���yl-����[�C?7�U��A�11���������������������%�������������0�����|N2F���4����'�5������ � � ��5 ��T �CC������C��6�T ��Only ��T ��Step ��T ��Message �)�T��Screen ���Console � �T��File ��T��Develop ��T��Today ��T��Date �W�T��� � �� ���C$C$ ��  �� �CC$ � ��  �H � � �B�� ��� �%C� !�C��CC������6�� �T �a � � �T �-� ��� :!�C��CC������6� � ��t&�%� �� g�G � �%��G( �debugx.txt�G � �� �%��G�G(��G � �% �� �\�{F8}�G1 ��U��TCOPTION�TCVALUE�TCPARM3�LBSCREEN�LBFILE �LBDEVELOP�LBTODAY�LBDOIT�LBDATE �LBMESSAGE�LBSTEP�LBONLY�LCOPTION �P_DEVELOP�MSGBOXW�DEBUGX�TXT �qq�QQQaQs���AA����A�R�Qa�A��Aa�A���a�a�A�a�A��Q��a�A�1���������������������%�����������|�����H��ІZ+n���4�� �5��#�T�CC�� ��Ding�C��6 �HB�-� C�Q�� ��Ding{��T��ding.wav� ��Chimes��T� �chimes.wav� ��Chord��T� �chord.wav� ��Notify�T� �notify.wav� ��Tada-�T��tada.wav��T�C�fM�%C� �C �\libs\sounds\�0 �C �gcSetBellb�C ��� #�G( �\libs\sounds\���%C �gcSetBellb�U�7� �T�����C �U��TCSOUND�LCSOUND�LCBELL �GCSETBELLq��1��QQqqaaqqQQA��1q��A�A��1���������������������%�����������B��$�����Lc2�� �4��� �5���T�C�W �T��%��CT��T�C�� �He�x.� ���Check���C��  ��BaG� ���Check�C �vIsDiskIn �C� �vIsDiskIn ��� ��Ba� ��C�� � ���Add�%C �vIsDiskIn 8�h �vIsDiskIn��C��N��L�F��& ����%C� �vIsDiskIn�F��>��a�0�r �vIsDiskIn�����a� �F�*� ���Remove�C �vIsDiskIn #� ���Removex�%C� �vIsDiskInt�F��>��a �F����B-�U��TCACTION�TCD�LNSELECT �LNDRIVETYPE �VISDISKIN�VISOK�VISDRIVE�VISTYPE����!A��q�tq�Aq��A�q���A��qq���A�A�q�1���������������������%�������������������R+����4���5��5��5��T�C�ERROR �T�-�1 �lbError = .T.�T�CC��]g�ON ERROR &lcOnError �%�� �B��� �B���U��LCD �LCONERROR�LBERROR �LNCLUSTERv�q�q�q�Q�QQq����A�1���������������������%�����������S��!�����y0���4 �� ���5 � � ��T��/ ���T �C ��\�T �C ��\�T �C ��= �H� � �� �B �� � CC ��`>� � �!�B ��/ ��/ �� CC ��`>c$�%C�CENTURYv�OFF�� >�T �C �\�!�B ��/ ��/ � � CC ��`>� � �B ��/ �� CC ��`>J�T �C ��\�T �C ��=�%C�CENTURYv�OFF�T �C �\�1�BCCC�01/ ��/ �#!=�  � � CC ��`>� � w �BC ��`� CC ��`> �BC ��`�2 �B����U��CDATE�BBASIC�TBEIGHT�CDAY�CMONTH�CYEAR�LBNOTS4QEa���qAA�aqaA��q���A�1��������������������%���j������] ��i�����g,3���4������T� ���PeB�� �T�Ct�5� �5���5 � � � � ���T ��/S��T ��/L��T ��/A��T��/a��T ����Encode�T ���C� �H�� ���String#�BC�������� �� � L�T�CC�=� �� � z�T� CC^8� ��� �T�CC?8 � ��T�CC8 � � �T���2 �T�� �C� �T��� �H� ���Encodem�T�C ��C� ���6 �T�� �C�� ���Decode �T�C � �C�\��6�C�� �B��U��TCACTION�TCSWITCH�TCSTRING�TNSEED�_REFOX_�LNPARMS�LNSEED�LCIN�LCOUT �LBSELFSEED �LBLAYERED�LBENCODE�LBASCII�LBSEEDED�LBALPHA�STRING�EENCODE�4���5�����5��T�C�>��(��T�C��\�T�C� �Hx� � �Z�T�CC�?� 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz�D�T�C�CC?8��?G �T�� �H� ��6 �T� � C� \�T��/� C� $�T��A � C�%>�T��a%�2 �T� �� � � � �T�C�CC8��G� � + �T�C�CC8���G� C� ~h(�T�C� CC^8��_G � C�(�T�C�CC8��G�2 �T����T � �C� ��B�U ��TNFACTOR�LNI�LNC�LNCHAR�LNNEW�LCCHAR�LCIN�LBALPHA�LNX �LBLAYERED�LBASCII�LCOUTd�4�����5��5����5��%C�G� �T�C�\� �T����T��/auto���C� �%���T�CC�&8���T�C�> �C�� �T�����(�Te�T��C>�0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzCCC>8=F\� �B��U��TCSWITCH�TCSTRING�TNSEED�LCOUT�LNI�LNLENGTH�LNSEED�LBAUTO�Eencode�����String����@1ar��v��4111�qbQAAAa�a����A�����q��q�A��2�q�1q��qQ������QQQQQ��A�R�QQ��A�1A�A�8��r��q�����A�����A��qQA��1�����������������,���c ��$��Z���S���7��u���������%�����������=��I�����<h,3A��;�4 �� � ��T� ���PeB�� �T�Ct�5 �� � � ��%� {��T ���I��%� ��T �C$�T �C��%� ��T �C��% ���RDTAOB �H�� C � � ���R 7�T ��������� �B�� C � � ���D �T ����������T ���B��������"� C �� ���TAOB �T ����������T �� �B��� ���R`�T �C �Q� 8�T � � �Q��T � �]^%��T �CC �]# �B �� ���D�T �C �Q� 8�T � � �Q��T � �]^%��T �CC �]#�T � � �B �� ���TAOBu�T �C �Q� 8�T � � �Q��T � �]^%��T �CC �]#�T � � �Hq� ���T�BC �*� C� � �� ���O �BC� � �� on C �*� ���A0 �BC �*� at C� � �� ���BY�BCC� � �=�2q�BC� � ���2�B�error��46�T �CC �]g]^%�Q�C �Q�G �H%� ���I �BC �8� ���123%�BC �C ��gT� �B ���U ��CMODE�DDATE�NTIME�_REFOX_�LNPARMS �NTIMESTAMP�NA�NT�ND�STOHMS_ar��A���A��A��Q�Q��!Q��A�A�q�AAAAQ�A���A��b�A�aAA��A�1���������������������%������������������\,3m��_�4 �� � ��T� ���PeB�� �T�Ct �5 � �5 ��T �� �Hm�X>� ���Author � � �C �m.p_Authorb�C =+�% ��C �m.tvValue2b�C ��T � ����T �C �9�B � �C �C �� � � � ��2X�B �IT Manager��U ��TCOPTION�TVVALUE1�TVVALUE2�_REFOX_�LNPARMS�NPARMS�LCSEP�P_AUTHOR �P_ADDRESS �P_AUTHTEL �P_AUTHMAIL�Qar�������A��1C�7���������������������%�������������� ������Y0����4���%C��0x� ����%C��0t� � ���%C��0p��T��RUN DEL ���&lcCommand ��� �BC��0 �U��TCFILE �LCCOMMANDr�������A�A�A��1��������������������%���2��������9���X��)4���4��������T� ���PeB�5�-�T���C �gbVfpTableb�L��  �%�� �%���h�����)�CREATE CURSOR ( tcTable) ( &tcFields) �� �%���h �createtprg��).�CREATE CURSOR ( 'createtprg') ( &tcFields) ��F � �C � �T���C�TIBY�� � �%�w �(��� �(����Q ��C��� ��Q������[�U ��TCTABLE�TCFIELDS�TCINDEX�TBCURSOR �TBFROMARRAY�TBVFP�_REFOX_�LBVFP �GBVFPTABLE �CREATETPRG �ADDINDEXES�ISFIELDT�CPCHECK� �5����5��%C�(��Ba��T�C���;����(���T�C������;��%� TAG � ��T��� TAG ���INDEX ON &lcTag ��U��LNI�LNTAGS�LCTAG�TCINDEX�OCCASION� �4��� ������T�C��>��(���T�C���\6�%��,� ���(� �C�R� ��Ba���B-�U� �TCFIELDTYPES�TCCLAUSE�LNTYPES�LNT�LCT �AddIndexesk�����IsFieldT\����aq����A����A�q������A���H�A�8��q��q�A�qqA�1A�5���q��qQcq�A�A�q�2�������������������� �� ��A���-��� ��, ��T�������%�����������6��!�����)H3�� �4����5������%C��5��B� �T��T�CC��@�%�.� ��T���.dbf��%C�0 ��B� �T�C�T�C���T��%���C��T�C��T�C� �C���%��w�T�C��%��s�C��C�C� �C����B�U��TCTABLE�TNVALUE�LCTABLE�LNHANDLE�LCCHAR�LNCHAR�LNVALUE �LNSECONDS@�q�A�A��1QA�A�A��!��!��A�!��A�A�A�1��������������������%�����������U�����\,3��v�4 �� �����T� ���PeB�� �T�Ct�5 �� � ��5 � �5 � ��T ���% � �)�T ���NOMODIFY NOAPPEND NODELETE��% � ��T �����%C�%�T �� FONT "MS Sans Serif", 8�4�T �� FONT ���%C �m.p_Locateb�Uc �T �-��%C �m.cLocateb�U�T ���� �(C.�%CC �/b�C0�T � �CC ������+6C �/��� �T �a�T �9� �% �4 �T9�a�C�DEFINE WINDOW wBrowse FROM 0,0 TO SROWS(), SCOLS() &lcBrowFont ��%C � � ��.mpr��%C� �5� �T�C �F�2�BROWSE NORMAL WINDOW wBrowse &tcAltClse NOWAIT �F��)�BROWSE NORMAL WINDOW wBrowse &cClause �<,�� �% �k �T9�-��B�U��CCLAUSE�CMENU �TCALTALIAS �TCALTCLSE �TCBROWFONT�_REFOX_�LNPARMS�NI�NPARMS �LCBROWFONT�LBVISUAL �LBNOSCREEN�P_LOCATE�CLOCATE�VISIBLE�LCALIAS�WBROWSEA��4 �� ��% �)� �B ���:� �B����U� �CFUNCTION �BCONDITION��%C �m.cFindTextb�U(� �7 ����T ��CX�%C �� �=�LOCATE FOR UPPER(ALLTRIM(m.cFindText)) $ UPPER(&cLocate.) �%C4� �T �a���#)�R,: �Not found �T �-��� �T �-��U� �CFINDTEXT�P_LOCATE'���%C4 �C+  ��#)���U���Bx@�����Bfind���� �Bfindagain����ar��Vq���1A�1�A��Q�qA��A��A�A�A����A�6r�!AB�q���!�A��q���A�B�2������A�2��A�#���Q�A�A���A�3�A�1Q�A�A�1�����������������7���/����P���>����� ��X���O���- ��j ��m������%���������!��5����#cK8A���4���������� �T�Ct�5��5 � �T �-�T�C�W �Hh�� � (a�U�'Files', <table of directory>, <table of files>, <path>, <options>, <files>, <filter>N�B�'Directories', <table for directories>, <path>, <options>, <level>� ���Files`"�BC������������ �� �� �Directories�%C� �Q��H�T �C�����/S�C�/L��CC�C�/L�\g��6 �� ���Deltree�5 �E�T �C��CDEFGHIJKLMNOPQRSTUVWXYZ�CCCCCCCCCCCCCCCCCCCCCCCC�T��/S�T��*.*�T��.T.#�C�t_dirlst�t_dirlstaaa �#�C�t_flslst�t_flslstaaa � �H<� C�f�C �C�f�C: �C�f�C:\ �C� 95�C�FATAL �Attempt to delete local drive C:��20�C�t_dirlst�t_flslst�������� � �C�t_dirlst�t_flslst��#�C�t_dirlst�t_dirlstaaa �#�C�t_flslst�t_flslstaaa � �T �a� �� �Delete treej#�C�t_dirlst�t_dirlstaaa �#�C�t_flslst�t_flslstaaa � �HU3� C�f�C �C�f�C: �C�f�C:\ 5�C�FATAL �Attempt to delete local drive C:��20�C�t_dirlst�t_flslst�������� � �C�t_dirlst�t_flslst��#�C�t_dirlst�t_dirlstaaa �#�C�t_flslst�t_flslstaaa � �T �a� �� �Copy tree#�C�t_dirlst�t_dirlstaaa �,�C �Directories�t_dirlst���/S��C�t_dirlst����� �T �a�2a�U�'Files', <table of directory>, <table of files>, <path>, <options>, <files>, <filter>N�B�'Directories', <table for directories>, <path>, <options>, <level>� �F� �B ��U� �TCFUNCTION�TVP1�TVP2�TVP3�TVP4�TVP5�TVP6�LNPARMS�LNSELECT�LBRETURN�DIRFILES�DIR�LCP1�KILL�APPERROR�DELTREE�DIRLIST�COPYTREEV�4��������5��5�� � � �T�a�%C��Z� �Q����%C�x� �Q��&�T�CC��C]C]��6�T�CC������6 �T �CC� ��*.*��6 �T �CC� ��.T.��6�%C�����a �F"�%C����������� �B �F ��� �B��U� �TCTABLEDIR �TCTABLEFLS�TCPATH �TCOPTIONS�TCFILES�TCFILTER �LBSUCCESS�LCPATH �LCOPTIONS�LCFILES�LCFILTER�DIR�XFILES�LNSELECT �4��� �5�� �5���T�C���T�C��%C� u��C�����Q�������%C� ��C����Q����� ��C�N(4�#��S�DELETE FILE Addbs( ALLTRIM( &lcFiles..filepath)) + ALLTRIM( &lcFiles..filename) � ��C�N(�#��.�lcDir = Addbs( ALLTRIM( &lcDirs..dirpath)) "�T�C���*.*�DHS�%�,�=RMDIRMen ( ALLTRIM( &lcDirs..dirpath)) ���C�� ��C�� ��U ��TCDIRS�TCFILES�LNI�LNF�LCDIRS�LCFILES�CPCHECK �LADELTREE�LCDIR�KILL)�4���� �5�� �5���T�C���%C� i��C�����Q��������(C�N �#��2�lcDirFrom = ALLTRIM( UPPER( &lcDirs..dirpath)) �T�C �CC�fCC�f�C��a ��C�*.*� ���- ���C�� ��Ba�U ��TCDIRS�TCSOURCE�TCDEST�LNI�LNF�LCDIRS�LCFILES�CPCHECK�LCDIRTO �LCDIRFROM�ISDIRMEN�FILECOPY�KILL5�4 �� � ���� �T�Ct/�5 � ��� � � � ��5 � ���5 � ���5��5� �T�C �T�- �H�*� � � �T ��� � � �T ��� C�  �T ���2* �T �� �T�a��T �C]C]�h�tempdir��C��C��C ��N��D��C��C��N��C��L��C2 ��Nt�r�tempdir�����CC ��\\�\@ � ��dirCC�tempdirN!����F� �+a �F�tempdir�T "���~� �T "� "��T �C��`�T����>��a�%C �R�\.. ��.��%��� � @�.�%�%C� �#��� C � �%� �C� &�R,:�Processing directory � �T�C� �G( ��T �C����D�T $�CO� �( �@�T �CC ��C� ��� ��\C� ��6�T �CC ��\\�\@o�r�tempdir������ �C� ��C� ��C� ���-� �# $����% "�� �!���R,:�Indexing and copying �G(��F�tempdir�[�C?%��#)�[�& ���T�C�SAFETYv�T�C�DELETEDv�G.�G�( ��C' �SET SAFETY &setSafety �SET DELETED &lcSetDeleted �R �T �C�tempdirN�Q��B ���U&� �CDIRTABLE�CDIR�BSUBDIR �TNMAXLEVEL�LNPARMS�NFILES�AFILES�ACDIR�NI�NDIR�CDIR2�CPATH�NRECS �LNMAXLEVEL�LNLEVEL �SETDEFAULT �SETSAFETY �LCSETDELETED�LNTIMED�LBLEVEL�TEMPDIR�DIRKEY �DIRPARENT�DIRSHORT�DIRSIZE�DIRDATE�DIRTIME�DIRATTR�DIRLEVEL�DIRPATH �DIRPROCESS�DIRNAME�DIRFILES�PADLZERO�NCOUNT�ISDIRMEN�NRECNO�PAUSE!�4 �� � � � �5�5 � ��� � � � � ��5� �5 ��5 � ��5��5��T�C�T �C]C]�C� ����Q�� ����h�tempfile��C��N ��D��C��C��C��C��C�F� �5� ��T ��general �T�-�T ����T�C�ERROR�1�DO OnErrorPlan�~O�T ��general�T �C�!�`�T "�C � R�T�C� �� �#��%C�d&�R,:�Processing directory � �T�C�0�T �CC �� �� ��\ �6 �T�-�T ��ADIR�T ��T �C$� ��T � �after ADIR �%�5 �T�-�T%� � �&�%��T ����% ��`�C$��� �( �K�T �C� �$��IF &cFilterG�r�tempfile�������� �C� �$�C� �$� �C� �$�C� �$�CC� �$������R,:�Copying�ON ERROR &lcOnError �T �C�SAFETYv�G.�F� �( ��SET SAFETY &setSafety �Q��T �C�tempfileN�Q��R �B ���U'��CDIRFILE �CFILEFILE�CDIRROOT�CFILES�CFILTER�CDIR�NFILES�AFILES�ACDIR�NI�NDIR�CDIR2�CDD�CPATH�LCBRANCH�NRECS �SETDEFAULT �SETSAFETY�LNTIMED �LCONERROR�CPCHECK�DIR�TEMPFILE�FILENAME�FILESIZE�FILEDATE�FILETIME�FILEATTR�FILEEXT�FILEPATH �FILEBRANCH�LBERROR �LCERRORLOC�DIRPATH�CDC�BRANCH�ACFILES�LCPATH �DOSUBSETS_�4���5 � �� �5���%�*.��8��i�"��Unable to process ���B-�2�T�%�ABCDEFGHIJKLMNOPQRSTUVWXYZ$0123456789��(C�>X%�T�C���*.C��\�*. �T�-�T �C�� �%�> �T�- �T�� � ���T ����% ��i�C��� �( �T�T �C� ���IF &cFilterP�r�tempfile � � � ����� �C� ��C� �� �C� ��C� ��CC� �������U��TCPATH�NFILES�NI�LNA�LCPATH �LCSUBSETS�LBERROR�ACFILES�LCPATH2 �DOSUBSETS�FILEDATE�FILEPATH�FILENAME�FILESIZE�FILETIME�FILEATTR�FILEEXT �FILEBRANCH�CDIR�LCBRANCH8� �4����5��T�C�>�BCC���\@�U��TCDIR�TCROOT �LNLENROOT��T ��� �T�a�U��NFILES�LBERROR�DirFiles�����deltreec �����copytree �����Diri �����xFiles���� �DoSubSetsZ�����Branchp���� �OnErrorPlan����r��w�q����a"��A�r�Q�11�Q�A�11�31�1Q�A�11�2��A���5�q�1���A���A�dx"�B�A��5�����aA��aA�2B�"A�A���5�����aA�!�A��q�6�r��1q�q�����������A�l Bq����QAA�A�A�A�A�A�Qa�A���A��A�A�1A�A�A��B�QQ�A��Qaa�a�AR���6�Qq���q�q�a(q��A��Qa�AAaAa�A��q�����A�1AA�1 A�A�A�!qqa�q����Q��4�q�1�1�"q�A�!Q�q�����A�1BA�1 A�A�A�5��q��A5���1�����������������=��� ����[���R�����W�����n���l��S��������d��K'��������_'��1��/����1��6����-��6��7����2�� 8��y8���� ���%���9������'?��P��:��KR8k��'�4�����������T � ���PeB� � �T �Ct�5 � � ��5��5������ �T �- �H�� ���Init�7��7�������7����7� �T�a �T�� �T�� �T�� �T��� �T��� �T��� �T��� �T�� �T��� �T��� �T �a� ���Release�<��<������<� �T �a� ���Request2\#�T�CC���� �C �6!�%��C����� � X)�C �Please wait|�� �!� �T �a�� ���Request�#�T�CC���� �C �61�%�!�C�� ����$"� )�C �Please wait|�� �!� �T �a�� �� �Check dzEasy1+�R,: �Checking installation of Dynazip �T �a�%C�Exist#� (�%C�DynaWrap#� v�C�WARNING�SorryC  �Unable to �� ��.C *�Dynazip compression tool is not installed.$� �T �-�$�[�C?7���R � �� �Disk in drive�%C� l �T��� �T���BC��%�� ���Make workspaceJ�%CC�ҡ+�T�C]CC���uziptemp��6�%�T�CC���uziptemp��6��%� �C��\&� t �%�#�C�CONTACT �Unable to create working folder �C C ;�This folder may already exist: if this is due to an earlierC 5�failure to complete a backup just remove this folder.C C  �Otherwise...$��pE�C �Unable to create working folder �� � cancelled@"���F�%� �+C��\&��T�C��'����T���\�T�C��\\�\(�%C��a&��C��temp\a&�  �T �- �T �-�C��temp\*.*- �(��C��*.*- �(��[�C333333?)��[�C?7�T � �� � �% � G�C"�Unable to clear working directory �� � cancelled@"���BC�C"�Unable to create working directory� � cancelled@"��� � ���Clear workspacem �%C� i �T �- �T �-�%C� Z �C��temp\*.*- �(��C��*.*- �(� �C�Deltree��temp\*��[�C333333?)��[�C?7�CC��temp�\,�+��CC���\,�+�� �T �a� � ���Clear old roots �T �a�C������-�� ���Clear previousr �T �a�%C��0n >�T�CC��archive�import�export ��an ��a 6�%C�There is an existing � � file called ��.C  �This maybe ��� made earlier today.C C #�Do you wish to delete this earlier ��?��$"� ����[�C?7�j G�C �Existing �� file on floppy disk.� � cancelled@"� �T �-��� �� �Get previous �T �a�%C��0 ���(���[�C?7�/� ���Copy specific zip to workspace �%C��0 �T�����(���%C��0v �T�� �T �a� B�C�Unable to copy �� file �� � cancelled@"��� H�C �There is no � � file for ��.� � cancelled@"��-� ���Copy latest zip to workspace�T�C.��� �T����%��H �C.��T�C��.����(���[�C?7�%C��0 �T�� �T �a�DB�C�Unable to copy �� file �� � cancelled@"���H�C �There is no � � file for ��.� � cancelled@"��� �� �Archive name �T���T�C��/� �B�� ���Create archive �T0����% � �C� 4 �T����I �T����% � �C� t �T��� �T����% � �C�  �T���� �T����% � �C� �T��*.*�  �T���c�%C�Zip��CC����temp\*.*��6��CC������6�*.*��0���#��[�C?7 �T �a�^�C�Unable to create archive:C 0�C � � incomplete.� � cancelled@"��� �� �Pick backupE*�BC����������������1�� �� �Get comment �T0���%�BC�Get�Comment����#�� �� �Unzip archivej �T0���)�T�C�Get�Comment����#� �T���[�C?7 �T �a�% ��C� *�%�� &�%C�Archive file has wrong titleC C  �Required:C �C C �Actual (plus rest of comment):C �C C �Continue anyway?� -a2��C �Are you sure?� -a2� �" �T �-���/�% � �C� �C�tvParm2b�C j �T���� �T��� �% �fe�%C�Unzip �Extracting �� from �� file �����temp\���*.*0�#�� �T �a�bZ�C�Unable to extract files from �� file �C 0�� � cancelled@"���� ���Check OK �%� �T �a� �%��F�C �Files from �� do not match �� � cancelled@"��� � ���Restore archive�%C� �C� R�BC����3��;�C�Directory not specified.� � incomplete.@"��B-�&� ���Copy archive to media�T�C��BC��4�� �� �Copy archive/�T�C��%C��0�%C��a&�q�%C��0s�%C�File ��� already exists.C  �Overwrite?C �(No to cancel ��)��$"������B-�����(���%C��0 �T �a�mJ�C �Copying of �� file �� failed.� � cancelled@"���^�C+�Unable to create destination directory for �� file �� � cancelled@"���+H�C �There is no � � file for ��.� � cancelled@"��'� ���Done, remove and labelu �Hc� �7�T�C $�Please remove and label floppy disk.� �?�T�C ,�If removable media, please remove and label.�2 �T����V�C�� of � � is complete.C  �File name is C��@�� @"� �T �a� ���Done;�C�� of � � is complete.C �� @"� � ���Complete�� :U�C�� of � � is complete.C �Please remove floppy disk.� @"�� ���Complete1�C�� of � � is complete.� @"� � ���Dynazip manager �5���2+�C�WARNING�Invalid option: ��$�� �B ��U6��TCOPTION�TVPARM1�TVPARM2�TVPARM3�TVPARM4�TVPARM5�TVPARM6�TVPARM7�TVPARM8�_REFOX_�LNPARMS �LBSUCCESS1 �LBSUCCESS2�LBRETURN�LNFILES �LCARCHIVE �LCCOMMENT�LCTEMP �LCOPTIONS �LCEXCLUDE �LCINCLUDE�PBUZIP �PCUZIPDIR �PCUZIPTITL �PCUZIPFUNC �PCUZIPNAME �PCUZIPARCH �PCUZIPROOT �PCUZIPCMNT �PCUZIPDRVE �PCUZIPPATH �PNUZIPMED�UZIPQ�PWAIT�MSGBOXW�DZEASY�APPERROR �DISKQDRIVE�ISDIRMEN�INCSTRNG�DELFILES�PAUSE�DIRLIST�RMDIRMEN�TRIMCHAR �CLEARROOTS �LAUZIPBONA �UZIPARCHNM �LCERRORTEXT�PICKZIP�APPASK �DORESTORE �COPYTOMEDIA �DZMANAGER5 �4 ����5 � � � �T �-�5����T�CCC�C����T�CC�=�T�CC��=-�T �C�Size directory�������/�T �C�Size directory� �������0�% �C�� � � � �C�� �  �C �'�C �Delete treeC����*.* ��C������? �"�C �Copy tree� ��C� �'�C �Delete tree� �����*.* ��Ba�'w�C%�Insufficient space on database drive.C  �Existing �� has been left intact.� � cancelled@ ���B-�U� �TCRESTORE�TCDESTIN �NSIZELOCAL �NSIZEFLOP �BRESTORED �LCDESTPATH �LCDESTDRIVE �LCRESTDRIVE�DISKPROP�DISKSPCE�CLSDATA�DIRLIST�PAUSE�MSGBOXW �PCUZIPTITL �PCUZIPFUNC��4���5� �5��2�T�%�$0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ�T� �123456789ABC �T���(�T��C�CCC$i%G\�T��C�CC$H\�T��CCCC$%8�0�T���.ZIP �B��U��TCROOT�LCA�LCYEARS�LCMONTHS�4���5��5�������5��5 � �5 � ��T �CCC �C ����T �CC �=�T�C��=+�T�C�Size directory� �� ��� ��T�C ���� �T�� �T����(�Q�%C�� �C�f,�T�C�� ��M�T��C�� ��� �Hb� �C���� |� �� �C����  �C � �T�� �T����(�9�%�C���� �!�5�T���T��C�� ����T � �HZ� ����  T �C/�There is insufficient space on the floppy disk.C �However, there are C���� existing backup files.C 0�Deleting the oldest file will make enough space.C C  �Do you wish to delete this file?�DELETE OLD BACKUP FILE$�� ����� T �C/�There is insufficient space on the floppy disk.C �However, there are C���� existing backup files.C  �Deleting the C���%� oldest files will make enough space.C C "�Do you wish to delete these files?�DELETE OLD BACKUP FILES$���% ���(����C�� �����%�C���� L������� ����Ba�R�C"�Insufficient space on floppy disk.�� not saved to floppy disk@��B-��U� �TCNEWPATH�LCDRIVE �LNSIZELOCAL �LNSIZEFLOP�LNFILES�LNI�LNREPLY �LNSIZESAME�LNDELETE �LAUZIPBONA �LCZIPPATH �LCZIPDRIVE �PCUZIPDIR�DISKPROP �PCUZIPROOT �PCUZIPARCH�DISKSPCE�NFILES�NREPLY�MSGBOXW�ASI�FILECOPY �PCUZIPFUNC�4���� �5�� �5���%C�A� �T����X��T�C�f�"�T�C�����*.zip�%��� �C���(���T�C����%����.�������Ba�U��TCROOT�TCPATH�TCEXCEPT�LCEXCEPT�LCFILE�LNF�LNI�LACLRRTS'�4����������#�5 � � � � �����5����5�����5� �T�-�%C��^�T �Q�!EMPTY( lcComment) AND ( EMPTY( tcTitle) OR 'Title:' + tcTitle + ';' $ lcComment)�� �T ���5�T �(�Getting details of possible backup files�T � �Pick backup"�T��No backups identified�%C� 4�T�CC ����%C�  �T ����T�CC ����%C�  �T ����T�CC ����%C� 0 �T����*�C �1:wPickZip �Please wait| ���T�C�C��C� �T�� �T���%�������(��T �C���,�T �C�Get�Comment��C�� ��!�T�C� ��Comment:�;��IF &lcCriteria�T���T�C� ��Date:�;��T�C�� ��T�C� ��Time:�;��%C�5�T�CC� ���:�;�-� �� ���lcDispLine = &tcHook �"�T��C ���T�� �*�T��CC�#� ��5�T����T�������%��z�C �-1:wPickZip���� �T����(�a�T�C����%C� ]�T�������T�C���3�T���CCX�C�>�.%�T���C����T�C���-�T���C�C�>=�4%�T���C���%�T���C������C��C�8�T �C�Array �laPickZip2���Select "�-!��%C ��v �%� �T#� � �T�a�r�C�� �($� ��[�C?7�%C$� �0n �T#� � �T�a�����C �-1:wPickZip��C����@%�� �B��U&��TCPATH�TCFILES�TCTITLE �TCKEYWORD �TCCRITERIA�TCINFO�TCHOOK�TBNOCOPY�TBQUIET �LCCOMMENT�LCFILE �LCCRITERIA�LCWAIT�LCPICK�LCNONE �LCUSERCMNT�LCTEMP�LCDATE�LCTIME �LCDISPLINE�LNZIPS�LNI�LNRRW �LNUSERCMNT�LBRETURN�ITEM�PWAIT �LAPICKZIP �LAPICKZIP2�DZEASY �PCUZIPTITL�FILLING�DSTODATE�PICKLIST �PCUZIPNAME �PCUZIPARCH �PCUZIPDIR�MSGBOXW,�4���5��5�����T�C���T���T���T�� �T�- �T�� �H� � �Y�%C �Please place �� disk in drive ���.C �Ready?� �!� �T�a�+� �C��� � ~Z�%C �Please place �� disk in drive ���.C �Ready?� �!� z �T�-��� � � �T�a � �  �T�a�R,:�Checking drive�+� �C��� � ��R �%C2�Either there is no media or no network connection.C &�Please place removable media in drive ���,C �or cancel the � � and arrange network connection.C �Continue with ��?� �!�  �T�-��R,:�Checking drive��R �2 �T�-� �B��U ��TCDRIVE �LNBAKTYPE�LBFLOPPY�LBHARD�LBREMOVE �LBCONTINUE �PNUZIPMED�MSGBOXW �PCUZIPNAME �PCUZIPFUNC�ISDISKIN��4�����5����5����5 � �T �- �T��� �T�� �T��� �uzipq.spr �T�� �B ��U ��TCTITLE�TCTEXT�TCPATH �LCUZTITLE�LCUZTEXT�LCUZPATH�JCUZYES�JCUZNO �JCUZFOLDER �LBUZRETURN�UZIPQ�SPR��4�� �H��� ���Yes8� �T�a�� ���NoP��� ���Folder����C����2�:�C�Warning#�Unexpected exit from uzipq dialogue����U��TCOBJECT �LBUZRETURN �UTLBAKPATH�GETBKPTH�LCUZPATH�APPERROR�"�T���C:\temp2\D401001F.ZIP�T� �c:\temp1\.�CCP CK C C CC� Q��!�T�C�shell.applicationN����������������U��CFILEZIP�CSOURCE�O�OFILE �NAMESPACE�ITEMS�COPYHERE�!�T���C:\temp\D401001F.ZIP�T��c:\temp\!�T�C�shell.applicationN����������������U��CFILEZIP �CDESTINATION�O�OFILE �NAMESPACE�ITEMS�COPYHERE �DoRestoreC���� �UzipArchNm' ���� �CopyToMedia<!���� �ClearRoots'�����PickZip")���� �DiskqDriveK2�����Uzipq5�����vUzipq6�����XPZip�8�����XPUnzip8����rar���q���Qq��q�������������q�qq��3�A�1�A��qc��A�1A�A�Q��A����!�QA���QA���q!A�A�!��A�QA�1A�qA��1A�A���A�QA�1aB��A��a�1 �A�1�q�A�A��1A�1A�1�1���!A��A���QA�11���!A��A��!�����A����A����A���A�5A�1��A��Q��B�1�! ��A�H�A����A��R��A�A������bA�B�!�q�A�a�1113��q�A�A�1��A��A��A�q�q��A�b�QR��A��5��Q��QQ�sR#qt��sA�q�6�q�q��!�Q�5�q�q�q�q��Q-��qQ�A�A�����qB��A�A��A�1qqA�A�A��1q��"q�A�5��������A�"�qQA�A��A�A�q�7�q1�1q�����A�Q!�A��A��A�A���5rQa!�S�A�!A�A�C�1�qQqQ1RQQQA�A�rq������A�11��A�A�A��RA��6�q�q�1������A�A�A�����Q��A�A�Q���A��@1����q�������4�q��A�Q�1Q�qq��Q��Q�A�7�!aA�5�QA�1�����������������.��}8��A����C��A��C����O��C��kQ������Q��>T��B����RT��d��`����d��_m����%��qm��o����1��'o��5q��/��A��Gq��ir��F��I��}r��Js��R������%�����������1��1�����PZ4���4 �� � ���T� ���PeB�� �T�Ct�5 �� � ��5 � � � ��5 ��T ���% � ��T ������T �C ��!�%C � � �����< ��B-��% � �T ����%C ��C � ?�R,5�ERROR Cannot overwrite files, press space to continue�< ��B-���%C� �a � .�R,�ERROR Cannot create directory ��< ��B-��T �C �� �%�-�T �C�SAFETY�OFF ��� �(C �&�R,: �Copying file C� � ��T � �C� � ��T � �C� � �� �( �� �%��C�SAFETY� � �� �C��< ��R �Ba�U��CFILES�CDIRFROM�CDIRTO �TBOVERWRITE�_REFOX_�LNPARMS�NI �CFILEFROM�CFILETO �NPARAMETER �LCSETSAFETY �ACOPYFILES�ISDIRMEN�SETSET�FLUSHXar��Vq��1��AA�q�q�A�4�q�q�A��aq�q�A�AA��A�aaA��qA��q�Q�q�1�������������������%��� E��H�� N��u��"I��H,��+���G~( �wwIPStuff�G+(�wwUTILS�U� �WWIPSTUFF�WWUTILS�T���C�wwSocketN�T����a�T��������T��������T��������T�����%C����� ��� ��C� ��� ��B-��T �C� ��%C ���B-�,�T �C�USER ���C C ���% ��+Q'�C�Login failed: C �\�� ��B-�,�T �C�PASS ���C C ���% ��+'�C�Login failed: C �\�� ��B-�(�%�has ��� message � )�T���CC� ��has � message�g�c$�T �C�STATC C ��!�T���CC� ��OK � �g��%�������������Ba�U��THIS�OIP �LSTRIPNULLS �LLOGSESSION �NBUFFERSIZE�NTIMEOUT�LOIP�CONNECT �CMAILSERVER�NPORT�SETERROR �CERRORMSG�LCRESULT�RECEIVE �SENDRECEIVE �CUSERNAME �CPASSWORD �NMESSAGECOUNT�EXTRACT �AMESSAGES� �������� �T����(����T�C�����%C� ��� ��C��� �� �%���C��� ��� �B���U ��LLNOPARSEATTACHMENTS�LLDELETEMESSAGES�X�LOMSG�LNMSGS�THIS �NMESSAGECOUNT�LOPOP �GETMESSAGE�PARSEMULTIPARTMESSAGE �DELETEMESSAGE�������.�T�C�RETR C��_C C ����%��+r��CC�\���B��%C��#�C �Timed out.������B� �T��B�+CC C �.C � �C� .C � �T�C�.C �� � �%C������ q*�C�Timed out getting messages���B��T�����T�C��� ��T� �C� �>�T� ���T����� �B��U� �LNMESSAGE�LCRESULT �LCMESSAGE�LOMSG�THIS�OIP �SENDRECEIVE�SETERROR�NERROR�WAITFOR�PARSEMESSAGEHEADER�NSIZE�CBODY �CFULLTEXT �AMESSAGES���3�T�C�TOP C��_� 1C C ����%��+h��CC�\���B��%C��"�C �Timed out������B� �T��#�%CC C �.� h0�T�CC C �.C C ����%����S0�C�Timed out getting message C��_���!��T����.�T�C�LIST C��_C C ���&�T �CC��+OK C��_� ��g�T �C��� ��T � � ��T� ��� � �B ��U� �LNMESSAGE�LCRESULT�THIS�OIP �SENDRECEIVE�SETERROR�NERROR �LCMESSAGE�WAITFOR�LNSIZE�LOMSG�PARSEMESSAGEHEADER�NSIZE �AMESSAGES����������T�C��Y�T��C���C C C C C C �.C C � .C C  �&�T�C����From: C C  ��T�C�<��T�C�(� �H�� ��a�T� �C���<�> ��%�B"�T� �CC��=�"���]�T� �� ��� ���T� �C���(�) ��%�$�T� �CCC��=�"����T� �C���2�T� �C��"���T� �� ���%C� �?�T� �� ��(�T� �CC����To:C C  �!�T� �C� ��<>()[]��-�T� �CC����Subject:C C  ��T��C��>;�T��CCC��� �Content-Type:C C  ��;���T����H�T��CCC����Content-Transfer-Encoding:C C  ��;��&�T��C��� �boundary="�" �)�T��C����Date: C C  ��T�C� -���%���T��C���\��T���� �B��U� �LCMESSAGE�LNAT�LOMSG�LNPARENS�LCFROM �LNBRACKETS�THIS�CREATEMESSAGEOBJECT�CBODY�EXTRACT �CFROMEMAIL �CFROMNAME�CTO�CSUBJECT�NSIZE �CCONTENTTYPE�CGLOBALCONTENTTYPE �CENCODING�CMULTIPARTBOUNDARY�CDATE �CFULLTEXT��� ��� ���T�C���������%��R��B� �T����(�/�%C���C C  �Content-Type:�T�C � ��T �C����%C �R�--��T �C �C �>\��%C ��.��T��4�T� �CC� ��Content-Type: C ��;��:�T��CC� ��Content-Transfer-Encoding: C �@&�T��C� � �filename="�" �4�T��C� �C C C C �*#*a �)�%� ��multipart/alternativey#�T�C� � �boundary="�" � ���T�C�������T����(�q�T�C � ��T �C����%C �R�--�T �C �C �>\��%C ��.��T��4�T� �CC� ��Content-Type: C ��;��:�T��CC� ��Content-Transfer-Encoding: C �@&�T��C� � �filename="�" �4�T��C� �C C C C �*#*a ��C�� ���T��C��>�%�?������T������m�T������T�� �� ����.��C�� ���T��C��>�%�������T�������T������T�� �� �����T�����%���� T�T�����2�%���������quoted-printable �T���C����=20%�T���C����=C C �T���C����=C �T���C����=3D�=��U��LOMSG�X�LNPARTS�LAPARTS �APARSESTRING�CBODY�CMULTIPARTBOUNDARY �LNGOTPARTS �LOATTACHMENT�THIS�CREATEATTACHMENTOBJECT�LCPART �CCONTENTTYPE�EXTRACT �CENCODING �CFILENAME �LCALTBOUNDARY �LAALTPARTS �LNALTPARTS�Y�DECODEMESSAGEPART�NSIZE �AATTACHMENTS �NATTACHMENTS���� �H��� ����base64G��T���C���$� ����quoted-printable��T���C����=20%�T���C����=C C �T���C����=C �T���C����=3D�=��U� �LOATTACHMENT �CENCODING�CBODY�����%C����B-�.�T�C�DELE C��_C C ����%��+}��CC�\���B-��U� �LNMESSAGE�LCRESULT�THIS�OIP �SENDRECEIVE�SETERRORM��%C��� F�#�C�QUITC C �����C������U��THIS�OIP �SENDRECEIVE�CLOSE�T��C�RelationN�C�cSubject������C�cBody������C �cFromName������C �cFromEmail������C�cTo������C�nSize������C �cContentType�����%�C�cGlobalContentType������C �cEncoding�����%�C�cMultiPartBoundary������C �cFullText������C�cDate������C �nAttachments����"�C�aAttachments(1)����� �B���U��LOMSG �ADDPROPERTY�����T��C�RelationN�C �cFilename������C�nSize�����C�cBody������C �cContentType������C �cEncoding������C �cAltBoundary����� �B���U� �LOATTACHMENT �ADDPROPERTY� �����%C�'� �T����%C��h��T��-�T�����T������T��a�T�����T�����U��LCERROR�LNERROR�THIS�LERROR �CERRORMSG�NERROR� �C����U��THIS�QUITH�����%C�� -��T�������T�����B�U��LNSIZE�THIS�OIP �NBUFFERSIZEH�����%C�� -��T�������T�����B�U� �LNTIMEOUT�THIS�OIP�NTIMEOUT��R,:*�Welcome to West Wind Internet Protocols...C #�This is a shareware copy of wwPOP3.C C �Please register your copy.�U��^���������5��T�C �txtUserName���T�C �txtPassword���T�C �txtServer���T�C�MsgId� ��T �C�Action� �!�C �WESTWINDUSERa�� ��T��� ��%C� �T�C �MailUsername� ��7 �C �MailUserName������%C�j �T�C �MailPassword� �� �C �MailPassword������%C��T�C �MailServer� ���C �MailServer������%C��C�  �C���B��% ��Logout �C��d�C�Mail Client Logout complete6�You're no longer logged into the remote mail client...���B�%�% ��Write � ��Send �C���B��T�C�wwPop3N�T����T����T����T��-�%C�� 5�C�Couldn't connect to mail server������B��%C��%���H�h �TMessages��M ��CP!��M"��C#��M��(��K�T$�C���%�)INSERT INTO TMessages(Date,From,Subject,Size,Action) VALUES (loMsg.cDate,loMsg.cFromName, loMsg.cSubject, TRANS(loMsg.nSize/1000,"999,999,999kb"), [<a href="WebMail.wwd?MsgID=] + TRANSFORM(x) + [">View</a> | ] + [<a href="WebMail.wwd?MsgID=] + TRANSFORM(x) + [&Action=Delete">Delete</a>] ) ��T&�C �wwShowCursorN�T&�'�a�T&�(� �C&�)��T*�C&�+��H�T*�;�<p><center><h3>No Messages in your mailbox</h3></center><p>�-�C �Mailbox for: �� at �,�-�|�Ch� <a href="webmail.wwd?action=Write">New Message</a> | <a href="webmail.wwd?action=Logout">Log out</a><p>*�,�.��D�% ��Delete�CC�g�/��C �WebMail.wwd,�0��B��T$�CC�g�1��%C$�mL�C�Invalid Message*�This message number is no longer available���B��C�$��2��% ��Reply�C�$����B��% ��Download �T3�CC �Attachment� �g�%3�� �$�4�3�  �T5�C�3�$�6� �T7�C �wwHTTPHeader�,�N �C7�8�&�C�Content-lengthC5�:�_7�9�7�C �Content-type�application/octet-stream7�9�B�C�Content-disposition�attachment; filename=5�;�7�9� �C7�<��C5�=�,�.��B����($�4� 9�%C��$�6�>� �text/html�CC��$�6�;�  �T$�=�C��$�6�=��T$�>� �text/html�!�� �T?�����($�4� �%CC��$�6�;�  �lcAttachments = lcAttachments + [<a href="WebMail.wwd?MsgId=] + lcID + [&Attachment=] + TRANSFORM(x) + [&Action=Download">] + TRIM(loMsg.aAttachments[x].cFileName ) + [</a> | ] ���C$�@�,�-�lcText = [<a href="webmail.wwd?action=Reply&msgid=] +lcID + [">Reply</a> | ] + [<a href="webmail.wwd?action=Delete&MsgId=] + lcID + [">Delete and return to list</a> | ] + [<a href="webmail.wwd">Return to list</a><br>] + [<table width="95%"><tr><td><br>] + [<table bgcolor="LightGrey" width="95%">] + CHR(13)+CHR(10) + [<tr><td align="right" width="75"> From:</td><td><a href="mailto:] + loMsg.cFromEmail + [&Subject=] + "Re: " + loMsg.cSubject + [">] + loMsg.cFromName + [</a></td></tr>] + CHR(13)+CHR(10) + [<tr><td align="right" width="75"> Date:</td><td>] + loMsg.cDate + [</td></tr>] + CHR(13)+CHR(10) + [</table><p>] + CHR(13)+CHR(10) + IIF(loMsg.cContentType="text/html",loMsg.cBody,DisplayMemo(loMsg.cBody) ) + [</td></tr></table>] �C�A�,�.��%C?� )4�C�<hr><b>Attachments:</b> ?��<hr>,�.���C�C�,�B��B��C�C�,�B��UD� �LOPROCESS �LCUSERNAME �LCPASSWORD �LCMAILSERVER�X�SESSION�REQUEST�FORM�LCID �QUERYSTRING�LCACTION �INITSESSION�OSESSION �GETSESSIONVAR �SETSESSIONVAR�THIS �LOGINFORM �DELETESESSION�PROCESS �STANDARDPAGE �MAILWRITEFORM�LOPOP �CMAILSERVER �CUSERNAME �CPASSWORD �LLOGSESSION�CONNECT�ERRORMSG �CERRORMSG �NMESSAGECOUNT �TMESSAGES�DATE�FROM�SUBJECT�SIZE�ACTION�LOMSG�GETMESSAGEHEADER�LOSC�LALTERNATEROWS�NPAGE_ITEMSPERPAGE �SHOWCURSOR�LCOUTPUT �GETOUTPUT�RESPONSE �HTMLHEADER�WRITE �DELETEMESSAGE�REDIRECT �GETMESSAGE�PARSEMULTIPARTMESSAGE �LNATTACHMENT �NATTACHMENTS�LOATTACH �AATTACHMENTS�LOHEADER �SETPROTOCOL �ADDHEADER�NSIZE �CFILENAME�COMPLETEHEADER�CBODY �CCONTENTTYPE �LCATTACHMENTS�CSUBJECT�LCTEXT �HTMLFOOTER �CPAGEFOOT������%C��Q��T�C�wwPop3N�T��C�� �T������%CC���=@�re:��T����Re: �����T�����!�C �WESTWINDUSERa���T�� ��T �C�FromName� ��T �C �FromEmail� � �%CC �btnSubmit �� *�T �C �txtFromName �� �T �C �txtFromEmail ���C�FromName� ����C �FromEmail� ����T�C�txtTo ��!�T���C �txtSubject ��!�T���C �txtMessage ���T�C �wwIPStuffN!�T��C �MailServer� ��T�� ��T�� ��T����T������T����� �C���C �Mail sentT�The message has been sent to the mail server.<p>Returning now to the message list... �webmail.wwd���B� �M(�` ��<HTML>�� <HEAD>���R�L� <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=ISO-8859-1">*�$� <TITLE>New Email Message   PJ
A;
^X  @:   "    
@: (" New Message 
RL  71 ("   71 ("   71 ("   71 ("   A;  
c] Your Name:  z 
d^ Your Email:  | 
\V To:  sm 
a[ Subject:  | 
| 




}w << IIF(loMsg.cContentType = "text/html","Orignal Message Text:
" + loMsg.cBody,DisplayMemo(loMsg.cBody)) >>  CCULOMSGLOPOPCREATEMESSAGEOBJECTLCTOCSUBJECT CFROMEMAILPROCESS INITSESSIONSESSIONOSESSION LCFROMNAME GETSESSIONVAR LCFROMEMAILREQUESTFORM SETSESSIONVARCBODYLOIP CMAILSERVER CSENDEREMAIL CSENDERNAME CRECIPIENTCMESSAGE SENDMAILASYNC STANDARDPAGELCHTMLRESPONSECONTENTTYPEHEADERWRITE M(=7
}w  <6    0*    3-   
Username:JD
Password:NH
Mail Server:HB
SM

 


&CLogin for Web MailBULCTEXTPROCESS STANDARDPAGEConnecth GetMessages GetMessageGetMessageHeaderParseMessageHeader( ParseMultiPartMessage'DecodeMessagePartL DeleteMessage`QuitCreateMessageObjectCreateAttachmentObject_SetErrorODestroy+nBufferSize_AssignKnTimeout_AssignINIT#Render MailWriteForm/ LoginFormXAG T T Tn T T T- T T- T T  T  T              U OIP CMAILSERVERNPORT CUSERNAME CPASSWORD LLOGSESSIONNERRORLERROR CERRORMSGNTIMEOUT NBUFFERSIZE NMESSAGECOUNT AMESSAGESG TT webmail.wwd?   U CPAGEFOOTCBASEURLwwPOP3RelationF wwPop3ViewerRelationHA41aaa1qAqA!qqA!qqABAB2Ar?QAAA<q!QqA1qA!qAASRb;q3!QqA!qA1qAAAaRb;qqc11!1AA!A1A"1AQ1aqA=qBAq"AAABaB2r"AAABaBQA11AAAARA11AAABAA#QA=qEQA1qqA"QqA521A<aQQ!<q<AA96q11AA2q11AA31q1qAAAAArAAARAAc#QAABQAAt!AAcAAbAAQaq!1AAAAAA AA3/AA2AA4=qqaAA11"AAa!q!aaaAqQA!a!q1qA!q1q!!qQAQ Qa1aA>!A1!A1!1A1A1AaB5pp8 1 l(6Pj=%3&=4t5*8C:1;i;;=6?%@AC^CE['EEs)EbFz0dFF7GG:(Kcdvj(Tx{AGMlJH{%g MCA94T PeB5% QTCCQG8 %MBCC 80:CCC< 8 (TCC\C T(TCC < BU TCSTRINGTBNUMBERTBLOWERTBUPPER_REFOX_LCSTRINGLNMLNIAVWCINCAVWC4 H  C: TC%C9T0%C/CFATALRan out of available codes TC+CC @7TC%CZTA%C/CFATALRan out of available codes TC+CC `%TC%CzTa%tC/CFATALRan out of available codes2TC/+CC:@CC[` "TC%CzT0%qC/CFATALRan out of available codesBaUTNPOSTBNUMBERAVWCINCAVWCAPPERRORTBUPPERTBLOWERIncaVwch8aqAqAq2qa1AAAa1AAAa1AAAa1AAAq1%'hY4e 4T PeB TCt 55  5 5 %  T- T Ta T -T CERROR%C BTC TCCC\=f1 lbError = .T. ( %r)R,:Deleting file C  %CC  0C  %CC  0 T-ON ERROR &lcOnError < R BU TCFILESTBINFORMTBDEL_REFOX_LNPARMSLBINFORM LCEXCLUDELCPATHLNFILESLNI A_DELFILES LCONERRORLBERROR`ar1qqAQAQRqAqAABqqQ1%T2U<+4T PeB5 %}TC+CRyTCCC>=`TC`+CRTCCC>=` BUTCSTRINGTCCHAR TLALLTRIM_REFOX_LCSTRING aqqAqAA1%*  m( 4 T PeB5    T C: T C\ T   %   BBC  \U CFILENAME_REFOX_NCOLONNSLASHNCHARS@aqqq1A1% m( 4 T PeB5   T C:  HX t B BC =2 BU CFILENAME_REFOX_NCOLONCDRIVE@aQq11A1%51Z44    T PeB TCt!5     5 5 5 T %  "T CCCC]:\=T  "T CCC :\=T  :\ %  GT  q"T CCC :\=T  T %C T CC]=%CTCC]= H! Size directoryT CC]gT %C  T C *.* ( -T  CC   w T   Size filesT CC]gT T C  ( n-T  CC   w T  2+CFATALInvalid option:  B UCOPTIONCDIRCDISK CDESTDISK_REFOX_LNPARMSNPARMSNSECTORNSIZENFILESNIVRETURNCPATH LCDISKFROMLCDISKTOISDIRMEN ADISKPROP1APPERRORay2!!A1!AAAAAqAAArAA1%y1?% 4 T PeB5   55 T-T  ɚ;TCERROR1 lbError = .T.T C =T CDEFAULTv G(T C( G(ON ERROR &lcOnError %T  ɚ; B UCDRIVE_REFOX_ SETDEFAULT NDISKSPACE LCONERRORLBERRORPaQrq!QQcq!A1%>8~'3k1Una3%Xf,3!4     T PeB TCt 5 T % C  B%)T CCC TC DZ1%   C R.00 T C C >=%  .  +C R0lT C C >=%C R.T C C >=T CCC 8Z B UTNNUMBER TNDECIMALTBBLANK0 TBNO0TAILTBPOUND_REFOX_LNPARMSLCRETURNarAAAAAqA1%($M;6%4 55%CE B T%  TCA+ TC  TTCTCTC>BC\U TCSEPTCLISTTNITEMTBGAPLCLISTLCSTRINGLNSEP1LNSEP2LNSEPLENNTAMichael Napier, 32 Cransley Avenue, Wollaton, Nottingham, NG8 2QYC, C, a ULCSTRING LISTITEMS4 5TC( %vCCCU TCSEPTCSTRING TBSUBSTRINGTCSUBSEPLNITEMSLNIITEMS LISTITEMSITEMTestItem ListItems43ARAAQQ11q41aqAA1&/%IS[Pz5 455TCC=fTC]TC:T   T- %%CCheck >C 1:wIsDiskInChecking drive C= exists Ta%C !%aAbB%Cl% hC -1:wIsDiskInCRemoveB-%C %C% C -1:wIsDiskInCRemoveB-%C ;%C% C -1:wIsDiskInCRemoveB-%C% C -1:wIsDiskInCAddBaU TCPATHTBQUIETLCDRIVE LBDEFAULTLBCLBPWAIT LBISPWAITISMAPPEDPWAITDOCHECK2CLUSTERw45 5 5 T- T-"TC= :\a~b~c~.menTTCERROR1 lbError = .T.TC0% TCON ERROR &lcOnError !%  Z% C1 lbError = .T. ON ERROR &lcOnError BaiB-B-UTCDRIVELNHLBFILELBERROR LCONERRORLCFILEDoCheck2t1A21AA1Q!AAAqqa!AAAqqAAAb!AAAqqA!AAAAq4qq!QQAqAQqqqAq16F B% w = tV39 5   %CTALKvONEG2T ON_T OFFT C COMPATIBLEvGAT C READBORDERvGj %Cuzipq CCUZIPQ f UZIPQ.PJX CCUZIPQ f UZIPQ.SCX CCUZIPQ f UZIPQ.MNX CCUZIPQ f UZIPQ.PRG CCUZIPQ f UZIPQ.FRX CCUZIPQ f UZIPQ.QPR DEFINE WINDOW uzipq AT 0.000, 0.000 SIZE 12.750,89.667 TITLE "&lcUzTitle" FONT "Arial", 10 FLOAT NOCLOSE NOMINIMIZE SYSTEM COLOR RGB(,,,192,192,192) z,T PeB%CuzipqQ t,b t,n @ MS Sans Serif@*IHN -I  Buzipq@ArialAT@4 B@Arial AB@CdR@@K-R`* to folder@Arial AB?B@I 0@Arial AB?O@x P * @Arial AB5^I ?/$U,@MbX? @*HN \"ABCDEFGHIJKLMNOPQRSTUVWXYZ q TT:\Q C>'C=ABCDEFGHIJKLMNOPQRSTUVWXYZ C\: TC=T:\2CTCTC%C-TC]TC= T T BU TCBAKPATHTCDRIVE TCINIENTRY TBBYVALUE TCDEFAULT TBMAKEDIR LCBAKPATHLCDRIVE LCINIENTRY LCDEFAULT LBDEFAULTISDIRMENREADINI P_SOFTWAREP_APPINIWRITEINI1qQAFAQAQA!1!1A!A1%~2IZ4Y 4T PeB TCt% W T5TCCf%CDEFAULTTC]C]TC G(TC]C] BTCv%%C5SET &tcSet &tcValue %CaSET &tcSet &tcKey SET &tcSet &tcKey (tcValue)  BU TCSETTCVALUETCKEY_REFOX_LNPARMSLCSETLCRETURNLCPATHVALIDDIR 4%C C 0 B%%CC C b B55 Ta T+C TCC\=1%CC>C\:   T T-! %/ B%CK B Ta T+C TCC\R=%C T T-! % BBC]C]UTCFOLDER TCALTERNATEISDIRXLCFOLDERLCFAILED LCALTFAILLBFOLDER4 BCUTCFOLDERValidDirIsDirxZarAdaaAqQAAA5ASAqAAAAAABAAAA#4q3 3F a p%nh@d3 0 4"BCCC6UTCSEPTCLIST!1%'`n( @ O4     T PeBO5 !"#$%&+%C_WINDOWSbL 5 3  B-%  2.R,:#Negative row provided for this box.B-%  1R,:&Negative column provided for this box.B-% 0R,:%Invalid height provided for this box.B-% /R,:$Invalid width provided for this box.B-(%C m.patternbNC  WT (%C m.pentypebNC  T %  C)R,:Box width too long for window.B-% C+)R,:Box height too big for window.B-T  %C m.curpenwbNlT %C T C T%Cm.sunrbNT %Cm.sungbNT %Cm.sunbbN%T %Cm.shaderbNTT %Cm.shadegbNT %Cm.shadebbNT %  tT  T  T  T  T  T  T  T  T  T  c%Cm.facerbNT %Cm.facegbNT %Cm.facebbNT N%C m.outlinerbNC m.outlinegbN C m.outlinebbN x T -J(     T a%C m.outlinerbNT %C m.outlinegbNT %C m.outlinebbNT T CDECIMALSv G (T 'CT C '&T C '&T C '&!T C   $7T C   $C   $%   \5R,:*Pen width along horizontal axis too thick.G ( B-%   3R,:(Pen width along vertical axis too thick.G ( B-T  T  T ! ! #(C  w %T !C !  !6% #h T " !(% #C  w  T  !  T   !  T " !T !  #        B      (         D % ' {  B      (   A1DC G ( BU)BOXROWBOXCOLBOXHGTBOXWDTHBOXPENWSUNRSUNGSUNBSHADERSHADEGSHADEBFACERFACEGFACEBOUTLINEROUTLINEGOUTLINEBPATTERNPENTYPE_REFOX_CURPENWTEMPRTEMPGTEMPBOUT_ONSETDECCURFONTCURSIZECURSTYLEHCLENGTHVCLENGTHCURROWCURCOLLOOPPENPREVPENCOUNTERMCOUNTERROWCOLWOUTPUTBOXDRAW   B      (         A0DC H             B      (       A0DC            B      (            A0DC H                  B      (              A0DC BUBOXROWBOXCOLBOXWDTHCOUNTERPREVPENLOOPPENHCLENGTHSUNRSUNGSUNB TRIANGLESVCLENGTHBOXHGTSHADERSHADEGSHADEBB4  ( 7     B   (       A0DC        B   (       A0DCBU ROWCOLMCOUNTERLOOPPENVCLENGTHHCLENGTHSUNRSUNGSUNBSHADERSHADEGSHADEBBOXDRAW TRIANGLES.arB4qB4qB4qB4qBBBqBqBBbBBBBBBB4!BBBBBBBDqqqrRqB2qBR3BsBC BB3  B3BC2l,336%x c,3 C'4     TCt %r*BC   T  PeB5    5    T T  T  H 5R,:Too few parameters B nT T \windows\win T \windows\winT CCiniΐ% 1 %T CC  %CC T C C  B UCSECTIONCKEYWORDCDEFAULTCINIFILETBISKEYTBDELETE TBWRITEINILNPARMS WRITEINIX_REFOX_NPARMSNHANDLECVALUE CBUFFERINSECTIONKEYWORDSUBJECT4    TCt!5     5   T T T  T - T -T  H#  R,:Too few parametersB-  #T  \windows\win%C 0WT CC inifB-% T C % T C %  )T C  C  C  B UCSECTIONCKEYWORDCINIFILELNPARMSNPARMSNHANDLE CBUFFERIN CBUFFEROUTBRETURNBSECTIONBKEYWORDNPOINTERSECTIONKEYWORDFINSERT#4     TCt5    !5     5   T T T  T - T -T  HL   R,:Too few parametersB- LT  \windows\win H] C 0T CC ini B-2T CC ini% T C% T C H  A T -   ,T C  C   9T C  C  =  2T C    = 2$%C [ ]%%C  = | T a C  B UCSECTIONCKEYWORDCVALUECINIFILE TBSKPNOKEYTBDELETELNPARMSNPARMSNHANDLE CBUFFERIN CBUFFEROUTBRETURNBSECTIONBKEYWORDNPOINTERSECTIONKEYWORDFINSERT`+C RT C !%[ ]C NBaB-UNHANDLE CBUFFERINCSECTION5   T -+C  (T C % hT  T  T C %C  T a T -%CC `=[B-(% CC C= =$Ba% VT C  wT C B-U NPREVPOINTBBLANKNHANDLENPOINTER CBUFFERINCKEYWORD&#BCC  C= \U CBUFFERIN 4 5   T C C T C D% C C  C C  C \C  C BaUNHNPCPAIR;4    5    !5      T -T C +C T  C C C C %C  T a6%C 2 T aT ) (C C )!T C  C %C   %%C T  T %C ! T - B U NHNPOINT1NPOINT2CTEXTCBUFFERCLINEBRETURNNINBLANKOCCASION removekey writeinixSection Keyword SubjectY FEndLine FInsertq srAfA1aAAA4QrQqAqA1AAA41rQqAqA7AR"AQAAAA411qAAq41A1AqAqAAAq414QAbCEQq4Q1A"RAAQAAAA1#! 6F 5czI]q#%0 g#4    T PeB+BC   aUCSECTIONCKEYWORDCVALUECINIFILE TBSKPNOKEYTBDELETE_REFOX_READINI2a10b hNAMEC CONTENTSM  dunzip32.dll dzip32.dll  dzprog32.exe dz_ez32.dll @MZ@ !L!This program cannot be run in DOS mode. $PEL!4! 7 rJ p0  @Pp.text   `.bss .data4AB@.idata  P@.edata0\@@.rsrc@ ^@@.relocPh@BU'SVM It!u32F؋3‹ЋIu^'[]UD$ Stt7[] TtP"5T<#T3ۉ48j$(ShP'  M04 DRqh` Pj"T;t-P"P TP<#3T3UVu tBV"t7VjuFPPjjB PhQ#4juFPPjjBתPhQ#PZ}uPjVjj wP^]麫UVW}=t;E|2-uHMQE"t r 3_^]UVuEtS>tNhVtO]]EՅ~ EE5+uy3p_^[]á@PUSVW3&)t}t55l"I.uuPMhQ# MQh)Ou_^[]á@tP@j@hhP脫 @hP(hPt =d( t d(3USVW3&)tu "tjuuf=&.t3F<.uu%PMhQ# MQh)l"Ouh)h)#u "_^[]UVW3u;tV"t M V<"_^]UVW3u;t V"tUM V"_^]UESVW}tAu t:V"؅t-uWlË}j.PWM V"E}}tfGfȃuG&E_^[]4UVWh(Ct*}w(jjfiPV GL3V+E<5(;t@}w(jjgwL"P5< 5(5ê5,x=0tD}GL<uh)OuGLܣ<u< }&GL(PI,P;<_^]U8(SVWu~P"ӅtSWӅtLVu~Lu3u3F V uG0t VYF ~L@v(jjiءPj _ /v(jjh跡Pj > _^[]U SVWu Q5p"֍QPMRQP觩ƅQ}WEPWl"_^[]USVWu V"Ӆu }WӅu ht"VӅu3h VӅu3PQjjW.ut A@9uPQjjV貨.ut A@9uuVPQ5 u"VPQ _^[]USVWu >*u3V="uu׃ׅuV׃huQ* hVQ 3#E8t*t$u֋?t<*t\u<\t w(jjoVhHp"hH"G\thHhHl"S"Pj@"Eu$w(jjp蛕Pj" Yuh"u-u"w(jjp_Pj SVp"V#P3E28t."u؅u uN EF>uՅtw(jh3W 4E0\]&Ӏ;t:/u\B:utU,t$t SS!BSPSPp"P#P#8tP"&u uEE0hHPp"0u SPPQl"hLPu,uEEEEPP;@]EjEeSP EEjSPΞ EEjSP踞 EEjSP袞 EEjSP菞 EEjhPPx EEP>EE}VEFPM4PFTQRQ#hTQ7uqP"uhXPt"4uh\PjPQ ^h`P讔qP"\PQp"j\Q@Q"\PQuc;;P"؍P";4hdPt"ؓ;u4tjPQ APQ菓;,P"j\P;jPQ@ hhP!P"P"\PQu:ג;uxP"؍P";tS4tRK蝒;u>4u+hlPy؍j\P;u E9EsEEE9Eu"u"#Ew(jjh=Pj/ /_^[]U(VWu.uv(jFLjqPj/ /h(P/t'uv(jjlŎPWM FLjPf,PXjo0<t*uv(jFLjrfPW <u0FL3_^]U SVWu(NPFLMEu+v(jFLjq Pj h(\.t'v(jFLjl͍PWU Pr,Pdj{/<t*v(jjr|PW <FLmE=u2W|jP5@V Ek ; thpjjjj3uRwu8Ot/j7؅| . E0`| jS@P荏  }u=0uhtup"FL.3ۅ~9]~-0M C;|ME; |ljFL3_^[]U SVW]Cs Eu /8h(0,#Pk,P]jt-<t#s(jjruPW <=8u(~< <}}&MH;i=<t(s(jjrP5< <W3ɉM9 0tq ( <;}t%h)<7uG=<tփ=<s(jh肊Pj P E(h)<t7Et=4th)h)7=<t/s(jjrP5< <P`f&df +P3f &fff=&3f&f&fEf%f.fm ]PSRWPhxh0(# &V&N&hh)FR j/h)ufFtfFf&h0(fF Vf &RfN p"fU &fN&*&t ̀*}t=0u,32Ps(jjs袈Pj) _^[]USV3WhPi}4Ch3Vh |ftfjf &;t?5t(;|=Nth3ShNGu3_^[]UV35LEFP=jED5 |L=PtEPt,^]Urt(VvW (ft& &n r t( z|ȋ&|0uǙ+ƅ} jP5D Hh0u55D!   +Σ& t .=Lt 0u=8uug0 3u d0u =t7=tP0u=8u2u u"_^]Uhj@hufD@] áDtP耑u D3ø USVWu Edt n_=E/]dtnt2=tVE/jdVS跋 F d(jdVS蘋 3fClnCdChF (pjd3VSkf{l {d{h{n{r{v{zN 񉻊 (C~fQfC fA YfQ jffFIPhį Њ N$hQh֯躊 ڰ=ް=]dtnt2=tJE/rjdVSo F d(SjnVSP F n(4jn3VS/ {n{r{v{zF 5(C~fNfVfF fN fjf FVPhįC 螉 N$hQh֯舉 ڰ=ް=b]dt n=/E/8jdVS5 =(d{ v  fNfVfF OfNjfG WfO VFOPWQو N&W$hQRĈ *ƇjnVS蠈 =(n{ v tyfNfVfF OfNjfG WfO VFOPWQH N&W$hQR3 *ƇhVS E_^[]U=SVWt'uv(jjtbPj- - 3 048<@DHuLV@FT*2dtnt$,=$d $VlDžlPtVj/. lt ujju EУEԃtE⣄E(v t"Ӆ` }t}t ujjvO jBjhP誁 }t.}tuӃAuhP=p"ujjw =p"3E؃}@fEf%f=@ fEf%f=@0fEf% f=@4fEf%f=@fEf%f=@}|[}tU}|O|E<E@EDt|Ӆ~|(@u}| 8}th,uh[  hhh`; =8tHpt pu6th(h(hP@pHwj$^Gth(@h(hPuujjg}Pj h`  W ujjy}Pj/S h`  4tlPlPVVW+h`] lP@lPV}VW+h` w4ktlPilPVVWC+h`lPlPVVW*h`j=4t$f= u4ulPlPV]VW*h`W=4t$f= u4=ulP`lPVVW*h`~lPllPVVW)h`5}}u6ujjxzPj/ h`MuӃ}6ujjnzPj/D h` EH:8\u\tyujjonzPj/ h`^ 8u?ujh+zPj/ h`{ 8}l@u l}u4u0uhHhHG\thhHl"E4E|8E<E@}}6ujjzhyPj/ h`XlPt.lPVvh`zEH;E}KlPV?v(jj{xPj] h`&=tc}u]=8uTu7h((;u6hjjjjh`Z Et&($3fE؃P,7l3PJ $9 t 7(t#1t0tujj|wPWQ 3lQPVh` lPt?lPVh`euhW EEuKlPV{v(jj}wPj h` b=tc}u]=8uTush(d;u6hjjjjSh` E t!($3fE؃Pc539]0lQxu0C0SEjjGvhPQ#hSuPr tlP t1t 0t(uct1us;]\hujjkuPW 3lxQ Vh`bujj|:uPW 3ۉ$ 9 t 4(PDžxlPVHt,tv(hWf VWS#h`)ujjqtPj/% /_^[]4>>>????t@@AUhuj؄ :PPjhtPQ# Q1.]UVuVP%vV"0(:tP"^]UEPEP_EMPQjhKtPu#]USVWu] }}nt=]_^[];r 8 uH;s;r8 uH;s퍃;r8 uH;s퍋 ;r9 uI;s퍋A ;r9 u I;sO#G;r 9 uI;s󍏣G$;r 9 uI;sS~ "Ft^Q"u F NQ"u F N P"u F` F`MF<FP9FDtFlFOf@DfBWRHPDw O*ZhQR,w 048^bf;r 8 uH;s;r9 uI;s퍋;r9 uI;s퍋;r9 uI;s퍋I;r9 uI;s퍋MJ;r9 uJI;s퍅Y8 uHH;s퍅]8 uZH;s퍅4SDžlx"DžtttP"u Dž| |P"u E EP"u E E̍JP"u E JEꍃNVEFpN UV$EF(MN,UV0EF4MN8UVLEFTMNXUV\EfFlMfE؋Np3UȋVtMډUމEMEEE9tEEOuENMMMyt EOM3EЉE3lEEQEEEs؋MfQfWAGfQ fW jfA fGfQfWAGAPOQ+t E&O*hPQt M*0.4E2FLMډ8UމNpVtO/EUD$ SVW0hQV$P#hQoj= $jh"VרftejEjjjP$tO}ttjjh$Vׅt EP$EP$jEjjjP$uPjhV׋]SPt"tSjhVjjhVE jPhVV$_^[] Ut$u u] UD$ SVW3x95thPW$P#hQ~njjh"W $ftdjEjjjP$tN}ttjjh$W $tEP$EP$jEjjjP$uPjhW $]SPt"tSjhW $jjhW $E jPhW $W$_^[] U SVW3@f} '9G,uE98u=p"wQӍQ"\thPl"p"/ uO uW*P PhEw &V"~!G MD&8/u\VE";EV`PӃ0tVPPVVhl",=8=hPPӍPPP,G  &&TX*(P\PQPQhӋ΋G 3\'3Ή*hh*MjjPQh qUjjQRP{3QRj\PstP"tPQӅthPl"PQӍQ"Q";P"P"9t<\t AF9uPzuuhPl"P"P";xhh(x"u&;+>f= u&h@jPjj h@P&@PjjO tE0/j&P5@f 5@jjh`m=`PKw5d5( h)Q zQQh)x"E&3ibj&EP5@e 5@jjh`Nlu=`PKtuzPW}I觼h(3<t-G Pi,Pi<a=0=8ht/jhbPh# hjhPPӍPPP$PQjjHYbPh# PQjhNhPPӍPPP$PQjjI bPh# PQjhadPQ# dQ,h"\G *=LtTXflf jh;=L<,(hj$P#hPPӍPPP#PQjjF`PQ# Qjjjj V#G u,1G 1<G Pkg,P]g_^[]U3ɋ9 SV 0 ( ' @ ' T   8 H  P 0 T  h5p"h ' < HuhP芹t =tj$hP(h5e hPh'x"ud(9u l(9t/3ۉ4j$8S(h'(` h4u rh1uq,=Tt u^[]Ã=4USVWt3355u[uPf 5(f5"5,f5$f5045f&Ǿu u 3uquT蹷hjjjj؃u'Էu謷tj蔴&0u3tj@=WP_ @Pjjh fu43f9= tZhP+Pu4f f9"u%f&f9$uf= =f="@4f 3f9" tf&f9$uf f " _^[]á@Pqu%Ã=8USVWt5<5 (M;}= u =< u3!~dƙkdpd~d5 'hhp"&d&=$55&|*= t!h&(jjJP $th5`h&(jjJP $I=$|+= t"@PVh<t@PVh<_^[]U 4SV Wu u3u u3$~dƙEEkd=Fd~d='tkuhp"&h&=j(&d&=$jJP| $tOC $;$dt=t=,8PWu8PWuхt_^[]USVW3Sj Z5p"PQhQֈ]] w$fjjBYPQ?jjEYPQփ}ujjYPQ }ujjsYPQujjWYPQ# jjE5YPQuujjYPQ#jjBXPQjj XPQYjjBXPQjj XPQ*jjBXPQjj XPQjjBjXPQjjTXPQjjB;XPQjj %XPQjjB XPQjjBbjj WPQjjWPQRE2wf$fjjBWPQ&jjBjjWPQuR֋ u3 } WPQ#P# PRW} uuWSуd+t't.tDtPt:|y~Rretkkπwa]σtStNtIuFBσt8t33σt'u$ σrvu πuuAt$ WPQ#P#PQ_^[]boccc d:diddedddeeeeeeeeedUSVWuV"  VEPp"EEPhjFMPQp"EMQHj؍NEQPp"EMQ(jNUEQRp"EMQjNUEQRp"M EQiMEVQp"EEPi|G B|=8}2};,<'}PPluuSW}EP3_^[]UD$SVWM Uu}]=}333Ѹ<  _ ^ []ULVPu"t7EPQ"MUQERP"V"EM ^]U3SVWM;t_tY33uQ1 t"t.t/t:t\tB 3ҿ33t~A9u_^[]USVW39]t|E ;tuto3 tD"t?.t"/t.:t)\t$Ft!u333ۈA@8uPup"E_^[]UD$V|FPu V"u'V"PVu5"jhuָjhu"3^]U=*SVWhpP"hjje\-~\#VP3ۿp"P#G@UQhR# UEƅQRPMQuIPQp"Q#tPQ@tu GXuEPQRn t7P"Ɗ\t/u@PMQhu#E;ut Vup"E3_^[]USVWu} W":WKtPF_>u^]UV=ut9V"t-$PV"tV"ujh jjjhV"tP"hj@hV*}45lP3u| P)3^]HU=8}>EP; 8u"HU ƒ 8|3]U t(SIV t(W3}h0uP5DB  u3k f95 t  A;1f95 u hj hAQPjjm QhPt9hP脖u#h0uP5DA ~=+H0u=LtC=t(G;|5Ot$3POFu܋ ]Hff_^[]3u 3=TSVWt+0 ,P X02=0=850u @ (;~+@k=8uL0 ,P X0=8CH@:TV,Pn=0uG=8uKVTP5Q ;o=$bT2=8AT=D=H (<;|+@ @9 L|9H}G9H}. NBGHL L9 v~-NBT8T2'T5@@Pֽ3_^[UVP>%fjMQflRP"MEQP"jhjjjh@h"t'L Ph"MQQQV"V"^]UD$`VW3;8tPo95tlWot_@EWhP=#׃ MEUjQPMREVjQP"u hUR׃ MԍUQRt"u_^]USVWjDjP UʋE 1HuE 9uM] 3_^[]Ë] E8uA<;vM9Msu<8uO;u}9}v}E] E;s)Ex*AE;ωEr鍄)My_^[]ø_^[]M̍3ɍHODt  Ou3t@@xG9} w3|}@3҉EЋE}؉E;uE+EM؋EEMEE;EuE@E܃E}EE+};v]+];UvEC@+ЋE;v҃;v+C;wP) &PL &MT5Et?EM5@Mň]ċMUȋ]*M]U]EM\5KEE;EME *M|M;]wEcGEЋ09uvEUEE}+uE]f4EăEfuȸuME;v E܋Eċ]uYM;wMEt 1EEuM1EE썴@H#E;EM)EMH#E;uEE;E}t<}t6_^[]Ã}t EP._^[]ø_^[]3_^[]UD$VtpPƅu3^]USV*WutD0u+=0;rWXSP\ =X=0=00uu"+u_^[]USVW&=&5&3ɋEf E5 EM3Ƀ=f EM;]s#h&3f& ;]r݋ϋE#M3UEvk}cM3mI+;]s#h&p3f& ;]r3ҋEfEM#3QUEwM3I+؃}u)MFA*Vr3};]s#h&3f& ;]r3ҋEfEM#3fA+]ŠME;]s#h&3f& ;]r݋ϋE #M3UEvk}cM3mI+;]s#h&/3f& ;]r3ҋEfEM#3QUEwM3I+;]s#h&3f& ;]r݋3ɋEf E3#+ыMfA+]+ЊMUeE;urƹ+ȉM9MsEEE)E+E;Er'E*PE*PQB uMMEFE**Muu V3}n=35&=&&_^[]ø_^[]ø_^[]USVW&=&˃&+ىEs$h&3f& Er܋ums$h&M3f& Er܋E%;t _^[]m=u]NtVs$h&3f& Er܊EG*u W63m=tE=&_&3^&[]U칐VWp󫍽 p󫍽p}иEMEPpQh8hhh RDpMEEpPQhhxjjR~EP_^]ËEMPUQERPot _^]ËEPEP3_^]USVW&=&s#h&43f& r݋ǃEs#h&3f& r݋ǃ@Es#h&3f& r݋ǃ}}EtOEEs#h&_3f& r݋Mu}sE3ɍ=rEMEPQjjjjRtu EP_^[]ËEUE3f U3EMu9u9]v#h&3f& 9]w݋3#EEEH+ً3fAs FEuns#h&%3f& r݋σD;EItFIuE%s#h&3f& r݋σD ;EItFIuEs#h&I3f& r݋σD;ERIiEFBIuLEP)M=&&EEUPQh8hhRPtu EP_^[]áME܍EPUQEhhxjRQt&u EPEPu_^[]ËE܋MPUQERPt _^[]ËEP8EP,3_^[]ø_^[]ø_^[]ø_^[]ø_^[]USV&5&s#h&3f& r݋΋EKs#h&U3f& r݋ƃ5&&u ^[]Åu S^[]Ãu u^[]ø^[]UVW33=&=&=&=@E=&P  &u;su9}tϡ&P3_^]USVW33 (3}}EE3fhH&9}=%u4=8}f-8f#-M=8}f 8f#-t1=8}Zf-8f#-MU3% PM; 8~EfEf#)8- 3Ez$}t,EFM*@QVy3u>4}t'E&E #E+ۃFM@Ɔ*V3uEEEUE& #8E)E++}O?;wƻ@+9]s])]}t;rS*jPg 6+;rS*P*Q *G*FKu@uVB3u}h3ۃ}}qV_^[]Ð^ŵU8SEVW?8} 8f E" 3ۈ%-tD8} 8f<" CE-8%w@8Ml_^[]U %% %SVWjf3fM*jIy=8 |%} |%fU|%f#)8ȉM-=H] XX0=00uu |%=|% =H|%98} c|%fUf#|%-)8=H`=|%98} |%fUf#|%-)8tt%.B u %%H% |%|%98} |%fUf#|%-)8=H0_^[]fuу|$l$$t,t"\$+߁rSWUc +|$tE|$t^;|$wXl$(t#\$+߁rSWUD |$,tW+t$rVt$W 72l$(t+rVWUD5 |$,t]_^[UWV}u ׋M t2^_VW|$0VWt$t$t$V_^ËL$ D$SL$VD$D$WUu3\$,C t CD$D$|$C t0Ct);rŋȋ|$3+ʃ)CD$\9l$w6|$t ͋+t$+Qt$s tAtN+D$ StJL$MD$CD$cD$(]_^[ ËD$+ҀK +t$$D$+ҀK +t$$ԋD$++t$$UW}W3ъE _O8t3_UW}3AOE G8t3_UWV}3O} WMuA+Mً^󤪋^_VWt$ ;58r "~BW|VW_^VW|$ tujj;tWP"u #3WtV  Ƈ@3_^U3SEVEE E WuEE t2E @u -》E t*t.t2  EE@EEt/ t30t7@t;  EEEEE %=tYtL*=tU=tW=t5=tR=t9=tD+ ) GE"EEEEE t #EuE @t ME tE t E t$u ~ jMWuQuuu"u%B#P V! WW#u,WB"#P V  u@uWV$H@EÀE jjV u0 8VUBVa jEEPV  u1}u+WVZuV BV OjjVp uVBV !}u E t@ FBP _^[]̋T$3t:t4Bt :t'B:t"B t tt uBB+Vj t$ t$ jB j B ^Vj t$t$t$ j  ^U SVW]tVSu @EP]]E:E.EQhS#Ph|#to@=wgU u%M;PLЅum ;;E~ [")++ȃ3_^[]#L$ÃD$SVWUP8#fd|$fD$t$f+fڋL$$/ AAAƙ0ƙ0LjQ0AǙ0ÈQ0AÙ0]Q_^[ÃD$SVWUP8#L$\$|$t$$: FFF00ÈV0FÙ0LjV0FǙ0]V_^[jt$@#u#tPh3ËD$Vtt$t F:Ft$D$ȅt(8t#AF9uQPF-t+u>F3ۃ= ~ jW fxt k \;>F͋Ã-uۋ]_^[t$bVWt$ ;58r &~BW]t$VW_^ËD$S@u  FӋL$ u @uˀ@%@@T[ËD$ #ԋȁ   ʉ u u 3vt#p#] K@u-~ H= u 3u jf UVWu ;=tu' t uVuыt uVutuVuuT@tGP#t2Ƈ@P%u @@u@@GHv_^[]Vt$F t*t&vf FF^ËL$SV3WU3atrtwt3q 3ҋ55Ȁ9)D ta+t<3RtcStpTt}bcnt3t3΀@t3{@vt3ndt3\ Rt3IDt3;΀6t3.@!t3 t3@A9ht$ Rt$ и|D$ 34p HHHP]_^[SVW03j90rOC u&0VoC tV ;0v3CC CCj_^[ t= s\@`SVW=`#t#h@vSׅthjSׅt r̡|t0hjPׅtƅu_^[jhhj\#u39 ||ȣHQ;v ʃ;wÃ=Hut HHjÃ=lSVt$ WUut$t$V2 aj\$T$ t(J脍it=CFtAJFCEuFJt FJuj]_^[ÈFCuFD$uT#u%d#ËD$=t=t=t=t3 W3h@󫪿xlp_USVWjuG95luj3uj3E900E= rEPVP#+h3@󫪃}M8Et)At";riAB;s9u׸i@=rV5lh3@3󫪋EkEE<Š?t.Ot';ri@_;s?uBrV5lx3pEjk03O3lxjp33+=tj|3jn_^[]jVt$F @t F F u VFvvvs FtNtIF uN@ႀu F ~uF t uFNH$ F F^VWt$ ;58r *~BWt$t$V WA_^UD$ ESVW}u@Ht@ tOEƆ@ @jMQWP4@X#uE#u 0Am6V.%EE@ M 9 u $] @EÉE;<< tGMI;vO9 u  GjEMEPjQ4@X#u #E}uL}tF@Ht} u 5 CE@'9] u } u jjV } t C;}9@@u @+] ]E3_^[]VWj38;~>@u#wBV@tV!8G;| @j;=8}_^UD$;8Vs>4@>u2t ttu j u ju jH#E 3 ^]ËD$V;8sE@t<4@>t0t t tjj jjjjH#34 2^ËD$98v@t @ U |SVWuEjjV EjjV M +؅~q3hVE;}PQV t+߅G8u 4 }uVqE}CjQVt VPD#ɉMu #juV/ E_^[]átthhh hjjt$  jjj SV |$\$ u?=xt$5p;5xrtЃ;5xsh(h Ch0h,1t t$ x#^[j cj VW|$t$ ;vtЃ;w_^SVt$W\$;w3\=ltPj~itj`G+O;w iuj<+ǃ+F_^[S3VWU5DLtPNu;>^Wʀ+˃;L$uH=Hŋ6Lu@;Dtirue:.Oـ+݃;\$s@uC H=H;=DuĉD 6I+΃;L$r]_^[Ë;DuL$SVW3Ҹ3+X;s'u9xu B=r|QVQR_^[S\VW9`v\|$;sjh Vj\#t6\$WSk ǁtS_^[3SVWU|$k +ȋ;L$r|-XD$+ҁD$+F;vjhVS\#u#t t">VS t%3]_^[Vht$ jk `#u3^UL$AS=w HS݋ DBt]EM MEjMjUQPRj tE#E []V,# tGjpjt5V P0#t$L#FFPF3^ tP4# V P$#uLjpj1t0V P0#tL#FFFP jy^Ã= Vt$u P$#tiF$t PF(t PF0t PF8t PF@t PFDt PpVgj P0#^ÃSVW3U:t:=tF+р:uP u j ;t^+щL$;=t?QEu j F++}ȃ\$;uE]_^[UVWhP Vj(#5 8t5EMPQjjVSEEP$u jEMPUQPWVEH= _ ^]ËL$ST$Vt$ WD$U|$t T$D$>"tEt@Fit t@F t t ūuNStO@IF>"t3t(҄it tF@t@F>"ut@>"uF3> t uF>|$t T$D$T$ 3>\uFE>\t>"u#ut V:"u3ۃMtt\@MutFu t= t8t.titF@@itFFat@|$t T$T$ ]_^[hPthËT$3ɸ W9t A=Pr9 u) jD$P+IHQRP#_ËL$VD$ Wpt ?t GNu?u+_^à SVWUuIh #h=#VףtAjjjhhjЅt)l$,~Ot$(UVc血.uS<\tt\|$߄t/脕it8uC8FtC8t8tC;uр;uitF>tF>uj>#]_^[US]vJLj}]itElMPUjpQjRhPtEMA|C Z~[]UWVSu }Xxu; t.F'G8t,A<ɀ A,A<ɀ A8tJj73 t'FG8tPS؃8tja[^_Ã=u(j =u j )UVW3j h;umTPl#Tk/=t5Ƌ: u tH:Ju u3P)Vj $jVP >-uVki<+t<0|<9F>:uHFV@k<>0| >9F>0}>:u FV>0| >9F>0}t أtjVP8  j O_^]ËL$SVWACy ~ }qV~u 4p4tuFPimЍ2%+Au;u y|;|u y}3_^[Ã=lStEjL$D$ ;r%t҄it @;t8t@;sjL3[j>UL$WvV}3fEflmMu3XUM5pPRjQju35f}ufEu!3"fE uit_]UWV3}u tEu t EsF3^_U=`S]uA|Z }*= ~ jS fXunס DHtUE] ]EjMjUQPRh5`1uuE EM []UW}WӿZ@P]Z t WPZZ_SVWU- u= t'u\- tRt$tJ+у}Yt4}+I;vE<=uSVP t}u3]_^[ËED.W|$Wr3OL$u$ tb tVtGtPދtAG t4t‹ tG' tG몋GG.X_Ã|$SVWUu3L$$l|$ Pt$ QWpQVjPu =jD$(L$(pf:u.iuFGV8WuiT$i$<pP5lRSVjpT$P5lRUWjt{f|$ f|$ tx3ɸ3 tL$$D$$L$$j3j3jvjejt F t G +Ѹy0)6+y~j>]_^[SVW5 U>tT= #jjjjj6jj׋t=Uֿ؅t5jjUSj6jjׅt(jSZ>u3]_^[øjjhjhjjMtu ËL$VD$ Wpt ?t GNu?u+_^U =SVWuQh #u3h=#VףtnjhjhjjЅtVu~Vua}~WuL=uXWuVuu uhVףt'jhjhjjЅt|3=3] EE;upt;u ~ ~ EPSP#u3k~I}s W}MtQtE8w:s9u(~I}s  }MtQtE8w:s9ujj VuPS#Eu3EPEu3uuVujS#t`jj WuPS#tCuP誼Et,VPWujS#tVuuuu uEu|uqE_^[]ÃSVt$WUj=V ;} ؉D$9 uQ = |$t= ttih|$t3_= u"j賻 : = u"j舻  = +UV؅|>?t9|$t-8tHC8uPWtB;4;|$}ۍPWe 1A |$td+AQ؅tG++ȃ|$L-h#I#PSS脮3 3]_^[SVW U;t/l$t$W3V u (<=tt;uۋ+ ]_^[+ S3VWt$;t[N>t @у:uPҹ؅u j M>t6ƃ:>u_^[ÃSV\$WUut$ {|$ uSu3v3j sF$+Ãt@$+ËD$;rAD$WPV t.WZD$tRS 5N$<uN;|$sWV謹t HH\$j 軿D$]_^[ËL$VT$ W1F$<u<;5Du D~@$+=H>5H1F$<tċD$_^9Ã=lSVWut$t$螯jt$|$fftVÄit%Ft1 ;ujF7;tFffujž3j跾Ã+ǃ#_^[0w,aQ mjp5c飕d2yҗ+L |~-d jHqA}mQDžӃVlkdzbeO\lcc=  n;^iLA`rqgjm Zjz  ' }Dңhi]Wbgeq6lknv+ӉZzJgo߹ホCՎ`~ѡ8ROggW?K6H+ L J6`zA`Ugn1yiFafo%6hRw G "/&U;( Z+j\1е,[d&c윣ju m ?6grWJz+{8 Ғ |! ӆBhn[&wowGZpj;f\ eibkaElx TN³9a&g`MGiIwn>JjѮZf @;7SŞϲG0򽽊º0S$6к)WTg#.zfJah]+o*7 Z-Extract ProgressExtract Progress??%s %s (%s) %s %s A:\:%crb%c*.**%02u/%02u/%02u %02u:%02u\r00\*.*\\*.*\\%02u/%02u/%02u %02u:%02u\IMI_VBSTATCONTROLIMI_VBSTATCONTROL\\\ ??? \%s %d %s %s %lx \ \ \ All Files|*.*||%s%sdzprog32.exe /%c /u /T=%sDZProg32Class%c:%s\%s%c:\%s%s%c:%c:\%c:\NUL  !"#$%&'()*+,-./0123456789:;<=>?@A  !"#$%&'()*+,-./0123456789:;<=>?@ABAAAAAAAAA A  A  A  A  A AA     %c:\PKBACK# %03d      #+3;CScscc !1Aa  0@` j?Please insert the first disk of the Multi-Volume set. Press OK when ready or Cancel to abort. Please insert Disk Volume %d. Press OK when ready or Cancel to abort.Please insert Disk Volume %d of %d. Press OK when ready or Cancel to abort.Volume could not be Wiped or Formatted.Invalid First Disk; Try again.Please insert the last disk of the Multi-Volume set. Press OK when ready or Cancel to abort.Target Media is NON-Removable and can not be used for a Multi-Volume operation.The same disk volume can not be used as both the source and destinationZIP File open error!ZIP File read error!ZIP File write error!DynaZIP UnZIP AlertDynaZIP UnZIP Warning--Unexpected end of zip fileZip file structure invalidOut of memoryOut of memory---File not found-No files to test, extract, etc.-------------Index out of boundsMulti-disk archive, not supported-Error creating output fileError opening archive---------Bad CRCApplication cancelled operationFile skipped, encryptedFile skipped, unknown compression method-Bad or missing decryption keyBusy, can't re-enter nowCan't extract a Volume ID itemCommand syntax errorUser cancelled this operationUser skipped this operationDisk fullDynaZip UnZIP Error:DynaZip UnZIP Response:%s exists, do you want to overwrite it?DynaZIP UnZIP Request:%s is encrypted, and you have not provided the correct code. Go to next item (if any)?Item %d of %dExtracting: %sTesting: %sFile to Memory: %sreturnCount: %dlpszReturnString:--- DynaZIP UnZIP Diagnostic Log - %s --- Function: %d lpszZIPFile: %#08lx zInfo: %#08lx lpszFilespec: %#08lx index: %d lpszDestination: %#08lx freshenFlag: %d updateFlag: %d overWriteFlag: %d quietFlag: %d testFlag: %d noDirectoryNamesFlag: %d recurseFlag: %d noDirectoryItemsFlag: %d lpMinorStatus: %#08lx lpMinorUserData: %#08lx lpMajorStatus: %#08lx lpMajorUserData: %#08lx returnCount: %d lpszReturnString: %#08lx decryptFlag: %d lpszDecryptCode: %#08lx lpMessageDisplay: %#08lx lpMessageDisplayData: %#08lx \DYNAZIP.LOGNo valid ZIP file indicatedProblem reading ZIP fileZIP filename or filespec not providedZIP filename or filespec emptyUNZIP command structure not providedNo more items foundProblem opening ZIP fileNeed destination path when updating or fresheningDestination path not completeDestination path must include drive letterError allocating memory from local heapZIP filename not providedCan't understand ZIP file, structure problemSpecified index is out of rangeRe-entry not permittedUNZIPCMDSTRUCT Size is incorrect.Can't freshen and update at the same timeDecryption key not provided, or too longDestination path not providedUnknown function requestedItem list not providedIndex is too highProblem extracting file(s)No items match filespecYou are trying to unzip from this ZIP file on top of itself, which is not permitted. Skipping this item...wUnzipSubOptions: %#04x %s exists and is Read Only, do you want to overwrite it?Double Quotes mismatched.Index references Long File Name.Inconsistent UNZIP_FILETOMEM parameters.lResv1: %#08lx lResv2: %#08lx lpszExtProgTitle: %#08lx lpRenameProc: %#08lx lpRenameUserData: %#08lx lpMemBlock: %#08lx lMemBlockSize: %ld lStartingOffset: %ld Error allocating memory from global heapDynaZIP Rename Request\DUNZLOG.TXT--- DynaZIP UnZIP Log - %s ---%s [Extracted]%s [Tested]%s [Memory]Version: 3.00.16 - %s %sPHp @     <L\`dhx| !"#$%&'()*+ ,(-@.D/H0L1P2T3X4\5`6d7l89:;<=>0?H@hABCDEFGXHhIxJKLMNOP$Q<RLShT|UVWXYZ[\4]P^l_`abcde$f4gPhlijklm n@o`pqrst u8v\wxyz{|}8~P0T(@l 0        ! 5A CPR S WY l m pr   )      8  LL`y!@~ڣ ڣ Ϣ[@~QQ^ _j21~   ((((( H . R6002 - floating point not loaded R6008 - not enough space for arguments R6009 - not enough space for environment abnormal program termination R6016 - not enough space for thread data R6017 - unexpected multithread lock error R6018 - unexpected heap error R6019 - unable to open console device R6024 - not enough space for _onexit/atexit tableR6025 - pure virtual function call DOMAIN error SING error TLOSS error runtime error    <  h     8 l x y z   kernel32.dllLCMapStringALCMapStringWkernel32.dllGetStringTypeAGetStringTypeW x a.exe.cmd.bat.com?*./\TZpPSTPDTSunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec;Zx0Nm:Yw/Mlkernel32.dllCompareStringACompareStringW &h"!8(#x ~(T"L"(($!(#V(b(D(p($$$$$$$j$v$$$%%*%@%V%$>$~%%%%%%%%&&"&2&F&T&n&&Z$L$d%r%+,)@)j+X+~+,+ +B+* +***T)0$d)****~**d*V*t*++x))*())D*4*"*)))))(((&''&&&&(*('(('''Z't'f'&'J':'&''''(V(b(D(p($$$$$$$j$v$$$%%*%@%V%$>$~%%%%%%%%&&"&2&F&T&n&&Z$L$d%r%+,)@)j+X+~+,+ +B+* +***T)0$d)****~**d*V*t*++x))*())D*4*"*)))))(((&''&&&&(*('(('''Z't'f'&'J':'&''''(GGlobalFreeKGlobalLock@GlobalAllocQGlobalUnlockulstrlenAGetDriveTypeAflstrcatAolstrcpyAilstrcmpAllstrcmpiAMGlobalReAllocLocalFreeLocalUnlockLocalLock~LocalAllocEDeleteFileA__lcloseSetCurrentDirectoryASetFileAttributesAGetFileAttributesACloseHandle+CreateFileAuFindClosemFileTimeToDosDateTimenFileTimeToLocalFileTimeyFindFirstFileAd_lwritemIsBadStringPtrAa_llseekOpenFilerlstrcpynA<GetWindowsDirectoryACWinExec0GetTickCountGetShortPathNameASetFileTimeLocalFileTimeToFileTimeJDosDateTimeToFileTime:GetVolumeInformationAKERNEL32.dllIwsprintfA)CharUpperBuffAOemToCharACharNextA(CharUpperA7UpdateWindowPeekMessageADispatchMessageA,TranslateMessageSendMessageAGetClassNameASetCursorgLoadCursorAMessageBoxAGetActiveWindowDialogBoxParamAReleaseDCGetDCEndDialogSetForegroundWindow SetWindowTextASetDlgItemTextAFindWindowA\IsWindowPostMessageACharLowerAUSER32.dllGetStockObjectCSetBkModeBSetBkColorGetBkColorGDI32.dll GetSaveFileNameAcomdlg32.dll"WNetGetConnectionAWNetAddConnectionA WNetCancelConnectionAMPR.dllGetCurrentDirectoryAGetLastErrorGetFileTypeGetFullPathNameAGetLogicalDrivesGetLocalTime%CreateDirectoryAGetEnvironmentStringsGetCommandLineA7GetVersiondInitializeCriticalSectionDDeleteCriticalSectionOEnterCriticalSectionwLeaveCriticalSectionbExitProcessSetFilePointerGetStdHandleGetStartupInfoA3VirtualFree1VirtualAllocGetACPGetOEMCPGetCPInfoReadFileSetStdHandleSetEndOfFileGetCurrentThreadId"TlsSetValueTlsAlloc TlsFree!TlsGetValueGetModuleFileNameAOWriteFileMultiByteToWideCharBWideCharToMultiByteGetProcAddressGetModuleHandleAFlushFileBuffersoFileTimeToSystemTime3GetTimeZoneInformationSetEnvironmentVariableA!4x0(0H0h0P:sH}|}||}|00000001DUNZIP32.dlldunzipdunzipVBgetUnzipExternalCancelgetUnzipProgTitleregisterExternUnzipProgresetUnzipProgTitlesetUnzipExternalCancelsetUnzipProgTitle!4( H`!4exg!4!4!4 !4 !4 !4 DB0FD0A STRING1XA4VS_VERSION_INFO?StringFileInfo040904e4DCompanyNameInner Media, Inc.RFileDescriptionDynaZIP-32 UnZIP DLL0FileVersion3.00.16JInternalNameDynaZIP-32 UnZIP DLL@LegalCopyrightCopyright (c) Inner Media, Inc. 1993-1997, All Rights Reserved.,LegalTrademarksDynaZIP is a Trademark of Inner Media, Inc.(OriginalFilename6 ProductNameDynaZIP-324ProductVersion3.00.16DVarFileInfo$Translation CharlesRBasin726651ȐVDynaZIP UnZIP Warning!MS Sans SerifPB1&NoPB1&CancelPB1&YesP<B1Yes to &AllPrB1&RenameP 1Ȑ5DynaZIP Rename FileMS Sans SerifP"r SP1rI`SProqSP1rIaP12OKPC2CancelP# @"BFile &Name:Po' &Directories:P" @@lAFile Type:C@ kpP CDri&ves:PU2&Help@l &Read OnlyPm Original:0'090a0l0r0x0~00000000000000000001 11'1,171<1I1P1X1|11111-272d2222W3v33333333444444455<5555566!6-6>6N6b6g6t6{66666666667!7-737;7@7F7O7k7|77778>8L88888888899%959>9G9U9c9u99Q:::::; <~<<==1=8=G=N=l=====> >>>>">'>2>G>t>>>>>>>>>>>>>? ???$?*?0???`?k?y?????????????? d 00*060=0Q0V0`0i000000000001 111&1H1U1k1q1|11111111111112 22$2*282A2I2h2o2u2{222222233$333333334 44F4K4Q4Z4d4j4t444444444445 55#5t55555556 666$6X6g66667 7m7z7777778 88$9\9a999999:*:L:::::3;w;;;;;,>A>h>>>>>>"?'?/?@?o?|?????00%030H0o0z0000000001 11111:1a1r1|1111111111222'2Z2_2e2n2y2222222222 3"3W333333344)4Q4X4^4d4j4t4|444444444444455"5)5;5P5Z5o5w55555555566667"747:7A7T7Z7a7m7s777777 8K8R8f8s8}888888888899[:::::::::::::::::::::;;/;;;;;;;;;<<+<<=L=l=s=x========>#>6>y>>>>>#?,?l?u??????@0 00X0a00000)121x111111112 22 2%2+232B2J2R2~22223313@3U3f3|3333333$4*474q4z4444455*5@5I5i5q5z55j6p6}666666677H7^7b7f7j7n7r7v7z7~77888%8k88999:O:X:n:X>>>?&?4?>?P?v????P000A0[0z00000000 11,1M1X1f1y1111111 2@2F2V2c2o222222223m3333333'444A4P4]4b4h44444445 55535x555556 6R6d6666717K7c7i7q777777777778 88"8'808u8|888888888899(969D9M9d9z999999999 :::Y:_:w:::::::;;,;3;8;N;Z;z;;;;;<%<3 >>>%>*>/>5><>>>>??*?>?K?R?m?t?|????????????????`T0#0+0B0G0M0W0000000000000001111'131;1B1H1R1]1d1j1v1111111122 222!202:2F2M2e2s2222c334495d5k5z5]6d66666666666666666666666%797Y7y777788889:(:3:<:O:X:l::::::;;#;`;m;{;;;;;;;<<9->X>h>>>>>?!?Z?j?????pD0#0K0[0000001+1;1c1s11111 22C2S2{22222 343D3z333333'474b4r44444$545b5r555556 6 6-6H6j6x666666667 7777A7G7P7V777778$898N8d8m8u8888889?9D9c9j9y999:,:\::;*;N;U;g;m;;;;;;;;;;;;;<<>+>2>y>>>? ?#?Z??????00!070w000000000F11111 22I2n223#303:3N3S3333334444444445'5p555566;6K666677Z7j777748X8a8888+9@9P9U9i9z9999: :;:o:::::4;D;_;;;; <%>B>R>p>>>>>??O?k???`0040t0001 1"101z11111 22B2R2p22222?3O3k3334444t4445 5"505z5555667777L8Q888899999999999999:: ::!:%:.:5:?:F:N:Y::::;; ;9;?;F;P;V;i;r;;;;;<<'>>%>6><>N>[>l>~>>>>>>>>>>>> ??&?8?G?N?]?i?p????????????40 0&040?0E0K0Q0W0k0x00000000000000000111'10171M1Z1n1{111111111111111 22-222G2Z2k2q2y22222222233%3I3Q3h355777778+81878D8J8X8a8t88888>9h9x9999:#:>:p:::::!;';O;^;d;j;;;;;;;<;>>I>Y>>>>>>/?9????0-0000 1k1t1z1111112222223"3n3t3z33333333344(464<4D4M4\4j4p4w444444444444445515i5s55555%6E6L6a6h6666666666777)7/787>7N7U7`7777777777778 888-83898?8R8X8_8p8w8888888888888889 9$9)9:9G9M9S9`9h9q9w999999999999::":*:L:b:h:z::::::::::::::: ;;;3;@;^;};;;;;=D=I=O=]=m={======U>m>??du0091p1 222222233 3$3(3333444x4578%8N889i:y:::::;====F>>>??m00,1D1q1112K22222222222333a3q334 4/49444445U5b55555555*626:6Q66666677I7c7888H88889C9P9V9f9}9999995:E:;;;;;<&I>V>[>`>>>>>>%?B?R?d?????????0000$1111111-2L222222-393`3j3333333454=4G4r4444556 666#6Y6l6t6}66666666&7?7d77777777+83898A8l8888889(9.949k9q9y99999:":3:9:?:[:i::::::;';3;9;D;K;i;p;z;;;;;9<@====9>?4????????#00060E0K0S0b0}00000001 1'151f111 2'2F22222 3}3344-434L444445U6g6n66666677*7<7E7W7o77777H8U8[8m8s8{8888888899$989b9v9999:::":;:N::::::;D;H;L;P;T;;,<>d>z>>>?\?l???????0 010\0e0n00000$1111d334556_6g6u66X7k7y7777778 88*858g8~8888 9#9*929=9N999:E:::::R;{;;;;D1>D>N>h>s>??t0 0#010n0y000000000 111)101@1V1r11a2q222223n3z333333334444535p557$7;7C7_77 ><1 111$1,141<1D1L1T1\1d1l1t1|111111111111111112 222$2,242<2D2L2T2\2d2l2t2|222222222222222223 333$3,343<3D3L3T3\3d3l3t3|333333333333333334 444$4,444<4D4L4T4\4d4l4t4|444444444444444445 555$5,545<5D5L5T5\5d5l5t5|555555L7\7l70<8<801@7D799;=====> >>>$>,>4><>D>L>??11$1 * Copyright (C) MZ@ !L!This program cannot be run in DOS mode. $PEL{4! 7lzT,'P@ `pt.textjl `.bssR.rdataYp@@.dataCDr@.idata @ @.edataP@@.rsrc`@@.relocp@B fȀffU D$3%3%i@ ]3%3xV4gE#UVxV4u>tPF`>u^]U@<SVWu [j3Vbu3VGX%SE2]Ј\=à |V3IGt=ËV3t̃ |؋u V33tЊL@ L|=luCj uVjF t=d Y6j jMQ t@ ;M }u,Nu"lMPj jQ u3_^[]USVWuu =4}t*߉ut!EPE2CMu߃}EU=lES,PAP;S|+VjW;S5purOSujLE u.E0SjW;ápuÁp]3st:VujD u(ESVjWJ;uSQ5puE+u ttALE;ơl|"PVjW;ơpuIup;]PSjW;ápu+}]p3uLt3uE+u Suu W3_^[]UD$V} ~ =TuT=u2jh9ujh|jPjo= uOjh jh@X= tujhiPjnXhfǀjP^  HLPuE  uE 3h5`P5h\tTtO5=s=u=r33ɋ4 A3?ƣr^]átP t+PXPX UP SV\W5`ΉU~v ~uE\4];H]rUu3]8]8\8uB8YuwBAB8uhQWN hQW4 hQW 3LJ(d}=t=t%=t5ChQW ,hQW hQW _^]U=`SVWt)}(w,hjb W`3(dht|x}DW$O58Bhh0hh֋=t=t ,= d  WDDžDPt&w,hjxa `ALEأDEܣ$u)phj6a `LhUfEfTfEf%f=@hfEf%f=@fEf% f=@fEf%@f=@fEf%f=@fEf%f=@fEf%f=@h@fEf%f=@AEu Eh1WDuKhjjjj09phj_ `h@&H|}}PW1tKhjjjj8phjb_ `h@3LE| E9]tSh,uh@ kBphj^ `h@h(h@֋\`4TXH|~6phj_^ `h@U#tx xh lwRh /W Wn= |}h hphp=Nhp0Bo/th54Bhp54BhhphpFtjhhp l=lu6phj /] `h@g }|9}t3Pt*P0B~tE|EEt&3fEPD3Ph=9=t R=ltPshp,BlphV<\ `h@t_^[]UHhujD UP}PjhXPQD Q]UVuVa-P]V@B|TtP;w 8 uH;v;r8 uH;s퍇;r8 uH;s퍇;r8 uH;s퍇;r8 uH;s퍇&;r8 uH;s퍇.&;r8 u&H;s퍇2.;r8 u.H;s퍇P22;r8 u2H;s퍇T3Q2;r 8 uH;sFN DžDV$HF(dN,hV0lF8pNtPQD tQ0BPtQVQjh>tPQD tQ0BPtQVjh>tPQD tQ0BPtQVjhC>tPQD tQ0BPtQVjh>tPQD tQ0BPtQVhV jh=tPQD tQ0BPtQVjhu=tPQD tQ0BPtQVjh7=tPQD tQ0BPtQVjh<tPQD tQ0BPtQVjhXVV΀>t+ǃ}5FB;r)t +ƃu.;s+ƃ} GB;rB9tq>>uƀ>t#Ph˽u> u_F>u_^[]U@PuBu3 PB]UD$M tSVW3f955T5&jh@٩jh ũt95ujhLP7!33]~-EȋfʃEp|E33ۈUE` ~0}Êȋf΃uC@|}}`4E` ~0}ÊȋfʃUCx|3󫸂ff=v©f f=~v긂ff=ޫvff=vh3hfjVFHfGzr_^[]øf=xrf=xr`f=r3f    P X xUL$  SVW4M;5{E;5ftAƀEfF@;|ڃ}Z +)}|Eu2}ƀftuD)(rEu p+|VSNX } 5$IjS$ )$HH4$ fff:wf|f|jS=$G k $u HAuS_^[]UD$PESVW3u M fDAMF;~;tl;~ f4`/t;Mtf`f  ff3Mu ;u  Mz_^[]USEVW3X];u ] <CE]EFE;֋E]~ ;];}tL9MtENb`QR&{ PQ {jV{z ( PQzjVzM P QzjVz%Eb` PQzNu3M9uu E9Eu  EM_^[]á@Ph`Phhh3f9 buH}kUD$-SVWjPyu NjVy}3jGPy~jC bQy;|EHPhVh_^[]U=,SVWt  f:u%h(hH5E  } E=T;w;r`}tZ=uQ|tH]ujhMPajWSz  tG;w5]t.juOx j$WSD z jE9uu&Pxhh?PwE@P`@P@@P hh L  "}tYy_^[]U X졜SVW] UAufxWfJ|f5PPfpx xux@=~UuM5`+5h3`׃x|;Pv X;w X?t=P@u_^[]U SVW3ۉ]]9, 9X]uEEE<CEuELQREQRu t+<PWu EE4rE LQRJu`t+4 PV.um=,u 9XEQRt_^[]V33=rу=r=r ;f@fu&=thjhN PY^UT$Vu0u Nt! 3B 3ȋNu^]UD$ȅtt \u/Au]UD$ȅtt /u\Au]USVWu >*u3V=0Buu׃ׅuV׃huQ辜 hVQ蝜 3CE8t*t$u֋?t<*t\'~\VP38BPCC@UQhRD UEƅQRPMQauIPQ8BQCtPQtu CXuEPQVn t7P0BƊ\t/u@PMQhuDE;ut Vu8BE3_^[]USVWu} W0B:WK<WPA8BPMhDQӃ MUEƅQPR-uFP0B\thP4BPQhVӃ;tWV8B3_^[]USVW3ۉ]9]m9] d};Yhu 8BE8\?x\5]FAShWD hP8BSEEhPD EPBtuEPQW=uE}u F}r}uQ8Bj\Q:؅uj/P#؅t"Cj\Suj/StWhPluPu 8BEE_^[]UD$VW3;|D}?<97t4AQhRD jQu7_^]SVW339tWu3G|_^[W3_USVW}?0E 8$3W0BPǘ;u 0BP記؅WV=8Bu Sj.V\tGV0B|*tj.S-EtEEj/S Ej/V}t u E@E]uWtuVu3VSt VАt SÐ3_^[]USVWuu} WV-؅jj]jPSijjP0BPjSE3ҍt \uB@|8t 8\t@8uP0B\thP4B4BPQ8Bh QӻjQV t3ۍPW8B_^[]US3hPu BtuQpBu[]USVW} }E } ~E 33|R< ;}u/] hi@Q趑 ƃCuFtu3P=Dt9hh08B$Ph0E i@Pjujj DE i@_^[]USVW} }E } ~E 33|R< ;}u/] hi@Qߐ ƃCuFtu3P=Dt9hh08B$Ph0E i@Pjujj DE i@_^[]S@VWt P"u=<#5\B=lBjR<Pׅ<hp6XNօu<p6>< <@F9A6thPօu<pF<@t P <q:ׅu<p:<H t*@>t#<9B:tQPׅu<p>譌<@$t P <qBׅu<pB职<Ps< ,tPM,tP1tPf_^[U VtZ= tQ=<uhPjjezP!&<pPNtB;sRNuVQ 8tP脋 8tQg=tTut5,^]U(S@V(WE,jPPhXh@D u tN>tIh\h@4Bh@=0B+SVh@@PTBh`h@4Bhdh@4Bh@<}uh@,jPjj P_^[]U=0SVWPu u L 9t@=PtPP݋LPP,B5L395PU |MVPQP us|=<3ۣt3hPWFuG$FGG N.tɅu&hPP5u+EPVNPPP4t P8t P8=tPԈ}t_^[]Ut$jV]U=0t/u uhhRDQjjjj Y]U3ɋSEVW9Hht4Plt-3P8 t"uu uA@B:uA@PExpt(@tt!38t"uu uA@8uA LkQɎHujhiPj`3ۋE]9Xhpl38tU<"uuB< u>QPo Q HE fD iNF>uQP.ukP HEfDiExpxt38t[uk<"uuB< u>QP Q@ HEfDxOG?uQP{uP HkfDx_^[]U3ɋdSMVMWuuu VQPj=0BP׀.uEjjVjP4P׀\thpPF4B5E}Z}t%MPQRX{ EEPQ{}tj.Pt3ۅ=$t$PV8BM䍅QPBMUQERPB=t/jhjjjhPBu3PtBtP=t t=t 3ۅt&EM PRD E}}t uBE_^[]UhESVWjjBjV{}WuE=(u3(hhPֻ t jjP衿 PQERPW{\uP=8Bh`h`Ch`PQjjUQRPqQ0B\uP0BƄuE=PQE3MP}QRt uJvw u-E􍍘PQVy tEW}tuBE=,P0BP0B\tBjƄ\ƄjjP PQ EƄ1jjjPk PQ菽 EE}PQR$ Eu_PQpBu E>hx@BPhBE􍍘PQV;x t EB=,P0BP0B\t?jjj\ƄPO PQs E1jjjP" PQF EE}u)PQR EEutVBE_^[]UVWuVmPQERPV衎\uPh`8Bh`Ch`PQREPQ蟍x=tt xjjjj PQ x_^]USVWu3V=L==Po,;Fttt$t+t&." hPujjgPj~8t~<tt5PF( ~ }3 t  t~{W0BAkW0B\jB舄4ujh(Pj;jB4jP| 4WP8B~Lt ~$t FHt Dž~Pt~Tt"FXtP0BF t ~,t 0~dt  ~xt ,~|t $~@t (~\'~`W0Bt>jhPjjhPjWP8BƅP GPQ8BƅQې؍WP8BƅP赐 jljPjS}Q輺$~Dt U~0F4(Ph @h 0B@Pف8u;jjg|Pjsjh]PjTph 8P8Btt3SSShP" ~ 8<"u< VP PPI=tt,u#PDžRtttP Pst"Vjh,PwG?(VP_PP=ttHu?P2tVPVPPtttPI PtVuQjh[PtuL<tB395LtsFfCJP.f{J:;t[Nu*uPj 舲tX uPVjuhPVhPV|=tPw=ujhFPj=Y= u uL= u$=u=u=4u =tjhPj=u,u tjhP5I=8j/P}u,j\P}uj:Pq}tV>:uF+@Pz}8ujjgPj085P8B33<;tlu^f9{JtQtLWWs6ҵ t9$wtu#9Crf{Jt9$wfCLf{LF[Nu譛uPj b~=@t5脛u'tt$9Gr WuOuPj  =@u=<t= um=ud=u[tJtE=<u'= u =tPj Pj {jt"uu =<tDžDž=(t=<u"u Dž}=<u tjP5v uPjPuPBȃ=<u=u P,B=t 359jhP v E;ơuPj =YMjL P5|Q賃 t/MPA $ Puu|UtNjhPu EuPj ML PaP/Lujh]PjTpPLHt YjLhPt EPuLPj =<u jhPt u0}tP9Et usPj tfPuô 𡜴tIs}tP9Et urs uLPV.JUh Vx,=,u0}tP9Et usLPj h ,UjPu蔄39<t <f9AJtINux3xtUU9@f94t fffش5@z= vQ8B6R8BQQFȉ5VF P v0B؍Q0B;}'voP0BPvFPv8BF3'3ljF =% fNQ 0BMȴ̴дԴQh+Դvȴд.tfX tfd |U=uwEP_*t^}tP9Et uGpPV+ }tP9Et upPW Dž<<35x95tt9C6u xf9sJu;95xu39uEPS8 $CN95ttEPS:t EuEs6VDžhPEPSE8 nfsJCNsFjhPQD Qɡ{Ns6lsFl9st s:l9s tC>9C:t Pl9s$t sBlSl 85xs|@jRQsjRjVk =tfFJCS {N6FF=Cxt9 u xEPVl8t xS0N0؅1sFjh-PhhP~}tP9Et u*mhPWs6jhPhhPQ~tl}tP9Et ulhPW,sFjhkPhhP}}tP9Et uhlhPW1M}tP9Et u:ljhPjtlv6jhPhhP>}}tP9Et ukhPW,v6jDžheP v6ivFiVi=4t4Pyi4,t.}# P9Muk,UU=<fXf9dt fhEPt55jP5-t/}tP9Et ujLPVRn=lt@EP荺t.}tP9Et u@jhpV %x}t%ueujEPf=Xthjjjj[jp fXhP(j E Pj.jh>t.=PKf=,u ,QjhPs ,;ƁPuh<pFhPDBuQj3ju^w <;EPS#C$CC [N.uchjjjj 跴>hjjjj 藴hjjjj wxP}5uh"LP$PPjugPVugPj wugPj WsPj B^Pj -I3<;t9EPS!C${CC [N.uǃuhjhPZ E+P55Q)t^}tP9Et ufLPVKg}tP9Et uTfLPV8=lEPS}tP9Et ufhpVtekUutuyLP5!tQLPjhgPLPcLjh7PV/NLPpcLt5BP5,_^[]3ҹ, $ , 048<@DHLP(  $|x( 0USVWjAjhau3 AFZfFfEf+pfufEfFf+GfuʍC=AڃA|3_^[A]UD$ EqFqFpB]UD$E qFqFpB]UD$ pFupB]UthP5ut3]UVW}W0BPgu3BWV8BV:j/Vgu@j.Pgu hV4B_^]U SVW3ۉ]]9]E8 h PDBj h$ub E;jSPp utb Hq}ua Ɓ+|+jE+EPu4p t E C}WjBEt)PB؅tuWjS]l;tE EEuEEE+EE}}E9EEMqE F+…~QF}PUu8Ku3}u*u%|u|uEEEHMMu}u }E E3҃E+EE;}U}>u~`} u(uP~QtEEt uB}t uBE_^[]U3ɋ P <M USVWf X lf ` pf hh( f\QjjQիfTu@EMPQ5s fTt P,BfTu PPP葦u=d PlP辣PPf DEMPQ5Ŝ }Pu,Bu3P8j h,P_ ؅=tEMPQ50 3PKPKEE<Sqt PtESEjEjPhu^ME UE ʉM;t8;t4jjS8l uE돋s S ]$ UME UE ʁPKjRbEjRjPZ ESjjPh==sfUfMfEf ЃfQ% ffUffEf fQ,fQfUfEfUff fQUE ME ыMQUE ME ыMMQUE ME ыMuE ME E puE EEpEM MMfA(A$fA*A Et%MA.M=fAJfALEu}fMEP@ ЉMMEpA fMfEff MfEEMP@M AM  ЉUE܋MANEFP`MAFMEtP_MA:SjVWe}7tSMjuq:ge}tjuSh =t MA:A>WWCW菒M=A6UGQ2=MMME}juSdh SEjjPdME UE ʁPKMqFjh4fP SY SltPuSEjEjP$duWME UE ʁPKt0jjSg tC S XF A MES UE ʉMMh+E=tTUE ME ЋE ыMP u1UE ME ЋE щP }u ESEjjPc=VC S XF T ~Skt PtESEjEjPbuLME UE ʉMPKt"PKtjjSf E냋EMU+M+B2+ƃE9SRW =mC S 'WF k @Ph0h@bh h@jh1PkSV" SV SVC S VF C S zVF C S F SGVC S )VF mMqFjh2PSU<C S UF 5<U=Uty=SME UE ʁPK(SEjjP>`C S KUF ME UE ʁPK\SEjj*P_5NfVfff 3fF,ENe 2|8tBrEfMfEff ffEffMf fFfEffMf fFfEffMf fFME UE ʉNME UE ʉN ME UE ʉNME EU ʉNEM EFEM EF EM EF$fEffMf fF(fEffMf fF*ME UE ʉN.ME UE ;N2uAXSjuW]uWWCuvFWf WP}tXuWF>SjuW]F;Eu PWv:&f uWPF:F>}t.uWFBSjuP$]fFJfFLEvNESEj.jEEP\C S QF =h4jh5PVSQ C S QF vFjh6bP S{QiQW~OC SBQF WOvFjh7PS QPP>v> OC SPF PvBNC SPF EM u-ME uUE ME ;th<jhCPME ; t0h@jhDܾPSO:UEM E E +;MthDjhE胾P*ME UE ;Mt`hHjhFBPS[Oh8jhBPS+Op=E|u EM tnP TuSNSj5PYt-PLC SNF =t6PjhG>Ph@_ h@P=u+SathLjhHPS NtOPSȣu3<t RNuhj5P T3_^[]USVWP}wFC=l.Gu GPVWѕ t=d 6VjPRaVjKGaVjlPjPO[lPjK?[lPj/[lPj[}l_ PQ[5lRZ5lQZ5lPZ_ˡlPQZ5lRZ5lQZ5lPvZ_ˡlPQaZ5lROZ5lQ8Z5lP#Z3_^[]Ã=lUVuNjuVjY t=d 6VjPYVjKYVjYVO蛕}uȕuBlPjPYlPjKYlPjxYlPjhY3^]USVWuEFt(~ u"V!uF EF>EPvFCUtDf=\fXuf\f`f3f9`t f`f3fhf@fh=l@=x3~$~ ~y.;~u 褔blPjPpXlPjK`XlPjPXlPj@XfˡlPQ+X5lRXf^5lPX5lRWf^5lPW5lRWf^5lPW5lRW^5lPW5lRzW5lQ`W5lPNW^ ˡlPQ9W5lR'W5lQ W5lPV^ˡlPQV5lRV5lQV5lPV^ˡlPQV5lRV5lQgV5lPUVlNPQBVV5lR/VV 5lRVV!5lR VV$5lRUV%5lRUf^(5lPU5lRUf^*5lPU5lRU^.5lP~U5lRlU5lQRU5lP@U^2lPQ+U5lRU5lQT5lPTlPvjR:;FuJ~ tlPv jv>n:;F u)~$blPv$jvBI:;F$C}WKF$} F F.PWj贈 t=d $?WjP5TWjK*TWjTWjTfWPTWPSf^WPSWPSf^WPSWPSf^WPSWPS^WPSWPSWQkSWP^S^ WPNSWPASWQ,SWPS^WPSWPSWQRWPR^WPRWPRWQRWPRFWPRFWPRF WPwRF!WPiRF$WP[RWF%PMRf^(WP7;F u-~$tWv$jvB7;F$u}tF>3}tF> _^[]Ã=lUSVEuPVjJ t=d =6VjPPVjKPVjPVjPUVtjXPPYVPP\VPnP]VP]PhVPLPiVP;P]Hj,PVj!PVjPVj P]VPOVPOVPOVPO] VPOVPOVQOVPO]VPOVPxOVQcOVPVOEVPHOEVP:O}Vuju4;Ey qM;}uOlPjPNlPjKNlPjNlPjNlUP XQNY5lRqN\5lR[N]5lRENh5lR/Ni5lRN]aj NlPjMlPjMlPjMl]PQMlPQMˡlPQM5lRM] 5lPzMlPQhM5lQNM5lPMUQRv6r Fm}c=t =tefTĀt(t#= t=|t FM}uEE3ۡT;\tPv6t] EVr39Et EEdxtB|Ixt dj@hv6H dxucdP,H}ȅuE}uE % fF}f$}fFt F FF 4t[fF fTƀt}u FF fF 9}u$dP_fT 4F fFfTfFfF,EfFu}|EFFE3fF(f~*Fu EfF*t E%F.MN.F23TԆƀt1f XfN(u"9Eu9EudPfTF = ^FSP8Bv6Q8BQQ)N5ЋF.RE S0BEQ0B9E}%S/P0BP5FF^FPS8BS0BFȋE3N'3EF.u VNN  4tQu v Q)1 ؅t1jhPS5dCD,aF  E K M t2jhÞPj躣dPC,S?E t SDԆjj̒XUt p}urS|u[}tfF*EPF*PFP53fF,f%fNff fF,fN,':ETh 4؅u 7}jȅPhЅP x dut h S h S3;Ǹt\u WjS0 d;ǡxtS,dP{BUt=d  |=dt , S?,ԆE=,dtPB,7tu #t PAf T=ft=p}XU=F =4VtB FfɡԆFt|}tFtu V~tF:9F>t Pg+F=xhЅjhÜPQD 2jM v21`; t$jh豛Pj 訠 ff,ffEfF$u VfFjE W0: $jh@Pj 7 =tL=tCv6Q8BQÏQBEeuQBv6jh蛛PQD QmP^3_^[]USVWu'}du WPD tuRE }PS5dDȃ tgtc׊GC< u F G GIu+VWVX5Ԇ=TuԆP5ȅ ;5ԆrjjdhЅL 3_^[]U 졄SVW3};t6uV] ;tO;|}BA uF GGF@;r%] t;|}FA@G;rtGVuX5Ԇ=TuԆP5ȅ ;5ԆrjjdhЅK _^[]UVWjj,uX|vh .u jjV7E lTh WtuTW'ljPVD u=xtlh .uWTlh VRtuTV6'lX_^]tfhUD$ltNhP-u3xPp=x\u \=3]Ã=lttP&3UtSVWu +;}jf}fffh xf Ifhp;v C$CpjPbt*ʍTff=hfh}ff fh_t^[]U3VMU J ^]USVW] 3 95luVhDPٜ95pt]95du?hlpPj5k);pu95lt lx t 95dt , ,5pu4xHu _U pp p4uU pp_^[]át~0x pH;vfhA4A p?j+~7 p9 xvhA pjhP=lt jj3fhtUSV^}x pB;v] 5A<A#j] P,5 pxB p;vfЈAffЈA*jfQ] 5 px=l ptyjjduLhlSjuV';ádu,=ltl@ tv,j,^t , N,B p;vjh莓P#SuV pK# p^[]Ut3>=lt0jljP2 ujljP2 t3U3fD$ f@ fV3VMEMPuE DEKjQjQjuBtEt^]U3fD$ f@ fjEPMjME DEkQjQjuB]U SVWuf} WV@t]fG3fj%MQEjEE DEKEPjPjVBt EttWV:_^[]UVWuf} WVWV_^]U3fD$ %E DVEf3UE3VUuȍEMPMjQjQjuBtEt^]UL$D$,fEVE3MfE M%3VEEMPMjuEQjQjuBtEt^]U3fD$ %MUjEEQjRjRjuB]UD$ @ %MEjUE qEQjRjRjuB]UD$ jMQUjEERjRjuBtpEujEt MffEtMUff fEt Mf?fEt MffE t Mff3]USDƅDVWPufE j`f@PVƅDf]f}f(u&f u EƅJtƅJjhrfPu2f uƅJjhVfPu6fuƅJjh:fPfuƅJjhfPu}f$uwƅJjhKPfj ɉ`f3ft"fAflfnf;w㍅DPj@fE f@PV_^[]U VutEHE%3fE?j3fE M%MQUjERjRjuBt Etu tM^]UfESVWuf} uuWV؅u,fEUfMRfEjBEff@fMPV؅t-f}t1WVu-juuWVu!fMu3_^[]USVM]uWKÙfEÙÍzu Wu™PfE Puj_^[]UfESVWu }fEVfHPu W]؅tf}t u WufMu3_^[]UfL$f(f%SfVfW3f%3fE?3fM E3}fE%EEMUjEM܍EUPUEjRjRjWBt Ettftu WufNu3_^[]USVWuu VEMUPQREPMQu VMfEf@hfMj@fEfEf@fMfEBu Vu V)EfEt!t3tyfEpfEfE}u+f}(wf} vfEfEfEfEfE(fE fEpfEfE}ukf} vdfEfE H}uPf} wf}PvBf}w!f}PwfEfE fEfE8fEfEfEfEfEPfE fEpfEfEEPuuu VmMQuuu VZfE fąAQjh[tXPQD XjjdQ]u VuTVP8BP0B\thP4BhP4B} WPBM؉tN$tu @u,.u/WS C$ũtSBM3_^[]VP8BP0B\thP4B,WP4BPV8BV@BUD$ SVW]8SW5 CօtE$ tu @u{,.u&SWօ$uWBE 3_^[]Ë}W58BP֍Q0B\thP4B,SP4BPWW@BUSVWuVuB} ؉t(u~,.u VS CuSB3_^[]øUD$ SVWuV= CSu~,.uVSׅuSBE 3_^[]øUD$ uPuB]USVW]3;tw9} trS|cFjiBEPSCtDWB؅t7Eh>u S MW>BVW_^[]UESVW}tb} t\W`NxNWB؅tAh>iBSu >EWBVW?EE_^[]UVW}tWBt 0WB_^]UVW3u;tVBtM VB_^]UHSVW3}WhN@QVh]QyPQD VjdQ;+ WP8BP0B\thP4BhP4BMPEQR } tWP8BP0B\thP4BPQ4B;tSP1jjdPh+ uP,B3tEPQ;}t uB_^[]UdESVWjjBjVJE}PWNEPQ8BMWEME3ۍMP}QRt Wx t-EPQV6 tE}tuBEu QeMQRpBtKh@BPBPhBEPQV4 t EuLtVB_^[]Uu utV]UDžllPCt|H؋]%C%C%CVW|$0Vu$Wt$t$t$V$_^ËD$ D$D$S\$VD$WUl$,E t ED$D$|$M t7Et0T$;rЋʋ}ڃ)T$)UUD$9D$wZtU|$t$t +t$+VSu% to)D$;s>D$+ҀM +D$t$$9UP#tSCEL$D$D$|$%D$(]_^[ ËD$++D$t$$D$+ҀM +D$t$$ԋD$++D$t$$&L$H&HiCÞ&H%UEPCMUQREMPQUERPm'Mt]VWt$ u j-0WQ"VW"_^Vt$V1t!F @tv'^SVt$ W3F Ȁu:t3F+؅~(SPvQ# ;uF t$F N FF_^[jÃSVW0Uj3l$s!|$90$rlC t[0VJ!C t4uSt!EutSuD$Vn! 90$sjY!ŃtD$]_^[?=p$t&UWM3E f‹}ڃt ;r+ʇʋʃE_SVWj y t$t$V؅t ;v+ˋ3j _^[j , t$j ~ ËD$Vt]0N;tr(NN=$t!|$9Hv@$+;$s  |$9Hu5|$^UWVu }M;v ;uRу$ ffFGE^_ÐffE^_.E^_Ð v#ڃ+ʋȃ$.E^_.u_у$l|fFfGFGE^_ËfFfGE^_ÊFGE^_ËNO v%ڃ+ʋȃ$lE^_SVt$ WF @t F +ށ0S,VS_^[VWt$ F t:VVu&v}Ft PF _^VW (t.V0t$t$t$N&V_^UWV}u ׋M t2^_Vj It$ t$ jB j ^Vj t$t$t$ j d^U SVW]tVSu"(( @EP]]E:E.EQhSpCPhBto@=wgU u%M;PЅu' ;;E~ '")++ȃ3_^[]tCL$UV3PhBt:uP'p^]US]|TOj @]E:E]S@Btj 36BP)&j & &[]ÃD$SVWUPCfd|$fD$t$f+fڋL$$/ AAAƙ0ƙ0LjQ0AǙ0ÈQ0AÙ0]Q_^[ÃD$SVWUPCL$\$|$t$$: FFF00ÈV0FÙ0LjV0FǙ0]V_^[UVWS} 3I:IM}3I+Uv%u uыߋMuCE3[_^̋T$3t:t4Bt :t'B:t"B t tt uBB+UW}3AOE G8t3_á&Pt$SVt$ W|$j V0j lutt VЃuƋ_^[VW|$ v3W,%u"W &t_W%u!N@$++ǃtWV2t HHF$F |$F$_^3VWt$ N|$@$+;v { tNL9H3_^UD$ SVW(}uHEEƉEE++u@w.uuuVMELMuVEP ]]};}w VWU~+];v VSU}uS;r W V +ƋMH+;|-E;sE+]E\;}P';}sEMELE;#+]]_^[]ÃSVt$W;t$UvB|$ D$ljD$l$\$;rUST$,~;vWVU+ ;t$w]_^[ËT$SL$V;tt$NtABNu^[UVWu>}3kB%=~]= }V+&EEPJ=&0V'EEP@ V<+&E}щm<<EN<ȋMV} ׉Vm<<ENȋMV} ׉VmEE~FEVUV UVG}}AFMDVF EF F FmF NEF_^]SVW3|$Ur}3}@uj$BE@tM@ÙЍFiҀyځ3|,@33|@3| @QAÙЉAiҀڅx&u&n9E} B9E|JQA+QA ÉQ<Ai؋ÙAkÉA ]_^[VW|$0VkWt$t$t$V_^ËL$ D$SL$VD$D$WUu3\$,C t CD$D$|$C t0Ct);rŋȋ|$3+ʃ)CD$\9l$w6|$t ͋+t$+Qt$sr tAtN+D$ S`$tJL$MD$CD$cD$(]_^[ ËD$+ҀK +t$$D$+ҀK +t$$ԋD$++t$$jt$xCuBtP3ËD$Vtt$t F:Ft$D$ȅt(8t#AF9uQPP$uу|$l$$t,t"\$+߁rSWU# +|$tE|$t^;|$wXl$(t#\$+߁rSWUy#D |$,tW+t$rVt$WM# 72l$(t+rVWU%#D5 |$,t]_^[VWt$ 0Wt$t$V W_^SVt$ WF ts|$t tua$F uV3\$\$VlF t$F tt uFWSvM @o_^[VWt$ 0WVWQ_^USVWu~^}FjjS E} ~ u E+FF+Ut()t;s 8 uE@;r}u%EǀuFu Ep)<tajjS ;EuF 8;v 8 uG@;wF 1juS wF t t~)tG)}EE_^[]UL$AS=w HS݋DBt]EM MEjMjUQPRjz$tE#E []UW}W3ъE _O8t3_UD$ VMEBQEEEEu PV% Mx EEEPj+ ^]ÃD$SV\$W|$Ut rw t@t t$0UL VJVN N tFN 4D$u&SuD$N N ^FFU2 D$]_^[SVt$ WU9=~jP fAtF>F-t+u>F3ۃ=~ jW fxt k \;>F͋Ã-uۋ]_^[t$bSVW|$0V GHGx @ WV? _^[t$UWVu} 3M t^_SVW|$0V GHGxL$@Wt$ V _^[t$t$VWt$ ;5)rp n"~BW VWZ _^VW|$ tuj,j,;tW,PtBu B3W&,tVc Ƈ)3_^VWt$ 0W] Ff π)W _^SVt$ WU95)wt rQnBU jjVl ؃ujjVQ ;t jSV? U/ ]_^[U3SEVEE E WuEE t2E @ux/-》E t*t.t2EE@EEt/ t30t7@t;SQEEEEE %=tYtL*=tU=tW=t5=tR=t9=tDGE"EEEEE t8$#EuE @t ME tE t E t(u %#jMWuQuuuBu%BBPhVWW|Cu,WBtBBP1V u@uWVI($H)EÀE jjVe u098VBV1jEEPV u1}u+WV(uVPBVOjjV uV"BV!}u E t) FBP_^[]VWt$ ;5)rT R*~BWt$t$V W6_^UD$ ESVW}u)Ht. tOEƆ. @jMQWP4*CuEBu 0Am6V%EE) M 9 u $] )EÉE;<< tGMI;vO9 u  GjEMEPjQ4*Cu BE}uL}tF)Ht} u 5 CE.'9] u } u jjV } t C;}9)@u )+] ]E3_^[]VWt$ ;5)r *~BWt$t$V W_^VWt$jt$|$Wv%PBuBtP+  )_^ËD$ CԋȁH$ D$<$ʉ @$Cu 3v' CC&&@u-~ H=t$u4@! 3u j UVWu ;=tu' t uVuыt uVutuVuuu tu+uVuu3t t uVuы_^] f~ HR3(t$;(h VlP5C5\֡LP^SVW5C3(tt t t P3GB|ΡLP֡\P֡lP_^[UD$VW<(?uGju j:j?u V7C V~j7C_^]UD$4(C]SVt$WU~F @tFF Ff F 3 F $F FF u&Ptpu Wf'u V'F tGF+@FHۉF~SvWb ) t jjW D$ND$SPW) ;tN D$% F ]_^[VWt$ ;5)r *~BWBt$t$V W_^USVW3u9uu3PE) t jjPZ E)t~E} +E ;E+E ;Es G< uF CC+=|֍j+؍EPSQE4*Bt;EE;}8jEPEuu 4*BtEEE BE}uj}t/}uX VM u:E)@t E 8u3"E+_^[]V*lC4$tGjpjt5V4$PCt$CFFP1F3^4$tPhC4$V4$PdCuLjpjt0V4$PCtCFFFP1 j2^Ã=4$Vt$u4$PdCtiF$t P]F(t PMF0t P=F8t P-F@t PFDt P Vj4$PC^%C$SVt$0WUlF\$<,&l$@u~E ֍Fim$L$D&kщl$,Kt$$\$ L$k<T$Hk<T$L=&U|tD$P t]_^[$VWt$ 95)w \~BW6)t,VP`CuBtR0= WP_^VW3j950$rVd0$tG ;vj _^átth3h3h3h3jjt$  jjj SVt$|$\$p$u?=xt$5p;5xrtЃ;5xsh3h3Ch3h31t t$ C^[j j VW|$t$ ;vtЃ;w_^=$t=D$s$@$SVWp=Bt#h@vSׅthjSׅt pr̡lt0hjPׅtƅu_^[jhhjBu39 llȣ$Q;v ʃ;wÃ=$ut $$jVt$F t*t&v-f FF^ËL$SV3WU3atrtwt3q 3ҋ5x25x2Ȁ9)D ta+t<3RtcStpTt}bcnt3t3΀@t3{@vt3ndt3\ Rt3IDt3;΀6t3.@!t3 t3@A9ht$ Rt$ и|D$ 3p HHHP]_^[SVW03j90$rOC u&0VoC tV ;0$v3CC CCj_^[VvL$3$9t"F=&rr"$wB 85 $(rw  ^ Ã=2VuD$a|.z) $jt$j^U=2S]ua|z }*=~ jS fXunסDHtUE] ]EjMjUQPRh52ZuuE EM []S3VWU5|$$tPNu;>^Wʀ+˃;L$u$=$ŋ6$ux$;|$tirue:.Oـ+݃;\$s@uC $=$;=|$uĉ|$ 6I+΃;L$r]_^[Ë;|$uL$SVW3Ҹx3+X;s'u9xu B=xr|QVQR_^[S$VW9$v$|$;sjh VjBt6\$WSk pxǁttS_^[3SVWU|$k tx+ȋp;L$r|-$D$+ҁD$+F;vjhVSBuBt t"VtS*t3]_^[Vht$ jk pBuh3pxt^Ã=l&u(j =l&u l&j UVW3j hp&c;umTP\CTk/=h&t5Ƌh&: u tH:Ju u3h&PVlh&j  &jVP >-uVi&<+t<0|<9F>:uHFVk<&>0| >9F>0}>:u FVk&>0| >9F>0}t &أ&&tj$&VPn $& j 5_^]ËL$SVWACy ~ }qV~u 4&4&uFPimЍ2%+Au;u y|;|u y}3_^[Vt$F @t F F u VFvvv FtNtIF uN)ႀu F ~uF t uFNH$ F F^SVt$W\$;w3\='tPj~-&tjG+O;w &uj[+ǃ+F_^[Ã='SVt$ WUut$t$VJ aj\$T$ t(J脍&t=CFtAJFCEuFJt FJuj]_^[ÈFCuF(D$u(TCu(%XCËD$=t=t=t=t3 W3&@󫪿'''_USVWjuG95'uj3uj3E(900E=)rEPVPC+&3@󫪃}M8Et)At";r&AB;s9u׸&@=rV5'&3@3󫪋EkEE< (?t.Ot';r(&@_;s?uBrV5''3'Ejk0(3O3''j'3`3+=(tjD3j6_^[]jUHSEVWPHC}tY}u쥋E=|u)ȃE=| UE*t3*|C>uT*tGPLCt2Ƈ)P%u )@u))G*v_^[]Ã/SVWUuJh /6ˀ.&}*u$EPEЅ؀EMk EDЉEE}*u#EPEEMk EDЉEEIthlweE 86ux4u E πNEE EDAtMEPVQ\ E E EMEPVQ? E E EE_^[]À ހـEC5_N$N0uEPPPEEE @}EE0u}tEEEPEvut/EE3E9}EEffqPEP\E;}|LEPt2Ht+tE8ME8M `/E+эyE @eEP!M tfEEÀt2-EEEÀtE0EEQEǀt&EPEUmE E' t*@EPtEU9s"@EPt]EULEE@t&} |}sEM؃EـM EME܉Mǀuee}} E}u }uEEEEM }u}tOEؙREUuuuuuuu܃0E}9E܉U~MMEMM뛍}+}EE80uGME0u }guEEuEuPMMUURPQ2t}uP3}guuP2-u E}+эyLE.}u`/E}EMt?t GEMu+}}[@t&tE-tE+ t E EE+E+ EuEPVuj EPVuԍEPtuEPVuj0]}tI~EEOE܉ME܍MEfPQ~/MQVPMQKMMuEPVWu.uEPVuj ^HPG}GGHHRH I'IpIpIIJ,J2IJ{IJJJJIKKxM   T$BHBxL$ A Rt$D$ uSVt$ W|$U\$l$ O~USV }u]_^[SVt$ W|$U\$l$ O~UFSPf }u]_^[ËD$AËD$QËD$fAVWj3F);~>)u#wBV()tV~)G;| *j];=)}_^UD$;)Vs>4*>u2t ttu j u ju j4CE 3 ^]ËD$V;)sE)t<4*>t0t t tjj jjjj4C3f d^ËD$9)v)t *+ )U SVWuEjjV EjjV M +؅~q3hV E;}PQV t+߅y8u f }uVh E}CjQVj VP0CɉMu BjuV% E_^[]ÃSVW3U:t:=tF+р:uP)X$u j ;t^+щL$;=t?QEu j }++}ȃ\$;uE]_^[UVWh؂Vj,C5h$8t5EMPQjjVSEEPDu jEMPUQPWVEH=P$_L$^]ËL$ST$Vt$ WD$U|$t T$D$>"tEt@F&t t@F t t ūuNStO@IF>"t3t(҄&t tF@t@F>"ut@>"uF3> t uF>|$t T$D$T$ 3>\uFE>\t>"u#ut V:"u3ۃMtt\@MutFu t= t8t.t&tF@@&tFFat@|$t T$T$ ]_^[h1thËT$3ɸp1W9t A=1r9p1u)t1jD$P+I*QRPB_Vt$h袾Ft N FN FFFFF^ËL$; )r3 )@ËL$VD$ Wpt ?t GNu?u+_^à 2SVWUuIh2tT=DCjjjjj6jj׋t=U{؅t5jjUSj6jjׅt(jSe>u3]_^[øjjjh3jh3jjMt3u 3ËL$VD$ Wpt ?t GNu?u+_^U =(3SVWuQh43?t9|$t-8tHC8uPWtB;4;|$}ۍPWe 1AX$|$td+AQ[؅tG++ȃ|$L-(CI#PSS3 3]_^[SVWX$U;t/l$t$W3V u (<=tt;uۋ+X$]_^[+X$S3VWt$;t[N>t @у:uPl؅u j >t6ƃ?>u_^[ÃSV\$WUut$ |$ uS 3v3j sF$+Ãt}@$+ËD$;rAD$WPV t.WD$tRS蟣5N$<uN;|$sWVFt HH\$j D$]_^[ËL$VT$ W1F$<u<;5|$u |$~@$+=$>5$1F$<tċD$_^9Ã='SVWut$t$˵jt$|$fftVÄ&t%Ft1 ;ujF7;tFffuj3jÃ+ǃ#_^[%$CSVW3ۋ|$U8tE}uM;r|  ``     0w,aQ mjp5c飕d2yҗ+L |~-d jHqA}mQDžӃVlkdzbeO\lcc=  n;^iLA`rqgjm Zjz  ' }Dңhi]Wbgeq6lknv+ӉZzJgo߹ホCՎ`~ѡ8ROggW?K6H+ L J6`zA`Ugn1yiFafo%6hRw G "/&U;( Z+j\1е,[d&c윣ju m ?6grWJz+{8 Ғ |! ӆBhn[&wowGZpj;f\ eibkaElx TN³9a&g`MGiIwn>JjѮZf @;7SŞϲG0򽽊º0S$6к)WTg#.zfJah]+o*7 Z-%c:%s\%s%c:\%s%s%c:%c:\%c:*\NULzip file is empty, can't make it as old as latest entryabortingwas processing argumentsDynaZIP ZIP AlertDynaZIP ZIP WarningDynaZIP ZIP RequestDynaZIP ZIP Error\DYNAZIP.LOGname not matched: not found or emptycould not open for reading, will just copy entry over: could not open for reading: zip file emptynew zip file left as: was creating pattern listencryption not supportedwas getting encryption passwordnothing to select frominvalid pathinvalid datecannot repeat names in zip filewas processing list of filesmissing suffix listinvalid option(s) used with ZIP_DELETEallocating temp filenamewas adding files to zip filewas replacing the original zip fileno such option:was about to zipwas copyingZIP Response:--- DynaZIP ZIP Diagnostic Log - %s --- Function: %d lpszZIPFile: %#08lx lpszItemList: %#08lx lpMajorStatus: %#08lx lpMajorUserData: %#08lx lpMinorStatus: %#08lx lpMinorUserData: %#08lx dosifyFlag: %d recurseFlag: %d compFactor: %d quietFlag: %d pathForTempFlag: %d lpszTempPath: %#08lx fixFlag: %d fixHarderFlag: %d includeVolumeFlag: %d deleteOriginalFlag: %d growExistingFlag: %d noDirectoryNamesFlag: %d convertLFtoCRLFFlag: %d addCommentFlag: %d lpszComment: %#08lx afterDateFlag: %d lpszDate: %#08lx oldAsLatestFlag: %d includeOnlyFollowingFlag: %d lpszIncludeFollowing: %#08lx excludeFollowingFlag: %d lpszExludeFollowing: %#08lx noDirectoryEntriesFlag: %d includeSysHiddenFlag: %d dontCompressTheseSuffixesFlag: %d lpszStoreSuffixes: %#08lx encryptFlag: %d lpszEncryptCode: %#08lx lpMessageDisplay: %#08lx lpMessageDisplayData: %#08lx wMultiVolControl: %#04x wZipSubOptions: %#04x lResv1: %#08lx lResv2: %#08lx lpszExtProgTitle: %#08lx lpRenameProc: %#08lx lpRenameUserData: %#08lx lpMemBlock: %#08lx lMemBlockSize: %ld Busy, can't re-enter nowUnexpected end of Zip fileZip file structure invalidOut of memoryInternal logic errorEntry too big to splitInvalid comment formatZip file invalid or insufficient memoryOperation interrupted by applicationTemporary file failureInput file read failureNothing to do!Missing or empty Zip fileOutput file write failure, possible disk fullCould not create output fileInvalid control parametersCould not complete operationFile not found or no read permissionMedia Error EncounteredInvalid Multi-Volume control parametersImproper use of Multi-Volume Zip filespecify just one actionzero-length name for entry #bad extended local hdr for bad compressed size with extended hdrextended local hdr not found for extraneous central hdr signaturelocal offset in central hdr incorrect for names differ in local and cnetral hdrs for made by version %d.%d on system type %d: needs unzip %d.%d on system type %d: local flags = 0x%04x, central = 0x%04x: undefined bits used in flags = 0x%04x: unknown compression method %u: starts on disk %u: unknown internal attributes = 0x%04x: unknown external attributes = 0x%08lx: has %d bytes of extra data: local extra (%d bytes) != central extra (%d bytes): ZIP file error... missing end signaturemultiple disk information ignoredwrong count in end of central dircentral dir size is incorrectcentral dir start is incorrect has a preamble of %ld bytesgarbage at end of zip file ignoredcannot remove parent directoryempty name created while including pathsname not matched: ct_init: out of memoryblock vanishedcan not translate EOL in binary fileswindow allocationhash table allocationItem %d of %dMemory to Fileunexpected error on zip filecan't rewrite methodzip error: STORE not supported for pipes or deviceszip diagnostic: GetVolumeInformation failed zip diagnostic: GetFileAttributes failed invalid lengthoutput buffer too small for in-memory compressionPlease insert the first disk of the Multi-Volume set. Press OK when ready or Cancel to abort.Please insert Disk Volume %d. Press OK when ready or Cancel to abort.Please insert Disk Volume %d of %d. Press OK when ready or Cancel to abort.Volume could not be Wiped or Formatted.Invalid First Disk; Try again.Please insert the last disk of the Multi-Volume set. Press OK when ready or Cancel to abort.Target Media is NON-Removable and can not be used for a Multi-Volume operation.The same disk volume can not be used as both the source and destinationZIP File open error!ZIP File read error!ZIP File write error!Formatting Drive %c:...Formatting Cylinder %dWiping Drive %c:...Initializing Media...Processing Item List... Please wait.Target media is write protected or missing. Please insert a write enabled disk.\DZIPLOG.TXT--- DynaZIP ZIP Log - %s ---%s [Added]%s [Deleted]%s [Memory]Version: 3.00.16 - %s %sefHgThpijkl0P`x(H\$Pd|,@Tl4Ld|$D`0L`t0L\t     $ 4PD0l12345 607\89:; <0 =P >d ? @ A B C4 DX E| F G H I J KL L` Mx N |      4 h     h  (HX@YXZp[\]^ \l .Z:.zip:.zoo:.arc:.lzh:.arj%s () %s%s\..wbr+br+bw+bwbrb%s %s%s %s%s %s%s %sr+bc0qmp9w48rmualzskdfjvn091287n5crp0um1 p920c8u4enoq)(&b(*&%v334&^.zip-rbrb%d/=bootsectorBOOTSECTOR\\.\vwin32\\.\%c:bootsectorBOOTSECTOR\*.*\\\*.*\.. ((((( H .4$$$        ! 5A CPR S WY l m pr   )    pPSTPDT&&SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecTZ;Zx0Nm:Yw/Ml`y!@~ڣ ڣ Ϣ[@~QQ^ _j21~ kernel32.dllGetStringTypeAGetStringTypeW(null)X/(null)d/R6002 - floating point not loaded R6008 - not enough space for arguments R6009 - not enough space for environment abnormal program termination R6016 - not enough space for thread data R6017 - unexpected multithread lock error R6018 - unexpected heap error R6019 - unable to open console device R6024 - not enough space for _onexit/atexit tableR6025 - pure virtual function call DOMAIN error SING error TLOSS error runtime error // / 0$0P00001x,1y<1zL1\1`1 x kernel32.dllLCMapStringALCMapStringWacccccckernel32.dllCompareStringACompareStringW.exe.cmd.bat.com?*./\^cj P@G,BAHCANICDD"D.D:DDD\DhDrD|DDDDDDDDE EE(EBEZEhEtEEEEEEEE F"F0FFF\FlFzFFFFFFFFFGG,G:GJGVGdGvGGGGGKIIKKKrKbKLK8K&KKJJJJJJJJJzJVIjI~IIIIlJIJJ0JHJVJ6I I IHHHHHHHHtHhHZHJH| E|MG>|ry39|t| ||&||||P|R|I|K| &| |HI|K|R|P|rr }u  t}_3^DXXXGHH |2I|K|PRQ:rذTYZXr |.|$|I|K|p t);|s6|ˆO|36|%|M|ôM| 6O|ʆ$|6%| Non-System disk or disk error Replace and press any key when ready IO SYSMSDOS SYSU4VS_VERSION_INFO?StringFileInfo040904e4DCompanyNameInner Media, Inc.NFileDescriptionDynaZIP-32 ZIP DLL0FileVersion3.00.16FInternalNameDynaZIP-32 ZIP DLL@LegalCopyrightCopyright (c) Inner Media, Inc. 1993-1997, All Rights Reserved.,LegalTrademarksDynaZIP is a Trademark of Inner Media, Inc.(OriginalFilename6 ProductNameDynaZIP-324ProductVersion3.00.16DVarFileInfo$Translation CharlesRBasin72665100+070>0I0N0[0c0m0y0000000111,2y2222#343~333333O4Y4b4l4v4444445/545>5C5J5O5V5[5|555555555555 66'696E6O6^6i6p6w666N7T7o77777777778888i8p8|8888888888889%959M9U9g9v9999999999::/:5:@:M:S:[:a:q:w:}::::::::::::;#;/;<;B;M;e;j;s;;;;;;;;;;;;<<#<*<0<7<=2>U>r>>>>J?\?a?}??????00@0`0|00000011!131I1W1j1z111111 222"2&2,262A2I2Q2V2a2k2r2w2222222222263B3H3N3T3Z3d3h3n3w333333333333 4444"4+40474>4D4N4R4X4e4o4{44444444444445*575A5j5555555556 66%696U6t66666677;7K7y77788N8^8888889:9J9u999999&:6:a:q:::::#;3;^;n;;;;;<>D>T>>>>> ??G?W?????@X&060d0t00000"121`1p11112.2>2l2|2222222363D3Q3[3333333333344/4S4Z4l4r44444444444445A5W5^5i5n555555555555556676D6i6p6666671797N7g7m777788;8W8y8888888=9V9999994:B:o:x:}:::::::;L;o;~;;;;;;;;<<(<4>2>\>>>> ?????PH0X0{000000001E22223K3W3]3h3t3z3333333333334444&40474=4G4Q4U4]4g4p44444X6x66666666778#8*858^8899+909N9S9r999::::?:]:::::;;;!;k;z;;;;;;;;;;;*<3>?????????????????`p 00`0t00001q1111112P3333333334 474?4N4444445#5L5Z5i5n5u555555555555 666,636@6O6U6[6a6g6m6s6x666666666667 777M7k7|777788H8a8h8q88888j9w9999999:*:6:<:E:K:Y:^:d:k:r:y:::::::::_;r;y;;;W<^>)>B>M>X>]>c>i>z>>>>>>??D?V?{????????????p 00040:0?0H0P0e0n0v0|000000000000000011#1-1;1g1s11111112#2,2K2V2i2r2222222222/3O3`33:444]5c5}556777788|88888!999E9K999999 ::E:L:Z:a:q:x:::4;N;Z;;;;;<3>>.>3>g>>>> ??$?C?K?P?V?[?a?o???????h0"0'0-02080F0V0d0o000000000011#131G1Y1i1w11111111111 22'20282Q2{222222222233$383B3H3M3S3^3e3l3q3v3|33333333333444"4(4=4I4P4_4r4x444444444445"5,545C5z5555516B667s778F8T889$969<9^9n9x999:,:5:>:C:Q:::::::;<;;;;<<<<<%=9=O=>{>>>>>>>>?*?0?6?I?u????????? 00&0.0:0\0l000000011!1+101<1L1\1l1|1111*2S2222333#323v3{3334445q55555O6W6f66666666667+797O7e777777778 8,8S8i8y888888888 999%9:9_9m9999999999: ::#:*:0:9:K:^:c:v::::::::: ;&;,;6;@;N;w;;;;;;;;;;<6>?>N>j>>>>>>>>>>??&?,?5?C?I?O?U?[?e?r???????? 000$040o01{1111111 222C2]22222223.3<3Y3^3q333344*4844444444445 55!5'5-565O5d5y5555566.696?6I6T6[6y6666666666767A7a7777778>8^8s8888889*909V9k999999:-:4:G:e:t:::::::;; ;;;;$;*;0;6;<;B;H;N;T;Z;`;f;l;r;x;~;;;;;;;;;;;;;;;;;<%M>????????p00 000#0B0T0d0k0r0z000000111?1U1m11111R222 45555577788888!:*:6:<>???,,0m0000011'1:1h1p11111111 2 2%2-2^2d224444 5535E5[5m555555556'6:6N6c6z66666667787d778888889'9;9N9_9z999999:V:f:v::::::; ;;;$;/;7;=;J;~;;;;;;;;<'<=#>5>K>]>r>>>>>>>??6?[??23U3`3p333335$545D5T5Z5i5y5555555555566$696N6a6v666666677-7A7777777=8o8888889p99999:%:x:::::::::;;#;);1;8;>;C;c;~;;;;;;< <.<4<<<\<{<<<<<<<<<<@=Q=x=====>> >,>C>P>\>}>>>>>>?(?/??????t 00>0S0Y0b00 111%1o1v1111111111$2*272A2J2S2g22222333334?4P44444444455&5A5G5b5r5x5555555555)6/6P6b6v66666666666 7#747>7H7O7S7[7_7i7q7777777777 88(8/8j88888888888888999"919:9C9M9W9]9i9n9|99999999999::1:7:=:F:::::::::::::;;;H;V;`;m;w;;;I<J>}>i?????02~3 5/5k555E6J6O6V6e6k6|66S8~88888889 9/9Y99999:/:?::::::0;`;g;u;;;;;>+>B>]>m>>>B?^????????00000 0$0(0,00001R111 22'2,292J2[2222222223 3.393g3p333333334(4R4s4444%5j555556R6u66666677#707D777788888887999999;;<<f>>>>>>>>>5?h?l?p?t?x??< 0011I2s222/335E55@8W889C:J::78?? +00001Q2222273344444455777777%8 9/99999998:W::::::8;D;d;;;;< <92>:>Q>>>>>!?)?v??0,I0b000001_11111112222&2D2K2U2l222233#3T33334,464h4z4444444555'505C5J5O5\5a5~55555556%6W6e6l6v666657E788888*979\999:):?:~::::; ;;;V;^;d;l;;;;<<$<>>$>->D>O>>>>>>$?=?D?L?W?h???@01 1E1g1122"2/29222222233*3]3z33333334443484?4V44445 5535@5T5b5k5v5555555555666*6E6\6c6w666 717L789#99o:<<>>>>>>>>>>>>>>>>>>>>>>>>P0 0"030A0Z0n0x000001F1N1X1Y2~2222|3333333N44x5555 66$6>6G6S6666667 77$7?7X7_7g7z7777777(8D8w8889: :':k:u:::::::::;(;I;Q;h;z;,<6>>'>q>>>>??`;0?0N0g0z0O1_1111 22&2@2K2^3j33344Q4\4b4t4z444444445 55#595U55D6T666666Q7]7m7s777777778889S9c9:;;&;B;;;<=D=>>$>6>~>> ?P???ph80N000001@1V1a111 2H2h2q2z22222222333u33-556`777(808>88?9Y9999:4:J::(8,808H8L8P8h8p8h000001 111$1,141<1D1L1T1\1d1l1t1|111111111111111112 222$2,242<2D2L2T2\2d2l2t2|222222222222222223 333$3,343<3D3L3T3\3d3l3t3|333333333333333334 444$4,444<4D4L4T4\4d4l4t4|444444444444444445 555$5,545<5D5L5T5\5d5l5t5|555555555555555556\777 : :L:\:l:0?8? 04x4|4 6$6`?t?08t1|1111111111111122333 3333 T!F   AdHocJMZ@ !L!This program cannot be run in DOS mode. $PEL 2 7& , @@@pP.textH$& `.bss@@.rdata4P*@@.data ` ,@.idatap 6@.edata@@@.rsrcPB@@.relocxD@BUSVW$`@3fhuQ h `@QVt A@&h`@P2yA@h`@P t A@&h`@P/A@h`@P Ph A@} uuuVu=A@u`@W@`@V@`@7@`@6@V B@Pr@5 B@r@jMjr@jQӅtE5r@=r@A@tMQPr@u EP֍EPjEjjPӅA@u̡@@Pq@A@tPr@E3_^[](D$D$@SVW3ۋ|$8U\$hX`@\$ W|$(r@h5r@D$(SS- r@D$,Ջr@D$,D$0L`@D$4<`@D$PftT|$ hD$@D$@3|$(W։D$(jՉD$,|$0D$|$D$4(`@D$Pf=@]_^[(U4SVWu5 A@tr@A@u r@A@jVjjhhhhjh A@h<`@jxr@u37hd`@jjjjjjjjhjjjjq@j@@h*@ A@V5 B@jeP|r@M܋=r@QA@P׍M̡A@QhPr@P׍EP5A@jr@r@PjhhVWPXr@t*WjhhVh$`@r@jhhVE jPhhVhVr@Pr@_^[]U B@SVW5A@Pr@jMjr@jjQӅt5=r@}uj]EP׍EPr@jEjjjPӅuэ=r@PjhhV׋]SPXr@tSjhhVE jPhhVhVr@Pr@_^[]U B@SVW5A@Pr@jMjr@jjQӅt5=r@}ujEP׍EPr@jEjjjPӅuы}t>r@PjhhVWPXr@t*WjhhVh$`@r@jhhVE jPhhVhVr@Pr@_^[]U B@SVW5A@Pr@jMjr@jjQӅt5=r@}ujEP׍EPr@jEjjjPӅuэ=r@PjhhV׋]SPXr@tSjhhVE jPhhVhVr@Pr@_^[]USVW} tjHxO S!\uMQWur@RjujVr@jjVr@h$`@Vr@uVr@؍EPVr@E̍MPQpr@Ej!jMEQr@j r@PSq@jE r@PSq@uuuuSEq@jVr@EtX@@PSq@jESr@M܉Euhl`@Qhr@ MUj%QjRSdr@uSr@uSq@uSq@uSq@SVr@|PVs@j r@PSq@5@@SEq@jESr@hAAAEjjq@PESq@jEEHPuSq@uuSq@uuSq@j r@PSq@jEHPuSq@EHPEHPSq@uЋEHPSq@jMjQr@E E9E}EԋE9E~EЉEj r@PSq@u؋EHPuuSq@}tLEԹd+EjEẺE r@PSq@EfHPjVr@E@PuuuSq@hPVr@Pr@tj$EPE*jQSdr@uSr@uSq@uSq@uSq@uq@|QVlr@uMQWVr@-E PuVr@EPVr@jẼE PVr@huur@}}3d~du juVr@;tjjVr@ujVr@;uWjVr@u jjVr@pEPVr@jVr@dE̋Ej Ǚ UREVr@0jur@"juVr@Vr@ jur@3_^[]%q@%q@%q@%q@.W|$Wr3OL$u$ tb tVtGtPދtAG t4t‹ tG' tG몋GG.X_UVWS} 3I:IM}3I+Uv%u uыߋMuCE3[_^UWV}u ׋M t2^_dUjhP@h@,@Pd%`SVWeDr@`@%`@`@-`@%`@`@`@ E Tr@ w,F>"t%]؊tP tFF>"u>"uF>t > wF>uEEPPr@E tEPVjj\r@PP"EEuPËeuEE_d^[]t$n thh`@Pjs@h|`@á4E@thi@hi@hi@hi@jjt$  jjt$  `@|$SV\$`@u?=8E@t$50E@958E@wtЃ958E@vhi@hi@&hi@hi@u t$ @r@^[VW|$t$ ;vtЃ;w_^USVWUjjh"@ur]_^[]ËL$AtD$T$SVWD$Pjh"@d5d%D$ Xp t ;t$$t4v L$H |uTd _^[3d y"@uQ R 9QuVWt$ S;P0u@$u 5`a@L$ `a@x Ta@ Pa@; Pa@~! Pa@k `@ Ta@ Iu=\a@=u \a@p=u \a@]=u \a@J=u \a@7=u \a@$=u \a@=u \a@\a@Pj҃=\a@@p҃5`a@ t$8r@_^ú`@L$9 t Xa@k `@;w+#j3ҋL$Via@t$ut Eg@#3t^t`@SVW3U:t:=tF+р:uP`@u j t`@;t^+щL$;=t?QEu j ++}ȃ\$;uE]_^[UVWh@@Vj4r@"tEt@Fia@t t@F t t ūuNStO@IF>"t3t(҄ia@t tF@t@F>"ut@>"uF3> t uF>|$t T$D$T$ 3>\uFE>\t>"u#ut V:"u3ۃMtt\@MutFu t= t8t.tia@tF@@ia@tFFat@|$t T$T$ ]_^[b@D$ub@,r@ub@%uTc@tCP0r@t2ƃc@P%u c@@uc@c@Cc@v_^[]`@t=`@s$e@@(e@jhhj$r@u39 $B@$B@ȣe@Q;v ʃ;wÃ=e@ut e@e@VC20XC00USVWU] E@uwEEEECs {tV v|t:VUkT]^] t(x1{SkVSR vC T{ v4문UkjS]]_^[]UL$)APAP]3ɸ g@T$9t A=g@r9 g@u$g@3ái@Pt$SVWU|$v3\$3Wu@WtWuυt9-i@tWi@u3HN@$++ǃtWV0t HHF$F e@F$]_^[VWt$ N|$@$+;v tNL9H3_^j6S3VWU5 e@e@tPNu;>^Wʀ+˃;L$ue@=e@ŋ6e@ue@; e@tirue:.Oـ+݃;\$s@uC e@=e@;= e@uĉ e@ 6I+΃;L$r]_^[Ë; e@uSD$VW%3ɾ8B@3+^;s(u9~uу A8E@r߅|PRPQ_^[S$e@VW9(e@v$e@|$;sjh Vj$r@t6\$WSk 0B@8B@ǁ4B@tS_^[3SVWU|$k 4B@8B@+ȋ0B@9L$w|- e@D$+ҁD$+F;sjhVS$r@ur@t t"V4B@STt}3]_^[Vht$ jk 0B@r@uK30B@8B@4B@^UVW3EuuuuEE;E;E;E}PW^uMIu M1Eω~N7E@$<PE8e@uFU $;e@v e@U EMP1RVTMEQV@J$+QuU MQhe@RVe@5 e@5e@EPe@HP[tE@$JU +׍Ee@Pe@VQuBEP5e@u V5e@,=e@uE@$E e@MQPu Vp e@@$;v N@$+;e@r5 e@35E8t( e@E0E05e@UE8uݸ_^]ËT$SVWzt$$<tMN$<uD$ljF$ F-\$߀;tL$8__:_2^[Á=e@e@VuTe@T$@$;v;e@$;w)5e@H;wD$ 0F$+ƒ@^%Hr@V!@m!@Sample Microsoft Windows Application /T=/z/u/n/cDZProgStatusDisplayDZProg32ClassMainMenuDUNZTESTHelv%d%%"@runtime error  `y!@~ڣ ڣ Ϣ[@~QQ^ _j21~@ e@e@R6002 - floating point not loaded R6008 - not enough space for arguments R6009 - not enough space for environment abnormal program termination R6016 - not enough space for thread data R6017 - unexpected multithread lock error R6018 - unexpected heap error R6019 - unable to open console device R6024 - not enough space for _onexit/atexit tableR6025 - pure virtual function call DOMAIN error SING error TLOSS error runtime error 0e@Xe@ e@ e@e@f@0f@Tf@f@f@xf@yf@zf@ g@g@g@g@ ((((( H p$sr$qudrpbvqpvqpvqlvvvvVv4v$vuJv@vuvvuuswwwwwww~wbwwHw:wVwwv(w svuutuuZtHt2t"t@ubussssssssps\sHs2sPuu0uuttttttttttpttuuxlvvvvVv4v$vuJv@vuvvuuswwwwwww~wbwwHw:wVwwv(w svuutuuZtHt2t"t@ubussssssssps\sHs2sPuu0uuttttttttttpttuuxilstrcmpAulstrlenAKERNEL32.dllSetForegroundWindowVIsDialogMessageADispatchMessageA,TranslateMessage GetMessageA7UpdateWindowShowWindowRegisterClassAgLoadCursorAkLoadIconAGetDesktopWindowSetWindowPos#GetSystemMetricsGetDlgItem3GetWindowRectHCreateDialogParamARCreateWindowExAGetForegroundWindow}DefWindowProcAPostMessageASetFocusPostQuitMessageReleaseDCGetDCEnableWindowSendDlgItemMessageAPeekMessageA BringWindowToTop:GetWindowWordHInvalidateRectGetClientRect SetWindowWord5GetWindowTextA SetWindowTextAEndPaintDrawTextAAInflateRect BeginPaintIwsprintfA=CopyRectUSER32.dllFDeleteObjectGetStockObject+CreateFontACSetBkModeBSetBkColorGetBkColor<SelectObject,Rectangle LineToMoveToEx7CreatePenGDI32.dllsetUnzipExternalCancelgetUnzipExternalCancelDUNZIP32.dllsetZipExternalCancelgetZipExternalCancelDZIP32.dllGetModuleHandleAGetStartupInfoAGetEnvironmentStringsGetCommandLineA7GetVersionbExitProcessRtlUnwind&UnhandledExceptionFilterGetModuleFileNameAGetACPGetOEMCPGetCPInfoGetStdHandleGetFileType3VirtualFree1VirtualAllocGetLastErrorMessageBoxA 2n(D`VW67*{€ۀDZPROG32.EXEDlgWndProcMainWndProcMajorUnzipStatusCallbackMajorZipStatusCallbackMinorUnzipStatusCallbackMinorZipStatusCallbackStatusWndProc 2 2e0 2 H`@PAMS Sans SerifPB(;CancelPDZProgStatusDisplayUser1PDZProgStatusDisplayUser1 0H0[0f0000000041=1A1G1K1S1W1]1a1g1n1t1z111111111112'262A2O2[2g2o22222233*3/373I3l3s3x3}33333333333 4\4b4h4o4v444444445!575555555555 6)61696B6J6Y6j6q6~6666677=7D7X7i7p7}777778%898J8Q8^8o8888889$989I9P9]9n99999:::::::::; ;;;&;<;E;T;\;h;v;};;;;;;;;;;;;;<<0<=3>E>S>l>{>>>>>>>>>? ?? @80=0T0Y0e0j0p0{00000000)1D1111111112-252>2G2Z2a2f2s2x2223`3333333334404C4V4i4|4444444445)5J5556'6,626=666687838r888888899&9@9S9`9n99999::#:A:F:S:_:k:p:u:::: ;;;.;E;R;f;t;};;;;;;;;;;<*<2< ==&=5=?====h>n>>>>>>????H?i??????0X0 00F0L0T0b000000111112E2O2]2c2q22222223#3+3B3T333344D4P 00`0|05 5$7,747<7D7L7T7\7d7l7t7|777777/ ActivityF    MZ@ !L!This program cannot be run in DOS mode. $PELw4! 7J4.`P r0@.textHJ `.bss`.dataN@.idatarl@.edata r@@.rsrc0t@@.reloc@ x@BUD$ tt06=Pt hPC=th-ELa] =`Vtn`hlxt+h|V|u Vh`XP@u@X^Ã=`U X9ME ($EdEtE|ExEnEdEZEPEFET@u@T^Ã=\UR T9MCE $7$EE E$E(E,E0E8E<E@EDEHELEPETyE\oEdeEh[EpQExGE|=E3E)EEfEf Ed3]  '4AN[hu=\UT9EE $$ $(,08<@DyHrLkPdT]\VdOhHpAx:|3,% d]$+29@GNU\cjqx=\U T9ME H"~$huhP O KhuhPak O *huh`J _ huh)  juh ? huh  huh  huh  jhuh@ ? Lhuhl  .huhN hh3] v9Zx        =\UVWs T9MdE H$W $u}FPhPW #u}FPhPaWd u}FPh`WG u}FPhW* u}FPhW u}FPhW u}FPhW xu}FPhW ^u}FPh@W Du}FPhW *u}FPhWk u}VWD73_^]~,F`z        =\Ut= T9Mu2=u =du%h ]=\Ut& T9Mu\h3]UD$VW@P@ Pa3xxxxxx x$x,x0x8xtVu3uuQlhP BWhPT P;hP7؅P ECShSt@ hSt@ Sk| uS[Dh j@hPȉtTESP6WhP8 W_^[]Wo3UD$ tM9tu3]ÃUD$ Vtt t=du6 u,u utVp=} Vul^]UL$ Vttt=hu6 u,u uDtVp=} Vul^]USVWh j=h׉EPohVlEPhl؅ Sj׉EPWSjh-h Vth,Vt=@@hDPl3QtfEMUQERPWt#f}t}tuVth`Vt;u$hdVthVthVtu\ud$hVthVthVtE HPVu+ u\udE HPhu _^[]USVWh j=h׉EPohVlEPh؅ Sj׉E!PWSjh[hVthVt=@@h Pl3QtfEMUQERPWt#f}t}tuVth<Vt;u$h@Vth\VthlVtu\ud$hpVthVthVtE HPVuY u\udE HPhu0 _^[]%L%T%%%UWV}u ׋M t2^_ËT$3t:t4Bt :t'B:t"B t tt uBB+UWM3E f‹}ڃt ;r+ʇʋʃE_SVt$ WF @t F +ށS,VS_^[VWt$ F t:V6Vv}Ft PEF _^ÃSV\$W|$U\$3Zl$ VOt,EHEx MAM Ut!C< uVD$]_^[;\$uD$.W|$Wr3OL$u$ tb tVtGtPދtAG t4t‹ tG' tG몋GG.X_UVWS} 3I:IM}3I+Uv%u uыߋMuCE3[_^SVt$ WU9=~jPJ fAtF>F-t+u>F3ۃ=~ jW fxt k \;>F͋Ã-uۋ]_^[t$bVWt.Vt$t$t$V_^j@t$ t$ ËD$ ԋȁ ʉ  u f 3v  u@u-~ H=0u  3u j,  UVWu ;=tu' t uVuыt uVutuVuuu 1 x tu+uVuu3t t uVuы_^] f~ HR3t$hV P55֡P^SVW53tt t t P3GB|ΡP֡P֡ P_^[UD$VW<?uGjsu j:j?u V7 V/j7_^]UD$4]j {t$j ËD$Vt]0N;tNN=Lt!<9Hv@$+;Ls  <9Hu5<^VWt$ ;5xr. ,"~BWVW_^VW|$ tuj8j,;tWPu 3WtV! Ƈ3_^Vt$F t*t&vf FF^Vt$V1t!F @tv^SVt$ W3F Ȁu:t3F+؅~(SPv ;uF t$F N FF_^[jÃSVWUj3l$<|$9rlC t[VC t4uSt!EutSuD$V7 9sj"ŃtD$]_^[?=,tVt$F @t F F u VFvvv FtNtIF uNႀu F ~uF t uFNH$ F F^UL$AS=w HS݋DBt]EM MEjMjUQPRjZtE#E []ËL$SV3WU3atrtwt3q 3ҋ5 5 Ȁ9)D ta+t<3RtcStpTt}bcnt3t3΀@t3{@vt3ndt3\ Rt3IDt3;΀6t3.@!t3 t3@A9ht$ Rt$ "и|D$ 3p HHHP]_^[SVW3j9rOC u&VC tV ;v3CC CCj_^[áthx hp hl hh jjt$  jjj SV0|$\$,u?=t$5;5rtЃ;5sh h| Ch h 1t t$ ^[j Zj VW|$t$ ;vtЃ;w_^V4tGjpjt5V4Pt$FFP F3^l4tP4V4PuLjpjgt0V4PtFFFP  j^Ã=4Vt$u4PtiF$t PF(t PF0t PoF8t P_F@t POFDt P?V6j4P^t=sT@XSVW=t#h@vSׅthjSׅt r̡|t0hjPׅtƅu_^[jhhju39 ||ȣ@Q;v ʃ;wÃ=@ut @@ÃSVW3U:t:=tF+р:uPu j ;t^+щL$;=t?QEu j y++}ȃ\$;uE]_^[UVWhH`Vj5$8t5EMPQjjVSEEP u jEMPUQPWVEH= _^]ËL$ST$Vt$ WD$U|$t T$D$>"tEt@Fat t@F t t ūuNStO@IF>"t3t(҄at tF@t@F>"ut@>"uF3> t uF>|$t T$D$T$ 3>\uFE>\t>"u#ut V:"u3ۃMtt\@MutFu t= t8t.tatF@@atFFat@|$t T$T$ ]_^[|D$u|u|%ËD$=t=t=t=t3 W3`@󫪿pdh_USVWjuG95duj3uj3E900E=xrEPV+`3@󫪃}M8Et)At";raAB;s9u׸a@=rV5d`3@3󫪋EkEE<Ř?t.Ot';ra@_;s?uBrV5dp3hEjk03O3dpjh33+=|tju3jg_^[]jUHSEVWP}tY}u쥋E=|u쿀ȃE=| UE쿀t3>uTtGPt2ƇP%u @uGv_^[]h thËT$3ɸp W9t A= r9p u)t jD$P+IQRP_á8 Pt$SVt$ W|$j LV0j  utt VЃuƋ_^[VW|$ v3W u"Wt_W uN@$++ǃtWV2t HHF$F <F$_^3VWt$ N|$@$+;v tNL9H3_^jVvL$3 9t"F=X rr"$wB 85 (rw  ^  VWj3x;~>u#wBV}tVxG;| j;=x}_^UD$;xVs>4>u2t ttu j u ju jE 3* (^]ËD$V;xsEt<4>t0t t tjj jjjj3 ^ËD$9xvt  }VWt$ 95xwU \~BWt,VPut0 W_^VWt$ ;5xr *~BWmt$t$V W_^USVW3u9uu3PE t jjP Et~E} +E ;E+E ;Es G< uF CC+=|֍j+؍EPSQE4t;EE;}8jEPEuu 4tEEE E}uj}t/}u M u:E@t E 8u3"A?E+_^[]VW03j95rVYtG ;vj_^VWt$ ;5xr *~BW\t$t$V W_^UD$ ESVW}uHt tOEƆ @jMQWP4uEu 0Am6Vi%EE M 9 u $] EÉE;<< tGMI;vO9 u  GjEMEPjQ4u E}uL}tFHt} u 5 CE'9] u } u jjV } t C;}9@u +] ]E3_^[]Vt$hFt N FN FFFFF^Ãd SVWUuJhp u3h =|Vףh tOL$Qjh jjЅt9d u]L$,u H t$$t$$t$$t$$Qh h Vףl tL$Qjh jЅt3d ux33|$(;u=X j\ j t$(t$(PWt:Ujt)UVt$(t$(jWtt$$PVt$$l VP]_^[U3SEVEE E WuEE t2E @ud -》E t*t.t2EE@EEt/ t30t7@t;ZXEEEEE %=tYtL*=tU=tW=t5=tR=t9=tDGE"EEEEE t#EuE @t ME tE t E tJu ,*jMWuQuuuu%BPoVWWu,WBP8V u@uWV$HEÀE jjV u0@8VBV9jEEPV| u1}u+WV[uVBVOjjV] uVkBV!}u E t FBP_^[]SVWj t$t$V؅t ;v+ˋ3j G_^[S3VWU5<DtPNu;>^Wʀ+˃;L$u@=@ŋ6Du8;<tirue:.Oـ+݃;\$s@uC @=@;=<uĉ< 6I+΃;L$r]_^[Ë;<uL$SVW3Ҹ3+X;s'u9xu B=r|QVQR_^[STVW9XvT|$;sjh Vjt6\$WSk ǁtS_^[3SVWU|$k +ȋ;L$r|-PD$+ҁD$+F;vjhVSut t"@VSMt'3]_^[Vht$ jk u3^VWt$jt$|$WPutP _^UWVu }M;v ;uRу$RRRRRffFGE^_ÐffE^_.E^_Ð v#ڃ+ʋȃ$R.E^_.u_у$4SrSlS\SDSfFfGFGE^_ËfFfGE^_ÊFGE^_ËNO v%ڃ+ʋȃ$4SE^_jjjh` jj\ u \ U ?SVWuEjjV EjjV M +؅~q3hVrE;}PQVo t+߅8u }uV E}CjQV` VPɉMu juV E_^[]UVW3EuuuuE8E;(E;E;E}PWuMIu M1Eω~N7E@$<PE8DuFU $;Hv HU EMP1RVTMEQV@J$+QuU MQhDRVH5<58EPHHPt}E@$JU +׍EHPDVQuBEP58u V58,=DuE@$E HMQPu Vp<@$;v N@$+;Lr5<35E8t( @E0E05@UE8uݸ_^]ËT$SVWzt$$<tMN$<uD$ljF$ F-\$߀;tL$8__:_2^[ËD$Su FӋL$ u @uˀ%@@P[Q̃=r -+ȃ ċ@=8DVuT8T$@$;v;H$;w)58H;wD$ 0F$+ƒ@^InternalNameProductVersionLegalCopyrightSpecialBuild 0DUNZIP32.DLLsetUnzipProgTitleDZIP32.DLLsetZipProgTitler,\n\rDZIP32.DLLDZIP32.DLLDZIP32.DLL Version Information \StringFileInfo\040904E4\ No Version Information for DZIP32.DLL No Version Information for DZIP32.DLL No Version InformationDUNZIP32.DLLDUNZIP32.DLLDUNZIP32.DLL Version Information \StringFileInfo\040904E4\ No Version Information for DUNZIP32.DLL No Version Information for DUNZIP32.DLL No Version Information7``0` ((((( H .DD`y!@~ڣ ڣ Ϣ[@~QQ^ _j21~ R6002 - floating point not loaded R6008 - not enough space for arguments R6009 - not enough space for environment abnormal program termination R6016 - not enough space for thread data R6017 - unexpected multithread lock error R6018 - unexpected heap error R6019 - unable to open console device R6024 - not enough space for _onexit/atexit tableR6025 - pure virtual function call DOMAIN error SING error TLOSS error runtime error   $P x, y< zL \ `         ! 5A CPR S WY l m pr   )    kernel32.dllGetStringTypeAGetStringTypeW x aS3\xLT<:jz\P@.VPF^p~ $2>Hbdt ,B  jz\P@.VPF^p~ $2>Hbdt ,B  FreeLibraryGetProcAddressxLoadLibraryAolstrcpyAGGlobalFreeQGlobalUnlockJGlobalHandleKGlobalLock@GlobalAlloculstrlenAflstrcatAKERNEL32.dlldunzipDUNZIP32.dlldzipDZIP32.dll VerQueryValueAGetFileVersionInfoAGetFileVersionInfoSizeAVERSION.dllGetEnvironmentStringsGetCommandLineA7GetVersiondInitializeCriticalSectionDDeleteCriticalSectionOEnterCriticalSectionwLeaveCriticalSectionbExitProcessGetLastErrorCloseHandleGetCurrentThreadId"TlsSetValueTlsAlloc TlsFree!TlsGetValue3VirtualFree1VirtualAllocGetModuleFileNameAGetACPGetOEMCPGetCPInfoGetStdHandleGetFileTypeGetStartupInfoAOWriteFileSetStdHandleFlushFileBuffersReadFileGetModuleHandleAMultiByteToWideChar+CreateFileASetFilePointerSetEndOfFilew4 ( h  Q.`]<B+ } %%   ! !!!&!0!=!I!V!b!o!{!!   DZ_EZ32.dllUnzipMessageDisplayZipMessageDisplaydunzeasydunzenddunzstartdzipeasydzipenddzipstartgetunzstringgetunzvaluegetzipstringgetzipvaluesetunzstringsetunzvaluesetzipstringsetzipvaluew4w40w4 H`0((4VS_VERSION_INFO?StringFileInfod040904b0DCompanyNameInner Media, Inc.8FileDescriptionDZ_EZ320FileVersion3.00.160InternalNameDZ_EZ32ALegalCopyrightCopyright 1993-1997 by Inner Media, Inc., All Rights Reserved.@ OriginalFilenameDZ_EZ32.dllTProductNameInner Media, Inc. DZ_EZ324ProductVersion3.00.16DVarFileInfo$Translation 000*020D0S0d0m0s0~000000000001111)161@1J1T1^1h1r1|1111111111111111111111202C2\2a2k2u2222222222222233!333<3E3N3U3d3k3z33333333333333333333333444 44444 4$4(4,4044484<4@4D4H4L4P4T4X4\4b4r4444455&515D5O5b5m5555555555636P6m666667 77777 7$7(7,707_7k7v7z77777777777777788,858;8F8M8S8a8l8q8~8888888888999+989E9R9_9l9y9999999999999: : :::::!:%:):-:1:5:9:=:A:E:I:M:Q:U:Y:]:a:e:i:m:q:u:y:}::::::::::::::::;;;%;,;3;:;A;H;O;V;];d;k;r;y;;;;;;;;;;;;;;;;;;;;;;;;;;;<<< <<<<< <$<(<,<0<4<8<>> >>>>>D>V>s>z>>>>>>?7?Q?k??????????????? 0-090D0M0V0Z0_0d0i00000001$1:1M1`1111111111111111122222 2'2,23282@2_2f22222223 3333#3(3/343;3@3G3L3S3X3a3z33333I44444555606A6d6x666666666667 77(7e7j7q77777777777777777868J8Y8`8i88888888888879<9C9R9Y9^9e9j9q9z9999999999999::::;<=B=W===>>>$>/>L>Q>W>\>{>>>>>P?t?~????????0 00010h00000011&141111223^334n4|455T6r66666667 7B7U7]7f7o777777788$8+858J8a8m8s8~888888888s9z999999999:*:1:;:d:z:::::`;i;n;t;;;;2=>B>G>r>>>>> ?)?9?K?l??????????@0O0s0000000111%1@1b1p1y1111112 33;33333333414c4k4u44444 535K5U5556666667S7e7x778%8:8K8Q8[888,929<9Q9l9999:&:,:>:D:L:\:p::::::::: ;3;G;;W?]????????P0 070Z0z0000000061<1D1R11111112 2,2>2X2222222034383<3@33333344555.686F6L6Z66666666 77+7=778[8_8n888(@0D0H0L0222 377<<<>8?