From 84c1091074f59dd469633ec7ca6806d9d45bcfd7 Mon Sep 17 00:00:00 2001 From: alexs75 Date: Mon, 28 Oct 2013 20:04:21 +0000 Subject: [PATCH] RxFPC - create folder with version 2.1 git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2811 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../2.1/Demos/AutoSort/AutoSortDemo.ico | Bin 0 -> 137040 bytes .../2.1/Demos/AutoSort/AutoSortDemo.lpi | 142 + .../2.1/Demos/AutoSort/AutoSortDemo.lpr | 41 + .../2.1/Demos/AutoSort/AutoSortDemo.manifest | 17 + .../2.1/Demos/AutoSort/AutoSortDemo.rc | 7 + .../2.1/Demos/AutoSort/asdmainunit.lfm | 146 + .../2.1/Demos/AutoSort/asdmainunit.lrs | 46 + .../2.1/Demos/AutoSort/asdmainunit.pas | 82 + .../2.1/Demos/FolderLister/AboutUnit.lfm | 55 + .../2.1/Demos/FolderLister/AboutUnit.lrs | 19 + .../2.1/Demos/FolderLister/AboutUnit.pas | 35 + .../2.1/Demos/FolderLister/FolderLister.lpi | 202 + .../2.1/Demos/FolderLister/FolderLister.lpr | 15 + .../version/2.1/Demos/FolderLister/unit1.lfm | 143 + .../version/2.1/Demos/FolderLister/unit1.lrs | 45 + .../version/2.1/Demos/FolderLister/unit1.pas | 92 + .../2.1/Demos/PhoneBookDemo/PhoneBookDemo.ico | Bin 0 -> 53038 bytes .../2.1/Demos/PhoneBookDemo/PhoneBookDemo.lpi | 310 + .../2.1/Demos/PhoneBookDemo/PhoneBookDemo.lpr | 22 + .../Demos/PhoneBookDemo/bases/PhoneBook.DBF | Bin 0 -> 730 bytes .../Demos/PhoneBookDemo/bases/PhoneBook.DBT | Bin 0 -> 4 bytes .../PhoneBookDemo/languages/PhoneBookDemo.po | 127 + .../Demos/PhoneBookDemo/pbeditdataunit.lfm | 228 + .../Demos/PhoneBookDemo/pbeditdataunit.lrt | 7 + .../Demos/PhoneBookDemo/pbeditdataunit.pas | 44 + .../2.1/Demos/PhoneBookDemo/pbmainunit.lfm | 3051 +++++++++ .../2.1/Demos/PhoneBookDemo/pbmainunit.lrt | 22 + .../2.1/Demos/PhoneBookDemo/pbmainunit.pas | 122 + .../2.1/Demos/RxDBColorBox/project1.ico | Bin 0 -> 137040 bytes .../2.1/Demos/RxDBColorBox/project1.lpi | 115 + .../2.1/Demos/RxDBColorBox/project1.lpr | 21 + .../2.1/Demos/RxDBColorBox/project1.res | Bin 0 -> 138128 bytes .../version/2.1/Demos/RxDBColorBox/unit1.lfm | 239 + .../version/2.1/Demos/RxDBColorBox/unit1.pas | 57 + .../2.1/Demos/RxDBGrid/RxDBGridDemo.ico | Bin 0 -> 766 bytes .../2.1/Demos/RxDBGrid/RxDBGridDemo.lpi | 973 +++ .../2.1/Demos/RxDBGrid/RxDBGridDemo.lpr | 23 + .../2.1/Demos/RxDBGrid/RxDBGridDemo.res | Bin 0 -> 2540 bytes .../2.1/Demos/RxDBGrid/docs/COPYING.GPL.txt | 340 ++ .../2.1/Demos/RxDBGrid/rxdbgridmainunit.lfm | 1315 ++++ .../2.1/Demos/RxDBGrid/rxdbgridmainunit.pas | 271 + .../version/2.1/Demos/RxDateEdit/project1.ico | Bin 0 -> 137040 bytes .../version/2.1/Demos/RxDateEdit/project1.lpi | 351 ++ .../version/2.1/Demos/RxDateEdit/project1.lpr | 23 + .../version/2.1/Demos/RxDateEdit/project1.lrs | 5237 ++++++++++++++++ .../2.1/Demos/RxDateEdit/project1.manifest | 17 + .../version/2.1/Demos/RxDateEdit/project1.rc | 7 + .../rx/version/2.1/Demos/RxDateEdit/unit1.lfm | 121 + .../rx/version/2.1/Demos/RxDateEdit/unit1.lrs | 43 + .../rx/version/2.1/Demos/RxDateEdit/unit1.pas | 56 + .../2.1/Demos/RxHistoryNavigator/project1.ico | Bin 0 -> 137040 bytes .../2.1/Demos/RxHistoryNavigator/project1.lpi | 87 + .../2.1/Demos/RxHistoryNavigator/project1.lpr | 21 + .../2.1/Demos/RxHistoryNavigator/project1.lps | 272 + .../2.1/Demos/RxHistoryNavigator/project1.res | Bin 0 -> 138128 bytes .../2.1/Demos/RxHistoryNavigator/unit1.lfm | 387 ++ .../2.1/Demos/RxHistoryNavigator/unit1.pas | 82 + .../version/2.1/Demos/RxLookup/project1.ico | Bin 0 -> 137040 bytes .../version/2.1/Demos/RxLookup/project1.lpi | 278 + .../version/2.1/Demos/RxLookup/project1.lpr | 21 + .../version/2.1/Demos/RxLookup/project1.lrs | 5237 ++++++++++++++++ .../2.1/Demos/RxLookup/project1.manifest | 17 + .../rx/version/2.1/Demos/RxLookup/project1.rc | 7 + .../rx/version/2.1/Demos/RxLookup/unit1.lfm | 213 + .../rx/version/2.1/Demos/RxLookup/unit1.lrs | 64 + .../rx/version/2.1/Demos/RxLookup/unit1.pas | 76 + .../rx/version/2.1/Demos/RxMDI/project1.ico | Bin 0 -> 137040 bytes .../rx/version/2.1/Demos/RxMDI/project1.lpi | 117 + .../rx/version/2.1/Demos/RxMDI/project1.lpr | 20 + .../rx/version/2.1/Demos/RxMDI/project1.lps | 223 + .../rx/version/2.1/Demos/RxMDI/project1.res | Bin 0 -> 138128 bytes .../rx/version/2.1/Demos/RxMDI/unit1.lfm | 135 + .../rx/version/2.1/Demos/RxMDI/unit1.pas | 90 + .../rx/version/2.1/Demos/RxMDI/unit2.lfm | 83 + .../rx/version/2.1/Demos/RxMDI/unit2.pas | 43 + .../rx/version/2.1/Demos/RxMDI/unit3.lfm | 70 + .../rx/version/2.1/Demos/RxMDI/unit3.pas | 41 + .../rx/version/2.1/Demos/RxMDI/unit4.lfm | 84 + .../rx/version/2.1/Demos/RxMDI/unit4.pas | 49 + .../2.1/Demos/RxViewsPanel/project1.ico | Bin 0 -> 137040 bytes .../2.1/Demos/RxViewsPanel/project1.lpi | 340 ++ .../2.1/Demos/RxViewsPanel/project1.lpr | 21 + .../2.1/Demos/RxViewsPanel/project1.res | Bin 0 -> 138128 bytes .../version/2.1/Demos/RxViewsPanel/unit1.lfm | 1605 +++++ .../version/2.1/Demos/RxViewsPanel/unit1.pas | 67 + .../TestRXMemDSLoad/rx_ext_test_case_1.pas | 182 + .../TestRXMemDSLoad/rx_ext_test_harness.lpi | 309 + .../TestRXMemDSLoad/rx_ext_test_harness.lpr | 15 + .../TestRXMemDSLoad/rx_ext_test_harness.res | Bin 0 -> 855 bytes .../rx/version/2.1/Demos/Text90/project1.lpi | 301 + .../rx/version/2.1/Demos/Text90/project1.lpr | 15 + .../rx/version/2.1/Demos/Text90/unit1.lfm | 134 + .../rx/version/2.1/Demos/Text90/unit1.lrs | 42 + .../rx/version/2.1/Demos/Text90/unit1.pas | 89 + .../version/2.1/Demos/ToolPanel/aboutunit.lfm | 25 + .../version/2.1/Demos/ToolPanel/aboutunit.lrs | 11 + .../version/2.1/Demos/ToolPanel/aboutunit.pas | 31 + .../version/2.1/Demos/ToolPanel/ico/main.ICO | Bin 0 -> 2238 bytes .../version/2.1/Demos/ToolPanel/project1.ico | Bin 0 -> 766 bytes .../version/2.1/Demos/ToolPanel/project1.lpi | 93 + .../version/2.1/Demos/ToolPanel/project1.lpr | 21 + .../version/2.1/Demos/ToolPanel/project1.lrs | 29 + .../2.1/Demos/ToolPanel/project1.manifest | 17 + .../version/2.1/Demos/ToolPanel/project1.rc | 33 + .../2.1/Demos/ToolPanel/toolbardemo.cfg | 7 + .../rx/version/2.1/Demos/ToolPanel/unit1.lfm | 443 ++ .../rx/version/2.1/Demos/ToolPanel/unit1.lrs | 303 + .../rx/version/2.1/Demos/ToolPanel/unit1.pas | 89 + components/rx/version/2.1/RxMDICloseIcon.lrs | 7 + components/rx/version/2.1/WinXP.manifest | 20 + components/rx/version/2.1/WindowsXP.RES | Bin 0 -> 744 bytes components/rx/version/2.1/WindowsXP.rc | 1 + components/rx/version/2.1/autopanel.pas | 213 + components/rx/version/2.1/boxprocs.pas | 326 + components/rx/version/2.1/curredit.pas | 725 +++ components/rx/version/2.1/dateutil.pas | 649 ++ components/rx/version/2.1/dbcurredit.pas | 250 + components/rx/version/2.1/dbdateedit.pas | 482 ++ components/rx/version/2.1/dbutils.pas | 1026 ++++ components/rx/version/2.1/dcl_rx_ctrl.lpk | 44 + components/rx/version/2.1/dcl_rx_ctrl.pas | 23 + .../rx/version/2.1/docs/WhatsNew.eng.txt | 88 + .../rx/version/2.1/docs/WhatsNew.rus.txt | 446 ++ .../2.1/docs/auto_panel_doc/autopnl.txt | 36 + components/rx/version/2.1/docs/error.txt | 2 + components/rx/version/2.1/docs/faq.txt | 10 + components/rx/version/2.1/docs/makehtml.sh | 33 + components/rx/version/2.1/docs/readmy.txt | 66 + components/rx/version/2.1/docs/rxfpc.xml | 2900 +++++++++ components/rx/version/2.1/docs/todo.txt | 5 + components/rx/version/2.1/duallist.pas | 188 + .../rx/version/2.1/ex_rx_bin_datapacket.pas | 172 + .../rx/version/2.1/ex_rx_datapacket.pas | 139 + .../rx/version/2.1/ex_rx_xml_datapacket.pas | 405 ++ components/rx/version/2.1/exsortfb.pas | 107 + components/rx/version/2.1/exsortmds.pas | 186 + components/rx/version/2.1/exsortsql.pas | 134 + components/rx/version/2.1/exsortzeos.pas | 174 + components/rx/version/2.1/fduallst.lfm | 175 + components/rx/version/2.1/fduallst.lrs | 61 + components/rx/version/2.1/fduallst.lrt | 7 + components/rx/version/2.1/fduallst.pas | 220 + components/rx/version/2.1/folderlister.pas | 215 + .../rx/version/2.1/images/DBCalcEdit.xpm | 35 + components/rx/version/2.1/images/DBLookUp.xpm | 35 + components/rx/version/2.1/images/RXCTLREG.RES | Bin 0 -> 10280 bytes components/rx/version/2.1/images/RXDBREG.res | Bin 0 -> 5420 bytes .../rx/version/2.1/images/RXSPINDOWN.png | Bin 0 -> 87 bytes components/rx/version/2.1/images/RXSPINUP.png | Bin 0 -> 89 bytes components/rx/version/2.1/images/RXTOOREG.RES | Bin 0 -> 9436 bytes .../rx/version/2.1/images/RxMDICloseIcon.png | Bin 0 -> 156 bytes .../rx/version/2.1/images/TCURRENCYEDIT.xpm | 33 + .../rx/version/2.1/images/TDBDateEdit.xpm | 29 + .../rx/version/2.1/images/TDualListDialog.xpm | 34 + .../rx/version/2.1/images/TFolderLister.xpm | 35 + .../rx/version/2.1/images/TLoginDialog.xpm | 33 + .../rx/version/2.1/images/TPAGEMANAGER.xpm | 35 + .../rx/version/2.1/images/TRXAPPICON.xpm | 36 + components/rx/version/2.1/images/TRXCLOCK.xpm | 31 + .../rx/version/2.1/images/TRXDBCOMBOBOX.xpm | 33 + .../rx/version/2.1/images/TRXDBSpinEdit.png | Bin 0 -> 564 bytes components/rx/version/2.1/images/TRXDICE.xpm | 31 + components/rx/version/2.1/images/TRXLABEL.xpm | 30 + .../rx/version/2.1/images/TRXLookUpEdit.xpm | 34 + .../rx/version/2.1/images/TRXSWITCH.xpm | 32 + .../rx/version/2.1/images/TReportManager.xpm | 36 + .../rx/version/2.1/images/TRxAboutDialog.png | Bin 0 -> 306 bytes .../rx/version/2.1/images/TRxCalendarGrid.xpm | 32 + components/rx/version/2.1/images/TRxClock.png | Bin 0 -> 982 bytes .../2.1/images/TRxCloseFormValidator.png | Bin 0 -> 334 bytes .../rx/version/2.1/images/TRxDBCalcEdit.xpm | 29 + .../rx/version/2.1/images/TRxDBColorBox.png | Bin 0 -> 501 bytes .../rx/version/2.1/images/TRxDBComboEdit.xpm | 32 + .../rx/version/2.1/images/TRxDBCurrEdit.png | Bin 0 -> 385 bytes .../rx/version/2.1/images/TRxDBGrid.xpm | 37 + .../version/2.1/images/TRxDBLookupCombo.xpm | 35 + .../version/2.1/images/TRxDBProgressBar.png | Bin 0 -> 373 bytes .../rx/version/2.1/images/TRxDBRadioGroup.png | Bin 0 -> 882 bytes .../rx/version/2.1/images/TRxDBTimeEdit.png | Bin 0 -> 493 bytes .../rx/version/2.1/images/TRxDBTrackBar.png | Bin 0 -> 417 bytes .../rx/version/2.1/images/TRxDateEdit.png | Bin 0 -> 986 bytes .../rx/version/2.1/images/TRxDbLookupList.xpm | 35 + .../version/2.1/images/TRxFolderMonitor.xpm | 33 + .../2.1/images/TRxHistoryNavigator.png | Bin 0 -> 390 bytes .../version/2.1/images/TRxIniPropStorage.png | Bin 0 -> 426 bytes .../rx/version/2.1/images/TRxLoginDialog.png | Bin 0 -> 546 bytes .../rx/version/2.1/images/TRxMemoryData.xpm | 33 + .../rx/version/2.1/images/TRxRadioGroup.png | Bin 0 -> 633 bytes .../rx/version/2.1/images/TRxSpeedButton.png | Bin 0 -> 1023 bytes .../rx/version/2.1/images/TRxSpinButton.png | Bin 0 -> 969 bytes .../rx/version/2.1/images/TRxSpinEdit.png | Bin 0 -> 957 bytes .../rx/version/2.1/images/TRxTimeEdit.png | Bin 0 -> 418 bytes .../rx/version/2.1/images/TRxVersionInfo.png | Bin 0 -> 330 bytes .../rx/version/2.1/images/TRxViewsPanel.png | Bin 0 -> 311 bytes .../rx/version/2.1/images/TSECRETPANEL.xpm | 38 + .../version/2.1/images/componet_img/DICE1.xpm | 71 + .../version/2.1/images/componet_img/DICE2.xpm | 71 + .../version/2.1/images/componet_img/DICE3.xpm | 71 + .../version/2.1/images/componet_img/DICE4.xpm | 71 + .../version/2.1/images/componet_img/DICE5.xpm | 71 + .../version/2.1/images/componet_img/DICE6.xpm | 71 + .../2.1/images/componet_img/RXSWITCH_OFF.xpm | 55 + .../2.1/images/componet_img/RXSWITCH_ON.xpm | 56 + .../images/componet_img/all_component_res.bat | 5 + .../images/componet_img/all_component_res.sh | 10 + .../2.1/images/componet_img/picDateEdit.png | Bin 0 -> 304 bytes .../2.1/images/componet_img/rx_markerdown.png | Bin 0 -> 242 bytes .../2.1/images/componet_img/rx_markerup.png | Bin 0 -> 240 bytes components/rx/version/2.1/images/mk_res.bat | 2 + components/rx/version/2.1/images/mk_res.sh | 2 + components/rx/version/2.1/images/next1.xpm | 11 + components/rx/version/2.1/images/next2.xpm | 11 + components/rx/version/2.1/images/prev1.xpm | 11 + components/rx/version/2.1/images/prev2.xpm | 11 + components/rx/version/2.1/images/rx.lrs | 785 +++ .../rx/version/2.1/images/rxspin_res.bat | 2 + .../rx/version/2.1/images/tautopanel.xpm | 32 + .../rx/version/2.1/images/trxxpmanifest.xpm | 36 + .../rx/version/2.1/images/ttoolpanel.xpm | 37 + .../version/2.1/languages/register_rxctrl.po | 11 + .../rx/version/2.1/languages/rxconst.es.po | 231 + .../rx/version/2.1/languages/rxconst.po | 231 + .../rx/version/2.1/languages/rxconst.ru.po | 231 + .../rx/version/2.1/languages/rxconst.uk.po | 240 + .../rx/version/2.1/languages/rxdconst.es.po | 433 ++ .../rx/version/2.1/languages/rxdconst.po | 431 ++ .../rx/version/2.1/languages/rxdconst.ru.po | 431 ++ .../rx/version/2.1/languages/rxdconst.uk.po | 440 ++ .../rx/version/2.1/languages/rxmemds.po | 11 + components/rx/version/2.1/lib/WindowsXP.or | Bin 0 -> 860 bytes components/rx/version/2.1/lib/readmy.txt | 1 + components/rx/version/2.1/pagemngr.pas | 320 + components/rx/version/2.1/pickdate.lrs | 20 + components/rx/version/2.1/pickdate.pas | 1591 +++++ components/rx/version/2.1/register_rxctrl.pas | 172 + components/rx/version/2.1/registerrx.pas | 267 + components/rx/version/2.1/registerrxdb.pas | 164 + components/rx/version/2.1/registerrxtools.pas | 84 + components/rx/version/2.1/rx.inc | 62 + components/rx/version/2.1/rx.lrs | 785 +++ .../rx/version/2.1/rx_sort_fbdataset.lpk | 47 + .../rx/version/2.1/rx_sort_fbdataset.pas | 21 + components/rx/version/2.1/rx_sort_sqldb.lpk | 44 + components/rx/version/2.1/rx_sort_sqldb.pas | 21 + components/rx/version/2.1/rx_sort_zeos.lpk | 48 + components/rx/version/2.1/rx_sort_zeos.pas | 21 + components/rx/version/2.1/rxaboutdialog.pas | 148 + components/rx/version/2.1/rxaboutformunit.lfm | 217 + components/rx/version/2.1/rxaboutformunit.pas | 107 + components/rx/version/2.1/rxappicon.pas | 171 + components/rx/version/2.1/rxapputils.pas | 220 + .../rx/version/2.1/rxceeditlookupfields.pas | 185 + components/rx/version/2.1/rxclock.pas | 990 +++ .../rx/version/2.1/rxcloseformvalidator.pas | 410 ++ components/rx/version/2.1/rxconfigvalues.pas | 432 ++ components/rx/version/2.1/rxconst.pas | 133 + components/rx/version/2.1/rxctrls.pas | 4459 ++++++++++++++ .../rx/version/2.1/rxcustomchartpanel.pas | 318 + components/rx/version/2.1/rxdbcolorbox.pas | 360 ++ components/rx/version/2.1/rxdbcomb.pas | 554 ++ components/rx/version/2.1/rxdbctrls.pas | 469 ++ components/rx/version/2.1/rxdbgrid.lrs | 25 + components/rx/version/2.1/rxdbgrid.pas | 5428 +++++++++++++++++ .../rx/version/2.1/rxdbgrid_columsunit.lfm | 146 + .../rx/version/2.1/rxdbgrid_columsunit.lrt | 1 + .../rx/version/2.1/rxdbgrid_columsunit.pas | 166 + .../rx/version/2.1/rxdbgrid_findunit.lfm | 185 + .../rx/version/2.1/rxdbgrid_findunit.pas | 185 + components/rx/version/2.1/rxdbspinedit.pas | 316 + components/rx/version/2.1/rxdbtimeedit.pas | 319 + components/rx/version/2.1/rxdconst.pas | 190 + components/rx/version/2.1/rxdice.inc | 431 ++ components/rx/version/2.1/rxdice.pas | 379 ++ components/rx/version/2.1/rxfileutils.pas | 197 + components/rx/version/2.1/rxfilterby.lfm | 775 +++ components/rx/version/2.1/rxfilterby.lrt | 10 + components/rx/version/2.1/rxfilterby.pas | 384 ++ components/rx/version/2.1/rxhistory.pas | 191 + .../rx/version/2.1/rxhistorynavigator.pas | 463 ++ components/rx/version/2.1/rxiconv.pas | 439 ++ .../rx/version/2.1/rxinipropstorage.pas | 82 + components/rx/version/2.1/rxlogin.lfm | 376 ++ components/rx/version/2.1/rxlogin.lrs | 219 + components/rx/version/2.1/rxlogin.pas | 770 +++ components/rx/version/2.1/rxlookup.pas | 1696 +++++ components/rx/version/2.1/rxmdi.pas | 773 +++ components/rx/version/2.1/rxmemds.pas | 2097 +++++++ components/rx/version/2.1/rxnew.lpk | 336 + components/rx/version/2.1/rxnew.pas | 34 + components/rx/version/2.1/rxpopupunit.pas | 971 +++ components/rx/version/2.1/rxsortby.lfm | 233 + components/rx/version/2.1/rxsortby.lrt | 10 + components/rx/version/2.1/rxsortby.pas | 272 + components/rx/version/2.1/rxsortfbdataset.pas | 32 + components/rx/version/2.1/rxsortmemds.pas | 136 + components/rx/version/2.1/rxsortsqldb.pas | 32 + components/rx/version/2.1/rxsortzeos.pas | 32 + components/rx/version/2.1/rxspin.lrs | 10 + components/rx/version/2.1/rxspin.pas | 982 +++ components/rx/version/2.1/rxstrutils.pas | 1138 ++++ components/rx/version/2.1/rxswitch.inc | 117 + components/rx/version/2.1/rxswitch.pas | 518 ++ .../rx/version/2.1/rxsystemservices.pas | 112 + components/rx/version/2.1/rxtbrsetup.lfm | 332 + components/rx/version/2.1/rxtbrsetup.lrt | 15 + components/rx/version/2.1/rxtbrsetup.pas | 319 + components/rx/version/2.1/rxtimeedit.pas | 306 + components/rx/version/2.1/rxtoolbar.pas | 1450 +++++ components/rx/version/2.1/rxversinfo.pas | 310 + components/rx/version/2.1/rxviewspanel.pas | 509 ++ components/rx/version/2.1/rxxpman.pas | 59 + components/rx/version/2.1/seldsfrm.lfm | 65 + components/rx/version/2.1/seldsfrm.lrs | 26 + components/rx/version/2.1/seldsfrm.lrt | 3 + components/rx/version/2.1/seldsfrm.pas | 293 + components/rx/version/2.1/tooledit.pas | 904 +++ components/rx/version/2.1/tooledit.res | Bin 0 -> 388 bytes components/rx/version/2.1/vclutils.pas | 659 ++ 318 files changed, 80020 insertions(+) create mode 100644 components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.ico create mode 100644 components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.lpi create mode 100644 components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.lpr create mode 100644 components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.manifest create mode 100644 components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.rc create mode 100644 components/rx/version/2.1/Demos/AutoSort/asdmainunit.lfm create mode 100644 components/rx/version/2.1/Demos/AutoSort/asdmainunit.lrs create mode 100644 components/rx/version/2.1/Demos/AutoSort/asdmainunit.pas create mode 100644 components/rx/version/2.1/Demos/FolderLister/AboutUnit.lfm create mode 100644 components/rx/version/2.1/Demos/FolderLister/AboutUnit.lrs create mode 100644 components/rx/version/2.1/Demos/FolderLister/AboutUnit.pas create mode 100644 components/rx/version/2.1/Demos/FolderLister/FolderLister.lpi create mode 100644 components/rx/version/2.1/Demos/FolderLister/FolderLister.lpr create mode 100644 components/rx/version/2.1/Demos/FolderLister/unit1.lfm create mode 100644 components/rx/version/2.1/Demos/FolderLister/unit1.lrs create mode 100644 components/rx/version/2.1/Demos/FolderLister/unit1.pas create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.ico create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.lpi create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.lpr create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/bases/PhoneBook.DBF create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/bases/PhoneBook.DBT create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/languages/PhoneBookDemo.po create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.lfm create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.lrt create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.pas create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.lfm create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.lrt create mode 100644 components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.pas create mode 100644 components/rx/version/2.1/Demos/RxDBColorBox/project1.ico create mode 100644 components/rx/version/2.1/Demos/RxDBColorBox/project1.lpi create mode 100644 components/rx/version/2.1/Demos/RxDBColorBox/project1.lpr create mode 100644 components/rx/version/2.1/Demos/RxDBColorBox/project1.res create mode 100644 components/rx/version/2.1/Demos/RxDBColorBox/unit1.lfm create mode 100644 components/rx/version/2.1/Demos/RxDBColorBox/unit1.pas create mode 100644 components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.ico create mode 100644 components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.lpi create mode 100644 components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.lpr create mode 100644 components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.res create mode 100644 components/rx/version/2.1/Demos/RxDBGrid/docs/COPYING.GPL.txt create mode 100644 components/rx/version/2.1/Demos/RxDBGrid/rxdbgridmainunit.lfm create mode 100644 components/rx/version/2.1/Demos/RxDBGrid/rxdbgridmainunit.pas create mode 100644 components/rx/version/2.1/Demos/RxDateEdit/project1.ico create mode 100644 components/rx/version/2.1/Demos/RxDateEdit/project1.lpi create mode 100644 components/rx/version/2.1/Demos/RxDateEdit/project1.lpr create mode 100644 components/rx/version/2.1/Demos/RxDateEdit/project1.lrs create mode 100644 components/rx/version/2.1/Demos/RxDateEdit/project1.manifest create mode 100644 components/rx/version/2.1/Demos/RxDateEdit/project1.rc create mode 100644 components/rx/version/2.1/Demos/RxDateEdit/unit1.lfm create mode 100644 components/rx/version/2.1/Demos/RxDateEdit/unit1.lrs create mode 100644 components/rx/version/2.1/Demos/RxDateEdit/unit1.pas create mode 100644 components/rx/version/2.1/Demos/RxHistoryNavigator/project1.ico create mode 100644 components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lpi create mode 100644 components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lpr create mode 100644 components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lps create mode 100644 components/rx/version/2.1/Demos/RxHistoryNavigator/project1.res create mode 100644 components/rx/version/2.1/Demos/RxHistoryNavigator/unit1.lfm create mode 100644 components/rx/version/2.1/Demos/RxHistoryNavigator/unit1.pas create mode 100644 components/rx/version/2.1/Demos/RxLookup/project1.ico create mode 100644 components/rx/version/2.1/Demos/RxLookup/project1.lpi create mode 100644 components/rx/version/2.1/Demos/RxLookup/project1.lpr create mode 100644 components/rx/version/2.1/Demos/RxLookup/project1.lrs create mode 100644 components/rx/version/2.1/Demos/RxLookup/project1.manifest create mode 100644 components/rx/version/2.1/Demos/RxLookup/project1.rc create mode 100644 components/rx/version/2.1/Demos/RxLookup/unit1.lfm create mode 100644 components/rx/version/2.1/Demos/RxLookup/unit1.lrs create mode 100644 components/rx/version/2.1/Demos/RxLookup/unit1.pas create mode 100644 components/rx/version/2.1/Demos/RxMDI/project1.ico create mode 100644 components/rx/version/2.1/Demos/RxMDI/project1.lpi create mode 100644 components/rx/version/2.1/Demos/RxMDI/project1.lpr create mode 100644 components/rx/version/2.1/Demos/RxMDI/project1.lps create mode 100644 components/rx/version/2.1/Demos/RxMDI/project1.res create mode 100644 components/rx/version/2.1/Demos/RxMDI/unit1.lfm create mode 100644 components/rx/version/2.1/Demos/RxMDI/unit1.pas create mode 100644 components/rx/version/2.1/Demos/RxMDI/unit2.lfm create mode 100644 components/rx/version/2.1/Demos/RxMDI/unit2.pas create mode 100644 components/rx/version/2.1/Demos/RxMDI/unit3.lfm create mode 100644 components/rx/version/2.1/Demos/RxMDI/unit3.pas create mode 100644 components/rx/version/2.1/Demos/RxMDI/unit4.lfm create mode 100644 components/rx/version/2.1/Demos/RxMDI/unit4.pas create mode 100644 components/rx/version/2.1/Demos/RxViewsPanel/project1.ico create mode 100644 components/rx/version/2.1/Demos/RxViewsPanel/project1.lpi create mode 100644 components/rx/version/2.1/Demos/RxViewsPanel/project1.lpr create mode 100644 components/rx/version/2.1/Demos/RxViewsPanel/project1.res create mode 100644 components/rx/version/2.1/Demos/RxViewsPanel/unit1.lfm create mode 100644 components/rx/version/2.1/Demos/RxViewsPanel/unit1.pas create mode 100644 components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_case_1.pas create mode 100644 components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.lpi create mode 100644 components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.lpr create mode 100644 components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.res create mode 100644 components/rx/version/2.1/Demos/Text90/project1.lpi create mode 100644 components/rx/version/2.1/Demos/Text90/project1.lpr create mode 100644 components/rx/version/2.1/Demos/Text90/unit1.lfm create mode 100644 components/rx/version/2.1/Demos/Text90/unit1.lrs create mode 100644 components/rx/version/2.1/Demos/Text90/unit1.pas create mode 100644 components/rx/version/2.1/Demos/ToolPanel/aboutunit.lfm create mode 100644 components/rx/version/2.1/Demos/ToolPanel/aboutunit.lrs create mode 100644 components/rx/version/2.1/Demos/ToolPanel/aboutunit.pas create mode 100644 components/rx/version/2.1/Demos/ToolPanel/ico/main.ICO create mode 100644 components/rx/version/2.1/Demos/ToolPanel/project1.ico create mode 100644 components/rx/version/2.1/Demos/ToolPanel/project1.lpi create mode 100644 components/rx/version/2.1/Demos/ToolPanel/project1.lpr create mode 100644 components/rx/version/2.1/Demos/ToolPanel/project1.lrs create mode 100644 components/rx/version/2.1/Demos/ToolPanel/project1.manifest create mode 100644 components/rx/version/2.1/Demos/ToolPanel/project1.rc create mode 100644 components/rx/version/2.1/Demos/ToolPanel/toolbardemo.cfg create mode 100644 components/rx/version/2.1/Demos/ToolPanel/unit1.lfm create mode 100644 components/rx/version/2.1/Demos/ToolPanel/unit1.lrs create mode 100644 components/rx/version/2.1/Demos/ToolPanel/unit1.pas create mode 100644 components/rx/version/2.1/RxMDICloseIcon.lrs create mode 100644 components/rx/version/2.1/WinXP.manifest create mode 100644 components/rx/version/2.1/WindowsXP.RES create mode 100644 components/rx/version/2.1/WindowsXP.rc create mode 100644 components/rx/version/2.1/autopanel.pas create mode 100644 components/rx/version/2.1/boxprocs.pas create mode 100644 components/rx/version/2.1/curredit.pas create mode 100644 components/rx/version/2.1/dateutil.pas create mode 100644 components/rx/version/2.1/dbcurredit.pas create mode 100644 components/rx/version/2.1/dbdateedit.pas create mode 100644 components/rx/version/2.1/dbutils.pas create mode 100644 components/rx/version/2.1/dcl_rx_ctrl.lpk create mode 100644 components/rx/version/2.1/dcl_rx_ctrl.pas create mode 100644 components/rx/version/2.1/docs/WhatsNew.eng.txt create mode 100644 components/rx/version/2.1/docs/WhatsNew.rus.txt create mode 100644 components/rx/version/2.1/docs/auto_panel_doc/autopnl.txt create mode 100644 components/rx/version/2.1/docs/error.txt create mode 100644 components/rx/version/2.1/docs/faq.txt create mode 100755 components/rx/version/2.1/docs/makehtml.sh create mode 100644 components/rx/version/2.1/docs/readmy.txt create mode 100644 components/rx/version/2.1/docs/rxfpc.xml create mode 100644 components/rx/version/2.1/docs/todo.txt create mode 100644 components/rx/version/2.1/duallist.pas create mode 100644 components/rx/version/2.1/ex_rx_bin_datapacket.pas create mode 100644 components/rx/version/2.1/ex_rx_datapacket.pas create mode 100644 components/rx/version/2.1/ex_rx_xml_datapacket.pas create mode 100644 components/rx/version/2.1/exsortfb.pas create mode 100644 components/rx/version/2.1/exsortmds.pas create mode 100644 components/rx/version/2.1/exsortsql.pas create mode 100644 components/rx/version/2.1/exsortzeos.pas create mode 100644 components/rx/version/2.1/fduallst.lfm create mode 100644 components/rx/version/2.1/fduallst.lrs create mode 100644 components/rx/version/2.1/fduallst.lrt create mode 100644 components/rx/version/2.1/fduallst.pas create mode 100644 components/rx/version/2.1/folderlister.pas create mode 100644 components/rx/version/2.1/images/DBCalcEdit.xpm create mode 100644 components/rx/version/2.1/images/DBLookUp.xpm create mode 100644 components/rx/version/2.1/images/RXCTLREG.RES create mode 100644 components/rx/version/2.1/images/RXDBREG.res create mode 100644 components/rx/version/2.1/images/RXSPINDOWN.png create mode 100644 components/rx/version/2.1/images/RXSPINUP.png create mode 100644 components/rx/version/2.1/images/RXTOOREG.RES create mode 100644 components/rx/version/2.1/images/RxMDICloseIcon.png create mode 100644 components/rx/version/2.1/images/TCURRENCYEDIT.xpm create mode 100644 components/rx/version/2.1/images/TDBDateEdit.xpm create mode 100644 components/rx/version/2.1/images/TDualListDialog.xpm create mode 100644 components/rx/version/2.1/images/TFolderLister.xpm create mode 100644 components/rx/version/2.1/images/TLoginDialog.xpm create mode 100644 components/rx/version/2.1/images/TPAGEMANAGER.xpm create mode 100644 components/rx/version/2.1/images/TRXAPPICON.xpm create mode 100644 components/rx/version/2.1/images/TRXCLOCK.xpm create mode 100644 components/rx/version/2.1/images/TRXDBCOMBOBOX.xpm create mode 100644 components/rx/version/2.1/images/TRXDBSpinEdit.png create mode 100644 components/rx/version/2.1/images/TRXDICE.xpm create mode 100644 components/rx/version/2.1/images/TRXLABEL.xpm create mode 100644 components/rx/version/2.1/images/TRXLookUpEdit.xpm create mode 100644 components/rx/version/2.1/images/TRXSWITCH.xpm create mode 100644 components/rx/version/2.1/images/TReportManager.xpm create mode 100644 components/rx/version/2.1/images/TRxAboutDialog.png create mode 100644 components/rx/version/2.1/images/TRxCalendarGrid.xpm create mode 100644 components/rx/version/2.1/images/TRxClock.png create mode 100644 components/rx/version/2.1/images/TRxCloseFormValidator.png create mode 100644 components/rx/version/2.1/images/TRxDBCalcEdit.xpm create mode 100644 components/rx/version/2.1/images/TRxDBColorBox.png create mode 100644 components/rx/version/2.1/images/TRxDBComboEdit.xpm create mode 100644 components/rx/version/2.1/images/TRxDBCurrEdit.png create mode 100644 components/rx/version/2.1/images/TRxDBGrid.xpm create mode 100644 components/rx/version/2.1/images/TRxDBLookupCombo.xpm create mode 100644 components/rx/version/2.1/images/TRxDBProgressBar.png create mode 100644 components/rx/version/2.1/images/TRxDBRadioGroup.png create mode 100644 components/rx/version/2.1/images/TRxDBTimeEdit.png create mode 100644 components/rx/version/2.1/images/TRxDBTrackBar.png create mode 100644 components/rx/version/2.1/images/TRxDateEdit.png create mode 100644 components/rx/version/2.1/images/TRxDbLookupList.xpm create mode 100644 components/rx/version/2.1/images/TRxFolderMonitor.xpm create mode 100644 components/rx/version/2.1/images/TRxHistoryNavigator.png create mode 100644 components/rx/version/2.1/images/TRxIniPropStorage.png create mode 100644 components/rx/version/2.1/images/TRxLoginDialog.png create mode 100644 components/rx/version/2.1/images/TRxMemoryData.xpm create mode 100644 components/rx/version/2.1/images/TRxRadioGroup.png create mode 100644 components/rx/version/2.1/images/TRxSpeedButton.png create mode 100644 components/rx/version/2.1/images/TRxSpinButton.png create mode 100644 components/rx/version/2.1/images/TRxSpinEdit.png create mode 100644 components/rx/version/2.1/images/TRxTimeEdit.png create mode 100644 components/rx/version/2.1/images/TRxVersionInfo.png create mode 100644 components/rx/version/2.1/images/TRxViewsPanel.png create mode 100644 components/rx/version/2.1/images/TSECRETPANEL.xpm create mode 100644 components/rx/version/2.1/images/componet_img/DICE1.xpm create mode 100644 components/rx/version/2.1/images/componet_img/DICE2.xpm create mode 100644 components/rx/version/2.1/images/componet_img/DICE3.xpm create mode 100644 components/rx/version/2.1/images/componet_img/DICE4.xpm create mode 100644 components/rx/version/2.1/images/componet_img/DICE5.xpm create mode 100644 components/rx/version/2.1/images/componet_img/DICE6.xpm create mode 100644 components/rx/version/2.1/images/componet_img/RXSWITCH_OFF.xpm create mode 100644 components/rx/version/2.1/images/componet_img/RXSWITCH_ON.xpm create mode 100644 components/rx/version/2.1/images/componet_img/all_component_res.bat create mode 100644 components/rx/version/2.1/images/componet_img/all_component_res.sh create mode 100644 components/rx/version/2.1/images/componet_img/picDateEdit.png create mode 100644 components/rx/version/2.1/images/componet_img/rx_markerdown.png create mode 100644 components/rx/version/2.1/images/componet_img/rx_markerup.png create mode 100644 components/rx/version/2.1/images/mk_res.bat create mode 100755 components/rx/version/2.1/images/mk_res.sh create mode 100644 components/rx/version/2.1/images/next1.xpm create mode 100644 components/rx/version/2.1/images/next2.xpm create mode 100644 components/rx/version/2.1/images/prev1.xpm create mode 100644 components/rx/version/2.1/images/prev2.xpm create mode 100644 components/rx/version/2.1/images/rx.lrs create mode 100644 components/rx/version/2.1/images/rxspin_res.bat create mode 100644 components/rx/version/2.1/images/tautopanel.xpm create mode 100644 components/rx/version/2.1/images/trxxpmanifest.xpm create mode 100644 components/rx/version/2.1/images/ttoolpanel.xpm create mode 100644 components/rx/version/2.1/languages/register_rxctrl.po create mode 100644 components/rx/version/2.1/languages/rxconst.es.po create mode 100644 components/rx/version/2.1/languages/rxconst.po create mode 100644 components/rx/version/2.1/languages/rxconst.ru.po create mode 100644 components/rx/version/2.1/languages/rxconst.uk.po create mode 100644 components/rx/version/2.1/languages/rxdconst.es.po create mode 100644 components/rx/version/2.1/languages/rxdconst.po create mode 100644 components/rx/version/2.1/languages/rxdconst.ru.po create mode 100644 components/rx/version/2.1/languages/rxdconst.uk.po create mode 100644 components/rx/version/2.1/languages/rxmemds.po create mode 100644 components/rx/version/2.1/lib/WindowsXP.or create mode 100644 components/rx/version/2.1/lib/readmy.txt create mode 100644 components/rx/version/2.1/pagemngr.pas create mode 100644 components/rx/version/2.1/pickdate.lrs create mode 100644 components/rx/version/2.1/pickdate.pas create mode 100644 components/rx/version/2.1/register_rxctrl.pas create mode 100644 components/rx/version/2.1/registerrx.pas create mode 100644 components/rx/version/2.1/registerrxdb.pas create mode 100644 components/rx/version/2.1/registerrxtools.pas create mode 100644 components/rx/version/2.1/rx.inc create mode 100644 components/rx/version/2.1/rx.lrs create mode 100644 components/rx/version/2.1/rx_sort_fbdataset.lpk create mode 100644 components/rx/version/2.1/rx_sort_fbdataset.pas create mode 100644 components/rx/version/2.1/rx_sort_sqldb.lpk create mode 100644 components/rx/version/2.1/rx_sort_sqldb.pas create mode 100644 components/rx/version/2.1/rx_sort_zeos.lpk create mode 100644 components/rx/version/2.1/rx_sort_zeos.pas create mode 100644 components/rx/version/2.1/rxaboutdialog.pas create mode 100644 components/rx/version/2.1/rxaboutformunit.lfm create mode 100644 components/rx/version/2.1/rxaboutformunit.pas create mode 100644 components/rx/version/2.1/rxappicon.pas create mode 100644 components/rx/version/2.1/rxapputils.pas create mode 100644 components/rx/version/2.1/rxceeditlookupfields.pas create mode 100644 components/rx/version/2.1/rxclock.pas create mode 100644 components/rx/version/2.1/rxcloseformvalidator.pas create mode 100644 components/rx/version/2.1/rxconfigvalues.pas create mode 100644 components/rx/version/2.1/rxconst.pas create mode 100644 components/rx/version/2.1/rxctrls.pas create mode 100644 components/rx/version/2.1/rxcustomchartpanel.pas create mode 100644 components/rx/version/2.1/rxdbcolorbox.pas create mode 100644 components/rx/version/2.1/rxdbcomb.pas create mode 100644 components/rx/version/2.1/rxdbctrls.pas create mode 100644 components/rx/version/2.1/rxdbgrid.lrs create mode 100644 components/rx/version/2.1/rxdbgrid.pas create mode 100644 components/rx/version/2.1/rxdbgrid_columsunit.lfm create mode 100644 components/rx/version/2.1/rxdbgrid_columsunit.lrt create mode 100644 components/rx/version/2.1/rxdbgrid_columsunit.pas create mode 100644 components/rx/version/2.1/rxdbgrid_findunit.lfm create mode 100644 components/rx/version/2.1/rxdbgrid_findunit.pas create mode 100644 components/rx/version/2.1/rxdbspinedit.pas create mode 100644 components/rx/version/2.1/rxdbtimeedit.pas create mode 100644 components/rx/version/2.1/rxdconst.pas create mode 100644 components/rx/version/2.1/rxdice.inc create mode 100644 components/rx/version/2.1/rxdice.pas create mode 100644 components/rx/version/2.1/rxfileutils.pas create mode 100644 components/rx/version/2.1/rxfilterby.lfm create mode 100644 components/rx/version/2.1/rxfilterby.lrt create mode 100644 components/rx/version/2.1/rxfilterby.pas create mode 100644 components/rx/version/2.1/rxhistory.pas create mode 100644 components/rx/version/2.1/rxhistorynavigator.pas create mode 100644 components/rx/version/2.1/rxiconv.pas create mode 100644 components/rx/version/2.1/rxinipropstorage.pas create mode 100644 components/rx/version/2.1/rxlogin.lfm create mode 100644 components/rx/version/2.1/rxlogin.lrs create mode 100644 components/rx/version/2.1/rxlogin.pas create mode 100644 components/rx/version/2.1/rxlookup.pas create mode 100644 components/rx/version/2.1/rxmdi.pas create mode 100644 components/rx/version/2.1/rxmemds.pas create mode 100644 components/rx/version/2.1/rxnew.lpk create mode 100644 components/rx/version/2.1/rxnew.pas create mode 100644 components/rx/version/2.1/rxpopupunit.pas create mode 100644 components/rx/version/2.1/rxsortby.lfm create mode 100644 components/rx/version/2.1/rxsortby.lrt create mode 100644 components/rx/version/2.1/rxsortby.pas create mode 100644 components/rx/version/2.1/rxsortfbdataset.pas create mode 100644 components/rx/version/2.1/rxsortmemds.pas create mode 100644 components/rx/version/2.1/rxsortsqldb.pas create mode 100644 components/rx/version/2.1/rxsortzeos.pas create mode 100644 components/rx/version/2.1/rxspin.lrs create mode 100644 components/rx/version/2.1/rxspin.pas create mode 100644 components/rx/version/2.1/rxstrutils.pas create mode 100644 components/rx/version/2.1/rxswitch.inc create mode 100644 components/rx/version/2.1/rxswitch.pas create mode 100644 components/rx/version/2.1/rxsystemservices.pas create mode 100644 components/rx/version/2.1/rxtbrsetup.lfm create mode 100644 components/rx/version/2.1/rxtbrsetup.lrt create mode 100644 components/rx/version/2.1/rxtbrsetup.pas create mode 100644 components/rx/version/2.1/rxtimeedit.pas create mode 100644 components/rx/version/2.1/rxtoolbar.pas create mode 100644 components/rx/version/2.1/rxversinfo.pas create mode 100644 components/rx/version/2.1/rxviewspanel.pas create mode 100644 components/rx/version/2.1/rxxpman.pas create mode 100644 components/rx/version/2.1/seldsfrm.lfm create mode 100644 components/rx/version/2.1/seldsfrm.lrs create mode 100644 components/rx/version/2.1/seldsfrm.lrt create mode 100644 components/rx/version/2.1/seldsfrm.pas create mode 100644 components/rx/version/2.1/tooledit.pas create mode 100644 components/rx/version/2.1/tooledit.res create mode 100644 components/rx/version/2.1/vclutils.pas diff --git a/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.ico b/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.ico new file mode 100644 index 0000000000000000000000000000000000000000..0341321b5d952e1662a3d9444a73cf9f42a7db37 GIT binary patch literal 137040 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 G`+orYGy**U literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.lpi b/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.lpi new file mode 100644 index 000000000..19e068f15 --- /dev/null +++ b/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.lpi @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.lpr b/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.lpr new file mode 100644 index 000000000..73660a78b --- /dev/null +++ b/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.lpr @@ -0,0 +1,41 @@ +{ Demo application from RXFPC + + Copyright (C) 2009 Lagunov Aleksey (alexs75@hotbox.ru) + + This source is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This code is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + details. + + A copy of the GNU General Public License is available on the World Wide Web + at . You can also obtain it by writing + to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. +} + +program AutoSortDemo; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, + rxsortmemds, //Include this unit for use auto sort data in TRxMemoryData with RxDBGrid + asdMainUnit; + +{$IFDEF WINDOWS}{$R AutoSortDemo.rc}{$ENDIF} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.manifest b/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.manifest new file mode 100644 index 000000000..515fedeef --- /dev/null +++ b/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.manifest @@ -0,0 +1,17 @@ + + + + Your application description here. + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.rc b/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.rc new file mode 100644 index 000000000..13563b242 --- /dev/null +++ b/components/rx/version/2.1/Demos/AutoSort/AutoSortDemo.rc @@ -0,0 +1,7 @@ +#define RT_MANIFEST 24 +#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 +#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2 +#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3 + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "AutoSortDemo.manifest" +MAINICON ICON "AutoSortDemo.ico" diff --git a/components/rx/version/2.1/Demos/AutoSort/asdmainunit.lfm b/components/rx/version/2.1/Demos/AutoSort/asdmainunit.lfm new file mode 100644 index 000000000..5ca355397 --- /dev/null +++ b/components/rx/version/2.1/Demos/AutoSort/asdmainunit.lfm @@ -0,0 +1,146 @@ +object Form1: TForm1 + Left = 366 + Height = 524 + Top = 217 + Width = 780 + Caption = 'Auto sort demo' + ClientHeight = 524 + ClientWidth = 780 + OnCreate = FormCreate + LCLVersion = '0.9.27' + object RxDBGrid1: TRxDBGrid + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = CheckBox1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 6 + Height = 456 + Top = 62 + Width = 768 + TitleButtons = True + AutoSort = True + Columns = < + item + Title.Alignment = taCenter + Title.Orientation = toHorizontal + Width = 88 + FieldName = 'ID' + Filter.DropDownRows = 0 + Filter.ItemIndex = -1 + end + item + Title.Alignment = taCenter + Title.Orientation = toHorizontal + Width = 350 + FieldName = 'NAME' + Filter.DropDownRows = 0 + Filter.ItemIndex = -1 + end + item + Title.Alignment = taCenter + Title.Orientation = toHorizontal + Width = 100 + FieldName = 'DATE_ENTER' + Filter.DropDownRows = 0 + Filter.ItemIndex = -1 + end> + OptionsRx = [] + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + FocusColor = clRed + SelectedColor = clHighlight + GridLineStyle = psSolid + DataSource = Datasource1 + ParentColor = False + TabOrder = 0 + TitleStyle = tsNative + end + object CheckBox1: TCheckBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = CheckBox2 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 22 + Top = 34 + Width = 104 + BorderSpacing.Around = 6 + Caption = 'Title buttons' + OnChange = CheckBox2Change + TabOrder = 1 + end + object CheckBox2: TCheckBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 22 + Top = 6 + Width = 84 + BorderSpacing.Around = 6 + Caption = 'Auto sort' + OnChange = CheckBox2Change + TabOrder = 2 + end + object RxMemoryData1: TRxMemoryData + AutoCalcFields = False + FieldDefs = < + item + Name = 'ID' + DataType = ftInteger + Precision = -1 + Size = 0 + end + item + Name = 'NAME' + DataType = ftString + Precision = -1 + Size = 100 + end + item + Name = 'DATE_ENTER' + DataType = ftDate + Precision = -1 + Size = 0 + end> + left = 192 + top = 16 + object RxMemoryData1ID: TLongintField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'ID' + Index = 0 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + object RxMemoryData1NAME: TStringField + DisplayWidth = 100 + FieldKind = fkData + FieldName = 'NAME' + Index = 1 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 100 + end + object RxMemoryData1DATE_ENTER: TDateField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'DATE_ENTER' + Index = 2 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + end + object Datasource1: TDatasource + DataSet = RxMemoryData1 + left = 152 + top = 16 + end +end diff --git a/components/rx/version/2.1/Demos/AutoSort/asdmainunit.lrs b/components/rx/version/2.1/Demos/AutoSort/asdmainunit.lrs new file mode 100644 index 000000000..9f09fbc04 --- /dev/null +++ b/components/rx/version/2.1/Demos/AutoSort/asdmainunit.lrs @@ -0,0 +1,46 @@ +{ Это - файл реÑурÑов, автоматичеÑки Ñозданный lazarus } + +LazarusResources.Add('TForm1','FORMDATA',[ + 'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'n'#1#6'Height'#3#12#2#3'Top'#3#217#0#5'Wi' + +'dth'#3#12#3#7'Caption'#6#14'Auto sort demo'#12'ClientHeight'#3#12#2#11'Clie' + +'ntWidth'#3#12#3#8'OnCreate'#7#10'FormCreate'#10'LCLVersion'#6#6'0.9.27'#0#9 + +'TRxDBGrid'#9'RxDBGrid1'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSide' + +'Top.Control'#7#9'CheckBox1'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'Anchor' + +'SideRight.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#24'An' + +'chorSideBottom.Control'#7#5'Owner'#21'AnchorSideBottom.Side'#7#9'asrBottom' + +#4'Left'#2#6#6'Height'#3#200#1#3'Top'#2'>'#5'Width'#3#0#3#12'TitleButtons'#9 + +#8'AutoSort'#9#7'Columns'#14#1#15'Title.Alignment'#7#8'taCenter'#17'Title.Or' + +'ientation'#7#12'toHorizontal'#5'Width'#2'X'#9'FieldName'#6#2'ID'#19'Filter.' + +'DropDownRows'#2#0#16'Filter.ItemIndex'#2#255#0#1#15'Title.Alignment'#7#8'ta' + +'Center'#17'Title.Orientation'#7#12'toHorizontal'#5'Width'#3'^'#1#9'FieldNam' + +'e'#6#4'NAME'#19'Filter.DropDownRows'#2#0#16'Filter.ItemIndex'#2#255#0#1#15 + +'Title.Alignment'#7#8'taCenter'#17'Title.Orientation'#7#12'toHorizontal'#5'W' + +'idth'#2'd'#9'FieldName'#6#10'DATE_ENTER'#19'Filter.DropDownRows'#2#0#16'Fil' + +'ter.ItemIndex'#2#255#0#0#9'OptionsRx'#11#0#7'Anchors'#11#5'akTop'#6'akLeft' + +#7'akRight'#8'akBottom'#0#20'BorderSpacing.Around'#2#6#10'FocusColor'#7#5'cl' + +'Red'#13'SelectedColor'#7#11'clHighlight'#13'GridLineStyle'#7#7'psSolid'#10 + +'DataSource'#7#11'Datasource1'#11'ParentColor'#8#8'TabOrder'#2#0#10'TitleSty' + +'le'#7#8'tsNative'#0#0#9'TCheckBox'#9'CheckBox1'#22'AnchorSideLeft.Control'#7 + +#5'Owner'#21'AnchorSideTop.Control'#7#9'CheckBox2'#18'AnchorSideTop.Side'#7#9 + +'asrBottom'#4'Left'#2#6#6'Height'#2#22#3'Top'#2'"'#5'Width'#2'h'#20'BorderSp' + +'acing.Around'#2#6#7'Caption'#6#13'Title buttons'#8'OnChange'#7#15'CheckBox2' + +'Change'#8'TabOrder'#2#1#0#0#9'TCheckBox'#9'CheckBox2'#22'AnchorSideLeft.Con' + +'trol'#7#5'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#2#6#6'Height' + +#2#22#3'Top'#2#6#5'Width'#2'T'#20'BorderSpacing.Around'#2#6#7'Caption'#6#9'A' + +'uto sort'#8'OnChange'#7#15'CheckBox2Change'#8'TabOrder'#2#2#0#0#13'TRxMemor' + +'yData'#13'RxMemoryData1'#14'AutoCalcFields'#8#9'FieldDefs'#14#1#4'Name'#6#2 + +'ID'#8'DataType'#7#9'ftInteger'#9'Precision'#2#255#4'Size'#2#0#0#1#4'Name'#6 + +#4'NAME'#8'DataType'#7#8'ftString'#9'Precision'#2#255#4'Size'#2'd'#0#1#4'Nam' + +'e'#6#10'DATE_ENTER'#8'DataType'#7#6'ftDate'#9'Precision'#2#255#4'Size'#2#0#0 + +#0#4'left'#3#192#0#3'top'#2#16#0#13'TLongintField'#15'RxMemoryData1ID'#12'Di' + +'splayWidth'#2#10#9'FieldKind'#7#6'fkData'#9'FieldName'#6#2'ID'#5'Index'#2#0 + +#11'LookupCache'#8#13'ProviderFlags'#11#10'pfInUpdate'#9'pfInWhere'#0#8'Read' + +'Only'#8#8'Required'#8#0#0#12'TStringField'#17'RxMemoryData1NAME'#12'Display' + +'Width'#2'd'#9'FieldKind'#7#6'fkData'#9'FieldName'#6#4'NAME'#5'Index'#2#1#11 + +'LookupCache'#8#13'ProviderFlags'#11#10'pfInUpdate'#9'pfInWhere'#0#8'ReadOnl' + +'y'#8#8'Required'#8#4'Size'#2'd'#0#0#10'TDateField'#23'RxMemoryData1DATE_ENT' + +'ER'#12'DisplayWidth'#2#10#9'FieldKind'#7#6'fkData'#9'FieldName'#6#10'DATE_E' + +'NTER'#5'Index'#2#2#11'LookupCache'#8#13'ProviderFlags'#11#10'pfInUpdate'#9 + +'pfInWhere'#0#8'ReadOnly'#8#8'Required'#8#0#0#0#11'TDatasource'#11'Datasourc' + +'e1'#7'DataSet'#7#13'RxMemoryData1'#4'left'#3#152#0#3'top'#2#16#0#0#0 +]); diff --git a/components/rx/version/2.1/Demos/AutoSort/asdmainunit.pas b/components/rx/version/2.1/Demos/AutoSort/asdmainunit.pas new file mode 100644 index 000000000..21f70f43a --- /dev/null +++ b/components/rx/version/2.1/Demos/AutoSort/asdmainunit.pas @@ -0,0 +1,82 @@ +{ Demo application from RXFPC + + Copyright (C) 2009 Lagunov Aleksey (alexs75@hotbox.ru) + + This source is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This code is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + details. + + A copy of the GNU General Public License is available on the World Wide Web + at . You can also obtain it by writing + to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. +} + +unit asdMainUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, db, FileUtil, LResources, Forms, Controls, Graphics, + Dialogs, StdCtrls, rxmemds, rxdbgrid; + +type + + { TForm1 } + + TForm1 = class(TForm) + CheckBox1: TCheckBox; + CheckBox2: TCheckBox; + Datasource1: TDatasource; + RxDBGrid1: TRxDBGrid; + RxMemoryData1: TRxMemoryData; + RxMemoryData1DATE_ENTER: TDateField; + RxMemoryData1ID: TLongintField; + RxMemoryData1NAME: TStringField; + procedure CheckBox2Change(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + Form1: TForm1; + +implementation + +{ TForm1 } + +procedure TForm1.FormCreate(Sender: TObject); +begin + RxMemoryData1.Open; + RxMemoryData1.AppendRecord([1, 'Delphi', EncodeDate(1995, 8, 1)]); + RxMemoryData1.AppendRecord([2, 'Turbo Pascal', EncodeDate(1983, 8, 1)]); + RxMemoryData1.AppendRecord([3, 'Free Pascal', EncodeDate(1993, 1, 1)]); + RxMemoryData1.AppendRecord([4, 'Lazarus', Now]); + + CheckBox2.Checked:=RxDBGrid1.AutoSort; + CheckBox1.Checked:=RxDBGrid1.TitleButtons; + +end; + +procedure TForm1.CheckBox2Change(Sender: TObject); +begin + RxDBGrid1.AutoSort:=CheckBox2.Checked; + RxDBGrid1.TitleButtons:=CheckBox1.Checked; +end; + +initialization + {$I asdmainunit.lrs} + +end. + diff --git a/components/rx/version/2.1/Demos/FolderLister/AboutUnit.lfm b/components/rx/version/2.1/Demos/FolderLister/AboutUnit.lfm new file mode 100644 index 000000000..8eab276ff --- /dev/null +++ b/components/rx/version/2.1/Demos/FolderLister/AboutUnit.lfm @@ -0,0 +1,55 @@ +object AboutForm: TAboutForm + Left = 393 + Height = 163 + Top = 386 + Width = 274 + ActiveControl = BitBtn1 + Caption = 'About...' + ClientHeight = 163 + ClientWidth = 274 + Position = poDesktopCenter + LCLVersion = '0.9.27' + object Label1: TLabel + Left = 8 + Height = 18 + Top = 16 + Width = 262 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + Caption = 'FolderLister component demo' + ParentColor = False + end + object Label2: TLabel + Left = 8 + Height = 18 + Top = 56 + Width = 261 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + Caption = '(c) 2005-2009 by Alexs' + ParentColor = False + end + object Label3: TLabel + Left = 8 + Height = 18 + Top = 84 + Width = 262 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + Caption = 'alexs75@hotbox.ru' + ParentColor = False + end + object BitBtn1: TBitBtn + Left = 96 + Height = 34 + Top = 123 + Width = 56 + Anchors = [akLeft, akBottom] + AutoSize = True + Caption = '&' + Default = True + Kind = bkOK + ModalResult = 1 + TabOrder = 0 + end +end diff --git a/components/rx/version/2.1/Demos/FolderLister/AboutUnit.lrs b/components/rx/version/2.1/Demos/FolderLister/AboutUnit.lrs new file mode 100644 index 000000000..86a30477b --- /dev/null +++ b/components/rx/version/2.1/Demos/FolderLister/AboutUnit.lrs @@ -0,0 +1,19 @@ +{ Ýòî - ôàéë ðåñóðñîâ, àâòîìàòè÷åñêè ñîçäàííûé lazarus } + +LazarusResources.Add('TAboutForm','FORMDATA',[ + 'TPF0'#10'TAboutForm'#9'AboutForm'#4'Left'#3#137#1#6'Height'#3#163#0#3'Top'#3 + +#130#1#5'Width'#3#18#1#13'ActiveControl'#7#7'BitBtn1'#7'Caption'#6#8'About..' + +'.'#12'ClientHeight'#3#163#0#11'ClientWidth'#3#18#1#8'Position'#7#15'poDeskt' + +'opCenter'#10'LCLVersion'#6#6'0.9.27'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'He' + +'ight'#2#18#3'Top'#2#16#5'Width'#3#6#1#9'Alignment'#7#8'taCenter'#7'Anchors' + +#11#5'akTop'#6'akLeft'#7'akRight'#0#7'Caption'#6#27'FolderLister component d' + +'emo'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#8#6'Height'#2#18#3 + +'Top'#2'8'#5'Width'#3#5#1#9'Alignment'#7#8'taCenter'#7'Anchors'#11#5'akTop'#6 + +'akLeft'#7'akRight'#0#7'Caption'#6#22'(c) 2005-2009 by Alexs'#11'ParentColor' + +#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#8#6'Height'#2#18#3'Top'#2'T'#5'Width'#3 + +#6#1#9'Alignment'#7#8'taCenter'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0 + +#7'Caption'#6#17'alexs75@hotbox.ru'#11'ParentColor'#8#0#0#7'TBitBtn'#7'BitBt' + +'n1'#4'Left'#2'`'#6'Height'#2'"'#3'Top'#2'{'#5'Width'#2'8'#7'Anchors'#11#6'a' + +'kLeft'#8'akBottom'#0#8'AutoSize'#9#7'Caption'#6#5'&'#208#158#208#154#7'Defa' + +'ult'#9#4'Kind'#7#4'bkOK'#11'ModalResult'#2#1#8'TabOrder'#2#0#0#0#0 +]); diff --git a/components/rx/version/2.1/Demos/FolderLister/AboutUnit.pas b/components/rx/version/2.1/Demos/FolderLister/AboutUnit.pas new file mode 100644 index 000000000..0c089edfc --- /dev/null +++ b/components/rx/version/2.1/Demos/FolderLister/AboutUnit.pas @@ -0,0 +1,35 @@ +unit AboutUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons, + StdCtrls; + +type + + { TAboutForm } + + TAboutForm = class(TForm) + BitBtn1: TBitBtn; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + private + { private declarations } + public + { public declarations } + end; + +var + AboutForm: TAboutForm; + +implementation + +initialization + {$I AboutUnit.lrs} + +end. + diff --git a/components/rx/version/2.1/Demos/FolderLister/FolderLister.lpi b/components/rx/version/2.1/Demos/FolderLister/FolderLister.lpi new file mode 100644 index 000000000..47e2b88ab --- /dev/null +++ b/components/rx/version/2.1/Demos/FolderLister/FolderLister.lpi @@ -0,0 +1,202 @@ + + + + + + + + + + + + + <ActiveEditorIndexAtStart Value="0"/> + </General> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="2"> + <Item1> + <PackageName Value="RxNew"/> + <MinVersion Major="1" Release="1" Build="2" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + </RequiredPackages> + <Units Count="15"> + <Unit0> + <Filename Value="FolderLister.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="FolderLister"/> + <CursorPos X="24" Y="2"/> + <TopLine Value="1"/> + <UsageCount Value="23"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <ComponentName Value="MainForm"/> + <IsPartOfProject Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + <CursorPos X="54" Y="78"/> + <TopLine Value="59"/> + <EditorIndex Value="0"/> + <UsageCount Value="23"/> + <Loaded Value="True"/> + </Unit1> + <Unit2> + <Filename Value="C:\lazarus\components\RxNew\FolderLister.pas"/> + <UnitName Value="FolderLister"/> + <CursorPos X="1" Y="88"/> + <TopLine Value="70"/> + <UsageCount Value="11"/> + </Unit2> + <Unit3> + <Filename Value="c:\lazarus\fpcsrc\rtl\objpas\sysutils\filutilh.inc"/> + <CursorPos X="64" Y="123"/> + <TopLine Value="110"/> + <UsageCount Value="10"/> + </Unit3> + <Unit4> + <Filename Value="C:\lazarus\fpcsrc\rtl\win32\system.pp"/> + <UnitName Value="System"/> + <CursorPos X="52" Y="331"/> + <TopLine Value="314"/> + <UsageCount Value="10"/> + </Unit4> + <Unit5> + <Filename Value="C:\lazarus\components\RxNew\RxAppUtils.pas"/> + <UnitName Value="RxAppUtils"/> + <CursorPos X="6" Y="1"/> + <TopLine Value="1"/> + <UsageCount Value="10"/> + </Unit5> + <Unit6> + <Filename Value="AboutUnit.pas"/> + <ComponentName Value="AboutForm"/> + <IsPartOfProject Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="AboutUnit"/> + <CursorPos X="3" Y="15"/> + <TopLine Value="1"/> + <UsageCount Value="22"/> + </Unit6> + <Unit7> + <Filename Value="C:\lazarus\lcl\include\customform.inc"/> + <CursorPos X="43" Y="1700"/> + <TopLine Value="1695"/> + <UsageCount Value="10"/> + </Unit7> + <Unit8> + <Filename Value="unit1.lrs"/> + <CursorPos X="49" Y="2"/> + <TopLine Value="1"/> + <UsageCount Value="10"/> + </Unit8> + <Unit9> + <Filename Value="C:\lazarus\lcl\Forms.pp"/> + <UnitName Value="Forms"/> + <CursorPos X="37" Y="1169"/> + <TopLine Value="1166"/> + <UsageCount Value="10"/> + </Unit9> + <Unit10> + <Filename Value="C:\lazarus\lcl\include\application.inc"/> + <CursorPos X="50" Y="146"/> + <TopLine Value="142"/> + <UsageCount Value="10"/> + </Unit10> + <Unit11> + <Filename Value="C:\lazarus\lcl\Dialogs.pp"/> + <UnitName Value="Dialogs"/> + <CursorPos X="38" Y="48"/> + <TopLine Value="37"/> + <UsageCount Value="10"/> + </Unit11> + <Unit12> + <Filename Value="C:\lazarus\lcl\Controls.pp"/> + <UnitName Value="Controls"/> + <CursorPos X="2" Y="1182"/> + <TopLine Value="1176"/> + <UsageCount Value="10"/> + </Unit12> + <Unit13> + <Filename Value="C:\lazarus\components\RxNew\RX.INC"/> + <CursorPos X="1" Y="1"/> + <TopLine Value="1"/> + <UsageCount Value="10"/> + </Unit13> + <Unit14> + <Filename Value="C:\lazarus\components\RxNew\RXStrutils.pas"/> + <UnitName Value="RxStrUtils"/> + <CursorPos X="1" Y="15"/> + <TopLine Value="1"/> + <UsageCount Value="10"/> + </Unit14> + </Units> + <JumpHistory Count="8" HistoryIndex="7"> + <Position1> + <Filename Value="unit1.pas"/> + <Caret Line="36" Column="5" TopLine="32"/> + </Position1> + <Position2> + <Filename Value="unit1.pas"/> + <Caret Line="67" Column="33" TopLine="51"/> + </Position2> + <Position3> + <Filename Value="unit1.pas"/> + <Caret Line="19" Column="5" TopLine="19"/> + </Position3> + <Position4> + <Filename Value="unit1.pas"/> + <Caret Line="23" Column="12" TopLine="23"/> + </Position4> + <Position5> + <Filename Value="unit1.pas"/> + <Caret Line="53" Column="20" TopLine="47"/> + </Position5> + <Position6> + <Filename Value="unit1.pas"/> + <Caret Line="36" Column="47" TopLine="36"/> + </Position6> + <Position7> + <Filename Value="unit1.pas"/> + <Caret Line="64" Column="8" TopLine="53"/> + </Position7> + <Position8> + <Filename Value="unit1.pas"/> + <Caret Line="35" Column="43" TopLine="35"/> + </Position8> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="8"/> + <PathDelim Value="\"/> + <SearchPaths> + <SrcPath Value="$(LazarusDir)\lcl\;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType)\"/> + </SearchPaths> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="2"> + <Item1> + <Name Value="ECodetoolError"/> + </Item1> + <Item2> + <Name Value="EFOpenError"/> + </Item2> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/FolderLister/FolderLister.lpr b/components/rx/version/2.1/Demos/FolderLister/FolderLister.lpr new file mode 100644 index 000000000..bfd11fe8d --- /dev/null +++ b/components/rx/version/2.1/Demos/FolderLister/FolderLister.lpr @@ -0,0 +1,15 @@ +program FolderLister; + +{$mode objfpc}{$H+} + +uses + Interfaces, // this includes the LCL widgetset + Forms + { add your units here }, Unit1, AboutUnit; + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/FolderLister/unit1.lfm b/components/rx/version/2.1/Demos/FolderLister/unit1.lfm new file mode 100644 index 000000000..56f2a45f5 --- /dev/null +++ b/components/rx/version/2.1/Demos/FolderLister/unit1.lfm @@ -0,0 +1,143 @@ +object MainForm: TMainForm + Left = 427 + Height = 300 + Top = 245 + Width = 460 + ActiveControl = Edit1 + Caption = 'Main form' + ClientHeight = 275 + ClientWidth = 460 + Menu = MainMenu1 + OnCreate = FormCreate + Position = poDesktopCenter + ShowHint = True + LCLVersion = '0.9.27' + object Label1: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Edit1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 18 + Top = 63 + Width = 95 + BorderSpacing.Around = 6 + Caption = 'Folder for scan' + ParentColor = False + end + object Label2: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 18 + Top = 6 + Width = 71 + BorderSpacing.Around = 6 + Caption = 'Default ext' + ParentColor = False + end + object Button1: TButton + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = DirectoryEdit1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 29 + Top = 120 + Width = 44 + Action = sysScan + AutoSize = True + BorderSpacing.Around = 6 + TabOrder = 0 + end + object DirectoryEdit1: TDirectoryEdit + AnchorSideLeft.Control = Label1 + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + Left = 12 + Height = 27 + Top = 87 + Width = 417 + Directory = 'C:\lazarus\components\' + ShowHidden = False + ButtonWidth = 23 + NumGlyphs = 1 + Anchors = [akTop, akLeft, akRight] + AutoSize = True + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + TabOrder = 1 + end + object Edit1: TEdit + AnchorSideLeft.Control = Label2 + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + Left = 12 + Height = 27 + Top = 30 + Width = 80 + AutoSize = True + BorderSpacing.Around = 6 + TabOrder = 2 + Text = '.pas' + end + object ActionList1: TActionList + left = 144 + top = 112 + object sysExit: TAction + Category = 'System' + Caption = 'Exit' + DisableIfNoHandler = True + Enabled = False + Hint = 'Exit form demo app' + OnExecute = sysExitExecute + ShortCut = 32856 + end + object hlpAbout: TAction + Category = 'Help' + Caption = 'About' + DisableIfNoHandler = True + Hint = 'Information of app' + OnExecute = hlpAboutExecute + end + object sysScan: TAction + Category = 'System' + Caption = 'Scan' + DisableIfNoHandler = True + Hint = 'Scan folder' + OnExecute = sysRescanExecute + end + end + object MainMenu1: TMainMenu + left = 144 + top = 48 + object SystemItems: TMenuItem + Caption = 'System' + object MenuItem3: TMenuItem + Action = sysScan + OnClick = sysRescanExecute + end + object MenuItem4: TMenuItem + Caption = '-' + end + object MenuItem2: TMenuItem + Action = sysExit + end + end + object FolderItems: TMenuItem + Caption = 'Folder' + end + object HelpItems: TMenuItem + Caption = 'Help' + object MenuItem1: TMenuItem + Action = hlpAbout + OnClick = hlpAboutExecute + end + end + end + object FolderLister1: TFolderLister + DefaultExt = '.pas' + OnExecuteItem = FolderLister1ExecuteItem + MenuItem = FolderItems + left = 144 + top = 12 + end +end diff --git a/components/rx/version/2.1/Demos/FolderLister/unit1.lrs b/components/rx/version/2.1/Demos/FolderLister/unit1.lrs new file mode 100644 index 000000000..741159b3e --- /dev/null +++ b/components/rx/version/2.1/Demos/FolderLister/unit1.lrs @@ -0,0 +1,45 @@ +{ Ýòî - ôàéë ðåñóðñîâ, àâòîìàòè÷åñêè ñîçäàííûé lazarus } + +LazarusResources.Add('TMainForm','FORMDATA',[ + 'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#171#1#6'Height'#3','#1#3'Top'#3#245 + +#0#5'Width'#3#204#1#13'ActiveControl'#7#5'Edit1'#7'Caption'#6#9'Main form'#12 + +'ClientHeight'#3#19#1#11'ClientWidth'#3#204#1#4'Menu'#7#9'MainMenu1'#8'OnCre' + +'ate'#7#10'FormCreate'#8'Position'#7#15'poDesktopCenter'#8'ShowHint'#9#10'LC' + +'LVersion'#6#6'0.9.27'#0#6'TLabel'#6'Label1'#22'AnchorSideLeft.Control'#7#5 + +'Owner'#21'AnchorSideTop.Control'#7#5'Edit1'#18'AnchorSideTop.Side'#7#9'asrB' + +'ottom'#4'Left'#2#6#6'Height'#2#18#3'Top'#2'?'#5'Width'#2'_'#20'BorderSpacin' + +'g.Around'#2#6#7'Caption'#6#15'Folder for scan'#11'ParentColor'#8#0#0#6'TLab' + +'el'#6'Label2'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Contro' + +'l'#7#5'Owner'#4'Left'#2#6#6'Height'#2#18#3'Top'#2#6#5'Width'#2'G'#20'Border' + +'Spacing.Around'#2#6#7'Caption'#6#11'Default ext'#11'ParentColor'#8#0#0#7'TB' + +'utton'#7'Button1'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Co' + +'ntrol'#7#14'DirectoryEdit1'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2 + +#6#6'Height'#2#29#3'Top'#2'x'#5'Width'#2','#6'Action'#7#7'sysScan'#8'AutoSiz' + +'e'#9#20'BorderSpacing.Around'#2#6#8'TabOrder'#2#0#0#0#14'TDirectoryEdit'#14 + +'DirectoryEdit1'#22'AnchorSideLeft.Control'#7#6'Label1'#21'AnchorSideTop.Con' + +'trol'#7#6'Label1'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#12#6'Heig' + +'ht'#2#27#3'Top'#2'W'#5'Width'#3#161#1#9'Directory'#6#22'C:\lazarus\componen' + +'ts\'#10'ShowHidden'#8#11'ButtonWidth'#2#23#9'NumGlyphs'#2#1#7'Anchors'#11#5 + +'akTop'#6'akLeft'#7'akRight'#0#8'AutoSize'#9#18'BorderSpacing.Left'#2#6#17'B' + +'orderSpacing.Top'#2#6#8'TabOrder'#2#1#0#0#5'TEdit'#5'Edit1'#22'AnchorSideLe' + +'ft.Control'#7#6'Label2'#21'AnchorSideTop.Control'#7#6'Label2'#18'AnchorSide' + +'Top.Side'#7#9'asrBottom'#4'Left'#2#12#6'Height'#2#27#3'Top'#2#30#5'Width'#2 + +'P'#8'AutoSize'#9#20'BorderSpacing.Around'#2#6#8'TabOrder'#2#2#4'Text'#6#4'.' + +'pas'#0#0#11'TActionList'#11'ActionList1'#4'left'#3#144#0#3'top'#2'p'#0#7'TA' + +'ction'#7'sysExit'#8'Category'#6#6'System'#7'Caption'#6#4'Exit'#18'DisableIf' + +'NoHandler'#9#7'Enabled'#8#4'Hint'#6#18'Exit form demo app'#9'OnExecute'#7#14 + +'sysExitExecute'#8'ShortCut'#4'X'#128#0#0#0#0#7'TAction'#8'hlpAbout'#8'Categ' + +'ory'#6#4'Help'#7'Caption'#6#5'About'#18'DisableIfNoHandler'#9#4'Hint'#6#18 + +'Information of app'#9'OnExecute'#7#15'hlpAboutExecute'#0#0#7'TAction'#7'sys' + +'Scan'#8'Category'#6#6'System'#7'Caption'#6#4'Scan'#18'DisableIfNoHandler'#9 + +#4'Hint'#6#11'Scan folder'#9'OnExecute'#7#16'sysRescanExecute'#0#0#0#9'TMain' + +'Menu'#9'MainMenu1'#4'left'#3#144#0#3'top'#2'0'#0#9'TMenuItem'#11'SystemItem' + +'s'#7'Caption'#6#6'System'#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#7'sysScan' + +#7'OnClick'#7#16'sysRescanExecute'#0#0#9'TMenuItem'#9'MenuItem4'#7'Caption'#6 + +#1'-'#0#0#9'TMenuItem'#9'MenuItem2'#6'Action'#7#7'sysExit'#0#0#0#9'TMenuItem' + +#11'FolderItems'#7'Caption'#6#6'Folder'#0#0#9'TMenuItem'#9'HelpItems'#7'Capt' + +'ion'#6#4'Help'#0#9'TMenuItem'#9'MenuItem1'#6'Action'#7#8'hlpAbout'#7'OnClic' + +'k'#7#15'hlpAboutExecute'#0#0#0#0#13'TFolderLister'#13'FolderLister1'#10'Def' + +'aultExt'#6#4'.pas'#13'OnExecuteItem'#7#24'FolderLister1ExecuteItem'#8'MenuI' + +'tem'#7#11'FolderItems'#4'left'#3#144#0#3'top'#2#12#0#0#0 +]); diff --git a/components/rx/version/2.1/Demos/FolderLister/unit1.pas b/components/rx/version/2.1/Demos/FolderLister/unit1.pas new file mode 100644 index 000000000..9750e98ec --- /dev/null +++ b/components/rx/version/2.1/Demos/FolderLister/unit1.pas @@ -0,0 +1,92 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ActnList, + Menus, FolderLister, Buttons, EditBtn, StdCtrls; + +type + + { TMainForm } + + TMainForm = class(TForm) + Edit1: TEdit; + FolderLister1: TFolderLister; + Label2: TLabel; + MenuItem1: TMenuItem; + MenuItem2: TMenuItem; + MenuItem3: TMenuItem; + MenuItem4: TMenuItem; + sysScan: TAction; + Button1: TButton; + DirectoryEdit1: TDirectoryEdit; + hlpAbout: TAction; + Label1: TLabel; + sysExit: TAction; + ActionList1: TActionList; + MainMenu1: TMainMenu; + SystemItems: TMenuItem; + HelpItems: TMenuItem; + FolderItems: TMenuItem; + procedure FolderLister1ExecuteItem(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure hlpAboutExecute(Sender: TObject); + procedure sysExitExecute(Sender: TObject); + procedure sysRescanExecute(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + MainForm: TMainForm; + +implementation +uses AboutUnit; + +{ TMainForm } + +procedure TMainForm.hlpAboutExecute(Sender: TObject); +begin + AboutForm:=TAboutForm.Create(Application); + try + AboutForm.ShowModal; + finally + AboutForm.Free; + end; +end; + +procedure TMainForm.sysExitExecute(Sender: TObject); +begin + Close; +end; + +procedure TMainForm.FolderLister1ExecuteItem(Sender: TObject); +var + S:string; +begin + S:='Selected: '+FolderLister1.Files[(Sender as TComponent).Tag]; + MessageDlg('Result', S, mtInformation, [mbOK], 0); +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + DirectoryEdit1.Directory:=ExtractFileDir(ParamStr(0)); +end; + +procedure TMainForm.sysRescanExecute(Sender: TObject); +begin + FolderLister1.FileFolder:=DirectoryEdit1.Text; + FolderLister1.DefaultExt:=Edit1.Text; + FolderLister1.Execute; +end; + +initialization + {$I unit1.lrs} + +end. + diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.ico b/components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.ico new file mode 100644 index 0000000000000000000000000000000000000000..c33c1385ac46ee6a56da3339f7ae1a273a1f2948 GIT binary patch literal 53038 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 literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.lpi b/components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.lpi new file mode 100644 index 000000000..9dfb58b14 --- /dev/null +++ b/components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.lpi @@ -0,0 +1,310 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <General> + <Flags> + <LRSInOutputDirectory Value="False"/> + </Flags> + <MainUnit Value="0"/> + <AutoCreateForms Value="False"/> + <Title Value="Phone book demo"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> + <Icon Value="0"/> + <ActiveWindowIndexAtStart Value="0"/> + </General> + <i18n> + <EnableI18N Value="True"/> + <OutDir Value="languages"/> + </i18n> + <VersionInfo> + <UseVersionInfo Value="True"/> + <AutoIncrementBuild Value="True"/> + <Language Value=""/> + <CharSet Value=""/> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="4"> + <Item1> + <PackageName Value="FCL"/> + <MinVersion Major="1" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="DBFLaz"/> + <MinVersion Minor="1" Release="1" Valid="True"/> + </Item2> + <Item3> + <PackageName Value="rxnew"/> + <MinVersion Major="1" Minor="1" Release="4" Build="93" Valid="True"/> + </Item3> + <Item4> + <PackageName Value="LCL"/> + </Item4> + </RequiredPackages> + <Units Count="11"> + <Unit0> + <Filename Value="PhoneBookDemo.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="PhoneBookDemo"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="1"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="3" Y="12"/> + <UsageCount Value="27"/> + <Loaded Value="True"/> + </Unit0> + <Unit1> + <Filename Value="pbmainunit.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="pbMainForm"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="pbMainUnit"/> + <EditorIndex Value="0"/> + <WindowIndex Value="0"/> + <TopLine Value="59"/> + <CursorPos X="52" Y="23"/> + <UsageCount Value="27"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit1> + <Unit2> + <Filename Value="usr/local/share/lazarus/components/rxnew/Demos/PhoneBookDemo/pbmainunit.pas"/> + <ComponentName Value="pbMainForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="pbMainUnit"/> + <TopLine Value="1"/> + <CursorPos X="5" Y="9"/> + <UsageCount Value="10"/> + </Unit2> + <Unit3> + <Filename Value="usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/> + <UnitName Value="rxdbgrid"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="10"/> + </Unit3> + <Unit4> + <Filename Value="pbeditdataunit.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="pbEditDataForm"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="pbEditDataUnit"/> + <EditorIndex Value="2"/> + <WindowIndex Value="0"/> + <TopLine Value="15"/> + <CursorPos X="3" Y="15"/> + <UsageCount Value="25"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit4> + <Unit5> + <Filename Value="../../rxcloseformvalidator.pas"/> + <UnitName Value="RxCloseFormValidator"/> + <WindowIndex Value="0"/> + <TopLine Value="130"/> + <CursorPos X="3" Y="159"/> + <UsageCount Value="10"/> + </Unit5> + <Unit6> + <Filename Value="../../../../lcl/dialogs.pp"/> + <UnitName Value="Dialogs"/> + <WindowIndex Value="0"/> + <TopLine Value="27"/> + <CursorPos X="13" Y="45"/> + <UsageCount Value="10"/> + </Unit6> + <Unit7> + <Filename Value="../../../../lcl/include/promptdialog.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="868"/> + <CursorPos X="1" Y="886"/> + <UsageCount Value="10"/> + </Unit7> + <Unit8> + <Filename Value="../../../../lcl/lcltype.pp"/> + <UnitName Value="LCLType"/> + <WindowIndex Value="0"/> + <TopLine Value="716"/> + <CursorPos X="3" Y="723"/> + <UsageCount Value="10"/> + </Unit8> + <Unit9> + <Filename Value="../../rxaboutdialog.pas"/> + <UnitName Value="RxAboutDialog"/> + <WindowIndex Value="0"/> + <TopLine Value="96"/> + <CursorPos X="18" Y="103"/> + <UsageCount Value="10"/> + </Unit9> + <Unit10> + <Filename Value="../../rxconst.pas"/> + <UnitName Value="rxconst"/> + <WindowIndex Value="0"/> + <TopLine Value="88"/> + <CursorPos X="3" Y="113"/> + <UsageCount Value="10"/> + </Unit10> + </Units> + <JumpHistory Count="27" HistoryIndex="26"> + <Position1> + <Filename Value="pbmainunit.pas"/> + <Caret Line="81" Column="9" TopLine="49"/> + </Position1> + <Position2> + <Filename Value="pbmainunit.pas"/> + <Caret Line="82" Column="9" TopLine="50"/> + </Position2> + <Position3> + <Filename Value="pbmainunit.pas"/> + <Caret Line="83" Column="9" TopLine="51"/> + </Position3> + <Position4> + <Filename Value="pbmainunit.pas"/> + <Caret Line="82" Column="9" TopLine="50"/> + </Position4> + <Position5> + <Filename Value="pbmainunit.pas"/> + <Caret Line="81" Column="9" TopLine="49"/> + </Position5> + <Position6> + <Filename Value="pbmainunit.pas"/> + <Caret Line="80" Column="9" TopLine="48"/> + </Position6> + <Position7> + <Filename Value="pbmainunit.pas"/> + <Caret Line="87" Column="9" TopLine="51"/> + </Position7> + <Position8> + <Filename Value="pbmainunit.pas"/> + <Caret Line="82" Column="5" TopLine="55"/> + </Position8> + <Position9> + <Filename Value="pbmainunit.pas"/> + <Caret Line="83" Column="26" TopLine="56"/> + </Position9> + <Position10> + <Filename Value="pbmainunit.pas"/> + <Caret Line="84" Column="26" TopLine="57"/> + </Position10> + <Position11> + <Filename Value="pbmainunit.pas"/> + <Caret Line="91" Column="26" TopLine="58"/> + </Position11> + <Position12> + <Filename Value="pbmainunit.pas"/> + <Caret Line="95" Column="23" TopLine="65"/> + </Position12> + <Position13> + <Filename Value="pbmainunit.pas"/> + <Caret Line="101" Column="13" TopLine="80"/> + </Position13> + <Position14> + <Filename Value="pbmainunit.pas"/> + <Caret Line="101" Column="78" TopLine="80"/> + </Position14> + <Position15> + <Filename Value="pbmainunit.pas"/> + <Caret Line="91" Column="29" TopLine="79"/> + </Position15> + <Position16> + <Filename Value="pbeditdataunit.pas"/> + <Caret Line="15" Column="3" TopLine="3"/> + </Position16> + <Position17> + <Filename Value="pbmainunit.pas"/> + <Caret Line="101" Column="74" TopLine="79"/> + </Position17> + <Position18> + <Filename Value="pbmainunit.pas"/> + <Caret Line="75" Column="15" TopLine="41"/> + </Position18> + <Position19> + <Filename Value="pbmainunit.pas"/> + <Caret Line="74" Column="39" TopLine="40"/> + </Position19> + <Position20> + <Filename Value="pbmainunit.pas"/> + <Caret Line="101" Column="72" TopLine="81"/> + </Position20> + <Position21> + <Filename Value="pbmainunit.pas"/> + <Caret Line="106" Column="1" TopLine="81"/> + </Position21> + <Position22> + <Filename Value="pbmainunit.pas"/> + <Caret Line="102" Column="1" TopLine="80"/> + </Position22> + <Position23> + <Filename Value="pbmainunit.pas"/> + <Caret Line="101" Column="1" TopLine="79"/> + </Position23> + <Position24> + <Filename Value="pbmainunit.pas"/> + <Caret Line="103" Column="1" TopLine="81"/> + </Position24> + <Position25> + <Filename Value="pbeditdataunit.pas"/> + <Caret Line="15" Column="3" TopLine="3"/> + </Position25> + <Position26> + <Filename Value="pbmainunit.pas"/> + <Caret Line="108" Column="13" TopLine="86"/> + </Position26> + <Position27> + <Filename Value="pbmainunit.pas"/> + <Caret Line="36" Column="28" TopLine="18"/> + </Position27> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="PhoneBookDemo"/> + </Target> + <SearchPaths> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerMessages> + <UseMsgFile Value="True"/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Watches Count="1"> + <Item1> + <Expression Value="W"/> + </Item1> + </Watches> + </Debugging> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.lpr b/components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.lpr new file mode 100644 index 000000000..2161a985f --- /dev/null +++ b/components/rx/version/2.1/Demos/PhoneBookDemo/PhoneBookDemo.lpr @@ -0,0 +1,22 @@ +program PhoneBookDemo; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, + pbMainUnit, + pbEditDataUnit; + +{$R PhoneBookDemo.res} + +begin + Application.Title:='Phone book demo'; + Application.Initialize; + Application.CreateForm(TpbMainForm, pbMainForm); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/bases/PhoneBook.DBF b/components/rx/version/2.1/Demos/PhoneBookDemo/bases/PhoneBook.DBF new file mode 100644 index 0000000000000000000000000000000000000000..73c7f42a74d707673131fc7cb67af6ffdd228bca GIT binary patch literal 730 zcmZq9V`gGvU|?Wmd;=sgfu{>x%n!t3g>xZ{0LPFZf4@jyPiF>akVq7oyq}}5D^v(9 zuYo2X92x{uf>l1i!`}~T09alQO~0peAWQ@-F9PF1X<t`ge;5-)b3r*UidO*)%2U%I u462jGDa4taQcRrHDaH8ABgV4w)Dq&XB3Tu&<^ugto=Sx2_`?prtP}uXH&SZ= literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/bases/PhoneBook.DBT b/components/rx/version/2.1/Demos/PhoneBookDemo/bases/PhoneBook.DBT new file mode 100644 index 0000000000000000000000000000000000000000..f66c9cf4c9672fa2832bce76f4082fd97b823506 GIT binary patch literal 4 LcmZQ%U|;|M00;mA literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/languages/PhoneBookDemo.po b/components/rx/version/2.1/Demos/PhoneBookDemo/languages/PhoneBookDemo.po new file mode 100644 index 000000000..3cc416a33 --- /dev/null +++ b/components/rx/version/2.1/Demos/PhoneBookDemo/languages/PhoneBookDemo.po @@ -0,0 +1,127 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: tpbeditdataform.caption +msgid "Phone book data" +msgstr "" + +#: tpbeditdataform.label1.caption +msgid "Patronymic" +msgstr "" + +#: tpbeditdataform.label2.caption +msgid "Name" +msgstr "" + +#: tpbeditdataform.label3.caption +msgid "Surname" +msgstr "" + +#: tpbeditdataform.label4.caption +msgid "Phone" +msgstr "" + +#: tpbeditdataform.label5.caption +msgctxt "TPBEDITDATAFORM.LABEL5.CAPTION" +msgid "ICQ" +msgstr "" + +#: tpbeditdataform.label6.caption +msgid "Memo" +msgstr "" + +#: tpbmainform.caption +msgid "Phone book" +msgstr "" + +#: tpbmainform.edtdelete.caption +msgid "Delete" +msgstr "" + +#: tpbmainform.edtedit.caption +msgctxt "TPBMAINFORM.EDTEDIT.CAPTION" +msgid "Edit" +msgstr "" + +#: tpbmainform.edtfind.caption +msgid "Find" +msgstr "" + +#: tpbmainform.edtnew.caption +msgid "New" +msgstr "" + +#: tpbmainform.edtprint.caption +msgid "Print" +msgstr "" + +#: tpbmainform.hlpabout.caption +msgid "About" +msgstr "" + +#: tpbmainform.menuitem1.caption +msgid "System" +msgstr "" + +#: tpbmainform.menuitem10.caption +msgctxt "TPBMAINFORM.MENUITEM10.CAPTION" +msgid "-" +msgstr "" + +#: tpbmainform.menuitem14.caption +msgctxt "TPBMAINFORM.MENUITEM14.CAPTION" +msgid "-" +msgstr "" + +#: tpbmainform.menuitem16.caption +msgctxt "TPBMAINFORM.MENUITEM16.CAPTION" +msgid "-" +msgstr "" + +#: tpbmainform.menuitem18.caption +msgid "Help" +msgstr "" + +#: tpbmainform.menuitem3.caption +msgctxt "TPBMAINFORM.MENUITEM3.CAPTION" +msgid "Edit" +msgstr "" + +#: tpbmainform.menuitem7.caption +msgctxt "TPBMAINFORM.MENUITEM7.CAPTION" +msgid "-" +msgstr "" + +#: tpbmainform.rxdbgrid1.columns[0].title.caption +msgid "ID" +msgstr "" + +#: tpbmainform.rxdbgrid1.columns[1].title.caption +msgid "PATRONYMIC" +msgstr "" + +#: tpbmainform.rxdbgrid1.columns[2].title.caption +msgid "NAME" +msgstr "" + +#: tpbmainform.rxdbgrid1.columns[3].title.caption +msgid "SURNAME" +msgstr "" + +#: tpbmainform.rxdbgrid1.columns[4].title.caption +msgid "PHONE" +msgstr "" + +#: tpbmainform.rxdbgrid1.columns[5].title.caption +msgctxt "TPBMAINFORM.RXDBGRID1.COLUMNS[5].TITLE.CAPTION" +msgid "ICQ" +msgstr "" + +#: tpbmainform.rxdbgrid1.columns[6].title.caption +msgid "MEMO" +msgstr "" + +#: tpbmainform.sysexit.caption +msgid "Exit" +msgstr "" + diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.lfm b/components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.lfm new file mode 100644 index 000000000..5a0e308ea --- /dev/null +++ b/components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.lfm @@ -0,0 +1,228 @@ +object pbEditDataForm: TpbEditDataForm + Left = 492 + Height = 401 + Top = 271 + Width = 530 + Caption = 'Phone book data' + ClientHeight = 401 + ClientWidth = 530 + Position = poScreenCenter + LCLVersion = '0.9.31' + object Label1: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 18 + Top = 6 + Width = 72 + BorderSpacing.Around = 6 + Caption = 'Patronymic' + FocusControl = DBEdit1 + ParentColor = False + end + object Label2: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = DBEdit1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 18 + Top = 63 + Width = 40 + BorderSpacing.Around = 6 + Caption = 'Name' + FocusControl = DBEdit2 + ParentColor = False + end + object Label3: TLabel + AnchorSideLeft.Control = Owner + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = DBEdit1 + AnchorSideTop.Side = asrBottom + Left = 235 + Height = 18 + Top = 63 + Width = 60 + BorderSpacing.Around = 6 + Caption = 'Surname' + FocusControl = DBEdit3 + ParentColor = False + end + object Label4: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = DBEdit2 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 18 + Top = 120 + Width = 41 + BorderSpacing.Around = 6 + Caption = 'Phone' + FocusControl = DBEdit4 + ParentColor = False + end + object Label5: TLabel + AnchorSideLeft.Control = Label3 + AnchorSideTop.Control = DBEdit3 + AnchorSideTop.Side = asrBottom + Left = 235 + Height = 18 + Top = 120 + Width = 23 + BorderSpacing.Top = 6 + BorderSpacing.Bottom = 6 + Caption = 'ICQ' + FocusControl = DBEdit5 + ParentColor = False + end + object Label6: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = DBEdit4 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 18 + Top = 177 + Width = 41 + BorderSpacing.Around = 6 + Caption = 'Memo' + ParentColor = False + end + object DBEdit1: TDBEdit + AnchorSideLeft.Control = Label1 + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 12 + Height = 27 + Top = 30 + Width = 512 + DataField = 'PATRONYMIC' + DataSource = pbMainForm.Datasource1 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + CharCase = ecNormal + MaxLength = 0 + TabOrder = 0 + end + object DBEdit2: TDBEdit + AnchorSideLeft.Control = Label2 + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Label3 + Left = 12 + Height = 27 + Top = 87 + Width = 217 + DataField = 'NAME' + DataSource = pbMainForm.Datasource1 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + CharCase = ecNormal + MaxLength = 0 + TabOrder = 1 + end + object DBEdit3: TDBEdit + AnchorSideLeft.Control = Label3 + AnchorSideTop.Control = Label3 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 241 + Height = 27 + Top = 87 + Width = 283 + DataField = 'SURNAME' + DataSource = pbMainForm.Datasource1 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + CharCase = ecNormal + MaxLength = 0 + TabOrder = 2 + end + object DBEdit4: TDBEdit + AnchorSideLeft.Control = Label4 + AnchorSideTop.Control = Label4 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Label3 + Left = 12 + Height = 27 + Top = 144 + Width = 217 + DataField = 'PHONE' + DataSource = pbMainForm.Datasource1 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + CharCase = ecNormal + MaxLength = 0 + TabOrder = 3 + end + object DBEdit5: TDBEdit + AnchorSideLeft.Control = Label5 + AnchorSideTop.Control = Label5 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 241 + Height = 27 + Top = 144 + Width = 283 + DataField = 'ICQ' + DataSource = pbMainForm.Datasource1 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + CharCase = ecNormal + MaxLength = 0 + TabOrder = 4 + end + object ButtonPanel1: TButtonPanel + Left = 6 + Height = 42 + Top = 353 + Width = 518 + OKButton.Name = 'OKButton' + OKButton.DefaultCaption = True + HelpButton.Name = 'HelpButton' + HelpButton.DefaultCaption = True + CloseButton.Name = 'CloseButton' + CloseButton.DefaultCaption = True + CancelButton.Name = 'CancelButton' + CancelButton.DefaultCaption = True + TabOrder = 5 + ShowButtons = [pbOK, pbCancel, pbHelp] + end + object DBMemo1: TDBMemo + AnchorSideLeft.Control = Label6 + AnchorSideTop.Control = Label6 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = ButtonPanel1 + Left = 12 + Height = 146 + Top = 201 + Width = 512 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + DataField = 'MEMO' + DataSource = pbMainForm.Datasource1 + TabOrder = 6 + end + object RxCloseFormValidator1: TRxCloseFormValidator + ErrorMsgCaption = 'Ошибка. Ðе вÑе требуемые Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ñ‹!' + Items = < + item + Control = DBEdit1 + FieldCaption = 'Patronymic' + end + item + Control = DBEdit2 + FieldCaption = 'Name' + end + item + Control = DBEdit4 + FieldCaption = 'Phone' + end> + left = 376 + top = 8 + end +end diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.lrt b/components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.lrt new file mode 100644 index 000000000..f6beedc93 --- /dev/null +++ b/components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.lrt @@ -0,0 +1,7 @@ +TPBEDITDATAFORM.CAPTION=Phone book data +TPBEDITDATAFORM.LABEL1.CAPTION=Patronymic +TPBEDITDATAFORM.LABEL2.CAPTION=Name +TPBEDITDATAFORM.LABEL3.CAPTION=Surname +TPBEDITDATAFORM.LABEL4.CAPTION=Phone +TPBEDITDATAFORM.LABEL5.CAPTION=ICQ +TPBEDITDATAFORM.LABEL6.CAPTION=Memo diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.pas b/components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.pas new file mode 100644 index 000000000..9cb001807 --- /dev/null +++ b/components/rx/version/2.1/Demos/PhoneBookDemo/pbeditdataunit.pas @@ -0,0 +1,44 @@ +unit pbEditDataUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, RxCloseFormValidator, Forms, Controls, Graphics, + Dialogs, StdCtrls, DbCtrls, ButtonPanel; + +type + + { TpbEditDataForm } + + TpbEditDataForm = class(TForm) + ButtonPanel1: TButtonPanel; + DBEdit1: TDBEdit; + DBEdit2: TDBEdit; + DBEdit3: TDBEdit; + DBEdit4: TDBEdit; + DBEdit5: TDBEdit; + DBMemo1: TDBMemo; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Label6: TLabel; + RxCloseFormValidator1: TRxCloseFormValidator; + private + { private declarations } + public + { public declarations } + end; + +var + pbEditDataForm: TpbEditDataForm; + +implementation + +{$R *.lfm} + +end. + diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.lfm b/components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.lfm new file mode 100644 index 000000000..a289d8479 --- /dev/null +++ b/components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.lfm @@ -0,0 +1,3051 @@ +object pbMainForm: TpbMainForm + Left = 461 + Height = 446 + Top = 365 + Width = 849 + HorzScrollBar.Page = 848 + VertScrollBar.Page = 445 + Caption = 'Phone book' + ClientHeight = 421 + ClientWidth = 849 + Menu = MainMenu1 + OnCreate = FormCreate + Position = poDesktopCenter + LCLVersion = '0.9.31' + object RxDBGrid1: TRxDBGrid + Left = 0 + Height = 369 + Top = 31 + Width = 849 + TitleButtons = False + AutoSort = True + Columns = < + item + Title.Alignment = taCenter + Title.Caption = 'ID' + Title.PrefixOption = poNone + Title.Orientation = toHorizontal + FieldName = 'ID' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + end + item + Title.Alignment = taCenter + Title.Caption = 'PATRONYMIC' + Title.PrefixOption = poNone + Title.Orientation = toHorizontal + Width = 190 + FieldName = 'PATRONYMIC' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + end + item + Title.Alignment = taCenter + Title.Caption = 'NAME' + Title.PrefixOption = poNone + Title.Orientation = toHorizontal + Width = 150 + FieldName = 'NAME' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + end + item + Title.Alignment = taCenter + Title.Caption = 'SURNAME' + Title.PrefixOption = poNone + Title.Orientation = toHorizontal + Width = 150 + FieldName = 'SURNAME' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + end + item + Title.Alignment = taCenter + Title.Caption = 'PHONE' + Title.PrefixOption = poNone + Title.Orientation = toHorizontal + Width = 130 + FieldName = 'PHONE' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + end + item + Title.Alignment = taCenter + Title.Caption = 'ICQ' + Title.PrefixOption = poNone + Title.Orientation = toHorizontal + FieldName = 'ICQ' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + end + item + Title.Alignment = taCenter + Title.Caption = 'MEMO' + Title.PrefixOption = poNone + Title.Orientation = toHorizontal + FieldName = 'MEMO' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + end> + KeyStrokes = < + item + Command = rxgcShowFindDlg + ShortCut = 16454 + Enabled = True + end + item + Command = rxgcShowColumnsDlg + ShortCut = 16471 + Enabled = True + end + item + Command = rxgcShowFilterDlg + ShortCut = 16468 + Enabled = True + end + item + Command = rxgcShowSortDlg + ShortCut = 16467 + Enabled = True + end + item + Command = rxgcShowQuickFilter + ShortCut = 16465 + Enabled = True + end + item + Command = rxgcHideQuickFilter + ShortCut = 16456 + Enabled = True + end> + OptionsRx = [rdgAllowColumnsForm, rdgAllowDialogFind] + FooterColor = clYellow + Align = alClient + Color = clWindow + DrawFullLine = False + FocusColor = clRed + SelectedColor = clHighlight + GridLineStyle = psSolid + DataSource = Datasource1 + Options = [dgTitles, dgIndicator, dgColumnResize, dgColumnMove, dgColLines, dgRowLines, dgTabs, dgAlwaysShowSelection, dgConfirmDelete] + ParentColor = False + PopupMenu = PopupMenu1 + ReadOnly = True + TabOrder = 0 + OnDblClick = RxDBGrid1DblClick + end + object StatusBar1: TStatusBar + Left = 0 + Height = 21 + Top = 400 + Width = 849 + Panels = <> + end + object ToolPanel1: TToolPanel + Left = 0 + Height = 31 + Top = 0 + Width = 849 + Items = < + item + Action = edtNew + Visible = True + Left = 5 + Height = 21 + Top = 5 + Width = 57 + ShowCaption = True + end + item + Action = edtEdit + Visible = True + Left = 62 + Height = 21 + Top = 5 + Width = 54 + ShowCaption = True + end + item + Action = edtDelete + Visible = True + Left = 116 + Height = 21 + Top = 5 + Width = 72 + ShowCaption = True + end + item + Visible = True + Left = 188 + Height = 21 + Top = 5 + Width = 7 + ShowCaption = False + ButtonStyle = tbrSeparator + end + item + Action = edtFind + Visible = True + Left = 195 + Height = 21 + Top = 5 + Width = 26 + ShowCaption = False + end + item + Action = edtPrint + Visible = True + Left = 221 + Height = 21 + Top = 5 + Width = 26 + ShowCaption = False + end + item + Visible = True + Left = 247 + Height = 21 + Top = 5 + Width = 7 + ShowCaption = False + ButtonStyle = tbrSeparator + end + item + Action = hlpAbout + Visible = True + Left = 254 + Height = 21 + Top = 5 + Width = 26 + ShowCaption = False + end + item + Visible = True + Left = 280 + Height = 21 + Top = 5 + Width = 7 + ShowCaption = False + ButtonStyle = tbrSeparator + end + item + Action = sysExit + Visible = True + Left = 287 + Height = 21 + Top = 5 + Width = 53 + ShowCaption = True + end> + ImageList = ImageList1 + ToolBarStyle = tbsWindowsXP + Options = [tpFlatBtns, tpGlyphPopup, tpCaptionPopup] + Align = alTop + BorderWidth = 4 + ClientHeight = 31 + ClientWidth = 849 + TabOrder = 2 + end + object ImageList1: TImageList + Height = 18 + Width = 18 + left = 167 + top = 64 + Bitmap = { + 4C69080000001200000012000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFC00FFFFF700806D5EFF7C614CFF7C61 + 4CFF806D5EFFFFFFF700FFFFFC00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFB00FFFFF2007C61 + 4CFFE8CDB8FFE8CDB8FF7C614CFFFFFFF200FFFFFA00FFFFFF00FFFFFE00FFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFC00FFFFFB00FFFF + F500FFFFED00836248FFEACEB6FFEACEB6FF836248FFFFFFEB00FFFFF500FFFF + F900FFFFFC00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + F700FFFFF200FFFFEB00FFFFE6008A6245FFECCEB5FFECCEB5FF8A6245FFFFFF + E600FFFFEB00FFFFF100FFFFF700FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00806D5EFF7A624CFF836248FF8A6343FF8A6343FFEDCFB4FFEDCF + B4FF8C6343FF8C6342FF856346FF7F634BFF816F5EFFFFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF007C614CFFEED4BCFFEFD2B7FFF2D2B5FFF1CF + B2FFEDCFB2FFEFCFB2FFF5CFB1FFF4CEB0FFEFCDB0FFEBCDB2FF7F634BFFFFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF007C614CFFE6CCB4FFD3B5 + 9CFFD4B497FFD5B395FFD4B294FFCFAC8BFFCFA989FFCCA688FFC6A487FFDCBE + A3FF7E614CFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00806D + 5EFF7C614DFF836248FF8A6343FF8E6342FFD2AC8AFFD4AB8AFF906341FF8E63 + 42FF876246FF7E624AFF826D5EFFFFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFF800FFFFF200FFFFED00FFFFE6008E6342FFF6D0AEFFD2AC + 8AFF8E6342FFFFFFE600FFFFED00FFFFF200FFFFF700FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFC00FFFFFB00FFFFF500FFFFED008563 + 46FFEFCFB2FFCBAB8EFF856346FFFFFFEB00FFFFF500FFFFFB00FFFFFC00FFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FB00FFFFF2007C614CFFECCEB5FFECCEB5FF7C614CFFFFFFF200FFFFFB00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFC00FFFFF700806D5EFF7B604BFF7D624DFF806D5EFFFFFF + F700FFFFFC00FDFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF002FBAE4094FAADBEA5093CAFD4E90C8FF2F9D + D2DF35A4DE190000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0050A8D9FF6AA5D8FFC9E1 + F7FFCBE3F8FF4295CAFF3182C2AE0000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002FBAE4FFA7D4 + F4FFC5E1F8FFCCE3F9FFCCE3F9FFBDDBF7FF4F90C9FD0000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002FBA + E4FFC3EDF8FFA8E2F8FF6CAEDDFFA5CFF4FFA5CFF4FFBDDBF7FF5393CBF70000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002FBAE4FFC3EDF8FFB3F4FCFF68D9F5FF6FCFF3FF599DD0FF73ABDDFF4F91 + C9FFFFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF002FBAE4FFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4 + E6FF3B8FD9FFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002FBAE4FFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEE + FAFF5DB4E6FF3B8FD9FFFFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF002790BFFFC3EDF8FFB3F4FCFF60DCF5FF44D6 + F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF002689B9FFBEE6F2FFB3F4FCFF60DC + F5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF00206398202689B9FFB0CBE1FF67A9 + C8FF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF001E6D93FFC8E1 + F2FFD1E7FAFF347DB5FF3199C3FF6DC4DCFF4A9CCFFF3483C7FFFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF001E6D93FFCBE3F9FF61AAECFF4098E8FF1567C2FF1660AAFF2C76B4FFFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00124259FF5D9CD4FFA6CFF5FFA9CFECFF488BC1FF2C76 + B4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF00134058FF15425EFF25699CFF2C76 + B4FF3B8BBAADFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00806D5EFF7C614CFF806249FF816249FF816249FF826449FF8163 + 48FF836248FF836248FF84624AFF7E614CFF806D5EFFFFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF007C614CFFEED4BCFFEDD2B8FFEFD2B7FFEDCF + B4FFEFCFB2FFEECEB1FFF1CFB2FFF0CEB1FFEFCCB2FFEBCCB3FF7E614CFFFFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF007C614CFFE6CCB4FFD1B6 + 9CFFD2B59AFFD1B398FFD2B295FFCBAB8EFFCBA98CFFC8A689FFC6A389FFDCBD + A4FF7E614CFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00806D + 5EFF7C614CFF806249FF816249FF816249FF816249FF816249FF836248FF8163 + 48FF816249FF7C614CFF806D5EFFFFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00E8CEB9C3D7AA7CCDC88C50FEC88C4FFFCA9155F7CB90 + 55F7C5894DFEDDAF8DC1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00C5884DFAF7F2ECFFF8F4EEFFF8F3 + EDFFF8F3EDFFF8F2ECFFF2E6D7FFE2B27DFFDB9569F6FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00C88D52F6F9F5 + F1FFFCE3CDFFFBE3CDFFF9E0C8FFF8DCC2FFFDFBF8FFFCE6CDFFE2B684FFD5A8 + 84C5FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00C88D51F7F9F5F1FFFCE3CFFFFCE4CFFFFAE1CAFFF9DDC4FFF4E9DFFFF7F2 + ECFFF5EFE9FFC38048FBFFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00C68C4FF9F9F4F0FFFCE6D3FFFDE7D3FFFBE3CDFFFAE0 + C8FFF5D6BBFFF3D4B5FFF8F4F0FFC4854AF9FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00CECECEC2878787F4C5894CFFF9F4EFFFFEE7D7FFFDE7 + D5FFFCE6D2FFFBE1CCFFF8DCC2FFF6DABDFFFAF4EFFFC48348FF616161F4BCBC + BCC2FFFFFF000000000000000000DDDDDDCD9A9A9AFFCCCCCCFFC78B4EFFF9F4 + EDFFFEE8D8FFFEE8D7FFFDE5D3FFFCE4D1FFFAE0C7FFF9DDC3FFFAF4EDFFC785 + 4AFFC3C3C3FF747474FFCDCDCDCD0000000000000000979797DAD2D2D2FFE8E8 + E8FF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D + 7DFF7D7D7DFF7D7D7DFFE8E8E8FFC4C4C4FF6D6D6DE100000000000000008484 + 84F9FCFCFCFFFCFCFCFFCBCBCBFFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2 + F2FFF2F2F2FFF2F2F2FFF2F2F2FFC6C6C6FFFCFCFCFFFCFCFCFF717171FE0000 + 0000000000007E7E7EFFF9F9F9FFF9F9F9FFABABABFFDFDFDFFFCBCBCBFFCBCB + CBFFCBCBCBFFCBCBCBFFCBCBCBFFCBCBCBFFDFDFDFFFA3A3A3FFF9F9F9FFF9F9 + F9FF616161FF00000000000000007A7A7AFFD7D7D7FFD7D7D7FF979797FFD8D8 + D8FFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFD7D7D7FF8E8E + 8EFFD7D7D7FFD7D7D7FF3F3F3FFF0000000000000000757575FFBBBBBBFFBBBB + BBFF8D8D8DFFD4D4D4FFB9B9B9FFB9B9B9FFB9B9B9FFB9B9B9FFB9B9B9FFB9B9 + B9FFD3D3D3FF838383FFBBBBBBFFBBBBBBFF2A2A2AFF00000000000000007070 + 70FFB5B5B5FFB5B5B5FF959595FF818181FF818181FF797979FF6E6E6EFF6161 + 61FF525252FF434343FF424242FF6E6E6EFFB5B5B5FFB5B5B5FF252525FF0000 + 0000000000006B6B6BFDA7A7A7FFB5B5B5FF818181FFAFACAAFFC5C0BDFFC5C0 + BDFFC5C0BDFFC5C0BDFFC5C0BDFFC5C0BDFFADAAA8FF2C2C2CFFB5B5B5FF9B9B + 9BFF232323FF0000000000000000A1A1A1C27A7A7ADA585858FFC79561FFF9F7 + F6FFF9F1ECFFF9F1EBFFF8F0E9FFF7EDE6FFF4EAE1FFF2E8DEFFFAF8F6FFC794 + 61FF242424FF4B4B4BD9969696BF0000000000000000FFFFFF00FFFFFF00FFFF + FF00C89662FDCA9865FFCA9765FFCA9765FFCA9765FFCA9764FFC99764FFC997 + 64FFCA9865FFC89562FDFFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF009C8F83E2BCB0A4FF9D9185FFFFFFFF00AEA0 + 93FF9D9185FF655D55DAFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008E8378E2C3B8AEFF655D + 55FFFFFFFF007C7268FFA89B8EFF9C8F83E4FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF00746B62FFA4978AFF9589 + 7DFF9F9286FF3E3934FFFFFFFF004C4640FF7E746AFF857A70FF3E3934FF453F + 3AA72522200C15131102FFFFFF000000000000000000B9ACA008877D72489B8E + 82FF9D9185FF867B71FF564F48FF504A44FF80766CFF6E665DFF826C58FFA691 + 7DFF948474FF564F48FF0C0B0B7A07070601FFFFFF000000000000000000AB9D + 9004AFA194E1BAAEA2FF82776DFF82776DFFAA917BFFBAA794FFB7A48EFAB097 + 81FF9F8D7DFF836D5BFF716357FF95897DFF040403E000000003FFFFFF000000 + 0000000000009F9286059D9185FFB1A396FF7F756BFF7C7268FF776D64FF6C63 + 5BFF2E2A26FF564F48FF80766CFF7C7268FF776D64FF70675EFF000000FE0000 + 0005FFFFFF000000000000000000797066055C554EF9423D38FF58514AFF3D38 + 33FF332F2BFF23201DE5171614301E1C19B51A1816FF252220FF191715FF0F0E + 0DFF010101EE00000002FFFFFF000000000000000000FFFFFF005A524CC39F92 + 86FFCCC3BAFFC0B4AAFFA6988BFF3E3934A8FFFFFF002C2925A8908479FFC2B8 + ADFFC0B4AAFFA89B8EFF110F0EC3FFFFFF00FFFFFF000000000000000000FFFF + FF00534C46FC83786FFFCCC3BAFF797066FF71685FFF37332ED5FFFFFF002522 + 20D5857A70FFC2B8ADFF786F65FF7B7167FF0A0908FCFFFFFF00FFFFFF000000 + 000000000000FFFFFF004D4741FF83786FFFCCC3BAFF786F65FF7B7167FF2F2B + 28F9272421011D1B18EE95897DFFC2B8ADFF786F65FF7C7268FF060505FFFFFF + FF00FFFFFF000000000000000000FFFFFF0046413BFF857A70FFC3B8AEFF7C72 + 68FF7F756BFF36322DFF1E1C190F282522D495897DFFBAAEA2FF7C7268FF7F75 + 6BFF010101FFFFFFFF00FFFFFF000000000000000000FFFFFF003E3934FF3934 + 30FF332F2BFF2C2925FF272421FF201D1BFF1716141A110F0EDB0B0A09FF0707 + 06FF040403FF000000FF000000FFFFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00D8985223D4964D7DD292 + 4CDBCD8C45F3CB8B41F3C98B40DBC78B407DC5873D23FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00D6974F53D191 + 49E6D0A06AFFE0BFA0FFE3C5AEFFE3C5AEFFDFBC9FFFC89762FFBD7D35E6BC7E + 3553FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00D496 + 4D53CF8D47F4D9B28CFFE6CDB8FFE0BA9DFFD7AB85FFD6A982FFD9B391FFE1C2 + ABFFD4AE86FFB16B35F4B16F3553FFFFFF00FFFFFF000000000000000000FFFF + FF00D2934C22CE8E47E5D9B28CFFE6CAB3FFD6A97DFFD1A579FFE2C4A8FFE1C3 + A8FFD0A276FFD1A477FFDDBDA2FFD0AC85FFAB6635E5A9653522FFFFFF000000 + 000000000000FFFFFF00CE91477ECD9C68FFE7CBB4FFD4A57AFFD0A077FFCF9E + 74FFFBF8F5FFFBF8F5FFCB9E71FFCB9D71FFCDA177FFDFC0A5FFB98A5BFFA45C + 347EFFFFFF000000000000000000FFFFFF00CB8E41DBE0BC9FFFDBB393FFCFA0 + 75FFCD9E72FFCB9C71FFDDBFA3FFDDBFA2FFC5996BFFC5996BFFC4986BFFD1AB + 85FFD8BA97FF9E5635DBFFFFFF000000000000000000FFFFFF00C5853BF6E4C9 + B0FFD0A37AFFCC9D71FFC79A6CFFC5986BFFFFFFFFFFFFFFFEFFC39669FFC194 + 68FFC29468FFC3986DFFDFC5ABFF955334F6FFFFFF000000000000000000FFFF + FF00BF7E35F6E3C7AFFFD0A276FFC5996BFFC4976AFFC49669FFEEE0D4FFFBF7 + F4FFBF9066FFBE8F65FFBE8F64FFBE9269FFDFC6AAFF925034F6FFFFFF000000 + 000000000000FFFFFF00BC7E35DBDBBC9CFFD5AD89FFC7986CFFC39569FFC193 + 67FFEDDFD3FFFAF7F4FFBB8B63FFB98A63FFB88A62FFC59D78FFD2B893FF9051 + 35DBFFFFFF000000000000000000FFFFFF00B878357EBF915EFFE0C2A8FFC596 + 6CFFC29169FFE1CBB8FFFEFDFCFFFFFFFEFFEADCD0FFB4855EFFB3855EFFD4B5 + 99FFAE7B56FF8F51357EFFFFFF000000000000000000FFFFFF00AF703522AB69 + 35E5CFAA81FFDABCA2FFBE9166FFBA8C62FFB7895FFFB3845EFFB1835DFFB083 + 5CFFCDAA8DFFC6A579FF895034E589503522FFFFFF000000000000000000FFFF + FF00FFFFFF00A76234539F5533F4CBA77DFFD8BB9FFFC39C77FFB68A62FFB486 + 60FFBE9672FFD1B397FFC5A377FF844F35F489503553FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF009F563453995534E6B28057FFD5B7 + 93FFDBC3A6FFDAC3A6FFD2B490FFAB7A52FF864F34E688503553FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF009754 + 35239453347D925234DB8A5034F3884F34F3895035DB8950357D84503623FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00F9DBC423F8DAC27DF7D8C0DBF6D7BEF3F4D5BCF3F3D3B9DBF1D1 + B77DF0CFB423FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00F6D8BF53F5D6BDE6F9E9DCFFF6E8DDFFF3E5DAFFF3E5 + DAFFF5E7DCFFF5E4D6FFEBC8ACE6E9C6A953FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00F4D4BB53F2D2B8F4F7EADFFFEEDED0FFE3C1 + A7FFD8AE89FFD7AC86FFDDBB9CFFEBD6C7FFF3E6D9FFE3BE9FF4E1BB9C53FFFF + FF00FFFFFF000000000000000000FFFFFF00F1D0B522EFCEB3E5F6E9DDFFECD8 + C6FFD7AC81FFDCBB9AFFF6ECE3FFF5ECE2FFE4C8AEFFD2A77BFFE6CEBAFFF1E2 + D5FFDBB391E5D9B08E22FFFFFF000000000000000000FFFFFF00EBC9AD7EF4E3 + D4FFEFDCCDFFD5A87EFFD0A077FFFBF8F5FFFCF8F5FFFCF8F5FFFBF8F5FFD1A8 + 81FFCFA47BFFEAD5C3FFEAD4C2FFD2A7837EFFFFFF000000000000000000FFFF + FF00E6C1A3DBF3E5D9FFDFBB9EFFCFA075FFCD9E72FFF5EBE3FFE4CBB4FFE7D3 + BFFFFBF8F6FFE5D3BFFFC4986BFFD6B491FFEEE0D2FFCC9E78DBFFFFFF000000 + 000000000000FFFFFF00E0B999F6F2E5DAFFD1A67EFFCC9D71FFC79A6CFFC598 + 6BFFE2CCB6FFF8F3EEFFF6EEE8FFD9BDA1FFC29468FFC59B71FFF0E2D6FFC595 + 6CF6FFFFFF000000000000000000FFFFFF00D9B08FF6F2E4D9FFD1A57AFFC599 + 6BFFC4976AFFC49669FFFAF6F2FFF3EAE1FFC2956DFFBE8F65FFBE8F64FFC095 + 6DFFEFE3D5FFBF8C61F6FFFFFF000000000000000000FFFFFF00D3A784DBEFE1 + D3FFD9B595FFC7986CFFC39569FFC19367FFBF9066FFBF9066FFBB8B63FFB98A + 63FFB88A62FFCBA786FFEADCCCFFB88357DBFFFFFF000000000000000000FFFF + FF00CC9E787EE4CCB9FFEAD6C5FFC79971FFBF9066FFBF9066FFF7F1ECFFF6F0 + EAFFB7895FFFB7895FFFB58963FFE2CEBBFFD9BDA6FFB27B4D7EFFFFFF000000 + 000000000000FFFFFF00C6956D22C3926AE5EAD8C9FFE3CDBAFFC0946BFFBA8C + 62FFCFB094FFCFB094FFB7895FFFB28761FFDAC0AAFFE4D1C0FFAE7546E5AD73 + 4322FFFFFF000000000000000000FFFFFF00FFFFFF00BD895F53BB875BF4E7D5 + C4FFE5D2BFFFC9A685FFB88E67FFB68A65FFC5A180FFE0CCBAFFE3D0BEFFAB70 + 40F4A96E3D53FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00B57E5153B37C4EE6D7BBA3FFE9DACAFFECE0D1FFECE0D1FFE8D8C8FFD3B5 + 9CFFA76C3AE6A66A3853FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00AD744423AC72417DAA703FDBA86D3CF3A76B + 3AF3A56937DBA468357DA3663323FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006D9CD4896A9AD2FB6697CFEE0000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00709ED6DB6D9CD4FF85B1DAFF5A91 + B9FF6093CBEA0000000000000000FFFFFF00FFFFFF00808080FF7E7E7EFF7C7C + 7CFF7A7A7AFF777777FF757575FF727272FF719ED4FF6F9ED6FF87B2DCFFABD3 + E8FFA9D0E6FF5890B8FF598EC6EA0000000000000000FFFFFF00FFFFFF007D7D + 7DFF999999FF999999FF9A9A9AFF9A9A9AFF9B9B9BFF9B9B9BFF6F9DD3FFAAD1 + E7FFABD1E7FF98C7E1FF91C2DEFF568FB7FF5289C1EA0000000000000000FFFF + FF00FFFFFF007A7A7AFF999999FF529159FF999A99FF9B9B9BFF9C9C9CFF9C9C + 9CFF6C9AD0FFA7CEE5FF8FC1DFFF89BDDCFF8BBDDCFF538DB6FF4B84BCEA0000 + 000000000000FFFFFF00FFFFFF00777777FF9A9A9AFF3D8A45FF498A4FFF9C9C + 9CFF9D9D9DFF9D9D9DFF6696CCFFA2CBE3FF89BDDCFF83B9DAFF84B9DAFF518B + B5FF437EB6EA000000000000000044944DFF42914BFF3F8D48FF3D8945FF5DA4 + 65FF5AA061FF45834BFF9E9E9EFF9E9E9EFF6092C9FF9EC7E2FF83B8DAFF7DB4 + D7FF7EB3D7FF4F89B4FF3B79B1EA000000000000000041904AFF94D29FFF91D0 + 9AFF8DCD96FF89CB92FF84C88DFF519858FF417C46FF9F9F9FFF5A8EC4FF98C3 + E0FF7CB3D7FF74AFD6FF5EC4EDFF4B88B3FF3473ABEA00000000000000003E8B + 46FF8FCE99FF7DC687FF78C381FF73C07CFF74C07CFF79C281FF49904FFF547F + 57FF5489BFFF94BFDDFF75ADD4FF63B8E1FF4BD4FFFF428BB8FF2C6EA6EA0000 + 0000000000003B8742FF89CB92FF84C88DFF80C688FF7BC383FF77C17FFF478F + 4DFF3B743FFFA1A1A1FF4C84BAFF8DBBDBFF6EA8D1FF66A6D1FF5FB4DFFF4785 + B1FF2569A1EA000000000000000037823EFF347E3BFF317937FF2E7534FF4991 + 50FF468F4CFF39733DFFA1A1A1FFA2A2A2FF457EB4FF88B7D9FF67A3CFFF619E + CCFF639FCCFF4583B1FF1F649CEA0000000000000000FFFFFF00FFFFFF006060 + 60FFA0A0A0FF3D7641FF367139FFA2A2A2FFA2A2A2FFA3A3A3FF3D79B0FF82B3 + D7FF629FCCFF5A9AC9FF5E9BCAFF4381AFFF196098EA0000000000000000FFFF + FF00FFFFFF005C5C5CFFA1A1A1FF3C7340FFA0A1A1FFA3A3A3FFA3A3A3FFA4A4 + A4FF3674AAFF7DAFD4FF5B9AC9FF5495C7FF5896C8FF4180AEFF135C94EA0000 + 000000000000FFFFFF00FFFFFF00585858FFA2A2A2FFA2A2A2FFA3A3A3FFA4A4 + A4FFA4A4A4FFA5A5A5FF2F6FA5FF78ABD2FF78ABD3FF73A7D1FF69A0CDFF407F + AEFF0F5991EA0000000000000000999999FF717171FF545454FF515151FF4F4F + 4FFF4C4C4CFF4A4A4AFF474747FF454545FF25679DFF3274A8FF3D7CAFFF4784 + B5FF4E8ABAFF3E7EADFF0C578FEA0000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D639B161960 + 9839145D9562105A92880D5890A4135C92FC0C578FED00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000 + } + end + object ActionList1: TActionList + Images = ImageList1 + left = 167 + top = 120 + object edtNew: TAction + Tag = 1 + Category = 'Edit' + Caption = 'New' + ImageIndex = 0 + OnExecute = edtNewExecute + end + object edtEdit: TAction + Category = 'Edit' + Caption = 'Edit' + ImageIndex = 1 + OnExecute = edtNewExecute + end + object edtDelete: TAction + Category = 'Edit' + Caption = 'Delete' + ImageIndex = 2 + OnExecute = edtDeleteExecute + end + object edtPrint: TAction + Category = 'Edit' + Caption = 'Print' + ImageIndex = 3 + end + object edtFind: TAction + Category = 'Edit' + Caption = 'Find' + ImageIndex = 4 + end + object sysExit: TAction + Category = 'System' + Caption = 'Exit' + ImageIndex = 7 + OnExecute = sysExitExecute + end + object hlpAbout: TAction + Category = 'Help' + Caption = 'About' + ImageIndex = 6 + OnExecute = hlpAboutExecute + end + end + object MainMenu1: TMainMenu + Images = ImageList1 + left = 136 + top = 120 + object MenuItem1: TMenuItem + Caption = 'System' + object MenuItem2: TMenuItem + Action = sysExit + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF001D639B1619609839145D9562105A92880D58 + 90A4135C92FC0C578FED0000000000000000999999FF717171FF545454FF5151 + 51FF4F4F4FFF4C4C4CFF4A4A4AFF474747FF454545FF25679DFF3274A8FF3D7C + AFFF4784B5FF4E8ABAFF3E7EADFF0C578FEA0000000000000000FFFFFF00FFFF + FF00585858FFA2A2A2FFA2A2A2FFA3A3A3FFA4A4A4FFA4A4A4FFA5A5A5FF2F6F + A5FF78ABD2FF78ABD3FF73A7D1FF69A0CDFF407FAEFF0F5991EA000000000000 + 0000FFFFFF00FFFFFF005C5C5CFFA1A1A1FF3C7340FFA0A1A1FFA3A3A3FFA3A3 + A3FFA4A4A4FF3674AAFF7DAFD4FF5B9AC9FF5495C7FF5896C8FF4180AEFF135C + 94EA0000000000000000FFFFFF00FFFFFF00606060FFA0A0A0FF3D7641FF3671 + 39FFA2A2A2FFA2A2A2FFA3A3A3FF3D79B0FF82B3D7FF629FCCFF5A9AC9FF5E9B + CAFF4381AFFF196098EA000000000000000037823EFF347E3BFF317937FF2E75 + 34FF499150FF468F4CFF39733DFFA1A1A1FFA2A2A2FF457EB4FF88B7D9FF67A3 + CFFF619ECCFF639FCCFF4583B1FF1F649CEA00000000000000003B8742FF89CB + 92FF84C88DFF80C688FF7BC383FF77C17FFF478F4DFF3B743FFFA1A1A1FF4C84 + BAFF8DBBDBFF6EA8D1FF66A6D1FF5FB4DFFF4785B1FF2569A1EA000000000000 + 00003E8B46FF8FCE99FF7DC687FF78C381FF73C07CFF74C07CFF79C281FF4990 + 4FFF547F57FF5489BFFF94BFDDFF75ADD4FF63B8E1FF4BD4FFFF428BB8FF2C6E + A6EA000000000000000041904AFF94D29FFF91D09AFF8DCD96FF89CB92FF84C8 + 8DFF519858FF417C46FF9F9F9FFF5A8EC4FF98C3E0FF7CB3D7FF74AFD6FF5EC4 + EDFF4B88B3FF3473ABEA000000000000000044944DFF42914BFF3F8D48FF3D89 + 45FF5DA465FF5AA061FF45834BFF9E9E9EFF9E9E9EFF6092C9FF9EC7E2FF83B8 + DAFF7DB4D7FF7EB3D7FF4F89B4FF3B79B1EA0000000000000000FFFFFF00FFFF + FF00777777FF9A9A9AFF3D8A45FF498A4FFF9C9C9CFF9D9D9DFF9D9D9DFF6696 + CCFFA2CBE3FF89BDDCFF83B9DAFF84B9DAFF518BB5FF437EB6EA000000000000 + 0000FFFFFF00FFFFFF007A7A7AFF999999FF529159FF999A99FF9B9B9BFF9C9C + 9CFF9C9C9CFF6C9AD0FFA7CEE5FF8FC1DFFF89BDDCFF8BBDDCFF538DB6FF4B84 + BCEA0000000000000000FFFFFF00FFFFFF007D7D7DFF999999FF999999FF9A9A + 9AFF9A9A9AFF9B9B9BFF9B9B9BFF6F9DD3FFAAD1E7FFABD1E7FF98C7E1FF91C2 + DEFF568FB7FF5289C1EA0000000000000000FFFFFF00FFFFFF00808080FF7E7E + 7EFF7C7C7CFF7A7A7AFF777777FF757575FF727272FF719ED4FF6F9ED6FF87B2 + DCFFABD3E8FFA9D0E6FF5890B8FF598EC6EA0000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00709ED6DB6D9CD4FF85B1DAFF5A91B9FF6093CBEA000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006D9CD4896A9AD2FB6697 + CFEE0000000000000000 + } + end + end + object MenuItem3: TMenuItem + Caption = 'Edit' + object MenuItem4: TMenuItem + Action = edtNew + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFC00FFFFF700806D5EFF7B604BFF7D624DFF806D + 5EFFFFFFF700FFFFFC00FDFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFB00FFFFF2007C614CFFECCE + B5FFECCEB5FF7C614CFFFFFFF200FFFFFB00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFC00FFFFFB00FFFFF500FFFF + ED00856346FFEFCFB2FFCBAB8EFF856346FFFFFFEB00FFFFF500FFFFFB00FFFF + FC00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFF800FFFF + F200FFFFED00FFFFE6008E6342FFF6D0AEFFD2AC8AFF8E6342FFFFFFE600FFFF + ED00FFFFF200FFFFF700FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00806D5EFF7C614DFF836248FF8A6343FF8E6342FFD2AC8AFFD4AB8AFF9063 + 41FF8E6342FF876246FF7E624AFF826D5EFFFFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF007C614CFFE6CCB4FFD3B59CFFD4B497FFD5B395FFD4B2 + 94FFCFAC8BFFCFA989FFCCA688FFC6A487FFDCBEA3FF7E614CFFFFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF007C614CFFEED4BCFFEFD2B7FFF2D2 + B5FFF1CFB2FFEDCFB2FFEFCFB2FFF5CFB1FFF4CEB0FFEFCDB0FFEBCDB2FF7F63 + 4BFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00806D5EFF7A62 + 4CFF836248FF8A6343FF8A6343FFEDCFB4FFEDCFB4FF8C6343FF8C6342FF8563 + 46FF7F634BFF816F5EFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFF700FFFFF200FFFFEB00FFFFE6008A6245FFECCEB5FFECCEB5FF8A62 + 45FFFFFFE600FFFFEB00FFFFF100FFFFF700FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFC00FFFFFB00FFFFF500FFFFED00836248FFEACE + B6FFEACEB6FF836248FFFFFFEB00FFFFF500FFFFF900FFFFFC00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFB00FFFF + F2007C614CFFE8CDB8FFE8CDB8FF7C614CFFFFFFF200FFFFFA00FFFFFF00FFFF + FE00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFC00FFFFF700806D5EFF7C614CFF7C614CFF806D5EFFFFFFF700FFFF + FC00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + object MenuItem5: TMenuItem + Action = edtEdit + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00134058FF15425EFF2569 + 9CFF2C76B4FF3B8BBAADFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF001242 + 59FF5D9CD4FFA6CFF5FFA9CFECFF488BC1FF2C76B4FFFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF001E6D93FFCBE3F9FF61AAECFF4098E8FF1567C2FF1660AAFF2C76 + B4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF001E6D93FFC8E1F2FFD1E7FAFF347DB5FF3199 + C3FF6DC4DCFF4A9CCFFF3483C7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00206398202689B9FFB0CB + E1FF67A9C8FF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF002689B9FFBEE6F2FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4 + E6FF3B8FD9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF002790BFFFC3EDF8FFB3F4FCFF60DC + F5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002FBA + E4FFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002FBAE4FFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEE + FAFF5DB4E6FF3B8FD9FFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002FBAE4FFC3EDF8FFB3F4 + FCFF68D9F5FF6FCFF3FF599DD0FF73ABDDFF4F91C9FFFFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002FBAE4FFC3EDF8FFA8E2F8FF6CAEDDFFA5CFF4FFA5CFF4FFBDDBF7FF5393 + CBF70000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF002FBAE4FFA7D4F4FFC5E1F8FFCCE3F9FFCCE3 + F9FFBDDBF7FF4F90C9FD0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0050A8D9FF6AA5 + D8FFC9E1F7FFCBE3F8FF4295CAFF3182C2AE0000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002FBAE4094FAADBEA5093CAFD4E90C8FF2F9DD2DF35A4DE19000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + object MenuItem6: TMenuItem + Action = edtDelete + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00806D5EFF7C614CFF806249FF816249FF816249FF816249FF816249FF8362 + 48FF816348FF816249FF7C614CFF806D5EFFFFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF007C614CFFE6CCB4FFD1B69CFFD2B59AFFD1B398FFD2B2 + 95FFCBAB8EFFCBA98CFFC8A689FFC6A389FFDCBDA4FF7E614CFFFFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF007C614CFFEED4BCFFEDD2B8FFEFD2 + B7FFEDCFB4FFEFCFB2FFEECEB1FFF1CFB2FFF0CEB1FFEFCCB2FFEBCCB3FF7E61 + 4CFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00806D5EFF7C61 + 4CFF806249FF816249FF816249FF826449FF816348FF836248FF836248FF8462 + 4AFF7E614CFF806D5EFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + object MenuItem7: TMenuItem + Caption = '-' + end + object MenuItem8: TMenuItem + Action = edtFind + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF003E39 + 34FF393430FF332F2BFF2C2925FF272421FF201D1BFF1716141A110F0EDB0B0A + 09FF070706FF040403FF000000FF000000FFFFFFFF00FFFFFF00000000000000 + 0000FFFFFF0046413BFF857A70FFC3B8AEFF7C7268FF7F756BFF36322DFF1E1C + 190F282522D495897DFFBAAEA2FF7C7268FF7F756BFF010101FFFFFFFF00FFFF + FF000000000000000000FFFFFF004D4741FF83786FFFCCC3BAFF786F65FF7B71 + 67FF2F2B28F9272421011D1B18EE95897DFFC2B8ADFF786F65FF7C7268FF0605 + 05FFFFFFFF00FFFFFF000000000000000000FFFFFF00534C46FC83786FFFCCC3 + BAFF797066FF71685FFF37332ED5FFFFFF00252220D5857A70FFC2B8ADFF786F + 65FF7B7167FF0A0908FCFFFFFF00FFFFFF000000000000000000FFFFFF005A52 + 4CC39F9286FFCCC3BAFFC0B4AAFFA6988BFF3E3934A8FFFFFF002C2925A89084 + 79FFC2B8ADFFC0B4AAFFA89B8EFF110F0EC3FFFFFF00FFFFFF00000000000000 + 0000797066055C554EF9423D38FF58514AFF3D3833FF332F2BFF23201DE51716 + 14301E1C19B51A1816FF252220FF191715FF0F0E0DFF010101EE00000002FFFF + FF0000000000000000009F9286059D9185FFB1A396FF7F756BFF7C7268FF776D + 64FF6C635BFF2E2A26FF564F48FF80766CFF7C7268FF776D64FF70675EFF0000 + 00FE00000005FFFFFF000000000000000000AB9D9004AFA194E1BAAEA2FF8277 + 6DFF82776DFFAA917BFFBAA794FFB7A48EFAB09781FF9F8D7DFF836D5BFF7163 + 57FF95897DFF040403E000000003FFFFFF000000000000000000B9ACA008877D + 72489B8E82FF9D9185FF867B71FF564F48FF504A44FF80766CFF6E665DFF826C + 58FFA6917DFF948474FF564F48FF0C0B0B7A07070601FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00746B62FFA4978AFF95897DFF9F9286FF3E3934FFFFFF + FF004C4640FF7E746AFF857A70FF3E3934FF453F3AA72522200C15131102FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008E8378E2C3B8 + AEFF655D55FFFFFFFF007C7268FFA89B8EFF9C8F83E4FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF009C8F83E2BCB0A4FF9D9185FFFFFFFF00AEA093FF9D9185FF655D55DAFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + object MenuItem10: TMenuItem + Caption = '-' + end + object MenuItem9: TMenuItem + Action = edtPrint + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00C89662FDCA9865FFCA97 + 65FFCA9765FFCA9765FFCA9764FFC99764FFC99764FFCA9865FFC89562FDFFFF + FF00FFFFFF00FFFFFF000000000000000000A1A1A1C27A7A7ADA585858FFC795 + 61FFF9F7F6FFF9F1ECFFF9F1EBFFF8F0E9FFF7EDE6FFF4EAE1FFF2E8DEFFFAF8 + F6FFC79461FF242424FF4B4B4BD9969696BF00000000000000006B6B6BFDA7A7 + A7FFB5B5B5FF818181FFAFACAAFFC5C0BDFFC5C0BDFFC5C0BDFFC5C0BDFFC5C0 + BDFFC5C0BDFFADAAA8FF2C2C2CFFB5B5B5FF9B9B9BFF232323FF000000000000 + 0000707070FFB5B5B5FFB5B5B5FF959595FF818181FF818181FF797979FF6E6E + 6EFF616161FF525252FF434343FF424242FF6E6E6EFFB5B5B5FFB5B5B5FF2525 + 25FF0000000000000000757575FFBBBBBBFFBBBBBBFF8D8D8DFFD4D4D4FFB9B9 + B9FFB9B9B9FFB9B9B9FFB9B9B9FFB9B9B9FFB9B9B9FFD3D3D3FF838383FFBBBB + BBFFBBBBBBFF2A2A2AFF00000000000000007A7A7AFFD7D7D7FFD7D7D7FF9797 + 97FFD8D8D8FFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFD7D7 + D7FF8E8E8EFFD7D7D7FFD7D7D7FF3F3F3FFF00000000000000007E7E7EFFF9F9 + F9FFF9F9F9FFABABABFFDFDFDFFFCBCBCBFFCBCBCBFFCBCBCBFFCBCBCBFFCBCB + CBFFCBCBCBFFDFDFDFFFA3A3A3FFF9F9F9FFF9F9F9FF616161FF000000000000 + 0000848484F9FCFCFCFFFCFCFCFFCBCBCBFFF2F2F2FFF2F2F2FFF2F2F2FFF2F2 + F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFC6C6C6FFFCFCFCFFFCFCFCFF7171 + 71FE0000000000000000979797DAD2D2D2FFE8E8E8FF7D7D7DFF7D7D7DFF7D7D + 7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFFE8E8 + E8FFC4C4C4FF6D6D6DE10000000000000000DDDDDDCD9A9A9AFFCCCCCCFFC78B + 4EFFF9F4EDFFFEE8D8FFFEE8D7FFFDE5D3FFFCE4D1FFFAE0C7FFF9DDC3FFFAF4 + EDFFC7854AFFC3C3C3FF747474FFCDCDCDCD0000000000000000FFFFFF00CECE + CEC2878787F4C5894CFFF9F4EFFFFEE7D7FFFDE7D5FFFCE6D2FFFBE1CCFFF8DC + C2FFF6DABDFFFAF4EFFFC48348FF616161F4BCBCBCC2FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00C68C4FF9F9F4F0FFFCE6D3FFFDE7D3FFFBE3 + CDFFFAE0C8FFF5D6BBFFF3D4B5FFF8F4F0FFC4854AF9FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00C88D51F7F9F5F1FFFCE3 + CFFFFCE4CFFFFAE1CAFFF9DDC4FFF4E9DFFFF7F2ECFFF5EFE9FFC38048FBFFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00C88D + 52F6F9F5F1FFFCE3CDFFFBE3CDFFF9E0C8FFF8DCC2FFFDFBF8FFFCE6CDFFE2B6 + 84FFD5A884C5FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00C5884DFAF7F2ECFFF8F4EEFFF8F3EDFFF8F3EDFFF8F2ECFFF2E6 + D7FFE2B27DFFDB9569F6FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00E8CEB9C3D7AA7CCDC88C50FEC88C4FFFCA91 + 55F7CB9055F7C5894DFEDDAF8DC1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + end + object MenuItem18: TMenuItem + Caption = 'Help' + object MenuItem19: TMenuItem + Action = hlpAbout + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00AD744423AC72417DAA703FDBA86D3CF3A76B3AF3A56937DBA468357DA366 + 3323FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00B57E5153B37C4EE6D7BBA3FFE9DACAFFECE0D1FFECE0D1FFE8D8 + C8FFD3B59CFFA76C3AE6A66A3853FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00BD895F53BB875BF4E7D5C4FFE5D2BFFFC9A685FFB88E + 67FFB68A65FFC5A180FFE0CCBAFFE3D0BEFFAB7040F4A96E3D53FFFFFF00FFFF + FF000000000000000000FFFFFF00C6956D22C3926AE5EAD8C9FFE3CDBAFFC094 + 6BFFBA8C62FFCFB094FFCFB094FFB7895FFFB28761FFDAC0AAFFE4D1C0FFAE75 + 46E5AD734322FFFFFF000000000000000000FFFFFF00CC9E787EE4CCB9FFEAD6 + C5FFC79971FFBF9066FFBF9066FFF7F1ECFFF6F0EAFFB7895FFFB7895FFFB589 + 63FFE2CEBBFFD9BDA6FFB27B4D7EFFFFFF000000000000000000FFFFFF00D3A7 + 84DBEFE1D3FFD9B595FFC7986CFFC39569FFC19367FFBF9066FFBF9066FFBB8B + 63FFB98A63FFB88A62FFCBA786FFEADCCCFFB88357DBFFFFFF00000000000000 + 0000FFFFFF00D9B08FF6F2E4D9FFD1A57AFFC5996BFFC4976AFFC49669FFFAF6 + F2FFF3EAE1FFC2956DFFBE8F65FFBE8F64FFC0956DFFEFE3D5FFBF8C61F6FFFF + FF000000000000000000FFFFFF00E0B999F6F2E5DAFFD1A67EFFCC9D71FFC79A + 6CFFC5986BFFE2CCB6FFF8F3EEFFF6EEE8FFD9BDA1FFC29468FFC59B71FFF0E2 + D6FFC5956CF6FFFFFF000000000000000000FFFFFF00E6C1A3DBF3E5D9FFDFBB + 9EFFCFA075FFCD9E72FFF5EBE3FFE4CBB4FFE7D3BFFFFBF8F6FFE5D3BFFFC498 + 6BFFD6B491FFEEE0D2FFCC9E78DBFFFFFF000000000000000000FFFFFF00EBC9 + AD7EF4E3D4FFEFDCCDFFD5A87EFFD0A077FFFBF8F5FFFCF8F5FFFCF8F5FFFBF8 + F5FFD1A881FFCFA47BFFEAD5C3FFEAD4C2FFD2A7837EFFFFFF00000000000000 + 0000FFFFFF00F1D0B522EFCEB3E5F6E9DDFFECD8C6FFD7AC81FFDCBB9AFFF6EC + E3FFF5ECE2FFE4C8AEFFD2A77BFFE6CEBAFFF1E2D5FFDBB391E5D9B08E22FFFF + FF000000000000000000FFFFFF00FFFFFF00F4D4BB53F2D2B8F4F7EADFFFEEDE + D0FFE3C1A7FFD8AE89FFD7AC86FFDDBB9CFFEBD6C7FFF3E6D9FFE3BE9FF4E1BB + 9C53FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00F6D8 + BF53F5D6BDE6F9E9DCFFF6E8DDFFF3E5DAFFF3E5DAFFF5E7DCFFF5E4D6FFEBC8 + ACE6E9C6A953FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00F9DBC423F8DAC27DF7D8C0DBF6D7BEF3F4D5BCF3F3D3 + B9DBF1D1B77DF0CFB423FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + end + end + object Datasource1: TDatasource + DataSet = rxPhoneBook + left = 136 + top = 168 + end + object rxPhoneBook: TRxMemoryData + FieldDefs = < + item + Name = 'ID' + DataType = ftAutoInc + Precision = 0 + Size = 0 + end + item + Name = 'PATRONYMIC' + DataType = ftString + Precision = 0 + Size = 150 + end + item + Name = 'NAME' + DataType = ftString + Precision = 0 + Size = 150 + end + item + Name = 'SURNAME' + DataType = ftString + Precision = 0 + Size = 150 + end + item + Name = 'PHONE' + DataType = ftString + Precision = 0 + Size = 100 + end + item + Name = 'ICQ' + DataType = ftString + Precision = 0 + Size = 150 + end + item + Name = 'MEMO' + DataType = ftMemo + Precision = 0 + Size = 0 + end> + left = 167 + top = 168 + object rxPhoneBookID: TAutoIncField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'ID' + Index = 0 + LookupCache = False + ProviderFlags = [pfInWhere] + ReadOnly = False + Required = False + end + object rxPhoneBookPATRONYMIC: TStringField + DisplayWidth = 150 + FieldKind = fkData + FieldName = 'PATRONYMIC' + Index = 1 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 150 + end + object rxPhoneBookNAME: TStringField + DisplayWidth = 150 + FieldKind = fkData + FieldName = 'NAME' + Index = 2 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 150 + end + object rxPhoneBookSURNAME: TStringField + DisplayWidth = 150 + FieldKind = fkData + FieldName = 'SURNAME' + Index = 3 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 150 + end + object rxPhoneBookPHONE: TStringField + DisplayWidth = 100 + FieldKind = fkData + FieldName = 'PHONE' + Index = 4 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 100 + end + object rxPhoneBookICQ: TStringField + DisplayWidth = 150 + FieldKind = fkData + FieldName = 'ICQ' + Index = 5 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 150 + end + object rxPhoneBookMEMO: TMemoField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'MEMO' + Index = 6 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + BlobType = ftBlob + Transliterate = False + end + end + object PopupMenu1: TPopupMenu + Images = ImageList1 + left = 96 + top = 168 + object MenuItem11: TMenuItem + Action = edtNew + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFC00FFFFF700806D5EFF7B604BFF7D624DFF806D + 5EFFFFFFF700FFFFFC00FDFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFB00FFFFF2007C614CFFECCE + B5FFECCEB5FF7C614CFFFFFFF200FFFFFB00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFC00FFFFFB00FFFFF500FFFF + ED00856346FFEFCFB2FFCBAB8EFF856346FFFFFFEB00FFFFF500FFFFFB00FFFF + FC00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFF800FFFF + F200FFFFED00FFFFE6008E6342FFF6D0AEFFD2AC8AFF8E6342FFFFFFE600FFFF + ED00FFFFF200FFFFF700FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00806D5EFF7C614DFF836248FF8A6343FF8E6342FFD2AC8AFFD4AB8AFF9063 + 41FF8E6342FF876246FF7E624AFF826D5EFFFFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF007C614CFFE6CCB4FFD3B59CFFD4B497FFD5B395FFD4B2 + 94FFCFAC8BFFCFA989FFCCA688FFC6A487FFDCBEA3FF7E614CFFFFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF007C614CFFEED4BCFFEFD2B7FFF2D2 + B5FFF1CFB2FFEDCFB2FFEFCFB2FFF5CFB1FFF4CEB0FFEFCDB0FFEBCDB2FF7F63 + 4BFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00806D5EFF7A62 + 4CFF836248FF8A6343FF8A6343FFEDCFB4FFEDCFB4FF8C6343FF8C6342FF8563 + 46FF7F634BFF816F5EFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFF700FFFFF200FFFFEB00FFFFE6008A6245FFECCEB5FFECCEB5FF8A62 + 45FFFFFFE600FFFFEB00FFFFF100FFFFF700FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFC00FFFFFB00FFFFF500FFFFED00836248FFEACE + B6FFEACEB6FF836248FFFFFFEB00FFFFF500FFFFF900FFFFFC00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFB00FFFF + F2007C614CFFE8CDB8FFE8CDB8FF7C614CFFFFFFF200FFFFFA00FFFFFF00FFFF + FE00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFC00FFFFF700806D5EFF7C614CFF7C614CFF806D5EFFFFFFF700FFFF + FC00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + object MenuItem12: TMenuItem + Action = edtEdit + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00134058FF15425EFF2569 + 9CFF2C76B4FF3B8BBAADFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF001242 + 59FF5D9CD4FFA6CFF5FFA9CFECFF488BC1FF2C76B4FFFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF001E6D93FFCBE3F9FF61AAECFF4098E8FF1567C2FF1660AAFF2C76 + B4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF001E6D93FFC8E1F2FFD1E7FAFF347DB5FF3199 + C3FF6DC4DCFF4A9CCFFF3483C7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00206398202689B9FFB0CB + E1FF67A9C8FF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF002689B9FFBEE6F2FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4 + E6FF3B8FD9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF002790BFFFC3EDF8FFB3F4FCFF60DC + F5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002FBA + E4FFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEEFAFF5DB4E6FF3B8FD9FFFFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002FBAE4FFC3EDF8FFB3F4FCFF60DCF5FF44D6F4FF8EEE + FAFF5DB4E6FF3B8FD9FFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002FBAE4FFC3EDF8FFB3F4 + FCFF68D9F5FF6FCFF3FF599DD0FF73ABDDFF4F91C9FFFFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002FBAE4FFC3EDF8FFA8E2F8FF6CAEDDFFA5CFF4FFA5CFF4FFBDDBF7FF5393 + CBF70000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF002FBAE4FFA7D4F4FFC5E1F8FFCCE3F9FFCCE3 + F9FFBDDBF7FF4F90C9FD0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0050A8D9FF6AA5 + D8FFC9E1F7FFCBE3F8FF4295CAFF3182C2AE0000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002FBAE4094FAADBEA5093CAFD4E90C8FF2F9DD2DF35A4DE19000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + object MenuItem15: TMenuItem + Action = edtDelete + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00806D5EFF7C614CFF806249FF816249FF816249FF816249FF816249FF8362 + 48FF816348FF816249FF7C614CFF806D5EFFFFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF007C614CFFE6CCB4FFD1B69CFFD2B59AFFD1B398FFD2B2 + 95FFCBAB8EFFCBA98CFFC8A689FFC6A389FFDCBDA4FF7E614CFFFFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF007C614CFFEED4BCFFEDD2B8FFEFD2 + B7FFEDCFB4FFEFCFB2FFEECEB1FFF1CFB2FFF0CEB1FFEFCCB2FFEBCCB3FF7E61 + 4CFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00806D5EFF7C61 + 4CFF806249FF816249FF816249FF826449FF816348FF836248FF836248FF8462 + 4AFF7E614CFF806D5EFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + object MenuItem14: TMenuItem + Caption = '-' + end + object MenuItem17: TMenuItem + Action = edtFind + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF003E39 + 34FF393430FF332F2BFF2C2925FF272421FF201D1BFF1716141A110F0EDB0B0A + 09FF070706FF040403FF000000FF000000FFFFFFFF00FFFFFF00000000000000 + 0000FFFFFF0046413BFF857A70FFC3B8AEFF7C7268FF7F756BFF36322DFF1E1C + 190F282522D495897DFFBAAEA2FF7C7268FF7F756BFF010101FFFFFFFF00FFFF + FF000000000000000000FFFFFF004D4741FF83786FFFCCC3BAFF786F65FF7B71 + 67FF2F2B28F9272421011D1B18EE95897DFFC2B8ADFF786F65FF7C7268FF0605 + 05FFFFFFFF00FFFFFF000000000000000000FFFFFF00534C46FC83786FFFCCC3 + BAFF797066FF71685FFF37332ED5FFFFFF00252220D5857A70FFC2B8ADFF786F + 65FF7B7167FF0A0908FCFFFFFF00FFFFFF000000000000000000FFFFFF005A52 + 4CC39F9286FFCCC3BAFFC0B4AAFFA6988BFF3E3934A8FFFFFF002C2925A89084 + 79FFC2B8ADFFC0B4AAFFA89B8EFF110F0EC3FFFFFF00FFFFFF00000000000000 + 0000797066055C554EF9423D38FF58514AFF3D3833FF332F2BFF23201DE51716 + 14301E1C19B51A1816FF252220FF191715FF0F0E0DFF010101EE00000002FFFF + FF0000000000000000009F9286059D9185FFB1A396FF7F756BFF7C7268FF776D + 64FF6C635BFF2E2A26FF564F48FF80766CFF7C7268FF776D64FF70675EFF0000 + 00FE00000005FFFFFF000000000000000000AB9D9004AFA194E1BAAEA2FF8277 + 6DFF82776DFFAA917BFFBAA794FFB7A48EFAB09781FF9F8D7DFF836D5BFF7163 + 57FF95897DFF040403E000000003FFFFFF000000000000000000B9ACA008877D + 72489B8E82FF9D9185FF867B71FF564F48FF504A44FF80766CFF6E665DFF826C + 58FFA6917DFF948474FF564F48FF0C0B0B7A07070601FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00746B62FFA4978AFF95897DFF9F9286FF3E3934FFFFFF + FF004C4640FF7E746AFF857A70FF3E3934FF453F3AA72522200C15131102FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008E8378E2C3B8 + AEFF655D55FFFFFFFF007C7268FFA89B8EFF9C8F83E4FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF009C8F83E2BCB0A4FF9D9185FFFFFFFF00AEA093FF9D9185FF655D55DAFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + object MenuItem16: TMenuItem + Caption = '-' + end + object MenuItem13: TMenuItem + Action = edtPrint + Bitmap.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00C89662FDCA9865FFCA97 + 65FFCA9765FFCA9765FFCA9764FFC99764FFC99764FFCA9865FFC89562FDFFFF + FF00FFFFFF00FFFFFF000000000000000000A1A1A1C27A7A7ADA585858FFC795 + 61FFF9F7F6FFF9F1ECFFF9F1EBFFF8F0E9FFF7EDE6FFF4EAE1FFF2E8DEFFFAF8 + F6FFC79461FF242424FF4B4B4BD9969696BF00000000000000006B6B6BFDA7A7 + A7FFB5B5B5FF818181FFAFACAAFFC5C0BDFFC5C0BDFFC5C0BDFFC5C0BDFFC5C0 + BDFFC5C0BDFFADAAA8FF2C2C2CFFB5B5B5FF9B9B9BFF232323FF000000000000 + 0000707070FFB5B5B5FFB5B5B5FF959595FF818181FF818181FF797979FF6E6E + 6EFF616161FF525252FF434343FF424242FF6E6E6EFFB5B5B5FFB5B5B5FF2525 + 25FF0000000000000000757575FFBBBBBBFFBBBBBBFF8D8D8DFFD4D4D4FFB9B9 + B9FFB9B9B9FFB9B9B9FFB9B9B9FFB9B9B9FFB9B9B9FFD3D3D3FF838383FFBBBB + BBFFBBBBBBFF2A2A2AFF00000000000000007A7A7AFFD7D7D7FFD7D7D7FF9797 + 97FFD8D8D8FFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFD7D7 + D7FF8E8E8EFFD7D7D7FFD7D7D7FF3F3F3FFF00000000000000007E7E7EFFF9F9 + F9FFF9F9F9FFABABABFFDFDFDFFFCBCBCBFFCBCBCBFFCBCBCBFFCBCBCBFFCBCB + CBFFCBCBCBFFDFDFDFFFA3A3A3FFF9F9F9FFF9F9F9FF616161FF000000000000 + 0000848484F9FCFCFCFFFCFCFCFFCBCBCBFFF2F2F2FFF2F2F2FFF2F2F2FFF2F2 + F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFC6C6C6FFFCFCFCFFFCFCFCFF7171 + 71FE0000000000000000979797DAD2D2D2FFE8E8E8FF7D7D7DFF7D7D7DFF7D7D + 7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFF7D7D7DFFE8E8 + E8FFC4C4C4FF6D6D6DE10000000000000000DDDDDDCD9A9A9AFFCCCCCCFFC78B + 4EFFF9F4EDFFFEE8D8FFFEE8D7FFFDE5D3FFFCE4D1FFFAE0C7FFF9DDC3FFFAF4 + EDFFC7854AFFC3C3C3FF747474FFCDCDCDCD0000000000000000FFFFFF00CECE + CEC2878787F4C5894CFFF9F4EFFFFEE7D7FFFDE7D5FFFCE6D2FFFBE1CCFFF8DC + C2FFF6DABDFFFAF4EFFFC48348FF616161F4BCBCBCC2FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00C68C4FF9F9F4F0FFFCE6D3FFFDE7D3FFFBE3 + CDFFFAE0C8FFF5D6BBFFF3D4B5FFF8F4F0FFC4854AF9FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00C88D51F7F9F5F1FFFCE3 + CFFFFCE4CFFFFAE1CAFFF9DDC4FFF4E9DFFFF7F2ECFFF5EFE9FFC38048FBFFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00C88D + 52F6F9F5F1FFFCE3CDFFFBE3CDFFF9E0C8FFF8DCC2FFFDFBF8FFFCE6CDFFE2B6 + 84FFD5A884C5FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00C5884DFAF7F2ECFFF8F4EEFFF8F3EDFFF8F3EDFFF8F2ECFFF2E6 + D7FFE2B27DFFDB9569F6FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00E8CEB9C3D7AA7CCDC88C50FEC88C4FFFCA91 + 55F7CB9055F7C5894DFEDDAF8DC1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + end + end + object RxAboutDialog1: TRxAboutDialog + Options = [radShowImageLogo] + Caption = 'О ÑиÑтеме' + Picture.Data = { + 055449636F6E2ECF0000000001000100000000000100200018CF000016000000 + 89504E470D0A1A0A0000000D49484452000001000000010008060000005C72A8 + 660000CEDF49444154789CEC9D07941CD771AE2D5B7AB2954CDB7ACF56649498 + 090690604222110810396760012C16799133B0C839E79C73CEC022E744641004 + 09063093922841B66C39C8F67DF7AB9EEABDD3DB3D330B2C081F78FA9CFF744F + CF4CEFCC6CFF7FD5AD5B55F7CFFE2CBD7DEDDB82050BEE9A3E7D66273065CAF4 + 4E93264D193162C4E80360F8F09116230E74EFDEF37A378BAEDD7A5CEFD2B5FB + F5CE5DBA0932335BFFA96EBD86A64E9DFA82DAB5EB995A16356BD53135408DDA + A6BA45B5EAB54CB56A354DD56A354C95AAD54DE52AD54DA5CAD504AF57AA6AEA + 37686CEAD56F2468D234E30FCD9AB7BCDEA4590B4166ABB69FB66ADDEEC35659 + 6D3E6CDFB1D38176EDB30F74EADC6D65972EDD17F6E8D5A7538F1E7D3AF5ED9B + 530ADCEEDF32BDA5B7FF31DBFC854B5ACE9B370F622F9F3079CA810913261F18 + 3070D0F5FE03065EEFDF7FE0F556AD5A9B962DB32C5A99162D5A99E6CD334D46 + 464B8B16A669D3E682264D322C9A99468D9A9A86A06113216BFD1859EB41FEBA + 0D3CF2AB00D4AAEB0940CD3A42FEEA90DF1180CA210250F1F52AA6C2EB954D85 + 8A954DF90A954CB9D75E37E5CA57346541B90AA64CD9D7CCAB65CB9B57CB9437 + AFBC5ACE947EA5ACA054E9328292A55E35254ABE22E0F555AAD6F8539DBAF5AF + DBCFFA658B1659275AB4CC3AD0BE7DA791D9D9DD3A75EADEBDF8EDFEDFA4B7F4 + 76D3DBD2152BEA2E5AB2A4D38C19330E4C9B3EFD84B5D4D7870C1DFE870E1D3B + 990E1DB34DFB0ED9A65DBB0EA64DBBF6A64DDBF6A6759B76A675EBB6A655EB36 + A655AB36C65A6F1100C8EF09404B118066CD5A58E40940E3C656001A271680DA + 3101A8151300C8AF0290477E8BAA310170C8EF0940651180D72A561201288F00 + 58DC8800142F51DABC5CBC9479E96550D2BCF81228615E78B1B8E0F9175E36C5 + 9E7FC9942D5BE14FF6B35D6FD0B0E95B4D9BB638D0A66DC7919D3B77AD979393 + 73D7EDFEDFA6B7F4E66FCB57AEECB468D192B973E6CC39307ACCD8EB83060FFD + 53B7EE3D4CD7AEDD4D97AEDD4CE72E5D4DA7CE5D4D76A7CEA6637667217F07C8 + DFA163B80064251380E6310F202326004D7D0FA0414000EA063C00CFFD8F1680 + 2A310170ADFFEBD6FA578C597F4F005EF70420E60194510128132E00903F5C00 + 4AC604A044880058147BC93C57EC45C1B3CFBD608A3E0B9E97E7CA96ABF8A79A + B5EA7FDAA459CB236DDA749CD9B567DF52D9D96961486FB7785BBD7A75A7050B + 161E983973E67BA3478FF963EFDE7D4DAFDEBD4DCF5EBD4D8F9EBD4CF71E3D8D + 1D8F1B5F00BAC40B4087EC4E02B1FEED3B9AB65600409BB6ED4400B220BF0840 + EB9800E4B9FFC905A089084083868D4D035704AC00E009B01731A85B5F90170F + 5041C88B07547505A10A4382982054B6DE40A52ADE904004A1B2EF1194758400 + 11502140045CF2AB00A80878E42F11237F720178A6E8F3E6E9678A593C679E7E + FA39F3D4D3CFCA73A54A9735D56AD4F9D7E62D5A9DEFDCB5E7C0AE5D7B5A51C8 + 4E8B427ABBB16DFBF6ED4FAC5CB96AEEC2850BCF4D9838E98FFDFB0F307DFBF5 + 17F4E9DBD7F4EE03F9FB7802D0332600DD3D01E8DAADBB0800E4EF0CF93B7731 + D9D93101E81822006DF20420CB1180CCCCAC581C403D814C1183A028B0676890 + D1BCA59CF7DE6B05C482D7F27EBC8AD6AD7598D1D6F3322C5AEAEBACD8F0FE66 + 19B12186BD5ED366EE30A399E765348A79191218B4C26251DB0A0A430B4F343C + C160188150200E79C2A09EC1ABA694F50AB87E4ECE203379CA543369D2143374 + D87063092C42F05C4C009E7D4E05E0F9980014F30440C8EF09C0934F3D6B8A3C + 59D43C018A3C631E2FF2B4296E05A74AB55AA64566EBCFB2BB745F98DDA55BB3 + ECEC9EF7DCEEFB2ABDFD0FDED6AD5B3762F1E225E7C64F98F06F03070D363903 + 07590C34FD07E41804A05FFF7801E89D4000E2DC7F2B009EFB9F37FE6FCF10C0 + 8A800E05440CEC50A06DDB0EDE63BB67A8909DDDC574EAD4D50A4A0FB9367FAB + 4F9F7EA66FDFFEA65FBF01F6730D340307DACF9A33D80CB0641A346888193264 + 98193A74B8196CF73C1E30C03BCF3930449E1B6AEC70C50CB4E7797FFF0103ED + 77EA67BF476FEBC9F41271E3EF70AE179E4EAF3EF29CE7E9F4B25E8EF33DED77 + E43B65C58630596DDA8A90655A2143541A37F1E21400115BB2749979F7DD77CD + 850B17CCD6AD5BCDA2458BCC82050BCCBC79F3CCDEBD7BCDE5CB97EDE3852266 + 7807EA153C6B05C1F702E204A0684C009EF104E089A7CD634F3C2578F4F1A7C4 + 4360A852BF411353AF61D3779BB7CC5AD62EBB6BA9DB7DBFA5B7DBBCEDD9B307 + 2BBF72DAF419BF1F3A6C9825C6303378F0104B0C25FF204B2A4F0020BF0840DF + 7E9E00588200DCFF9E429A9E0271FF1D62740A40BC822EDE7390A8672F8F68FD + FAE7C8DF838C832D3121EA306B11478C1865EC70C38C1D3B5E3061C22433C55A + CCA953A79BA9D3A69B69D3669899336799193366DAE3E966E2C4C966FCF88966 + ECB8F1668C7DFDC851A3AD2040F4BCEF9463BFD3004BF87E226A034448203C9F + A95DFB0EA6BD1526EFF3F5303D7AF4CA1BD6C43C9BBCA18DF56C3A79DE0DEF41 + D078CC77E7353AF4E964CF75B3EF9D3B779EF9D5AF7E6576EEDC69CF75B29E45 + 63D3B061433B64619852CF0E53EA9A3A75EAD8E1496DFBDD87996DDBB699A556 + 2C18A2E049E045104F60E8F03C8260BD83679E7D5E8603884191A78AFA02F0B8 + 2F004F9A471F7BD23CF2681101318E69D3679AF61DBB58F1ED72BD6DFBCE0BD3 + 4385FF45DB860D1BEE5AB67CF9BAE933667C357CC448336CF808713D21FF8D0A + 803FFEB7500BA9C7584FBC8601F61A5C0B4BCCDF183E7CA460CC9871669C25AB + F53ACCE4C95385C8B367CF31B366CD31D3ED8D0AD1274D9A2CAF4108468E1C25 + C2E059F61C118F9EF6734054C809E1B0C65E6C81E0625B89256434F75C7A6207 + 5864D72A3714B7BE91A95DA79EE406100FE0B86EBDFA123BA82B71837AF65C5D + 4BCEBADE4C42ADBCB881E41354AF69F7B54C2DFBBCC419EAD4936B106B20F680 + 687DF9E597568C86D8614513217FA3468D84FCF5EBD78F237FCD9A5CAB86BD66 + 75336AD428F10A182211DBE07AFCBD2A55AACB1083D843A957CA98978B9736C5 + ACA7C01001AF40C4C07A0422028E003CFCE813A6A3F5C4FAF4CBB1BF1322D0D9 + 0A57E7736DDB672F6CD32E7B605A0CEED06DEBD6EDF357AE5CF9873163C75AAB + 3AC20C0796FC2200438709708B21A76F2DB1940880E3FE23009EFBCF30A08F1C + 23087DEC795ECB7B444470C5AD1587E4587108CC3817AB3D73E6EC18C167C8F8 + 77FCF80966F498B1F279F81CB8EC7DEC7595D458D0F6D632CBF83DE6560B912D + 79EBEB185C88A9A4AC2584AC56AD8693DC43208F69BD2AE6F5D72BC722FB9504 + AF55785D50FEB58AA67CF98AA65CF90A82B2E55E3365EDF8BD4CD9F28257CB94 + 33AF6A804FC6F365FCA93E0F5EC4DF8FFEC7827F0C45DE7AEB2DFBF95BC7911F + B2972D5BD6BCFCB225EE33CF58ABFEBC295EBCB8A95CB9B290BF5AB56AA66AD5 + AA263333D3ECD8B1C37A09F545AC9AD8EFDE3406829E080EDFBBB2FD7EEA2994 + B07F9FE1034306C480B800DEC0238F15310F3DF2B8FDAD879B7EF677B6E4376D + DB77B282D9C95801B0A26987326D3A2CCCCACABEE776DFB3E92DC5CD18F38D9C + 9C9C3F5FBD7AF55F008E972D5BF63773E7CE6DB66CD98A85F3E72FF8DDD469D3 + CCD1A347ADC51DEB917F8447FE28011011080840BFD81E8FC073D7195B0F1617 + 5BDD75DCF4C993A708B967594B8E7B3E65EA3471CB4759771C6F0337BFAF75BB + F11EBA60B5B3B901DB0BB909E811786B28D1FC46427089E08B35F52C70CD9AB5 + C5DA0AC9ABC732F8AC45AC42F02D16B1AF542946F64ADE345E24E15F0B10BE5C + 8CF06562842F534E8277AFBCE211BEB443F492A55E8945F84BC722FCA5E222FC + 2FBD54423C840F3EF8C00A5A9F38F257A850C10A91FD1CAFBD66AFFD8A79E185 + 17CCE38F3F6E1E7AE821F3C0030FD831FED3A662C58A2206952A55B2BF4B73B3 + 79F366FB792B884855A85049A628F9BEFC0E0860BD7A0DBCD90FBB27D909E163 + EA921C053E67B1175E92A1C2E3459E929801310744C0257FEBB61DADB7D11111 + 305959EDD342F03F7953E29F3E7DFA5BFBF7EFFF4B7B837C67C182650FD9B1E6 + 94458B96FC61DDFA0D66CBD6AD66F396AD9698E3E4D80E01E2C93F6CB8907FC8 + D0A1B1C0D860DF0318181B0608C9EDF3F29AC15E906DD8B011D6251F2BEE3964 + D77138561E11400C06D9D7F6B35E0396BC9375CD09EE112483E4B8E38DD5056F + 4854BD616CBA4EA7E9EAFA56BD66CD3A1EE91DE283AA31F257AD5A5D04A0B22F + 0055F30980925F0540C9EF0B40B9D404A0D42B210250222000B1397E0460E7CE + 5C337FFE7C9FFCB8FAB8F83C6EDAB4A9C40070F7F104F0009E78E209F3E8A38F + 9A5FFEF2972206A54A9512214030B2B2B284B40F5B0B5EF4D962323B40D2107F + 87CFC1E7C463E13B315DC96FA343127E3F7E17860CBC96C0E273C59E374B962C + 319DBBF4CC138036310168DD41D02AABBDC9CC6A37F076DFEBE92DB0417E4BFA + 6F1E3B76ECAFECFEAE356BD6145DB870F16A0BB376ED3AB375EB3621FC962D08 + C016B362D56A33D092FBE0C143D6224F8D1480C1768CCA9E78802714C3C53567 + EC3D6EDC38B1EE04DBC47DB7C79C1B3162A48804E3F1EEDD7B48508C887EA65A + F4A65ECA6EE3D8785B086F2D3B602A0D8BE58D9BDDB1B337D65601A81110806A + 2A00555D01705DFD820980923FA900A4E201C40480CFFAFEFBEFC7597E5CFA76 + EDDAD9A10D53A49D6558C0792C7D891225C4F223028F3CF28888C0FDF7DF2FE2 + 80A750BE7C79FB9B4FB6BF4D1D09F215B1637C6600C053C08EFDC133459F9329 + 441106FB39F90EAFD9EF5929260AFC76FC4665F8AE65CA9AF90B169AF61D3AC7 + 442066FD63E4170168D50E9C6BD9B2ED93B7FBBE4F6F7F9647FEF3E7CF7F77DB + B66DBF5CBA74E9646BF1CD8A15AB2472BC6DDB764BFE6D31F25B6CDE62365960 + AD172E5E6C76EFDE9D477EC1309FE8A3C78C3123468EB4841F692DFC68790F96 + 7DE6CC9912C8622C8FBB4F008EA9B1CE9DBDF179569697B8E3CDC9C712759A6A + A24E139FF80DC4DA37F29040006A8509802514A816130019E357F5C6F8BE0054 + 7605A06ABEF13EAE739C00940F08406CCCAFE4F7C6FC31F73F20009AE0A302A0 + EEBF0A00F10E3C2E253F24C7E23303C090A067CF9EF6B76B2F0251A54A151100 + 62014F3EF9A479ECB1C7CCC30F3F2CC3013C01C88F10E03D60B5FFE1473F1601 + F061C7F84F14F1A2FF82D863F0E453CF4870106FE1652B527C0FBE77A5583C04 + CF82215A767657D3AE43A79808C491DFB4CC6C6BD1E67AF3966D9BDDEEFBFF7F + F5E6927FD5AA7565172D5AF6B61DE79B4D9B369BDCDC5D66C7CE9D66FBF61D66 + AB1582CD31EBBF490460B3614830C08EBFB76DDF6E962C5D2A2280F526BA0EB1 + 890F3054F0DCFAE962E9391E3972B40C0788FA33BDE505E448D7D5E49C16020D + 4C61ED9B68A4DD123F4E0094FC8E00E0F6ABEBAF63FD7C021023BF2F0058B27C + 02101BFF3B1E40B2F17F42017835200071C1BE57920AC0810307AD673448C80F + F1CB952B27117F48DFBD3BD3895D847C9CC3CD7FE9A597C4032852A48808807A + 01F7DE7BAF79EEB9E7ACB52E633FCFABF67F34D6BCF8E28BE6B1C79FF405E089 + 8000481E804C011611702CC073880902D987242415B343016244046CBB74ED61 + 3A5A2168DB2E5BBC807801686B5AB4B443B8B408DCBECD0AC05FD831FF77962D + 5B96BD64C932B3CABAF68C33AD28C874D1AE5DBB25628C278017A0D67FA31508 + 3073D66C33CA8EDD8F1C3962264E9A64264E9C64264C98E8909E80DD78F10698 + 2BEFD9B39758AC3692A9A7D9795E161EA4A73A2F23A3B9B5FA19F9052066FD55 + 001A840840DD7A0DE204A0B613ECD3CA3DC6AF7EE0CF1180AA7102502DA90014 + 2BF682B5A8BF10DCAFB8FF01C17D8AFBEE17DC1BC3430F3D623F7FE338012819 + 13008DF2172F191E00FCF0C30F25820FF92139E4AD55AB96FDFD5ADADF938CC7 + 56E21DD4B1C2D0CEE2A91F7CDF3CF8B3FBCC134F3E61C9EA790008C07DF7DD27 + 5E00EF2760C835F99FFCECE7F7440B408CF02A00E091479F906940C031E7780F + DF975917A65D25EF81984DE76EA65DFB4EBE0828F945005A10C7C96A76BBB9F0 + BF6EB3E4FFF3AB57AF7E7BC18225B320FF9A35EB84F444F78F1D3B660E1D3E6C + 1FEF33B9BB76592B1FF00210808D9B4404465AD77EF59AB592903275EA547F3C + 8FCB4FE4BF478F9E5E649E79743B466DD5CA2BCB85F858FC162D5A261580C64D + 9A2615807AF51B24178018F96BEAF45E0DAF7847CB774500E20280CE749F2300 + 4F3CF1A4E127BC117CEF7BDF93B9F3D28100A07A01513300CCFB2BF949F461BA + 8F883EC77805EC2B58B7FF8815DDDC31A34DCD477F691EFCDE0F2D211F328F14 + 79CC3CF4F043E617BFF88508C0CF7EF633217FE9D2A565B83061C204F3FDEFFF + C03CFCC8131214543CF4F0E332CDA756DF27FF634FC40980F7DAC704F7DC7BBF + C46E66CD9E2DC4EFDACDCBBAECDCA5BBC4065AB7E96005A05D1EF95B3015DBDA + 346D9155EA36D0E07FEF6605E09BF3E62D5CCA787FF5EAB566CF9EBDE68D37DE + 3067CF9E3567CE9C31274F9EF44560676E6E6C28B03D26025BC523D86EBD8315 + 2B57894B8F8B4A849A313DF3FB04A6DA696EBE94E566899B0FF204A0A580E9A6 + 0A15BC39E73C57398657089A9591C83A2E7D2367FCDF20CEFD0F08801B00F467 + 006AFB330079F3FBAE00040380D57CF2FB0250B1B225D22F6F5800001982E102 + 9017002C1E1080CF3FFFDC273F493EB8F744F589E8130F605FE29E7BCCC8FAF5 + CCC07A354DD1BBEF320FFCE25EF3937B9F340F3DF7B8F9E5A3DE94A00AC0B3CF + 3E6BBD8E92122B58BF7EBDF9BBBFFB3B19C27943B3AEA651E3269207F0A2FDFB + 0F3EE4915BF70F3FFA789E00F862E13DF7F3BBEFB59FBBB859B87091E9D091AA + CD2EA63342D0B5BB8841C78E5DECFDD041BC00C8AF0290D13CEB7AD3A64DD389 + 435FC786F59F3B7741E6FCF90BCD8A152B2DB9770AF1DFBC7CD95CB97245F2C7 + CF9FBF604E9D3A650E5BF79E21C1EEDD7BC4CA6FDFE121D70E0FF00456AD5A25 + 517B5C7DFEE91AC86BDBB6AD5F9083BBAF02800B0C89CA384931B8C38C9F29B4 + 1966C78E13ED1062D9B2E51260641872F6EC39199A30AE6E181080062102E066 + CFD50A0880CE00D0BC23B90054CD2700E2FE3FFFC20D93FF91471E9524241DFF + 974A61060001E0FF939191E167F83DF8E08312E463FC4EC20FFB877FF823F3E4 + B7BE659EFC9BEF9A071FFEB9F9D9CB4F9BBF2FFA9279A0C413E6174F3C24B300 + C4001080A2458B0AF9F124D6AE5D2B9F8D211B5EDC942953648660920CEB268A + 8740FA31D3AB8CF57FF9D0A3560C1ECD130447007E76F73D2200DC1BED3B74F2 + 2142D0A59BD461200C59591DC40B8891DF34CBB068D62AE736D0E17FDF3673E6 + FCA767CF9E67162D5A6AD6ADDB604E9C38692EBFF59614959068F2DE7BEF99B7 + DF7EDB5CBA7449BC81E3C74F9843870E99BDFBF6993DD623C05BD8B061A359BE + 7C8599376FBE7800EDDA75941BA96DDB76D6EAB715AB0F1000DC770884152708 + F69AB52C5DAC4B3875EA34EB391C30D7AE7D687EFDEB5F4B6E3BAEEE175F7C21 + 16EFB3CF3E137CFAE9A7E68C2500421114006ECA4402E075EEA9E367F6E54DFF + E9F83F2600F96600AA460A0020A390F464863880717446F3E6769CDB5AD04A44 + AFB54C5F66C62A1211468A7210BB4402F072400028F3DD6145B777EFDE427EC6 + FECCEF03A2FC08011EC1638F3E667EF17F7E627EF1837BCCDDBF7CC2FCFDF3C5 + CD3F942A66EE7BF13173FFA3DEF8FF1EEB25FCF4A73F95F7407E8285AB57AF4E + 2A00083CD3B4040DA92D6869C59CCFFCCB071FB17854F608C2830FF3B91E9321 + 22C46FD73E5BC031C4A7A6014F80C7C40320BF0A409366ADD25EC0ADDE88FCCF + 9831EBC33973E68B95E5C6A292ECEAD5AB1268FAF8E38F05D7AE5D93737803E7 + CE9DB3438253E6C8D1A3220464912D5BB6CCCC9A355B027ECCD913D0E39F8E00 + 60E19A366D2604222A8E4B4FDD3D812104E577BFFB9DF9ED6F7F2BF8EAABAFCC + 6F7EF39BA402F0C9279FE4130021BF2B00C119003F07209900E49F02AC141380 + 4A1119804C019677527ECB4B530F37E5F7B5BCF9FF8433007969BE5133000800 + 0549B366CD12F2337D47241F2F808C3FE6FA89F66BE2CFDD3F7ED4FCF8DEA7CD + 4F9F2F62EEB7D6FFFEA71E36F73DF88058FF9FFFFCE7E6273FF9894F7E3C07AA + 07FFAC00023066CC1889F1505BC0708FE93F62039E083C2AD7DAB3678F4FFE3C + 11C8962A4E3C01B2368907300410EB9FD1CA346DD6CA346E96D9F47673E48EDE + A64D9B3570C68CD9D6722F90B9FE83070F9A8BD6D263FD110088A6E0F1D5ABEF + CAD00017F4A41D12ECDAB54BC8CF7C3E117F32F57AF5EA6D0955C30AC04609E4 + 3176E6E6A7D1055574EFBEFB9EF9C77FFC47F3FBDFFFDE5CBF7EDD1700C85F10 + 01802434DD68E85AFF9800D4AD9F28005827D6BBCF2BB6090A40DC0C8093EB9F + 480064FA0F9477A6FF40D93C0170631AAF6ACE7FE9323E740AD00F0086CD00C4 + 0480294E62345ADC430090A01E117D48CF549F7A058F3C66DDF3228F98079E7C + D83C605D7F21FFFDF799BBEFBE5BDC7F62014A7E3C8A7EFDFADDB00090E3413D + 08539408E92FAC08FC9F6F7F5B02C9410168DBAEA3ECA9722426C0B0A045CBB6 + 2200901F346992B9E07673E48EDDEC3FF2AE69D3665C570158B972B544FDF100 + AE58979F4C332CFF471F7D245E00020079191E9C3B77DE1C3A7C4462062EF999 + EF27A5B778F192222624CF403EBC817FFEE77F367FF8C31FCC3FFDD33F450A00 + E44F2400905F0580AE3A58D8060D1BC50940BDD029C0BA79F9FE2A005A6DA702 + 109C01A81A48010E9901A8186BE7152A00E55C01289F5F005E0908407006A064 + 4800F0E51212034004D66FD820C1552DEEC10B80CC78024CF3010481C74CF9F1 + 9C8EFB95FC3FFEF18FCD534F3D25E4A766A0478F1E92188498DC8C000C97E4AF + E1F67397343FFCE1DFCBF47190FC0AF50200094219CD5BC50420D3346E92B9FF + 76F3E48EDDA64C99DE74DAB499C61380852200C78E1F17B7FCE2C58B5265C6D8 + 1F6F0031F063016FBE29D687E41FDC7EE6FBBD649F712200007715D527727CF1 + E225F32FFFF22F290B00E44F4500E8D8036954005404C8FEAB1B439D8000D4AA + 9D37FFAF1E40A400C4C8EF75E1C95F0300F9C5FAFB29C0793DFD5C01C873FF9D + 598D586F3F97FCF904206C0AF0E5127EAF3F3A0C917301F999BE23FACF1080B1 + 3D045628F175CCAFE4C7F5E779253FB300D403FCF0873F94A105E4BF59016098 + F3FFFEFE47E225F6E8D9271FF901E37FBC0004A06DDB8EBE07D0A469A6E076F3 + E48EDD264F9E7E6EEAD419762C3ECBCC9DEB0D010E1F3E6C8E9F3821043F6D85 + 0057FFBCF5080800E2FA333C2006B06FDF7E192B7A39FBF1E4570120A0C79898 + A061410540C91F26003A24696F6FA6A00068FA6F9C00D4F1EAED750620BE0028 + D11460BC0044050045005E5301A8E80940B99800940B0880F6F57304A0544000 + 4A948AAE027CD1110022F063C68EB3023E43C84F0520597F8CFD213A845760F5 + 39C798DF253FAE3FE4A758A843870E929B616F0DE92DA0E4BF51012038C8EFFD + A31FFD5404802E4941F2E779019D450410086FFCEF91BF7193966901B815DB84 + 0933EE993C799AFDE792A137D3CC9E33DF2C59BA5CA6F80E1E3A2473FE870E1D + B68270442CF9899327AD289C36A74F9FB10271D2ACB7D69F241FD7F55750C907 + 0156AF5E23E4B95502C0D0836A3988DC2090FF1F2900F90A806AE78DFF350610 + 1BFBBB02103703F07A40002AA800544C2E004E3E435C8BEF524966008A978C17 + 8058A75FDECF6C4BDFBE7DFDCA3E8A7B20356E3F645710ED87F888009E824B7E + C463F6ECD9E6AFFEEAAFE47198FB7FA302F0939FDE2DAF0B1380366D3B08341E + 40AD80925F05203D13700BB68913A737750560D6ACB9866ABF5DBB77CBB4DEEE + 3D7B64AE5F1EEFDD6BF65B6B7EF8C851F10E1007FACA79D67F423EF20302404C + 274136FAD4DDA80040FE2801204701A2E26642E67C02E0CC00D47205206A0620 + 28003111F0C7FF7ED30F5DCC430B802AF9D6DF1BFF57CC2B010E990108F300F0 + 9868B0A15577DA90D34351BF375F5E818ED7A38F745B0A71965A0B9B9393E357 + F651DC437E3FD17D62030403991A24E14723FE2EF9E7CE9D2BB102040062478D + FF0B2A00146F2100E40D4CB2F74B18F915CC02B46ED3DE77FF21BFA07146C9DB + CD973B6E9B3871EA844993A61A158119331806CC97041BB043127C7648718F24 + FAE4E65A113828DE007BC6FED21F6FECB87CE4F704A0BA59B468B108005D7A20 + 7F610A804E4F1268C4B2622DF3A6CFBC3AFABC5A7AD792C647D4BDC49ABC1EFA + AE7575FBE9FB78DE5B5CC387D362FBB9E73C68B7DD679FF5A06DB78B16F5F04C + 51AF03EF33CF3C27A0EF1E44E773BB8947BA88485E0F82782F040123A55A5B9F + 33149833678E8CDFB5B887145F320419DF9320E44EF7417E0A86203B81C0EF7C + E73BE24968DD46D4F8BF200240AEC3CF7E7EAFE9D2B5AB996E3DB628F27B02D0 + 5E2039004D5BA605E0566E13274DDD6F61C0E429F69F6DBD8099B3E6488E3FA4 + DF2A65BF9AE6BB551E93F473F4D871C9FAA39ACF75FD5DF25301C8189B3A7FFA + E7AB0040FEC216006628C84D986687235ECBEDD8CA3E82587FFF26B15E7DB116 + DC8D622BFE4817DF21C3A4AD16CD4207C5DA8D492760A71B30854B74F6A589E6 + 92254BCDE2C54B44DC162E5A64BDA685023CA2F9F3174822140D3AE7588B4ADF + 04EA29F68837B55BA64C01624A162591F1ED08AC0505565BA5C7C216C9ABD8B4 + 69934CA352F24B6AEEBA75EBC4D55FB3668D785680ACCB952B579A152B5698E5 + CB970BF989E2F33E084A9A7018F9C9F9A70B108465CA8FB45FC8CF3122924C00 + 94FCA90AC03DF73E60BDA48A090540C9AF02A0E46FD4B885FDBFB5AC7ABBF972 + C76DE3274E3E3771E21403F0047428B0CEDE6C5EC30FAFE67F53ACE20F21A024 + F8A8F5001082295634C2ADFF187B238C91821E0400024228D7FA175400207F22 + 01607A92E94AB21699ADD0190B662F485E7AE79D7764F6822103331B080678F3 + CD3725B8C98C07539FE7CF9F9700A7D63F9C3E7D5A82A1A440530B014ED821D0 + F1E3C7C51362CA94283C382C319343E29110FC2496B26FDFBE9404C0EBB35030 + 0180FC410120D0B674E9522907666A1032723D880C89212FC4A6468386214C11 + DA5B4162051096BE0C051100C89F4C00C80941005E7CF1256926938CFC804C40 + 4F005A8800346AD43C9D125CD8DB8409DC101E4404EC5060B2158135F69F24A5 + BE4EAD3F557EE472EFB04303B2FF0E1C3C2469BB61D61FF2AB00D0BA0B01C03D + 0DBAFF85210090FF460500F217540020FFFF240180FC610240538FC58B179BEC + EC6C49F185E8D4FF03A6F8ECBF5FF60C03BA75EB2619854AFE820A00E44F2400 + 43870E350FFCE221F3C20B2F8A0024237F56EBF6A6798B2CDFFA8306690128FC + 6DBC25BE8B09780393A6480F80CD7213C6D7FA036202070F1D96D65FDE10605C + 3ED75F05202BD69F8F2EBB6102A0E44F5500825980890400F2A7220090BF3004 + 00F2A72A0090BF300500F24709C022678802A9E912C41081801F60C840E4FF66 + 0500F22712805FFCF261F3AD6F7DCB7EF6B5A1413F97FC59ADDB890028F91B36 + 6A9E16805BB18D1B3FC9FE23E38137C04C80927F538CF81B62B5FEC401B0FE08 + 008D3A99FB0F233FE8DEBD978CC9A9FD26FA9E2800783B0540C97FBB0500F2DF + A80040FE640240CE06AE3F893E4AFE280160E8266DD9599D491667F18A9CBAF7 + E821C38B6EB288493729139666ABA165D779ADD7A80BF8EEF7BE2FBF4D94F557 + F283162D5B070420239D0D58D8DBD87193AE2302412CB002E0BAFE2A0080A101 + 02406E0041AF3C0188273FE8D6ADA708000140A6C092CD00DCA80040FEC21000 + C89F8A0040FE300180FCC90480BC057227A64DF35AA2318C9A225676AA4CA952 + 48E5B5491B25CB9D7574D63B64B9336F85A0BCA5CE88FE3385A95391DA92CC4D + 4AD269498A8CBC061E4E238F475D3C216DBD25D5D84937765717063C2E29B315 + 5E7E441577CAB46A350F4EFE040D5C1E7CE811F3ED6F7F5B7E9768F2BB02D0C6 + 273FA8DF202D0085BE8D1D3771BF850962CE9C7971AEBF927FFD868D1208DCBB + 6FBFF404C053F004203FF9E9F3870030D78D15E3062CEC3A0077068046A55BFD + 46A5B1E14B2C6E410D02A5CAE4CD4F9838C90C1D36225FF45F660088FEC76600 + 685DE55936B56ECEEABFB1E5C005D6CA3105C9349F4E03FA5380CFE914A0B7F0 + A696FA962AA54D3F82DD7FBD14602AE9945055AB05E0E7265497E9D50CE997D8 + D2BACC79F0BB2A3990F515595AAD5B37E915980CD417B8C7FA588F83CF47BD57 + 1F9378F48D6F7C43D67AA4E0276CDCAFE46F95951680AF651B3B76FCFEB16327 + 18812300D3A6CF72ACFFA63801E03C33002404311D460030487E1500C09C3916 + 910A3A3C0156AB6591CBAC2C6FA14B6FB9EE36B11AF92CAF2760A6B7DA2E4491 + 96D9B1B6D9AF8416CE78AFD1C5373CBCE6F7E2CF83D7CF5E9A7EC4127FDCE41F + AF17A0A2A64C117AEDC86288AD14EC21EF3CA5CEB8C21EBAC601B2051FBBC095 + F6DCE96EA1D0E783083EC798DE45F0B9B0C761AF0DFB9B3D7C973FFC33BA087E + 7F57300844FEF99FFFB91D4EF432FD070C8A24BF0A40CBCC363EF91B34CC10DC + 6EBEDC71DBE831E3378CB1E40F827C8030EB0F3887001C3B76DCAC5ABD265400 + 94FCE0E1871F9540106DBBEAD4A92BE343E9EDD72C43FAFC29A4EF5F0C6AD5B8 + A9085A85811BD37DCC8D45730CD047C6AEDEB17B5E41A28B82D72602AF616EDC + 7D8FBE2F788ED7B9083E1F7C6DF05AC1BF1BFC2C61DF2FF89C7E67F77BEB63F7 + 3CFBB0DF55CFBBBF6F98B804C5224C0CDC63661B10001A95BA0210467E0F6DE3 + C85FBF41B3B40014F6367AF4F81C2B02268871D60BD8A8AEB3437E2AFF784C6A + 301583AB4500C645921F5094422B306ED201030648AAEAC08103A5567CF0E0C1 + 028A4E801EEB79A2C70001016E54390C895EC375F53561CF05A19F459F0F7E36 + FDFCECDDEF123CE6BB8681DFC105BF0DE8DFBFBFFF9863858A8A7B1C25365162 + 964C30828812DE441E44946740F21102C054E0487B9F24237F5A00BE862D4A00 + 4098F54700D8EFCCDD250240BE802B0041F2035C3FE6A22126D3444C193175A4 + 59644C270511753EF81A7D9D4E470593538253546160DA4AA7AEDC292CE01E2B + B4C455A1E214842B3AAEA8B8E2E0229140A838B82211260E2A04BA77BD942831 + 087A496102E01E870D3782C384303160C932150012C892913FB355DB38F20BEA + 374EA70317E6366AD4D8EC51A32D814310467E05C9400C0108BA510814457E92 + 809E7BAE985800C8C83CB2969632BFCC3CB3CE35EBDE2D3FD563F79CCE49BBD0 + F969B758C59DAF0E0A479440B8C92C2E46C656324A2604AE20447919511EC4CD + 084098571036CC88F20A82700520CA1B081382B0B8861EAB005092CC8ACDC1A0 + 5F90FC802CC0B400DCC26DD4A87125478E1A1B2A002B57ADCE27006BD7AD973D + EDC08F1E3D26F502140345915F05A063C78E423C97F4249A04A1CFB96210840A + 802B04103F58AD56500170B3D9A24420CC2B48E411848980EB0524F304521101 + 3D8E1A1EB89E97FB5D5D2F88DF9B3C00A03901C163720AB4FE40413E820BF217 + 98EED4694FA64015E426200077DD7597749ECA6FFDE3C9AF02A0E4AF57BF695A + 000A7B530108C3B2E52BF3597F1500A6DCC80360719009132645921F142F5E42 + 56AA81789036487ECD3A53017033D0C284204C005C21082B597585C02D6071D3 + 585D24F2028242101400FE862B42618244C28D26E10401E9D843184DF375B3FD + DCF45F08A78944EC8320D128084D420A83A6292BC85B4804481E060400B80240 + 4EC45FFCC55F8800D0422ECCFABBE4CF6CC53460739FFCA04EBD26E96CC0C2DC + 468C185764C44816EB8C872B002EF9156403D228845E0113274E8E243F285DFA + 15D3A2450B211BA40D5A7D37F5344A088202E00E05208C42AD9502A201371BCE + CD8A73A185352EC1DC63403E03197A102F08CDE2D34C3EF7BCFB7CF0B52E341D + D8859B26AC55832EC2881F25000521BF0A40941044913F9900900EAC0210E5FA + 437EA60129074E0BC02DDEC20400CC9E332F5200C806A463D03EFB4F9D3C796A + 42012855CA2B3B85A010911455AC5B980BE9829457C8E64249E53E0E3E1FF69E + E0B928B8D78F3ABE59012808F95D0108237F4104A0A0E44F240089C84F46A456 + 4D2AC803410028396618C0E74E447E570094FC75EB35490BC0ADD8868F186DC2 + 800004C94FD41F9025B87FFF01E909484457838041F2B31A2C596D2C5089FB4A + 3E3B56941CF754C8182470225226138064AF0D2375D8FBC35E172500C9ACBE9B + FF9F4800A288EF0A00C42435D985A62B6BEA32E9CE5A06ED96442B489D765BC0 + 8781EC4D175ACC9508A4512300AC3A8400F059A3C6FD4AFE7001689CCE062CEC + 6DD8F091D70B2A004C11920E4C8BB0D9B3E7880084911F346CD84816AA7405A0 + 20D6381952158D649E4318C183D70C5A7705F9ED5A12ACD01A01F6D41368E971 + 18A84770DB9CB9C70A52A5B584DA8512D13D4E444E2DBC0A3E760BB2DCDA8C28 + E8FA0DA980EFE80A006B4526233F689691E9931FD4AE93168042DF860D1BB57F + D8F051268809766C1F467E56FD2541880542190610D18DB2FE80469D2C5C8100 + 50CD968AF54F55007039D5DAE90AC6EC5D5000140405410AEA0BB4EE200CDCEC + FFF11FFF21F8F77FFFF77CF8B77FFB371FFFFAAFFF1A77ACF8E31FFF980FF447 + 0C83B64D03C1C76E4BB52868B3955410262861E21285CFBEFC8DF9F8F35F79F8 + CCC327C03EFEFCCB5FFB2243211602A053814C1BF6ED372021F93D0168E593BF + 4EDDC66901B815DBD06123F75B18172A0061E40708C3AEDD7BA42478DEFCFC02 + A0E4072C7B8DF253AA8A078000506987BBA9853F2E20A31EFFF77FFFF70DE1BF + FEEBBFF2E13FFFF33FF3E14F7FFA531C94E851840F92FD46489E0AA15325EC27 + 5FFCDA5CFBF40B0F9F7C69F185874FBDFDA5AB1F997357AE09CEEBFEED0F63B8 + 668E9CBB6A0E9E79DB1C3AF34E0CB1E3B3EF98C316B9C72F9BED472E991D472D + 8EBD29D829B82CCF29769D006F09769FF470E2E27BBE0770E5CADB2200AC9588 + 00504ADCB7EF8084E4A71C382800E076F3E58EDB860E1DB121280060ECB80949 + 0460B7340659B478499C00B8E407C3868D903E7408807A0090FC46C95D188210 + 26064141088A4198287CF19BDF998F3EFF8D87CF62FBCF7F6D3EFC0CFCC69C7F + E723F3C69B1F985331BCA1B8EC618F258C90CB62E7B13CE45A9281357BCE98E5 + 3B4F9915B96F989531ACDAE561F5EED3025EA358BBF78C59B7F7AC60FD3E8BFD + 1E36EC3F67361E382FD8040E9E379B63D872E8420C17055B0F7BD866890FF9B7 + C73E9F8A00E47705C023FFE538F2834367AFFA1E005E962B003422EDE30B409B + 7C0200F9014D415CF2D7AED3282D0085BD0D1E3A3C67C8D011260C61E4A70088 + F3B9BB76496BB0152B57FA021024BF0A0079E034AA400088011496007CF9DB7F + B484FB6D1EBEF82A0EA7DFFAD01C3DFF9EE0D8050F4765FFBE60CBC10B662DC4 + D9037162D89747A0391B0F9BE96B0E0866AC0507CDCC7507CDAC7587CCACF587 + CCECF5870573361C3673372A8E08E66F3A1A87059B8F9A855BC031B3682B386E + 166FF3B064FB09B374FB490F3B4E5AD22B2CF91D0150F2870900E4F705605F9E + 0040FE380138E808804FFE0B71E4F705E0689E00EC81D467AE58CFE06D1F47CE + BDE3E3F49BEF9903A7DFF60560CFA92BBE0740D93602402E040250ACD8F366FC + 8449A1D65FC9AF480BC02DDE6E4400784C9B700460E5CA5512048C223F40F199 + B3676A0F01C0222889CFBDFD511C393C825862588C5DB2CB0C9DB7CD0C9BBFDD + 0C9FBFC3C3821D6684C5C8858A9D6694C5E845B93E789F62DCD25D66FCD2DD66 + FC320F1396ED311357EC154CB298BC729F60CAAA7D66EAAAFD3EA6AF51A8001C + CC1380F5051700EFFB1DF5BF5F94002CDBE1010158E10880127FC7918B829D47 + 3DE48AC770C9ECB2D877F24D73F2C23B315C35A72E5E3507DE78CBEC3D79D9BC + 71E9AAB97CF59A79E7BD8F3CBCEFE1AAE2838FA4E78276600E832ED2128563E7 + DFF5C87FF28A08807A00BC170120C10901203BD41380A0EBDF3A9F00B8E417D4 + 6EF0E4EDE6CC1DB50D1E3C2C7BF090E1260CCB57ACCC477E0569C0478E1C951E + 6F780051E407283E197A0800EDAD880AE709C0C766E0AC2D66D0EC2D66F01C0F + 43E66E130C9DEB91DF158011010118151080318BE30540C8EF08C0C4E57B7D01 + 98BC52114FFEA00028F901D67FD1962366D5CEE3162704AB779D306B7C9C343B + 0E9D36BB8F9EF3B1C7C18193D6EBD87DCA1C3C79D19CBE70D9E22DC11970F12D + F3E65BEF481723A05D8D80363A8D029D905CD01D095CBAF2AE0883764D0A425B + AA05A11D97C3109CA1D0262DA72EBDEB913F26009F7CFEA5EF05B802F0D77FFD + D7327D9C8CFC0C01EAD56FE20B40ADDA0D4DAD5AF5D3E9C085B90D1A34ACE4A0 + C1C38CC21500C6F72A004A7C6A04D8930C84009013404F8028F203141FF78F04 + 1F0281AE007CF0D957BE007822B0354F00E66D8F178005F102307FF331C74A9E + B26EF229DF55C6ED55B75F5DFE6317DF37C763B8FCFE67E6E32F7F2B986205E0 + 8D73973D9CF75050A245218C709BF69F31E72F5F4D4ABC6473F22EF982D0F669 + 57DEBB261E803E06DA61390C3762F91517DFF9D01780BD2200BFF2BD0004807C + 051180BBEE92751512B9FE901FD46FD0D4B7FE6901B8055B50005C2C5CB4249F + F55701A03518E9C0EC591C248AFCA068D167A5CA0C01C003A0E79E0AC0B5CFBF + 723C80AD820FBFF8ADE0F77FF8A349B415563070B675E74F9FBB20C2144C8E71 + 13678270A71315EE7423D35F61D87EE8AC3972FA92F42A046AF183703D80645E + 409430BDF5CE7B66CF89680F20CA0B48D5FABB2274EECAFB76089027001F7EFA + 85EF019021480C080160E9B1458E004491DFF3009AE691DFA246ADFAD9B79B33 + 77D43678F0E02203070D3561201928487E0596FFC0818352174049709400D07B + AF64C9D25252AA024016A192F2FA3FFD8B0880921FFCEBBFFD4742E2DFAC1004 + C580A0D9A973D1563F8A68C9AC7F940770F0D49B82C2F000A2BC00D7E26F3C70 + 2EA9E58FF20052B1FC9A33F1EEB54F3C0138E509C0D56B9F89F5E739564CA28C + 1801000C07C3C81F1480060D9B0504A0413A1DB8B0B7280198367D66A400900D + C8FA804C07521118457E4F004AC93F9FFC7F0480CC39978CAEF5170FE0F3DF16 + 48000A2202611E000270F4E4B948EB1FE60184597FD70388B2FE60EFF1F3669F + 45220F2068FDA33C80A0E50F132704E0663D805404E8EAFB1F0AF9015384FB4E + 5C94EFCBEF42C7638CC0DD77DF2D02409A73D4B8DF45C346193EF96BD66A9016 + 805BB1E50C1C62C23075DA8C7CE45FB17295EC2914DABB6F9F5404D2C63A2800 + 4A7E50A24429939999E90B00C5215102C0D8FF4604A0A09E802B044C7B1D3C79 + E16BF3004E9EBF62761D3D7FC32E77B2F17FD003D87AF8424AD63FCC0B48D5FA + 830F3EFAD46CB17F6BE2F23DA6C7A47566CDCE63F21BF05BD140D61500AA3993 + 913FA3792B5F00203FA85EB3DE86DBCD973B6EEB3F60C8F50139430C7005800E + C1AE00407EC0EC00C940B27CF81E04604A420160C96E0A8228AF4500180B2A11 + D9462DCA8D09C0B69B1280544520E8059CB8F4BED9BAEFE44D7B00A98CFF0141 + C68DFB4E877A0061963FCA0348C5FA0362006F5E79EF866701521982F09EB3E7 + 2F98EE93D60AF9C184253BFDDF03971F01B8E79E7B44003A77E9623A74EC1249 + FE4801A8513F9D0E5CD85BFF0183F60F905570E3316AF4D87CD6DF178075EBC5 + FA5313306BD69C380170C90FE8A94F411035F5AE00E8B668CB3121BF0AC0C133 + 576FA9000485E0C4A50FCCCE43670A14644BE6012472B72FBC75D56C3E7026E9 + 745BB2A05BAA1EC0BE9397CDDBEF7D58A83100B5FABC0711637115A0E4071397 + E5FA1E00F91F0880160421003D7BF54D487ED0A4690B9FFC356AD64F0BC0ADD8 + FAF71FB4BFFF80C1260804208CFC921FB066AD2C11BE4FE677E7F9021024FF90 + 9800942B57CE1700A602E30460EBF17801387BE302908A08046703F00036EE39 + 71531E4058D15198F5872C972E5F31AB769D8A8C01DCA807102546874EBF15EA + 014459FF546200BC1FC2EB52690A5700462DDCE6FF163B77E6CA4C900A002B17 + 230089C81F2A0035EB5DBFDD7CB9E3362B001BE8D51E86500158BE523C831D3B + 7225A23F77AE270061E467F51D56A5E11FAF0200B01EBA316FAF0240E6DFAD16 + 80A0187CFCE5EFCCF2EDC70A64FD13912E51C04D89B764DB89027B00A958FE30 + 0FE08D8B57CDE94BEF1678FE3FCC03085AFC20C62DDE2EE4EF39D9837A008803 + 0250A64C995836E073F69E199590FC9E00B4F4C9EF7900F5D2E9C085BDF5EB37 + 30A75FFF41260C61D67FD9F2152200A4033315C89C6EA8F5B7E4575010444930 + E4D77A00DD70F9D5FA23004BB61DBF29014845045C0F8064A0A55B8FA43CFFEF + 7A0061963FCA03508B0F1080AFCB033871FE6D412A963F4A947409363AFC6883 + 91A0F507A3176CF5C90FF4B7A0872402D0B061435F0058533211F9013D016AF8 + EE7FBDB400DC8AAD8F1580BEFD065AC2E7870A804B7EC0399A82920CB46CD9F2 + 7C02E0929FF5F75819869569A304202FFBEFEB1180A007B078CB910259FE30D2 + 25B3FC2E0137EC3B63DE79EF8342F7005CCBAFB870E57D73E2C2D502597ED703 + E0BBE922AA8970F4E41933D98EFB5D0178E7EA7BF27E04D01580FFFB7FFF5F9C + 0044915F04C0B1FED52CAA56AD9DAE0728CCCD7A00D9084018E6CE5B102A001C + 6F8965032EB78FDD21804B7E1500149FA91F15002C5FB4009CB8E502109C0998 + B6FA40CAD6BF303C804D5600C8FFBF990CC0543D8037DF7E4FAAF7DEB68203DE + F171CD3EBE965718F4415E7110493DEC99B13872F29CC5590F27CEFAAB2E2BDC + EFB572FBE138013878FCACDF84050168D7AE9D08C00F7EF003336FDEFC480150 + F2AB00A8F5AF56BDAEA956AD563A1DB830B7DEBDFB97ECD337C7B8E8DBCFC35C + FB4F0A927FA9B5F8EC5979170158BDDA2B088A223F2BEF3EFBEC735211A825C1 + 104CB70FBFF8CA0C9EEBE5000C9BB75D8A786EB50004850001B8D51E80EB666F + 3978D65CBCF2AE587921E2BB1FF8E031B8F22EE4FCD8C3071F5B827A78F7DAA7 + 7EE71D0A6EBCBD87A8E622A9740C729B8DE0A1B92B312BC28606BA443BFB35B9 + C77CF2F79AB2DE1C3B7DC98F03E86224410148447E4026A05AFFB400DC822D4C + 0014B366CF8D1780653101B07B5A83D115883DEEDC9010D75F97DEA61E80BEF9 + A90800B8D50210E6015CB8F4663E0FE0EC8537ADA5BEECE3ACE2E21573FEF2BB + E6C25B79B868F1E63B56143EFE3C1E9F78B8D10E41C9BA0485750B8A6AE3456A + 6EA27E81046721B39216B8A218F44E821EC0D6FD277DF283ADFB4EF81ED1D469 + D37C0100189744AEBF823C00B5FE552DAA54AB95AE0728CCAD67CF7E457AF719 + 60C23061E2947CD65FB17EFD469906F4052082FCA0D8F32FC83F5F0580958582 + 0230F46B1480A01824EB1294AC3B5054EBB044EDC3A25A8925EA1918251A89DA + 8BA522248802E37D6206C1B8422A1E80028BAFE4076B738FFB62C25A0FDC037F + F3377F63BEF18D6FC87D908CFC4D9BB51401A816270075D2E9C085BDF5EED3DF + 78081180E5F1D67FC9D265B25FB77EBD2402110BA024388EFC8E000CB2285EA2 + A48C01B529C8A14387E208ABF5FF2A0274FBB95DE48F6A0D1645766D069AA847 + 20C40D23F6D7ED01847902587D75E3DD214DAA1E80EB051C3A712E4E00566D3F + E27B00D3A67902A0D980C48392911FD4ADDFC4277FD56A75D202702BB65EBDFB + 9B30B04E609CF55F1A1300BBA7631002B03337572A02C3ACFF201580E2254C97 + 2E5DA422301501A01CF8EB1080AFD303D0E3AFD3034824263AD6D719019D3548 + E40124F3022E5DB91A27000B361EF4C564E3A64DB250A90A00AB46B33E4018F9 + E304A05E634F003CF29B2A556A2DB8DD7CB9E3B69E3DFB5EEFD9AB9FF1111300 + 5A83B9AE3FE4078B972C95E01FD9803B77EE9245420902065D7F11804143CC6B + AF55304D9A34F10580D56AC20460D8BCAF4F00A29A84A6DA25D8257B2A5D82BF + 4E0F20912780D587F8C1205E2A1E40D00B089B0950F2F79EBAC14C5A96EB7B00 + 788C0840B162C544003A76CC36DDBAF74A487E1500C7FA9BCA556AA7D3810B7B + EBD1ABDFFE38018861F09011F9ACFF92252A006B84FCB9B9BBA4208820603EF2 + C704A0769D7A5210A40280FB070975A3B79E477E4F002EBEFBC9D766FD53691B + 9E4A97E0280F20281289C4E1663C00150B884F400F6263C159DB007263E51100 + 2524F3FC3441510F40094FF0D3F50068E0C23C7F2A330140C90FA6ACD8ED0B0A + A28F00942C595204A07193A6A66BB79E09C90F2808F2AD7FD5DA6901B8155BF7 + 1E7DF6F7E8D9D7044132509CF58F917FF1E2A592248400ECDEB3D7CC9831CB73 + FF43C8EF09405D4902A124180100AE0090FCE30AC0A173EF7E2DE42F08E96FD6 + 034885C8AC8710B4FE9CD3401DC4E698713BE775E10DBAEEA8D587949ABACB79 + 48CB31561F32B3800AFF07488BC54604202E2B18313423A30F81502F80055838 + 1FF400A27201C62CDAEE0B40CECC4DBEE0B052922B00CC0CF5B7F75722F2039A + 82F8D6DF0A40A5CA35AFDD6EBEDC715BB79E7D3674B78477A1221066FD49FF5D + B1C2CB06DC630560E6CC3C0108927FA045936619520FC08DC7DA000800245011 + B81D0290CAF81F52AA00282121625010201A24430CF85E90936348A422017979 + AC44E7F55C8F7137C4E2BA5862C4823D0485EC58647D0EE2714ED7F1E35ABAD7 + CF87002004109363C4823DD69CD59258B997945E3E0BD73C7FFEBCBF47200044 + 560F40973B4B351700ABAF02D067DA06DF03E06FF6EBD74F3C411580E1234625 + 243FC54008806FFDC503A8954E072EECAD5B8F3E39D60B306108B3FE0800B303 + 5BB76E8B9504CF16010823BFA278F1E27102E0AE0FC0E2122A00C3E76F973EF5 + 89366EF09B213FA485A8105DD7BB53D26B541C9273CC1E92422888CE31EF27BB + CD4D0A820C901CD79AD7F2FDB88E7A00520A7CE1823CAFEEB95E4F8F210A2486 + 90880242C175D9F35809CDEBD50BD063F50038E673705D3C048849EE3E8B7422 + 26FC0DAEC367C4FA735D376129180328682E00E37E253F500FE0E4C9537102F0 + E0830F4906699400407ED0B849F338F2574A0B40E16FDDBAF5CAE9D6BDB71158 + D2BBA037A006FE94FC8B162D1161D8B2659BE4022C5AB458028051E41F3870B0 + 2C104253105D21F8578E00500138CC5F0360BBF4C84FB471E3EAFA029097C7DC + F83C866CDAE0132270D34304B558BC466F6C88AC64C54A2302DCFCBC9FEB728C + 009C3973C6170A3DC79EBFC1B521AC2E820129F82C4A34F500208FAE47A80937 + 7C3E48ACA4C5D2F3F965ED3DFB3AB5EABAA027E7539901E0F51AE5E7DA3A2408 + E6FA076B03548C82B301A9E60180E5DB8EF8E407C7CEE4650322000483351B70 + C2C44909C9AF5001A8141380F255ABDE73BB3973476D5DBAF7CEEE6AC9AFE8E6 + 60C6CCD9F9AC3F02C0B9CDB1E6A09C77052048FE1C0B0A82A64D9BE60B003756 + 9C00F82DC0130B80BAC08C4B792FC7EC21187B6E7EDC59C6C6BAEA2DE7B93939 + 87DB8FA5E2F590841B5357BCC503D0F25525216487A4888246DC110E9EE3B508 + 08E718FBF33AC8C8DFBC91B5020B3A031005BE4BAA040EA62C27F200B4362151 + 1C60F58EA3710270F0C459DF0BE8DFBFBF400580A16332F203D7FA57AA5CD354 + AA944E072ED4AD73F7DE25BB76EB65C2800004C9BFD05A7C7ABB6FD8B0510400 + 316016209FF58F911F500F3075EA545F00B09E2A0017AE7E122700F3361D8974 + DFB991202CD68D3D44E466E466E67975DDD52380982A0C1047BD041D02848DFD + 755F18D1FF82AC169CCA0C00DF219107C06FE2F6EA73EBF95DEBAF24D6F13F24 + 76AB08531590A027B06EF7099FFC7DA76D34C7CFBCE90BCAD8B1637D01F8E637 + BF9992003004A856A3AE6FFD5F4F0B40E16F0840174BF6308C1B3F294F0016C5 + 0460E162118175EB3698FD070E98356BD649497090FCAE0010F4A122304C003E + FCFC2B5F0074F18F54C7F34ACA5B39E597EA4AC1054DEC099258A3F9C15900BC + 11B5FC58698603BA8A3204660FA989E4638509E431EE67FA8E2110413C1E6B60 + 10F09880A0A4F0C696590FF30052C903703D808327CEF9E407AB77E465034E9F + 314304E03BDFF98EA403534A9E8CFCA07A4C0020BFE0F59A4D6F3767EEA8AD73 + E79E453A77ED69145D1C8C1E332E9FF51701B058BB76BDD9B76FBF08010B8486 + B9FE8A679E296A056290E4007802F0563E017097FFBA91A8FECD88008084C9AC + 7F982040721504253744D6A103DE07C30F1EEB6C00CFF33E59EADB5A57AC2ECF + B3E7B1921BCB0DD95430D4D2EA317B88CB6BF08A08F6698D3EC324AEC7392D4B + 560F60DFBE7D02C480083D0210E60124CA020C8B0360F15D0158B7EB842F2A33 + 67CD3203060C30F7DE7BAF080041E148F23B02201E8092BF520D53B1528D743A + 70616F9DBBF430AE082846590108927FC1C245B267DD00A60169123A62E4E848 + F2E7E40C322FBD5C5C72C15500740C0F5820244E0016EE307FFCB770AB9EAAC5 + 57E8B8989BDA253BAEB206E7B0DE3AA6D7EB636D754E1D4B4C000F4B0731791D + 160D2FC67D0CA1212180643C86443C56ABA9CFBB569FCF40A0515373F9BB9CE3 + 39AE03C1D503D0E83F9F4B137DB82ED6176BAFF10D8EF104788D4E1B6A603248 + DC9BCD040C7A004A7EB06CCB21DF0358B56A759C00F4B6F74332F2831AB5EAFB + D6BF625A006ECDD6C90A4018FA0D1894270031CBBF60812700AB56AD91EEC004 + 03478D1E1349FE0108C04BC5A520888AC0A000005F00167AC02B082334373C37 + 938EF1D9EB8C0084E426558160DA8D9B12ABCB5EAD1B377DB0B61F51A0F38D5A + 7F48C21EF71B224266AEA7CB5D41122528C7100E41D120A53EE63ABC0E624342 + 8DD2EBF0402D38CFF1D875FB790E61884A1C522F434545A3FE513180601C2038 + 039068FCAF1E40D013087A007C17257FBFE91BCDB4557B7C51D9B2658B08C0C3 + 0F3F2C02D0AE5D7BD3B973B748D71F34B2A855BB814B7E53E1F5EAE97A80C2DE + 3A76EE7E3DBB7377033A29540002D61F01002B57AE36BB76ED36DBB7EF3063C6 + 8ECF4FFE818385FCE0C5975E36AD5AB51201D8BC79F34D090037B646FF19F792 + AD0659B901795E23FF88012E3AE7D503D0397B9D83D7F6D69CC7CABB1E00A2C1 + 6B21A6124823F0FC0D2522E7750AEF46A2FF059D05D0487FD8349E42D62078E3 + 0DBF8B9166F7A9C5E6FB323C41F48805A817C2E3A03816240F0028F9018941EA + 01E0FD2100A54B97160168DBB69DBDCFBA25243FA81914808AD5D3E9C085BD59 + 01D8AF02E0A2579FFEF9ACBF878566F98A1566C78E9D66DBB61D66ECD871E201 + 84911FBC5EA98ACC01AB00683AB062DCD25DBEFB0F3EFAFCB7916E3D37389686 + 636E74CD9083CC4A3A75FF2130A2A0517FDDF35CAA957FA946FFDDCABF540384 + 51B3006EE08FEFA7538CDA991701606CCFF7D3609F6BF9790DE37A7E1F16E7E4 + B5BB77EF3667CF9E154F49F7BA72AF97AC7332A10710160B08F30058E65D0560 + FCD25CDF036045E99C9C1C5F00480B7605C025BF2F008D334C9DBA8D5CEB9F16 + 805BB175E8D46D7FC74EDD4C1882D67FFEFC852200F408C0FA6FDFBED34C9C38 + 394E005CF2835AB5EAC80221F4045001703BF32CDD7EC259FE7BA7397CEEDDA4 + 01BD1B09F4B911FF64537D4A644DED0D121B379A3DC44464348907575CC9CC6B + 201544E63164C66B21922F6BEAC5BC0CCDCE83403AC4D004215EA76280B54644 + B92EF90A0802D7033ABC61AF969F683FEB312212909EBFC135782F1E0F161FA1 + E0B54C07066300C13C80643D0100565F05A0FF8CBC7A00529111806AD5AAC954 + E033CF3C23F92389C80FEAD56FEC0900E4B778AD62B5743D40616F1D3A76DDD0 + 313B42005CF25BE22300F3E62D901A816DDBB6CB3080B5047D0108907F801D46 + D4AC55DB54A952452A021100E2002E89550046A62800C922FD2A0210136BEF7A + 004A64C8CADE1DF76B1A3024D23880BACE4A545C7E0402EB0A29B9B979BD1257 + 5D74C481D7EA781D5180883ACE87EC3CCF67D2409CCE00B0E7B3E83122801840 + 58827B5C9F6BF13CE4E518E181801A17516BCE7512650286751356EB9FA82740 + 98F567CFB85FC90F54544E9D7A4304A059B36622004F3FED094030E8E7921FD4 + 8D0940853C0148A70317F6D6BE63979C0ED95D4D1820BBBAFE905F0580451F09 + 002200D3A7CFF4042048FE1C161919683A77E92605410800C12044E0B7F68656 + B2AED973C6237F4C0028080AAEE2A3E0E6E76683843A36579755035F3AE6E7B5 + DC94EC21BC56C1E9B16BF5B1723ACEE7186273ACD7C61A426ADDEBF002EBAB15 + 779011B1D0618716E260F179CCE7837C3A64E1BC5BC9C7B9B0F13FD7760379DA + D6BBA041BC28E216B42310E2175511386BCD5E9FFCE0CCF94BBE173070E0405F + 00BEFF831F48415022F237C40368D0248EFC6901B8051B0260615C58AF403079 + CAB47CD61F101BA03B303301B367CF3183060F0925BF820542D4034004B8D995 + D487CE5E8D1380E53B4F450A0037A092532DA86605724D8E19DFAA07A0C14148 + C63124E5398EDD61002E2AD07A02080041110F2DCB457438A773FE5865C480E7 + D8F3DA1B19FF078384BAD7EC3E9D7D506822903B0B109C0148B50E20CCFA2B20 + 3AE2A1331B0808BF2DC3067E9F303159BFE7844FFE013337FBD9800001609D40 + 1580A953A7E50BFAB9E417346A964F004A56AD7AD7EDE6CC1DB5B56BD725BB7D + 87780150F802303F5E00181A6CDCB8599281787EE0A0C191E407D4032C5BB64C + DC7F04801B53C7E6AC0FA002304A04E0A49C0F1BD373636275F426D57340A7ED + 3886DCDA240322F298E7391736EEE77D5169BDC19AFF546BFF95CCC1E83F9F21 + 592B2F44C51D2AA43A8D87B556EBAF165B037F1098E94C400C800021D17F8D17 + B8B3004A74828380D7F3BEAD5BB7CA5E5388835EC09A9D477DF2037A05AA0740 + 3218228000FCE55FFE657E010821BF0A8092BF7C85AAE6B5D7AAA5D3810B736B + D3A173C9761D3A9B308C193B211FF9E7CE9D2F8F4902120158B848860051E4A7 + F903F5001404A9078075C927000B5500A23D80A8005FAA4825E29F6ADFBF2861 + 50D10913080D1242D6A0F5574F83F74346C8CF741EE204C9585C95BD2626E9B0 + 43670474EA4F87339C670F6909BC6285993685F808079E0E0200E1792D5031E5 + 3CF10688CE300741410838B77DFB7621749807B0FBC8D93801D876E00DDF0398 + 3D7BB6880002C04C006B4B46B9FE4AFE0616C4003CF27B0250262D0085BB8900 + B4B7840FC1B0E1A33CF2CFCF23BF8705B252F0DEBDFB255D986A400DFA05C9DF + AF7F8EA4035310A41E00379F92F1834F7F2DE4570198B8626FCA444E8654891E + 66F9D5C58FB2FE78141017D2629575AC0F81780C4139073135900779B1F03CCF + B96BB13E001C6B961FE4C385275F026BCB39C8C77B74CA4EAD3F420174364067 + 00202CD17EF6EE2C009F85F31096FF01E03304F30010114DAE0ACB028C9A05C0 + E22BF9C1DADCA3BE07403A3002F0E31FFF38560FB02C9CFC3101681003B5006A + FD05E52B57BDDD9CB9A3B6F6ED3B1769DBBE9309C3D06123F3597F05BD01690A + 425620158151E407447DC78F1F2F960801D071BAD4E17FF69B380118BD283792 + F81053C7C27A0C7994B43A2C5001708F759CAE413F88A78D3B741880C583B488 + 024450F7DBED2B80F5D6C09D96025F8BAD83A78F01D6525B7D4164FE0EEF4124 + 74EC8ED5D438060447202097BAE43A3BC0F5B1DC4A3A7DBFE606F099B4994858 + F69F1B402C681660418289C7CF5EF6C99F336BB3D9B0E7A4EF012C5EBC5804E0 + BEFBEE130160C19028F2070540AD7FB9D74095743A70616F6DDA651B45DB769D + 7CB04A5090FC73E678FB152B564B1090BA002A0283E48F1780A2D2144205004B + 14E601407E1065D1956CEC210B7BCE63C934F71D8B0CA135514809CEF34A109D + 22D3EE3B880704610FA1DC883F7B2512E4E37A08188F95BC5A96CC638484EFC7 + 638442C9A696DF8DFE6B775F906A396F32F2262AE4091236AA0F40AAEB02043D + 8037DFBAE2931FCC59B7CFF700F8DFBB0290D5BAB5C96CD52621F91B346C1A13 + 80AA3101A89216805BB1B5696BC91F821EBDFA8608C03CD9D31A8CE6A008C0D0 + 100150F2F7EB97635E7CF165690CA902803573892DD67FD14E5F003EFFCDEF43 + 3D00C845061B37214462CFFBD9EB9816E2734ED362791D02806B0C99F4E6D676 + 5B1042A715D5EAF318526A32904EEB0523FFA9B6054F561E8C1068E7A1B0C87F + 41A2FFEEDC7F2AD3879ACBA0D3A42A1C9A24A41E0849450C33A23A02A9A028F9 + C18CD5FBF2EA01B66E1501D06CC0ACACD6A663C7CED1E48F090015818EF53765 + CB579970BBF972C76D596D3A5C6FDDB6A309A27BCF3EF9C8EF61BEAC0E8C0090 + 0FC09C6E28F96302F0C20B2F4941902B003A0E87AC90DF15806BD62B08F30020 + 3337B1BE575D662DCCD12E3E1058ABE9D40380B46A7D5369E0A1840E92FB665A + 778745FBB5C949D0FAEB0C808EFD41D07D57F2A977C3F85E9B7CAA0744E92FE2 + 481C80A1052209D4FA13FCC3A32140ABC70821AF85F05C83210CC13F7718A2D6 + DFF502F89BAE004C5FB5C7FFECA4230F1E3CD817808A155F371D540022C85F3F + 26000EF94DD97295D3E9C085BDB56ED3617FEB3696F4011008540180F4907FF6 + 6C4F04C806241D98FE805404CA0C4008F9014B84910442510802B06BD7AE3862 + C709C0E25C890BA41AE82B48D0EF463BFC44050383D1FF825A7F08AEB90A104D + 33FDD4D3013AA42026C01E622218EC791E31D00C4025217B5E4B001052437E1E + F35A1500D703D0B460CEAB17A0D3803A8CE039AE1766FD5D0F60D2F2DD42FE81 + B3B608DC6C4004A042850A22004F3DF5B41D62F6CF17F473C99F1680AF696BD5 + BAC3FEACD61D4C1CDA78085AFFD9B3E7CA7EF1E265D21D1801183D66AC0401C3 + C8DFB7DF0053BD7A2D29084200989642045CD2CDDF74C41380C59E009CBCF4FE + 4D91B8206DBB92F5F7E7312450D2423E2CA43BFEE71C448588B8CD8881C62482 + 9D7E202224838C4A4EAE8795CDCDCDF5E3142426414E2C2C561D0242488E21AE + B7D8EA51DF03D0F6DF5AEC03F8FB7405E2DA5C47A3FFFC7D37FB2F5809986A2F + 80600C00F1211D58C90FDC7A0004A079F3E6BE006034C2C6FDF51DD4AAD3308F + FCE52B9B57CB553E77BBF972C76D9959ED36B46ADDDE80A01004AD3F02C09E6C + 40C88F173079F25471FFC3C80FAA55AB250541CC65AB00B8245EB6FDA46FFD01 + D981376AE11902B8C93D61CFEBF85EC7CB2A12DA2E5B9F03080064E226D60623 + 405382211042A13301105CDB730377BA90BD128A6BAB8BAD917FDEAB45417803 + 58781DDE2042100EE1500F0011D034E260FD7F3080986AF43FD9BA807C6E7E8F + 30EB0F66ACD91727001A60E43DAE00FCF0873FB44663603EF207058092605700 + CA94AB9C4E072EECAD55ABF639ADB2AC008460FC844971D61FCC9A3547B20137 + 6FDE6A76EECC3553A74ECF138000F9FBF6F504801250AAD95400181BAB055EB6 + E344BC009CB91A69CD21975A6088C0399D1253ABA4517DBD99B9F9748A8EC7DA + 99871B168BAD961F726AD3512C16564DDB8F2BF1D44AF2F775864089A3D698CF + A8FD0638D6B97EF69AD8A39FB92091FF1BCDFF57EBAF64D56A40840782E2DA23 + 70ECF13234070011E27FC5EB112BCD27E03561D61FACCD3D162700874F9E93F7 + 0304A05DBB762200DFFFFEF7CD9831E3225D7F402D0002E092BF4CB94A690128 + ECAD65ABB63999ADDA99386479183F7E529CF59F35CB1300F203E80EBC6347AE + 99A20210427E050B84A800006E64B5D05B0E5DF003806396E49A6D872F465A78 + 6E586E2608A4813F6D7DC5F57077D96B941FA2E26A730E0BAE6E2D1659C7BE2A + 44B8D9901D3150C268F71DA063FD44D97EC996052310A96DCB0B1AF947AC3460 + A862A4ADC01003880B891110BC090809E109DE69241FCF01B2F39BF07DF92D79 + BF0608F91DF95DD833DCD072619ED33E033C7685C5F50036EE39E9937FD0EC2D + E6C4D9377DD11C326488400560FC848991E4AF6FC98F00501108F955005E2D5B + C91A93743D40A16E9999EDB2F309400CE3C64FCC47FE9933E7487090A6A0B9B9 + BBCD4C7B8EF15C9C0038E427D84341103D015400B861957807CFBCED917FB127 + 002B769EF49F0B7A005825ADA177AD2224E2C6D5453994A86AD153C9E977BBFB + 248AF6A7BA5CB75BE1A7D65FA7F0F89C9049EBF8B1AA5A6DA76376D7FA6B1A30 + 96580B72F0523403903DD7208350CB84D503E07AECB54B3084E7B7D255830E1E + 3C28B3053A03C06FCC6B1043AEA359835C9FCFC77BF93CBC3EE805A80700F9C1 + DEA3677C0F60FAF4E92200A403035F0022C8AF70AD3F0250A64CA5743A70616E + 99996D4AB6CC6C6BC290337048A800101BA03B30CD41E7CE9BEF050143AC3FE4 + EFD3A7BF1404CD9B374F5C4A04E0A38F3EF6498D0008F97D0138955270AFA0C1 + BF82F4F10F425D798E110A1DFB738E636D0C0299AFC59A70EA1E400008C2B89E + 6B4158DC7688C5313323586D4480BD263AA9F5D76B68845F73FF957C10154BBF + 6DDB36212F8F5540B48A52A7F1B4112A41D944198061DD80A31A8B2AB0F84A7E + B031960DC8DF9B3B77AE0C03FEF66FFF56BC80050B16E4277FCCF577E1921F94 + 4A0B40E16E1956005AB48C10809C21F9C83F73E66C79EC3507DD2BDE0002104A + FE9800500F3063C60C5F00B0224AAEB3573E8C138059EB0E258DDCA73A45A729 + BB9013F75BDB87E9325E1058AD3EC4814CEE0DAD6BE8B1E73D6A253987B5E758 + 5D664D2F66CF791DF7435C08C939ACB7CE16B057ABAA557B909573080396DBF5 + 72D4C3E17A05C9FC4BA5FEFF663200DD18C0E193E7E304609DF508D403983367 + 8E78009A0D880024233F43006A01F204E07553EAD58AE97A80C2DC3232B28AB4 + 68D9C684A1AFB5EA6102C07EE5CA55E2012C5AB454860061AE3FE407D403E002 + 220058A94B97DECC5B3FEF935FC509C0D825BBF2596E852ED1A5813C0DCE71CC + 8D89A5D3F7698B6C0D384216CE697C801B57C7F3DAEA4BD7ED5302739E9B17B2 + E8B85B03787802BA3807AFD58A3F7D2DCF6BDC81EBEA58FD46B2FE82286807E0 + A8EE3FA9F6004CB42EA02B98672F5DF1C93F78CE56B326F7B82F2E1B366E8C13 + 80962D5B4A57A028F2D7ABEF094085D7ABF9E47FA50CA8984E072EECAD798B36 + 260804A073E71EF9C83F63C66CD9930E8C07405D00158151E407CCFB0E1D3AD4 + 17808B172FF996F7DD8FBEF00500F283288B0E89788FDBDD47DB72119C82AC6A + F135CD55AD3E635DC8A9ADBA75892C1DD7EB7C3FC4C45B7057E4D10621103A51 + 5D3FCF6BEF01ADEB4F85B8898A760A1AF98F72D5B5FE9FEF9D4A17E044EB0146 + CD0248EDBF23003357EFF53D00AA411100168C45005A580168DB3E3B74DCAFE4 + 0F138052AFA405A0D0B7E62D5A9B30D0261CF2AB00407E05D980CC02D0267CF0 + E06191E4EFDDA79F295AF439290822E514012058E557F17DF1554C0076F902F0 + 8F7FF8E750971F7272137343E9EA3ADCA0DA8B1F82EB6B75A10E481D8CE0A7DA + E823EC5C30201815F1470834E29F6AD45F7B03AA60A89BAE8F5DD269D2904E67 + 12176018C16322FE3A84E01CC71AF9D7D4601D4A24ABFE4B6558E10E2F94FC60 + D6DAFDBEC0D0471223F0EAABAF8A003468D0C0B46DD7313FF91BE4915FFB02E6 + 59FFB400DC922DA379D6F58CE6AD4D10A40407ADFF8C19B3644F6F403A03B346 + E09021C343C92F02D0BB9F2956EC051100AC80270087E34805F95D0178EFE32F + 934EB3A58230B2A6D2B73F2AD21F95D7EFF6F2E3188F2168F975E51FB5FE584C + 088948A97526188815E531C141084C1E3D50EBCF796600F82D21AAF60120CE40 + 3D007B08AFB5FF1A30640680739A0ECC712AD63F950C40D70318B160BB2F00E3 + 16EFF43D003EB32B00458A3C693A66774948FEBAF51ACB0AC14AFED2AF5634A5 + 5FA9904E072EEC2D23A3D57E2B02260CF1E49F6DC7F29E0030F6677D00DA830D + 1F3E2A92FC2A001D3A74F0058088B4DB4FDF15807116EF7FF265A1040153412A + 4202A9DD7460ACBB26FF04450452E0E9F03A880B81B0FACC0068F45F73FC2106 + 9693F35AE6CCFBF87D98B6D3AC3F5EAB430782849097F886D61368E49F6B717D + ACBD0E81101E8EB59F41618DFFC3AC3F7BACBE0AC090B9DB7C91E1330D1B364C + B2423D012822F74C24F9630250A94A4D1DFBA705E0566DCD3232F737CBC83261 + 085A7F4F00664936E0962D5BA541E88811A3250818467E50BAF4AB521044FA2A + 02C0A2142E7126AFD81B270097DFFBE4862CBD360B75C1CDAAA9B8BAC22E7B6E + 58C8807BAEC13A1EABB5D71900C8AF49361C6301D96BAEBEBB9807D07C7F5DB7 + CF252E96575D771E430AFE06D7D2CA3FEDD2C38C019F5DDB80DDE8D83F18F90F + CE00100FB899FCFFA00730C38EFB95FC403D8093273D0120F887003CF0C00371 + 021046FE3AF51A992AD5EAE4597F8B52A5D30250E85B9366991B9A366B6514CD + 32F23069D29438EBAF983F7F91907FD326D6081CEB0D019C71BF2B0055AA5637 + 4D9B36F50580A94097C0CB779C1401181713804367DE8EB4D890573BF5E8B1AE + DFA7492B9AAF0F34D8C70DAAEDB9D58A6B7720BD4935C80874F14F840301E0E6 + 87E09A0AACD9707C06AEAFE37EAE414092BFA1D57E9A52AC01CBB088FF8D46FD + 93E5FCBBC77C479DE180C078195A94A429C27C769D724C75FEDF159AA55B8FF8 + E407672EBCE58B0D029099992902F0BDEF7DCF0C1E32345FD0CF253FA85EB39E + 6FFD4BBD524170BBF972C76D4D9AB5CC69DA2CD3B822A0183D7A5C9CF59F366D + A680F97FDCFFAD5BB79B091326F9021024BF0840956AA676EDDA7102E05AE9E5 + 3B4EF8D65F05202A0B0F226B034CC8C10D4B50516F4E25A7EB0170C34366B7CD + 17169D6B415C444297F0560F4017C5D416DDDAE22BAC7FBF06FC0A42DA1B59B4 + 535700866CBA58089F59FBFD69820FE36D5EC3B083E7B45889F3DA0C54EBFED5 + 034008342598EB16D4FAAB07B06ED7B13801387CC2AB07E0730F1F3E5CA0E9C0 + 54922622BF08408D7A79D63F2D00B7666BD2A4654E93A699260CA3468DF3C9EF + 0A005582A4036FDBB6C34C9C38254F0002E4EFD5ABAFC9C868290B8470732200 + 40A7E7D403080A4094BBAF11705C64CDBEE3667649E3A6FF6A1AAE9BF473239D + 7B12050EB9B6E6D4AB17C2B89EC7109D580004E21862B157ABCF7925B2924BD3 + 7EB5F1A70A09C75C532B0F350E8187A243029600C323E2EF200ACC08A89028C9 + 7518C1EB202D9F5DE3115A287423D61F6CDA7BCA27FFD079DBE2EA01C68D1BE7 + 0BC037BFF94DE92511247F9C00D46D646AD4AC1F47FE92A55F4B0B40616F4D9A + 64663769CA9AED2DF309C0800143F2917FEAD4199220C40C00023069D2541180 + 30F22BA8075001A0C3CCC71F7FE21368FF1B57F20460E96EA90748946F1F8554 + F3F5A322FCDCECEC21A81E2B10155D1158CB8A79AC0543900BCBAF117808AB96 + 91F13E8BA368045EC7FC40AB0D1102CDE9D7DA7F88CAB112969C7DAD01000887 + E6E56BB62144D6E9401593A8CCBF1BCDFED3C62341EB0F761E7CC3273FD8B2F7 + 843F53413B701500407258A4F5AFEBA176DD86F904A054A9D7D2E9C085B9356E + 9C59B2719396260C7DFA0C8809C0CC380198396BAE59BD7AADB4062348181400 + 97FC80049055AB56F902F089BDA995AC074FBFED098025BF2700A752B2D6B8F2 + 0589E8E309684A30840A5A7DC8A2EBF3410E88E92E11C6FBB40C585B80EBB2E1 + 4A4AC8C05EC7FD3AE5A655753AC6560F405D785DBE1B52B3D75AFFA89AFF44C3 + 87E050222C80986AFE7F41AC3FC0E22BF9011E818ACDFCF9F34500341B70D6AC + 5991AEBF921FB8E4072FA705A070B7C68D334A366ADCC2285C01E81D130097FC + 80732B57AE918AC059D61B7005A05740007A5A142B56CC0AC54C5F00B0206A5D + F100582A3C4F004EE69B67574B0DB1B402909B0F8BAC37B43E0F29B8E1780C09 + B14C1ACD87B0DA334FB3F614EE8DCCCDAF813BAD9DC7EAEB1E12EBAAC09A26EC + 36E7C40A6BC59F9BE977234B75A5DAA63B8A9441EB8FB50F5A7F3C881BB5FEAE + 07400F005700D6EF3AEEC700481F770580DC9028F2FB025027CF03480BC02DDA + 1A35CA28E20A800B5A84E7597F8FFC53A64C97C72C158E005031A8021046FE9E + 3DFB98A79E7A460A8208002200DC706A794907F604609719BF6C8F9960912806 + A004D479701D77EBF5B811355ACF8D0701B4BF3FD760CF796DE5A5EF530F41CF + ABB7A04D455584B441297B37C32F2ACB2F2AE21F15F94F35EA9F28751812B3D7 + C2227E371D1AA8A868FAB44E3D328C21A07AA3D69FDFFC9DABEFF9E41F366FBB + 99B3FE405C362002F0D8638F8900346B96615AB46C1D4DFE98005012ACE42F51 + AABC45B9743660616F0D1B353761400082D6DF13801966C992E52200AC104453 + D0A0EBDF334E009E8E13800B172EFA51F477AE7DEA7B002A005119779AD482AB + CCCDCE8DA74B57E96B34E38E634D09D6717CA22CBE64707BFA6BE79F64853937 + 63F9956490993DCB7B6991135697A185D6FBEB4C803601E5581B8A06A1D61F01 + E0755C9F610BE407892AFF12597F80A028F9C1ECB5FB7C0F40BA485B012853A6 + 8C2F00AD5AB74B487E4035601EF9CB9B974BA405A0D0B72801608D8020F91534 + 072506B0D47A02393983F38DFB95FCA0C8934FC93AF114042100581BB5A8791E + 409E004445DE35BF3F2A2A5F90287EA2A061B256DFA9587E08E18EF5B55250B3 + FE34F30F12EA581F303F4FF112E241D45EB3FE74EA52BBFDF01C4048348908D2 + EB42A0BA680AAFD1BFC7397728A173FEDA90449B8606AD7F54F65FD85043C90F + E6C63C0004E7C0818366C48811BE003CFFFCF379021041FEB4007C4D5BFD0619 + D71B34CC3061080AC0E498002C5CB8446601180A0C1C382492FCE0B9622F582F + A1BF2F00A4BBAA65FDEAB7D7FDF1BF08C0F23DE6C34FBF4C29F73E0C89DE97EC + BD3A0470AD3E04D1C423ED0308C1882940585D621C9212EDC78A423CF61085F7 + 708CC555CB0F11219F7604722D3FAFE57ABA30A71E436E6D528A75665680CFA1 + 117F2D73D679FFC28CFCA76AFDD9CFB2565F0560F8FCEDFE2CC0D1A3C74400C8 + 0941001E7FFC09D3A367EF84E4AF55A781AC12ACE42F5EB29C295EA26C3A1BB0 + B0B7FAF59BEDAFDFA059A80004ADFFE4C9D3644F36E096ADDB643660D0A0A191 + E4EF61F1EC73CF4BD0C71500D7AAAA00407EF0EE879FDFF454A00B5DE5074243 + 545C78F6DCB4EEFB799DB61D832CBC5EBB020308A8B9FD7C07C402F7197273CC + 9C3FC75C5B9B85704DC8AB053E587DE6E78156F9B94309252AE290EAB83FD992 + 615169C4C9D28913E5FE47051A19F72BF9818ACD29FB1B20005959593101783C + BF0004C85FAB765A00BE964D05200C13274E35531CEB8F008079F3164A77E075 + EB379AA1438747925F04E0D962262323430A65100008E48EA93DEB9F2700C405 + A2ACB416BA68445E57D5D51A7E88A78B67AA65E4313727C4E635B8D3BC5E537C + DD75FAB82E44D3DEFE5C037213F567E8A2B9FD6AF5751C0EC11008ADF2835CFC + AD82103559714E414899C8F2073D001D1E30DCC05AF31BF2BD344D3899F577BD + 003C00253FB870E9B25FB1386AD4285F00BEFBBDEF49F25898F557F28B0054AC + 96477E8B978BA705A0D0B7BAF59A6CA857BFA971A102306CD8A838EB3F292600 + B3E7CC371B366C12016091506600C2C8DFA3476F53A9525529085201603AD075 + CB176D3D162700272EBE9B6F0A50A1092EBAB4368FF539CE433ECDD5D76E41EC + B500487B07E8390DEA4136CE4170ADE3E7EFEBB146FDA322FD05C9EF0F5BDFEF + 4622FEAEA03024D080A0FE46109F7882BAF4DA1380EFAA4D48356558FB0AE802 + A7783200628755FE4589CDE67DA77CF28F58B0437203547010805EBD7AF902C0 + 7D134A7E4700AA54AB9D47FE126505B79B2F77DC56AF5E939CA00028860E1DE9 + 935F0460D2544F0066CF15F2AFB71839724C9C00B8E407AF5B01A02088926004 + 808A40D70358B1E3842F00132D0E9CBE12F7BC0B6E489DE6728105D763EDCD2F + 318658371FDDBB2BF306A3FB51D0A87F2282BA440D1216D17149A2161FD24559 + 7E322735CB4F57FD81E43AA5A7B9064A468DFE03660C8825F0B7780CF918B270 + 0E2F46E7FE11003C198E11090D3AAA07A0F50251997F41EB0FD6EF3EEE931F1C + 3A71CE8F038C1E3D5A444004E0BB08C0F048D7DF1780AAB5D20270ABB73A5600 + AC1760C2D0AFFFA038EB8F004CB4A05908F5009BB76C9516E2BD62EE7F90FCDD + 630250BE7C791100C80FB0A86AE549FE410026C604807A80A864206DCD954A7B + EE2884BD3ED17B5D2B0F390B62F5D522B3C7A2424E1EF35B684A2F24D3558CB5 + D30FE79911D0B5FD8819700CD938CFF33A1C029A5188C5E718A26B9E04C484D0 + 9AF7EF762CD6DCFF54C7FE51D65F8F771C3AE3931FEC3D76CEF700162E5C2822 + 8000D8DBCE8CB4629088FC356BD737956302A0E47FA97899B40014F656AB6EC3 + EC2801E8DEBD4F9CF587FC14004D9F314BBA0323002C22122600DD6368DBAE83 + 1404B902A0997C60CBC17332FDA702B0EDD079FFB9542CF4CD422D3504E6C6E7 + 587BFC4172AD28D476DE90860E3EDA8C545D655DC74F73FC21A6BB006758AE3F + D0E21F1DF36BC49FE7B0C25AF48335D7F1BABAED4A442C73B2A87FB2C87F2AD1 + FF30EBEF7A00587C570036588F80CFC9E7271D180FE0273FF98908C0D4A95313 + 92BF66ADFAA646CD7AF904E0C517CB3E79BB3973476DB56A352E59A76E631386 + 6EDD7BE7B3FE0800D3833405659DC08913274B225098F51774EF2505419404EB + 1080F501D40D3F685D7E570056ED3A156AB583E7341DD72DDAE12687483A47EF + 3EE796F5421AAC2DC7BAC29092896B68D10E02A0AEB08E91B1BE7C074DAED1C5 + 3BB48107AF71BD00AAF420A37A031C63C53956EBADEB15F23771FF6F36E29F4A + 5051E7FFF9DB0814DF2551E65F98F50F7A028CF995FC2317EE345BF6BFE18BCF + A2C58B4500EEBFFF7E1100190284905F04A0567D1F2EF9C1F32F9749A70317E6 + 8600D4AED3C8B8500168DFA14B3EEB3FC182A9410460FB8E9D521BD04B052084 + FC800542962D5B2602B073E7CEB8AEBB07DE782B4E0056E69EF23D80A027A06E + AFAE6BC78D0EB9798D9B06AB8B78A825D7054011016DDEA1D7D61902DD6B4110 + E4D5483F7F4B57C961AF565FC9CF5EDDEA6089722AC42C48C49FCF932F0D37E6 + 01682AB4F6006428A09E03BF8D2EF70D18FF6B5521AF41E86EC6FA83E3A7CFFB + E407CBB61EF6572D661A5805806140E3C64D4CA3261909C9AF02A0E47FF1E557 + D30250D85B9D3A8D8A040540C12221907F9243FE0913268B47A0DD81E9192002 + 10247F4C00BA59B03EC0ECD9B37D0170D381CF5CFE204E00E66D3C1C390DA8E9 + B15AD4834554B71DC2EAD25ADAC24BBD002D99552FC09D02D4E93FADD5D77502 + 128DF59345F915088092498B85F8EC5101456D47862068575F5D324C037D4A72 + CDF82338C8397D2DEF5542F27A4D24425878CC7B70CBB93E82A0D7D68623A958 + FE30EBAF50F283791B0EFA1E002B4A2300E5CA958B094063D322B37542F2D7B0 + A018C81580175E7A25FB7673E68EDB6AD5B6AE580858232068FD11001E4B73D0 + 9DB95211D83B260061E407A4035311A8028005550FE0CAFB1FFBE407F409D4E7 + 82808C44B4211737AF5A55B5E6DC907AACF9025AC7AF3D0141D0C30822591E7F + 22B75CC6C2870E89B7C0F8DF5DC74F3BFB6AA04FD7F2D3069E9A93AF565373FC + B5E8293737D73FE63C6E3BD78378040A21B36605729E6BF05BB377E7FC11A19B + C9FC0BB3FE0A57004807D6EFC2FF9D20A00AC02BAFBE2A0541C171BF4B7E6200 + A5630200F9C50378F195743A70616F510240DBA6A0F51F6FC17EC1C2C5B24CF8 + A2454BA422308AFC2200459E92AE302A009A8CA305414AFE4996FC0840A2945D + 375D37593A7054CAAF2E00022077B0CD17C20141110D5C57F63A25A6D65973E9 + 35CAEFCEF16BD45EE7D775E55EC6FE3CC7F7D7C72A308882F6F8E76FA855D705 + 3D7416C09D4EE4B10E1582B9FE37B3D24FAAE3FEA00780F84C59B947C83F6AD1 + 4E337EE96E3FF8C8E7770580CAC0ECEC2EA1E4D700605A00BEA6CDFEE0D76BD6 + C205CB0FD7FA8F8F090060A970EA01962C5926158151E4F73C80A7A520882420 + 04002BA74936EF7FF499270096F82A005FFEE6AB482FC08596E66AA30EA029B5 + FA1A08053121882604694B6D88A9FD05DC6B422C5C6BCDBBBF16AB3CE438AFDB + ED493F9F1FCBEE8EF7DD6E3EA408F33E0405700E8BA801C554CA6F353819E576 + 27CBF60B8BF8A71AF54FD5FAEB7CFF9C75FB85FC0AF500F0481080D6AD5BFB02 + D0A56BF770D7BF669E00B0388892DFBAFF56004A6FB8DD7CB9E3B6EA35EAEFF7 + 7E745CAF06025F0002D69F693FF673E6CE9774E0C508C0804171413F97FC5DBB + F534459F2D66060C18E00B006EBC3B1507F95D01B87AEDB3D0293B2CB456CF41 + 0C2DB2D19B977390417B07E02DE8EB34D0A76482E89A520C59D9EB1A811ADCD3 + 683F0442B478AC39FC9CE7583BF9B8997D7CC6541A821664687133117FD7F2A7 + 5AEF1F95F71F9505A8A2337FE3C13801D0F3AC0BE90AC03FFCC38F4C972EDD13 + 921FD01340C92F02F042E9743A70616F710210C0D06123E3C83F0E01B0983D67 + 9EB4065FB96A8D2C271E66FD213F78A6E873A667CF9ED2134005C02DA98D1380 + 95FB242EE02EAFE5A6E4627D74EF46BED55A699090D7A8F5C3024168CE717CED + 5ADE52DE2A122A2A9ABDA7CF872DB0998C9861644CB5977FB21CFF28E21564BE + 3FD95A7F89C6FE61E37EB5FE60F9D6C37102C0CC00BF391E1802D0A54B975836 + E077ADE7989390FCD5D302F0F56CD5ABD7DD401BE630E40C1AEA0BC0B8980000 + 160F5DBF61A359BD669D193478980401E35CFF18F9C1CBC54B4A4110E3690259 + 24D2B8537CD3D71C100180FCE0D2D58F22137734827F2DD64D971B4B2DAF1298 + 634DF2D1F7691FBF603AB0C60382EDBD13E5EE1724A7BF20B9FD8561F9A3AC7F + 2AABFCDC88E577458863E6FE95FCA317E59A13672EF9423466CC183376EC585F + 00060E1C942FE8E7929FFB8F65C27DF2BF58DA147BA1F4F5DBCD973B6EAB56A3 + 5E8E8551C40980B5EEAEF51F376EA2ECC9065CB3769D08008B84767705C0213F + A8F87A1529085201C095763D80953B4FF8D61F901B10E601E8F41C3779D4F361 + 5E43B2D768BFC1A825B5931151C9A8637C2CA126DBE8BA7D58419DBEBB55963F + D5717FAA963FACEE3F91F50764FF29F9C1A113DE2C06DF9FCE502A004005208A + FCE0F54A35E20400DC6EBEDC715BB56A7572AA55AF6BC290DDA95B9CF51F1B13 + 8069D367493F80B5EB3698112347C70940D7800054A858C9D4A953C717008601 + 6E306F55EE295F00A6ACDA670E9DBEF2B5A5032328084098C5D7B1BD4ED96912 + 1280BC24CF10D5E7E6C6CA430022FB1087F71080E435DAD187E7C2CA8493B508 + BB99717FB2E146B2A6A2A98CFBDDE343A72EF8E40778042A488B172F162FE03B + DFF98E64038E1F3F3E9FEB5F3D4E00EACA2AC12EF98BBD502A2D0085BD55A956 + 2BBB6AB53AA6AA257C101D1100C7FA230063C64E3053A7CD907A0056091A3D66 + 9C2F0041F277E9DAC3FE636B4B3D800A007097CB5AB9F364BC0770EA72BED65B + 41842DC11D65E109ECE9B1F613546F428B71F83C1094E10937B4E6E8EB9C3A44 + E13116DD5DAD17E269C20D7B9D7FD7C41DADE4C3EAEA4A4658C46485365196FF + EB1AF7DF88F5E7BB1EB616DF15808D7B8EFB31000A82F000581FF0CF62021036 + EE57F257B36091D03CF7BF94E0D9174BA6EB010A73AB54AD5649166354547540 + 735097FC632DF911804993A79A65CB578A008C193B5E0420487E150050BC78F1 + 3801700B8270F95D0158BDEB543E0FC04DD481AC5AAACBCD0EC1351558098FAB + CD4DCA313720E4D5180224D26BF13AB5F85A1FEFE6EEEB3CBFCEE5F358FBF441 + 3CACBC4E296A2B709D65E0F3908EABEDC5DDA0E2ADB6FC61117FD7DA17D4F287 + 59FF30413A71F6924FFE318B73CDFA3D277C51E2FFEF0A4083060D4C9DBA0D43 + 5D7F1500BC50D7FA83A2CF974AA70317E6260250B5B6C9072B00AC12A4AEBF5A + 7F407E003D01990A9C38698A0401A3C80F5820C415006E16F500F65B8B3F7965 + BC0044597EB53E9A7BCF398EFF7F7B6F011ED5B5B67F732A5490E2EE1E42DC89 + 42844080244008EE04777777286EC529142B5677A02D9452A5764EE59CF69CBE + FF23EDA90B2DB45DDF7DAF99B567CD9EBD27139A94F7E39D7D5DF735D14932D9 + F7EF79D65ACF7A166F6215E9690ADE986A9BADAA9EE3D7D2C03412CDA73200A6 + EBFC988AF0CA20FC7E75F6C0EF4DBB7DDD62FBFF97C86F95015097DF7ADB303F + B5EBE459E3F57FF891472400A2A2A20C000C1C38D4DEFC1A0094F9A36393FD00 + 28EE2B2BB77B482718DE4A7DFB0FF188FE2B57DD2B6B03B81FE0B1C79E101B37 + 6DF1C80074F353DC10B46BD72E39FE2700D4729EDA10A400B05102E015DB325D + 1A5135BE54B5F5EADC3D758417A576F9A9D25EFD734AEA1C002B799BD1BF9EB5 + 7D6F91FF7AA2FEEF81CFEF19F7FB0225657E6ACFE9E70D383DFEF8131200EC0F + 81DB4EF4E8D1530C0000BC999FE210400740546C62FF1BED999BEEEAD8B99BA0 + 3A99D4B3577F8FE84F00302B603930AB01391FA003C06C7E8AFB0176EEDC2901 + C071B62AB59529FA879F48006C740260D39133F2E356ADB73849C71B9C8F7A6B + 6EBB8C417D9FD5C78B62B6DF9B721766B6A218ECF7447EBBE86FD7EDD797B1BF + 1AFF2BE900609F409501B03D384BC215005AB60C941B82BC999FF35089C9E986 + F96506109DE42F072EEEAB63A7AE4241C02CB3F929BEBDCB590EBC6DFB0EB91D + D8CEFC13264E11C121A17247A002C09B6F5E363280BFFCF553C3FC0A00BE9402 + EB2A6C838F59040CA3B7AF4779FF9EA8AF227F61E37D7DB871BD91BF3867FC7D + 1DF79BA1B4E7D4F3060078F6A302D4A54BAF48000C1A34482E03120063C74DF0 + 6AFEECDCEE6E00888AF103A044AE2C00C04E06009CE65FB1728D7C6439308F7D + DABD679F9831738EADF925008243C4F2E5CB650D0001C059742303F8E0133700 + 6C3E7AC6F89CB7469CD7233DFAFB12ED8BB2A1A6A851BFA422BF5DADFFEF89FC + DEC6FD7AF4A7769D386B989F5219C08BE7CF4B008C1A354A02A041838662EC58 + 0700ECCCAF00A0A27F544C1201B0E746FBE5A6BBDA77CC3DC335D72C5D4E002C + 5ABCCC2DFA2B0030F29F3AFD90D8B367BF98357BAEADF9A9888828317FFE7C03 + 002C07564B73FFFEEC732DFA3B00C04D4276853DBE6600DEB615FB3A9E2FAC09 + 6861EBF9BE960EFF9191BF38C6FD6648E9503AF0C88B86F9A9CBEFFCD980920E + 0056034E9932CD23FAEBE6E74A54DBB40E46F49700884AF4970317F7A50060A5 + 59B3E7BB995F69EBB6FB6439F05E6E09360140373F150E00704310B7042B00E8 + C537CAFC0A009C17B06AC4A1CBAE694761EDBBAD0ECA502AEA16DAE28CFA7F64 + E4B7DBE96737EEF735FA33D273ED5F07C0F3175F334E44E2DAFF92254B0C00CC + 9E3DC73EFA3B97A55D0048F203A0A4AEF61D72CFF024162BCD9A3DCF12005BB6 + 3A00F0C0A1237247A09DF9A9B0F0483172E44803009C10D223FBC623EE00E0BC + 405132005FC521805D44F735CA1725E217B661C897C9C73F32F217362CF116F9 + 951E39F38A617E1EFCC2FD000A4E9B376F961020006EBDF556316BD66C5BF3EB + 0030CC1F9D2422A2123EBED17EB9E9AECC0E39F3EC003066DC2437F32F5FB15A + 3EB23720F7031C3E7C54CC9BBFD09804349B7FFC84C922A54DAADC10A400C0A5 + 407D63CD81472F1810D87CF4AC38FFFA5F6C23BF9E39D8650676DF5B94CD32BE + 36CEB05BCFF7B6A6EF2DEAD344458DFCBE74F5296C979FAF157F2AF25B6500D4 + A3675E36CC4F3DF9FC2523036039F0DAB56B8DF6E04B962EB51CF7676B8569DC + 10A4CC1F199D080024FACB818BFB2200F8425B8927052B00D0FC4A3C2EECF091 + A3B224981B8208002BF353ED32B3E40121EC09400050FAB21CBB016F74467F02 + E0DCABF61B828A2A7DECFF7BA2BDAF637C5FB709DB6D1DF625E2FF9191DF0E56 + 56D15F6E8042C457E6A71E3DFB8A01AA03070E4800A86A404E0C7B33BF0440FB + 6C3F004AFACAC8EC3CAF5DFB1CA16406801EFD95D81C9400501B82ECA2BF0300 + 1D444E4E8E1B00F4C29B234FBE2C97FF1400CE5C7AC7A7C69B7A56E02D5B5063 + 7F5F237D716E97F5658CEFCD504589FA85457E5FD7FA7D1DF39BC7FF147700EA + 0038FDCC45A38DFAE1C387DD00306EDC38AFE6E7F160ED0000DDFC1802889098 + E40637DA3337D595999993CC17DA4ABDFB0E7233FFB2E5ABA4B84B90FB01E411 + 612B56790040999F1A327484DC10C4A6200A0034849A9C7BF48537DD00F0F88B + 973D36FBF8BA39C8DB96DFA274E2B9DE59FDA2161615759CEF6B479FDF13F975 + A0E840A08969767EDC0E586FBDFB17EDD8F7A7C5038F9E37A0C53A1002203838 + 5802A07BF77CD1AB777F5BF3B31A35AB5337697E1D00A19109FE72E0E2BCD232 + 3B26230B101999D91EE2294156006035205B8211002B56AE7603806E7E6ADCF8 + 49F280100500F6CAFBE0830F8D0CE0B997DF710300F7035895E8FA9215588966 + 2C8A718A2BE25F6FD42F89C8AFA2B81A8F53EA9C404A1D0AEA4DEA6B555B7273 + F45752E6A7F69C3A67FC3CFEFFD7AD5B27DAB76F6F00A06FBF41B6E657D2CD1F + 1EE90740B15F2E00788A00309B7FE9B29562F59AB5720990ADC1D6AEDB60CC01 + 98CDAF00C0FD00478E1C3100F0D7BFBA3200EE0750006087A0634FBFE253E4F7 + 2513D01B7E147506BFA811BF38A3BEB7C84FF0E8503017EC989B88D2B0AA31A9 + 9D8A627EB5DBD20E5ACAFCD4FE875F343E7EEEF9E7DD00C03323AC0060DE93E2 + 0040820B00E1F1FEFD00C57DB1FF9A439D3DA40380E6A79815B00A904784717B + 300160677E2A2222429E11A700F0DAEBAF1B8536172FBFEF0000CC4FED7DE8BC + ED461D5FA5A23FCDFE7BA3BDAF1364BF27EA334A2B23EB51553721CF43304B9D + 18AC8B86E6F3F039F91CC56D7E8A11DD1CF995B61E7DCE71EAF3C167A45406F0 + E28BE72500BA74E92201D02220408C1C35D63DFA5B6C4AE38E4065FEF0C87800 + A0B5BF1CB8B8AFB48C4E42C9050387CCD19FE2DB2C072600B823D00A00CAFC14 + CB81B923904B8004006F2C9501BCF7D1DF65EAAF00C02CA0B0925E5F5512D1DE + 97357CD57E5C1DD6A1CCCDF7F528CFC848D3B23CDACAE0DE64657E254EF2115E + FC99BE9A9FFD0B7C313FC56CC36EC8B2EFA1170CF3536AE8C2FD0004C0D8B163 + 1D00681120468C1CE3D5FCDC8FC21D81CAFC61117E0094C89596D151B8D4C94D + 66F32F59BA42BECFE6A00400AB02D911C8CEFC545050B0D8B2658B04008FCA66 + 06A026E5DEFECB5FDD00B0F5C1B33E6FC7F59605F0F3BE8EE17D89F6FA0CBA8A + 761C472B33D178EA20512BA9138274F3D0C8C56D7E75F4B8FA3DAD8CCF7666CA + F0EC5AA4CE6C6067A443870EC9CFB1490AFF5FFA51654AFCBBADA23F7F2EC7FD + 3A005406F0CA2BAF8AF5EBD71B00A850A182183376BCE5B85F99DF0A00611171 + FEFD00C57DB54DEF782635BDA3B0D2D469B33C00C0471AFFF4430F8B9DC804A6 + 4D9F656B7EAA55AB60B170E14203003C3A4B2DD77DF4F1A70600B63801F0F74F + FFE9D3E61EABEDBF4AEAD010BBE8AE4769CA1CE955D71F9AC14EDE0C6F657E8A + A663F457EDC78A0A80C2CC4FA923C4ED32007552911A5AB09D19FF37343D9BB7 + F091E2FE0D364A3103401D97CEE86ECE004E3DFBB2617E1EFCC2DA0035594900 + F0A018DC72E2EEBBCBE0DE9AEED5FC140F097599BFB5080D8BF3970317F7D536 + BDC3199EC4E2923B0074F32BF1A8F0E3C74F4A00F090503B008C1D3751848545 + 88050B161800E07E00BD108700D8A201E0EDF7FFE6F3F65C9509E886A7C15444 + E24DAE0C4233F2F41E2BD1886A2CEFD8C26A6FFCEB35BF92328B37F3D3A0EA6D + 46E873E7CEC9B7F9C8A3C4D5716266F3536AA28EF30956693F01C0A1181FF93E + 8F70A7E10902FE7F687A8A479CFB9A01A8487FFA9997DC0E7D7DFEA5D78C5507 + 02802A250170B7048037F353C96D32FD0028E9AB4D5A87336DD3B28495264C9A + E606001E18C2478EFD1F7CF084D8BB77BFDC126C677E2A140098316386BC9179 + 83F146D397EA94F91500DEFBF0EF5E1B83307AAB345A95B2AA4D2E946AF1A5CB + CEF8BA68188EE1098292323FA566F4BD45FA13274E4883F2ED871E7A481A9F69 + 3ACDCFF7F91A5A995F0D01980130EA5A01401D21CE475FC7FDBAF83AD92D55B2 + FA4F3FF4F5854B978D0C60DFBEFD62C3860D4639F08C19330B0540524A3B97F9 + C3A9B8376EB45F6EBA2BA56D87796D523BC8CD17EECA924785EBD15F0160C3C6 + CD1200EC0F387BCE7C5BF3533C2188CD2098521200CF20B2E8CB723B4EBEE006 + 80D7DFFDD0B66C575FFA52D2CD4FD16445353FA51A7DF2F98A627EFE0C3ED294 + AC78E4FB8CA8CAA866002843A8A3BAAD44C3737CCEB7F99C7C7E02805914D374 + 7582B0558AAF32000E057EEF8C7F61D15FAD08A80CE0B9F3AFBA01E0A1672F1A + 2DD50F1C38280150B972650980458B1679353FB7A4F3BE744EFE498584C5F9CB + 818BFB5200B0D260004037BF127B037237202B02E7CC9DEF9101E80048CF682F + 3704290030FDD43380634FBDA201E09C38F7CABB96E5BD048055E9AA9E01F0FD + EB313F4513D86500AA8A91519906E4DF4283325253342945D3D3A8FC3BF93641 + 600600331766003485B72C40A5FD858DF9CDA221D5E4A56A7EEACDF8BAA9F5D7 + 541519A9B17E61DB91298EF9F5539F1F3BEB021E27180980A64D9B4A004C9D3A + CDD6FC0A009C88D6A2BF1F002571A5B4CD9C97D2B6BD30AB4D6A7BD1BBCF204B + 00A872E04380C0FC058BDC00A09B9F4A4BCF941B82B8235001409F983BF2D4CB + 0EF31F3B2701F0DCCB6FBB65082AFAF36BEDCCAF00C02865657E46624E3EAA09 + 2E7E8C86658DBAFA1A9A4D4D0A9A01C07132A3304DA9DE26004E9F3E2D8DAE4E + 03E6DB6A428D6F732CAF9B9F3F83BF370D61B7BE5FD4493F73945745412A0BD0 + 23B45EC557D8EE3EBBB57EABC8AFC431BF323F75FCA90B4606C0D75B0740D7AE + DDE471F476E65700D0A3BF544872851BED999BEA4A49C94CB6020095DBB5A79B + F9D925885A73EF3A09006E0BE6E71500CCE65700484E4E36004031D29A330005 + 80672EBEEDB1FD5749373F4DA7D6BD79F3D3F48CD27C6414DEBE9DA7181D955F + C7284D001C3B764CDE88343CC7D3EAF7E1FB34BA5AA3370380A5AC8CFA0400A5 + 527D95EE1736EED727FC0818161F115845313F4DA48CA60350455F4668BB0225 + BB7DFD859525EB91FFE2EBEFC808CF713DC7FAD4B1275F12FB1E7E4156FD714B + B76E7EEAFE475E34328927004602A04D1B79CC97E8D2A5ABE8D9BBBFADF92956 + A4EAD13F383456B40A8DF5970317E7450070B6D54A3C33D00C80858B96CA6DC2 + FBF61F00004E88A5CB1C00B032FF98B113A47840880E00DEB82A03781686D701 + 70ECE94B9625BCFA1080118AC76F3102F3B918E1698CE3C78F4B53D2F47CFB81 + 071E30A23D1FF9F50A060400C55509657475C317E7A49F6E7E755C9812FF0E95 + 8AEB515AD5EF9BB39CA2ECE8B3DBD9A7477E9EE2CB5D7C143BFA500F3E715EEC + 3E79561EF9BDF9E8736EF5FD4AFA5ABF3EE6D7CD4FED7FE80563DF01FF071B37 + 6E141D3A749000C8C868E70100ABDE947AF4F703A004AE042F00C86C9FE311FD + 0900550EFCE0F1137247A0150094F9296E085200E0F212238A2ADA398B31BF02 + C0B6E3E7C4F1675EB1DDDCA36E7C9A99519E52E92FCDCC3D072AE557C792F37D + 9ADC6EECAF9B5DD5E1F386FD3D6BFD7AD51CC5DF9B60B9DECD4756454B56C54B + 8CE86FBFFBBE235A434FBEF09A3CA78FDD7AD8B57737B4FDC1336E2DBCF54EBE + 7A471F7D67DFF5989FE73DEC3871CE801D5F4F1D00CD9B3717FD070EF16A7EB6 + A6D3CD4F05854667DF68CFDC7417975BEC64363FC5E2A0DDBBF78A93A74ECB33 + 04CD00D0CD4F7143D0C183070D003002A9A29B672FBE2501B0ED4107008E3D75 + C9A3804765010407CDA4AADD2835CEE5045D5126FDCCE6A761F59D77848A3238 + A3B7028D5D2A7EBDBBF5BC75EC517AFB9DF7C40B2FBF21F5E4F3AFC8D378A9BD + 88D23B8E9F113B8F9F15CBF73E21A58EE9D68FEB36CB57F39B015014F32B2918 + F2FF4300B017402927000A868DF46A7E8AAB003A00207F3970715F89C9194257 + 6100E0B0E0BE1DBBE48E404E08EA00309B9F0A0A0E911B82989A13003492CA00 + DE79FF63B9FCA70040D96D0556CB746611284535BF5A0757CB66BE360CF1B63F + BFA85B8E2FBEFEAED4F397DE12A79FBD24C57DF4F7C1D43B4E9C85599F104B76 + 3D2696EE76D7B23D8F1B52C6B732BF15008ADBFC6600E8E6A714DC58024E008C + 1F3F5E02A05AB56A6268C1084B00E8CD69D9185433BF1F0025719901A08BD580 + BAF9172C5C22DFDFBAF53E0900EE08E476603BF38F1E335EEE07D001F0EAABAF + 1919C0E5F73E7203C0F6E3CFDB6ED4618A6E152969649A5A456B55C1A666A0AD + 26CDF43DF645E9B65B985E7EFD2D44EA37C50B97DE94B3E0C79FBC200E3DFAA2 + D876F459A935FB9F100B773C2216ED7CD44D8B77B944D32BF96A7E5FA2BF37F3 + 7B4BFDAFD7FC6CF7F6F2ABAF1B7D07366DDA640080D580E3C64FF46A7E6B00C4 + ACBDD17EB9E9AE84C4F433ACBBB6D28489533D00B070E152B179CB36710A00E0 + BE00EE08B40200CD4FB56A152456AE5C2967E91D0078D528E33567000480B76D + BE7C5B1F167072B0282DBFAE47EFFCF903235A3F7AF65571EA9997A5B8FD752B + 4CBDE181A7C5FCED0F1B5A709FBB68785D37A3F939DE3FF0C879793EC063E75E + 158F9E7B459C79E90DF1EE7BAE894C02802AE504C08489930A0500FB02EA0008 + 0A8EF6970317F755180074F33B00B0449603B32B1087023C23D0CEFC8E0C2044 + 6E085200E0A49CDA3EFBF127FF7000E0B80B0097DFFBD063838E55464000F039 + 8A1AA5A97770633E8F3135F5F8D94BE2E813E7C53168FBB167C5C6434F8B4DD0 + 9CADA7A5E66E7BC8D0BCEDEED28D5F9CE63703E046997FEFE9E7A50E3CFC8278 + E8998B52ACF863DFFF0B975E37B22CBDCB902EBDE8E8BEFB7618006049B01900 + 66F3B33B757C629ACBFC21317E0094C4D53A31ED0C5F682BF51B30D4CDFCF317 + 2C968FEBD66F16478F1D9700E01981DE00101212666C0822003821A46FE8D1C7 + FFF79D785EBCFBC1C73E37FE2008F4B1F785D7DE913A73F14DF1E0532F49719B + AA32F57C9876E6E69362D6E6536E9ABDC525657CB3F9CD0028AAF9CD00B851E6 + 5F7F88C67E41EA24329947CEBE2275F1F5B7A5F4537D8A3214B29BD454EFEFDD + BBD71802503C34C69BF9AD0110E3DF0F50DC57EB84B6F35A27A40A255F00C072 + 600280EDC1A6CF98656B7E2A1800983469921B00F4261A46FA0FF31300CC00F4 + E61B7FFEE06FB277C0DB7FFE489CBBF48E14EB074E9F795D9A7AD18E87C5F48D + 27DC3463D34937D1F4BA4ADAFC85457FDDFCDE52FFA2987FD3E167E4197DD4A9 + A71DEBFA5C3570ACF5BF262EBF65DFCDC7BCB3CF4A6A05448FFA148BA15821C9 + 42AB458B16E37E592C060E1C245B80B5699B2A6EB9E51629467DB519889A3367 + 8EA5F9AD0020CDEFD48DF6CB4D779901A0AB5FFF216EE657BA77ED7A71F8F031 + 71FF818362E6ACB9C61C80D9FCA3468F13D1317172439002009703F54D3E871E + BFE80600B60B3FF2E425B1E3D40B52BB4EBD6868F7E9F362F743E7C51E885F3B + 6DC3F11231BFB7D4DF6CFEA2A6FE4535FFAE9367A5EE471ACE75FD87CE5C122F + 5C7A4BAEF5BFF6D67B45AAECD32B070BABED7FEEB93372D876F4E831B16AD56A + A90103078A9CDC5CD12E3353942E5D5AEAF6DB6F3774DB6DB7B9892701290028 + 08947202A057AFDE5ECD4F71539A1F00257CC5B66E3B8FDD57ACC4651A2B00F0 + E0D003071E901D82798C18016036BF02406A5A861B0028BD3D16BB01D3FC0A00 + DC212805F3EFD4CCEF00C08B120014C7AC7FB4F98B6BDCBF62EFE362FBB1E7C4 + 7D0F3E278E3CFEA238F1D4057102519B6BFD8CD8AFBDF976914FE7F1A59E9F47 + B4B3488AE20EBD65CB9689A5CB968BEEF93D44E7CED9222626569EDF4771A28E + D2DFA6EEBAEB2EA93BEFBCD3D01D77DC61004141C10A047A16909D9D23BAF7E8 + 636B7E0500DDFC544848887F3F40715EB10929C97600608AA69B7FDEFC45F271 + E5CA35E27E989F7B02B821C82EFA2B00F0801056E62900E819C083CFBCE202C0 + 498708009A7FA7D9FC1A0068AEFF6DE6671ACE6A3B8A1D72B8B6FFCCF9D7C5C5 + D7DE917AFF838F6C5B8FA9285E58835173B457F51172B315B46FDF3ED9877FF9 + F215222FAFBB6CC3DDB2654B71CF3DF748B1259792FA9895CA972F6FA85CB972 + 5265CB967503841906048182810E012B0010383A00AC8EA8E3AE543300FCE5C0 + C57CC5C6A624B303AB95D81D78FE82254EF33B003077DE22D93074EFBE03E230 + 8F085BB4D40300CAFC545EF71EF280101D00EFBDF767E3B8AB47CFBD6E447F05 + 809D275F7407C0697700F063C5617E6FE37EDDF89B8F3C23B640FB4E9F130F3E + 795EEAD9F3AF215ABF212EBE7AD96B6DBED5C93B766F9BC5DA06965153ECA8B3 + 72D52A317DFA0CD12D2F4F2A28284854A952C550D5AA557D96FA1EEED1A72A55 + AA64A862C58A523A2874182810E859415101D0B46933B91FC0CEFC3CA18A1B82 + FC0028E18B0088894B11941504F4E8EF00C042B90968E7AE3D1200AC13D001A0 + 9B5F89FB01B8A38EE6E7D659CE1AAB0CE0ECA5771CE6B703C0697700EC79C871 + A8A89DF9CD00B033FFC21D0FC3D8CF4A1D7EFCBC38F9CC45B9CBED25446AEAED + F7DEFF5D2DC3BDE992DC527C46BE16DBB66D97557273E6CEC5B8B8975483060D + 45CD9A350DD5AA554BAA76EDDA1EAA53A78E21FDE3EAEBD5F7AAE7E1638D1A35 + A4AA57AF2EABF2742028289841A0206097095C0F00060D2EB004807E4C9D0700 + 5A45FA0150DC97028095CCD19F0058BC64856C0F7EE4E883B26B909A03B0323F + 7BC0C7C7C7CB3DF20A008C6EAAD086FB017400C8F4FFA47BF4DF6598FFBC0400 + 67BDED00B07ADFE362FDC1A7A48E627C4DF1F4DA732FBD2ECE5D7CDDED645C6F + 32F71DF025C2B3073E331D360EE191D8D4D8B1E3A4A9BB76ED2AEAD6AD2BEAD5 + AB67A87EFDFA307B03430D1B36946AD4A85191A4BE8FCFC1E7D47F067FA61912 + 3A0874082810E819811D00F42CE07A00C0DF8B00F0667E4B000447FBCB818BFB + 62C9A5590A00ECFCAB477F8A51FFBE1DBBC5C993A7C5AAD5F74A00D8999F8A8A + 8A96EBC00A00972FBF656400972EBFEF31014800EC3201E0D499D7A59EBEF096 + 1C5F1F7BF28238F3D29BE2FCAB6F8B572EBF5B68D4B58BE4BE44F6175E78519C + 3973569C3A755A9E774F151414880103068ACCCC4CC3888D1B37968760526C7E + D1AC5933296E7E69D1A2855440404091A4BE8FCF41A9E7E4F32BF1E7F1672B18 + 28102818E810284900E81382FACA80BE1AA000C0EF1B3E7C9457F3536C0DAE99 + DF0F8092B8AC00A03466EC44B7E83F67EE4299156CDEB25D0260CD9A75960050 + E6A75A05058B3D7BF64800A85659AE52DB8FE42EC027CFBF299EBBF8B678E1D5 + 77C4E5F73E106FBDF7A178FFA38F2D8FCFF275CCED4D9C15E732D7934F3E0538 + EDC3187B83D4D0A105B28B515656969B7969464EA65181818148455BC931380F + BDA4424343BD2A2C2CCC90FEF190901029F53C149F97CAC8C8006406C89FA903 + C10C823F1A00E67980EB01C05D77DD2DC68C19E715003CA896E7036AE6F703A0 + 24AEA8E8C433ACBBF654B2180D00E8E69F3377817C5F96030300EBD66F921D81 + ECCC2F01D02A48028033D5CC005E7FE30DAFA7F55AB505536271506107799C3D + 7B4EB6E43A74E8B0D8BA759B58B76EBD183264A834774A4A8A8781694065CEF0 + F07079A459646424329728111D1D2D151313E3A6D8D85837C5C5C5B9BDAFBE4E + 7D3FC5E7A33A75EA24860D1B26B308762FDAB66D1B7EBF210610F83B2D5FBE5C + A88B402A6900E873017F0400F8391D0056E6B704405094BF1CB8B8AFC8283B00 + 2489C1434718A9BF0B000BC5860D9B6506C00D413C25D81B00025A068A254B96 + 1800387FE182DB365A6F52515FEEB67BF965696C1A66C3C68D62E1C24562F0E0 + 21D2DC34988AB46603D38834287B13703E82939214BB1529B175992E82C22CF5 + 39AE6AA8478ADFAF1EC78C1923468F1E2D8F44DBB973A76C54C2C7BE7DFBCADF + E5BEFBEE137617ABE3140054A6F2EDB7DFCA9E052A0B300F07EC00A0CF071427 + 00AC5602AE0700D4C489936C537F05000E43B5E8EF0740495C04803A8FDDAC9E + BD06B8997FF61C0700D80BE0D8B1E3C68E403BF3F31CB8A0E050B178F1620900 + C74114178C08CF88CD2DC23437BBC752F7AE5D2BCB87A74C9902A3267A185999 + 58198FE66CDBB6AD484D4D1569696952E9E9E986DAB56B678863765DFAE79498 + 7AAB478ACFC1E7E4F3F3E7B0B71DA5A0A083405DDF7DF79DD10E8C6FF36FD501 + C02C80A062C64168715F0397FD0800FE5EBC78AC1AE71BF42CE07A01A0206005 + 00F36A80BE34589200983E7DBA57F353AC48F503A084AFF0C884798EB3D85D72 + 01A0BF0700F8B8E65E96031F15DBB6EF946704DA995F02202804E9F750B92B70 + F6ECD9F21FCFD362692C9A46999986A2B168347E4E199175E56C27C5713945F3 + 509D3B7796CACECE96C54666E91FE7DB94FA1E8ACFD1B16347293E2F7F067F96 + 0E072B002808D80180EDCA986D50041633005E3A003804D0014030F2220056AC + 5821DFEED6AD9B1C4E300B603670A30160B514682E085200B8F3CEBB24A8E3E3 + 13C4A04183E56AC8AC59B3C5EEDD7BC46E0C0777ECD821E6CD9B2F4D6E677E8A + 05696E00806EB45F6EBACB0180046125AED3EAE6E761207C5CBD7A2DA2F551D9 + 1F902B0566F3EB00680500D040F9F9F9F29C009606F7E9D34774EFDE5D822037 + 37578A4B65545E5E9E143F4FF5E8D1C3527C3ECAFC3EBF87DF4F03517C4EF573 + 140CBC014041C00A007A16601E1610008CF6EC7A44F38F1A354A8AC31705001A + DF0A001CD62800302BB2BA78CA527103C0AA1EA030F347464689A4E414D111AF + DFF8F113A4366EDA248DFDE8A38F593647353745E5C71E7FFC099193DBDD8080 + D9FC14B7A5FB0150C21701E03889D5533C2ADC65FE0562D66C070096AF6039F0 + 0362CFDEFD7247A0390350E6A7DAB44D97C6A13109004E780D1E3C58CE70534C + 6FFBF5EB271F29F531F3C7F936C7D21401D2BB776FA378A667CF9E0604140014 + 04FE4800B02391F9221498FDE800983C79B201008A8660A4E7CFE6C51513F53A + F067F2739C00F50500E69A001D0076E6A7F11B366C24529D43A861C346C831FA + 8A95ABC49E3D7BE54A8995B1093B656ACED570A8C32DDBFC7D29BBEB871F7E90 + DF9BDB35DFD2F8142B01D9A0D60F8012BE422313927910A395D2333AB9457F07 + 00E6CBE6A0DC0EBC77EFFDF28C401D00BAF9A9943669D230342301C0D96F5D1C + 1E100A0A0C14B3047EAD1912BE0240CF028A0B00E679006F0060E4E7EFAB5607 + D48A8002809A1FA08908085E070E1C90DD9378F1386DAE5470C582E2C4E2D2A5 + 4BE57C88BE12A0006036BF79F28FBF5FBBCCF6F2F5983C65AA9802D1D4144B8D + 8B6AEC5F7EF9C5D6DCEAE2D7A8AF57DD9C7471D3524E97EED2E856E6B7024060 + 5094BF1AB0B82F02C07110A3A7B814A89B5F69E9D29532FADF7FE001316FFE42 + 030066F30F1FE100004DC29B8F662E0A001404140014048A0B000A028501C06A + 22D00A001CFFF3E2F857CD01E800A081550ACC713F53FF55AB56C9DF9BAB18BC + 542D0001A06A0F38FE372FFF31EAF3EB1C7F432779EA2E8FDD5ABD7A8D3C90F3 + D8B1072DA3F6EF3536AF9F7FFE597EFD575F7D65189A9B93F8BC4CF7BD9D95A0 + AB779FFE1E0050E6A7784A951F00257C8586C626AB6398289EC9A6CB1D00F3C4 + CC59F364C7E05DBBF68A071E382C770C120066F33B00301A861D200D42131637 + 001404740098E701EC00A06701C505002E77320BF006004A1FFFEBEBFF2AEA07 + 04B41419ED32F1FBE6CAFA059EA83B1DDABFFF7E2982C6CED8AC6A54AB2CCAD8 + 34ACAF17D3737E0F4F6556E656CFCDCCC057737B13E1376DDA340F00E8E657D2 + CDEF0740095D3A00CC329B9F5AB070A9D87EDF2E7950E8A2454B2D0140F32B71 + A69F06A491AD00A02070A301A0AF0414B614680500FE9DCAFCCAF8343CEB1268 + 7A1A3E3535CDF9FB75C76B3A5BCE8E6FDF7E9FB8FFFE03E2C1E3C74BCCD8BCCC + 29399F539F982B4EF144A03D18626CDAB4594C9C34590C1B3E421E18DB3A3E49 + 54AE5C0DA06BE506002BF3730ECA0C8096AD22FDD580C57D1907305A68C4C8B1 + 1200CAFC3366CE95DB84B904C8D660CB96AFF400806E7E8A86A0F968E0920480 + 7922D00E00E679005F00A0CCAF8CAF8A8874C3F7EEDD4776BB198531FB9CB9F3 + C4B265CB65F30DEAF9E75F7033083745D1784C9D95B19952D3A08CC245B9F4F1 + B63925E758BBB8CDCD822C35873069F21468AA6897990575104D9BB514B5EAD4 + 77A936554FD4A46A3954B94A75D1A87113317CF848DBE84FF353C1A13186F9FD + 0028A1CB1B00868F18AB45FFB912002C07E6F900C74F9C92C785E900309B7FD8 + F0D1486F43A4E168609AFD7F130094F9D5FABF6E788AD19E0D2CFAF543F6326C + 18E0B740CC9FBF40AEEF1F3CF8803871E26489199B974AC9F5F17671A7E46671 + 0E819A3F7FA19832659AE896D70360EC2822226344BDFA8D44DD7A0ED5A9D750 + D4A9EB52ED3A0DA468FCEA356A894A95AB8AB2E5CACBBA805B6FBD0DE6AF2B61 + 50A3661DD1B84953030076E6A73817E50740095F41A1B1674CA7B0181A3C6484 + 5BF4A79811B01CF8F8F193F2C0506E0756937E66F30F1B3E4AA67B8CB434AEAF + 00D05702AE170034BF32BE1EF155A4E741952C251E849F396BD62CD9D892FDEF + 1E78E0903C60D46E2D5B199BE3E4EB35362F15B5D5785B1D80521229B9D2830F + 1E17FBF6EF17AB56AF1153A7CDC06B3C586475CC9693B50D1B35130D1A3695AA + 4F35682255AF4163185FA991A1BAF51B4A10D0D095AB5413E5EFA928EEBABB8C + B895158010572C3874E2FF8D2B2023478E144D9A3697D9006E3B316AD468DBD4 + DF1600FE6AC0E2BFBC01A05BF7DE6ED19FCB7E7C7FEDBA4D1200EBD66D943B02 + EDCC4FB56C1928232D0D4BA35F0F00F4A540657E1ADF6C78467B1A9ECF331CE3 + 4E2EA92D59BA542C59B25416AB7093D0134F3CE993B1BDAD657BBBAC527235DE + 2E89945CE9B1C71E9793845BB76D17D3A6CF941B6E3A75CE857260BC1688BA2D + 44A326CD1D6AEC104DAF4B0780EBED26060C6AD5AE2BAA54AD2EEEA95049DC0D + B3AB7DFF5CAD6006C5FF119741D9069CE701F2F5577B24088069D3A64BA09492 + FB01267A35BF1F007FD0E5150079BDDDA2FFF4190E00DC7BEF060980CD9BB7C9 + 33023DCDEF02408B8040197119AD694C6F00A0F1F5A8CF68AF47791A7F8CF3A6 + 628ABA6CF90AB9EBEFF0E123D061C30C566BD9BFD7D8BC8A6B09ACA83A77EE9C + 9C28A466CC9885FFC52C80AEABC88642C3A244B3E62DA100F9D894C258BC49D3 + 00A75A88264D1C0030204000F0EDC6D630A807B33365AF58B90A227B05B98557 + 999D3B3C9949F17F45A34F9D3A55EEDD608113F771D0D813264CB00540706884 + B8FDF6D2F2F3DECC9F96D1516E08D20110D02AD20F80E2BEB8CFDADC7D45293B + 37DF88FE343FC5B799FA1F3A74446CB20580C3FC05C338040896636B1A98E6D6 + C7F92ABA33B2F326993061A22C54E1FAF8CA95ABC4912347A5B87FDFCED8D7B3 + 966D759997C0F494BCA4C6DB4A6AB270C9D265188ECC117DFAF617B95DBB89C4 + A43622A06590080808122DF0D82240A995684EB570A859F34027041CE6578F0E + 0588A6060C024463231B70C1A021C474BE4C9972A274E93B60F4DB6559302739 + F97FA291B98F63B65CB9982566CE9C29DFE7729E1D0008071D00CC0CA64D7700 + A0F41D77CAA62A599DBA589ADF160081915FDD68BFDC74973700A4B46DEF16FD + 9596AF5C230E1E3C24B66C756C09B632BF024040CB5672671F23F9E2C54B64B1 + CA8E1D3B65DFF9D30F3D6498A0A48CCDCB6E09AC245372A513274F8A03071FC0 + 7069839833671E5EA791C8ACF2312CEA2C5A058541A1A2557088DC37C1B7035B + 5121A26520152C15D032588280E6978F784D09010306120481A2B9044120B280 + 403700D0E475EA3610D5AAD71455305E2F5BB69C9C9CE3A3020027E858554893 + B37C995A20273DE78B79F3E6C9137D7400707F425101C0C6A69191B1060072BB + E4DB9ADF0C8096AD22A56EB45F6EBACB170028E34F9B3E5B3EB21C9800D8B96B + AF3C23D0CEFC544A9B741117D7DA88E21467CB19698BBA966DBE544A6EB50456 + 9229B912FB001E7CE001B163E72E18649E2CB5EDDEA397C8CFEF89D43C528420 + DA51C1F2D1F17E7048B8A1A0E07098DF0901A72400607E05021D060E10046BD9 + 809609C0F40D315EAF87485EB55A0D51B16265390B5FFA0E4744AF5AB59A5CD5 + 60064633729B369B8FB0B78202006B19F8F1458B16F904006601DE00C034DF0C + 80B4F44C51AEDC3D18D6F5921B82ECCC4F25A564F80150D217DB2DDB01203A36 + C50300D3F0C86A409603B32270DAB4997212D0CAFC05C346CA89284ED429D330 + FAFA72DD882530F771F7F3E2814387A4E6CD5F20E71C7AF6EA239590D8468447 + C6381411ED549408938A1661E1D122343C4A42404A9A3F528280C637C0E08440 + 1020A02441D0CA3A1360946F0093D7ADD75046F34A95AA8872E5EF916374B50F + 9F05485CCAA411695EEE31606B718AE706B061E99A356B9089AD969FE370ABDF + 8041121C8501808D4BCC006016E00D00CC028C2100BE5601202D2D5DE475EF65 + 6B7E1D00CAFC522DA3426FB4676EAACB1B002837F33BB570F132697E6E09E6E7 + 1C1980A7F9A98E9D72E59A3A4DC5A86C4ECDFFA82530B30E1D3E2C5705B824B6 + 60E162DCAC13449F3EFD44FB0E1D01BE78111D43B51651D171EE8A8A13915044 + 54AC431A0894F95D6F0308610EC98CC02D2B08F700803124700280A97EE5CA55 + E5441C27CEA8EA356AC849554295936A3CE567C3860D723254B519DBBA75ABD1 + 5484ADC7F9790260DDBA756E00A0F9D983802B399CFCE3108025CD84801D0098 + 059801C02CC01700F06BB273BAC825C35400A057EF7EB6E6A71293D33D00D0C2 + 5F0E5CBC17EBABCDDB2E291D00D39C00983A6D9614CB8109001E11C672610500 + B3F987168C145DBAF640DA565A9A8E636E35FE2E49739F3EFD905C19D8BC652B + 6EE6A562E6ACD9A25FFF81304D4F119F902C5AC743AD93445CEB44A9D8383CC6 + F131412A868A85621C208822080C18B4968AC4DB941B082294DC01A032016601 + 2C87ED0DD02C5EB2541EA8C92DB7AC3D58BA7419B2ADD930E3049199992501D0 + 1219400C60C4DE8634F7FEFDFBE50940ECB4CC5E8BAAFD189B6CB0E1C8F50080 + 59C0A429D32400385450006016501400A82CC00A001C062800308362DD4004B2 + 256F00484DCF922704B9457F3F004AE6B20280D2C851E38DC84FF34F99E66817 + CE7260EE0864D72002C0CAFC4AA54ADD5E6CE6E65C025706588ABA64C9323973 + 3E70D010A9E494549194DC562426B59533E85402959802254BC5E36D42C00182 + 24A938C2202ED10584D60E18480848C5CBACC0050227009CE6774CC805CA25B7 + E62D5A3A0010EE00008D4F432F58B048B61967BF43363165B310CE85302BE226 + 22F6FFBB70E182DCECC3FE89A74F9F968060CA9C8821C7A64D9B3C00B07BF76E + 09016F00E0F7E900E030C00C000E6F080016F2E80050598019001C06D8018059 + 801D00F8B60240A3468DE5FFCCCEFC4A66000404468EBBD17EB9E92E6F001832 + 74A45BF49F3275A6EC14C4F6E03C2370C182C5B2125007806EFEA105232400F4 + 49403BB1669EAB03D4B2652BE43A3F0B5A860C1D263A6475126D53D345DBB6E9 + B2D108C50A36B9E518C6D79594EC0441B206024220C90582043308B48C2004E9 + B99A806BDAAC85A85FBFA1A80755AD565D54AA5C458EBD39EEE69299129739D9 + A874F6EC39723841006476E884A1C611F1F9E79F1B9D8DD910957F2B77C53DFD + F4D3C681227C7DF83ECD4FF17DEED7E7E708394267E4A8D1E2FEFBEFF70000B3 + 80DF0300AECE105665CA969311DF6A1EA02800601660570C3462E46851A56A0D + 098021430ABC9ADF0A00FE72E012B80A03C0542DFA1300B390F613003C2168C9 + D2157212D03AFA8FC0F73B00C0196036FEE45EF5F51B36CA8E33DCE6CA0E34DD + F37BCADD624A8C7A86D2DA89D4D40C8C19DB3994DA0E20C830202045106800E0 + 383D2CDC91761304494E10042052376AD444AA4A5576C3A92A55AE7C7971C71D + AE136EA80E1DB28C2624BCF995B91E79F451E7B9024F22A2BF2023360B75B849 + 86A66666D201C6DFB16397F8F2CB2FE56AC7BFFFFD6F3971F9E0830FCAE7A061 + 696236026101133F7EEAD429797A2F8F52E3F3B3912ADFE6C94A274E9C90D19F + B0EBDAAD9B7CDB0C009505580180C3001D001C06980140C0100034B9DD44A00E + 005F6A01CC006016306EDC44479151C58A00E6D04201101216EB3E046819EE07 + 40715FECB86A0780EEF97DDDA2FF648825C11B366E91DD81972E5BE50480A7F9 + 15006AD6AC27F7B673FD9B1B4B782333656E8174B9458B00E7A343CD9B07B8A9 + 71E326A27AF51A1EAA06554634E67AB67E64B5526E972EB2DA703186092A13E0 + 521897BE0E1E3C28CDC7B4FBE2C58B526FBEF9A64CC7F948B3322D67E71E76EC + E5D7B17B31BFEEA5975E92A9FAF9F3E7C58B2FBEE80600B602E7D89ECFF3C517 + 5FC8C8CFA69E8CDA8CC234250D49D371F28D9198A6A44169E093274F4AF33303 + E073123004CDF1E3C7E573D3EC841A0D65070082CA0A00FCF93A00F8B31500D6 + ACB95702A042C5CA4502C0F5D40270A99400C06D273FEECDFC6DD33A88D0F038 + 770004869FBCD17EB9E92ED658EB15573A0072BBF6748BFE93A7CC90CD40D91D + 985B827962B06308E099FAD3FC060060C69EBD7ACBE818D73A416EAFE5B15B8C + 9ABCE19F79E659C751D748839F7AEA69F1248CC0F4F8718846E3D8591DE3A58E + C9E6385AED95E76A0253EC4F3FFD54AE2AF0EB996EF3F3D9B95D0D00D0D49C84 + 54E7FE716292A705BDFDF6DB960060BAEE0D003429CDCA549DE6E7F77CF6D967 + B2E8889FA3C1683A4A8DAF9951D02034042BED580E4DA3D0C004135F033E3F7F + 1E01C4CC8099023FC72DB8ACC7F7060095051405001DB23ACB1D7C346A516A01 + 0A0380B91680DD8B58C7C01D82FC989DF953D33C0110101821025A86FBCB818B + FB320340574E971E2EF33B01C0F757AD5E2B01C07302B825D8CEFC0E00D411D9 + D939A27FFF81B202AE757CA2BC4958E177EDDA3571F5EA5559D473E5CA15F1E3 + 8F3FCA1A80EFBFFF5EF6CCFBE69B6FC4D75F7F2DEB01544ACDC8AA4CC6B17561 + 00E0B08300A853A7AE07003811A703E0F2E5CB450600A3FF9CB9F3E571636A53 + 113FC6253AA6DA14CDC4084A13D24C343E97F2B8518A7D06D41908FCBAA3478F + CA9FC59FCDDF85BF07874FCC24B6C1E0AC01A0318B0A00BB5A001D00DC9751D4 + 5A80A2022028245C16280D1C38C8ABF929B6A837CCEF0740C95C9C58B1034052 + 728634BF8AFE930800BCCD72E043878F623CBF591E136E67FE2143878BF0F068 + 09807EFD0748003003B002C04F3FFD546400707CED0B003A6777918D28D875B7 + 3000300BD001C028EC0D000730A498BF6091719A119F9326629A4FB3D144340C + 9B7B120C84002BF2B89B911B6B58A147F3B3FF1F7BFE31D27368C1DF83BF177F + 4FCE13A8B13F0140E315060035E4F006006601FC180150BD466D998D305329A9 + 6220CE052900B0894AA7CE5D2D537FA5D8B8363213551068D132C2BF1FA0B82F + 6F0048740260B206003E72ECCF65C0F51B378BB1E326D9987F84183CC40580C1 + 4386CA1B8D9378BE0280C5423A00D4D85A0780CA02BC01A09313002CDDE5D041 + 07008701850140CD17980140CD45F4DFB56B8F71EA3023384DA4D27F1A47CE80 + 8F18210D4543701314B731B33F01BB0CB17518F7D0B3A32F0DC7E18F32FF871F + 7E2801C025409ABE42854AD27CBE00C0975A00FE8EFDFA0F9263736EEB2DC962 + 20022035BD9D5C72B402806EFEB6A90E00E8E5C084C08DF6CB4D777903405CEB + B66ED17FD2E4E9F271C99215B21068F3D6ED62FC8429B6E6570088898915C386 + 0D9700A05252DA580280C380C200C02CC00A00CC02AC0040E312009C78B40300 + B3001D002AF5D601A0B2001D001CFF738B2E8F10A751291A90D19EE6A2E16820 + EE84E48A82DAFDC8E8CFEE44DC29C9125CF60C64D75F76FCE5841F7F8E32BF9A + 48E4CA017B1BB0E4976656F300BF1700FC9802007F17732DC0F51403F163FCFC + CC99B364EF433E4E9B86E031798A0440D972F78894366D45764E9EB5F99D0030 + EF08F4EF0728818BD555FA4CAB19027AF49F4800402C07E6F900F7EDD825CF08 + 340340999F4A4B6F2F828243DC00C023A5EC00C02C4007008701BE0240650166 + 00F41F3058AEEF73158000E030E07A01C02C4007C0C85163C4F1E3278C833D19 + 95D5F89FA6A3A11801D9B044B52A639722F61E64F467FACFAEC0CC00F87D9C50 + E4EFC4DF935905270599FED3ECACA1E750A1B88B8108003600494C4CF2A91848 + 550AAACFCFC1E7B895993D02C74D9828C68D9F88E1C43059F8C3F25F2EE9B2C6 + 82E5CFDC86AC00D03DBF97ADF9F9680580E0E0E88637DA3337D5650680597AF4 + 570098BF7089D8B1730F00B05B9E11C821803EEED7019095952D828282618231 + C506000E03BC018059801900ACBFE7D85B018059800E00A6DC3A00380CB00380 + CA0258DD4700709B33BF9F62575C828626A3F1281A9B10E0989F6936DB65D1FC + 6C28CAD6E06C5F466372CD9F3F8B20E14A077FB62BFA2F91D19FCF67550C4408 + D801A0B05A804993A61A5D8054F6422D5FB1429629B35A70DEBC0562C2C4C94E + 4D9225CD14DB8AA5B76B2F971243C222641721D510B496D610D4A1BAA2464DD6 + 0154C1DFDFC6018034CFD49FE702F06DB6A7370320303022E5467BE6A6BA0A03 + C0B8F1530CF34F9C344D3EB23928CDBF6BF75E5929E80280BBF9291A9E874A72 + 4CC8B7DB77E8246AD6AC257EFDF55709012B007018A00380C380A20240650134 + 3801C012DDA202C0975A8075EB37C802267E8F124D4B00D078CA907C9F66637A + CC9971F6CA632A4D63727CCFF57E3E2F7F0FFE6E7C9B350BFC1CCDCCE3BCD8C7 + D0AA1CB828C5407C9FE2FBF7DEBB561665E900604BB03163C78B3EFD0688FC1E + BD4566FB8EB2184BED7C343705AD5DB7814375EA4BD97504A6687EAA52E56AF2 + 34A3DEBDFB599ADFA10E3C15D803002121C9156EB4676EBACB1B00060E1E6E00 + 60020040CD9EBB50A6FF9C0760E7600500B3F9070D1E26FAF41D8871DB9F3C00 + 4033AB2CC00A00CC027400300BD001C061802F00A0D9478F1927F701B0CBAF0E + 005F6A010A03C0D9B3E764DF83B9F3E6CBAF55E2DABD02004D4AE3D2B4CA988C + D6FC389B90B20682CFCF9FCB9FC52C821F67EACFBE8634FFB0E1C36DF703E800 + 50EF6FD9C2A5C02D88E22B9191AC046C66235B9B26C5F26AA6FD79ECFA9BD549 + 56501A00D01B8236703504551D812500EA9A0050C71300354D00A8E18CFE0A00 + 0D1A34942B436E69BF16FDE313D224007408701210D79F6EB45F6EBACB2B0006 + 0D33A2BF04C0C4A962C6AC7962E3E6AD62DFFE037247200160657E25028033C2 + 4C17AD0060570B505C009830619204004B7E0B03C0F5D402B08A8FF5FFACDBE7 + E7D5D770D991937A342B8D4B5373469F9B7D58EBCFF13D97061D20392B8DCF55 + 047E1DB388C1430A64571FA6E15C1EE473DC8F473600DDB97397AC0B58BDE65E + B96F62EAD419526CD23260E010A98E9D72A4629C5B9CD931C8D10548F50084E9 + 1B593701B50740431F0050CF2B00A46AD4F400808AFE69E91D656B7A0F00B40C + 3FE30740095CAAD0C20A003D7AF6738BFEE301006E136639304F0AE68E403300 + 74F32B008C18C1EDC17912004D9B36F30900C5550C240190902CEE2E53C60300 + C5510CC4757B4280CD3919556970F35E0196F5B2BE9F937C343ADF260458E9C7 + EFE51080E667D1CFD4A9D3E58E4476008A8E4D9013A93939DD9C1D7FC7E3352D + 107DFB0D94F50D991D3ACA0936EE4E940D41B5A6A0460F40AD01A83D009AB801 + 4042A0BE0F00A86302406D4F0048F3BB01A08E2C07E6062AB3F939291817DFD6 + 518DAA01C0510A1C39FE467BE5A6BC4856A3DACAA44ED97946F4A7F9296E1022 + 000E1F3926162D5A562800D87F8E955F0A00010181D260D7530C64570BE00D00 + 73E72D9000E0E61F2B00F8520B5018006872963517140C9335FB7DFAF497E937 + 0DCE145F6D22D28D4F50D0FCCC0A162E5C2C67CD9949B01390A3FD9743AD82C2 + E5C7DD9A813A1B82AA4EC04A4DAC9A809A01D0A87000B8CC6F0F0057F46FA099 + DF0C80BA8EC93F0B000CC7B046373F61C056744639BA13002A188584C434B8D1 + 5EB929AFC200A0527F09800953E4AAC0EA7BD78B2347018025CBDD006036FFC0 + 4105F887D7C2E320C7862000806BF2DC0770BDB500452D065AB8688901001ABB + 388B81140028A6FC34F7DAB5EB8C5660EC00C431764E6E5739833E1ED9885C26 + 2B188EF43C5BFE5E81CE2E402D8D3660EE0060FD7CF380208B6EC04E0078B403 + 7702A0892700DCCF03B01E02B89BDF570034F004402D2B00D491E2366A7688D6 + CD9F0AB1253D9BD1980110D82A72AF3FFD2FA1CB1B0058AFAD47FF7100008704 + 3C1A8C19C0D2E5ABE476602BF3EB00E8230FF6E82B679599DE16050045AD0530 + 03601FC6CC345A758C3B15008A5A0BA08CCF8D4B8CE22C2AE281234B972E17B3 + E7CC939A38690A863AA3C580018345C78E395AFFBF085902EB680116EED602CC + 657E2F0008281C004DBC004041C095FA6B00B03808C40C007D02D00E00B5AC32 + 000F00D47103408F1EBD3084C936F60084472618DDA814000283642390AFA2A3 + 13FDEBFF2575719FB51D00E213D38CE84FF3537C7BD98AD5723FC09A7BD7C983 + 44EDCC4F71CCCFB3EC59FEA90060570E5C12C540478F3D28FBFD0585842195BF + 6409009A9E467F0E60E20942ECD5CFC338E6CD5B2887109CE51F356AAC1497C8 + 7AF4E82DB31916B9700D3C54B6FF5272457F4F008439BB0187C9FE7FADF4E8EF + 0440800E00E779003A0094F9F521801900BAF9ED00A09BDF6D05C0D6FCD62B00 + EE0782DA00408BFE356AD4915BB90980CED9DDE430802752ABE86F0600E41FFB + 97E4551800C65B0060F19215723F0077048E1C35CED6FC54585884C8CAEA287A + F57200803D015837CE5A005F0170BDB5000A009C0D6F8D2C60FE8285E2C4C953 + 46DF406EE4A166CD9E2BD7BFD9E28CEBD3EC219899D9519E7EAB5A80455AF4FF + 0B8F50EDBF5CD2CD6F0020D81A00E6F43F400380E31C007700346B11E80E8066 + 9E0068EC03001A98A2BF0E001D02D703809A260098D37F0280DD817373BB880E + 59B9D2FC9CF5370340CEFEB78A3AE54FFD4BF82200206125FE2374F38F1D3F59 + 3E2E58B4549603AF5DBF491E126A677E0580B4B40C39EB4B004808A4A4FCEE62 + 20B514A822BD4CD7A1078F9F908761B2D085E37FF6D75300600B302E4776CDCB + 171D3A76965D85629DBDFF54FF3F76048E8E7675058E8C72F5007407408CD6FF + CFA950770004BB0120CC0D00813A00023D01D0C2048066DAE49F1D001A5B00C0 + 73F6DF1300BAF9ED00E0ED54608FF57F2F2B00FC3AB657E391EA0C30DCF76F05 + 809641916F26246455BCD1FEB8E9AF162D4293ED00408D779A7F1CCC3FD62996 + 0313003C2168DCF849B6E6A7A263E2E4B97283060D7600005195E5C00A002A0B + B02A06A2F119E919D9395177E9D22BB2F32FDB7AB33128BBFE2C5EBC4C8EBF27 + 4003060E16FD216E00E2B9049C8093C6578A4F7235FF747605760380B9257894 + 3D001CE63703C095FE2BF37B0020A83000B826FF0C0028F3EBE37F7DF6DF2603 + 703B10D40600F6CB7FBE01409F03F00600BECFE7E03C02276459D948F35B01C0 + 6FFE3FF02A0C007AF4576239304F07DAB66D879830718A9C04B432FF808143A5 + E9CD00606A4D00D0EC8CF24CD739366765DDA38F3D2EF6ECDDE7680EBA6CB96C + B8C1F3EAC703342C8E619BEFDC2E79A253A76C916434024D951D811354376067 + 33D078DDFC505C7C92A90370A2AB03B0DE0ADCEA2C80481700C28CEEBF3A00CC + 078128691380CAFC52560008D62600ED01D0D40700789C086C0180FAD70900BB + 1500CBF41FA2E95958C4AF210C020303454E4E170F00480804C7BC9991D1ADD2 + 8DF6C5FF99AB3000F4ED3FC430FE987193E4239B83B23DF8B6ED3B64A9B01500 + 687E1D00DC134EF32B00502C539D8DF1378B5C38C156503042B60F9367E82155 + 67FF0029D50D58EB08CC66A0497A27601300E24D0090E68F773F1320466F01AE + A2BFB3FDB70B00CAFC5A0610EE2B00C2DD57000C00841A0068A901A065CB608B + 25C056D60068EEB9FECFF5781ABDB023C1BD560016020057FDBFE70A80190034 + 3E9F975F2F3F8F8FF3F8B2F4746E854EF600404878DC697FE4FF83AFA681A121 + 2D5A86093B99013066EC24590EBC65EB76B92B907D02CDE9BF32BF02007E8C6C + 8CA10320A35D079191D15ECAD515B89D14BB00B74D6BE71500C95E0020CDAF03 + 20DE0400E761209600887601404EFE459A0110ADF5FF8F76995F07408836FBAF + 01A0950E80569E00083001C07EF9CF0100AED1B34F204FF7E56B5CBA7469D1AC + 590B0F0078AC0058ADFFBB95FFDA01A041E10080C9EBE2F792C78DE33994F915 + 0078E251DFBEFDE4EFA803202C3261A110E2961BED87FF9357F3803061A73EFD + 06BBCC0F8D1E3B514C9D3A4B5603EEDBC7FD000B3C32001D0054291F00E06807 + 6E0D008FF300DC00A0CE01700220D1048078E7D85F0340AC0500A24D0088B400 + 80FBEC3F14166DB1FC67028032BF0E80569E00083003C062FDBF3E0CCA08EA38 + 32EC76F9BA96721ABF41830678EE60D1A8916706E06D09B0BE7312D00C00BB15 + 007700B82600F93EBF8FCFCFE753DF67AC16380150BB766DD1AF5F3FD986CC01 + 80D69FC425A4A4DE600BFCDFBE9A05847D6C07800E1DBBB8999F626DC0AA356B + E50121CB97AF962704DB99BFFF8021F226655BACCED9B91200D2FC3A008CF300 + 340028F32B00B4B1008032BF0240A20500123400B44E724DFEE9E6571380D1F6 + 00F05CFE8B761EFFE55CFED300605500D4CA6E02B09579F9CF61FEC6302F0D56 + 591EEB5D5EDC72EBAD86E1A95BF17E8D1A35301C89C0DF99247F86D5F29FC7F8 + DF6EFD5F0340DDC276006A5B80F93166118D9C3F43CD23D801202C2C1CF74007 + 0980A898A48D1D3BF6AC326FDE3C46FE3F39E5BFFEE80B00D8E33300C64C946F + 2F5CB44CD602702E60C2A4A9721860657E0500A67D2C896DA703004A770340A6 + 6C1B95AA52FFDF0900F7D97F13004CC77FB903C035FB1FE94CFD236CCFFFD3D7 + FF232D96FF2C0060402044EEF86364672ACF9387EEBEBB8C347729CDEC4A65CA + 9481B19BE2778E93206576C389436FEBFF06001A7B56FF5D2F00EAC8B17D6309 + 291ABF910618F332A20E806AD56BE1758C94F32CD939DD5E5BBF7EFD1D307FE9 + 828282DBF1789B1F0437E86AD122B47FF3805061259ED4AA47FF516326480870 + 531097016516C03302468CB10500B77FB21F1E5B44E90048370120954AF30100 + E6F43FD995FE2B00782EFF25B92FFFC59997FF3400582CFFB90120DC1E00C14E + 004863C07054FD068DE48126D590BEF358EF3265CACA6AB852162657E289C0D5 + AA559787A6C4C527CA49D1B40C477B2D0E195C2B00DED7FF3D7600DAAEFF6BE9 + 3F0150DFB3FC975FC7E76B267FB6DA70D4DC2B00080B05801A88FA61E111DFF5 + E93770C4B469D3EE81E1CB4F9932A5DCA44993CA4C9830E12EC28020C8CBCBBB + B5941F027FECD5BC45E8575600080D8F95137F2AFA1300A3464F90F302EC0FB8 + FFFE07C4DEFD2C9B5D640C0574F32B00703F405EF71E06000CF33B016098DF0C + 0063FC9F6ECCFE1B00800CF3EB00302DFF59AEFF2B00C4B80010650100CEDCDB + 45E4E2903CFA1B7068D2B4197E5608FEC654D13ECB5130C5BF9F590AB30AC72A + 80F50E403300BCEE003400E065F90FE6A76939E9C7EFE7CF68DE22C83109899F + 690000E63767015600E010212DA3FD5FFBF71F3C69ECD8B1F5607EA959B366D5 + 05006ACD9831A3FAF4E9D32B1308D0DD0A04CC08FC95807FD0D5AC45E83C4858 + A9FFC00223FAD3FC23478F97A7077363D0EA35EB6416B067CF3E098151B234B8 + C003006C0F9EDFA3A70B00A63301750058CFFEA7BB2FFF290078ACFF9B0010EF + 5AFF77995F2D01C69BD6FFDD01C0B13F8B77AE070077DE75B73C738F9B90AA57 + AF09C334C7B020540E2FF83771A8D32EB3A3B35D7A3B99CDF06772DEC0D801D8 + C27D0BB079F9AFA9E5FA7FD101A00C5FBB8E23CAF3F9025A6A1B9302823D00D0 + C419FDAD00A020C0AFC968D7FE8D41430A868F1A352A72C488115188F4D1D4D4 + A953A361FEC89933678602002D61F626501D887302E5D7AC5973D7F6EDDB6F3F + 7AF4E8AD7E08FC0157A34611F7346B1EFA951500D2323A39CC3FC665FE11303A + 61C0D6E16BD76E9410609B300E07264E9A2ABB05AB4C20A065A068DFBE830B00 + 1ECB7F9AF91500DAA65B00C03DFAEB4782BBAD00785DFE739ADF0D00AD3D01E0 + B1FC17233F467138C1CC233DA38353ED65E38E54A853E72E12708EBFC121FE5E + 6AAE21343CCA73F9CF5900A497007B00C0CBFABF0700F4F1BF690720A3312333 + 53723EF26BF85CFC9D824C65CAFCDD68FEA20220B055D8B5AC8E39CF0D193264 + 38943B7CF8F0AE23478EEC06751F376E5CFEC48913F391F6774716D01591BF33 + 32810C2801C60F9D3D7B76533CD6822AAD5AB5AA0CB30142C09F0DFC0157B366 + A1D9CD5A8408B35AB68A10C330C6D7A33F013062A4030293A7CC142B56AC11FB + F61F94BB04B76CD92EBB058D1D3751F60B0C0D8B9000E8D3A7AFE7F29F762AB0 + EDF29F73093059078036F99768B5FE1F6F0180D6BEACFFB776A4FFFAF29F5600 + 14EEB6FEEFBE02101CA2E45A01702CFF85DBAEFF075800A079803B00D426A0A6 + 3EEC00D401C0485F0F86E4F89D8F5C166CD62C50FE7C7D15C3F1BB874BE92B15 + 96009055880112004DB43900BE1D1E19FB4D972EDD8E0D1A34684AFFFEFDA70C + 1C38706A4141C174006026328059A3478F9E0300CC45063017D17F36B20004FF + 199360FE11307E1F98BC2394B070E1C2203C3658B2644955E7B0E04E66037E08 + FC0157D3E6C16BAD20C0DE0066F3EB8FE3274C150B162C91C787B35DD8DEBDF7 + CBDD82F3E62F92CD1EA2A3636467208E6DDB3921603E125C07401BCBF57F1700 + 12CD0050E6B75AFF6FAD0F0134F3ABF57F8FE5BF3823DABB2D01869B0B80687E + 1B00045B00C06EFD5F074040D101A0223DD36E7DB28E693CE70F5476C3BF2B3C + 22D6B597C10040C47503202828FC5A724ADBBFF5EEDD7B4F8F1E3DB6F5ECD9F3 + BEBE7DFBEE183060C04E8060F7D0A143F70000FB0080FDD00100E02032808300 + C0FDC800F60200DB01807BE7CE9D3B6FFEFCF96360FE5E0B162C6807452D5DBA + B4D98A152B6A2D5BB6ACA29A1B5043023F084AF06AD622788F1504F2F2FB1800 + 908F231D00183E62ACCC1038493805D9009708376EDC2AF6EC6127DBFBC58285 + 4B64938CE1C34788BEFD06886EDDF2E50EBD4C6D3E40CD0178CEFEA77902C097 + F57F18DF63FDBFB50FEBFF51260044B80010A66D02720340A80E00D71260AB42 + 0010600280FBFE7F7D0F40A0343C237CC3468EC8EE18B73794A93C233E4DCADF + 8B7F53EBD6C9AEE14EAC6B7F437101007FDB6F31B149DF6675EA7C292727E7A9 + AE5DBB3ED5AD5BB7A7BB77EFFE2C00F01C00700619C0596400E70080E7018017 + 61FEF3C8002E8C1F3FFE02007061F2E4C9E70180E70180A70180D330F77E681D + 00306BF1E2C50578CC41069008B5C250A03EB301C0A01CB301FF04E11F703569 + 16BCA769F310A18B3D025819A8477F9A5F0260F818E36D8280878ACC4746B066 + CD7AB172D5BD02C341796E1C77F0C9DAFFD16391110C96BDF072BB76171D3A66 + CBAC404D08EA73013A0054FA9F6407808442D6FFE34CE6B75CFED38600FAF65F + 8B2DC021CE2DC0C1FA1E80607306A0AFFDBBC6D73A00E47E7FE7269FC64D028C + 145EAFAA6374E7D71028FC7DF8F7C88D50C96D9D939FF8DBE3531C00E0DF8CCF + 477B0020C60400BD798927009845F0ED90D0683EDF95B6A9E99F76E8D0E11DAA + 53A74EEF76EEDCF9BDDCDCDC3F03007F0100DEEFD5ABD70700C08700C087C800 + 3E0200FE3A6CD8B0BF61FCFF3740E06300E06300E06364007F03003E0400DE9B + 3367CEEBC800CE210338B568D1A25D00C03244FFF188FCBD962F5F9EBE7AF5EA + 0898BFE9BDF7DE5B73EDDAB515301C70CB066EB4576EDA8BC30148E80A080C17 + BDFB0E72987FE45823FA13004A05C346CB8F8F740E0D3A76EA263A75CE119326 + 4D960058BD864754AD158B172F153366CE16E3264C92FDEAFBF61D207AF5EA2B + F27BF611DDF27AC8BA0176DE61864018E84540C9FA0A80B1FCE732BF3E148833 + 0D05CCCB7FD14EF3EB0088B00240B8350082B5F57F47F48F702B0052E6A79918 + E91DCB7981CE89BB00D1C059A1E728CB75989E46A701F93369E4E49434992139 + 32A30C3929CA8FE900E030C8010027F49C139D5131AEDE061191710600426D01 + 108A8F476338D4FAB7E8D8A49FF13A7E9D9494F4AF366DDAFC333535F55F1919 + 19FF0600FE03007C06007CD6A54B97CF0180CFF3F3F3FF8B0CE0BF7DFAF4F902 + 00F80219C01743860CF9B2A0A0E04B00E02B00E02B00E02B00E02B64005F0200 + FF0500FE0300FC03E67F1F69FF2B00C05330FF21987F3D4C3F13D17F3000D019 + E68F5FBF7E7D4BBC5D77E3C68D95376DDA54D65948A40A88FC57715F7C610303 + C3BA6048F0B519023D7AF6778BFECAF8E6C782616330366D204FE6E93F609018 + 30B04076DEE10421F7F1B39F3D21A03475DA0C79CE1C33842105C3451F40A12B + 860C9D3BE7CA3DFECC14D4D0815070DDFC8EE53F1A9F1FA34952DDE6131CC278 + D501012FEBFF11560008770120D402006AB34FCB5661C6F299236D6EE548DF4D + 33F50D65814E73F9B5FC7E4E44F2F74E4E4997D06B273B1275C4DF99654C965A + 01C000A1CA7EE2935D598F1300AAC701CD6F07000E0DA26312F03D49BF413F47 + 47C7FE101B1BFB6D5C5CDCB7F1F1F1DF0100DF0100DF0100DF0300DFB76FDFFE + 0700E087ECECEC1F9001FC0800FC0800FC880CE04764003F0E1830E00A32802B + C800AE2003B802F35FC110E0CAB871E3AE2013BC02005C01007E0000BE9B3D7B + F657B8D7FE8DB4FF6344FFB760FEE711F94F0200F7C1F08BD6AC59331A00E80E + C3B7410610BA61C386865BB66CA9B673E7CE727BF6ECB9D30F8112BA986291B2 + F867D60D0C8A3CA243807302ED323BBB995FD7D08251F29186AF52A58ADC0E9C + 939B0775175DBAE64B53E7F7E8257AF7EE8FA1C0100C11468861F27B47CA3A02 + 36D71C3478A86CF2D1AB37CFA2EB2F9B7DF4ECDD576E17E673D1285C21300380 + EBEAAC9C636310EE3FE8E48447C74EB92203F0A0590A5BFF778CFD5D9B7E5CB3 + FB11CE88EE307A8B968E717273BD734F73B566EF18BB8772F520320699498A9C + B0E4D261FBACCEF8DDBA3A7EB74EB9724E24AB638EE89005C0B57707409A1300 + 6D3D0090EA05008EE18EDAE4A4A2BF020081102B870A6DF0F9C45F43C222AF05 + 0505FF1C1C1CFC535858D84F1111113FC7C4C4FCDCBA75EB9F1312127E4E4E4E + FE392525E5E7B4B4B4AB00C0556400573B76EC781519C05500E02A0070154380 + AB3D7AF4B8DABB77EFABC800AE2203B88A0CE02A007015FFFFAB00C055640057 + 01809F01809FA74F9FFE1300700519C0F730F0D700C06700C0DF9101BC07F35F + 40F47F1400D80BF3AF84F127C2F87D703F66C0FC11DBB66D6BBC63C78EEA78BF + 3CEF51FF70A0042EBEA8242C5EE84A78D11B75E9963F222C3CF61D1D02E191AD + 45F71E7D9DA61F6D3C12007CCCCCEC24E2E313644390ECEC6EAC011739390441 + 3769E25C0504A84BD71EF26D2AAF7B2F7900659F3E0345DF7E83303C18246B0A + 7AF4E883AFED0EC3749146A101D48DAFC4F9019A856BF3AE15864C98A71DCC92 + 2A0FDC90465033FC88ECA1CE9D7DC678DE349967985E8E8D1D13788C9A040852 + 6544EF549182E89D0EC3D2C8840F0FC0CC83BAE5F5145DF39C7F5B97EEF2EFCE + C6DFEF0B00D29D55936A954465320A008E6628DA10C80200717149726890949C + 2E0D1F1593F01BD2FC5F9B3469F64BA3468DAE356DDAF45AF3E6CDAFB56CD912 + 1008BA161212722D3C3CFC5A5454D4356401D700816BC800AE2103B806005C03 + 00AE2900200BB89A939373B56BD7AE57F3F2F224003004F81941E36764003F03 + 003F6108F0D38811237ED233802953A6FC0800FC0800FC800CE03B0200E9FF17 + 00C0BF10FD3F5EB972E53B30FF0598FFD175EBD6ED83F95721F59F8CD4BF2FEE + C5768400EFC95DBB7655E57000F7AA7F4EA0B82FA656CE8AAC2AF7DD775F333C + 266FDDBAB5DF885163F6C4C6A5FC53AD0EB06438392503461D6C447FA5E0E050 + 187700860CBDDD00C047254766E0FAB8E3FD3CD9F9C7F1D85D8AD9031FBB38DF + 976F7775885FC708DFB163AE130E9D11351D853A69E9AE621D57DD011ED3785A + AFE331158FA9A90E503083703C66CA1378A84ECE476623BD90B5302361F6C2F7 + 7B2AF5EA27E72FF201A9FCFCDE5204990440370700721500721400BA4800D0FC + 143303DF00E0981835038099003382366DDB89B87844F7D8640C4D227E6BD4B8 + F9AFB5EBD4FBA566CD9AD76AD7AE7DAD6EDDBAD7EAD7AF7FCD0980AB00C05500 + E02A0070353434F4676600D1D1D13203807E4A4C4CFC0919C04F00C01500E00A + 860057B2B2B27E04007E04003804F80119C00F00C0F700C077C800BE4306F02D + 00F00D00F00D3280AF0100390700007C09007CE19C03F81C19C067CE21C03F97 + 2C59F20F0C013E0200DE05005E41E47F0E11FE0400B063F3E6CD4B60FAB188FE + F9501B2868F7EEDD75F1B18A478E1CE15E82DBFC0028C68B445500C08BDC1C6A + 0B0D010496E3F1E8E42953DF86E1BED6F70EF08663241F32D401001E04C9ADC0 + D2ECB8E11D00E8A60120AF50002808E438BF36574121D713045DF1B35DD904D4 + 2D5F9A8F11B89B544F9127D5CBA1EE8E28DD1D66A5782AAE437D00ADBE523DA9 + 5E7DE50465AF5EFD1C431242A0773F17007A3901D0A3700050AE0CA08B049703 + 00D94E007474D64B64197B260800824907004DCE8FA5B4E15C481AB7D7225B89 + FCAD7193805FAB55AFF54BE5CA55AF962F5FFEE78A152BFE54A952A59FAA56AD + FA53F5EAD5AFD4AA55EB4A9D3A75AE3468D0E0C7C68D1BFFD8AC59B31F00801F + 0080EF0180EF0180EF90017C8B0CE05B98FF9BF8F8784E027E8D0CE0ABD4D4D4 + 2FD3D3D3BF0400BE0000FE0B00FC174380CF91017C0600FCA767CF9EFFC610E0 + 5F00C03F9101FCCFD0A1433F0500FE3172E4C8BF03009F00007F9B3871E25F01 + 808FB80A3073E6CCF70180BFC0BCEF21037807BA0C00BC0600BC04009C05001E + 87F98F21CAEF8456E0BE9BC22004F367EEDCB933121980CC02F6EFDF5F46150B + DD68DFDC34970E00660004005EFCA1785C059D04915F415AF6F1AA55ABFF8BB1 + FB8F691959BFB468192AA890B05844A3B6185747611C3FC888787AE4EF9CED00 + 80C3F40E304893EB50501FCFCDF30900AEE1846B482101600781EE3D2500DC21 + D0E7BA00C0AFD5CD2F87000080FAF9FCFD24C8BA388700391A003A590320C329 + 66039C20A4D1A363791E6002271C7FAB5DA7E12F55AAD6BC5AB66CF92BA54BDF + F1C3EDB7DFFEFD9D77DEF9DD5D77DDF5EDDD77DFFD6DB972E5BE0100BEAE5CB9 + F2D7D5AA55FB0A00F81200F80219C01700C07F91017C0E007CD6A2458BFF0000 + FF0E0E0EFE1700F04F6400FF0FFFBBFF01003E4D4848F83B00F00900F03100F0 + 3700E02300E0430C013E0000DE4706F06700E03D00E05D64006F030097310478 + 0319C0EB00C0ABC3860DBB840CE02200F01200701E19C00B00C0390C01CE2003 + 781600787AEEDCB94F2E58B0E07100E0116401A70180E3B8F70E33FD4706B00D + E65F837B6E1E8C3F16F7626FA81D01B077EFDEC6307F35350CF003A0182F7D0E + 002F70130E01F04F1804AD80F94FE0F13500E01F20F457F847FD88F1DACFF8E7 + 5D1D3274D82F48BB31CE8C80117A88448080635146ACEC1C0581AE0600080665 + 7447A6D0CD182EE819831B009CF307390604F2B42CA070004808747702C00C01 + 670690EF04400F27000C084800F4730E075CD1BF4800E0DF9FD3D5989C949396 + 80413B183F359D4764337D4F92BDF2587F51A75EE36BD56BD4FDB942C52A3FDC + 7557996F6EB9F5D62FF02FFAEF9FFEF4A7CF6FB9E596CF6EBDF5D6FFDC76DB6D + FF0600FE55BA74E97FC2FCFF53A64C994F01807F54A850E1EF00C027C800FE56 + A3468DBF02001F01001F6208F03E3280BF6008F0676400EF0200EFB46AD5EAAD + B0B0B0370180370080D7E2E2E25E4106F03200F0128600170080170180E70180 + B300C0739D3B777E160078BA4B972E4F6218F0787E7EFE23BD7AF57A0819C029 + 640027008063C3870F3F820CE0D09831630E8E1B376E3F3280BD93274FDE0D00 + EC7056026E85713701001B300C588B7B68CDAA55AB5600004B9001CCC7FD3513 + F7DB44987F38D407F76327983F098FC178ACCF00E5CF004AE0E28BC9195640A0 + 0288DB10D13F1EA6E724CC620E01A04B0400BEE66BFCA3AE0000D7F08FFB65C5 + 8A15BF2E5DBAF457D0FCD771E3C6FF06E3FCC631777068346EE65044AF78118F + F129C7DD1D3A644B00C8EC4066085D8B0000C7AA820302796E10E86240C0B1E2 + E00E819EAE2CC02B00FA7800A08702811EFD217EDC010097F9A96EDD7B1AE6EF + 964718F494F313E91959223E3155C4B54E91ADB18242A244E3A681BFD6AEDBE8 + E7EA35EAFD50B94A8D6F60F4CF6EBBEDF6FF877FC527D0C7D0DFA08FA00FA10F + A0F701803F0300EF0100EF426F030297EFB8E38E379001BC5EB66CD95701804B + 00C04500E0256400E79101BC00009C0300CE2003781600781A00780A59C01300 + C06300C0C3C8004E4746469E8C8E8E3E8E0CE0283280C300C003C800EE4F4B4B + DB979191B10700D80900DC870C605B7676F61664001B0180F500C05A0C0356F7 + EBD76F2500B06CF0E0C14B90012C440630DFB917601600301D00988A21C02400 + 600286016391058CC6FD3612F7CC306828EEA141B89FFA23B0F4817AE03EEB8A + FBAD234C9E0608C4D1FC8CFEB8376BE063F730509D3973C6BF1C589C175F4CA6 + 555C6AC18B5C0F0088E6040C1EE782C807A10B1C0230035000C0B8ED57020014 + FF0D34FF6DFEFCF9BF21BDFB0D94FF0DFFF05F478E1AF56B9FBEFD7F43B4FB2D + 3129F5B7C8E8040986D60042524A1AC6B4804216D261A8B30181AE1E13867600 + C83503A09B3B00BA75730180D9802504D43C404F4716A01E7500F4740E05B842 + E1980CE4C4E04044F1AE523CF72E25A59D4CD9C322E2A4B8724293D7ADD7E4C7 + 1AB5EA7E03937F5EAEDC3D9FDE5DA62CCDFD0EF416F426F406F41AF40AF432F4 + 1274017A117A1E3A0B3D073D0B003C0D3D09083C0EF33F023D8421C029640027 + 90011C03008E0000872A55AA741000D80F00ECAD5DBBF66E0060073280ED0D1B + 36DCDAA449934D00C0060C03D6050606AE4106B00A00588E0C602900B00819C0 + 0200601E00301B009809004C6BD7AEDD1400602200301E0018939B9B3B0A0018 + 9197975700000CC1106010CCDF1F19405F00A03732809EC800BA6308D06DD2A4 + 495D00806CDC0F9D60FE2CA83D00C0FAFF7428156A837B2819F75322EEBDD650 + 2CEEB52800200C6A85FBAF29EF472E033238B132D0BF0A5002175F4CA6552CB8 + C08B5E9BFF003CE6E29F310D6FEF86CE01001F0200FF05A57FC03FEC2A00700D + FFBC5F9001FC0200FC0200FC0200FC0200FC8294EF17FCE37FC14D700D37C3B5 + 1123465C2B2828B8864871353FBFE7B54E9D737E494DCBFC25A54DFA2FADE393 + 7F8D4F48F9350263DDE436ED444A5B4E8065CA19FEF63057FBF6D912104CF319 + 55B3735D73091C02F4D0C6F0BA691DE3F97E8ED43C8F19414F6332905FD3BBCF + 00D10BCA9399405F00A50752F67C98BA1BC6E739F2F7E0819649291986B18343 + 638CFA88BAF51B7F47D5AADDE8ABAAD56AFE4FA5CAD53EB9FBEEF2EFDE5DB6FC + DB78495F80CE4167A067A1A7A1A7A027A0C7A087A1D3D049E83874143A0C3D00 + DD0FED83F6403BA1FBA06D30FF166823A2FF7A682DB41A19C04A6400CB008025 + 00C0C28A152BCE0700E60000B30080E9356BD69C5AA74E9D4900C084468D1A8D + 4516301A00188961C03064014391010C86F9072003E80700F401007A252626E6 + B76DDB360F4380AE00400E00D0195940C7ACACAC0E8040268601191806A40102 + 6D9105A42003481A3870600200D01AFFE338002066ECD8B1515004328030DC07 + A15030328056EC07307BF6EC00A839824E33DC374D57AE5CD918F7532316FD60 + F8591FF75C5DDE8378BB0627FD38F3CFFB92B3FF7EF397D0C517944B2B1C5FF1 + 85E7B20BFE115978F1C7435BF1F653F8F8BBF827FD0B00F80659C08F1802FC04 + 00FC0400FC8454EE2700E027D0FD0A28CFCA2F5680FD0800FC0800FC889BE207 + 44871F1029BEE7B251DFBE7DBFEBD1A3C7B78822DF20A27C83F1E5D71D3A74F8 + 0A37DB9729296DBE8E6B9DF04D4262F23751D171DF8547C6FE10161EFD7D5878 + D4F71191B157F0FECF5211D13F8547C4FC84CFFD1486B743F9084544C5FF1A15 + 9328288EAD0996A0906896E75E69D6BCD5F7522D82BEAFDFA0E97775EA36FAD6 + A1C6DFD4AADDF08B2A556BFC03FA7B952A353FA95CB5D6C7F754A8F25E99B2E5 + 5E835E852EDD72CB6D34F223D043D029E804740C3A021D820E42FBA1BDD06E68 + 07B41DDA0A6D823640EBA035D02A6839B4145A042D80E641B3A199D034680A34 + 11E2C1996310FD474123A082DB6FBF7D0800300819407FA86FF9F2E57B03003D + A1EE55AB56ED56A3468D2E00403686019DEAD5AB970508B40700DA210B480704 + 52018136004072787878624444443C00100700C40200D1C9C9C9918040787A7A + 7A282010020004C1FC81F83FB584F95BC0FCCDF1D8148F4D0080C6004023FC7F + 1BE0FF5C9F9D8000FCBAF8BFD7611720DC0335712FD4603720DC63D5F0C8ADBF + 5570DFB0335025EE00A49CB5FFF7300BA5E139D9C788CF94DF39E9779BDFFC25 + 74F145552B01A42E5EF816303EC760C3F1782F00701A19C0AB1C060000FF01B1 + BF4406F035E8FD35FE912CECF81AE9DC57C800BE0400BE4006F005D2BFFFE29F + FF396E84CF7163FC0737C8BF01807F2165FC2700F0FF0080FFE9DEBDFBA7B891 + FE811BEB1344988F33333339F3FC57A4A01FE246FC202E2EEEFD989898BFE006 + 7D2F2424E45D8C5BDF0E0808B88C9BF84DA4B4AFE3C67E1537F825DCEC17AB54 + A9F212A2DF7918E10544C37330C51944C7E74A972EFD0CCCF21452E627609CC7 + 10451F868A147DA12DD046683DB4165A0DAD8496414BA085D07C680E340B9A0E + 4D85264113A0B1D0686824340C1A0A0D860640FDA03E502F281FCA83BA423950 + 67A823D401CA44D4CF80D2A0B6500A8600495002FEDED6501CFEFE98CA952B47 + E1B588C0EB1206856218108C2CA0155EAB964D9B360D80F19B6308D00CAF6353 + 98BF3186008D900134C4EBDC00AF777DBCEE7501803A00406D0C036A01CA3561 + FEEA00753518BE2A860355900554C6DB95A85EBD7A5504D42B50C800EEC1FFBB + 3CC51E80F8BF97651F408ADB7CD90FD0D913F04E25CE3D293937FE946636EA9C + E8BB4D3509F1EF0A2CE18B2FB05A0960F9258C9FC87558987F217400443E830C + E03200F01168FD0932807F00007F5FB264C9DF172F5EFC0900F0313280BF0200 + 72DD17FFF40FF0CFFE0B22C29F7123BC0B00BC0300BC856871B94F9F3E6F60FC + F81A32805700809731B6BC880CE0026EB61771D33D0F009CC58D780651E959DC + 984FE3267D1200783C3838F851A4AE0FE1463E05009CC0F8F641DCE047008043 + 887A076180FB0180BD65CB96DD8DB47827CCB11D00D80A006C8636C034EBA035 + 004091A32F340A1A01154043A041507FA82FD41BEA097587BA415DA06CA81394 + 05B587DA41E9107BE3B78192A144281E8A8362A16828120A8742A11028080A84 + 5A422DA0E65053A8093280C650A37BEEB9A701C6FFF511FDEB4175F13AD40108 + 6AC1F43511F96BE0B5AA8E21403580B32AA27F1500A0325EC74A4141411529BC + B61500D97BF0DADF031894C7EB5E0E10284B01C86560FABB2918FE2E0A66BF93 + 02B0EF80D9A5F0BF2CADC4EEBF4ACEFAFDDB541350B394B9CD52BD00FC3D01FE + A04B4D04320DE3C40B201009E377010826411B10FD8F0100CF80D41700809791 + 015C02005E06002E2203780900380F00BC0000C8755F00E0396400CF8C1B37EE + 2900E00900E0318C131F06004E230338890CE038328063882C8791013C00001C + 0000F6E126DC939292B22B292969076EC46DB1B1B15B304EDD181616B61E0058 + 1B1818B81AA9EC4ADCD4CB71832F01001661BC3B1F516F2E6EFC5900C0740060 + 2A3280C9C800260000E36092D1C8004642C391050C858A1C7DA10C280D6A0BA5 + 40495002D4BA94C3C031501414018595721838186A55CA61DE80520EF3362BE5 + 307063A811D4106A00D587EA4275A0DA502DA826541DAA065585AA4095219EA9 + 5709C6AF0855A060FC7BF0F797A760FE72006259BC2E65280C05EE4616701705 + 20DCA90420DCA104209456020C6E5702046E53F2D5BCA6B6DFDEE4BFFEB75C6A + 2290632FCE0340811C06E071001E67E2711D20B00700388421C05164004757AC + 5871845B3A018083F3E7CFBF1F00D80B00EC4606B013E3BEED13274EDC0A006C + 1E3D7AF486E1C387AF0300D6200B580500ACC8CFCF5F0A002C0600160000F300 + 80D900C04C00601A32802900C0448C49C7232D1D8BA8340AE9EA0844AA618858 + 4370C30E42441B800CA01F6EEADED5AA55EB0900E4E3E6EF06337401007260FE + 4E80401600D01E006887C89F0EA5426D0082DF1D7D4BB90CDCA094C3BCF54AB9 + 0CACCC5BA394BD812B3A5501BAC7A9F25039A8AC5365A0BB9DBACBA93B9DBA43 + 53694DB76BBA4DD3AD16BAC54A3E1AD87FDD4C973E0FC06100EB0198056018D0 + 0100E80FF38F4706301B005808002C06001603000B9101CC0700E60200B3E6CE + 9D3B63D6AC595391014CC618700200300E59C0180060E488112386230B183A64 + C890C118020C4406D01F51A40F8600BD00801E595959791919195D9172E62203 + C846C4E9880CA00332804C002003C3803440A02D2090822140123280446400F1 + 18E7C621CA19635F00201CC60FC51020186A85D43F101008809A43CDA06289BE + A55CE655062E5FCADDC0654AB90C6C366F7118D8D2BC4EF9A3AFFF2AFAA58601 + CC02B8F6CAAA4042008FA9307F0E20D083051B00405F00A02F00D01B19404F00 + 201F43803C7C7F97D9B367E7B0032C860059507B6400ED468D1A958E61402A20 + D006594032978E7AF6EC99802CA0353280D89C9C9C688C31A3008088D4D4D430 + 640021C8008210FD5B252424B4C4630B00A0398602CD30144002D0A43120D008 + 006888F17F7DA4B86E635F00A026540300A80E1535FAEA06FEC3A36F29DF0CEC + BFFC57F15F2A0BE0642097630801E7FA2C8703112CD4C0FBF1ECDA82F13F15B7 + 7CF9F2D8C58B1747C3FC915038FBBF6308103275EAD42044FF4040A025328016 + 00417364004D0102B974D4AB57AF460040036400F561FE7AD9D9D9759105C899 + E7C4C4C49AC8006AC4C4C45487F9AB010255311EAD02005446465009C6AF4861 + 1C5B0143018FB12F55AA640DEC8FBEFEEBE6BC9C9338B711025C8F655B266401 + 3559A0B176EDDA062CDAA09001345CB66C590344FFFA80403D3CD685F96BB3D7 + 3B1EE5DAEFD8B163AB0300D53014A8422113A83C78F060B97444C1F415300CB8 + 87CACCCC2C8FA180DBEC334C7F3705D3DF45E1E37752569357A5FC06F65FFEEB + F75FCEA2200901AECDB2188320E0EA008B35589945A9E20D7C5D0500C038FF8D + C2DB65D5DA6F414181B1FEAB968FD41212A52F1FF93AFB5CCABB89FD06F65F7F + C8F5FF017B6367A09F7DF3AF0000000049454E44AE426082 + } + left = 378 + top = 64 + end +end diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.lrt b/components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.lrt new file mode 100644 index 000000000..606c9900f --- /dev/null +++ b/components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.lrt @@ -0,0 +1,22 @@ +TPBMAINFORM.CAPTION=Phone book +TPBMAINFORM.RXDBGRID1.COLUMNS[0].TITLE.CAPTION=ID +TPBMAINFORM.RXDBGRID1.COLUMNS[1].TITLE.CAPTION=PATRONYMIC +TPBMAINFORM.RXDBGRID1.COLUMNS[2].TITLE.CAPTION=NAME +TPBMAINFORM.RXDBGRID1.COLUMNS[3].TITLE.CAPTION=SURNAME +TPBMAINFORM.RXDBGRID1.COLUMNS[4].TITLE.CAPTION=PHONE +TPBMAINFORM.RXDBGRID1.COLUMNS[5].TITLE.CAPTION=ICQ +TPBMAINFORM.RXDBGRID1.COLUMNS[6].TITLE.CAPTION=MEMO +TPBMAINFORM.EDTNEW.CAPTION=New +TPBMAINFORM.EDTEDIT.CAPTION=Edit +TPBMAINFORM.EDTDELETE.CAPTION=Delete +TPBMAINFORM.EDTPRINT.CAPTION=Print +TPBMAINFORM.EDTFIND.CAPTION=Find +TPBMAINFORM.SYSEXIT.CAPTION=Exit +TPBMAINFORM.HLPABOUT.CAPTION=About +TPBMAINFORM.MENUITEM1.CAPTION=System +TPBMAINFORM.MENUITEM3.CAPTION=Edit +TPBMAINFORM.MENUITEM7.CAPTION=- +TPBMAINFORM.MENUITEM10.CAPTION=- +TPBMAINFORM.MENUITEM18.CAPTION=Help +TPBMAINFORM.MENUITEM14.CAPTION=- +TPBMAINFORM.MENUITEM16.CAPTION=- diff --git a/components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.pas b/components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.pas new file mode 100644 index 000000000..7e661560f --- /dev/null +++ b/components/rx/version/2.1/Demos/PhoneBookDemo/pbmainunit.pas @@ -0,0 +1,122 @@ +unit pbMainUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, rxtoolbar, + rxdbgrid, rxmemds, RxAboutDialog, ComCtrls, ActnList, Menus, db; + +type + + { TpbMainForm } + + TpbMainForm = class(TForm) + hlpAbout: TAction; + MenuItem1: TMenuItem; + MenuItem10: TMenuItem; + MenuItem11: TMenuItem; + MenuItem12: TMenuItem; + MenuItem13: TMenuItem; + MenuItem14: TMenuItem; + MenuItem15: TMenuItem; + MenuItem16: TMenuItem; + MenuItem17: TMenuItem; + MenuItem18: TMenuItem; + MenuItem19: TMenuItem; + MenuItem2: TMenuItem; + MenuItem3: TMenuItem; + MenuItem4: TMenuItem; + MenuItem5: TMenuItem; + MenuItem6: TMenuItem; + MenuItem7: TMenuItem; + MenuItem8: TMenuItem; + MenuItem9: TMenuItem; + RxAboutDialog1: TRxAboutDialog; + sysExit: TAction; + edtFind: TAction; + edtPrint: TAction; + edtDelete: TAction; + edtEdit: TAction; + edtNew: TAction; + ActionList1: TActionList; + Datasource1: TDatasource; + ImageList1: TImageList; + MainMenu1: TMainMenu; + PopupMenu1: TPopupMenu; + RxDBGrid1: TRxDBGrid; + rxPhoneBook: TRxMemoryData; + rxPhoneBookICQ: TStringField; + rxPhoneBookID: TAutoIncField; + rxPhoneBookMEMO: TMemoField; + rxPhoneBookNAME: TStringField; + rxPhoneBookPATRONYMIC: TStringField; + rxPhoneBookPHONE: TStringField; + rxPhoneBookSURNAME: TStringField; + StatusBar1: TStatusBar; + ToolPanel1: TToolPanel; + procedure edtDeleteExecute(Sender: TObject); + procedure edtNewExecute(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure hlpAboutExecute(Sender: TObject); + procedure RxDBGrid1DblClick(Sender: TObject); + procedure sysExitExecute(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + pbMainForm: TpbMainForm; + +implementation +uses FileUtil, pbEditDataUnit, LCLType; + +{$R *.lfm} + +{ TpbMainForm } + +procedure TpbMainForm.FormCreate(Sender: TObject); +begin + rxPhoneBook.Open; +end; + +procedure TpbMainForm.edtNewExecute(Sender: TObject); +begin + if (Sender as TComponent).Tag = 1 then + rxPhoneBook.Append + else + rxPhoneBook.Edit; + pbEditDataForm:=TpbEditDataForm.Create(Application); + if pbEditDataForm.ShowModal = mrOk then + rxPhoneBook.Post + else + rxPhoneBook.Cancel; + pbEditDataForm.Free; +end; + +procedure TpbMainForm.edtDeleteExecute(Sender: TObject); +begin + if Application.MessageBox('Delete record', 'Delete this record?', MB_YESNO + MB_ICONQUESTION) = ID_YES then + rxPhoneBook.Delete; +end; + +procedure TpbMainForm.hlpAboutExecute(Sender: TObject); +begin + RxAboutDialog1.Execute; +end; + +procedure TpbMainForm.RxDBGrid1DblClick(Sender: TObject); +begin + edtEdit.Execute; +end; + +procedure TpbMainForm.sysExitExecute(Sender: TObject); +begin + Close; +end; + +end. + diff --git a/components/rx/version/2.1/Demos/RxDBColorBox/project1.ico b/components/rx/version/2.1/Demos/RxDBColorBox/project1.ico new file mode 100644 index 0000000000000000000000000000000000000000..0341321b5d952e1662a3d9444a73cf9f42a7db37 GIT binary patch literal 137040 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 G`+orYGy**U literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxDBColorBox/project1.lpi b/components/rx/version/2.1/Demos/RxDBColorBox/project1.lpi new file mode 100644 index 000000000..4dcbbc336 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDBColorBox/project1.lpi @@ -0,0 +1,115 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <General> + <MainUnit Value="0"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + <ActiveWindowIndexAtStart Value="0"/> + </General> + <i18n> + <EnableI18N LFM="False"/> + </i18n> + <VersionInfo> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1" Active="Default"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + </local> + </RunParams> + <RequiredPackages Count="4"> + <Item1> + <PackageName Value="LCLBase"/> + <MinVersion Major="1" Release="1" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="FCL"/> + <MinVersion Major="1" Release="1" Valid="True"/> + </Item2> + <Item3> + <PackageName Value="rxnew"/> + <MinVersion Major="2" Minor="1" Release="2" Build="105" Valid="True"/> + </Item3> + <Item4> + <PackageName Value="LCL"/> + </Item4> + </RequiredPackages> + <Units Count="2"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + <UsageCount Value="20"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="0"/> + <WindowIndex Value="0"/> + <TopLine Value="24"/> + <CursorPos X="50" Y="52"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit1> + </Units> + <JumpHistory Count="2" HistoryIndex="1"> + <Position1> + <Filename Value="unit1.pas"/> + <Caret Line="1" Column="1" TopLine="1"/> + </Position1> + <Position2> + <Filename Value="unit1.pas"/> + <Caret Line="45" Column="16" TopLine="19"/> + </Position2> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="10"/> + <Target> + <Filename Value="project1"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/RxDBColorBox/project1.lpr b/components/rx/version/2.1/Demos/RxDBColorBox/project1.lpr new file mode 100644 index 000000000..f8e40c7a9 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDBColorBox/project1.lpr @@ -0,0 +1,21 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, rxnew, Unit1 + { you can add units after this }; + +{$R *.res} + +begin + RequireDerivedFormResource := True; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/RxDBColorBox/project1.res b/components/rx/version/2.1/Demos/RxDBColorBox/project1.res new file mode 100644 index 0000000000000000000000000000000000000000..7c6cf3e4be6fa881cb2f2caa9bda693328155c28 GIT binary patch literal 138128 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 S)M$%T8;H+2FPFK8vi}DltTdMZ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxDBColorBox/unit1.lfm b/components/rx/version/2.1/Demos/RxDBColorBox/unit1.lfm new file mode 100644 index 000000000..9ddb07310 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDBColorBox/unit1.lfm @@ -0,0 +1,239 @@ +object Form1: TForm1 + Left = 390 + Height = 454 + Top = 236 + Width = 930 + Caption = 'Form1' + ClientHeight = 454 + ClientWidth = 930 + OnCreate = FormCreate + LCLVersion = '0.9.31' + object RxDBGrid1: TRxDBGrid + AnchorSideTop.Control = DBNavigator1 + AnchorSideTop.Side = asrBottom + Left = 0 + Height = 346 + Top = 108 + Width = 930 + TitleButtons = False + AutoSort = True + Columns = < + item + Title.Alignment = taCenter + Title.Caption = 'FIELD_ID' + Title.Orientation = toHorizontal + Width = 100 + FieldName = 'FIELD_ID' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + end + item + Title.Alignment = taCenter + Title.Caption = 'COLOR_INT' + Title.Orientation = toHorizontal + Width = 150 + FieldName = 'COLOR_INT' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + end + item + Title.Alignment = taCenter + Title.Caption = 'COLOR_STR' + Title.Orientation = toHorizontal + Width = 500 + FieldName = 'COLOR_STR' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + end> + KeyStrokes = < + item + Command = rxgcShowFindDlg + ShortCut = 16454 + Enabled = True + end + item + Command = rxgcShowColumnsDlg + ShortCut = 16471 + Enabled = True + end + item + Command = rxgcShowFilterDlg + ShortCut = 16468 + Enabled = True + end + item + Command = rxgcShowSortDlg + ShortCut = 16467 + Enabled = True + end + item + Command = rxgcShowQuickFilter + ShortCut = 16465 + Enabled = True + end + item + Command = rxgcHideQuickFilter + ShortCut = 16456 + Enabled = True + end> + OptionsRx = [rdgAllowColumnsForm, rdgAllowDialogFind, rdgAllowQuickFilter] + FooterColor = clYellow + Align = alBottom + Anchors = [akTop, akLeft, akRight, akBottom] + Color = clWindow + DrawFullLine = False + FocusColor = clRed + SelectedColor = clHighlight + GridLineStyle = psSolid + DataSource = Datasource1 + Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColumnMove, dgColLines, dgRowLines, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit] + ParentColor = False + ReadOnly = True + TabOrder = 0 + end + object RxDBColorBox1: TRxDBColorBox + AnchorSideLeft.Control = Label1 + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Label2 + Left = 12 + Height = 29 + Top = 30 + Width = 385 + DataField = 'COLOR_INT' + DataSource = Datasource1 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + TabOrder = 1 + end + object RxDBColorBox2: TRxDBColorBox + AnchorSideLeft.Control = Label2 + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 409 + Height = 29 + Top = 30 + Width = 515 + DataField = 'COLOR_STR' + DataSource = Datasource1 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + TabOrder = 2 + end + object DBNavigator1: TDBNavigator + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = RxDBColorBox1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 25 + Top = 77 + Width = 241 + BevelOuter = bvNone + BorderSpacing.Top = 12 + BorderSpacing.Around = 6 + ChildSizing.EnlargeHorizontal = crsScaleChilds + ChildSizing.EnlargeVertical = crsScaleChilds + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 100 + ClientHeight = 25 + ClientWidth = 241 + TabOrder = 3 + end + object Label1: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 18 + Top = 6 + Width = 133 + BorderSpacing.Around = 6 + Caption = 'Test for integer field' + ParentColor = False + end + object Label2: TLabel + AnchorSideLeft.Control = Owner + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = Owner + Left = 403 + Height = 18 + Top = 6 + Width = 124 + BorderSpacing.Around = 6 + Caption = 'Test for string field' + ParentColor = False + end + object RxMemoryData1: TRxMemoryData + FieldDefs = < + item + Name = 'FIELD_ID' + DataType = ftAutoInc + Precision = 0 + Size = 0 + end + item + Name = 'COLOR_STR' + DataType = ftString + Precision = 0 + Size = 50 + end + item + Name = 'COLOR_INT' + DataType = ftInteger + Precision = 0 + Size = 0 + end> + left = 368 + top = 160 + object RxMemoryData1FIELD_ID: TAutoIncField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'FIELD_ID' + Index = 0 + LookupCache = False + ProviderFlags = [pfInWhere] + ReadOnly = False + Required = False + end + object RxMemoryData1COLOR_STR: TStringField + DisplayWidth = 50 + FieldKind = fkData + FieldName = 'COLOR_STR' + Index = 1 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 50 + end + object RxMemoryData1COLOR_INT: TLongintField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'COLOR_INT' + Index = 2 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + end + object Datasource1: TDatasource + DataSet = RxMemoryData1 + left = 336 + top = 160 + end +end diff --git a/components/rx/version/2.1/Demos/RxDBColorBox/unit1.pas b/components/rx/version/2.1/Demos/RxDBColorBox/unit1.pas new file mode 100644 index 000000000..7b5eb2c3e --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDBColorBox/unit1.pas @@ -0,0 +1,57 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, DbCtrls, + StdCtrls, db, rxmemds, rxdbgrid, RxDBColorBox; + +type + + { TForm1 } + + TForm1 = class(TForm) + Datasource1: TDatasource; + DBNavigator1: TDBNavigator; + Label1: TLabel; + Label2: TLabel; + RxDBColorBox1: TRxDBColorBox; + RxDBColorBox2: TRxDBColorBox; + RxDBGrid1: TRxDBGrid; + RxMemoryData1: TRxMemoryData; + RxMemoryData1COLOR_INT: TLongintField; + RxMemoryData1COLOR_STR: TStringField; + RxMemoryData1FIELD_ID: TAutoIncField; + procedure FormCreate(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.lfm} + +{ TForm1 } + +procedure TForm1.FormCreate(Sender: TObject); +begin + RxMemoryData1.Open; + RxMemoryData1.Append; + RxMemoryData1COLOR_STR.AsString:='clWhite'; + RxMemoryData1COLOR_INT.AsInteger:=Integer(clGreen); + RxMemoryData1.Post; + RxMemoryData1.Append; + RxMemoryData1COLOR_STR.AsString:='clGreen'; + RxMemoryData1COLOR_INT.AsInteger:=Integer(clRed); + RxMemoryData1.Post; +end; + +end. + diff --git a/components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.ico b/components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.ico new file mode 100644 index 0000000000000000000000000000000000000000..703e3aed1beeaee6cec4fc48326ce55f33a5aee9 GIT binary patch literal 766 zcmZuvyH3L}6g>eHdkYd0YdbRX2O#kynLJkB%!YxXp5kB1r*x`1RUI>+nsaR@1;llZ z?>)IMzkr5gy}p6S;R?8?ejwJwGtr><K;Qr30e<klD9$tqk8vF7NclrbVi6qjOQs^q z+1V8B081>Q+TN-qf=q^;f2h__`X!?;ysa5zo8xiMh*Hm*%^`$gZ&Ynzbf63dIiWTE zBs}a{k{RT2=2E~KJ>`I*7BD(SuS)^?4a-e{aHA@Z>cS!IYP{6TJg^1p)qZTp7MK3y zF$&M|C1K)vtC(IYwk6#;?w5gO&Jpu@z&Yr!g{F@&9(luIIcQ!2Z5>>dS8Qbi>|Vq} z|K?UJ<#gaZW|<Hre7V#vozPwGIIrdJl+LS^PIoEonv{I=#^k3nu==7VI-aCD6?D|s oJ3-^A1yDczv{#ZlGWP>`VXt=r%maOo#I2X-%o==r+fT0g8}IbP@Bjb+ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.lpi b/components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.lpi new file mode 100644 index 000000000..9af1e4d2c --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.lpi @@ -0,0 +1,973 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <General> + <Flags> + <LRSInOutputDirectory Value="False"/> + </Flags> + <MainUnit Value="0"/> + <Title Value="RxDBGrid demo"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + <ActiveWindowIndexAtStart Value="0"/> + </General> + <VersionInfo> + <UseVersionInfo Value="True"/> + <AutoIncrementBuild Value="True"/> + <MajorVersionNr Value="3"/> + <MinorVersionNr Value="4"/> + <RevisionNr Value="1"/> + <BuildNr Value="1"/> + <StringTable ProductName="Demo application from RXFPC library" LegalCopyright="Lagunov Aleksey, GPL 2" ProductVersion="3.1.1.0" FileDescription="Demo application from RXFPC library"/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="4"> + <Item1> + <PackageName Value="IDEIntf"/> + <MinVersion Major="1" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="FCL"/> + <MinVersion Major="1" Valid="True"/> + </Item2> + <Item3> + <PackageName Value="LCL"/> + </Item3> + <Item4> + <PackageName Value="rxnew"/> + <MinVersion Major="1" Release="18" Build="56" Valid="True"/> + </Item4> + </RequiredPackages> + <Units Count="96"> + <Unit0> + <Filename Value="RxDBGridDemo.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="RxDBGridDemo"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="9" Y="16"/> + <UsageCount Value="95"/> + </Unit0> + <Unit1> + <Filename Value="rxdbgridmainunit.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="RxDBGridMainForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="RxDBGridMainUnit"/> + <EditorIndex Value="0"/> + <WindowIndex Value="0"/> + <TopLine Value="134"/> + <CursorPos X="1" Y="145"/> + <UsageCount Value="95"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit1> + <Unit2> + <Filename Value="../../../fpcsrc/fcl/db/db.pp"/> + <UnitName Value="db"/> + <TopLine Value="1112"/> + <CursorPos X="17" Y="1116"/> + <UsageCount Value="5"/> + </Unit2> + <Unit3> + <Filename Value="../../../fpcsrc/fcl/db/dataset.inc"/> + <TopLine Value="1134"/> + <CursorPos X="21" Y="1139"/> + <UsageCount Value="5"/> + </Unit3> + <Unit4> + <Filename Value="../../rxmemds.pas"/> + <UnitName Value="rxmemds"/> + <TopLine Value="337"/> + <CursorPos X="1" Y="356"/> + <UsageCount Value="5"/> + </Unit4> + <Unit5> + <Filename Value="../../rxdbgrid.pas"/> + <UnitName Value="rxdbgrid"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="1"/> + <WindowIndex Value="0"/> + <TopLine Value="3955"/> + <CursorPos X="19" Y="3985"/> + <UsageCount Value="16"/> + <Bookmarks Count="2"> + <Item0 X="1" Y="4281" ID="1"/> + <Item1 X="1" Y="2506" ID="2"/> + </Bookmarks> + <Loaded Value="True"/> + </Unit5> + <Unit6> + <Filename Value="../../../lcl/lresources.pp"/> + <UnitName Value="LResources"/> + <TopLine Value="2626"/> + <CursorPos X="1" Y="2644"/> + <UsageCount Value="5"/> + </Unit6> + <Unit7> + <Filename Value="../../../lcl/grids.pas"/> + <UnitName Value="Grids"/> + <TopLine Value="385"/> + <CursorPos X="33" Y="394"/> + <UsageCount Value="6"/> + </Unit7> + <Unit8> + <Filename Value="../../../lcl/dbgrids.pas"/> + <UnitName Value="DBGrids"/> + <TopLine Value="187"/> + <CursorPos X="30" Y="199"/> + <UsageCount Value="6"/> + </Unit8> + <Unit9> + <Filename Value="../../rxpopupunit.pas"/> + <UnitName Value="rxpopupunit"/> + <TopLine Value="246"/> + <CursorPos X="15" Y="249"/> + <UsageCount Value="6"/> + </Unit9> + <Unit10> + <Filename Value="../../../lcl/include/wincontrol.inc"/> + <TopLine Value="7217"/> + <CursorPos X="1" Y="7236"/> + <UsageCount Value="5"/> + </Unit10> + <Unit11> + <Filename Value="../../../lcl/include/control.inc"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="5"/> + </Unit11> + <Unit12> + <Filename Value="../../../lcl/lclmessageglue.pas"/> + <UnitName Value="LCLMessageGlue"/> + <TopLine Value="92"/> + <CursorPos X="46" Y="96"/> + <UsageCount Value="5"/> + </Unit12> + <Unit13> + <Filename Value="../../../lcl/controls.pp"/> + <UnitName Value="Controls"/> + <TopLine Value="1779"/> + <CursorPos X="60" Y="1798"/> + <UsageCount Value="5"/> + </Unit13> + <Unit14> + <Filename Value="../../../install/2/rxdbgrid.diff"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="21"/> + <UsageCount Value="5"/> + <DefaultSyntaxHighlighter Value="Diff"/> + </Unit14> + <Unit15> + <Filename Value="../../../lcl/interfaces/gtk/gtkdevicecontext.inc"/> + <TopLine Value="626"/> + <CursorPos X="1" Y="644"/> + <UsageCount Value="5"/> + </Unit15> + <Unit16> + <Filename Value="../../../lcl/interfaces/gtk2/gtk2winapi.inc"/> + <TopLine Value="559"/> + <CursorPos X="1" Y="577"/> + <UsageCount Value="5"/> + </Unit16> + <Unit17> + <Filename Value="../../rxdbgrid_columsunit.pas"/> + <ComponentName Value="rxDBGridColumsForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="rxdbgrid_columsunit"/> + <TopLine Value="26"/> + <CursorPos X="46" Y="45"/> + <UsageCount Value="5"/> + </Unit17> + <Unit18> + <Filename Value="../../rxdconst.pas"/> + <UnitName Value="rxdconst"/> + <TopLine Value="126"/> + <CursorPos X="15" Y="155"/> + <UsageCount Value="5"/> + </Unit18> + <Unit19> + <Filename Value="../../../lcl/include/winapih.inc"/> + <TopLine Value="211"/> + <CursorPos X="10" Y="223"/> + <UsageCount Value="5"/> + </Unit19> + <Unit20> + <Filename Value="../../backup/rxdbgrid.pas"/> + <UnitName Value="rxdbgrid"/> + <TopLine Value="1207"/> + <CursorPos X="1" Y="1227"/> + <UsageCount Value="5"/> + </Unit20> + <Unit21> + <Filename Value="../../rxaboutdialog.pas"/> + <UnitName Value="RxAboutDialog"/> + <TopLine Value="10"/> + <CursorPos X="73" Y="30"/> + <UsageCount Value="6"/> + </Unit21> + <Unit22> + <Filename Value="../../registerrx.pas"/> + <UnitName Value="registerrx"/> + <TopLine Value="174"/> + <CursorPos X="18" Y="201"/> + <UsageCount Value="6"/> + </Unit22> + <Unit23> + <Filename Value="../../../ideintf/idewindowintf.pas"/> + <UnitName Value="IDEWindowIntf"/> + <TopLine Value="31"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="5"/> + </Unit23> + <Unit24> + <Filename Value="../../../lcl/extdlgs.pas"/> + <UnitName Value="ExtDlgs"/> + <TopLine Value="105"/> + <CursorPos X="35" Y="122"/> + <UsageCount Value="5"/> + </Unit24> + <Unit25> + <Filename Value="../../../lcl/dialogs.pp"/> + <UnitName Value="Dialogs"/> + <TopLine Value="62"/> + <CursorPos X="21" Y="79"/> + <UsageCount Value="5"/> + </Unit25> + <Unit26> + <Filename Value="../../../lcl/include/commondialog.inc"/> + <TopLine Value="80"/> + <CursorPos X="17" Y="84"/> + <UsageCount Value="5"/> + </Unit26> + <Unit27> + <Filename Value="../../../lcl/widgetset/wsdialogs.pp"/> + <UnitName Value="WSDialogs"/> + <TopLine Value="132"/> + <CursorPos X="3" Y="136"/> + <UsageCount Value="5"/> + </Unit27> + <Unit28> + <Filename Value="../../rxaboutformunit.pas"/> + <ComponentName Value="rxAboutFormForm"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="rxAboutFormUnit"/> + <TopLine Value="41"/> + <CursorPos X="26" Y="55"/> + <UsageCount Value="6"/> + </Unit28> + <Unit29> + <Filename Value="../../rxversinfo.pas"/> + <UnitName Value="RxVersInfo"/> + <TopLine Value="72"/> + <CursorPos X="49" Y="105"/> + <UsageCount Value="5"/> + </Unit29> + <Unit30> + <Filename Value="../../../lcl/buttonpanel.pas"/> + <UnitName Value="ButtonPanel"/> + <TopLine Value="11"/> + <CursorPos X="6" Y="15"/> + <UsageCount Value="6"/> + </Unit30> + <Unit31> + <Filename Value="../../../lcl/extctrls.pp"/> + <UnitName Value="ExtCtrls"/> + <TopLine Value="604"/> + <CursorPos X="15" Y="607"/> + <UsageCount Value="6"/> + </Unit31> + <Unit32> + <Filename Value="../../../lcl/include/customimage.inc"/> + <TopLine Value="67"/> + <CursorPos X="3" Y="69"/> + <UsageCount Value="6"/> + </Unit32> + <Unit33> + <Filename Value="../../../install/fpcsrc/rtl/objpas/classes/classesh.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="426"/> + <CursorPos X="17" Y="448"/> + <UsageCount Value="13"/> + </Unit33> + <Unit34> + <Filename Value="../../../smsprog/sms_send_deamon/smsSendGui/smssendaboutunit.pas"/> + <ComponentName Value="smsSendAboutForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="smsSendAboutUnit"/> + <TopLine Value="28"/> + <CursorPos X="1" Y="57"/> + <UsageCount Value="6"/> + </Unit34> + <Unit35> + <Filename Value="../../../smsprog/sms_shared/smsabstarctconstunit.pas"/> + <UnitName Value="smsAbstarctConstUnit"/> + <TopLine Value="1"/> + <CursorPos X="42" Y="11"/> + <UsageCount Value="6"/> + </Unit35> + <Unit36> + <Filename Value="../../rxconst.pas"/> + <UnitName Value="rxconst"/> + <TopLine Value="34"/> + <CursorPos X="3" Y="51"/> + <UsageCount Value="6"/> + </Unit36> + <Unit37> + <Filename Value="../../../rxnet/demo/send_demo/smssendparamsunit.pas"/> + <ComponentName Value="smssendParamsForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="smssendParamsUnit"/> + <TopLine Value="49"/> + <CursorPos X="34" Y="60"/> + <UsageCount Value="6"/> + </Unit37> + <Unit38> + <Filename Value="../../../rxnet/demo/send_demo/smssenddemomainunit.pas"/> + <ComponentName Value="smsSendDemoMainForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="smsSendDemoMainUnit"/> + <TopLine Value="41"/> + <CursorPos X="105" Y="29"/> + <UsageCount Value="6"/> + </Unit38> + <Unit39> + <Filename Value="../../../rxnet/demo/send_demo/send_demo.lpr"/> + <UnitName Value="send_demo"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="6"/> + </Unit39> + <Unit40> + <Filename Value="../../../doceditor/lazdeopts.pp"/> + <UnitName Value="LazDEOpts"/> + <TopLine Value="43"/> + <CursorPos X="1" Y="56"/> + <UsageCount Value="6"/> + </Unit40> + <Unit41> + <Filename Value="../../rxfileutils.pas"/> + <UnitName Value="rxFileUtils"/> + <TopLine Value="18"/> + <CursorPos X="33" Y="42"/> + <UsageCount Value="6"/> + </Unit41> + <Unit42> + <Filename Value="../../registerrxdb.pas"/> + <UnitName Value="RegisterRxDB"/> + <TopLine Value="2"/> + <CursorPos X="20" Y="17"/> + <UsageCount Value="6"/> + </Unit42> + <Unit43> + <Filename Value="../../../ideintf/dbpropedits.pas"/> + <UnitName Value="DBPropEdits"/> + <TopLine Value="13"/> + <CursorPos X="6" Y="19"/> + <UsageCount Value="6"/> + </Unit43> + <Unit44> + <Filename Value="../../../ideintf/propedits.pp"/> + <UnitName Value="PropEdits"/> + <TopLine Value="1"/> + <CursorPos X="6" Y="26"/> + <UsageCount Value="6"/> + </Unit44> + <Unit45> + <Filename Value="../../rxdbgrid_findunit.pas"/> + <ComponentName Value="rxDBGridFindForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="rxdbgrid_findunit"/> + <TopLine Value="78"/> + <CursorPos X="1" Y="94"/> + <UsageCount Value="6"/> + </Unit45> + <Unit46> + <Filename Value="../../rxtoolbar.pas"/> + <UnitName Value="rxtoolbar"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="52" Y="26"/> + <UsageCount Value="8"/> + </Unit46> + <Unit47> + <Filename Value="../../../synedit/synedit.pp"/> + <UnitName Value="SynEdit"/> + <WindowIndex Value="0"/> + <TopLine Value="5699"/> + <CursorPos X="1" Y="5702"/> + <UsageCount Value="13"/> + </Unit47> + <Unit48> + <Filename Value="../../../synedit/syneditkeycmds.pp"/> + <UnitName Value="SynEditKeyCmds"/> + <WindowIndex Value="0"/> + <TopLine Value="750"/> + <CursorPos X="3" Y="752"/> + <UsageCount Value="9"/> + </Unit48> + <Unit49> + <Filename Value="../../../install/fpcsrc/rtl/objpas/classes/classes.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="429"/> + <CursorPos X="33" Y="447"/> + <UsageCount Value="6"/> + </Unit49> + <Unit50> + <Filename Value="../../../lcl/actnlist.pas"/> + <UnitName Value="ActnList"/> + <WindowIndex Value="0"/> + <TopLine Value="206"/> + <CursorPos X="33" Y="224"/> + <UsageCount Value="6"/> + </Unit50> + <Unit51> + <Filename Value="../../../lcl/lclproc.pas"/> + <UnitName Value="LCLProc"/> + <WindowIndex Value="0"/> + <TopLine Value="1154"/> + <CursorPos X="10" Y="1165"/> + <UsageCount Value="6"/> + </Unit51> + <Unit52> + <Filename Value="rxdbgridmainunit.lfm"/> + <WindowIndex Value="0"/> + <TopLine Value="133"/> + <CursorPos X="5" Y="103"/> + <UsageCount Value="7"/> + <DefaultSyntaxHighlighter Value="LFM"/> + </Unit52> + <Unit53> + <Filename Value="../../../install/fpcsrc/rtl/objpas/classes/collect.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="286"/> + <CursorPos X="1" Y="288"/> + <UsageCount Value="12"/> + </Unit53> + <Unit54> + <Filename Value="../../../wine/1/1/rx.diff"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="9"/> + <UsageCount Value="7"/> + <DefaultSyntaxHighlighter Value="Diff"/> + </Unit54> + <Unit55> + <Filename Value="../../../install/fpcsrc/packages/fcl-db/src/base/db.pas"/> + <UnitName Value="db"/> + <WindowIndex Value="0"/> + <TopLine Value="541"/> + <CursorPos X="1" Y="569"/> + <UsageCount Value="7"/> + </Unit55> + <Unit56> + <Filename Value="../../../lcl/include/canvas.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="1116"/> + <CursorPos X="1" Y="1132"/> + <UsageCount Value="8"/> + </Unit56> + <Unit57> + <Filename Value="../../exsortsql.pas"/> + <UnitName Value="exsortsql"/> + <WindowIndex Value="0"/> + <TopLine Value="69"/> + <CursorPos X="49" Y="3"/> + <UsageCount Value="7"/> + </Unit57> + <Unit58> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <UnitName Value="DBGrids"/> + <EditorIndex Value="2"/> + <WindowIndex Value="0"/> + <TopLine Value="3021"/> + <CursorPos X="1" Y="3049"/> + <UsageCount Value="18"/> + <Loaded Value="True"/> + </Unit58> + <Unit59> + <Filename Value="../../../../lcl/grids.pas"/> + <UnitName Value="Grids"/> + <EditorIndex Value="3"/> + <WindowIndex Value="0"/> + <TopLine Value="1054"/> + <CursorPos X="14" Y="1068"/> + <UsageCount Value="21"/> + <Bookmarks Count="1"> + <Item0 X="23" Y="7562" ID="3"/> + </Bookmarks> + <Loaded Value="True"/> + </Unit59> + <Unit60> + <Filename Value="../../../../../../install/fpcsrc/rtl/objpas/classes/classesh.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="1554"/> + <CursorPos X="38" Y="1569"/> + <UsageCount Value="7"/> + </Unit60> + <Unit61> + <Filename Value="../../../../lcl/buttons.pp"/> + <UnitName Value="Buttons"/> + <WindowIndex Value="0"/> + <TopLine Value="333"/> + <CursorPos X="3" Y="360"/> + <UsageCount Value="7"/> + </Unit61> + <Unit62> + <Filename Value="../../../../../../install/fpcsrc/packages/fcl-db/src/base/db.pas"/> + <UnitName Value="db"/> + <WindowIndex Value="0"/> + <TopLine Value="1588"/> + <CursorPos X="15" Y="1609"/> + <UsageCount Value="7"/> + </Unit62> + <Unit63> + <Filename Value="../../vclutils.pas"/> + <UnitName Value="vclutils"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="35"/> + <UsageCount Value="9"/> + </Unit63> + <Unit64> + <Filename Value="../../../../lcl/include/canvas.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="1317"/> + <CursorPos X="1" Y="1338"/> + <UsageCount Value="7"/> + </Unit64> + <Unit65> + <Filename Value="../../../../lcl/graphics.pp"/> + <UnitName Value="Graphics"/> + <WindowIndex Value="0"/> + <TopLine Value="93"/> + <CursorPos X="3" Y="99"/> + <UsageCount Value="8"/> + </Unit65> + <Unit66> + <Filename Value="../../../../lcl/include/lclintf.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="132"/> + <CursorPos X="1" Y="155"/> + <UsageCount Value="7"/> + </Unit66> + <Unit67> + <Filename Value="../../../../lcl/interfaces/gtk2/gtk2lclintf.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="167"/> + <CursorPos X="1" Y="190"/> + <UsageCount Value="7"/> + </Unit67> + <Unit68> + <Filename Value="../../rxsortby.pas"/> + <ComponentName Value="rxSortByForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="rxsortby"/> + <WindowIndex Value="0"/> + <TopLine Value="50"/> + <CursorPos X="14" Y="65"/> + <UsageCount Value="9"/> + </Unit68> + <Unit69> + <Filename Value="../../rxfilterby.pas"/> + <ComponentName Value="rxFilterByForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="rxfilterby"/> + <WindowIndex Value="0"/> + <TopLine Value="315"/> + <CursorPos X="1" Y="350"/> + <UsageCount Value="7"/> + </Unit69> + <Unit70> + <Filename Value="../../../../../../install/source/fpcsrc/rtl/objpas/classes/classesh.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="72"/> + <CursorPos X="30" Y="95"/> + <UsageCount Value="11"/> + </Unit70> + <Unit71> + <Filename Value="../../../../../../install/source/fpcsrc/rtl/objpas/classes/stringl.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="593"/> + <CursorPos X="3" Y="598"/> + <UsageCount Value="7"/> + </Unit71> + <Unit72> + <Filename Value="../../rxstrutils.pas"/> + <UnitName Value="rxstrutils"/> + <WindowIndex Value="0"/> + <TopLine Value="140"/> + <CursorPos X="23" Y="168"/> + <UsageCount Value="7"/> + </Unit72> + <Unit73> + <Filename Value="../../rxlookup.pas"/> + <UnitName Value="rxlookup"/> + <WindowIndex Value="0"/> + <TopLine Value="1176"/> + <CursorPos X="3" Y="1196"/> + <UsageCount Value="14"/> + </Unit73> + <Unit74> + <Filename Value="../../../../../../install/source/fpcsrc/packages/fcl-db/src/base/db.pas"/> + <UnitName Value="db"/> + <WindowIndex Value="0"/> + <TopLine Value="1776"/> + <CursorPos X="14" Y="1796"/> + <UsageCount Value="14"/> + </Unit74> + <Unit75> + <Filename Value="../../../../../../install/source/fpcsrc/rtl/objpas/classes/collect.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="397"/> + <CursorPos X="3" Y="399"/> + <UsageCount Value="11"/> + </Unit75> + <Unit76> + <Filename Value="../../../../../../install/source/fpcsrc/rtl/objpas/classes/lists.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="131"/> + <CursorPos X="3" Y="133"/> + <UsageCount Value="11"/> + </Unit76> + <Unit77> + <Filename Value="../../rxsortmemds.pas"/> + <UnitName Value="rxsortmemds"/> + <WindowIndex Value="0"/> + <TopLine Value="16"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="8"/> + </Unit77> + <Unit78> + <Filename Value="../../../../lcl/controls.pp"/> + <UnitName Value="Controls"/> + <WindowIndex Value="0"/> + <TopLine Value="2126"/> + <CursorPos X="15" Y="2146"/> + <UsageCount Value="11"/> + </Unit78> + <Unit79> + <Filename Value="../../../../lcl/stdctrls.pp"/> + <UnitName Value="StdCtrls"/> + <WindowIndex Value="0"/> + <TopLine Value="233"/> + <CursorPos X="3" Y="254"/> + <UsageCount Value="9"/> + </Unit79> + <Unit80> + <Filename Value="../../../../lcl/lcltype.pp"/> + <UnitName Value="LCLType"/> + <WindowIndex Value="0"/> + <TopLine Value="1115"/> + <CursorPos X="3" Y="1136"/> + <UsageCount Value="9"/> + </Unit80> + <Unit81> + <Filename Value="../../../../lcl/include/customcontrol.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="70"/> + <CursorPos X="3" Y="79"/> + <UsageCount Value="9"/> + </Unit81> + <Unit82> + <Filename Value="../../../../lcl/include/wincontrol.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="7862"/> + <CursorPos X="3" Y="7901"/> + <UsageCount Value="11"/> + </Unit82> + <Unit83> + <Filename Value="../../../../../../install/source/fpcsrc/rtl/objpas/types.pp"/> + <UnitName Value="types"/> + <WindowIndex Value="0"/> + <TopLine Value="70"/> + <CursorPos X="16" Y="91"/> + <UsageCount Value="10"/> + </Unit83> + <Unit84> + <Filename Value="../../../../lcl/include/control.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="3955"/> + <CursorPos X="1" Y="3977"/> + <UsageCount Value="10"/> + </Unit84> + <Unit85> + <Filename Value="../../../../lcl/include/scrollingwincontrol.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="65"/> + <CursorPos X="1" Y="87"/> + <UsageCount Value="10"/> + </Unit85> + <Unit86> + <Filename Value="../../../../lcl/include/customform.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="732"/> + <CursorPos X="1" Y="761"/> + <UsageCount Value="10"/> + </Unit86> + <Unit87> + <Filename Value="../../../../lcl/editbtn.pas"/> + <UnitName Value="EditBtn"/> + <WindowIndex Value="0"/> + <TopLine Value="648"/> + <CursorPos X="1" Y="670"/> + <UsageCount Value="10"/> + </Unit87> + <Unit88> + <Filename Value="../../../../lcl/include/winapi.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="596"/> + <CursorPos X="1" Y="618"/> + <UsageCount Value="10"/> + </Unit88> + <Unit89> + <Filename Value="../../../../lcl/lclintf.pas"/> + <UnitName Value="LCLIntf"/> + <WindowIndex Value="0"/> + <TopLine Value="63"/> + <CursorPos X="39" Y="49"/> + <UsageCount Value="10"/> + </Unit89> + <Unit90> + <Filename Value="../../../../lcl/include/lclintfh.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="130"/> + <CursorPos X="1" Y="130"/> + <UsageCount Value="10"/> + </Unit90> + <Unit91> + <Filename Value="../../../../lcl/lmessages.pp"/> + <UnitName Value="LMessages"/> + <WindowIndex Value="0"/> + <TopLine Value="241"/> + <CursorPos X="1" Y="256"/> + <UsageCount Value="11"/> + </Unit91> + <Unit92> + <Filename Value="../../../../lcl/forms.pp"/> + <UnitName Value="Forms"/> + <WindowIndex Value="0"/> + <TopLine Value="248"/> + <CursorPos X="16" Y="285"/> + <UsageCount Value="11"/> + </Unit92> + <Unit93> + <Filename Value="../../../../lcl/include/customframe.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="184"/> + <CursorPos X="3" Y="186"/> + <UsageCount Value="10"/> + </Unit93> + <Unit94> + <Filename Value="../../../../lcl/lclversion.pas"/> + <UnitName Value="LCLVersion"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="11"/> + </Unit94> + <Unit95> + <Filename Value="../../rx.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="42"/> + <CursorPos X="1" Y="63"/> + <UsageCount Value="10"/> + </Unit95> + </Units> + <JumpHistory Count="29" HistoryIndex="28"> + <Position1> + <Filename Value="rxdbgridmainunit.pas"/> + <Caret Line="271" Column="1" TopLine="248"/> + </Position1> + <Position2> + <Filename Value="rxdbgridmainunit.pas"/> + <Caret Line="9" Column="7" TopLine="1"/> + </Position2> + <Position3> + <Filename Value="../../rxdbgrid.pas"/> + <Caret Line="46" Column="3" TopLine="25"/> + </Position3> + <Position4> + <Filename Value="../../rxdbgrid.pas"/> + <Caret Line="33" Column="1" TopLine="28"/> + </Position4> + <Position5> + <Filename Value="rxdbgridmainunit.pas"/> + <Caret Line="274" Column="1" TopLine="244"/> + </Position5> + <Position6> + <Filename Value="rxdbgridmainunit.pas"/> + <Caret Line="151" Column="27" TopLine="149"/> + </Position6> + <Position7> + <Filename Value="../../rxdbgrid.pas"/> + <Caret Line="782" Column="14" TopLine="768"/> + </Position7> + <Position8> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="473" Column="82" TopLine="459"/> + </Position8> + <Position9> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="568" Column="27" TopLine="543"/> + </Position9> + <Position10> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="3047" Column="30" TopLine="3020"/> + </Position10> + <Position11> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="3048" Column="20" TopLine="3021"/> + </Position11> + <Position12> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="429" Column="26" TopLine="415"/> + </Position12> + <Position13> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="3036" Column="35" TopLine="3021"/> + </Position13> + <Position14> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="429" Column="26" TopLine="415"/> + </Position14> + <Position15> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="3045" Column="25" TopLine="3018"/> + </Position15> + <Position16> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="429" Column="15" TopLine="415"/> + </Position16> + <Position17> + <Filename Value="../../../../lcl/grids.pas"/> + <Caret Line="984" Column="26" TopLine="971"/> + </Position17> + <Position18> + <Filename Value="../../../../lcl/grids.pas"/> + <Caret Line="1204" Column="35" TopLine="1177"/> + </Position18> + <Position19> + <Filename Value="../../../../lcl/grids.pas"/> + <Caret Line="1228" Column="26" TopLine="1202"/> + </Position19> + <Position20> + <Filename Value="../../../../lcl/grids.pas"/> + <Caret Line="1352" Column="79" TopLine="1327"/> + </Position20> + <Position21> + <Filename Value="../../../../lcl/grids.pas"/> + <Caret Line="1457" Column="27" TopLine="1432"/> + </Position21> + <Position22> + <Filename Value="../../../../lcl/grids.pas"/> + <Caret Line="1673" Column="27" TopLine="1648"/> + </Position22> + <Position23> + <Filename Value="../../../../lcl/grids.pas"/> + <Caret Line="3380" Column="34" TopLine="3353"/> + </Position23> + <Position24> + <Filename Value="../../../../lcl/grids.pas"/> + <Caret Line="6193" Column="20" TopLine="6167"/> + </Position24> + <Position25> + <Filename Value="../../../../lcl/grids.pas"/> + <Caret Line="6205" Column="20" TopLine="6179"/> + </Position25> + <Position26> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="429" Column="26" TopLine="415"/> + </Position26> + <Position27> + <Filename Value="../../../../lcl/dbgrids.pas"/> + <Caret Line="3040" Column="21" TopLine="3021"/> + </Position27> + <Position28> + <Filename Value="../../rxdbgrid.pas"/> + <Caret Line="3977" Column="3" TopLine="3954"/> + </Position28> + <Position29> + <Filename Value="rxdbgridmainunit.pas"/> + <Caret Line="151" Column="27" TopLine="149"/> + </Position29> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <Target> + <Filename Value="RxDBGridDemo"/> + </Target> + <SearchPaths> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + <SrcPath Value="$(LazarusDir)/lcl;$(LazarusDir)/lcl/interfaces/$(LCLWidgetType)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <UseAnsiStrings Value="False"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Watches Count="5"> + <Item1> + <Expression Value="K"/> + </Item1> + <Item2> + <Expression Value="H"/> + </Item2> + <Item3> + <Expression Value="I"/> + </Item3> + <Item4> + <Expression Value="S"/> + </Item4> + <Item5> + <Expression Value="K1"/> + </Item5> + </Watches> + <Exceptions Count="2"> + <Item1> + <Name Value="EInvalidOp"/> + </Item1> + <Item2> + <Name Value="EConvertError"/> + </Item2> + </Exceptions> + </Debugging> + <EditorMacros Count="0"/> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.lpr b/components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.lpr new file mode 100644 index 000000000..4d2c139fc --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.lpr @@ -0,0 +1,23 @@ +program RxDBGridDemo; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, + RxDBGridMainUnit; + +{$R RxDBGridDemo.res} + +begin + LocalizeApp; + // + Application.Title:='RxDBGrid demo'; + Application.Initialize; + Application.CreateForm(TRxDBGridMainForm, RxDBGridMainForm); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.res b/components/rx/version/2.1/Demos/RxDBGrid/RxDBGridDemo.res new file mode 100644 index 0000000000000000000000000000000000000000..d75090b2d06525c104d3f995e8b65c03879e0f5b GIT binary patch literal 2540 zcmb_d&2Jk;6n`dGY>*(4Kq?2MtX3Q<)YwkrMzpdMqR=9Xw2j&j;6yg-S!dPV*=1*K z$0rON;#2$=A>~i$0YyEP9CJWjesA`}PKhcGJZC=My!U?ZYbHxXWMCvoI<UP)w-$2w zr_d>B+4AyCrL}e9d&WRS$_-@OT&p!qLr6R5y0X_czuSMb`lV^8*pgk#3#4e9BcaT# z%@03lSxO22$Qu~|kg9F=Bl$qt$HKSNs_)uSpaLgewFCcwrTp4p%`|*Vx{grs!Mry> z83k6SD`f1(qiX@x8XQy@1-4Ksh_)m9*o}o9_alV!g=t93$7Uz+LradHfT`_8LAP(m zdjDh4kG8|mG~!VRwV^B5@0xY(wJVezxnYdVH(AZF!q9VViw}%Bp>ZrCQES!bjxzgD zNJMOpm^E5mk@E3&RvLYLLw56_WZ^%~D^~m7mEB;dYDmZr<myf!<0$ZyIjhMASLEF_ z3HwLL<XbV?4_*lLb>rUsdq*41wPw?{owcrG8lEM4eXFNSsLNq+f;S{EJ5KX##Zh0y z9q9!BvGeO@S{^0reuU;`Rf)vUeOw07-HY6T>xrIFsl;d%qK7B2;dbnbf$$8E=eB97 zjvOGb$Ta%yw$0a~Z90~xMA}%iqFz9}h2E;qhtaAR$-sB3p5N(Bx?Q}R<s0A4?S&>D z(E&ZDpD;h9XV`V<DLnz-!Tbn&ra#Jmy&)=5nHDhf55SnWw3KjO26vq%@3F>niYX$O zB=vyil1Bo_k{k-4-qkt{YEpylV>A&1M|4b|!*&mr0d=WQHc+0BMLw*VzQ*c9X5cKu z&jYfJeT+2#x&eH)^|5<KKfv=I?O@M(N03+;BjD`QE%@05S`TL)bONA_Aa!wa3_OC= z!oCmGfCj+W);YW&1*;L=!O1s3-^F^DLqq)4f5m<P-3S(GbVTb^qqS@_U=!+m^ZIah z3i)spVUZJK|6h53h6qbKTVK~y!i!=DAg+8a3z54-mh-h|orcaakN55D()^l5jyWdx zJ=T?wy4u%K?`XfXUhE@(3*F~VbHBLaIi<Q!b%lDUQi_+y!(4t-xMqA04>U%uF}r~r zTNxUuHwhmeH1m7J{@ySDS^fko_bEv}qQ|%a{5CqMAHS5G=D$bmu|$T!$V9L7E$7() zmm~`}zeUJc{uKtlG)=I%nZ`u;qwzRhFk_1`rt|Z22>3(FOOh^_({C#uYN`ywe9P+) zmk^_%%Hm;IDKx<GFU$`riw@|pusBTl#moYneEs?Y8Yy1r$XAoe*@aWdTsYMU=*%H) zu;?6KF+aHgBrL#BbDjZ0r+TFo&N2X}I-QQIDFEaS;I4?6cPbe_t;~30cbPupX?_A1 zz{~u>9bC-(gP%^B*ZQf!72?gvIb_7e)O<KZzEDhOt&!J*hC`}OPN@nRbjG9;o)m>f z6R@vNh8dmEDJKB$DUGRmoe!&(%CI^~GP<HEs~1gON-k-M8~qMS-mE0a<;O|#vXms_ z(l5~7!aw(wzp-L0p^}x$bSz<Ac*&zQ#>#^#^K$H0*!CQ@zY!h;(XSW;JA$l%u{`GM M3=CYr)87&IKTktib^rhX literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxDBGrid/docs/COPYING.GPL.txt b/components/rx/version/2.1/Demos/RxDBGrid/docs/COPYING.GPL.txt new file mode 100644 index 000000000..c79e32906 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDBGrid/docs/COPYING.GPL.txt @@ -0,0 +1,340 @@ + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/components/rx/version/2.1/Demos/RxDBGrid/rxdbgridmainunit.lfm b/components/rx/version/2.1/Demos/RxDBGrid/rxdbgridmainunit.lfm new file mode 100644 index 000000000..583a58852 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDBGrid/rxdbgridmainunit.lfm @@ -0,0 +1,1315 @@ +object RxDBGridMainForm: TRxDBGridMainForm + Left = 306 + Height = 721 + Top = 142 + Width = 1187 + ActiveControl = Panel1 + Caption = 'RxDBGrid Demo' + ClientHeight = 698 + ClientWidth = 1187 + Menu = MainMenu1 + OnCreate = FormCreate + ShowHint = True + LCLVersion = '1.1' + object RxDBGrid1: TRxDBGrid + Left = 0 + Height = 634 + Top = 64 + Width = 1187 + TitleButtons = True + AutoSort = True + Columns = < + item + Title.Alignment = taCenter + Title.Caption = '...' + Title.Orientation = toHorizontal + Title.Hint = 'DEVELOPER' + Title.ShowHint = True + Width = 50 + FieldName = 'DEVELOPER_ID' + ImageList = ImageList1 + KeyList.Strings = ( + '1=0' + '2=1' + '3=2' + ) + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + EditButtons = <> + end + item + Title.Alignment = taCenter + Title.Caption = 'Code - ID' + Title.Orientation = toVertical90 + Title.Hint = 'Code - ID' + Title.ShowHint = True + Width = 100 + FieldName = 'ID' + Footer.Alignment = taRightJustify + Footer.DisplayFormat = 'Count: %d' + Footer.ValueType = fvtCount + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.Color = clLime + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + EditButtons = <> + end + item + Title.Alignment = taCenter + Title.Caption = 'Developer' + Title.Orientation = toHorizontal + Title.Hint = 'Developer full name' + Title.ShowHint = True + Width = 136 + FieldName = 'Developer' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.Color = clLime + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + EditButtons = <> + end + item + Title.Alignment = taCenter + Title.Caption = 'Computer software (all info) - Программное обеÑпечение|Name' + Title.Orientation = toHorizontal + Title.Hint = 'Product name' + Title.ShowHint = True + Width = 110 + FieldName = 'NAME' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.Color = clLime + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + EditButtons = <> + WordWrap = True + end + item + Title.Alignment = taCenter + Title.Caption = 'Computer software (all info) - Программное обеÑпечение|Cost' + Title.Orientation = toHorizontal + Title.Hint = 'Product price' + Title.ShowHint = True + Width = 136 + FieldName = 'PRICE' + DisplayFormat = '#,##0.00' + Footer.Alignment = taRightJustify + Footer.DisplayFormat = '#,##0.00' + Footer.FieldName = 'PRICE' + Footer.ValueType = fvtSum + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.Color = clLime + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + EditButtons = < + item + Glyph.Data = { + CE000000424DCE0000000000000076000000280000000B0000000B0000000100 + 0400000000005800000000000000000000000000000000000000000000000000 + 8000008000000080800080000000800080008080000080808000C0C0C0000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00EEEEEEEEEEE0 + 0000EEEEEEEEEEE00000EE00EEEE00E00000EEE00EE00EE00000EEEE0000EEE0 + 0000EEEEE00EEEE00000EEEE0000EEE00000EEE00EE00EE00000EE00EEEE00E0 + 0000EEEEEEEEEEE00000EEEEEEEEEEE00000 + } + Hint = 'Clear value' + OnClick = TRxColumnEditButtons2Click + end> + end + item + Title.Alignment = taCenter + Title.Caption = 'Computer software (all info) - Программное обеÑпечение|Date Present' + Title.Orientation = toHorizontal + Title.Hint = 'Soft date present...' + Title.ShowHint = True + Width = 136 + FieldName = 'Date_Present' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + EditButtons = <> + end + item + Title.Alignment = taCenter + Title.Caption = 'DEVELOPER_ID' + Title.Orientation = toHorizontal + Title.Hint = 'DEVELOPER' + Title.ShowHint = True + Width = 141 + FieldName = 'DEVELOPER_ID' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + EditButtons = <> + end + item + ButtonStyle = cbsPickList + PickList.Strings = ( + '' + 'Positive' + 'Negative' + ) + Title.Alignment = taCenter + Title.Caption = 'Rait' + Title.Orientation = toHorizontal + FieldName = 'RAIT' + Filter.Font.Style = [fsItalic] + Filter.DropDownRows = 0 + Filter.EmptyValue = '(Ðет)' + Filter.EmptyFont.Style = [fsItalic] + Filter.ItemIndex = -1 + DirectInput = False + EditButtons = < + item + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000000000000000000000000000000000 + 8000008000000080800080000000800080008080000080808000C0C0C0000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00666666006666 + 666666666077066666666666077B06666666600077B0700F766607777B0770FF + 007607BBB070000FFF067B0BB0077770F0060BBB70077700FF07607000077770 + FFF76660007777770F06666000077070000766600007770B00B0666000000007 + BB06666600000000006666666000066666666666666666666666 + } + Hint = 'ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°' + Width = 16 + OnClick = TRxColumnEditButtons0Click + end + item + Glyph.Data = { + C6010000424DC60100000000000036000000280000000A0000000A0000000100 + 2000000000009001000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000808080FFFFFF + FFFF000000000000000000000000000000000000000000000000000000008080 + 80FF0000000000000000FFFFFFFF000000000000000000000000000000000000 + 000000000000808080FF0000000000000000FFFFFFFF00000000000000000000 + 00000000000000000000808080FF00000000000000000000000000000000FFFF + FFFF00000000000000000000000000000000808080FF00000000000000000000 + 000000000000FFFFFFFF000000000000000000000000808080FF000000000000 + 000000000000000000000000000000000000FFFFFFFF00000000000000008080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FFFFFFFFFF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000 + } + Hint = 'Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°' + OnClick = TRxColumnEditButtons1Click + end> + end> + KeyStrokes = < + item + Command = rxgcShowFindDlg + ShortCut = 57414 + Enabled = True + end + item + Command = rxgcShowColumnsDlg + ShortCut = 16471 + Enabled = True + end + item + Command = rxgcShowFilterDlg + ShortCut = 16468 + Enabled = True + end + item + Command = rxgcShowSortDlg + ShortCut = 16467 + Enabled = True + end + item + Command = rxgcShowQuickFilter + ShortCut = 16465 + Enabled = True + end + item + Command = rxgcHideQuickFilter + ShortCut = 16456 + Enabled = True + end> + FooterOptions.Active = True + FooterOptions.Color = clYellow + FooterOptions.RowCount = 1 + PropertyStorage = XMLPropStorage1 + Version = 1 + OptionsRx = [rdgAllowColumnsForm, rdgAllowDialogFind, rdgHighlightFocusCol, rdgHighlightFocusRow, rdgDblClickOptimizeColWidth, rdgFooterRows, rdgXORColSizing, rdgMultiTitleLines, rdgAllowQuickSearch, rdgAllowQuickFilter, rdgAllowFilterForm, rdgAllowSortForm, rdgAllowToolMenu] + FooterColor = clYellow + FooterRowCount = 1 + OnFiltred = RxDBGrid1Filtred + Align = alClient + Color = clWindow + DrawFullLine = True + FocusColor = clRed + SelectedColor = clHighlight + GridLineStyle = psSolid + DataSource = Datasource1 + Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColumnMove, dgColLines, dgRowLines, dgTabs, dgAlwaysShowSelection, dgConfirmDelete, dgMultiselect, dgHeaderPushedLook] + ParentColor = False + PopupMenu = PopupMenu1 + Scrollbars = ssVertical + TabOrder = 0 + TitleStyle = tsNative + UseXORFeatures = True + end + object Panel1: TPanel + Left = 0 + Height = 64 + Top = 0 + Width = 1187 + Align = alTop + AutoSize = True + ClientHeight = 64 + ClientWidth = 1187 + TabOrder = 1 + object Label1: TLabel + AnchorSideLeft.Control = Button2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Panel1 + Left = 270 + Height = 15 + Top = 7 + Width = 35 + BorderSpacing.Around = 6 + Caption = 'Mode' + ParentColor = False + end + object Button1: TButton + AnchorSideLeft.Control = Panel1 + AnchorSideTop.Control = Panel1 + Left = 7 + Height = 27 + Top = 7 + Width = 86 + Action = actCalcTotal + AutoSize = True + BorderSpacing.Around = 6 + TabOrder = 0 + end + object Button2: TButton + AnchorSideLeft.Control = Button1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Panel1 + Left = 99 + Height = 27 + Top = 7 + Width = 165 + Action = actOptimizeColumnsWidthAll + AutoSize = True + BorderSpacing.Around = 6 + TabOrder = 1 + end + object CheckBox1: TCheckBox + AnchorSideLeft.Control = ComboBox1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = CheckBox2 + AnchorSideTop.Side = asrBottom + Left = 499 + Height = 22 + Hint = 'Use filter line' + Top = 35 + Width = 83 + BorderSpacing.Left = 6 + Caption = 'Use filter' + OnChange = CheckBox1Change + TabOrder = 2 + end + object ComboBox1: TComboBox + AnchorSideLeft.Control = Label1 + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + Left = 276 + Height = 25 + Top = 28 + Width = 217 + BorderSpacing.Around = 6 + ItemHeight = 0 + ItemIndex = 0 + Items.Strings = ( + 'Edit mode' + 'Quick search mode' + ) + OnChange = ComboBox1Change + Style = csDropDownList + TabOrder = 3 + Text = 'Edit mode' + end + object CheckBox2: TCheckBox + AnchorSideLeft.Control = ComboBox1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Panel1 + Left = 499 + Height = 22 + Hint = 'Auto fill column width' + Top = 7 + Width = 133 + BorderSpacing.Around = 6 + Caption = 'Auto fill columns' + OnChange = CheckBox2Change + TabOrder = 4 + end + object CheckBox3: TCheckBox + AnchorSideLeft.Control = CheckBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Panel1 + Left = 638 + Height = 22 + Top = 7 + Width = 120 + BorderSpacing.Around = 6 + Caption = 'Show indicator' + Checked = True + OnChange = CheckBox3Change + State = cbChecked + TabOrder = 5 + end + object CheckBox4: TCheckBox + AnchorSideLeft.Control = CheckBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = CheckBox3 + AnchorSideTop.Side = asrBottom + Left = 638 + Height = 22 + Top = 35 + Width = 115 + BorderSpacing.Around = 6 + Caption = 'Show headers' + Checked = True + OnChange = CheckBox4Change + State = cbChecked + TabOrder = 6 + end + object CheckBox5: TCheckBox + AnchorSideLeft.Control = CheckBox3 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Panel1 + Left = 764 + Height = 22 + Top = 7 + Width = 93 + BorderSpacing.Around = 6 + Caption = 'Word wrap' + OnChange = CheckBox5Change + TabOrder = 7 + end + end + object SpeedButton1: TSpeedButton + Left = 596 + Height = 22 + Top = 443 + Width = 23 + end + object RxMemoryData1: TRxMemoryData + AutoCalcFields = False + FieldDefs = < + item + Name = 'ID' + DataType = ftInteger + Precision = -1 + Size = 7 + end + item + Name = 'NAME' + DataType = ftString + Precision = -1 + Size = 150 + end + item + Name = 'PRICE' + DataType = ftFloat + Precision = 2 + Size = 12 + end + item + Name = 'Developer' + DataType = ftString + Precision = -1 + Size = 150 + end + item + Name = 'Date_Present' + DataType = ftDate + Precision = 0 + Size = 0 + end + item + Name = 'DEVELOPER_ID' + DataType = ftInteger + Precision = 0 + Size = 0 + end + item + Name = 'RAIT' + DataType = ftString + Precision = 0 + Size = 15 + end> + PacketRecords = 0 + left = 152 + top = 264 + object RxMemoryData1ID1: TLongintField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'ID' + Index = 0 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + object RxMemoryData1NAME1: TStringField + DisplayWidth = 150 + FieldKind = fkData + FieldName = 'NAME' + Index = 1 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 150 + end + object RxMemoryData1PRICE1: TFloatField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'PRICE' + Index = 2 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + DisplayFormat = '#,##0.00' + MaxValue = 0 + MinValue = 0 + Precision = 2 + end + object RxMemoryData1Developer1: TStringField + DisplayWidth = 150 + FieldKind = fkData + FieldName = 'Developer' + Index = 3 + KeyFields = 'DEVELOPER_ID' + LookupCache = False + LookupDataSet = RxMemoryData2 + LookupKeyFields = 'DEVELOPER_ID' + LookupResultField = 'DEVELOPER_NAME' + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 150 + end + object RxMemoryData1Date_Present1: TDateField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'Date_Present' + Index = 4 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + object RxMemoryData1DEVELOPER_ID1: TLongintField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'DEVELOPER_ID' + Index = 5 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + object RxMemoryData1RAIT: TStringField + DisplayWidth = 15 + FieldKind = fkData + FieldName = 'RAIT' + Index = 6 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 15 + end + end + object Datasource1: TDatasource + DataSet = RxMemoryData1 + left = 120 + top = 264 + end + object PopupMenu1: TPopupMenu + left = 152 + top = 197 + object MenuItem1: TMenuItem + Action = actOptimizeWidthCol1 + end + object MenuItem2: TMenuItem + Caption = '-' + end + object MenuItem4: TMenuItem + Action = actCalcTotal + end + object MenuItem3: TMenuItem + Action = actOptimizeColumnsWidthAll + end + object MenuItem5: TMenuItem + Caption = '-' + end + object MenuItem7: TMenuItem + Action = showColumnsDialog + end + object MenuItem6: TMenuItem + Action = showFindDialog + end + end + object ActionList1: TActionList + left = 312 + top = 185 + object actCalcTotal: TAction + Caption = 'Calc total...' + OnExecute = actCalcTotalExecute + end + object actOptimizeColumnsWidthAll: TAction + Caption = 'Optimize width for all...' + OnExecute = actOptimizeColumnsWidthAllExecute + end + object actOptimizeWidthCol1: TAction + Caption = 'Optimize width...' + OnExecute = actOptimizeWidthCol1Execute + end + object showFindDialog: TAction + Caption = 'Show find dialog...' + OnExecute = showFindDialogExecute + end + object showColumnsDialog: TAction + Caption = 'Show columns dialog...' + OnExecute = showColumnsDialogExecute + end + object sysExit: TAction + Category = 'System' + Caption = 'Exit' + OnExecute = sysExitExecute + end + object hlpAbout: TAction + Category = 'Help' + Caption = 'About...' + OnExecute = hlpAboutExecute + end + end + object Datasource2: TDatasource + DataSet = RxMemoryData2 + left = 288 + top = 368 + end + object RxMemoryData2: TRxMemoryData + AutoCalcFields = False + FieldDefs = < + item + Name = 'DEVELOPER_ID' + DataType = ftInteger + Precision = 0 + Size = 0 + end + item + Name = 'DEVELOPER_NAME' + DataType = ftString + Precision = 0 + Size = 130 + end> + PacketRecords = 0 + left = 329 + top = 368 + object RxMemoryData2DEVELOPER_ID1: TLongintField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'DEVELOPER_ID' + Index = 0 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + object RxMemoryData2DEVELOPER_NAME1: TStringField + DisplayWidth = 130 + FieldKind = fkData + FieldName = 'DEVELOPER_NAME' + Index = 1 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 130 + end + end + object XMLPropStorage1: TXMLPropStorage + StoredValues = <> + left = 272 + top = 128 + end + object ImageList1: TImageList + left = 152 + top = 348 + Bitmap = { + 4C6903000000100000001000000000FF0000000000FF000000FF00FF000000FF + 0000000000FF000000FF00FF000000FF0000000000FF000000FF00FF000000FF + 000000FF000000FF000000FF000000FF0000000000FF0000FFFF000000FF0000 + 00FF000080FF0000FFFF000000FF000000FF000080FF0000FFFF000000FF0000 + 00FF000000FF000000FF00FF000000FF000000FF0000000000FF0000FFFF0000 + 80FF000080FF0000FFFF0000FFFF000080FF000080FF0000FFFF0000FFFF0000 + 80FF000000FF00FF000000FF000000FF000000FF0000000000FF0000FFFF0000 + 80FF000080FF0000FFFF0000FFFF000080FF000080FF0000FFFF0000FFFF0000 + 00FF00FF000000FF000000FF000000FF000000FF000000FF0000000000FF0000 + FFFF000080FF000080FF0000FFFF0000FFFF000080FF000080FF000000FF00FF + 000000FF000000FF000000FF000000FF000000FF000000FF0000000000FF0000 + FFFF000080FF000080FF0000FFFF0000FFFF000000FF000000FF00FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF00000000 + 00FF0000FFFF000080FF000000FF000000FF00FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF00000000 + 00FF0000FFFF000000FF00FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 0000000000FF00FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 0000000000FF00FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF0000000000FF00FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF0000000000FF00FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF0000000000FF00FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF0000000000FF00FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF0000000000FF00FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF0000000000FF00FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF0000000000FF000000FF00FF000000FF + 0000000000FF000000FF00FF000000FF0000000000FF000000FF00FF000000FF + 000000FF000000FF000000FF000000FF0000000000FF00FFFFFF000000FF0000 + 00FF008080FF00FFFFFF000000FF000000FF008080FF00FFFFFF000000FF0000 + 00FF000000FF000000FF00FF000000FF000000FF0000000000FF00FFFFFF0080 + 80FF008080FF00FFFFFF00FFFFFF008080FF008080FF00FFFFFF00FFFFFF0080 + 80FF000000FF00FF000000FF000000FF000000FF0000000000FF00FFFFFF0080 + 80FF008080FF00FFFFFF00FFFFFF008080FF008080FF00FFFFFF00FFFFFF0000 + 00FF00FF000000FF000000FF000000FF000000FF000000FF0000000000FF00FF + FFFF008080FF008080FF00FFFFFF00FFFFFF008080FF008080FF000000FF00FF + 000000FF000000FF000000FF000000FF000000FF000000FF0000000000FF00FF + FFFF008080FF008080FF00FFFFFF00FFFFFF000000FF000000FF00FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF00000000 + 00FF00FFFFFF008080FF000000FF000000FF00FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF00000000 + 00FF00FFFFFF000000FF00FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 0000000000FF00FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 0000000000FF00FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF0000000000FF00FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF0000000000FF00FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF0000000000FF00FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF0000000000FF00FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF0000000000FF00FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF0000000000FF00FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF0000000000FF000000FF00FF000000FF + 0000000000FF000000FF00FF000000FF0000000000FF000000FF00FF000000FF + 000000FF000000FF000000FF000000FF0000000000FFFF0000FF000000FF0000 + 00FF800000FFFF0000FF000000FF000000FF800000FFFF0000FF000000FF0000 + 00FF000000FF000000FF00FF000000FF000000FF0000000000FFFF0000FF8000 + 00FF800000FFFF0000FFFF0000FF800000FF800000FFFF0000FFFF0000FF8000 + 00FF000000FF00FF000000FF000000FF000000FF0000000000FFFF0000FF8000 + 00FF800000FFFF0000FFFF0000FF800000FF800000FFFF0000FFFF0000FF0000 + 00FF00FF000000FF000000FF000000FF000000FF000000FF0000000000FFFF00 + 00FF800000FF800000FFFF0000FFFF0000FF800000FF800000FF000000FF00FF + 000000FF000000FF000000FF000000FF000000FF000000FF0000000000FFFF00 + 00FF800000FF800000FFFF0000FFFF0000FF000000FF000000FF00FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF00000000 + 00FFFF0000FF800000FF000000FF000000FF00FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF00000000 + 00FFFF0000FF000000FF00FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 0000000000FF00FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 0000000000FF00FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF0000000000FF00FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF0000000000FF00FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF0000000000FF00FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF0000000000FF00FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF0000000000FF00FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF0000000000FF00FF000000FF000000FF000000FF + 000000FF000000FF000000FF0000 + } + end + object MainMenu1: TMainMenu + left = 271 + top = 185 + object MenuItem8: TMenuItem + Caption = 'System' + object MenuItem11: TMenuItem + Action = sysExit + end + end + object MenuItem9: TMenuItem + Caption = 'Help' + object MenuItem10: TMenuItem + Action = hlpAbout + end + end + end + object RxAboutDialog1: TRxAboutDialog + Options = [radHelpButton, radLicenseTab, radShowImageLogo] + Caption = 'About...' + Picture.Data = { + 1754506F727461626C654E6574776F726B47726170686963CD41000089504E47 + 0D0A1A0A0000000D4948445200000080000000800806000000C33E61CB000000 + 097048597300000F1200000F1201219BF2330000200049444154789CECBD7BB4 + EDD755DFF7996BADDF6FEF7DCE7D49576F5B32C6B6C080644B86D4329887210D + 711FE159D2D040331A5A4647DA91B4196DFF69937604469A41C368D336494BE8 + 20819637064608761CC060FB5E598F2B4BB6B103B663CB0F2C4B96EEBDE79CBD + 7FEB3167FF98EBB7CFB97A5857B66C59464B638F7DF639577BFFF66FCD351FDF + F99D73C20BEB85F5C27A61BDB05E582FAC17D60BEB85F5C27A61BDB0FE142D79 + AE2FE04B653D70EE8CCD3FDF72DB1D7F6AEECB9F9A2F0ABEC90608829AA176F8 + 375501FC1772E4AE487F1D828019225F5E02F265F3453EDBF28D179A829A6FB3 + 1A98E28200F3DE63E62F84C3CD17208423C22042081084E7BD403C6F2FFC72D6 + 03E7CE989AA006AD3FD7E627BFEA5121509A1E6E3E66FDC618410411230A4880 + 188428420CFEB718054148D13FF3D6DB9F5FC2F0BCBAD867B2EE3F77D6D4A0A9 + 504C68CD280AB5415328CD5085A64655C3D450F36730CC662D6004F1D31E030C + 4188115214521052146280D89F83F8EF9E2F9AE14BFE029FE97AE0DC19538466 + E29BDF202B9426E4DA85A0426B466D4651A53543D5684D51F5CDC7BAAD30ED02 + 6084200CD1484118527F441852608830A6403C2214210831C897B45648CFF505 + 3CDBAB59400D8A896F7A835C85A9426E501A94AAD40A45CD85A12AB5194DBB00 + A8D1D4309DED826D35816B014809C6248C511893B01C038B2130266118028B24 + A4181812BCFB9E3326F2A5691EBEE42EE8F359EF3E77D6AA06AA425661AAA16F + BC3155A1342317A354A534A3D4B6D504B52A4D95565D23B4E6AFAD0B82618459 + 08C448D1373F25582461350A8B21B25A04566360B5082CC7C8720C0C5D18BE14 + 85E04BEA623E9F75FFB933562D5035F4CD173615A602B90953ED9BDF373B37A3 + D646A9466D8D52FAEBA6B4320B46733FA135E8FE81E10E61102505D96A014240 + C240D6C4CE2231A6C0CE42B8E1B4F0D26B23CB6E32BED47C832F1B13A0165013 + 8ABACADF342157B7FFB919A5DBFFD2CC1DC1A6946AEE1714A3E4C6541B25374A + 6DE42E04AA462D0D3503351443CC1031D484947608E371349E605C24824474E3 + EFB9D914A65C18697CE575CAEBBE46F8DA1BC3737DAB2E595F3292F8F9ACF9F4 + 1715D635F6D3DFED7E85A97687AFABFE5A95A928A536365323E7CA26AB6F5851 + 4AA994EC7E81B6E6CF6A600D5368662C16BB2C4F5CCF0DD79DE2D8EE020982AA + D21A4CA5B1D954D6EBC6C1A6B03E28E44D214F8D9B6F30BEFFF503FFCE777EE3 + 97C4BDFFB2D0006601B3E05EBF4231A806CD7CB30CDCB3A73BF606A1C7FB666E + 16CA549972639A2A53D66E1E94568DDA410233438270E2E4D5BCE4A52FE19AD3 + BB8C83103A06509B918B321648B1A387C13FDBCC5055FEF023CAFFF8E1353FF9 + 7FBFCDFEC68F7CCB732E045F5AFAE8735C8A6F76510FFD9ABA30CC50EFD1583E + C9E1CF22747BCE5617EAD63CF4476BD4A6E4A2A809575E7D23B7DE7A332FB9E1 + 38D75E3170D335232FBA72E4AA6389133B91E3CBC06AD19DC14560B9882CC6C8 + 624CA4944843A036F899DFDAE36FFED85BECA9BED3176B3DEF05E0FE8EEFCF68 + 5F334115302362A4600CC1188331467F2C92314463917A08D7C3B8210A2905A4 + 2703666CA0A9A387A7AFB9816F78F557F25537EE72FDE98157BC78C1AD5FB1C3 + D7DDB4E245578D9C5806761691637304B0082C47588C919484980221410806D2 + 78CB9DFBFCAD9F78F3732A04CF7B011011CC0435C1F75D408C1495212ACB68EC + 0CC6EE68EC2E8CDD117606588DC26A109683F8462D223BCBC872212CC640EC48 + 5F2060665C71FA6A5EF9D52FE1E61B575C77D5C0F5A7075E7C7AE4F82A3026C7 + 07568BC0EE32B0E861E038F86318820B4094AE8D2A8AA1DAF8E5DF798C7FFC33 + 6F7DCE84E079EF03CCC99DEDC9C748E2306E4CAEEE31F57FD38C922047632CB0 + 0910241064F607A29F7A355A55B4294D8513CB63BCE4A55FC10D57EF70F25824 + 67E5FA6B16AC06A1196C26259A716C21440234B0066D503425EA60B43131A54C + 8C1E4178CE41C11A3FF56B0F71F69DEFB0D7BEEE8BEF183EEF05603EFDEEEA09 + 519420AEF653501706F1BF9B19B50979807516C6680C01A208628258C05A4035 + BAEA6F1E35EC9EBC8ED357EC706227909BB21803BB0B2104615A3782C1B13122 + 2A546B44154209480E3035980436C25822AB1621464A80898AA1EC1D347EF577 + 1E794EEEDFF35E00C0BD7A35E94E5DB7F351FBE6E227AEFB08168D310A8B688C + 49485D00A204440CD3881A7EFAAB425C70F5755710041EDB6F2C06E1E5D70DA4 + 28B46AE48D312014B3F9403B92583D7C2C05C704D68DFDBDC2C1C542DD548626 + 98247298686ABCF9CC67B8F7AE77DAEDDFF0BA2FAA1678DE0B8002D66F9960A4 + 008BA88CC11DC0D091B707CE9DB1809B8C1860884288C2D0B5450C5D0374B047 + 6BA4566392932CC71111719450616721A0B0B7DFB870D08882238AB567161D33 + 429B6B1D6B866945B5A2B5B2DE54A675414449AB018DC6C13471F681F35FF4FB + F7BC170070538AB9479B820B410CF0AA23B8FB51F8F5FE7BCF9804580D108110 + 022148F788DD366B8B1C4C06E5980B843998D40AACD7C680F1E8C5C67ADD88D1 + D3CD9BA2E4D2934DCD7AAA59A9ADA2D668B5D15AC3ACD12C77FF2110634228BC + FB0317BFD8B7EEF92F0072E407312306EBB1FE533BD6B7DEEE1A410CC2208E0B + 047307CECC41A5663C9A06524A3D5BA85003E71FABFCB14C5C7345626FAFD1CC + 884055235758E7C67A72A4314F4A2E955C0B792A682934AD682D8E5D04C3A23B + 92310B1F7C70FF8B70C72E5DCF7B0100370166BEE9EEF4C1AD4F937099CD8244 + 61002010568689617834103F231842A9861563D38C1A1AAD1A17F69BFB18A173 + 87CCA1E6F5343F1A53AD94A992D785922BA5565A2E5D232816231AC054308587 + 3E51BFF037EB71EB792F0033B42BB80338237C97B366B370FFBD678C24480023 + 8219AA9114056D462DCAFAA2524265350A669152CDD3BC49100545DD6728BEF9 + EB7561BD5FD85F4F6C36853C4D94A9504BA556C544B190B020D0492817F6CA17 + EE463DC57ADE0B409899BCCCF0AE93379EC9BAF5F63BE4FE7BCF1808CB01B048 + 555826DFFC7CD1B8100A8B45F41051DDCEBB230962D2434C878CA75C7DF30F26 + 36FB13D366C3B4992853A6D442A5A131A041DC096906E2E8E4177B3DEF050004 + B199B16B0887F4EE67B2B64260C29802C797C6A99DC6B45F09162963A255CF13 + D465642C10432006FF38C368CDDCE64F85FD7566B33F71B09FBB10146AC9945A + 310C9DA9453320D49493C7E3B37C6F9E7E3DEF0540E8C85ADF7711FB9C73DCB7 + DE7E87CCB905B3C0F55718D345C5A430AAA12D52AB6C4F7FEAA1E44C22ADB552 + 4A65DA6436EBC2B49ED81C6C581F4CD475662AC5A19F21C2103D6C314015B472 + D3F52BEE7EB66ECC65AEE7BF00CCD93DECB26DFF53ADB93A284557E9375D1760 + 2A6403AB465B344A89E449887372A743CDDAE3FC3CB9C397A789BCC96C3699BA + CEACF34436C542C086880DC19D1567A8624DF99AAF3AC6AF3E0BF7E499ACE7BF + 00E05A60BBFB76080C5DCE7AE0DD672D5378481FE69EF65E9A169A191FDB7C8A + D372152FFFB6C8473E51B0476FA0ADAFC4F2314A1542708E9F88021533A5E64A + AB955633D3A650A64C2D85A9648A2A16041D23364688017367022915698DD7DD + 7EFA0B718B3EEB7ACE0909CFC6BAE7EE3B6D5221608C1152D0CF1A06DE75DFDB + EC83FA113E6A9FE4E3ED139CD78BCE0257C34C69DA685AA905065D7131EF7150 + 0FA8B562FBBBE8C337101E7A05E1A19BB1F51254316B9D3DE4A15E2BEEF0E552 + A91816041B13BA4C10A30B69A9C87A03FB07DCF2B205BFF5F33FF24232E87359 + 3118C164EB8C3DD97AE0BEB3F6611EE4BDFA47FC4CFD652CB8F99508BB71B7D7 + 0328A69D101A0A55149A70CC8EA1A664CB94DD036CF97ECAF5EFA5B6061F7F29 + 7CE8EBE0C19B1DE56BA5B3892ACDAA43D529F8C95FF4CD8FE2A549A5C094A114 + 7EF87B6FE6B77EFE8B7ADB802F1701E849A0D6B3AC4715DB03F79DB13F914778 + 93BD854FCBA3A41859A61541428F1EDCDE7B8DA0A2AAD456A82DD1A491A53190 + 3039CE1E7B04F14A23E6D0EFFA3FA65EF301F42BAFA4DEF37ADA275E8CA9A234 + 2C0A36047488D8982004DFFCA690272467C899D77DFD297EE0FBFFEDE7441B7F + 5908009DF265E23430E705C01FBCFB2DF62FC33BF8389F2249E298EC9042C269 + 1EC1371FED994257FD16941A1225544AC808852AC66E58A0D638C81D7CEA1C02 + 82BA005DFD69F8F65F223C7823E5DDAF47F7AE41638421B8C3179D58E2450B13 + 3265586FB8FE74E4AFFF9597F30B3FF5DCDCB9CF4BEA1E3877D63E7D21914DF8 + E463012FA4F130ECDA538D4534AE3DE534EA5B6E7BED1754C2CFDD7BD66AF39F + 6354CEC67BF870F8182944863030C84812A76D4701B1E0DE3BD0CC69DFCD1A55 + 2BC5DCA3AFAD925B21D74C6D8D3C1907D39AFDBA4FAE8552E6D8BE90B5504AA5 + B5E625661FBA9DF2C1EF001B40C4AB8C5A83527CF3371B76A2F293FFC32DBCF1 + 8D6F78CE7CB167FCC1F7DD73A77DE891910F3FBCE2C1F303075340E85068730E + 7DA98D5A8C561ACB5479F9B5CA2B6F6CBCF245C66DAFF9C208C2FDE7CE5A51B8 + 60FBBC2D9D6133EC3384914518598405292422C9AB7D99FD05A599A1A6A8FAE6 + 5794DA32D52A550F05A0B489D6A1DEBDCD9A75392097894DCDD45A28B5528B7A + C6AF2AB534ECC295D4F77D0FBA7F25E4E2215F9E6093B9FE74E47FFAAF5EC977 + 7EE773B7F9F00C04E0FE7367EDBE4F1CE3DD1F3B01293A02D6DFC0D5A743A125 + 1B255736B9913BE7BE64A596C26A30FEECAB946FFA5AE1D5B73FBB82F0C0B933 + F609FB0CFF52DE494A89D510D9892B863832C8C0280329241017D899A65DADA1 + FDD4B75908AC525AA568A66A616A995C3353CDD456A9C5F3F7EBBC615DD61EE6 + 954AAD8D9A955A0BAD28D614CD09BBF7DFC71EBE0E9B32D4CA1DB79DE03FFFA1 + 97717C7720E011AC614F9BC0FA42ACCBFAC05F7DCBBBEDDE8F9FA28591340A83 + 08121D783163CB9CAD55C95599A676F8D8F8F36693C993E7C4AFDC31BEFB75F0 + 43DFFFEC71E0FEF97DBF62BF13EE6211962CE2C8B161C9222E186564114776C2 + 0E3B69874186EED11772CB6C7443D689A295A285A295D60AC52AB965B27AF66E + 6A13539D28B5B0291BB479F5D0C126B32E1B4AC9E45AA93953A6861690163005 + 6911BBF7F5DC145FC10F7DEF8BB9F9A5C72FDD82DE84824E5691FEE28B21104F + FB01FFF8D7DE6F1FBA708AD552580CC2909C421582875B4D9D3E5D9BABC79C95 + 5CFBA64F5E1DB3D92853CE4C07953C556AAEE45CF9F3AF11FEF65FFFD6CFFB4B + BEEDBE7F61BF1E7F87555AB2921D76865D5661C1322E5C18D2714EA72BB8225D + C910060C656A1317DA1E8FD5C7B8582EB26EEBBED96ECFAB76BBAE7EFAB31672 + 9D98CAC4D4325399282DD3AA277F72F1EA9F4D99C853A6958636850A180C92F8 + 6F5FFDD778C5152FC7196A9DC768D21B53F86E047156F3AC19E604D7174A189E + F24DEFB9FB4E7BF3BFBE8603DB61B51496A30BC06A747A337859B5975AF963AA + 46AE8DCDA4FD741C9648E5CD21152AE742DE646A2E7CCD4DC27FF97DC7F8FA3F + F3B971E1EEBEEF6DF62BE1B79121B013773895AEE4F4709A9DE4E55A4906AE1A + AEE29AF16A4EA4E3AE013026DD70BE9CE7A1E9211E2E8FB057F79874EAAADFB5 + 43E94290DB446965AB05A632B1A913B94C2E1C35BB4398AB9B89A9506AA16545 + 4B4355D1669C0CC7F9F1D7FD6D4E2DAFD80A819AB7A9319B1BD3F4B63482C729 + 5D08E6AA640970CBAB9F3DF3F9A461E0B97BEEB4DF78DFB5B4B8E2D82A706CE9 + 050EA78E47AE3A111944A8AA5C5C1B170E9C015382F67E3A1EEE980616A3D16A + A00E8D52C3217E5E8D885030DEF3A1CC8FFF4CE1DEBBCED8EDDFF0CCA4FCFEFB + DE69BFC69B2109CBB0E4F8709C6BC7ABB97AB89A142295C62A2CB966BC8A2B86 + 532CC39240A0D16856E920324102511283A89772E16D63CC94264A9448934690 + E88F1089FD6791409008D2C91CBD82D82B89F5109632E3D1FC187FF7EE9FE07F + FEA6BF458A236A86A86FB6CEFD8A54F07E55DD34C8A12688410806F7DD7BA7C5 + 4E2DFF7C2B8D9F54007EFB03579165C515C7222F393D308C4EB9BEE18AC4E9E3 + 814184A9198FC4EA35F408614BBD1654036D304A73C2448A8114952A8204AFB3 + 272A22DE94E1431FAFFC835F7CE6B4E8B7EADBB9B038604776D9892BAE485772 + 7A3CCD222CA856192472C5708A93E924CBB0244A74F0C62A9BB6E1A0AB7DC318 + 427220C88C284A9248954894460C89A0F5F077880349418821F8F762E624844E + 50F75053A8DB130EF06FCE3FC8DFBFFB1FF1733FFAFF3919E5DC198707A45737 + F5AA6335F3BE453DC18D8897B105230648E2DD47EE3F77D6E4F31084275406FD + D49BDE67E7EB31564BE1C5A713D75EE94D0EAE3E1EB9FA446467F07628664E7A + 8C01960916BDCA6688EE27A420DB94690A6E364274FE1D81C3E208F1AADB7BDE + 7FC0DFF95F2FBF4CEA4DF7FE82FD71FC288B30B28A23ABB4CB15C349166181E2 + 0D1D8EA7139C4AA7B69B0FD0686CDA86BDB6CFBAAD6934028148749C2044523F + D53104A2046F06258928FD7548A4AE05A4FF17E8DE9B89979689238573DF2977 + EC3CFC3CFBF1BBF8895FFD7103A7AEBDEAF63B648CDE68628CC218BCB87408AE + A3BCB99597186C8A3015616ADEFEC63B9F090FDC77D68EF63AFC9C04E0F7DF71 + B7BDEFA1138C039C3A16B8EA4460AABEC9A74F78938328DE6665B3718AF42208 + 8B21B018BD01C262F0464A63F29E394312E2E0A55622BA7570ACBB41C88CC12B + BFFCAF1EE1AD6FFDFDA7FD12F79D7BBBBDD5DEC14EDC2131328691E37197DDB0 + 4B9040D5C2200327D20956714592D47B032A5933EBB661A36BAA351291240329 + 0C0C8C8C8C2459B09091A5AC1864C542968C614992250B59B20C2B86B0601996 + 8C714992812809E91883981C962CCD8F5EAF383FFED9FD3FCF993B0F4BC26EB9 + ED0EB9F5B6D7CA108D2179526BA60DA4E06FB215822AAC8BB0A981DC846A61AB + 2D9EA9105C62027EEF8327191691C5285C792C90A2B03719D71C0FEC0EDEF848 + D5987A1B95314018823B270A165CA454FAC3944672D2A6B4FE8D84165DCD0ADA + CBA314C3EBF27FEAD73FFDB4177DA6DD8B0E4A92C41806C630B29B8EB18823CD + 2A0D6315578E0384011171A0CA2A1B9DD8E844552549406560C07D1635212A48 + 6F2868D54023D62214C53479C14856D011A9466A81850584E07DE4648349A349 + 45ECA81018E8A10C5CC87BFCDC7B7EE909DF6D56E50F9C3B63314054281DDA56 + EB6022DEFDCCCBDF03A379B14B140F231FB8EFAC5DAEA3B8D5006FFEBD7BEDA1 + F58A988461705B3615B7D7C7975E398B41EE1EFF108465084404694001CB5027 + A316A86B236723AF95BC36CABE522F2AB286650BEC90580CDE8051FB113155DE + FD810BBCE9377EF729A5F8DCB93FB0FBEC3D2CC2480C912124A2244257AFCD1A + 2908BB69C5222C88C47EF3946285A24ECD161344236281D68243BDAD32D5422E + 8575C91CB48983B2612F4F5C2C07EC4DFBEC4D07ECE5032E6EF6B9B0597361B3 + 666F9AD864A39544B225A31C67157619E24874A6E9DC6BEA92C79B3FF8BBFCFE + 99DF7ED2EF7A4B370D29C21861116191BC3D8DF6AE27B9C0A6D09B6104AA7A75 + B419976D12B60270F747775C5D7762C563FB8DC7F61A3B6360397A38D21AE40C + 968DD8F3E7DE55EB5241DF56C6A87BB5B5367231A64D63EF62E6E2F9CA74A121 + 6B614964888289A21D11FB8DB73DFC9417FCAE7A1F968428DD664BC030363A71 + A007642D2C64C94ED86590A1570FBBE337B54C6995AABD4994FAA69756A8DAFC + F75A7B94D0BC98C31ADA5F37D36DBE20B7C2A413EBB2E660B3CF63077B3CB6BE + C8A307FBECAF0BB5240676186487455CB81992E082D785B5D4C29BFEF09F7FD6 + 0DBAF5B63B24051813BD9CCDC3C159083615D619D615D6B5FB0547B085A71382 + 0070CF5D77DA471F5DFA0B07F6BDA3563356833004BFE0A91AFB078D4D3636A5 + 7BA93D7CD90A43DF78EBEACFE6D66BE6153186A2B571B099D8BF503938DF901C + 19E2404C1E49DCF5DEF3DC79F61D4F7AE10FB4F733F4931DB659BDC0A6AD395F + 2FA2283B718765BFE9E0798AA2954D9BD8AF076CAA237D552BCDDC61343CEC73 + 7EDFA59F39BF9E4FB17BF9D2C345A399BA50D4C226AFB9707091470FCEB377B0 + 466B62945DC6B4EC4EE661C420066FF9A3DFE5DC3D7FF05937E996DBEE9057BF + E6B5B248C2AAF73690D92728EE18AEB36C852037370F33AEF0C0B9334FA90D02 + C0871E1EE97C0ABF1576D8332FCC02518DFD03656F631C147F6C7AD7ADD28CAA + B3476A3DA6F52E9CCD1AA60DD5E6E9D6A634AD604AD5C6A654F60F1A7503C112 + 8830D5C67BFFF8E213A4F7B7EFF9357B4C2E12BAA71DBA02EBB44CB26602C222 + 2C1864EC9B64FE397562AF1CB05F366C6C72EA178A5ADB867F87DA59B7CDA46D + 26997429705F4EB71A8E66DBD2347A3BB9A68DA9642EE635E70FF6D83B586375 + 648C3B8C7145EC2969102EE63DDEF5E0BD9F6DFFB7EBD5AF79AD8C0916E9A863 + E83ED94131D65938C8DE1DAD54EF96F27414D900F0914706B079F3B46FA6D12A + 9CDF532EAE9583C978EC40596F1A5336A6C9BCB152F66E5BDE4E4529156A53AA + 7A36B0554FABD65E17575BEDC2E0EC1BC5A81807D59836B8F78870DF072E3CE1 + 62EFCFEF631146AF0334D9F6F3F50DF1530C429244246CD5FFA499BD7AC07EDD + 67B20DB5658A558A36AAB960CEE96057FBB60582B44728D68B3F5C8B99F792E9 + 2412EBD73017826A571356955A327B79C3C5F59A5294C882212C08214227A3BC + FD23EFBA2C010048D1DC144488FDB096AE09D6D958776DB0A942DDF63F7EA210 + CC872B00FCC9F9B8852BB5B91088C166DFF8F843954F3ED278E47CE3C27E637F + 631C64E5202BEBAC6E0EFA732946AE5E21534A23D7EA82511AB5569A56AC554C + EBD6A6228A46D010C8409D049B840F7F6CFD848BFE607DB07BDBFEDA6CAEC4F5 + 0D6BDDC434D57EBA750BFAECD77DF6DBC6337BE6706FB5E2FC3FABD4CE03DC6A + 8423DAC1E68DEE59CFC3BEC2EA1BDE6CEBE8991956F59099DAED46B5CA267B17 + B260038945471603F77EECDD972D00B7DEE68EE1D08134EB7998D28CA9980B41 + 867511B20A55E51293366FFC1C6D0480C7F6659BCD6BCDB00A751FF60E1AE7F7 + 1A1FF993CC830F151EBBD8D8CFCAC1C6EBDF0E36B6FD79EA42908BB129ADD7C2 + 352F85CA95560B25F7D2A8D6B0EA02A06658302C808AD0C468D5F8D4A72E1580 + 3BEFFD5DFB7473B470AEC499215BED6C1E35984AE162D9E7A038CA37B5CC5ED9 + E77CBBC85AD76C6C225B26F788A058A6B4D6D9C0AD0B42EB76DD29626D76060D + 541DFD6CE6AAFEA896D0EABFC7E636B37404C83D15A35135B32E052510652058 + 64BFECF39BBFF30B971DBF1FCD0F807732719FCDFDB475EDD141F110B2993C01 + 23D852E01F3877D6FEEE6F1AB25486D6BCF8E1C0B8887A074C75A93FD86847F8 + 8ED4DE7534B034C8C57A59947300A69EF19B36855226CA5469A5526B454BA5B6 + E265D7022AA917491826505BE5C2A397DE8F8FD48F11E23CE8C137BFD1FA296F + 0CF8493CDF0E10FB1491E4EADD1A17EA1E7B759F5C3797F8396AEE1F34F33470 + D542D90A41D752DA7AAB18A369E9FE51455B43AB0B88473BFDB9E97C6B708FC1 + 933A9ED58B8E2F88979CB9EF1050ADBCE74FDE7F599BFFC0B93336B5798E816D + FB166AF343844111588B900A8C41484109466F7E75E97D4D867130198BE8F56A + 655FD907521274F0064C4D054D4229DE163D04772D1C9870CDE1D940659A0A9B + 4D6193AB3747CC99BCA9E4E2D9BFDA7D02F7370C062FCAECB7CD132402EBA95D + 72A19FAC7FE2A8B129A05D7BF4CD574511365A58DB45722B9829EBB6264AE4D1 + 729E83B2A668DD3A864E046D3D12689EFEEDCF751688563B4BC819BE4D95D63C + BBD7A8EEE7F4A20EAD6E22AC1DE936AEC0162CA6A7787B332BF1C34303D3C083 + 8F7DFCB204C0E9EB4E2EAABD87516B8E7F08014CC8FDB336A13B8C4D1CAC9327 + 7A0309205268255109AC351293312EC41B30763B526AEFAA71A491C29C0FA833 + 19241772AEACA7CA669D59AFBD266ECA853A75D64C1782668A09A80C681097DE + 4ACF0D28E3289724381EAE8F6EC3CAD6140BDD39136FEE34B54AD54C2050AD60 + 66ACEBC41813532B4C5ABAF0D09D37DCC677FB5FFAE63B31C437BF69ED8EABFB + 15B5154AABDE50BA7874333BB3DB56F35ADD27687E8F82458788836CD3BBD60E + A30BADFEFA938F7DEA6937FF817367ACF68EE753B5DE07D928B5D79706EB52E6 + 7F4F4158270792862084DE2F691E9DE3026090449936CAFA40C929B318A3F7DE + 55A50D81583DB153A24B7008F37DF48248AD8D522AB95672F19CBF6FBE9746E5 + 752667AF9269D5819886F9C647F1146C03447B9914ECEE5E5A287960EB2E704E + E1AA3DB45460AD95D6B2276D420494F3664C6D6290436F7BEEFF673D6268DDB9 + 6B3D1A980520F7935FAA53C5EA0C1655370D85D21B485627C3F428623603D6DB + CACE8EA0278B663D20049410A07675DC4CF9CCDE676F0F73FFBD67CCE71F7827 + 9275EEFC8B324F4111822A250A26FE89533586224CDB9CC236CB3CE718496670 + 6251F9D8A311A5328C116D466B9156853A2A29054AF48D8F874EF8A106A8D9F9 + 70A553BF368569F2CD9FD64E9CA8B952722F963050313424B443CC121A56B473 + BA95EBAE5E5E2A00BAF69051956A4AD542AB2B266B345D23183144920D982943 + AFD793103C774FF0E21166C4B23B8FF3438B87855B367076E8B8D6FEEC4E63AD + 8D56DC07F0F6F28DA67E02AD196A9DFE6D3346E1264E0C24B810A8B84B2804D4 + 0A66B09F374FBDF9E7CE9A76CEE5261B7B1B0FCBD7D97B21D7D6B5897868D859 + 199410998A312558366891DEE8FAD013482270EDC9C6873ED8D0E8CECEA0B1D3 + BC02B50869506F842010FA381430B77DEA0D0F4AAE94522893DBFD69CAE4F544 + C95E23376D4ABFB1460534F402C9105C351757E9D207F97CC58D970A40AE852A + 8D143C8A6801A6DA68B646F0933FCC219B256FDD228D68B163025ECB377F73D7 + 020E78CD88A0ABFDE69B3D6FBE7627B66B80AA99DC318FAA4203B4C5FEB90118 + 413348ECE77E2E5E75BA97EBDE3E8E466D5B98B2791201F09947BDBF61834D36 + 2E6C8CBD8DB13F1953F62E646AF8A9EF2753707E4194468981A9786BBC453AEC + 6832AF04F0B26B953F58574A12C6DA6BE36A621CFDE4A71A3A1981AEFE3D79E3 + DE71A3B54ACB95DA132965CA94A93F6757FFAD55B7550216C5AB65627004B2AB + 4CA90D6B0D31E3D55F7BEAD2BB310335EA27B74C8DD20E5CBDC6440A23161B1A + 20F67F9B2412547DCA178737087AAE6246F4ACDBFA6EF38B79B432F300736D94 + E6A621CF032534F6446604F5E6901202818AC548684ED890204453248298221D + 4832635BD20E207298999F37DEF3FD0EF9AEB3A3B017D7CAFEE48660230F0000 + 2000494441548EFB54BC37910B9E124238343BCD28018679344EF3411A838275 + 3E0740BAF5F63BE4ED6F7FA759AB8E00B6C0D0026D544A490C2950936EC7A411 + 74EBC5A855F7137AF3A39A7BB1442EDDE173CFBFB4EA55D0E2765F63DF7CBC60 + A2A922557B1A561993F075AF3871C9FE2F6581D6460B4AA6526BC6AC9224904C + B1A81803CD8C141249032D24A23457C3733D00870E98CDB4AF1EEA556AEFEAD5 + 28DA0B3E6AA3B4CCA495D2A78B29B13B9160B600E965DF6A8498DC0F8BAEFEA3 + 280121062500DA4AD710ADE7151C445AA5E576E3B783ADD451D6CD0417378DFD + C9B69B3FE7624AF79D04376B165CEBA8787450AA919390DBCC303A14BAAD06D8 + 59C02B5F5EB9E7BD02A1A163A0B54A8A8D3604428C3E374F1A8821B8E76B3AC7 + C9738C5FFCB93941B2D6426B95DCBACD17415344878449F050A82A9A0B922BB1 + 16C41A5FFFAA931C5B5DCA565B30D2543BD9324233428C0C31A1D57AD2494971 + 40835243205ADDDAFF27740E99EB01F5881F600E5797D6D9C1ADD16A215B2F7A + A942EB2D62C0AF5FC4B0A0A4B42058EB0D2BBD61D55C7C16C4102A620D51E9E1 + D80C827BB8787C79D261F4195B29EEE4AD27657FA3EC4DC67A32D6C5BB91956A + 1DE0F11D35BC57510CBD26511C0AAFD1A3845AF1EBEFADF1AC6B8A04DE10E1DB + FE0CBCEB5C8564B406310662AA0C5990181D00C230E9040E6B3DEE7528D56AB7 + 91B5A0CD3D68D53E6C6146F95244D3808960C147B2587160485A216843AAF1C6 + 375CCFE3D715F124550BB48869C1AC3258F26B886C1DBA41B5B76E49C4100952 + 8F44E25DEB7639503C4BE949ACEE5B68EBB98B4A350F0F4B530FD72CA0127B47 + 12EF1160A13144E701EAA85874076C4EC38869FFB9615AC026440169087D148D + 65AE585EC93A371F72D5BDFC4D7667EF60EA5E7FDFFCDA136D33ABD83A641262 + 40A37437D068419DEBD0354551F114C6113F20B9FD8197DE1078C54B2BEFFF50 + C344C9C5BDC57190CE821542F0116A8EC1BBBD562A56D5FD00AD68AB3DB73E27 + 5941A3A031A12962011A7EF22D17CF0DD48AD40A4D79E52B76B9F925C7B621DB + BCAE8A57BA075E1BAD6E4869E8695CFC14C781165D9DC71089A1F93577BCFDA8 + 09E0088C6CD6AFDDE871BF672BEB36340C680BCE55100FB2250C08B873897BD7 + A8909AC11840BD55BDD3C314CCBB80A8144A1D105D6FAF25584018B87AE7461E + DBF754FBBA27D9D63DEDBECE7392ADDB7CA4A7E215AF87542010A232C6801069 + E2CD2E35BA10B47946A2C178C40C24F0C4C0BD77BDD3FE833F1FF93BFF878339 + B52756A60C43F07978711BCE689F9FD37A42C405A154FFB2DE59D337DE92ABFD + 162248DFFCA67EF25B71F55F1BA812057EF0BB6F7AC2E907B871F122F2A4B49A + 8148C3187AC8A771D8D6F7B510FBC98F9DEE1DB6E1D72C0266F3B858DDA6BE6D + 46F8CC934005C738CC0C95844904738753259042422B24499839622A1ABADD17 + 4415B3C04A4F219618E438A2034D3399CA453ECAD4F678347F04D5034E2D6FE4 + 538F1672DFF04DF1787FBBF1ADDF3BA587E9F47CC4EC5036520CD8E8CE5A0C91 + 9A94D8A4CF3D70BCC0A7AB1C86F25B439BA2F0A2AB037FEE5B02BFFE16437B72 + 04B487148E02C6D99476AC5BA9CC7AA875D5D78260096A0858574B12DCBE6947 + D0B466B4BAF608AA48833FFB6D5771FDD54B3FAD8FC32C6F5ABC88D446366572 + A76B865B499E938F891A1A29F8C68790B68CDEED7F32DBBEAE3BFA483835B6BD + 011ACD317DF166CE7D581C109198C0121246C49C392C4468422481C1424F7052 + 6FE2142F6621D722D13740531F3C118C9A1A2D2975A9D463850B9B4F72717FC1 + 075B658CB567551D61CDCD99584D754BC0F1FC8BF599464ECB4F2930261F6E99 + 624307419BF72370B0AA33B4CC354892C709C0ADB7DF2177DFF90EFBCE6F1C79 + FF0727DEF301752F1F8750ABF53070EB50B105142434AFCD17B018B168A8F4CD + C71D2DFA0C3E5AA5968AD5B66D9028AABCF4C615DFFE8DD76E67F53E7EDD7ADB + EBE42FFFF25FB1BBF73F408A73FA7586939DA21683D08276EA76EDE1DF3C01E4 + 8850A9740DD04071CDD11D29D401150BB183361193012161361064246882E6DD + 3ED080C8C055FA52AE6E5FC3B1788577AC18384C55F79B1F1AE4D608DD05C42A + 98707CF9623E755179F0D31B5A3D60110F38B9531C55045A937ED2FB2C03755E + E63CC944801403AC22A906EA10FD6FDA893D16B6A4579F8328587C9C00808F40 + 1D07E347BE7F879FF87F321F7A30BBF4503133A2F9D0246F9034178338C2A562 + 103B4220D2317AF772AD776DD0E67D74B6A26C4A30E3EAD30BBEEF8D2FF68A63 + 9909534F5CAF39F9759C7DE83D98CC3537C9891AA911A312B417728820125D98 + 82DBE9B085BF3CA38899B776177546B3698F730DC2E0589A2484848488321074 + E99A8085033D9A38C94DDC185EC5F174252178A24942EF3AA278910C8656459A + 936C0C08A690A27719ED4EB124400317A6C8C317F63936AE1953F5A843FA804B + EDE9FACEDF30F3CD1F06230DDEB4DA2322374BA68714BD19AC32E654F2E30420 + 0437053BABC08FFCC071FEE1CF153EFCB1BC4D4195AE7AA3B99D093110222881 + 0EB963734E523DD9625B3EE08C91BBDD0DBD33C7D5A706FEDC375F434A3D8B21 + 3C41FDCFEBB557DCC63FE297BCF63EB9164841B11269DA0E8B39424444DD94B4 + 39792587EEBF81B5061D87B08ED5060B5DCD1B419DE54DF0131E492091200988 + 8C7A8C97C9B772E57083F728EAF3E5E76C9F9879AE418327938220CD35961828 + 4E416FD1080666CD515112212C90603C72606859B318269228CDD8A6A6B7CD38 + 42A0A9ABFE79DCEDFCF799A3B9A5B56DDD66B687EC1201B8E5B63BE4DCDDEFB4 + 3105AE3C1EF991BF78925FFC17CA3DEFE9B97BB4C38C9548A05A2368703F8088 + 177A38C439031CDB2B985BAA748B2A08D75E33F06FDD7225AB5574BC7C9B6438 + DCAB4B04E0EBDF203FFC8B7FD57EFF53E7401B160C1D024194C1A2934944B6EA + 5F6608580F4BD967B2EAD10F984BDB420C4413C2E03EBCA339EEE445F3DE0241 + 464ED88BB8397C07C796AB3E20DA91BC106C0EFEDC6CF64D882DD0AA768A9A1F + 10C5B01A60886867F648EC3D045B72A19315CDE0C25E63881BA228AA7EFAE7AC + 4EA02143F4EC6A9B59DA334957518BCCD0F3E1F77D1227705E3EFD3A308E9193 + BB89EFFA8E93DC706DE4F7DE759ECF5C548CE664C3E0F967F3341EA2A56BD8C7 + 930E6C0B798A08A89740DD74C382175FB7C330CC3EC5D11CD5912B7CDCFA0B37 + BC81DFFBF85D0EB7D2D0AC846868F0F87FCEBACDEFE9A0CB1CFE1D0A97A7861D + 22467C720836C2E0248B108287726A4EE49040B4916BF5ABF9AAF4CD2C86E4C9 + B178182185E04EA6A2580B9E266F4EE32EFD73A4DF23D3800E8648A258F5B2B9 + 1848C16849086520C48688572A4D59412742AC5D9DF7F74A61B66CDB35379CB0 + CE9CF22DF03D1133AF5C9227D100E0CEE03DEF7AA78D49588D91DD55E2969B77 + B8F69AC4BB1EB8C07BFF689F756DFD307B69EBECB41DE6DABAC3651DA1EA0911 + 034E5C3170F5A991E3ABE465E6D2B364473254C82156FDF8F53DDFF497E4BB7F + E607EC9E47DEEF0D9A42C7F42552918EC0C5C332ADF92D3BEDB9E7B19CB225C1 + D575E8CE2B851006AFC933C35A7068354492456E68AFE2AB16DFCC30B8C0A479 + E44C0C1C5BFA2411037211E7E74D7D3CAD1C1144C39DB0E4FE41C5AB923CAD6E + B4A8C41069C9082DFABD0923313672F3B27B9F8BD4A3FF990CDB0ED3E77A68E9 + 7A0755D7C0F31E381C6C4F2E000043126A0B8CA3B1B38C1CDB496CB2F2AAAF3E + CE0DD72EF8F027D67CF291CC63E78BB7669B374D8E9C60632BF129048641D859 + 45168397544BE8EA191FFA34CBA8033B4F6E02E6F5835FF9EF72F7C37FD88917 + 8248C5A43A3A27C111B6AE7622D137BF5F946DEF8E6DAF314820C5EE5091090C + 049498205A2459E02ABB959B97DFC43878AF84DD65F77B0C8E2F85EB4F067647 + FF9C5C8DF31BE5E18BC685FDC3DEE573CDA026E99EB9114C69D58B67B705B433 + EBAAF31B9C5B924892686DA0E263F1C29C40EAE660CE708A871F8E408AF420F6 + 90913487C44F2900875AC0A760EE2C9563ABD48189811BAF334E1C1FD8DF343E + 73A1B8B46F3C3F4E9FE015FA27780EC12B843D82981FDE6D3B044FD4B859EED3 + 3EB7F1FA93AFEF7BFD5F96FFF8FFFDABF6AF3EF12EDF819E96459CE63557E28A + 4043FD34CF85FFADD3B845DCD1C3730A7E5C02228D18BB600520058EE9B57CD5 + F82D0C29320E70CDC9C8A95D275C3485EB8E074EED3AEF4F4D18A231356388C2 + 623C0A410B6D080CDD3924791C9FA250C25C3D2DDB7B22E2DAC991C70A128992 + 9CB3588D30B07D6FFABF9D0B6F8D198EB66EAAE61C058818B7DCE60D399EB24F + E0909C0BB81C02C796895C1D999A8A570D1D1E24617FD3181394169D1FD8DCFE + CC9093889F9610E69AFA1E9E054FA1D2F3E4B3541E7AAD4FBD7EF415FF21777D + EABD9CCF17396C0E3CB75D99FFDFE8660A0E017333E64682A6911003D2397E31 + 472F6295868911A2B0D0C4CDC35F603926628453BB912B8ECD270E4EEF0A2777 + FA77EA57B0299EB533732A960E5D4ECD2B9435868E8D583FF9BDF9C37C6FE488 + DA0608B6D5964122814455255A038B2E385B2163CBFD0BCCEF6BDB06136EAE0F + 0FD713FA03CCEBD6DBEF9014838F565D08BBCBC8F19DC489DDC4EE2A717C77E4 + D84E6267D5276E2E138BE4CEE330B8CA8F49B65F50A4B363E3DC65DBF104077E + 04821CAA7E794A1F70BB5EFB0DDF2EFFFDAB7F94D4C20C95E10DFDD5B325C5B0 + 52B05221172C37CF3D4CCDB987D9FD002F5E51AC185A8A6333DA106D488317E9 + B772623885046191E044DFEC4DF63ABD533B7DE46C80208EB8ED670FC552F492 + F9B967C298BC5FC298842186EDF4B214851467C2ED7C107AD6B59F6242877CCD + 7A87D3482E5DCBE2AD635C135CDA3D3D05EFD590BC3F75CF8F5C860000DE102A + 0A8BC187211FDF89FED84D1CDF891CDB19D85D45765689D522322E531F971ADD + 3BEE4918A745FBCFB18333AE92BADEE2305AEC5001C6D31736FEC56FFB61F96B + B7FC25B43AD0A2D5D0E2B8BE3FE670884E61A63B19745412688634C36AF38C5F + 35AC000D56F52A6E18BFDE6FA4083B2B6135D073EBC615ABE03D13E6DE1040CE + 0ED30E4158F4CADE55121631B010D825B213222B09ECC4C88EF4D721B2138445 + 082CBB90F801E937441D9436CCC351000DE4E64E741077464377A89DBDE5FB37 + 76018D812720AD9F55006EB9ED0E197A9387D522B25A468EAD22275689633B89 + 633B9113BB03C77712C776068EAD223BCB81E598186364187D666E48F370853E + AA153AC7405C7B8B7479EF427044209E6EFDCD7FEFBF93EF7AD91B2E8D7F3B7E + 4EB33977EA98B9F6DFB5D65D4EC567033BCF0583502A411BB119370D6F6008BD + F143607B6A4B71FBBE1A0F375F700554D5588AB0136024B0D040A8400129015A + A44E42CB42DB086503652DB449686B214C907260A1915D092C62608CE192A61A + 8221EAFD82CAE4445447667D6A5AC0B61D46860EEE0D7D0F62B44B34C0D3F60A + 8EFD0DC614D85D446799B4B91CCBED9AC9A183979211622304A79257F5F4A844 + C71742F27857FA7427093D97DE47C0B643817F7A3BD0D77FF6B53FC8471EFB04 + F77EF27DFD37D6BB70C1210228DD0F108CE0AD62A59F1C9B31881EC2AAB1E024 + A7C7AFEB90B6BFC59495BDC953ABA797C298AC7BD50EF894AA84E6EF571B2E78 + 7856D1814FF1746E2F202975AEE8514A563693B1D934A683C6B476C6B1346359 + 03A440D0C04603D56A8775FDDBAEB372C58943C7DAB19C6E7A06D7E443370347 + 43E3CB12805B6EF3593AAA60A30F53AACD7AFEBCDFB8203D0317885989319062 + 63CA7DE45ABFFFB1F70A8ADDF607099DA4186607FD8806F0DE0297B36EBDED75 + 72CF3DBF6F3F76E7FFCE9907CFF936CEDA43B5FBA2B35BD41DD360DD2CD1373F + 903AB822A65C9B5E4F0CAE1D541425B02EC6A307CA8985CF0E4E819EEF17777E + 8B8BD75CE4D23FBE3B6F82A0DBEB3AEAF0FABF36B0EAE565D58B69A74DA66C9A + F3250442888C5151F351B574AD75B0DF90AB8C289EE54BD11F63C27B0EF5E966 + 7EEF2FBD7797D52DFCD6DB1D22566039F6E1CAFDA422AE018228210A29795E3A + 0661180253AF1E367AE3A86E5252720FFC50A9B16D86E482205B09BF9CF59AD7 + 7CB3DC7FEE9DF6BF8D3FCD6FFED1EF39F8D9DFD44CDC71EA004A308748B62C5A + E92620081110852B8757F753B66551E2738184B8E3F67DEEF5D71AECAF214F5E + DAA6DDEF68F3E6F7E4906DB5D25C3DD4E5B103537385B3C305CE59546DDE84B2 + 168235E2288CC38216E64C9F61C5586F94D3279CFF3FF666538B2178E3A92E08 + 7ED86476BB2E5F00609EA3434F73C6EEB10B260D45105CED0F291262F5CD9F94 + 945AD7021E9F0C2990069FC9379B00098740D036D1D13FF7817367EC725BA0DD + DA63DB9F7CD3DFB3BF7FE6A7996ADEE212F36049A7EC771361D669CE615B57A7 + D5580DD7B00A5753D4481668D53CAFDE9CC9143A846C5D0B3AEAE7295A370750 + B493302D1C6E947622EA9CAC997989D6337BDA8B4C5B83DE43413B51457B0AD8 + 54092510C7CEFA112F8ED93BA8C4B4DAAAFEC5D03BBB0E8131B9EFD2735B9720 + F5972D00B7DCE613B5D4601CF0CA21D8A2102108212A616AC430B2CE8D148D54 + 22A57A39173DE132C4484C8121B9D9A0A381AD57B2D64E60700AF3653A0247D6 + DFF8AEFF467EEB6DBF62FFF0EE9FE5EC47CF7518D8BAB3E914B21E97F6C3DDFC + 54D8801A9C94DBA954A246A40A1643AF08F66BCD05D61324F1B4CEC1E43D14C4 + E8609097D4A9899BCBCA7696B0EA614E5FD55540ABDE97C03ACDDE2B9EFA9C61 + E9C5B066A87812BC6825E69E8012C716F62E563FF97DE3176360390456E3A1FA + 9F69FDCFC80738BA6EBDED0EB9EF9E5E5736CCD0C3FCA0978D89CFEF4D819494 + B17AC978EBD929219046772A67E48B205B27D09B53C8B602781EFEF04CD71BBF + E57B05E0677FFB9FD8FF79E73FE38F3EFD61CFB86DE11A45C508BDAA56A210A5 + 2025B00C373A5744CC556D336A84513DAAD83BAF7CD240AE8CA408170E8C4D76 + 5047CC7DA2D67DA5A9B8D668ED288BE75008E6BFCD35163A179BCE6C1F6DBD7E + A1B969080EB9670329FDFB44619D9DDABE18926FFCE0BD9D866E0E6238847F8F + 6AD4673C31E4D5AFB943CEDD7DC62CC112D8964089104273A027386A9892B029 + C630D8B69802E999B6396E9D8540FCF43B1F7E26403A90F14CCCC0E3D77FF49D + FF8900FC835FFD5FEC9FDCF54B7CECD14F6C030367E63486E414EB662312610C + 5752D5084D9118A8D58809AC7A278E1ADD8357357616C2C164B4EA1D52017F57 + F593DF7A0FE5D22BA86B354A752170D4B4524BEB8CEA8696E6A5F3D509B6DA2A + AAC5CD43324CE2B6995603820AA169F74F94D518582D3C5F31A6C0D841A82D06 + F0B8FBF3398D8C49D19D1F122CB76957ED9EAA11C535C0BA18291A453D76AEDD + E6CDDEF79CFC90EE482A8ECD78258B6C41BD78B9F1E06759FFC5F7FCD702F04F + 7FEBFFB2B7FEEBB7F3B63F7E17FB79ED2AB42A51128AA05619C2554E5C9588D4 + 46106359A2F74030EF9B60A3F0E9CF347696A953CF3CEF008039FFD1ABA67DCC + EC2C04A5F6BE4A7DA844C95E725E7BEF04A7D57B6B1DED750A6A8649C3693447 + B15E81AE51C4BC0BDB6A11588E61FB3C0E610B330B3CA1A5ECE72400EE0F9C75 + 5722990B4167748828311A31FBE66F921731D4D41DA3E600E77C419E1798EBE6 + 3C4B56CDB186DABC274EFB1CCDC093AD1F7AE37FBABD01BFF2969FB57B3FF61E + FECDA39FE2938F7D9A07CF7F92528D283BB45E7089186308941268E2F06E22D0 + AA9005D868EFE44D77666D26505167F266DFFC5CBCA57EAD8DA97750297DDAA8 + 6F7E6F55532B5A6BEFAF64EE14F6532F711BFD21D11CB954E72D9819AB31B0B3 + 882C86B00DFF0E671C3EF17E7CCE43A36EBDEDB55B21903423511EABC6A80E20 + 052555988A1737A6CE6B87E069E423712B1D4CAA7A68064A83A1BFBEFFDEB376 + EBB33C65E4E557BD8C9B4EBD1CDD264F9CCFF74FEF1C69268805068DA4EC612F + 31A0E231BF933AA0F55CC79C65C3E694F6A1C3578AAB7DDF7CEFA2E2BD13BD95 + CEDC57C1E70D36AFB36CFDF4ABE3D74A2FA7C77C06E19143E13887979EED2C02 + 8B31B0181C858DD2AFED29EEC1E73535ECA810CC9F20016FAA1C8C9422292B43 + 127275B53E3733301CE8917E7262ECB030EE085615B2C2D066FB659F972F7074 + 3D70EE8C15F5FE7ADA11C0ED75086ECF83C7E4B506F69A1293300E333E210C6A + 4E0C5621552E39619E70EC9CC06EF35D13B46D0B9DCDD4C853214FAE014ACEE4 + D2A8B9D08A5757B5EA3475B38625D9622EDE7AD77ACE1FBC50D7E1DFD522B2EA + B31D5277FE3AE8FAA41DC53FEFB171B31088E214BA4E64F044043EB5AB185384 + A9192949A7333B9971AE008A9D2380744048A577C270A7D26FF0E7AF001E3877 + D6D6758E343A303C672AFBCF43A8ACAB4015A76205EF09EC1B2B0C2A68EC262A + 0839BA098039253B034187E15E294A2E95521A9BC951BEA997D297E948316DE9 + 6D695AA1AA3AB3BAD7FA99B8CF7DB4A7A334A7D78BC189DDC4CED24FFF8CFD87 + 4EFF7DAA83F3ACCC0D3CD4045EA02883DBF424E6E9C8E8277928426973A5EA3C + 2D831981DFD2C2ADF7CC9F6BDA7295CE2B8077DF7BC65E75FB33D7020F9C3B63 + CD84BDD2EBE9B41324E67C79274E08C628958B9AE0C059CD4844175DAD8F81D6 + 8494FC7B9520C47A180CCF3C86590B54F586503E59DCD57E9E0AD3549836A56B + 81EC9DD44AED23677DD05633AF20D679D363D8C2E4473EC453C428A74F26F7FC + 87D04FBF5FD3AD9FE57E3D6B8323B79A00873643C21DBD59131447134B83A14A + 0FF56626105B40294AEF9C412F91360847BA628170DF3D67EDD597397E6EDEF8 + 83E289A6791883C83C71D4A38C59086EB9ED0EF9B19F7E9F3DFC68A26EBC7D8B + 33C5AD57DB18C320D4E637D8C9A0472B996C5B10827A578F5A1BA5B4AEEA7D6E + 52CED9377FE3CF732F85D29D419F68D20B6B63F0B27A710CC0A5C28B4E3DA475 + 22EB4BAE5BB11C9D9F108FB08A3EDB7A562787BA109C31B1439BE87D7B84148C + A109B97A8E3C37A8E637B4DA21252C8499B06087422020CDD09E116F01EEB9FB + ACCD248C27536F0F9C3B6BD5E81BDF4FBDF949F26BB24EE2389CC733BFCFC965 + A14D893C05374715E2D8B1825E269E8E905DE008C226F44692DE396C1680D63D + FEDCD57DE927DF1B691CE9A9507B0B3AEB154ABDE78F853E705A981B13B8F7DF + 1B6A8C23BCF8BA951371FA3D0C4F61F7BF6002008E166E891C3DD40BC10915A9 + 372B2A0A639F78514D3C34DC6601674A943B3B8A0342736EC770CE5D53773483 + 0877DF75A7859E669B2B67F78ABF579B732E5D6B467108D7D931DE73F7F12357 + 6EBAB27076BDEA27116891A8014D3EEB200DF2FFB7776D21569551F8FBFFBD47 + 6D4CC66E949997B0948441BB402664820F4905214410F462104117A897A01EEA + 21EBAD8240EA2DA8C08AA28742838A08C98692D4A9A0E802514644506053E7EC + FFB27AF8D6DAFBCC6036A367C487FF83E1C0611EF63E6BFDEB5FD76F2145EDDE + B118DBA20058B9D7964569922728D9549368F24320AD4E9F241A4D131002B996 + 82720E67473EA15C79E40A24A168273D325CE270AE17C1A52B46B17851D5F62C + CCD65D9A97DDC1E3AA04D37AD31C971F541EA8331581D93E8750438B23F4B029 + 2C372DD36C3E012713D8B35FF90107118E851F6777243546F4EAA8DA8609A076 + A2092B5AAD99CFBFE2FC089FD926C652BE9245EAE2AB1835E55D196792681E43 + 0049DA9C42E127195080C850AF09898C694DA0D90F7140F896F777C815E72BC5 + AB150060E61F3AD18CC4DAC655E36318B1A28F9AFED9444C438DAB8F872F0E4D + 48D6F90063118F5AF4B19E02631A4FEDFF74BE81B8AE89C1AE15A7EC1B1C5695 + 36CCB117320B621E7EA526BEF69AA9D4EF4FB4CFF8F1A78FC8E4B7159935F407 + F53515C0EB7CA4F75400DA1D9B86E2E964068FA19C31A3A69490426A57CC99C3 + 6749A090339081E4C1D6F1AA82541515414BCA5CDA1081C0E5D3AE89404ED8BD + 6B03565F3CDAE6FC671B2ECFFBF6F0F12B37B557023786F1012B8D00B2970165 + D0EFA4A33F3165684FB32D5C70A2836ABC169CF0449B92547ADA2B27AD027865 + CBF4F8FF2D5BE3973598FC66A18672DAF5940455D0F4B54FAA689DE987D5F345 + 8B3876052809464C09B98988811434312A934A4C08DA08D90ADF573A5AAFC207 + A85C4948A415025C620268DD9AC558B56CB465009B4BAEE4B4AC8F1FDC832300 + E095EA5CC7B46B883A6A5D9BD9205F7FD6C60B8B7DE19C76D6584A59A63973F4 + 0D0435E82492A387A67AB61B38D7AE4C387F2CE3E7DFC8E699C5C1D50ED951F9 + D8854BC66E0781787D50E519B01D09BC0A22994DCCC9135E01311A53A99A7DEF + C8A6E22B486D279F8E2F74C21A29C3A50817332445F82CD8B1FDE256F8734D95 + CCFB15703C50115CDB21C3793AF07A035A3F60D00264B19C976B1FDC7E7CE7B4 + 93C7C8999C0A9EB6816B6E65EEBBF55E7AED5379756F8DBE32754038054C72A8 + ACA95FD60BA8913605CD4F1B8727A9A451E8248D0C624B51D3A6795BE17B64EF + 755C4DAD4B12204448D3C0F5FB704D848B01AB962DC2EE5D1BD96083B99D7EE0 + 3459809918B40800133F5EF859A16B0815716A5275E41AC0B476164015400728 + EC135400408EEBE4CD161BD7667C7C30E3879F0492C8C7232E80BB0113BCCF9A + 99C87AFFEBDA19D1061890483367AEC989421F806C249AE3F750F634CF50AFD2 + BBDF4EBE9DFE988014E1538204B63D3B11DC75C7AA9332FDDDEF7706C0AE06EB + CB05287C7B3A111BBB4627FF81C490E546EC4E3E99D3FE5F78F7BD0979EE458F + A95E83D024E5E6C9EC2612E9EE7F3002300B90397C40AEA5CCC20E948A0EDAF7 + 271EC8DE77DC89DE755EBFBDAC79CD31C03501D20F704D039722AEBBFA1C3CF6 + C0157372FA66E28C50809930A79105C3EE112D961FBCE744BAD9F761097D269E + 7D6142DEF9A041EF9F84262676EB6839CE68F39801CC9AC6B62B20034E7D0111 + B69843800ACA9B4861673DF96DD207FAF676F263840B11D26BD4F98B386FE908 + 763FB1014B978C9CD27B9F910A7026E28147F7CB912F23AB7931C2B69DD2E48B + 156C79F261742C02F149C359D17CBE1150399E74EF78FF6BB107401B4AF2E453 + F8680243BF10B1D0034F3EB21EE36BC74E59E94F381954D061E78E1A97AED0F6 + 7768F76E8EAD839745770708CBC0C983BB902A8F54931B39D61EA9AA91AB8A7F + 839EBE03C8AB93D14EDF049A7D13BE8F11230E78F8FEB543113E502CC09C30F1 + C90179EEA5BFF1FD0F7DF49BA8C99EA493BECC69881F28D956D0FE3DFB4EF4E4 + A335F5DDA9CFD343BD98E062001AE6107C8AA8003C74CF1A3C78EFAD43935B51 + 8039E2F3CF3E91E7F71CC3E1C91E9A10108376EDAAF187D319825AC33ACD878B + D34E1EA843EBBAA60F8D0000016749444154A44DEE902A4F4BCF99ACE968A2B2 + A77356F1AC050E0FDF7B39EEDE79CB50655614E024F1D433EFCB5B7B8FA1AF55 + BC9CB3366C82C99CDAE93A3CA3BF21151C0764D00A1E3A28E232D3BC8E13A61C + 074B092E67AC597D161EB96F1DB66FDF36747915053805ECDBB75FF6BCFD270E + 4FFE8510A2B66F319D4BE78E9FC69F280EEDAC220902BBD3CF0C9F16787282CB + 8225A335EEBC6D396EDABA0C575EB3795E645514600878FD8D0FE595377FC777 + 3F4EB1769032637B8D0D8C9D86C90A3BF9FAA7F90149A283A6190B462AECD87E + 116EBF7939AEDD7CFDBCCAA828C010F1F29E0FE4A3893F70F0D0314CF574843B + 7302A9DD8CE2A4CD16DA50A8553A565E328AAD9BCEC38D5B2EC2F5376C392DB2 + 290A300F3874F0807CF5DD14BEFE7E0A477FEDE1E75FFEC1D15F7BE8F5B4C357 + 800B2F588873977AACB86431D65F7636C6D78D61DBB6AD451E05050505050505 + 050505050505050505050505050505050505C3C3BFF84F17C91A5A01F4000000 + 0049454E44AE426082 + } + left = 856 + top = 48 + end +end diff --git a/components/rx/version/2.1/Demos/RxDBGrid/rxdbgridmainunit.pas b/components/rx/version/2.1/Demos/RxDBGrid/rxdbgridmainunit.pas new file mode 100644 index 000000000..9f510adb4 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDBGrid/rxdbgridmainunit.pas @@ -0,0 +1,271 @@ +unit RxDBGridMainUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, rxmemds, + DB, rxdbgrid, RxAboutDialog, ExtCtrls, Buttons, Menus, ActnList, StdCtrls, + DBGrids, XMLPropStorage, types; + +type + + { TRxDBGridMainForm } + + TRxDBGridMainForm = class(TForm) + actCalcTotal: TAction; + CheckBox5: TCheckBox; + MenuItem10: TMenuItem; + MenuItem11: TMenuItem; + MenuItem8: TMenuItem; + MenuItem9: TMenuItem; + RxAboutDialog1: TRxAboutDialog; + RxMemoryData1RAIT: TStringField; + SpeedButton1: TSpeedButton; + sysExit: TAction; + hlpAbout: TAction; + CheckBox2: TCheckBox; + CheckBox3: TCheckBox; + CheckBox4: TCheckBox; + ImageList1: TImageList; + MainMenu1: TMainMenu; + MenuItem5: TMenuItem; + MenuItem6: TMenuItem; + MenuItem7: TMenuItem; + showColumnsDialog: TAction; + showFindDialog: TAction; + actOptimizeWidthCol1: TAction; + actOptimizeColumnsWidthAll: TAction; + ActionList1: TActionList; + Button1: TButton; + Button2: TButton; + CheckBox1: TCheckBox; + ComboBox1: TComboBox; + Datasource1: TDatasource; + Datasource2: TDatasource; + Label1: TLabel; + MenuItem1: TMenuItem; + MenuItem2: TMenuItem; + MenuItem3: TMenuItem; + MenuItem4: TMenuItem; + Panel1: TPanel; + PopupMenu1: TPopupMenu; + RxDBGrid1: TRxDBGrid; + RxMemoryData1: TRxMemoryData; + RxMemoryData1Date_Present1: TDateField; + RxMemoryData1Developer1: TStringField; + RxMemoryData1DEVELOPER_ID1: TLongintField; + RxMemoryData1ID1: TLongintField; + RxMemoryData1NAME1: TStringField; + RxMemoryData1PRICE1: TFloatField; + RxMemoryData2: TRxMemoryData; + RxMemoryData2DEVELOPER_ID1: TLongintField; + RxMemoryData2DEVELOPER_NAME1: TStringField; + XMLPropStorage1: TXMLPropStorage; + procedure actCalcTotalExecute(Sender: TObject); + procedure actOptimizeColumnsWidthAllExecute(Sender: TObject); + procedure actOptimizeWidthCol1Execute(Sender: TObject); + procedure CheckBox1Change(Sender: TObject); + procedure CheckBox2Change(Sender: TObject); + procedure CheckBox3Change(Sender: TObject); + procedure CheckBox4Change(Sender: TObject); + procedure CheckBox5Change(Sender: TObject); + procedure ComboBox1Change(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure hlpAboutExecute(Sender: TObject); + procedure RxDBGrid1Filtred(Sender: TObject); + procedure showColumnsDialogExecute(Sender: TObject); + procedure showFindDialogExecute(Sender: TObject); + procedure sysExitExecute(Sender: TObject); + procedure TRxColumnEditButtons0Click(Sender: TObject); + procedure TRxColumnEditButtons1Click(Sender: TObject); + procedure TRxColumnEditButtons2Click(Sender: TObject); + private + procedure DoFillFilters; + public + { public declarations } + end; + +var + RxDBGridMainForm: TRxDBGridMainForm; + +procedure LocalizeApp; +implementation +uses rxsortmemds, FileUtil, gettext, translations, LCLVersion, rxFileUtils; + +procedure LocalizeApp; +var + Lang, FallbackLang: String; +begin + GetLanguageIDs(Lang,FallbackLang); // in unit gettext + TranslateUnitResourceStrings('rxconst',NormalizeDirectoryName('../../languages/rxconst.%s.po'), Lang, FallbackLang); + TranslateUnitResourceStrings('rxdconst',NormalizeDirectoryName('../../languages/rxdconst.%s.po'), Lang, FallbackLang); +end; + +{$R *.lfm} + +{ TRxDBGridMainForm } + +procedure TRxDBGridMainForm.FormCreate(Sender: TObject); +begin + RxAboutDialog1.LicenseFileName:=AppendPathDelim(AppendPathDelim(ExtractFileDir(ParamStrUTF8(0))) + 'docs')+'COPYING.GPL.txt'; + + RxMemoryData2.Open; + RxMemoryData2.AppendRecord([1, 'Open source']); + RxMemoryData2.AppendRecord([2, 'Borland']); + RxMemoryData2.AppendRecord([3, 'Microsoft']); + + RxMemoryData1.Open; + RxMemoryData1.AppendRecord([1, 'Lazarus 0.9.23', 0, 'Open source', EncodeDate(2006, 1, 1), 1]); + RxMemoryData1.AppendRecord([2, 'Delphi 7.0 Prof', 990, 'Borland', EncodeDate(2002, 1, 1), 2]); + RxMemoryData1.AppendRecord([3, 'Open Office 2.2.0', 0, 'Open source', EncodeDate(2006, 10, 1), 1]); + RxMemoryData1.AppendRecord([4, 'Microsoft Office', 150, 'Microsoft', EncodeDate(1997, 8, 12), 3]); + RxMemoryData1.AppendRecord([5, 'Microsoft Windows 95', 50, 'Microsoft', EncodeDate(1995, 8, 12), 3]); + RxMemoryData1.AppendRecord([6, 'Microsoft Windows 98', 90, 'Microsoft', EncodeDate(1997, 12, 12), 3]); + RxMemoryData1.AppendRecord([7, 'Microsoft Windows ME', 90, 'Microsoft', EncodeDate(1999, 10, 25), 3]); + RxMemoryData1.AppendRecord([8, 'Microsoft Windows NT 4.0', 250, 'Microsoft', EncodeDate(1996, 2, 3), 3]); + RxMemoryData1.AppendRecord([9, 'Microsoft Windows 2000', 150, 'Microsoft', EncodeDate(1999, 11, 13), 3]); + RxMemoryData1.AppendRecord([10, 'Microsoft Windows XP', 130, 'Microsoft', EncodeDate(2003, 10, 1), 3]); + RxMemoryData1.AppendRecord([11, 'Microsoft Windows Vista', 180, 'Microsoft', EncodeDate(2007, 2, 1), 3]); + RxMemoryData1.AppendRecord([12, 'ПоиÑÐºÐ¾Ð²Ð°Ñ ÑиÑÑ‚ÐµÐ¼Ñ Ð¯Ð½Ð´ÐµÐºÑ', 0, 'Yandex', EncodeDate(2007, 2, 1), 3]); + RxMemoryData1.AppendRecord([13, 'Ð‘ÑƒÑ…Ð³Ð°Ð»Ñ‚ÐµÑ€Ð¸Ñ 1С', 280, '1С', EncodeDate(1994, 2, 1), 3]); + RxMemoryData1.AppendRecord([14, 'Бух. ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑ "45-Ñ ÐŸÐ°Ñ€Ð°Ð»Ð»ÐµÐ»ÑŒ"', 180, 'ООО "Boot"', EncodeDate(2007, 2, 1), 3]); + RxMemoryData1.AppendRecord([15, 'КонÑультант+', 380, 'КонÑультант+', EncodeDate(2007, 2, 1), 3]); + RxMemoryData1.AppendRecord([16, 'Гарант', 480, 'Гарант', EncodeDate(2007, 2, 1), 3]); + + RxMemoryData1.First; +// RxDBGrid1.CalcStatTotals; //fix error in GotoBookmark + + +end; + +procedure TRxDBGridMainForm.hlpAboutExecute(Sender: TObject); +begin + RxAboutDialog1.Execute; +end; + +procedure TRxDBGridMainForm.RxDBGrid1Filtred(Sender: TObject); +begin + RxMemoryData1.First; +end; + + +procedure TRxDBGridMainForm.showColumnsDialogExecute(Sender: TObject); +begin + RxDBGrid1.ShowColumnsDialog; +end; + +procedure TRxDBGridMainForm.showFindDialogExecute(Sender: TObject); +begin + RxDBGrid1.ShowFindDialog; +end; + +procedure TRxDBGridMainForm.sysExitExecute(Sender: TObject); +begin + Close; +end; + +procedure TRxDBGridMainForm.TRxColumnEditButtons0Click(Sender: TObject); +begin + ShowMessage('Click first button'); +end; + +procedure TRxDBGridMainForm.TRxColumnEditButtons1Click(Sender: TObject); +begin + ShowMessage('Click next button'); +end; + +procedure TRxDBGridMainForm.TRxColumnEditButtons2Click(Sender: TObject); +begin + if RxMemoryData1.State <> dsEdit then + RxMemoryData1.Edit; + RxMemoryData1PRICE1.Clear; + RxMemoryData1.Post; +end; + +procedure TRxDBGridMainForm.DoFillFilters; +var + C:TRxColumn; + i:integer; +begin + for i:=0 to RxDBGrid1.Columns.Count-1 do + begin + C:=TRxColumn(RxDBGrid1.Columns[i]); + C.Filter.EmptyValue:='None...'; + C.Filter.ValueList.Add(C.Filter.EmptyValue); + end; + + RxMemoryData1.First; + while not RxMemoryData1.EOF do + begin + for i:=0 to RxDBGrid1.Columns.Count-1 do + begin + C:=TRxColumn(RxDBGrid1.Columns[i]); + if C.Filter.ValueList.IndexOf(C.Field.AsString)<0 then + C.Filter.ValueList.Add(C.Field.AsString); + end; + RxMemoryData1.Next; + end; +end; + +procedure TRxDBGridMainForm.actCalcTotalExecute(Sender: TObject); +begin + RxDBGrid1.CalcStatTotals; +end; + +procedure TRxDBGridMainForm.actOptimizeColumnsWidthAllExecute(Sender: TObject); +begin + RxDBGrid1.OptimizeColumnsWidthAll; +end; + +procedure TRxDBGridMainForm.actOptimizeWidthCol1Execute(Sender: TObject); +begin + TRxColumn(RxDBGrid1.SelectedColumn).OptimizeWidth; +end; + +procedure TRxDBGridMainForm.CheckBox1Change(Sender: TObject); +begin + if CheckBox1.Checked then + RxDBGrid1.OptionsRx:=RxDBGrid1.OptionsRx + [rdgFilter] + else + RxDBGrid1.OptionsRx:=RxDBGrid1.OptionsRx - [rdgFilter]; + RxMemoryData1.Filtered:=CheckBox1.Checked; +end; + +procedure TRxDBGridMainForm.CheckBox2Change(Sender: TObject); +begin + RxDBGrid1.AutoFillColumns:=CheckBox2.Checked; +end; + +procedure TRxDBGridMainForm.CheckBox3Change(Sender: TObject); +begin + if CheckBox3.Checked then + RxDBGrid1.Options:=RxDBGrid1.Options + [dgIndicator] + else + RxDBGrid1.Options:=RxDBGrid1.Options - [dgIndicator]; +end; + +procedure TRxDBGridMainForm.CheckBox4Change(Sender: TObject); +begin + if CheckBox4.Checked then + RxDBGrid1.Options:=RxDBGrid1.Options + [dgTitles] + else + RxDBGrid1.Options:=RxDBGrid1.Options - [dgTitles]; +end; + +procedure TRxDBGridMainForm.CheckBox5Change(Sender: TObject); +begin + if CheckBox5.Checked then + RxDBGrid1.OptionsRx:=RxDBGrid1.OptionsRx + [rdgWordWrap] + else + RxDBGrid1.OptionsRx:=RxDBGrid1.OptionsRx - [rdgWordWrap]; +end; + +procedure TRxDBGridMainForm.ComboBox1Change(Sender: TObject); +begin + RxDBGrid1.ReadOnly:=ComboBox1.ItemIndex <> 0; +end; + +end. + diff --git a/components/rx/version/2.1/Demos/RxDateEdit/project1.ico b/components/rx/version/2.1/Demos/RxDateEdit/project1.ico new file mode 100644 index 0000000000000000000000000000000000000000..0341321b5d952e1662a3d9444a73cf9f42a7db37 GIT binary patch literal 137040 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 G`+orYGy**U literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxDateEdit/project1.lpi b/components/rx/version/2.1/Demos/RxDateEdit/project1.lpi new file mode 100644 index 000000000..98d8a5b1c --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDateEdit/project1.lpi @@ -0,0 +1,351 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <General> + <MainUnit Value="0"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + <ActiveWindowIndexAtStart Value="0"/> + </General> + <VersionInfo> + <Language Value=""/> + <CharSet Value=""/> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="3"> + <Item1> + <PackageName Value="rxnew"/> + <MinVersion Major="2" Minor="1" Release="1" Build="103" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="FCL"/> + <MinVersion Major="1" Valid="True"/> + </Item2> + <Item3> + <PackageName Value="LCL"/> + </Item3> + </RequiredPackages> + <Units Count="23"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="14"/> + <UsageCount Value="20"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + <EditorIndex Value="0"/> + <WindowIndex Value="0"/> + <TopLine Value="6"/> + <CursorPos X="26" Y="13"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit1> + <Unit2> + <Filename Value="../../curredit.pas"/> + <UnitName Value="curredit"/> + <WindowIndex Value="0"/> + <TopLine Value="469"/> + <CursorPos X="1" Y="485"/> + <UsageCount Value="10"/> + </Unit2> + <Unit3> + <Filename Value="../../tooledit.pas"/> + <UnitName Value="tooledit"/> + <EditorIndex Value="3"/> + <WindowIndex Value="0"/> + <TopLine Value="794"/> + <CursorPos X="5" Y="797"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit3> + <Unit4> + <Filename Value="../../rx.inc"/> + <TopLine Value="1"/> + <CursorPos X="20" Y="11"/> + <UsageCount Value="10"/> + </Unit4> + <Unit5> + <Filename Value="../../../../lcl/maskedit.pp"/> + <UnitName Value="MaskEdit"/> + <TopLine Value="149"/> + <CursorPos X="30" Y="145"/> + <UsageCount Value="10"/> + </Unit5> + <Unit6> + <Filename Value="../../../../lcl/stdctrls.pp"/> + <UnitName Value="StdCtrls"/> + <TopLine Value="677"/> + <CursorPos X="3" Y="693"/> + <UsageCount Value="10"/> + </Unit6> + <Unit7> + <Filename Value="../../../../lcl/controls.pp"/> + <UnitName Value="Controls"/> + <TopLine Value="1720"/> + <CursorPos X="15" Y="1736"/> + <UsageCount Value="10"/> + </Unit7> + <Unit8> + <Filename Value="../../../../lcl/include/wincontrol.inc"/> + <TopLine Value="4997"/> + <CursorPos X="1" Y="5013"/> + <UsageCount Value="10"/> + </Unit8> + <Unit9> + <Filename Value="../../../../lcl/dbctrls.pp"/> + <UnitName Value="DbCtrls"/> + <TopLine Value="196"/> + <CursorPos X="15" Y="212"/> + <UsageCount Value="10"/> + </Unit9> + <Unit10> + <Filename Value="../../../../lcl/include/dbedit.inc"/> + <TopLine Value="263"/> + <CursorPos X="3" Y="265"/> + <UsageCount Value="10"/> + </Unit10> + <Unit11> + <Filename Value="../../../../lcl/graphics.pp"/> + <UnitName Value="Graphics"/> + <TopLine Value="1099"/> + <CursorPos X="15" Y="1115"/> + <UsageCount Value="10"/> + </Unit11> + <Unit12> + <Filename Value="../../../../lcl/include/canvas.inc"/> + <TopLine Value="1057"/> + <CursorPos X="1" Y="1073"/> + <UsageCount Value="10"/> + </Unit12> + <Unit13> + <Filename Value="../../../../lcl/include/control.inc"/> + <TopLine Value="1615"/> + <CursorPos X="1" Y="1631"/> + <UsageCount Value="10"/> + </Unit13> + <Unit14> + <Filename Value="../../../../lcl/lclmessageglue.pas"/> + <UnitName Value="LCLMessageGlue"/> + <TopLine Value="105"/> + <CursorPos X="1" Y="121"/> + <UsageCount Value="10"/> + </Unit14> + <Unit15> + <Filename Value="../../../../lcl/interfaces/gtk/gtkproc.inc"/> + <TopLine Value="3696"/> + <CursorPos X="1" Y="3712"/> + <UsageCount Value="10"/> + </Unit15> + <Unit16> + <Filename Value="../../../../lcl/interfaces/gtk/gtkcallback.inc"/> + <TopLine Value="660"/> + <CursorPos X="1" Y="676"/> + <UsageCount Value="10"/> + </Unit16> + <Unit17> + <Filename Value="../../../../lcl/interfaces/gtk/gtkwidgetset.inc"/> + <TopLine Value="1200"/> + <CursorPos X="1" Y="1226"/> + <UsageCount Value="10"/> + </Unit17> + <Unit18> + <Filename Value="../../dbdateedit.pas"/> + <UnitName Value="dbdateedit"/> + <WindowIndex Value="0"/> + <TopLine Value="211"/> + <CursorPos X="1" Y="227"/> + <UsageCount Value="10"/> + </Unit18> + <Unit19> + <Filename Value="/home/alexs/install/fpcsrc/rtl/objpas/sysutils/sysinth.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="77"/> + <CursorPos X="37" Y="93"/> + <UsageCount Value="10"/> + </Unit19> + <Unit20> + <Filename Value="../../../../lcl/editbtn.pas"/> + <UnitName Value="EditBtn"/> + <EditorIndex Value="4"/> + <WindowIndex Value="0"/> + <TopLine Value="774"/> + <CursorPos X="1" Y="792"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit20> + <Unit21> + <Filename Value="../../../rxnet/registerrxnet.pas"/> + <UnitName Value="RegisterRxNet"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="1"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="34" Y="19"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit21> + <Unit22> + <Filename Value="../../registerrxtools.pas"/> + <UnitName Value="RegisterRxTools"/> + <EditorIndex Value="2"/> + <WindowIndex Value="0"/> + <TopLine Value="22"/> + <CursorPos X="1" Y="48"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit22> + </Units> + <JumpHistory Count="21" HistoryIndex="20"> + <Position1> + <Filename Value="unit1.pas"/> + <Caret Line="46" Column="1" TopLine="28"/> + </Position1> + <Position2> + <Filename Value="unit1.pas"/> + <Caret Line="18" Column="22" TopLine="8"/> + </Position2> + <Position3> + <Filename Value="unit1.pas"/> + <Caret Line="46" Column="1" TopLine="28"/> + </Position3> + <Position4> + <Filename Value="unit1.pas"/> + <Caret Line="47" Column="1" TopLine="28"/> + </Position4> + <Position5> + <Filename Value="unit1.pas"/> + <Caret Line="46" Column="26" TopLine="28"/> + </Position5> + <Position6> + <Filename Value="unit1.pas"/> + <Caret Line="20" Column="25" TopLine="20"/> + </Position6> + <Position7> + <Filename Value="unit1.pas"/> + <Caret Line="22" Column="20" TopLine="20"/> + </Position7> + <Position8> + <Filename Value="unit1.pas"/> + <Caret Line="9" Column="22" TopLine="9"/> + </Position8> + <Position9> + <Filename Value="unit1.pas"/> + <Caret Line="39" Column="1" TopLine="22"/> + </Position9> + <Position10> + <Filename Value="unit1.pas"/> + <Caret Line="38" Column="1" TopLine="22"/> + </Position10> + <Position11> + <Filename Value="unit1.pas"/> + <Caret Line="40" Column="7" TopLine="22"/> + </Position11> + <Position12> + <Filename Value="unit1.pas"/> + <Caret Line="39" Column="7" TopLine="21"/> + </Position12> + <Position13> + <Filename Value="unit1.pas"/> + <Caret Line="40" Column="7" TopLine="21"/> + </Position13> + <Position14> + <Filename Value="unit1.pas"/> + <Caret Line="39" Column="7" TopLine="21"/> + </Position14> + <Position15> + <Filename Value="unit1.pas"/> + <Caret Line="18" Column="15" TopLine="6"/> + </Position15> + <Position16> + <Filename Value="../../tooledit.pas"/> + <Caret Line="161" Column="50" TopLine="142"/> + </Position16> + <Position17> + <Filename Value="../../tooledit.pas"/> + <Caret Line="897" Column="1" TopLine="868"/> + </Position17> + <Position18> + <Filename Value="../../../../lcl/editbtn.pas"/> + <Caret Line="249" Column="3" TopLine="234"/> + </Position18> + <Position19> + <Filename Value="../../tooledit.pas"/> + <Caret Line="223" Column="1" TopLine="203"/> + </Position19> + <Position20> + <Filename Value="../../tooledit.pas"/> + <Caret Line="900" Column="1" TopLine="870"/> + </Position20> + <Position21> + <Filename Value="unit1.pas"/> + <Caret Line="18" Column="15" TopLine="6"/> + </Position21> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <Target> + <Filename Value="project1"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <UseAnsiStrings Value="False"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> + <EditorMacros Count="0"/> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/RxDateEdit/project1.lpr b/components/rx/version/2.1/Demos/RxDateEdit/project1.lpr new file mode 100644 index 000000000..718a85524 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDateEdit/project1.lpr @@ -0,0 +1,23 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, + Unit1, + sysutils + { you can add units after this }; +{$R *.res} + +begin + DefaultFormatSettings.ShortDateFormat:='dd.mm.yyyy'; + DefaultFormatSettings.DateSeparator:='.'; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/RxDateEdit/project1.lrs b/components/rx/version/2.1/Demos/RxDateEdit/project1.lrs new file mode 100644 index 000000000..2747aa9b9 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDateEdit/project1.lrs @@ -0,0 +1,5237 @@ +LazarusResources.Add('MAINICON','ICO',[ + #0#0#1#0#6#0#0#0#0#0#1#0' '#0#226#145#0#0'f'#0#0#0#128#128#0#0#1#0' '#0'('#8#1 + +#0'H'#146#0#0'@@'#0#0#1#0' '#0'(B'#0#0'p'#154#1#0'00'#0#0#1#0' '#0#168'%'#0#0 + +#152#220#1#0' '#0#0#1#0' '#0#168#16#0#0'@'#2#2#0#16#16#0#0#1#0' '#0'h'#4#0#0 + +#232#18#2#0#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#1#0#0#0#1#0#8#6#0#0#0'\r' + +#168'f'#0#0#145#169'IDATx'#218#236']'#5#128#28#245#213#127#235'n'#231'w9I.N' + +#136#144#4#139#17#220'['#220#221#138';!'#184'|'#180#148#2#197'Kq'#13'R('#20 + +'(V'#180#197#3#9'!'#144#144#16#187#156#219#202#173#251'~'#239#253'gfo'#246'r' + +'~'#187';{'#242#131#201#236#173#204#204#202#251#253#159'?'#25#140'a'#12'c'#24 + +#181#144'I}'#1'c'#24#195#24#164#195#24#1#140'a'#12#163#24'c'#4'0'#134'1'#140 + +'b'#140#17#192#24#198'0'#138'1F'#0'c'#24#195'('#198#24#1#140'"'#140#155'}2}' + +#223#6#220'L'#184#25'q'#11#227#230#161#173#225#167#21#17#169#175'o'#12#217 + +#199#24#1#12'c'#160'@'#155'q7'#21#183'i'#184'M'#198#173#8'8'#225'N'#217'd2' + +#153'p'#155#132#191#167#239'<'#132#155''''#145'H0B'#224'7'#175#232'v'#7'n' + +#219'p'#219#128#219'F'#220'j'#145'4'#18'R'#127#6'c'#24#26#198#8' '#199#129'B' + +'.'#199#221'x'#224#132'|'#170#176#161'P'#211#223'%='#189'N'#214#195'7+'#235 + +#230'+O@'#207'r'#156#232#249#161#0#146#197'&'#232'$'#132#228#134#196#224#145 + +#250's'#27'C'#255'0F'#0'9'#6#20'x'#18#234#189'q'#219#7#183'=P'#208'ie'#215 + +#136#159'#'#22'nA'#160'e'#194#157#226#199'DO'#20'nwG'#12'b!O'#240#127'$R'#238 + +#236#230'q'#209#157']I'#2#159#211#136#187#181#184'}'#198'o'#171#145#20'bR' + +#127#182'c'#216#17'c'#4' 1P'#224#11'p'#183#20'8'#161#223#27#5'u'#186#240'X' + +#167'L'#239'('#228't'#155#219#0#228#244#12#185#140'{'#158#140'{'#157#140#191 + +'!'#235#250'|'#232'<'#166' '#196#130#252#146'ps'#27'pRM'#255#203#184#191#197 + +#143#209#235#196#247'AbGb'#232'B'#10#29#248#248#255#160#147#16'~'#26'3'#31'r' + +#3'c'#4#144'e'#160#192'[p'#183#23#240#171'<'#10#229'L'#224#191#7#177#192#203 + +'8)'#6#185'\'#158#20'h'#185#156#187'_.'#227#4#158#30#163#219#10'z'#142#188 + +#203#227#252#30'D'#247#201#21#10#220'+AF{P@\'#22#135'D,'#134#194#26#131'8' + +#238#227#241#24'/'#216'qn'#31'O'#0#222#194#251#241#223'8@'#28#255#137#199#185 + +#191#227#137#4#187#157#224#239'#'#2#136''''#186''''#134'nH'#193#129#247#127 + +#14'<! '#25#172#147#250'{'#25#173#24'#'#128','#0#133#158#28'p'#199#224'v'#26 + +#10#227'b'#220'+'#232#254#174#2'/'#19#11#171#188'S'#176'i'#175'P'#200#153#192 + +'''o'#227#166'R'#169'A'#173'1'#128'Z'#173#3#149'V'#15'J'#165#26#31'S'#226'cJ' + +'~'#143#130'.W'#224'm'#5'w'#155'i'#10#144#212#20'8'#1#5'v'#131#9'6'#9'q,'#202 + +#136' '#22#231'H!'#22#141#178#219#177'H'#4'"'#17'?'#132#131#1#8#135'|'#16#9#7 + +'!F'#143'#'#25#196'bqF'#10#220'>'#193#238#139#11'['#146'(R'#9#161#139#217'A&' + +#195#10#220#158'G2'#248'E'#234#239'k4a'#140#0'2'#4#20'z%'#238#246#7'N'#232 + +#127#143'{'#29#221'/'#172#230#226#21'^,'#240'$'#172'$'#224'J'#165#2#148#180 + +'W)A'#163#214'3'#1#215#144#176'ku'#160#209#242'B'#175'V'#129#10#159#175'T' + +#202#217's'#233'u'#10#185'p'#172'.'#26#129#130'3'#21#184#251#216#149'p'#23 + +#202'Vn'#224'Vo'#129#4#226#156#128#198'x'#1#142#197'8'#161#142'E'#19#16'E!' + +#143'D'#227#16'Eb'#8'!'#9#132#131'~n'#11's'#251#16'#'#135'0>/'#134#207#225'6' + +#129#16#24'A'#136#8#129#206#215'U;'#192#251#215#224#238#5#220'^B2h'#150#250 + +'{'#28#233#24'#'#128'4'#3#5#127'.'#238'N'#197#237'D'#20#190'b'#186'O,'#244 + +#130#170#174#144#209'*.c'#2#175#228#133'^'#173'T'#162'P'#171'Ao'#178#130'^o' + +#3#157#209#10'Z'#29#10#187'J'#129#171'=nL'#208#233#182#156#221'V)'#21#201'=#' + +#11'%G'#0'D$r9g'#247#211#185#146'&'#3#179#8'd)'#206'AnE'#134#20'5'#30'e'#149 + +#187#29#231'6"'#128'h'#156#132'9'#158'$'#128'H'#132#246'1'#238#182'h'#31#198 + +'}8'#24#130#128#175#3#252'^'''#248'}N'#8#5'}'#236'1'#129#16#162#177#174#132 + +#16'g'#218#1#153#24#220'5'#177']'#12#175#225'c'#224#200#224'M$'#3#191#212#223 + +#237'H'#196#24#1#164#1'('#244#21#184';'#25#183'SQ'#184'v'#162#251#186#21'z~' + +#133#231'Vv'#18'^'#20'x'#149#10#244'('#232'z'#163#13#12#6#220#27#204#184#226 + +#227#170#175'Q'#130'V'#173'`'#194'O'#127#171'U'#188#192#171':'#133'^'#197#142 + +#195#173#254't'#31'g&p'#171#127#210#148#160#235#224#29#132#130#250#159#18#9 + +#224#205#0#178#245#133#21#153#217#251#252#223'$'#155'$'#160#209'8'#183#250'w' + +#146#0#10'2'#145#0#222#14'G8'#2#160'=m'#161'H'#20#205#132#24#4#195#220#237'@' + +' '#0'~'#143#139#145#1#145'B'#136#204#8#188#159'#'#131#24'gJ'#224'qbq'#193 + +#223#176#131#153#224'E2'#248'''pd@>'#131#184#212#223#249'H'#193#24#1#12#1'(' + +#248#243'pw='#10#219#17#192'-'#174#12'rN'#210'8'#149'\&O'#170#244'*'#21#9#178 + +#146#9#188#193'd'#195'}'#30'nf'#208'jT'#160#19#132#30'7'#29#19'~%G'#4'<'#9 + +#168#149#220#202'O'#171'<'#169#253#10#165#12#148'ra'#213#167's'#164#10'>]'#2 + +'wA'#188#192#11#209#129'D*'#1'$U'#239#164'g'#159#255#139#183#215#227#188'3P' + +#16#206'(o'#14#16#9#196#4'2Hj'#5#164#1#160#208#147#224#135#163'l'#31#8'E!(' + +#222'P'#240#253'>'#31#4#188'.'#240'!'#25#248'<'#14'4'#27#130#248#218'(#'#5'F' + +#4#140#12'x"'#232#226'3'#192#191')'#25#233'/'#184'='#131'D'#16#146#250'70' + +#220'1F'#0#131#0#10#254'"'#220#221#128#194'v'#16#253#157'\'#237'y'#207'<S' + ,#195#153#208'+'#217'J'#205#132#30'Wv'#163#181#24#204#184#233#13':'#20'x'#21 + +'h'#181'x'#191'H'#232'5'#188#224#179#219'$'#252'*A'#221'W$Wx'#177#176#11#231 + +'JQ'#239#229'"'#129#23#9'{JN'#128#232#189'$xg '#187#157#232'b'#143#11#130#199 + +#251#8#4'3!'#198#251#10#216'>'#198#147'BLl'#30#136#136#0#133'>'#16'N%'#1#250 + +';'#16#196'-'#20#129'` '#2#30#183#3'<'#174'f'#240'x'#218'Q;'#8'32 '#13'C'#236 + +'d'#20'L'#4#17#17#144#227#240'^'#220#30'C"'#240'I'#253#155#24#174#24'#'#128#1 + +#0#5#159#156'z7'#162'0-'#161#191#185#24'<-'#181#220'j'#159'j'#203#163'0'#235 + +'t`'#182#20#131#201'V'#2'F'#147#25#244'Z'#21#24'p'#163#189'^G'#130#174'b'#194 + +#175#21'V|'#141#130#9'='#17#6#19#252#164#131#143#183#229#153#195#16'D6=''' + +#224#178#174#241#254'.'#215'-'#147#13#236'k'#22''''#1#137's'#4#128#251#159'#' + +#2#193'THtF'#16#146#132'@'#26'B$'#158'4'#11'B'#145'N'#141' '#200#147'A '#24#1 + +'?'#146#128#31'I'#192#239#167#219#184#5#130#224'v'#181#129#219#217#194'i'#6 + +','#242#16'c'#14#199#164#137#16#139#167'h'#5'x'#187#29'/'#233'~'#220#30'F"' + +#232#144#250'72'#220'0F'#0'}'#128'/'#160#249#29'p+'#254#174't'#31#23'^'#239 + +#12#209'1!Ur'#234#189'V'#171#1#147#165#136#173#244'&K'#30'/'#236'j0'#232'T' + +#201'M'#199#147#128'V'#195#169#248#156#208'+83A'#201#31'O.'#178#231'{'#17'v' + +#254'&'#183#239'A'#208#7'"'#255'='#165#254'v%'#133'D'#167#154#176#3')p^'#255 + +#4#243#27#196'D'#142'C'#210#10#194#188'_'#128#153#7'A'#142#8'|'#129'0n'#17 + +#182#249'i'#143'Z'#128#23#205#4#15#18#1#145#129#223#239#193#215'E'#153'f'#192 + +#162#11#188#19#177#139#175#128#146#141#30#193#253'}H'#4#237'R'#255'n'#134#11 + +#198#8#160#7#240'9'#248#199#1'g'#227'S'#178#206#14#130#175#18#236'z\'#189#13 + +'&+X'#243#199#161#224#23#162#144#235'P'#232'U`'#228#5#158#8#192#168#231#132 + +'^'''#8'>'#9#189'Z'#145't'#230'q'#26#132'8'#254'/J'#254#17'.'#170#15'u>['#232 + +#202#17']'#201#128#249#14#4#13'A'#228'?`'#209#4'2'#17'b'#228','#140'32 '#159 + +#0#167#13#136#8#0'5'#2'/'#146#130#159#255#219#227'qA'#135#179#25':'#28#141'h' + +'R'#132'92Hj'#5';'#16#129#31#207#255#24#238#239'A"h'#148#224#227#25'V'#24'#' + +#128'n'#128#194#191#27#238#30'EA'#163#144'^'#138#224'+yU_'#141'6'#188#6'7' + +#163'9'#15'l'#133#149'`'#177#230#163#176#227'J'#143#130'n'#212#171#217'mN' + +#232#213'('#244'h'#235'k95_'#205'<'#250#188#7'_'#217#25#183#239'N'#173'g'#231 + +#22'.j8|S]'#202#7'RR'#135'E'#230'B,'#193#231#20#240#161'Cf"'#136'|'#3'$'#244 + +'^A+'#240#163'6 '#236'}~p'#180#213'!'#17'4'#224#243#130#140#8':#'#9#169'D' + +#128#231#14#224'%'#220#137#219'_'#198#156#133'=c8'#252#172#178#6#20#252'<' + +#220#221#137#194'w.'#240'2'#152'"'#248#188#154#175'A'#219#221'd)`'#130'oE5' + +#223'hP3'#161'7'#25'4L'#232#13#188#202#159#180#241#153#224#139#156'y'#188'z/' + +#8#190'8'#127'?'#165#208'g'#128#182'{'#174#161''''#167'b2'#225#136'O2'#226 + +#180#2'!'#140'H>'#130'X'#167#143#0#137#192'C'#194#207#8' '#12'n'#220'{'#188 + +'~p'#182#215#131#203'^'#15'A'#127#144#249#10'z!'#2#170'X'#188#24'I'#224'?R' + +#127#30#185#136#225#253#11'K'#19'x;'#255','#220#238'B'#161#203#23#156'{2'#133 + +#160#234's+'#183#22'W|'#147#181#8#242#138'+'#193'l'#182#129#137#9'='''#248'&' + +'#'#238'Q'#240'uL'#229'W'#177#24#190#134'9'#243'RU|qr'#14#8#222'z'#254':d#' + +#248#235#216#161'z0'#25'f'#228'3'#17#197'&'#2'i'#5'Q^+ '#18#8'F'#152#22#224 + +#245#133#192'C$'#224'#R'#8#129#215#27#0#167#189#1#156#168#21'P'#174'A('#140 + +'D@9'#9'T'#215#192';'#11#227#157#213#141#175#225#238#10'$'#130#6#169'?'#139 + +'\'#194#200#253#197#245#19'('#252#187#224#238'o('#152'{'#136#195'y,'#227#142 + +'6'#18'|T'#227'-'#214#18#176#21'U'#160#224'['#153#208#155'I'#232'y'#225'g'#26 + +#128#150#19'|q'#248'N'#156#158'+'#8'>'#147#249#212'z'#222#209#9'Q'#232'1'#233 + +'7'#224#137#128#204#132#8#159'tDQ'#0#166#17#132#200'9'#136#155#143#211#8#220 + +'H'#6'D'#4#28')'#4#145#8#26#145#8'j'#193#239#247'!qt'#18#1#167'm'#196#5'm' + +#128#26#156#220#138#219#3'H'#4'Q'#169'?'#130'\'#192'h'#253#249#9'Uyw'#160'0^' + +#128'{'#133#160#238#179'"'#27#222#185'G'#9':'#228#205'/('#169'F'#193'71a'#239 + +'I'#240#5#199#30'K'#203'U'#202'S'#236'zN'#232#187#177#235#199#176'C'#30'BB' + +#172#25#176#236'CN+'#8'G'#163#157'D'#192#251#4'8m'#128'#'#2#143'@'#4'm'#13 + +#224'h'#169'A'#205'!'#192#136' '#194#155#6']'#204#2'*8'#186#16'I'#224#11#169 + +#223#191#212#24#149#191'E'#20#254'Spw'#15#229#234'''Km'#21'|J-+'#190'A;'#222 + +'hB'#193#159#4#182#252'"&'#244'f#'''#252'f^'#240#13#188'W_'#219'e'#197'O&' + +#231#240'R'#223#25#162#147#250']'#231'>D'#193#4'n/'#242#21'$S'#144'{'#210#8 + +#188'!'#232' '#18#160'}'#135#23#218#155#183#130#203#217#4#193'`'#152#249#21 + +#136#8#226#172#246' %'#153#232'y'#220']'#141'D'#208'&'#245'{'#151#10#163#234 + +'g'#137#130'O'#141'0'#31'G'#193'?'#145#254#22'Vh'#5#191#234#171'U*'#180#225 + +'5'#204#185'WP2'#30','#6#29'XL'#26#176#24'9'#2#160'U'#159#9#190'F'#136#225'+' + +'9'#167#30#139#219#11'y'#255'\'#213']'#231'''<'#170'>'#226#244'A'#228'@L@gM' + +#2#249#9'"'#2#17#136#162#6#130'Y'#208#225#9'22'#160#205#225'h'#135#246#166'M' + +'H'#10#29#156'6'#192#242#8#226#156#127#160'S'#27#160'P'#225#137'H'#2#255#147 + +#250'-K'#129'Q'#243#235'D'#225#159#141#187#127#160#144'N'#17'V}'#5#159'i'#199 + ,#169#251'h'#215'['#11#160#176't2'#218#251'f&'#244'V'#163#22#204'D'#0#6'-S' + +#251'){'#143#4#159#203#244#227#146'u'#196'e'#183'];'#248#140'a'#232#16#151#11 + +#11#230'A,'#193#167#30'G'#184#228'"'#230','#196#205#195#155#5#29#222' '#18'A' + +#136#237#221'H'#8#237#173#181#224'l'#217#14#254'`'#16'B'#225'0'#159'f'#28'Oj' + +#24#192'U'#30#222#130#251';G['#161#209#168#248#165#162#240#159#135#187#7'PH' + +#181'2'#190#6'_H'#217#165#144#158#222'`'#196#21#127'"'#228#229#151#178#149 + +#158'V}+['#249'9'#193'7'#232#213'l'#213#167#172'='#242#234's'#9';\'#201#173 + +'Pp'#195'>'#204'Q'#241'iJ'#131#206'DDn'#229'N'#166#31#147'F'#16#229#170#16')' + +#143#128#210#138#189#188'I'#224#18#17'A'#135#219#11'mM'#155#161#195#209#130 + +'&'#4#146#0'%'#19#9#209#130'Nm'#224'#<'#193')H'#2#173'R'#191#223'laD'#255'd' + +#249'N<'#143#137'U~'#193#214#167'D'#30#29#174#250'yE'#168#238#23'O'#0#179'Y' + +#199#4'>'#185#242#27'9[_H'#217'e'#169#186#138#212#226#155#222#26'm'#142'!3' + +#224#139#21#147#14#195'd>A'#148'K7'#230'2'#11'9"'#224#28#132'H'#4'n$'#0#242 + +#13#144'Y`o'#133#246#230'M'#224#243'x:'#181#129'h\'#28')h'#194'3'#156#140'$' + +#240#153#212#239'5'#27#24#177'?]^'#229#127#141#186#234#138'='#252#172#180'VE' + +'N>#'#148#148#239#4'V[>'#191#226'k'#25#1#144#202'O'#241'}'#178#245'uj~'#213 + +#23'j'#237'E^}'#246#225#141#216'O/'#247#145'$'#2#232#236'AH)'#199'Q'#190#0 + +#137#10#142#168#208#200#231#227#136#128#132#223#229#9'2'#31'A'#135''''#0#173 + +#13#191#177#208'a'#144'O-'#142'&C'#134#236#200#184'K'#220#142#251#255#27#233 + +'&'#193#136#252#9#163#240#255#1'w'#247#139'U~'#174#147#14#197#244'U`'#177#21 + +'Cq'#249'4'#176#153#13'('#252'Z&'#252#164#242's'#153'|\'#234'.'#173#250'\5' + +#30#223'aG&'#235'6'#23#127#12#210'"'#145'd'#1#224#27#152#242'D'#16#137#179 + +#162'#"'#2#31#239'$'#228#132'?'#4'N'#158#8#236'm'#13#208#214#248#27'j'#11'A' + +#150'D$D'#10'D&'#193#167#192'i'#3'#'#182'5'#217#136#250'%'#243'*?y'#249'O' + +#160#191#197'*'#191'FM'#130#173#129#252#210'j(,'#169'bj'#190#213#162#5#155'I' + +#155#12#241#137#227#249'B'#18'Ogn>$k'#236#199#144'['#160#214#229#157#185#4 + +#188'Y'#192#218#152'qY'#133#212#153'('#192#215#23'0'#223#0#145#128';'#128#166 + +#1#238#157'Nh'#169'_'#15'^O'#7#231#27#216#209'$h'#1#206'/'#240#177#212#239'3' + +#19#24'1'#191'f'#20'~'#26#139#245#30#10#255#188#174'I=\\'#159'T'#254#25'`' + +#203#207'c+'#190#205#164#3#171'Y'#203#135#247#212#172'XGH'#221'e'#13'7'#146 + +#234#190'h'#229#151#250'M'#142#161'G'#136'|'#132#220','#131'8'#223#201'('#193 + +'7)'#9'sNB'#210#6#220#188'9@'#190#1#167#155#246#254#164'I'#16#224#27#146'DY' + +#155#244'$'#9'P'#214#224#217'H'#2#207'K'#253'>'#211#141#17#241#155'F'#225#159 + +#128#187#255#160#240'O'#18#132#159'b'#243#228#229'gi'#188#182'"T'#249#167#163 + +#192#163#202#143'B'#159#135#155#133'_'#249#141'|}'#190#154'o'#192'A'#141':' + +#229'2Q'#231#220#17#241#9#141'B'#240#13'L'#200#128#23'Z'#153#9#185#3'T['#224 + +#241#134#185'('#1'j'#1#14#212#6#220#168#21#180#183#212'C['#243'&'#214#152#132 + +#202#142#133#156#1#222'/'#128'<'#144'X'#134'$p'#143#212'o-'#157#24#246'?o' + +#222#217#247#1#10#127#137#216#222#167#226#29#157'V'#203#210'x'#11'H'#229''';' + +#223#204#169#252't'#155'e'#243#233':='#252#201#10'='#161':O'#234'76'#134#161 + +'#'#193#165#26#11'-'#200#163#188#147#144#186#19#177#188#1'_8'#169#13'8'#153 + +'F'#16'@'#147#160#3'Z'#234#214'1'#147#128#146#135'('#5'YD'#2't'#172#187'qw' + +#237'H'#153'l4'#172#127#231'('#252'4a'#231'-'#20'~'#139' '#252','#163#143'T~' + +#131#1#138'+f@^^A'#167#224#155#185'0'#31#9'?+'#213#229#227#250'B'#231#29#232 + +'R'#142';'#134#145#1'q'#163#211'd'#164' '#202#165#19#11#225'Br'#14':'#220#28 + +#9#208#214'Z'#191#1'\'#246'&'#212#24#194','#170#16''''#191#0'$M'#130#231#240 + +#128#231#140#132#130#162'a'#251'sG'#225'?'#10'w/'#161#240'k'#132#240#28#169 + +#252'j'#170#213'7'#153#160#164'r6'#216'lff'#235#219#204#218#164#189'/'#180 + +#228'R'#243#173#183#200#209''''#212#225#143#9#255#200#133#144'H'#148'lJ'#130 + +'&A'#24#237#252#16'_n'#204#162#4'nN'#27' '#147#128#162#4'-'#13#155#192#209'Z' + +#203#234#9'('#162' '#174'%@'#18#248'7'#30#238'8$'#129#128#212#239'm('#24#150 + +'?y>'#204'G%'#188'r'#193#211'/8'#251#168#15'_i'#213'L'#176'YM'#144'G'#206'>' + +#139'.'#25#226#211#179'&'#29#202'd'#223'='#161'D'#151#251' '#134#229'G1'#134 + +#1'B<'#216'Th^J+'#188'@'#2'd'#18#144'c'#208#217#17'`'#251#182#230#237#208#214 + +#180#9#130#129'03'#7#186'D'#8#190#194'C'#30#142'$'#224#148#250'}'#13#22#195 + +#238'W'#143#194#127'3'#10#238'mt['#16'~5_'#193'g'#177#22'@i'#229'L'#176'Z' + +#245'L'#240#137#0#200#233#199#132#159'o'#201'%'#30#160#193'>'#128#177'e'#127 + +#212'A<'#2']'#156'<D~'#1#175#136#4#28#29#1#22')hk'#173'G'#147'`#'#4#130'!|^' + +#164'+'#9'Pi'#241'A'#195#181#209#200#176#250#245#163#240#255#5#5#246#26#186 + +#205#166#226'*'#185#250'{*'#228#177#229#149'@Q'#229'N'#144'g&'#149'_'#199'b' + +#252'V'#163'P'#196#163#226'b'#251#226':}'#217#152#240#143'f'#8'$'#16#231'{' + +#21#198#248#150'd'#20'%`$'#224#225'5'#1#182#5#160#189#189#5'Z'#235#214#131 + +#207#31#224#194#132#148'4'#212'I'#2'5x'#168'E'#195#145#4#134#141#4#160#240'_' + +#5'\'#13#127'R'#248#201'{'#207#132#191#160#2#138#203#167#160#170#143#171#190 + ,'E'#155#20'~'#202#234'#'#225#23#242#248#147'^~'#24#157#246#190#215#235#134 + +#143#222#127#19#190#253#234#19#216'^'#179#25#206'8'#247'J8'#232#208'c'#164 + +#190',I'#209#217#180#148#139#18'DDEEIs'#192#205#153#3'v'#135#29'Zj'#127#6#159 + +#207#151'lH'#218'E'#19'X2'#220#204#129'a!'#6'|'#3#143#231'ed'#244'w'#17#254 + +#252#226'j(*'#171'f'#161#189'<f'#239'kYn'#191#144#210'+.'#226#1#217#232#246 + +#242#31#184'x'#10#174't'#169#142#235'Ysv'#131'?'#223#255'<'#168#213'j'#169'/' + +'O2p='#10';['#146'Q'#203'r'#150'/ J'#26'b&'#1#31'&l'#222#190#150#145'i7$@>' + +#129#253#135#147'c0'#231#197#1#133#159#198'o'#189#141#178#175#18#219#252':' + +#173#26#10#203#166'@Aq%'#243#240''''#133#159'<'#253'$'#252#201#10'>'#174'tW6' + +#22#219#135#223#29'0'#11#2#254#29#167'hi'#181':'#184#231#161#151'`'#234#244 + +'YR_'#162'd'#224'9 '#233#23#136'D'#184#209'f'#228#28'd'#21#133#148''''#208#17 + +'d'#161'B'#167#203#141'$'#240#19'x<'#29#221#145#192';x'#168'#'#145#4'bR'#191 + +#167#254' '#167'e'#130#239#207#255')'#10#191'A,'#252#180#242#23#148'N'#130 + +#162#210#241'I'#225#23'r'#250#5#225#231'Fi'#203'E='#249'r'#250#173'f'#5'''' + +#31#181#16#218#219#186#175'kQ('#148'p'#239'#'#175#192#244#25#187'H}'#153#146 + +'AhP'#10#2#9'D'#185#225'%b'#18'pv'#8#155#27#154'j'#214#128#215#227'fm'#201 + +#187'8'#6#159'F'#2'8['#234#247#211#31#228#172'T'#160#240'O'#193#221'W('#184#5 + +'B'#146#143' '#252#249'EU'#156#205#207#132#159#203#235'gi'#189'z.'#179#143#28 + +#131#138#148#148'^'#24#157'F'#127#23','#191#252#20#248'i'#245#183'=>N$p'#215 + +#131'/'#194#140#153#243#165#190'T'#233#144#28'f'#2#201#129#167'D'#2#212#127 + +#144#230#18#8'$@'#230#128#195#233'B'#18#248#17'|>'#127'2:'#192'&'#21'q'#14 + +#198'?#'#9'\'''#245#219#233#11'9)'#21'('#252#165#184#251#26#133#127#188'8' + +#195#143'9'#252#10#199'AI'#197'N,'#185''''#143#247#246#179#236'>'#157#154#13 + +#215'd'#194'/j'#211#149#179'oR'#2#216#219'Z'#224#180#227#150#224#15#180#231 + +#18'w'#185'B'#1'w'#222#251'<'#204#156#179#155#212#151'+'#9#196#195'P'#133#206 + +'CD'#2'!VC'#16'e'#221#135#133'""'#202#21' '#199' i'#2#1#170#31#160#241#230 + +#204#28'H'#8'$@s'#8#238#151#250'='#245#134#156#147#13#190']'#247#255'Pxg%' + +#133#31#127#148#26#190#168#167#140#226#252#164#242'S'#156#223',R'#251#213'JP' + +#170#184'>}c!'#190#158'q'#255']'#215#194''''#31#190#217#235's'#228'r'#5#252 + +#249#129#21'h'#14#204#149#250'r%'#133#16'*'#20'r'#5'h'#132#25#149#21#139#205 + +#1#210#4#236#237#173#208#178#253'g'#8#132#130#140'('#132#218#129#4'7R'#249 + +#148#134#159'^zI'#234#247#210#19'rJJP'#248#201#21#253#17#141#223#22#170#250 + +#148'|'#134#159#217#146#7'%'#19'fC'#158#201#0'6'#171#150#197#250#217#202#143 + +#194#175#213'(S'#187#246#228#212#187#202'-'#196#227'Q8'#254#176'y'#16#194#31 + +'ko'#208'hu'#240#220'k_'#130'^o'#148#250#146'%'#133#216'1('#152#3#204''''#224 + +#237'L'#27'&'#231' '#151','#180#129#235'0'#20'I!'#129#8#30#225'0$'#129#156#28 + +'M'#150'S'#162#130#4#240#16#10#255#197#226#146'^'#141#138'r'#251'-P:a'#23'\' + +#249#141'l'#213'g'#194'o'#226'V~-'#133#250'D'#243#246'r'#234#13#229'('#222 + +#254#231#179#240#244#223#255#220#231#243#202'+'#171#225#225#167#222#147#250 + +'r%Grr'#17#175#9#4#187#144#128#144''''#208#218'T'#3#246#166#205#157'$'#208 + +#217'O'#192#145'H'#196'vi\'#251'J'#173#212#239#165'+rF^'#248#226#158#127#138 + +#19'}'#168'A'#7'5'#242'('#173#154#11'y63W'#213#199#215#242#147#195#143'*'#250 + +#132#129#28#178#177#149#127'@8'#251#132'%'#224't'#244'='#15'c'#191#131#143 + +#133#11#175#184']'#234#203#149#28'B1'#17'9'#249'"|'#187'1.O '#204'J'#137#137 + +#4':P'#19'hi'#220#4#246#214#237#16#162#198'"'#169'ME'#190#142#4#28'K['#127'{' + +'?"'#245'{'#17'#''D'#134'o'#232#241'#'#149#245#10#225'>'#18'~'#157'^'#15#165 + +#227'w'#1#155#205#154't'#248'Y'#153#218#175#225#235#248';'#213'~!'#183#127#12 + +#253#195'/?}'#7#183',;'#163'_'#207#189#234#134#251'`'#193#146#131#164#190'd' + +#201#145#28'Y'#22#227#204#1#210#4'|B'#155#177'dw'#161' 4'#213#173#131#14#190 + +#148'85<'#24#191#27'M'#129'k!e'#144#186#180#144'\jx'#187#255'K'#20#254']'#187 + +#134#251#138'+w'#134#130#130#210'd'#172#191#179'}'#151#138#235#207#207#183 + +#232#22#6'}'#140'a`8'#239#228#165#168#5#244#221#2#159#194#131#15'='#253#1#20 + +#22#149'I}'#201#146#131'K'#27#230'5'#1#190#185#8'M.'#166#218#1#18'~'#135'''' + +#192'Z'#140'5m'#253#17'<ng'#215#200'@'#130#247#7#188#15'9B'#2#146'K'#13#18 + +#192'}('#252#151#167'8'#253'P'#181'O'#198#250'M'#156#205'/.'#233'U'#11's'#248 + +'d|'#168'O'#226'wq'#238#137#139'Y'#7#25'6/@'#174#128'3'#254#176#28'U'#231#227 + +#164#254'h'#251#196'#'#247'\'#7#255#251#244#237'~='#215'j+'#128'G_'#248#140 + +#17#244#168'G'#2'R'#134#146'P'#218#176#143'u'#29#230':'#14'S'#21#161#147'r'#4 + +#182#173'b'#237#197#186'8'#5#219#19#241#216'.'#141'?'#191'R/'#245#219' H*:(' + +#252#191#199#221#191'R'#236'~'#230#241#183'A'#217#248#185#184#242's'#225'>' + +#202#242'3'#25#185#149#159#230#241'q'#133'=\'#168'Oj'#6#251#237#215#31#225 + +#230'kNM'#185#143'H'#224#222#199#222#134#210#210'*'#137#175#174'wl\'#183#26 + +'n'#185#246#180'~?'#127#238#174'{'#193#178'['#30#145#250#178's'#2#180'|s-' + +#200#169#187#16#154#3'An"'#17#235','#212#17#20#149#17#175'Ov'#27#22#249#3#190 + ,#12'y['#246'n'#223#242#177#228#29#133'$'#147#31#20'~'#146#14#178#251'm'#226 + +'4_='#218#253'e'#19#230#161#221'oa'#130#207'9'#253'h'#229'W'#179#22'^\I'#175 + +'<9r[j'#220'y'#243'y'#240#243#143#223#236'p'#127'qi'#5#220#247'xnz'#208#219 + +'['#155#224#213#23#30#128'5?|'#1'>'#175'{@'#175'='#243#130#27'`'#255'CN'#144 + +#250'-H'#14'![0'#193#135#7'I'#192'i"'#145#208'^'#140'5'#20'Am'#160#185#238'W' + +'p'#182#215'C8'#196'u'#26'&'#194#224#15'pg'#253'O+n'#0#137'M'#1'ID'#8#133'_' + +#5'\'#178#207#30#226'L?'#157'F'#3'E'#21';'#163#250'_'#146'l'#229'%T'#246'Q3' + +#15#214#194'K)'#227#166#239#230#130#244'#'#206'8z.D#;:v'#149'J'#21'<'#251#198 + +'j'#169'//'#137'p8'#12#239#188#254#4#252#247#227'7'#193#209#222'2'#232#227 + +#200#240#187':'#253#188#235'`'#191'1'#18'H'#166#13#11#227#203'Y'#162#144'P7' + +#144#236'%'#224'GS`5x'#221#174#29#252#1'h1'#30'R'#183'f'#197#135' !'#9'HE'#0 + +'w'#161#240'/'#163#219#10#161#139#175'F'#9#249#133#227#161#168'|2o'#247'wv' + +#239'e'#225#190'd'''#159#220'q'#248#213'l^'#15'7]'#221#179' <'#241#202#183 + +#160#213#234'%'#189#198'`'#208#15#127#185#245#15#176'y'#227#207#189#166#0#15 + +#20#147#167#205#134#229#183'?'#1'j'#181'V'#210#247'''5'#18#162'a'#165'\'#142 + +#0'?{'#128'H'#128#138#134'<\'#205'@'#179#216#31#208'i'#10#180'i'#212#138#217 + +'['#191#127#190#25'$"'#129#172'K'#18#10#255#28#220#253#128#4#160#16#199#251 + +#141'f'#206#238#183#176#6#158#188#221'o'#224'j'#250#233'q*'#238#145#201'd9' + +#21#239#127#255'_'#207#193'+'#207#253#181#199#199#175#189#237'q'#216'i'#214 + +#238#146']'#223#166#13'?'#193#221'('#252#161'Pf'#202#211#213#26'-\t'#245#221 + +'0g'#254#18#201#222#163#212'H$'''#18#9#21#132#220'\'#194'dk1'#26'C'#198'g'#10 + +#182'5n`'#13'F'#187#148#15#191#220#240#211#10#234'w'#193#15'8'#203'.'#178'*J' + +'('#252't'#190#175#197#170#191'`'#247#151#140'G'#187#223'jN'#246#239#167'Q]' + +#212#193'W'#173#22'M'#229#205#21#201#231#241#183'{'#151#193#247'_'#247#156 + +#225'y'#197#13#15#195#172#185#139'$'#185#182#230#198#237'p'#253#165'G'#166'u' + +#213#239#9#187'.'#216#31'.'#188#234'nI'#222'g'#174'@('#30'bN'#193#8#231#15 + +#160'Qd'#212'i'#216#201#166#19#147'?`='#184#218#27'v('#26#146#203#18#251#213 + +#173'y'#137#166#17'g'#157#4#178'M'#0#231#2'7'#187#143#169#254#148#234#171'U' + +#171'Q'#237#223#9#237#254'q,'#212'G'#4'@'#19'z'#141#186'N'#187'_'#220#202'+' + +#151'p'#203'U'#199'A}'#237#166#30#31'?'#245#188#27'a'#233#254'GKrm'#203'/:' + +#12'W'#157#236#181#168'3'#154#173'p'#205#205#143'Cy'#213'dI'#222'o.@p'#10'F' + +#226#220'(2'#214'iX(!&'#18#240#248#161'q'#235#15#224#247'y'#216'0R'#145')' + +#176#161#208#28#223'e'#205#23'/'#135'`'#164#18#0#10#127#1#238'6'#162#240#231 + +#145',+'#168#194#15#5#220'l-'#130#210#170#217#220#136'nQ'#129#15#169#254#201 + +#210#222#28#136#245'w'#135#171#207';'#0':\'#237'=>>{'#222#18#184#248#218#236 + +'W'#131#174#250#246#19#248#251'_'#175#201#250'y'#169#148#248#162'k'#254#138 + +'Z'#207#226#172#159';W@>'#129'x'#12#152#199#159':'#10#249#168#183#160#159's' + +#10#18#17#216#219'['#160#165'v-'#155':'#20#21'B'#131'@?'#239#196#245'{L'#14 + +#255#229#181#215'^'#139'C'#22'I '#155#4#240'4'#10#255#153'B'#194#15'e'#242'i' + +#181#26'('#171#222#21'l'#22'+X-'#26#150#227'o'#210#11#241'~E'#206'W'#247']y' + +#206#190#224#245#184'z|'#220'`'#180#192'}O}'#154#245#235'z'#230'o'#183#192'7' + +#255#253#183'$'#159#9'iw'''#156#185#12#246'>0'#247#19#161'2'#1'nE'#231'z'#11 + +'R'#166' '#181#26'gIB'#194'@R'#26'8R'#251#11#184#28'M]K'#135'}'#10'Yd'#230'Y' + +'G'#236#180#253#214'[o'#205#154')'#144#21#209'B'#225'_'#136#187'/'#196'M=)' + +#225''''#191'x'#2#20#150'M'#228#236'~'#190#159#31#27#209#205''''#251#200#20 + +'|'#154'o'#142#142#228#190#242#156#165'L'#157#235#13#203'n'#127#22#170'''' + +#207#204#234'u'#253#241#186#147#160#174'f'#163#148#31#13#236'{'#200#201'p' + +#236#169'WJz'#13'R!'#217'e'#152'2'#5'Q'#19#160#162'!'#174#155#16'_='#232'rC' + +#211#214#239'!'#16#12'tI'#16#138#191'5'#217#214'x'#204#231#159#127'.h'#1#25 + +''''#129#140'K'#22#10#191#18'w'#171'Q'#246'g'#138#29#127#6#163#9'W'#255#221 + +'P'#232'u'#220#234'o'#20'B~'#156#221#175#148'Q?'#191#172'\'#226#160'q'#229'Y' + +'KX'#152#173'7L'#156':'#27#174#186#229')v'#155#190#232#141#235#190#135'_~' + +#252#2'j6'#255#2#173'-u'#16#14#5#161#176#184#28'f'#238#178#24#150#236#127',' + +#216#242#139#135'|]w\{<4'#214'm'#145#250#227#129'='#150#28#6#167#157#127#171 + +#212#151'!'#13'(*'#144#224#187#9#133'R'#203#135'iko'#222#14#237'M'#155' '#28 + +#230'M'#1#222'!'#168#144#197#143#216'}r'#244#223#217'2'#5#178'A'#0#201'~'#254 + +#130#227#143'V'#255#226#138'Y'#144'_X'#194#170#251#204#204#235#175'f3'#251'4' + +#194#164'^'#5#191#242#231#174#252#195#21'g.'#198'/0'#216#231#243'*''L'#135 + +#246#214#6'^['#232#253';'#173#154'8'#3'.^'#246' '#232#141#230'A_'#215#223#239 + +#189#18'~^'#253#133#212#31#15#195#137'g]'#7#139#246'=J'#234#203#200':'#196 + +#249#1#194#172#1#242#7'P4'#192#229#14#129#27'I'#160'q'#219#15#204#132#236#146 + +#27#176#173#196#26#155'S]'#20#243'e'#131#4'2*^('#252#229#184#251#21#133#223 + +'(8'#254'h'#245'7'#219#138#161#164'r&'#179#249#201#243'o'#22#169#254#148#240 + +#195#138'j'#134#193#140#238'+'#206'\'#4#209'H8'#237#199#165#234#187#227#207 + ,#188#22#246'\'#250#251'A'#189#254#173#151#31#130#143#223'}A'#234#143#135#129 + +'4'#190#229#127'Z'#1#165#229#19#165#190#148#172'#9'#131#144'R'#133#249#209'c' + +'n'#26'I'#206#180#128#16'8'#236'm'#208'R'#187#134#213#10#136#27#138#202'e' + +#137'?'#21')6'#222#186'j'#213'*j-'#158'QS '#211#4#240','#238'N'#231#194'x\' + +#165#159'N'#167#129#210#9#187#162#218'o'#6'3o'#247#155'x'#213'_'#165'Rt'#198 + +#251's\'#248#9'W'#158#177'p'#135'A'#27#233#2'}'#6'W'#160#233'@'#26#193'@'#225 + +#180#183#192#173#151#255'N'#234#143''''#9#157#222#8'w<'#244'>(G'#227#240#145 + +#132#184#167' '#167#5#176#198#162#158#16#155'@'#220'Z'#255'+t8'#26#152'C0'#22 + +#139#9#164#17#210'(";W'#154'[k>'#255#252's'#129#4'2'#130#140#137#25'_'#236 + +#179#25#127#200#202'd'#147#15'\'#225#243'J&Aa'#201#4'&'#248#22'>'#219#143#188 + +#254'B'#194#143#208#214'K6'#28'4'#128'3'#22#160#234#150#185#249#15#148'F'#252 + +#199'G>'#4#165'j'#224#130#243#199'k'#143#131#214#166#237'R~<)'#168#24'?'#13 + +#174#190#253'9'#169'/#'#171'H'#206#31#20'G'#5#130'\'#150' E'#5#152'&'#224#246 + +'A'#211#182#149#16#240#7#146#25#130'd6'#160#22#240#216#30#147'#'#151#226#203 + +'c'#153'4'#5'2I'#0#127#195#221#5#194#234'O'#171#187#222'`'#198#213#127'>'#174 + +#252#186#164#234'O1'#127#13#175#250#11#173#188's5'#236#215#21'W"'#1'd:'#211 + +'n'#206'n'#251#194#233#23#253'q'#192#175'['#245#205#135#240#226#223'o'#145 + +#234#163#233#22'{'#29'x'#2#28'q'#210#229'R_FV'#145'L'#21'&_'#0#223'T4'#16#226 + +#18#132'H'#3' "ho'#169#5'{'#211#198#174'a'#193#160'Y'#23#157#174#143'ln'#200 + +#164')'#144#17'Q'#227#251#250'oCa'#214#8#171#191#150#194'~'#227'v'#130#130 + +#194'q,'#233#135'R}'#169#198#159#10'}'#146#173#189#134'Y['#175#171#207'^'#136 + +'_lf'#9'@'#173#209#193#157#127#31'\.'#193'u'#231#239#3#225#12#213#1#12#22#231 + +'^y'#31'L'#155#185#135#212#151#145'u'#136'G'#145'S'#130#16#171#21#224'K'#135 + +'I'#19' -'#192#231#245'$'#147#131#226#156'/'#224#129#137#214#198#229#133#133 + +#133#145'Li'#1#153'"'#128'{pw'#149#216#246'7'#24'q'#245#175#222#21'W}m'#146#0 + +'('#215'_'#163'Q'#138'r'#253'3'#253'5'#164#23#203#206'Y'#196#190#172'L'#131 + +#132'f'#234#206#3'/*'#250#199'3'#127#130#149'_H'#147#16#212#19#242#10'J'#225 + +#250#191#252'S'#234#203#200':'#132#4'!'#161'V'#128#229#6#8#166'@W-'#128#250#8 + +#178'(B'#194'k'#209#248#166#203'|'#155'Z'#143'='#246#216'h&'#18#132#210'.r(' + +#252#249#184#219'.'#158#231'G*~~'#233'4(('#174'`'#182#191'9'#153#238#171'J' + +#233#231'?'#220#176#252#188#197#25#245#1#8#152#188#211#174'H'#2#15#12#248'u~' + +#159#27'n'#187#252#224#164'-'#154'+'#184#244#198#167#161'|'#252'4'#169'/#' + +#235'`i'#194#162#178'a'#214'U'#152#143#10'Px'#176'i'#203'w'#224#247#251#152 + +#22' D'#4#20#178#248'_'#198#233'jn'#213'h4'#145'L8'#4'3A'#0#255#135#187#27 + +#133#184'?'#173#254'z'#189#1#202'&'#238#193#4#159'<'#255#20#243#167#176#31 + +#149#249#178'b'#31#190#189#207'p'#226#128#166#186#205'p'#255'm'#167'g'#229'\' + +'&K>'#220'xo'#255'z'#247'u'#197#227#247'\'#10'[6'#172#202#230'G'#211'''*'#171 + +'w'#134#139#174#127'L'#234#203'H'#162'v'#235'z'#248#224#141#191#179'U'#248 + +#202#219'^'#4'm'#6#134#161#236'P6LZ'#0's'#8#134'Xkq'#242#7#216'['#182#131#189 + +'y'#19#203#11#16'E'#4':'#10#13#222#25#165#150'p'#187#209'h'#140#166#219#20'H' + +#171#200#161#240'S'#246#10#173#254#214'd'#193#15#10'y^'#233#20#200'/'#170'd' + +#4'`'#225'+'#253#132#213'_.'#204#241'K'#251'G'#158'Y<'#245#192#149#176'i'#221 + +#202#172#156#139#138'l'#254#244#232#127#7#245'Z'#183#171#13#238#188#246#168 + +#156#210#2'hq'#184#225#158'w'#192'h'#178'Jz'#29'?'#175#250#12#222'z'#233#175 + +#224#245'8'#147#247'Yl'#133'p'#237#157#175#225'oR'#153#246#243#9'#'#200#147 + +#29#132#216#188#193#8'x<H'#0'>'#242#5'P'#181#224'w'#16#164#136'@'#172'S'#11 + +'P'#202#227#255'7'#181#208'~'#151#221'n'#15#167#219'!'#152'n'#2#184#30'w'#127 + +#20#175#254#172#183#127#245#238#184#234#235'p'#245'Ws'#157'}'#249'b'#159'd' + +#216'o8-'#253#192#133'tn'#190'x'#31#136'g('#7#160';\'#247#151#183#152'&0'#24 + +'<Cd'#181'>;d'#213'_'#204#156#191#15#156'x'#174#180#3'G'#222'|'#225'.'#248 + +#254#203'wv'#184#191'x\5\v'#243#243#25'9'#167'0'#130'<'#22#19#194#130#145'd' + +#243#16#210#4#218#155#183#130#179'uk'#215'r'#225#246#170'<'#255',u'#194#233 + +'L'#183'C0m'#146#135#194'O'#189#175'jP'#152#11#133#156#127'J'#249#205'+'#158 + +#4#249#197#227'q'#245'Ws'#131'<uj~'#168#7#151#244#3#195'p'#144#231#23#31#190 + +#4#31#190#249'hV'#207#249#251'S'#174#129']'#23#13'.'#185#199#231'q'#193#159 + +#151#253'.'#167#180#0#202'v'#188#229#161#143'2'#178#210#246#23'_}'#252'*'#188 + +#255#250#195#221'>6'#127#209#225'p'#196')'#203'2r^'#241#152'1'#234'#'#232#167 + +#228' >*@Z@'#211#150'o!'#24#10'B4'#210'Y#'#160'R'#196'o'#24#167#171'}'#200 + +#229'r'#133#210#233#16'L'''#1'\'#134#187#251#133#22#223'JV'#238#171#195#213 + +#127#15'0'#25#185')'#190#228#249#215#137'W'#255'af'#247#11#248#203'uG'#130 + +#167#195#158#213's'#206#156#191'/'#28'w'#214#224#227#250#143#254#249'\h'#172 + +#149#182'B'#176'+'#14':'#234'"X'#184#223#241#146#157#127#235#198#213#168#29 + +'u'#159#151' '#147#201#225#218#187#254#5#6'cf'#204#148#148#185#2'4v<'#16#6 + +#143#151'#'#129#246#166#205#224'j'#171'I'#169#17#192#127#154'&'#216#218#230 + ,'DC'#30'O:'#29#130#233'$'#128#159#196'#'#189')'#231#223'VT'#13#249'%'#213',' + +#219#143'y'#254'u'#157#147'|'#5#219#127#184#161#177#246'7x'#236#174's'#179'~' + +#222#130#226'J'#184#228#230#193#231#247'?'#250#167#179#160#185'A'#250#10'A1' + +#170#167#205#131#211'/'#249#235#208#15'4H'#4#253'^'#184#243#154'C{|'#188'j' + +#210'l8'#235#138#7'3rn'#161'N'#128#204#0'J'#14#242#5#195#172'd'#152#204#0#183 + +#199#11#205#219'V'#162#22#16'Ji'#29#166'SFO'#221'i\'#224'-$'#128#208#140#25 + +'3'#210#162#5#164'E'#2#199#205':q'#14#200#228'?'#166#14#248'PC'#217#196'=' + +#193'h'#212'%'#195'~]m'#127'v'#1#195'L'#5'x'#246#129#203#160'f'#211#154#172 + +#159'W'#161'T'#193'M'#247#127'<'#232#215'?p'#203#9#224#180'7e'#253#186'{'#131 + +#209#156#15'W'#255#233#13'I'#175#225#214'K'#150'v'#186#232#187#193'y'#203#158 + +#128#178#202')i='#167'`'#138'u'#230#5#196'Y#Qj'#28'Bu'#2#20#26'lk'#218#8#238 + +#246':'#22'-'#16#210#131#21#242#196#191''''#231#181#156#145#151#151#231'okkK' + +#139#22#144#30#2#152'}'#242#189#184#187'R'#156#248'c'#206'+'#133#162#242#25 + +'l'#245#167#141'l'#255#174#5'?'#195'L'#246#25#238#184'|'#191#140#21#0#245#133 + +#195'O'#186#6#230#238'y'#232#160'^{'#207#245'G0_@.'#129'4'#197#155#30#200'~' + +#199'$1'#250#250'>+&'#236#12'g]'#249#240#0#142#216'?'#8#26'@gD'#160#179#135 + +' +'#22'r9'#160#173'v'#245#14'EB'#165'F'#215#156'Bs'#188#209'h4'#6#211#161#5 + +#12'Y'#4#11'&'#238#167#212#24#139#235'P'#160'K'#196#206#191#194#242'Y`'#205 + +'+J'#18#0'7'#211'O'#148#243#159#246#143'4'#243#168#223#182#14#158#185#255'b' + +#201#206'o+('#131#139'oZ1'#168#215#222'u'#237#161#16#238#163'y'#137#20#184 + +#225#222#143'@'#174#148#206#17'x'#247#242#195'!'#24#240#246#248'8'#249#2#150 + +#223#243'>.j'#233#175'd'#20#198#139#209#198':'#9#135'"\'#15'A$'#0'2'#7#154'k' + +#190'g'#201'\bg'#160'F'#17#185'~'#130#205#254'x'#186#180#128'!'#203#225#184 + +#217''''#29#130#135'yW'#172#254#235'tz('#157#184#7#152#244#26#214#229#135'e' + +#253#241#171'?'#169#255#220#7#155#246#207'3'#227'xg'#197#159'a'#237#247#255 + +#25#250#129#134#128'E'#7#158#10'{'#29'|'#230#128'_'#247#231#171#15'D{2'#167 + +'F'#211'3\q'#199#27#160#207#144#163#173'?x'#232#182#19#192#237#236'}B'#242 + +#194#253'N'#130#165#135#157#147#145#243''''#135#138#196'83'#128#178#3'='#188 + +')`o'#169#1'g'#203#230'd'#219'0'#190'Jp'#213#228#188#230#223#163#6#224'N'#135 + +'/`'#168'b(C'#245#255'%'#220#159' '#174#250#179#20'TAA'#233'd'#182#242#147 + +#240#179#156#127'a'#180#215'0'#140#251#11'x'#152'~,'#174#190#199'ig'#18#244 + +#217#157'q'#249'#PZ9'#176'T'#218';'#175#220'/+3'#2#6#138#11#174#127#1'l'#133 + +#227'$;'#255'S'#247#156#7'-'#13#155'{}'#142#193'd'#131#203'n'#207'L'#253#2 + +#203#11#192#175'%'#154#156'''@y'#1'\'#207#0#143#199#3#205#219#190#235'j'#6'$' + +#242#180#158#189#139#140#190'_'#210#161#5#12'I'#18'Kw>'#214'"W'#168#155#240 + +'G'#169#19'w'#252')'#170#154#7#22#139#141#9#191#208#231'O'#205#175#254#178'a' + +#24#247#23'p'#215'5'#251'g'#188#250#175'?'#208'h'#13'p'#217'mo'#12'Hu'#206 + +#149'k'#239#138#11'oz'#5#204#214'B'#201#206#255#226#195#151#161'i'#247'K'#159 + +#207';'#227#138'G'#161#164'<'#189#206'@'#1#226'J'#193#0#211#2#194'L'#11' 3' + +#160#165'n'#13#248#220#246#20'3@'#173#136'>2)'#223#241''''#157'N'#231#25#170 + +#22'0'#20'I'#148#141#155'u'#210'Y('#205'O'#138'c'#255':'#189#25'J&'#236#202 + +'B~F'#3#183#250'k'#133#138'?'#129#0'2'#242'1f'#30'w]'#189#159#212#151#144'DE' + +#245',8'#233#194#254#135#208#238'^v@V*'#23#7#2#250#221','#187#251#163#172#159 + +#215#209'V'#7#171#190#252#23'4'#213'n'#128#182#230'm'#253'j'#235'V5i'#23'8' + +#225#252#244'O?'#18'$'#150#141#26#143'u:'#3'}'#228#12'D"p'#182'7'#128#189#241 + +#215#20'3@&K'#212'M'#201'k'#222#27'??'#215'P'#181#128#161#17#192#236#147'?' + +#199#253#18'.'#166#207'M'#248#181#22'q'#153#127'$'#248#194'`O'#173#134'k'#244 + +#169#16#226#254#195'P'#3#8#6#189#240#208'MGH}'#25')'#216#231'w'#23#194#188 + +#197#253'k'#184'y'#239#181#7'f'#165'rq '#160'^'#7#151#221#241#206#208#15#212 + +#7#162#209'0'#252#188#242#3#216#176#230'S'#166#238'G'#250#209#200#181'+'#228 + +'r'#5'\q'#231#251#236'w'#158'v'#240#209#0#193#25#200'B'#130#188'/'#192#231#11 + +'@'#243#214'o'#184#190#129#157'f'#0'X'#181#129'S'#202#173#190'OQ'#3#240'644' + +#4#15'?'#252#240#216'`'#180#128'AKb'#217#204#227#170'er'#21#181#252#146#137 + +#213#255#226#234#221#209#246'7'#166#172#254#164#254#211#7''''#31#198#234#127 + +'['#211'Vx'#238#190'?H}'#25') '#15#245'YW?'#133'6ty'#159#207#253#235#242#131 + +'r'#142#0#242#138'*'#217#245'g'#18#159#189#243'wX'#245#5#229#26#12'='#13'z' + +#241'Ag'#194#238#251#156#148#145#235'$'#225#23#18#131#184'"!./'#128#234#4#218 + +#234#215#131#167#163#169'Kjp'#236#141')'#5#142#171'U*'#149#203#135',1'#216#26 + +#129#193'J'#163#172'|'#246#201'7'#226#153'n'#23'{'#255#141#230#2'('#172#152 + +#205#173#254'z'#21#232#209#12#160'6'#223'*'#149#144#246';<'#133#159#176'm' + +#195'w'#240#230#179'7I}'#25';'#128'<'#232#231#223#248#143'>'#159'w'#255#13 + +#135'd'#181'x'#169'?'#216#251#240#11'`'#151#133'Gf'#236#248#219'6'#174#132'7' + +#159#185'1m'#199#179#228#149#194#217#203'2'#211#215'P'#152'+'#200':'#8'G'#185 + +#225#162'>'#161'i'#136#179#21#218#235#215#166'$'#5#201' '#209'19'#191'u'#145 + ,'\'#150'h'#195#197#215'+'#170#20#28#144#157'7h'#2'@'#245#159#234'S'#23#139'+' + +#255#242'J'#167#131'-'#191#12#244'zU2'#244#199#138'~'#134'q'#222#191#128#159 + +#191#127#31'>~#'#251's'#254#250#131'I;/'#130#195'O'#238#157#156#30#188#241'P' + +#201#18#152#186#3#149'8_v'#251#191'I'#183#206#200#241#253'^'#23'<y'#215')i' + +#14'}'#202#224#162'['#222#0#181'V'#159#145'k'#238#172#15#232','#21'&G'#160'/' + +#16'ff@('#20'L1'#3#242#245#254'S'#138#12#30#26#0#209#129#154'@p0'#253#2#6'#' + +#146#178#162#169#135#234'UZ'#171#3#133'_-'#206#253'/'#174'^'#128#170#191'.' + +#153#246'+'#228#253''''#157#127'9>'#232#163'7|'#247#217#10#248#230#163#204 + +#148#136#166#3#135#156'p=L'#153#181'W'#143#143'?q'#231#137#224#243'8'#164#190 + +#204'$'#170'&'#207#131'#'#207#252'S'#198#142#255#244#221#167#129#219#217#146 + +#246#227#238#182#247#137#176'`'#255'3'#210'~\'#241' '#145#168#168'y('#133#4 + +'I'#19'ho\'#7#30'gsJm'#128'^'#21'y'#180#210'b'#191#31'I'#193#129'&'#128'o0' + +#206#192'A'#17'@'#197#156#147#247#195#235#252#143'X'#253#215#234#200#251'?' + +#159#9#190#1'5'#0#193#249#199#133#254#134'o'#234#175#128#207#223'y'#4#214'~' + +#155'y'#135#213'`'#161'Ti'#224#194'['#223#234#241#241#247'^'#186#3'6'#175#251 + +'R'#234#203#228#175'U'#13#231','#127'%c+'#233#251#175#222#9#155#214#14#174 + +#129'J'#223#215#174#129#243'o~3#'#206'@ae'#167'h@'#152#31'$B'#137'AD'#0'N{=8' + +#155'6'#166#180#11'S'#202'c'#223'O'#202'k;'#7#175#165'='#18#137#184'='#30'Oh' + +#160#13'C'#6'E'#0'h'#255#255#9#143#190'\'#28#254'3'#219'*'#209#4#152#204#236 + +#127#218'h'#188#183'Z'#24#243'5'#12#171#254#186#226#235#15#159#130#213'_'#190 + +'.'#245'e'#244#138#5#7#156#9's'#23'w?'#149'w'#203#250#175#224#253#151#239#144 + +#250#18#25#14';'#229'6'#24'?u'#183#140#28';'#232'w'#195#147#127'>'#161#215#2 + +#159#161'b'#202#172#189#225#128'c3'#215'+'#128#181#12#19#204#0#158#0'|^/'#180 + +#212'|'#151','#17#230#252#0#16#156'\'#208#182#31#138'Y'#227'`'#157#129#3#149 + +'L'#217#173#183#222'*{'#226#205'M_'#225#237'='#196#197'?y'#227'v'#6#171#173 + +#152#23'~n'#245#231#188#255#178'a'#217#240#179'+'#182#172#255#18'>x%s*k:'#160 + +#213#153#224#236#235'^'#237#254'A'#252#209#252#237#182#195'%o'#10'2e'#246#222 + +#176#255#209#215'd'#236#248#159#188'q/lX'#243'IF'#223#3'-|''_'#246'$s'#10#166 + +#27'I3 '#206#153#1','''#0#9#128#136#128#8' '#24#240#165#248#1#10#244#254'K' + +#11#13#158#143'Q'#11#176'SH'#16#181#128#240'@'#204#128#1#19#192#148#221'N2' + +#251'B'#178'v'#154#248#211'i'#255#171#160#164'zO'#208#235'u'#172#232#135#156 + +#127'Z>'#245'W>'#12#219'}w'#7'ZY'#158#185#235'D'#169'/'#163'O'#236'{'#212#213 + +'L'#200#186#195#11#247#158#14'^w'#187'd'#215'V4n2'#28'}^f'#29#169'O'#220'q' + +#20'D#'#161#140#191#23'K'#254'88'#233#210#199#211'~'#220#174#237#195')'#26'@' + +'$'#16' ?@'#211#6#240'8'#27#187#250#1'^'#172'0'#183#223#135'ZA'#171'N'#167's' + +#15#180'Jp'#160#162')/'#159'}'#226'!'#9#144#191'#'#216#244#20#255#215#27#172 + +'PX9'#151#9'?'#249#0#152#250#175'$'#239#191#208#244'cd'#144#192'cl'#5#205#173 + +'l'#186#174'(.'#159#6'G'#158'so'#183#143#173#252#228'9X'#253'E'#223'!'#195'L' + +' '#191'x'#2#28'{A'#250#203'j'#197#248'u'#213#7#240#223'w'#30#202#218'{Zt' + +#240#249#176#243#238#135#167#245#152'|'#247#31#212#0#184'nA'#194'hq6^'#220 + +#209#4#142#166'_'#187#250#1#214'M'#206'o?'#31#9#160#9#205#0'g('#20#242#15#196 + +#12#24#136'X2I.'#159's'#242#221'x'#222'+'#197#14'@s~%'#235#253'G'#194#175'G' + +#225#167'a'#31'D'#0'r'#133'l'#216#135#255#196'x'#225#222'S'#193#239'u'#14#253 + +'@'#25#132'Zk'#128'3'#175'}'#181#199#199#223'x'#252'rhk'#218'<'#128'#'#14#29 + +#214#130'r8'#254'"'#154#20#151#153#144#159#128#151#30'8'#27'<'#174#244'{'#254 + +'{'#2#245'5<c'#249#171#168#233'j'#210'v'#204'd'#159#0#22#13'H0'#155#223#31 + +#136#242'EB~h'#221#246'M'#151'|'#0#136'T'#219'Z'#143'R'#200#162#219#200#25'H' + +'9'#1#225'p8'#132'f'#0#17'@'#159#171#213#128#8#224#216'c'#143#149#127#253#155 + +#154#218#203#206#21#226#255#10'T'#243#243#199#205#6#147#165#128#9'?'#179#255 + +#169#235#15'S'#255#249#158#255'#'#4#159#191'u'#31'lZ+m'#3#139#254#224#204#235 + +'^'#239#241'GIi'#177'+'#238';'#13#194'A_V'#174#165'l'#252'L8'#244'Tr>fV'#248 + +#219#26'7'#193#191#158#186'2+'#239'I'#140#25#187#30#6#11#14'Jo'#134'hgRPg' + +#159#0#193#20'h'#175#253#129#245#8#16'u'#12#134'|'#157#247#230'b'#147#255'}' + +#148#201#22'$'#128#14'2'#3'P'#3#136'B?'#162#1#3#17'O'#249#132'9G'#230#133#19 + +#250'f'#188#173'H'#150#255#170')'#254#191#16#237'~'#174#233#7#197#254'5|'#242 + +#15#215#245'w'#228'0'#128#179'm;'#188#241#152't'#13'A'#250#139#197#135']'#10 + +'S'#230#236#223#235#251'x'#243#241'K3n'#206#204'^x'#28#204#223#251#212#172 + +#188#231#183#159#190#10'I'#224#183#172#156'K'#12#149'Z'#11#167'-{-'#189#7'Mp' + +'9'#1#228#8#140'D'#184'h'#128#16#18't'#182'lBS'#160'N<D'#20#244#170#240'[' + +#149#22#199#189#177'X'#172'I'#163#209'8'#6'b'#6#244'W:'#153#250'_'#185#203 + +#201#191#199#243#190'!'#216#255#180#194#235#141'yPP1'#135'9'#254#184#216#191 + +#146#13#251'd'#171#191#156#31#243'='#130#240#194'='#199'C$'#156'['#3'7'#187 + +'b'#225#193#23#193#212']'#14#236#245'9['#215#253#23#190'|'#239#225#140'8'#204 + +#228#168#26#239's'#212'r'#168#156#156#153'P_W'#248#189#14'x'#229'Aj'#146'"M' + ,#132'c'#209#161'H'#184#179#211'[)'#26#231#11#132#136#0#132'>'#1'D'#2'd'#226 + +#216#27#215#165'8'#2'U'#242#216'&4'#3'.'#198#219#13']'#204#128'>'#163#1#253 + +'&'#0'R'#255#191#217#164#186')'#145#144#221'"'#216#255'4'#247#207#156'?'#30 + +#172'E'#19#152#240#147#243#143'&'#1#177#220#127#249#200#178#255#5'|'#251#225 + +'c'#240#235#170#247#164#190#140'^ '#195#21#233#31'h'#154#245#175#133#213#170 + +#207'_'#128'u+'#223#198#31'T'#223'%'#177'}'#158#25'5'#194#9#211#23#194'B'#212 + +'@2'#209'B'#171'''|'#242#250#157'P'#251#219#183'Y;_W'#152'l%p'#204#5#233#27 + +'u&D'#2#132#226' V'#27#16#138'23 '#16#8'B'#203#182#175#240#251#138''''#29#129 + +'2Y'#194'7'#173#160#245'd4'#11#234'('#26'`6'#155';'#182'l'#217#18'Z'#183'n' + +#29#153#1#189#170'y'#253'&'#128#165'K'#151'*6'#187#198#189#128#231';A'#236#0 + +#180#149'L'#7#147#181#132#9'?'#167#254'wv'#254'aC?F'#152#6#16#143'Ga'#5'j'#1 + +#180#207'E'#232#12'68'#238#146'g'#7#250#174#224#251'O'#158#133#223#214'|0@' + +#141'@'#198#178#250'4:3'#20#148'N'#130#5#7'_'#12'jm'#250#231#234#245'z'#229 + +#236#251'8N'#210'JG'#146#135#211#174#253'WZ'#143#201'R'#131'y?'#0#155#29#128 + +#4'@'#27#17'A'#235#182#239' '#28#246#167#248#1#198'['#237#231'j'#20#225#245 + +'J'#165#178#9'W'#127#167'N'#167#11#244#167'6'#160#191#210')'#159'7o'#158#162 + +'9:'#141'hv'#174#152#0#10'*'#230#130#201'le'#194#175#213't'#134#255#134's' + +#235#175#190#240#213'{'#15#194#230#28'u'#6#142#199#21'x'#175#223#15'>'#209 + +#134#242#29#234'6}'#7'M'#219#215#178'N4'#241'X'#132'U'#17#146#160#145#160'[' + +#242#203#153#176#23'W'#236#4#230'<'#233'Zy'#9#248#254#147#167'a'#253#247#131 + +#27#156#154'N,='#234'Z'#168#154#178'g'#218#142#215'u'#132#24'5'#10#9#242'Z@{' + +#253'Oh'#246#216'S'#8#160#216#232#249#147'M'#235#251#24#239'k'#196#191#237 + +#161'P'#200#215#159#1'"'#253#145'Pf'#255#31'|'#240#193#170#181#141'ymx'#219 + +'$'#142#0#20'MX'#8#6#157#134'['#253#133#226#31#249#200'I'#0#234#14'$'#12#175 + +'=tF'#214'<'#233#253#6'~'#224'G'#254#225'Q0Z'#138#165#190#146#172#225#229#191 + +#158#136'Z'#203#192#27'|'#164#27#21#147'wC'#18#184'.m'#199'K'#13#7'v'#18#0 + +#141#21'w4'#253#6'^WC'#151#6'!'#254#23#139#244#174#151#209#254#175#139'F'#163 + +'mj'#181#218#211#159#18#225'~'#17#0#217#255#171'6'#199'+Cq'#237#214#164#3#16 + +#237'='#181'F'#143#4#176#27#203#250'c'#171#191'Z'#193#186#2')'#21'#'''#249 + +#167''''#216'['#182#192#7'/,'#203'h'#206#249'@Q9e'#15'X'#252#251#204#228#168 + +#231'"6'#253#248#1#172#252'8'#253#217'x'#131#129'Vo'#129#163'/z&'#173#199#20 + +#210#130#201#214''''#2#16#162#1#29#246':'#232'h'#221#156#18#9'0'#168'C'#159 + +'UZ\'#15#163'|'#214#14'$'#28#216#31#17#149#163#253'/'#175'q'#151#238#23#137 + +#201#223'O'#137#0#24#242'!'#191'b'#22#155#3'@'#177#127'F'#0#138#206#8#192'H' + +#199#154#255#189#0#235'W'#190')'#245'e0'#144#231#253#152'K^'#204#170#243'Mj' + +#188#249#232#217#16#240#229'Fb'#150#12#127#240'''^'#153#222'b1a'#148'x'#140 + +#207#7' '#2#8#134'#'#224#235#176#131#189#241#231#148'H'#128'F'#25#253#181#218 + +'f'#191#3#229's;'#254#221#20#12#6#157'J'#165#178#207#226#160'~'#17#192#140#25 + +'3'#148'n'#213#172#11#226#9#249#253'b'#2'0'#217#202#193'V<'#25'U'#255'N'#2'H' + +#142#252#30#225#26#128#128#207'^'#191#29#154'j'#178'?*L'#12#242#190#239'}' + +#204'MPR5['#234#143'#kh'#220#182#26'>'#255'gnT7'#10'8'#225#242'W@'#158'&'#2 + +'f'#170'='#223'#@'#240#3#176'~'#129#148#16#228#247'B'#235#246#149')'#4#160 + +#148#199#237#147#242'Z'#175'E'#185#164#9#221#13#129'@'#192#238#247#251'}&' + +#147#169#215#226#160#190'D'#148#169#255'^'#175'W'#249'K'#147#237#190'xBv'#129 + +#152#0#172#197'S'#192#130'$'#160#161#8#128'J!'#234#254#3#204#30#29#13#4'@' + +#248#238#195'G`'#235'/'#210'8'#5#233#251'Xr'#228#245'P6a'#174#212#31'CV'#241 + +#239#167'/'#6#143'3'#183'f'#29#238'{'#252#237'l'#28'^'#186#144#236#15' '#26 + +'%N&@'#24'5'#129#230'-_B4'#18'I'#18#0'">5'#191#229'r'#20#203#173#248'w]8'#28 + +#166'Va'#30'Q'#143#128'n'#253#0#253'"'#128#182#182'6'#213'fW'#217';'#137#132 + +'l?q'#17'P'#222#184#153'`4'#23#178#213#159#171#254#235','#0#26'%'#178#159#196 + +'/'#223#252#3#183'W'#135'~'#160#1#128':'#213'.8'#236'*('#159#180#187#212'o?' + +#171'p'#182'l'#133#15'Wd'#174#164'x'#176#152#179#228't'#152'6'#255'wi;'#30'_' + +#23#196'|'#0#177'(?D'#20'M'#0'r'#6#182'm'#255#1#194'A/'#171#9#16#136#162#210 + +#226#252#139'A'#29#254#142#252#0#161'P'#168#197'`0t'#212#214#214#6'{'#203#7 + +#232#147#0'('#254#143'j'#132#250#199'Z'#243'z<O'#149'8'#9#168'h'#252#238#160 + +#211#25#184#8#0#159#255'O'#17#0'N'#1#24'm'#20#0#176'm'#221#167#240#253'G'#127 + +#203'J'#205#189#181'p<'#170#253#183#128'Zk'#150#250'mg'#29#31#189#180#12#28 + +'-'#185'5'#234#156'0q'#214#1'0'#127#223#244#213#5#8#161'@'#202#7#136#196#249 + +'p`'#8#9' '#24#3'{'#227'/'#16#240#180#165#16'@'#161#222#243'b'#129#193#255'~' + +'<'#30#175#161'|'#0'4'#1'\('#187#254#222#242#1#250#146'R'#22#255'Oh'#138#205 + +'->'#27#205#196#146'wv'#1'RB'#209#132'E'#160#165#236'?u'#151#177#223#195#184 + +#253#247'PA'#171#211#234'O'#30#3'G3'#253'@'#211'O'#4'*'#181#30'v^t'#18'L'#154 + +'s'#176#212'oU'#18#248#221'm'#240#238#147#231'K}'#25#221'b'#210#156#131'`' + +#151'}'#206'M'#235'1'#217'b'#194#143#14#139#242'&'#0#249#1'\'#246'm'#224'm' + ,#175'I!'#0#139'6'#240'q'#153#201'M'#163#250#182#225#223#141#184'''?'#128#191 + +#188#188'<<h'#2' '#7'`'#212'0c'#170'7'#164'Z'#203'^'#192#19#128'ZoB{g>g'#255 + +#167'$'#0#201'G'#141#237#223#27#130'~'#23#172#254#244'Ih'#216#250'=2'#248#208 + +#179#212#244'hj'#237#188#231#9'0~'#250'^C>'#214'p'#198#127#223#248'?h'#169 + +#253'I'#234#203#232#22'S'#230#30#206#204#128'tB'#136#4'P80'#18#163'\'#0#218 + +'"'#172'1'#136#171'ecJ2'#16#170#255'?V'#152#29#143#201#229#242'mx'#127'='#154 + +#233#237'}u'#9#234'MTY'#251#175#239#190#251'N'#245'['#171'q~0'#170#254'R'#198 + +#229#246'2'#2#208#26#242#160#160'|6'#18#0'7'#248'S'#171#230#186#255#202'y' + +#239#255#232#243#2't'#15#250#130'~'#254#250'%'#168#221#240'?'#22#178#234'o'#5 + +#30'y'#246#13#150'"('#169#154#3#147#231#28#2'f'#155#244'YwR#'#26#14#194#27 + +#143#158'"y['#179#158'0}'#215#163'`'#214#194#147#211'v<!'#10'@{65'#136#252#0 + +'|.'#128#183#163#13#28#141'?'#167#16#128'N'#25#222'Peu<'#138'/'#221#138'[m' + +#127#28#129#189#18#128#224#0#172#243#20#239#19#140'*'#223#21#212'z'#5#254'8' + +#181#166#2#200#31#183'3'#174#254'|'#251'o'#214#0#20#197'^'#14#163#214#7#208 + +#31#184#218'j'#160#254#183'o'#160#195'^'#11#177'H'#8'b'#177'0+'#196'Qi'#12'`' + +#180#150#128'%'#191#10'l'#197#213#144'_'#154#153'A'#148#195#25'k'#191'x'#1'6' + +#254#240#214#208#15#148'!'#204#216#243'x'#216'i'#143'c'#211'z'#204#206#148'`' + +'.'#31' '#20#226#250#2#248'='#14#176'7'#172'I!'#0#173'2'#178'm'#188#213#254#8 + +#222#166'H@-n-'#145'H'#164'#'#136#24'4'#1#212#215#215#171#155'C'#149#191#11 + +#199#148#175#164#16#128#185#24#127#164#211'A'#175'U'#163#22#192#141#5#147#141 + +#144#6#160'c'#200'M'#188#251#228'y'#16#240#218#165#190#140#30#177#243#162'S`' + +#218#252#244'O:'#18'R'#130')'#245#151'B'#129#212#23#192#239#237#128#246#186 + +'U)'#4#160'QD'#27''''#216#218#169#239#218'Vr'#4#162#188'6'#163'9'#224#178#217 + +'l'#129#158#250#4#246'J'#0'B'#4#224#151#6#195#201#225#152#226'q'#193#4' '#2 + +#208#163'Jj+'#158#194#170#0#169#11#144'P'#1#152#201#16' '#133'='#26#182#172 + +'D'#27'p-L'#156'y '#20#150'O'#207#208#153#198#144'k'#8#162#249#244#246#227 + +#233'u'#176#165#27#187',='#11'&'#239'rHZ'#143#201#133#2#249#6'!T'#19'@'#131 + +'C'#169','#216#235#131#182#218'oS'#8'@'#165#136#181'O'#180#181'QSDJ'#217#175 + +#193'}#e'#4#246#22#9#232'MVY'#4#0'_'#172#217#238'.'#249#3#18#192'=b'#31#128 + +'1'#175#10#172'E'#19'Y'#27'p'#174#7#160#156#133#6#217'A3'#192#0#31'<{)s|$/' + +#28'O2k'#241#169'0e^'#250#226#174'c'#200']'#172#254#228'q'#216#178#246'?R_F' + +#175'8'#240#180#251#192#156'_'#145#246#227'2'#1#231'K'#131#169#24#136'5'#7 + +#241#7#161#181#230#171#20#2'P'#202#227#238#201#249'm'#15#2#231#3'HF'#2'Ps' + +#240#245#148#18#220''''#1'h'#17#245#254#138#171#163'q'#197#205#236#5'|'#20 + +#192'T0'#17#172#5'U'#160#215#171'Y'#18#144'0'#0'4SC@'#222'|'#228#148'n;'#241 + +#236'y'#232'UP1eAF'#206'9'#134#220#193#219#143#159#141'Z'#128'K'#234#203#232 + +#17'r'#133#10#142#185#244#149#140#28';Y'#21#136'{6+ '#16'fm'#194'['#182#254 + +'/'#133#0#20#178'x`J'#1'G'#0#248#247'6'#148#213#250#190#230#5#244'$'#173','#2 + +#176'n'#221':'#165#211#233#212'm'#178#23#220#138#4'p9{'#128''''#0's'#209'dd' + +#187'r'#212#0#144#0'P'#11'P%K'#128'3'#147#2#252#250#3#199'w;'#221#150#28'g' + +#135#156#245'HF>'#248'1'#228#14#254#249#192#9'h'#3#167's'#208'gzA+'#255'A' + +#167#167#127#230'A'#178',8'#193'E'#148#136#0'hX('#245#5'h'#221#250#5#27#248 + +'*<G&KD'#167#230#183'<'#128#183'k'#20#10#5'K'#9#22'J'#131'{j'#17#214'#'#1#8 + +'5'#0#200#28#250':_'#197#221#209#184#252'l'#246'@'#146#0#166#130#165'`'#28#24 + +'H'#3#208#168'X'#31#0'Y2'#4#152'~'#188'v'#255'1='#134#127#14':'#237#254#140 + +#168'^c'#200#29#252#3#191#255'\*'#189#238#138')s'#15#131'9{'#157#153#145'c' + +#11'~'#0#214#29'('#18'e'#3'C'#3#193'0'#180'm'#251#154'uy'#22#8#128'0'#173#160 + +#249#1#178#255'qc'#161'@'#220'Z'#187#204#13'L'#137#4#244'J'#0#20#2'D'#245'A' + +#191#161'5'#239'Q$'#0'6tN '#0'K'#201'N'#172#21#152#201#200'5'#3#161#230' '#10 + +#25#215#7' '#19#12#240#218'_'#143#134#158'2'#235#138'*g'#194'^'#199#220#182 + +#195#253'[~'#250#0#218#27'~'#5#183#163#30#2#30';'#132'C\'#3#15#210#26#202#170 + +'w'#133#201's'#15#5#157'1?#_'#218#24#210#7#250#145#191#249#224#9'R_F'#175'8' + +#240#244#7'2'#183#8#145#6' '#228#2'Db'#224#245#134'9'#2#168#249#14#162#145'@' + +#10#1'L'#206'k}\'#169'H'#208#224#7'r'#4'nW*'#149#205'*'#149#170#163#161#161 + +'!8`'#2#160#16' '#18#128'a'#171#171#244#249'XB'#206'rO'#5#2#176#150#206'DA*' + +#4#147'A'#195'G'#1'd,y%SQ@'#166#2#246#208#184#146#206'{'#228#197#207#131'R' + +#205'M'#155#165't'#209'O^'#185#158#9'}_Pi'#244'P2~.'#236'~'#200#229#25#153 + +#248':'#134#161#195#217#188#25'>Z'#145#187#141'N'#20'*'#13#28'}'#233#203#25 + +';'#190#160#248'PYp'#8'5'#0#31#18#128'?D3'#2'VA$'#232'N!'#128#234'<'#251#11 + +#26'Et='#222#220#138#191#231#237'h'#2#244#26#10#236#145#0'('#4'XXX'#168'B3' + +#192#248'K'#147#237#159#241#132'l1{@ '#128'q'#179#193'h'#202#7#147#137''''#0 + +#26#3#206#183#1#207#4#9#188#243#216#185#224#239'E'#160#199#207#216#27'v?'#248 + +#18#230')^'#245#241#19#3'N'#191'U'#170#180#176#199'!'#151#193#184#201#163#171 + +#178'n8'#128'l'#223#215#239';6g3'#0#231#238's6'#211'&3'#5'!'#29#152'"'#1#212 + ,#25#200#235#11#177'\'#0'J'#4#10#251#157')'#4'0'#222#234#248#135'N'#21'YK&'#0 + +#229#2#224#234'O'#205'A\'#212'$t'#247#221'w'#143#12#136#0'('#7' '#20#10#25 + +#127'm-x'#27#9#128'IF'''#1#204#5#163#217#10'f'#163#22#180'H'#0#212#9'H'#166 + +#200'\'#15#128#143'W,'#7'{'#227#198#30#31'''/l'#193#184'i'#208'Z'#251#243#144 + +#206'SX1'#3#150#28'u#j'#19#218#204#188#145'1'#12#10#239'>q'#1'x]'#205'R_'#198 + +#14#160#26#141#195#255#144#217#182'd'#9'^d'#217#192#208'p'#20'<^'#158#0#234 + +#215'B8`O!'#128'J'#139#227#13#189'*L'#197#18#201'\'#0#212#226#157'H'#6#221 + +#230#2#244'J'#0'j'#181'Z'#19#139#197#140#155#28'E'#175#196#226#242#165#236#1 + +#222#203'o+'#157#131'&@>'#243#1'P$@'#145't'#2'f'#134#1'V~'#240' l'#203'R'#211 + +#13#5#146#201#220#253#206#131#234#153#251#15#253'`cH'#11#214'|'#254'LN'#166#1 + +#31'p'#234'=`+'#158#148#209's'#8#233#192'q'#158#0#220'D'#0#254'0'#18#192#26 + +'4'#1'\)'#4'0'#193#230'x]'#171#140#172#3'>'#27#144#186#4#247'6-'#168'O'#2#8 + +#135#195#166'm'#29#165'OF'#227'r'#166#227#8#4'`)'#153#9'f['#17#24'y'#2#160'f' + +' '#178#12'N'#2'j'#174'Y'#3#255'}'#237#214#140'~'#208']a+'#158#8'K'#143#187 + +'-'#235#189#238#199#176'#'#130#254#14'x'#251'og'#230#212't'#230#146#9#187#192 + +'^'#199#220#146#241#243#8'EAqf'#2'D'#192#235#14#129#151#8#160'n'#21'DB'#30 + +#238'9<'#1'L'#180#181#189#162'R'#196'6Q='#128#208#30#12'I'#192#209'S2PO'#210 + +#154#204#2'D'#152'6'#180#218#238#143#198#21#201'('#0#17#128#185#136#250#194 + +#151#128#201#164#3#131'^'#197#17'@'#134#235#0'^'#187#247'('#180#131#178#251#3 + +#144#203#149'0{'#233#25'0y'#222'aY='#239#24'v'#196#166#213#239#194#143#159'<' + +'!'#245'e0'#208#140#132'C'#207#251'{'#210#241#156#13#196#248'T`'#143''''#8'>' + +'$'#0'J'#5#142#133#131')'#190#145')'#249'-+'#208#26#175#1'>'#25#8#247#13'(' + +#252#164#1#248#186#235#11#208''''#1#168'T*'#243'f{'#254#31#195'1'#197#25#236 + +#5'<'#1#152#10#166#176'D '#179'Y'#139#4#160'a'#4#192'f'#1'f'#144#4#200#14#244 + +'8'#26#135'~'#160'A'#192'RP'#9'{'#31#127#27'h'#141'y'#146#156#127#12#28'>}' + +#233#6'h'#173#251'E'#210'k'#208#155#242#225#16#18#254',u`f&@'#28'X'#243#15'J' + +#0'r'#187#3#204#7#208'F'#169#192#209#136#152#0#18#211#11'[^'#196#191#235'I'#3 + +'P('#20#219'"'#145'H'#3#222#223'>h'#2'@5'#194'R'#227'*'#188'>'#20'S^'#200'^' + +#192#11#184')'#127'"'#152#11#171#192'l'#210#128#209#160#3#165#138'k'#6#154 + +#201'>'#0#171'>~'#156#173#2'R'#129'Z?'#239#188#240'$'#152#177'gzK>'#135#27 + +#220#246'zh'#216#252#29#11#183#6'|.'#8#5#220#172'V_'#165#214#129'Zg'#2#173 + +#222#12'Fk)TN['#12'zsAZ'#207'MCY'#222#127'J'#186#134#160#244#190#14'9'#231'a' + +#166#25'f'#11#156#15#144'/'#7#14'F'#160#163'#'#192#178#1#219#182#254#143'/' + +#20#226#228'Y.KDP'#3'x'#149'R'#128#129#171#5'`'#233#192#184#136#183#187'\.ow' + +#147#130'z%'#0#170#3#192#23'['#234#189#197#151#6'"'#202'd'#23'F"'#1#131#181 + +#10#172'%'#19#193'd'#208#130#201#172'I'#154#0#178#12#134#210'i '#194#7'OH?' + +#158#219'd+'#133#165''''#252#31#232'-'#133'R_J'#198'A'#130']'#187#225'Kh'#218 + +#242#3'ks'#22#244#216#7'4'#135#143#134#148#26#172#197'P1u'#1#236#180#240#184 + +#180#9#206#215'o'#221#13'u'#191'~'#153#213#207#194'Z4'#30#14'<'#235'>'#188 + +#149#253'|'#17#166#1#160#249#27'@'#193'w'#185#209#4#240#5#161'}'#235#23#220 + +'c<'#1'('#229#241#224#164#188#214#127#226'M'#154#18'L'#234#255#214#190':'#3 + +#245'J'#0#227#198#141#211#6#131'Ak'#141#211'r'#182'/'#172'Nz;H'#208#245#214 + +'r'#176'P='#0#154#0'&'#147'6'#217#15' '#211'x'#253#158'c'#210'2'#201'v'#168 + +#160#228#163'Is'#15#129#185#251#159''''#245#165#164#21'm'#245#235#161'n'#195 + +'W'#208'^'#183#142#173#178#209'4'#142'B'#167#207#172#160'b'''#152#179#247#153 + +#144'W:y'#200#199#219#188#250'='#248#241#227'''3>'#168#149#186'/O'#158#127'8' + +#204#217#231#172#140#158#167'W$'#184#17'a'#1#180#253']'#164#1'x}`'#223#254#13 + +#255#16''''#207'*E'#204';)'#175#157#6'%'#146#218#207'4'#0#154#24'L#'#195#245 + +'z'#189#167#191#4#192#10#129#208'VPVVVjc'#177#152'e'#187#211'|'#162'7'#172 + +#185'+'#249#4'j'#9'f*'#5'['#201'4\'#253#181','#23'@'#165'Qr'#149#128#221#229 + +'j'#164#145#23#254#243#236#149',3,W@'#17#130'='#127'w5'#148'T'#15#207#190#252 + +'q$'#211#205'?~'#0'5'#235'>'#135#142#182#154'n'#11#174'2'#129#252#178#169#176 + +#232#152#27#217'H'#173'!]?'#10#255#143#31'?'#1'['#127#250#152#13'2M+'#240'w^' + +'>y'#15#216#253#176'+'#178#155#23#210#141#12'%d'#192'f'#3#4#252'!'#232'p'#5 + +#192#235'q'#131#163'ne'#138#3'P'#163#140'vT'#219#236'4'#187#190#129#132#159 + +'6'#165'RY'#135'2'#220'6h'#2#136'D"'#214#6#183#249'w'#238#144#238'!'#241#147 + +#180#166'b'#176#149#206'`y'#0'&'#139#142'M'#7'b'#29#129'2'#252#217#172#251 + +#250#31#240#243#127'_'#200#222#151#209'O'#20#148'O'#135'%'#199#222'<,B'#134 + +'^\'#217'7'#174#252#23#218#241#223#131#223#211'.Y'#145#13#249'T'#166#237'~$' + +#139#178#12#29'qX'#243#201'3Hd'#255'e'#205'C'#134#2#133#146#146#202#166#163 + +#224'_'#206#18'}r'#1'T'#13#24#141#198'P'#245#15#129#219#229#7#175#219#1#206 + +#134#31'S'#8'@'#167#140#216#171#172#246#143#128#215#0#168'"'#16#247#140#0#240 + +#182#183#187#138#192'~'#17'@'#179#199#184#175'3hxZ'#252'$'#141#161#0#242#198 + +#237#12'F'#163#14#205#0#29'k'#14#154#169'^'#0'b'#208'D'#222'7'#239#203#205 + ,#194#16#25#170#138';-8'#22'v^'#156#190#198#144#233'BG{'#29#252#244#233#211 + +#208#142'*~$'#228#151#250'rR`-'#154#0#251#159'y'#127#218'j1(g`'#195'7'#175'C' + +#253#198#175#193#215'A'#3#173#251'&8r`'#22'V'#238#12'Sw;'#2#138#170'fI'#253 + +#145#236#0'z'#7#17'j'#7#230#9#162#9#224#199#247#213#14#206#198#212#238#200'z' + +'U'#184#165#210#226#248#12':}'#0#228#4#172#29#18#1#144#9#208#234#209#237#209 + +#230'7'#254'#'#229#3#211'Z!'#191'b'#14#24'P'#253#183#152#245#172''''#0'u'#4 + +#202'F3'#208#127#221'w'#18#251#146's'#21'Z'#163#13#22#163'z'#155'?n'#154#212 + +#151#2#174#214#26#248#238#223#247#129#179')w'#204#166#238'@'#159#217'!'#231 + +#254#13#212#250#244#14':!'#19#193#217#188#21':Z'#183#129#27'I'#208#227'jfu"F' + +'['#25'X'#11'+Y'#178#151#165#184':'#183#11#193'X'#166#31#215#11#192#235#13 + +#176'('#128#199#209#12#238#150'u)O3'#170'C'#141#21#22#215#127#249'N@d'#2'l' + +#29#148#9'@'#155#216#9#232#244#171'f6z'#172')'#241'7'#133'J'#7#5'U'#187#131 + +#193#160#1'3'#154#0':'#150#11' '#239#182#31'X'#186')'#225#203#127#222#153'u' + +#15#240'`0e'#215#195'a'#222#129#210#12#177#8#251#221#240#217#203'7'#131#163 + +'i'#147#212#31'C'#191'A'#5'Y'#135#156#255'(k'#135'>'#154#209#157#190'B'#9'pa' + +'>'#9#168#3'M'#0'w'#251'v'#240#218'S'#167'#Y'#180#193#154'2S'#7'y'#6#27#248 + +'$ F'#0#209'ht@N@BJ'#24'P'#169'R'#149'nh-'#250#2'_'#165'I>'#3#5#189'p'#194'"' + +'$'#0#29'X'#172'z'#208#27'5'#172'5x'#159'y'#0'i`'#131#230'mk'#224#211#23#174 + +#207#202#151'1T'#152#11'*'#224#128#179#238#205#170'o`'#235#154#255#192#202'w' + +#31#206#154'C/'#157#160'<'#130#163#174'x!mSv'#135#5#250#180'P'#184#28#128'`0' + +#2#30'w'#0#220#168#1#184'Z6@'#160'#5)'#174#208#224']W'#160#247#253'D'#137'@d' + +#2#240#142#192#186'A'#135#1#137#0#240#133#164#147#21'ov'#20#191#30'K'#200'''' + +'$'#159#129#4#144'W1'#15'L'#22#27'j'#0#6'V'#19#160#226'C'#129']'#223'O&'#140 + +#130'W'#238'8l@'#241'h)A'#177#240#189'N'#184'%+'#145#130'O'#158'_'#14'-5'#185 + +'99'#167#191#176#20#141#135'C'#207#127'T'#234#203#144#4'='#5#209'('#2#16#12 + +#132'Q'#248#253#168#5#4#192'Q'#207#149#2#139'Qnv'#174'D3`'#19'%'#255#8#26#128 + +#144#8#132#154#128'o'#192#4' '#164#2#227#193#138#183'8'#10#30#12#199#20#139 + +#196#151'E]'#129','#249'e`'#178#234#192'd'#212#129'ZC~'#128#236#204#5'x'#239 + +#209#11#192#217#178'-+'#231'J'#23#166#237'q$'#204';(}'#195'#S'#128'6'#226'{' + +#127#191'h'#216'}&=a'#194#236'}a'#193#145#185'7'#1'X'#10'P'#18#16'E'#0'('#4 + +#200#17'@'#16#218#183'}'#3#177'h0'#229'y'#19#243#218'>U+'#226#164#254#215#163 + +#224'3'' j'#2#245#129'@'#192#142'f'#128'w'#208#181#0#248'wQ'#141#211'v'#173 + +'?'#162'Jq'#191#27#242#171#217#20#27#179'Y'#159#12#5#210'x'#176#158'k'#12#211 + +#247#161#172#253#244'yX'#251#249#138#236#127#27'C'#196'n'#135']'#12'Sv;<'#189 + +#7'E'#251#240#237#135#207'cN'#174#145#3#25#28'~'#201'c`)'#172#146#250'B'#178 + +#131'^'#204#0'j'#6#18#165'n'#192'>'#206#254#247'z'#252#208#182#245#139#148#16 + +#160'\'#150#136'N'#201'o'#249#8#5#159#194#30'uB'#30#0'nD'#8#246#129#214#2'$' + +#203#129#241#128'fd'#143#194'F'#143#229#20'wH'#151'B'#201'ZS'#9#228#143#155#1 + +'&'#179#14#204'V=h'#132#178#224',('#1'>W'#11#188'q'#239#169#153'?Q'#154'AYeG' + +']'#189#2't'#166#244#21#21#189#247#247'K'#192#222#176'q'#232#7#202'1'#152#242 + +#199#193#17#151'?#'#245'eH'#10'a&'#0#245#1#240'y'#3','#7#192#237'p'#160#9#240 + +'Cj'#18#144'"'#234#169#206#179#127#129#247#181#161#204#210'J'#192'f'#3#12#182 + +#28'8'#165#31#0#218#15#133#142#128'ai'#139#215#248#160#248'Ij'#141#5#10#198 + +#207#3'#O'#0','#18#160'R'#176#142'A'#137','#12#7'}'#233#214'Cr"-x'#160'`?' + +#236'+'#158'K'#203#177'H'#19#250#9#183#145#138'='#143#184#10'&'#205#31#157 + +#163#208'9$ '#30#163#8#0#239#0't'#250#193#213#214#0#238#214#245')'#4#128#182 + +#127'K'#133#197#245#3#222'l%'#199#31#240#229#192#168#193#147#167'pp'#13'A' + +#168'%'#152#223#239'7!'#131#20'D'#19#170#201'['#157#133'o'#136'_'#163'P*'#161 + +#176'z1K'#6#162'H'#128#206#168'ERP'#246'/'#23' '#13#252#240#206#131#231#177 + +#24#239'p'#196#188#131#207#131#25#139#143#27#210'1'#236#13#191#193'{'#127#187 + +'(g{'#229#165#3'r'#133#18#142#185#246#21#208#26#173'R_J'#250#209#143#175#141 + +'u'#2'B'#251#159#28#128#140#0'P'#3'p6o'#1#175'c[J'#6'g'#158#206#191#173#200 + +#224#166#196#128'VJ'#254#17'z'#2#146#6'0'#232#150'`BO@T'#31#10#240'GV'#190 + +#201'Q'#242'J<!'#179'%'#159'$'#151'AA'#213#2#180#255'M'#168#1#24#152'&'#160 + +'V+'#185#17'a'#252#140#192'LF'#4#214'|'#252#28#219#134'#J'''#205#133#3#207 + +#185'gH'#199'x'#227#238'S'#193'mo'#144#250#173'd'#28#230#194#10'8'#234#170 + +#225#249'='#247#7'='#201'H'#130#31#6#18'#'#2#240'q'#14'@'#234#5'`'#175#255#5 + +#130#238#212#254#136#165'&'#247'z'#171'6'#176#25#229#148#8'`;'#240'-'#193'P{' + +'oB-'#222'IMA'#7'D'#0#212#22#28#247#234#182#182'6'#3#238#11'P'#149#24#183#201 + +#158#255'P$'#166'HN'#228#164#149#222'6n'#14#152#243#138':'#9#128#250#3#138':' + +#4'g'#18#164#254#191'x'#227#193'9'#213'&'#170#191'0'#229#151#193#209#203#6 + +#239#196'l'#173'Y'#7#239'=*}it'#182'0c'#241#177#176#235'a'#23'J}'#25'YE'#130 + +#239#4#28'A'#251#159#28#128#180#250#251#144#0#218'j~'#128'p05'#19#182#202'j' + +#255'^'#167#140#144#186'O'#204#192#8#128#136#0'I'#160'iPm'#193#133#193' '#10 + ,#133#194#128#7#200#195#139#25'W'#227#202#187')'#16'Q'#237#147'|'#18'M'#8'*' + +#156#2#150#162'*'#230#3'0RJ'#176'^'#205#252#0'T'#232#145#141#128#224';'#15 + +#254#1#218#235#135#159#3#140#230#17#156#242#127#239#13#250#245'o'#222'{&'#184 + +'FH'#200#175#127#144#193'.'#7#156#9's'#246';M'#234#11#201#26#136#0'b'#188#253 + +#239#247'p'#234#191#207#19#132#214#173#255#195#197'/5'#201'kj~'#203#231'2Y' + +#194#137'2'#217#132#175'c'#4#128#219'v'#148#223'f'#220':jkk'#131'('#211#3'#' + +#0#26#13#134#194#175#15#4#2'y'#184'/'#173'w['#206#243#132#180#157#174'w'#234 + +#11'`.'#131#188'q'#211#209#12#208#179#141#252#0'*'#181#146'o'#29'&'#154#18'$' + +#214's'#210#200#12#219#127#249#2'>}'#246'F)'#191#167'A'#129'j'#227#207#184 + +#251#179'A'#189'6'#28#244#195#138#27'G'#167'c'#172#176'r''8'#248#194#7'Xr' + +#213#136'@'#143#250'?O'#0#188#253'O+'#191#199#229'C'#18'p'#130#189'v%'#211#12 + +#4'('#229#177#224#228#252#246#175#240#249#2#1#212#0#231#4#164#209'`-h'#198 + +#187#131#136#1'M'#6#18#15#7#141'F'#163'6'#180'%J'#28'~'#221#190'->'#243#29 + +#226''''#170#212'z('#172#222#19#140'&'#29#152'mD'#0'\B'#144#208'&<'#27'j'#192 + +#11#215#31#8#145'P'#250#26'Wd'#3#244#3'>'#253#174#143#7#245#218'_'#254#251'*' + +#172'|{'#244#14'DUi'#13#176#223#153#127'd~'#148#145#138#4'_'#0'D'#241#255#160 + +'?'#4#30#180#255#189#184'9[j'#192#221#250'['#138#227#215#160#14#219'+'#204 + +#142#213'('#252#14#138#251#211'<'#0'>'#19#144'*'#1'['#7'3'#28#148' G'#155#129 + +'U'#4#250'|>'#139'F'#163')'#142#199'a'#194'F{'#225#243#137#132','#217#29#129 + +#170#168#24#1'X,'#204#15'`'#160#210'`'#230#7'P$'#29#129';'#156'-'#205'N'#235 + +'_'#191'z'#19#190#249#231'_%'#249#162#6#11's'#193'88'#230#250#193#141#147#254 + +#247#131#23'@k'#141#180#141'1s'#1'TA8m'#193#239'a'#206#1#167'g'#181'G_Z'#209 + +#131#134'L+<'#133#255#200#254#15#160#253'/'#16'@{'#221'Z'#8#186'[S'#8#160#208 + +#224#221'R'#160#247'Q'#185'g;'#17'@'#127#235#0#196#167#239#14';d'#3#226'V' + +#185#197#158#255#167'PL1#'#249'$'#20'rK'#241'N`-'#174#0#147'U'#143#4'`'#0#173 + +'A'#13'*%'#154#1#138#204#205#10#236#138'Wn;'#10'|'#206#214#236#156','#13#152 + +'0go'#216#231#140#255#27#212'k'#159'_~'#0'D'#130#185'U'#211'/%'#168#15'C'#233 + +#164']'#160'z'#151'}'#161'j'#230#226'a'#31'2dFz'#156'S'#255'#A'#222#254#167 + +#30#0#184'o'#222#252#5#196'#'#225#20#2#24'o'#181#175#210#169#162'-x'#179#29#6 + +#144#5#200'>'#187#222'>W'#241't d'#146'B4'#5'*'#154#188#182#179#221'!'#237 + +#209#201'''Q'#131'PK)'#228'W'#206'dQ'#0#163#197#0':'#147#150#21#6#201#149#217 + +#233#15'@h'#217#250#19#252#251#129#225#227'%^t'#194'r'#152#186#231#224'R'#130 + +#159#185'b'#201#176')'#132#146#2#148';'#160'3'#231#225#162'4'#30'J'#170'g' + +#195#196'y'#251#131#9'5'#174'a'#131#4'7'#9#184#211#254#199#213#159'e'#0#182 + +#131#189#230#7'6"L'#144'c'#133'<'#30#153#146#223#246'5'#10#186#7'e'#141'V@' + +#178#251#5#2'h'#196#197#219#217'S'#18#16#161'W'#2#16'&'#4#163#253'o'#212#233 + +'t'#249#241'x'#188#188'#'#168']'#220#232#177#220#156'|'#18#10#184'R'#163#131 + +#226#137#11#153#31#192'h3'#128#158#18#130#180#252#184#176#12'N'#12#238#138 + +#183#239#251#3#180'n'#27#218'l'#192'l'#225#212'?'#127#0#154'A6'#191'x'#242 + +#210#133#144'v;j'#132#131'HAo)'#128#252#242')P>mw'#152#186#224#240#156'4'#27 + +#216#234#159#224#212#255'('#170#255'd'#255#147#240'3'#251#191'y+'#218#255#155 + +'Xn'#128#0#163':'#212'^aq'#145'='#216#129#178#216#140#143#17#1#176#8#0'.'#220 + +#212';'#189#199#193#160#132'>'#9'@'#28#10#196#251#202#240#160#213#155#28'%' + +#143#196#19'2'#29'{'#18'k'#5'.'#135#194#9'{'#128#201'f'#227#205#0#174'.@AZ'#0 + +#171#14#236'>)'#168#219#147#14#225#195#11#184#29#240#210#141#135#231'|^@~' + +#197'T8r'#217#179#131'z-E'#0#158#191'f_'#169#223#194#176#135'J'#171#135#165 + +#167#222#2'U'#179#150'd'#252'\'#253#253#221#211#243'h'#177#140#199'x'#245'?' + +#20#129#128'7'#136#194#239#227#226#255#219#127#132#128#167'-%'#2'Pd'#240'l' + +#201#211#249#182#163#28#186#144'8'#154#132'$ '#218#227#202#223'b0'#24'X'#8'p' + +#221#186'u'#20'7'#140'ww'#222#30#175#137'"'#1#223'}'#247#157'*'#16#8#232#208 + +#20#176#161#9'P'#138'D0~'#155'3'#255#250'`T9C8'#4#249#1#172#165#211'Q'#229 + +#170#2#163'@'#0'z'#13#168#132'h@'#182'T'#0#196#202#127'='#12'k?z1k'#231#27'(' + +#232#179'8'#254#246'7'#192#152'W:'#168#215#7#189'Nx'#241#218#209#25#2#204#4 + +#138#170'g'#194#129#23#220';hm,'#221'`'#222#127'Z'#253#163'Q'#8#163#250'O' + +#246#191#151'%'#0#249#161#5#237#255'h'#23#251#191#218#214#190'J'#173#136'R' + +#248#207#129#127'6R'#8#144#239#7'H'#154'@k$'#18'q{<'#158'Pw!@B'#175#4'@'#155 + +#16#9#160#230#160#212#23#0#239#171'j'#246'ZNv'#5'uG'#8'O$'#2#208'['#202' ' + +#175'b&'#18#0#154#1'f'#3'W'#23'@'#141'B'#217#200'0'#25'd'#205#14'@'#188#255 + +#224'%'#208#176'ae'#214#206'7'#16'L'#156#191'?'#236'}'#214#29'C:'#198#147#23 + +#238'.'#245#219#24'Q '#243'`'#223's'#239#204#138'6'#208#27'HB'#168#244'7'#30 + +'E'#2#8#161#250#31#8#129#223#205#169#255'n{+'#180'o_'#197'Z'#131'u'#14#2#137 + +#133'&'#229#181'}'#143#194#239#195'?'#237'|'#8#144#217#255#168#181#215#247 + +#214#12'T|'#206'^?'#27#161'3'#144'^'#175'7'#1#31#9#240#132#212'{'#214'uX'#151 + +''''#15'"''?'#128#22#138'''.b'#171'?e'#4#234'L|8'#144#175#13'`'#166'B'#22'?' + ,#204'Wo>'#10#220'm'#245'Y<c'#223#160#216#255#25#247'}'#142#164'84'#219#243 + +#169#139#23#12#203'v_'#185#12#234#251#127#250#189#159#14#249#187#25','#18#252 + +'?d'#190#10#222#127#10#255#249'X'#7'`?8'#154'6'#131#167'u+'#155#15'('#20#1 + +#153'5'#193#214'2'#147'k'#3#202#150#151'/'#3#174#23'"'#0#168#177'7'#4#131#193 + +'^#'#0#132#190'd2%'#18#160'T*'#11'('#18#128''''#154#176#177#189#232#238'xBf`' + +'OB'#225'&!'#167'&'#161#198#252'<F'#0'z'#150#22#140'f'#128#150#239#22#204'r' + +#2#178'G'#1#209#144#31'V,?'#20#213'(o'#214#206#217#23#22#157#180#28#166'/9z' + +#200#199'y'#238#138#189's'#234'}'#141#20#140#159#179#20#246'?'#255'niN'#158 + +#224#230#255#177#226#159'p'#20'B'#168#254#7#188#1#240#241#249#255#237#181#171 + +#248#177'l'#157'2\bto'#182'j'#253#212#253#199'ME@'#192'G'#0'('#17'H'#165'R5' + +#225#177'z'#141#0#16#250'$'#0'!'#18#160#209'h'#12#168'N'#144'#p'#28#158'`|' + +#141'3'#239#202'@T'#181'3'#247','#25'('#228'r0'#21'V'#131#173'l2'#232'id'#184 + +#5#9#192#160'eZ'#128#156'z'#4'p'#163#131#179'i'#9#160#6#208#0#175#221'|tN' + +#172#150#187#31's'#25#204': ='#13'L'#158#191'b_'#8#249'r'#183'-'#250'p'#198 + +#239#151'?'#195#252#2'Y'#5#231#250#231#212#127'J'#254#9'E '#228''''#245'?'#0 + +'~'#150#0#228#134#214'-_A'#12#127#199'b'#7#224#196#188#182#31'T'#242#152#155 + +'w'#0#178'" >'#3'p;'#202#27#253#221#209'S'#17#144#128'~'#17#0#213#4'x<'#30 + +#180#2#244'Vr'#4'"'#17'T5{'#244'G8'#2#198'dA;'#9#184'Zg'#132#162#137'{2'#2' ' + +#13'@'#199#178#2'5'#172'6@'#208#2#178#146#27',B'#243#230'5'#240#254'}'#23'B4' + +#18#202#234'y'#197#216#237#168'K`'#246'Ag'#164#237'x/\'#181#31#174#6'C'#155 + +'~3'#134#238'A'#157#154'N'#185#247#163#172#159#151#171#252#227#212#255'p0'#12 + +'Ao'#144#9'?'#173#254'T'#244#229'j'#222#200#156#131#130#253#175'VD'#253#19 + +#243#236'?'#226#223#148#17#230'@'#18'`'#14'@'#222#254#167#134' }:'#0#9#253 + +#145'F9'#146#128#18'I'#128#210#127#205'h'#10#20'#'#9'T'#198#19#138')'#155#157 + +#133#183''''#18'2V'#149'A'#194'M'#13'B'#10'*'#231#161#25'P'#8#6#19#18#0#211#2 + +#136#0'T'#160#16'*'#4'3<B'#188';'#132#253'^x'#235#174'3'#192#217#152#253#230 + +'!'#187#29'y1'#204'9$'#189'C%_'#188#250#0#252'q'#180'g'#253#189#140#22#28'}' + +#211'K'#144'_'#153#165#161'.'#178#4'_'#247#207#173#254#156#250#31#130#128'''' + +#192#28#128#20#5'h'#223#246'='#254#237'J'#177#255#11#244#190#218#2#189#135'B' + +'~^'#20#254'v'#222#254#23'j'#0#26#250'J'#1'N'#158#190#31#151#200#28#129#249 + +#249#249'j'#161'='#24'%'#4#145#31#160#182'#'#239'|'#127'D'#205#244'%'#230#228 + +#195'U'#222#148'W'#9'y'#21#211'Q'#11#224#252#0',+PK%'#194#157#206'@.'#190#144 + +']'#18' |'#243#242#221#240#203#199'/C6'#146'h'#200#169#180#224#164'e0u'#241 + +#145'i?'#246'KW'#31#4'>gK'#198#223#195'h'#197#180'%G'#193#226#211'o'#202#206 + +#201#184#170#31#142#0#248#216#127#208#23'd'#130#207#212#127#167#19#9#224';' + +#212#12'"b'#251'?1)'#191'}'#21#170#255#228#8'"'#251#159#26#129#214'R'#248#15 + +#23'h'#234#1#208#136#194#239#232#203#254''''#244'G'#10#153'#'#16#15#166'"?'#0 + +#10'p>'#158#168#140#252#0#206#128'vi'#179#215#194#21'h'#147'#PFf'#128#14#205 + +#128#5#140#0'H'#3#224#162#1#252#244'`j'#24'*'#151'u'#27#17#200#240'P'#225'$' + +#26#127']'#9#31'>|%D'#130#190'L|'#157'L'#203#153#186#232#8'Xr'#234#13'd'#23 + +'e'#228#28'O'#253'a7'#246#131#24'Cf`*('#131#19#239'zw'#200#199#233#235'7-<' + +#206#21#254#196#208'LE'#2' '#231#31#18'@'#160#131'['#253#157'M'#155#192'M' + +#222#255'h4'#169#254#235'U'#225#142'J'#139'c'#29#202'Q'#0#239's'#1#215#4#164 + +'V'#176#255'qk'#17#154#128#160#240'G'#249'S'#13#158#0#186#250#1#144'eJ'#240 + +'~'#234#215'\'#189#201'Q'#180'<'#22#151'S'#136#144#17#0'e'#255#217#202'g'#130 + +#185#176#140'#'#1'3o'#6'h'#133#204#192#206'nA;'#148'Bw'#185#154'L'#182#186 + +#219#248#191'7'#224#199'w'#159#2'O['#250'Zj'#149'M'#155#15#251'^xOF'#139'Q' + +#234#214'~'#9#31#220'?z:'#1'I'#1'J_?'#231#137#31#134'D'#224#221')'#184']'#127 + +#207','#251'/'#193'y'#254#185#213'?'#138#230'j'#136'y'#255'I'#253#15'P'#243 + +#143'-'#223'@'#200#239'I'#137#255#151#24#221'[l'#186#0#165#249#250#241'>'#150 + +#0'$'#148#0#227#177#234'PKo'#235#143#253'/\C'#127#192#252#0#168#5'h'#220'n' + +#183#5#217#165#8'OXIf@'#131#219'r'#130';'#164#221#141#29#140#198#131'+'#20 + +#172'8('#175'j&o'#6#232#144#0't'#160#210#169#147'Z'#128#16#17#200#5'8'#27#182 + +#194#183'/'#255#5#26'~]'#201#134'F'#14#4'T'#133'f-'#29#15#19#230#239#15';' + +#239#127'2h'#12#153#207'&{'#239#238'?@'#195#250'o'#165#250#184'F'#13#246#189 + +#240'n'#168#222#245#128#140#158'#!'#168#255#148#249#23#137'B4'#200#169#255'd' + +#255#7#220'T'#252#211#10#142#237#171'!'#134#143#197#249#231#202'e'#137#216 + +#228#252#182#213'2'#136#7#248#248'?9'#131'X'#252#31#229#170#6'o7'#160#156#182 + +'['#173'V__'#246'?'#161#223#4#128'f'#128'\'#156#15#128#251'rd'#155#9#193#152 + +'v'#238'v'#151#237'\v02'#3'P'#184#149#26'5'#20#146#25'`6'#161#9#192#145#128 + +'Z'#199#229#4#144'/@&'#242#5#236#176#234#15#225'"'#135#2'R'#177#234'~'#254#10 + +#26#214'}'#11'm'#219#214'1'#205#128'&'#203#138#175#130'VvKq'#5's'#16#149'M' + +#159#15'e;e?#'#239#233'sw'#131'hX'#186#136#198'hA'#213'.K'#225#192#203#31#24 + +#212'k'#251'j'#132#155'L'#250#137'sC?c'#164#254#211#234#31#8'A'#136#188#255 + ,'l'#245'G'#245#191'a=x'#237#245')'#225'?'#179'&'#216'^fr'#209#196'W'#26#11 + +#228#22'*'#0#137#0#132#30#128#129'@'#192#137#230'z'#159#246#127'w'#215#214 + +#227#243#132'|'#0#178#1#168'0('#26#141#150'Q8'#16#31#155#176#197#145#127'a8' + +#166','#226#252#0'\4'#192'R6'#13#204'EU,$H~'#0#202#9' -@'#201#198#135')'#144 + +#4#184#196#160#28'Q'#4#134#5'>z'#248'*'#216#246'}'#246'CT'#163#17#182#242'Ip' + +#236#31#223#200#216#241')'#233''''#17#3'V'#214'M+<e'#254#133'|!'#8'2'#245#31 + +'5'#0#175#31#218#182'|'#9#225'`0%'#252'Wnv'#254'j'#210#132#169#243#15'i'#0#20 + +#11'n'#166#30#128#148#2#204#183#3'o'#161#30#128'F'#163'1'#216#151#253'O'#232 + +'7'#1#8#133'Ah[h'#145'e'#168'.'#160'D0'#3'Z}'#166'C'#28#1#195'^'#236#137#188 + +#25'@'#241#212#252#170#249','#10'@Z'#0#17#128#218#160'a'#218#1#27#30'"'#20#9 + +#245#196#0#217#152'0:'#140#176#253#199#207#225'?'#247']"'#245'e'#140#26#232 + +','#5'p'#202'C'#3#236#217#216#31#245'5'#1#201#142'?$'#216#204#249#199#135#254 + +'h'#245''''#2#8#184#131#224'io@'#13#224#231#20#245'_)'#143#135'Q'#253#167#216 + +'?M'#195'a'#249#255#184#177#22'`'#212#2#156#230#0#226#194#220'F-'#192#236'v{' + +#184'/'#251#191#187#203#235#13')'#29#130'h\'#24'2M9^'#204#248'h\9m'#139#163 + +#224#194#4#249#1'y3@'#161'V1'#2'0'#216#242'QuF'#13#128'i'#1'd'#6#16#9'(QK'#16 + +#21#9#141#169#1#189'"'#26#244#195#11#23'-'#193#31'Jp'#232#7#27'C'#191'@'#181 + +'-g>'#249'C'#250#15#156#224#226#254'@'#158#255'8'#231#249#143#6#195','#243 + +#143#169#255#168#250#19#9#216'kV'#163#25'`gY'#172#130#250'o'#211#249#27'K' + +#140#30'R'#247#131'|'#250'/'#27#3'F'#241#127'R'#255#169#1#8#154#19#142#190 + +#242#255#197#24#136#228'%'#195#129'V'#171#213#24#12#6#169'Sp'#25#17#0#238#171 + +'j'#156'yg'#4#162#170'*'#193#12#160#162#10#163#173#4'l'#21#179#144#0#180'<'#9 + +'hy_'#128#154'9'#3#169'T'#24'dBX'#176#135#14#194#144'$'#205'~^e'#250#191'3)A' + +'~'#136#215#151#31#1#174#198#209#212#2'\zP'#133#224'9'#207#241'c'#214#135#26 + +#141#226#139#253#19#252#129#216#234#207'l'#127#170#250#139#176#208#31'9'#255 + +'H'#240#131'H'#0'>G'#27'8jWC$'#28'I'#241#254'O'#176#182#175#213#170'b'#30'R' + +#255#241'O'#23'5'#0#1#222#254''''#239'?'#223#16#164#163#183#6' '#221']Z'#191 + +#223#134#16#14#164#254#0#248#183#21'U'#13#150#21'H='#2':'#130#186#5#141#30'3' + +'+'#17'f'#177'~'#185#2'Tj5'#20'T'#239#10'z'#139#141'E'#2#136#0'4d'#10#176'f!' + +'*'#166#5'0_'#128#140#159'(<'#194#132'w'#168#160#130#159#215#151#253#14#127 + +#16'cI?'#217#134'B'#165#129#179#158']'#157#222#131#242#131'>'#133#142'?'#204 + +#246'G'#2#8'3'#225#231#9#0#247#142#186#159#192#239'la'#142'iA'#253#215#169'"' + +#238#241'V'#199#175#188#250'O'#9'@'#164#254#179#240#31'%'#255#144#250'O'#225 + +'?\'#160'='#253#9#255#9#24#16#1#208'&'#152#1#8#19#153#1#148#21'H'#4#128#143 + +'Umu'#22#156#25#142')'#11#133'.A'#20#247'7'#228#149#129'm'#220#206'I-@C$@CDY' + +#179#16'!/'#128'F'#137'e?E8'#151'AQ'#136'7'#174';r'#172#234'O"'#168'tF8'#227 + +#201#244#246#148#16#135#253'('#238'O'#158#255'H'#16'U'#127'"'#0#15'n>'#170 + +#254#179#163#250#191#10#205#189'0'#243#15#8#234#127#185#217#185#193#168#14 + +#145#211#143#169#255#192#13#1#173#23#17'@'#147#160#254#163'lF'#250#10#255#9 + +#24#168#196'13'#160#176#176'PE#'#195#168':'#144#6#134#224#133'T'#145')'#224 + +#10#234#23'4{'#205#7#2#175#210'S'#21' '#211#2#198#239#14':'#139#5'4F'#29's' + +#10#170#13'|'#207'@'#181#138'=G!'#231'g'#9#202#248'K'#234'O'#154#224'`'#223 + +#193'0@'#235#166#159#224#223#183#159'6,'''#31#143#20'h'#205'yp'#234'c_u'#255 + +'`_b'#213#205#239#151#21#251#240#163#190'H'#176#227#201#213#191#211#249'G' + +#171#191#179#254'g\'#253#155'8'#231#31#175#254'k'#149#17#239'x'#171'}='#10'{' + +#132#138#127#200#251'O'#237#191#240#200#181'|'#2#16#169#255#164'&v'#168'T' + +#170'`w3'#0#251'{'#169'}>_0'#3'('#26#128#127'['#168'K'#16#158#188#130#8#0#168 + +'m'#184#179#240#244'HLa'#21'j'#3#148#168#234#27#243#202#193':n:'#168'Q'#11 + +#160#193'!D'#4'j'#22#18'$'#18'P'#240'aA9?V|'#16'W5'#130#176#229#235#247#224 + +#243'G'#174'a'#182#223#24#164#3#133#1#143#190#251#157#244#28#140#15#252'S.' + +#127'"'#202#175#254'h'#223'G'#130'a^'#253#15#176#172#191'@'#135#19'W'#255#239 + +#185#213'?'#130'$'#193'1'#7#140'3w'#252'f'#214#4')'#244#23'F'#185#242#240#201 + +'?'#228#253#167#240'_'#13#202'"'#205#4'l'#31#136#247'_'#192'`D-'#165'8'#8#184 + +#193#161#204#25'H'#154#128'#`X'#208#234'3-'#21'F'#131#145'3P'#169#209'@'#225 + +#132#221'@k'#178'0'#19#128#242#2'Th'#6#8'Z'#0#171#20'Lv'#16#150'%'#157'&'#253 + +'m$:R'#176#254'?+'#224#235'g'#239#200'l'#14#244#24#250#133#233#251#159#8#11 + +#207#186'eP'#175'M'#249#221#242'!?'#230#253#143'q'#5'?'#156#237#31#134#8#31 + +#250#163#212'_'#218';'#27#214#129#223#209#8#209'H$'#25#251#215'('#162#254#9 + +#182'v'#234#250'K1}'#10#3'Q'#247#223#22'~'#213#175#193#191'k)'#249#167#175 + +#246#223#189']'#235#128#223#159#208'-'#24'm'#13'='#178#143#141#204#0#188#191 + +#146'i'#1'2Y'#229#22'{'#193'I'#145#184#194#196'r'#2#228#10'P'#170#149'`'#200 + +#175#2'k'#233'T\'#253#181'H'#2#168#5#232#185#196' V)H'#179#4'),'#168#232#140 + +#10#176#19#245#148'" zk'#178#228'?'#195#27#171'^{'#8'V'#191#254#176#212#151 + +'1'#6#30#135#223#186#2'J'#166#207#239#246#177#148#223'_/'#191#189#4#223#232 + ,'#E'#245#167#213'?'#24'a5'#255#17'?'#231#252#11#177#216#127#7#180'o['#9'Q$'#6 + +'z'#14#181#6#163#215#149#153':'#182'X'#180'A'#154#248#19#225'{'#255#145'&@+>' + +#9'>'#133#255#234'q'#223#170#211#233#220'='#13#0#237#13#131'"'#0'J'#10'B'#150 + +'a'#205'B'#3#129#128#153'J'#132'c'#177'X'#5'e'#6'rZ'#128#17#181#0#227#158#130 + +'3'#144'T|'#138#255#231'O'#216#3'W'#127#19'G'#2#212'4T'#207#151#10#147'CP' + +#221#233#16#148#241#166#128'l'#7#233#30#204#202#152#251#236#240#213#147#183 + +#192#175#31#189','#245'e'#140#129#7#253#6#207'~'#249#215#129#190'Jt;'#145#12 + +']'''#189#254'd'#207'Gx'#199#31#173#254#254'P'#210#251'O{W'#227#175#224'u' + +#212#177'~'#0#148#31'@i'#194'jE4Pmk'#251#5#229'!'#138#199#160#252'o'#15'nT' + +#250'['#207''''#255'lG'#217'#2p'#244#167#246#191#175#171#30#208#187'%g'#160 + +#201'dR'#163#218'a'#196#191'Yj0'#229#3#224#237'*|'#175#228#11'8>'#154'P'#232 + +#153'3'#16'Ww'#188'P0'#20#146#22'0'#133'9'#1'Y8'#144'6=_)H)'#194'h'#6'P'#18 + +#145'L('#22#202#206'lQIa'#175#217#0'o.'#251#157#212#151'1'#6#17'J'#166#205 + +#135#195'n'#127'iH'#199#232'n'#245#143#161#240#179#184#127'0'#196'9'#255'|A' + +#206#1#232'qC{'#205'w'#168#25#132'x'#207'?'#183#250#151#24#221#219#172'Z'#127 + +#155#200#249#151','#253'%'#225'GY'#169'C'#185'k'#182'Z'#173'.'#148#195#192'@' + +#156#127#2#6'M'#0#130'3'#16#153'G'#231'r'#185#200#233'W'#140#23'T'#1'\'#153 + +'pe'#155#207#184#208#30'0'#206'Kj'#1'H'#2'*'#141#22#242'(='#216'bE'#2#208'$' + +#137#128#180#3#133'P($T'#11#138#251#6#140'`'#22'x'#251#250'c'#161'u'#211#26 + +#169'/c'#12'"'#28'q'#215#155'PP'#189#243#160'_'#207#249#252'D'#141'>H'#168'#' + +#188#227'/'#192#173#254'L'#248'}AF'#4#174'z'#180#253#157'h'#251'S'#211#15'z.' + +#190'T%'#139#134'&'#230#183#255','#227'l'#255#16#18#0#139#253#163'l4'#144#240 + +#227'mr'#0#178#206'?]b'#255#253'V'#255#9#131'&'#0#232#146#19#128#23'H'#163 + +#195'h'#0'[%nU1'#210#2#28#133#199#198'P'#180#217#160'p'#210#2'P'#192'u'#150 + +'"'#176'U'#204'fu'#1'I'#2'`'#14'A$'#1'V.'#204#153#2#192'L'#7#254#242'Fh'#170 + +#176#223#217#10'/'#159#183'p'#204#233#151'C0'#20#148#194#9#127#255'b'#208#175 + +#151#241#169#190#204#8#136'w'#198#252#185#130#31'A'#245#199#205#31'`'#197'?' + +#1#23'e'#253#173#225'<'#255#209#206#213#191#216#232#169#177'i}'#173#252#234 + +'O'#153#127#212#5#150'B}'#245'T'#246'KN@Z'#253#145#0#156'~D'#127'S'#127'w' + +#184#222'!|V'#201#10'A'#179#217#172'#g '#222#199'B'#130#184#175#162'=j'#1#11 + +#218#253#134#185#204#169'Ge'#194'D'#2'j'#13'X'#199#205#0'}~)S'#255#213#6#29 + +#211#6'Tz'#13#31#22#228'{'#6'$'#253#1#248#142'd'#217'm)'#158'-|'#244#231's' + +#161#246#135'O'#165#190#140'1'#136'p'#240#205#207'C'#217#172#133#131'|5'#159 + +#236#203#219#253'B'#177'O'#156#217#254#188#234'O'#4#224#193#149'?'#192#217 + +#254#142#237'?@'#200#211#193'&'#1'1'#2#192#255'T'#242'hp'#162#205#142#182#127 + +'"'#202#135#254#216#234'/'#196#254#129#235#250'['#143'2'#215'N'#206'?'#170 + +#252#235#173#243'oo'#24#18#1#144'3p'#221#186'u'#172'QH '#16'0'#161#6'P'#128 + +#23'Im'#195#153#22#128'W2n'#155#179#224#247#225#184#202'"h'#1#148#2#172#209 + +#27#208#20#216#13#212#148#19' '#242#5'(u'#184'Qr'#16#159#27' h'#2'2'#161#157 + +'xOq'#193#158#222'E'#142'/'#172#207#158#176#19#174#12'c'#181#253#185#130#202 + +#249#251#192#254#215'='#193#253'1'#136#223#148'X'#248'i'#229#135'8'#151#238 + +'K'#142'='#177#227'/B'#234'?'#222#246#180#214#128#167'e'#243#14#171#127#185 + +#197#181#209#168#10'R'#184#143#250#190#177#208#31'n'#173'(_'#245'|'#209#15'%' + +#0'5S'#230#31'j'#224#254#193'8'#255#4#12'uYMf'#6':'#28#14#189'R'#169#180#225 + +'E'#22#227'F'#137'AL'#11#240#133'5'#211#235#220#182'}'#4'-@'#193#180#0'5'#24 + +#11''''#128#185'x"'#175#5'p$'#192#180#0#161'u'#24#223'>'#172#147#4#248#203#29 + +'A'#138#192'sD'#0'c'#21'~9'#1#26#22'z'#242#243#171'Q'#251'T'#15#238#0#188#25 + +#215#185#242#243#170#127#152's'#252#145#131#143#179#253#3#16#246'"'#17'x=,' + +#233''''#18#12'B'#140#250#253'E'#185#196#31#20'|G'#133#197#181#5#15#21#19'V' + +#127#161#237#23#169#253#192#245#252'k'#224#203'~'#221'}'#245#253#239#11'C&'#0 + +'A'#11#160#182#225#168#9#144'/'#160#0#137#128#249#2#144#8'H'#19'(k'#240#216 + +#246#246#132#181#149'r'#150#29#168'`5'#0#10#10#11'V'#206#3#141#201#10#26'#g' + +#10#168#146#17#1'5'#243#7#176'b!'#218#152'#'#145'+'#27#30'I'#166#192#138#211 + +'v'#129#144#215'%'#245'e'#140'zP'#225#218#161'w'#188#10'E'#211#230#13#234#245 + +#9#174#212#143#247#250#199#217'l'#191#4#223#230'+'#30#140'$W'#127#138#251'3' + +#199#31#222'v5'#252#2'AWK'#202#234'/C'#218#168'F'#213'_)'#143#134'zZ'#253#5 + +#207'?n'#142#254#182#253#234#245#189#167#227#243#19#215#7'h4'#26#214'4'#148 + +'O'#15#166#188#128#242'h\^'#177#213'Yxp'#2#215'uA'#11'P'#168#212#160#181#20 + +#176'ra'#181#174'S'#3'P'#11'Z'#0#229#6#8'Q'#1#190#155'0'#136#202#134'G'#130 + +'_'#240#213's'#22#130#175#189'Q'#234#203#24#213#160#197'e'#191#27#158#132#10 + +'T'#255#7#140#132'x'#166#31#231#244'#Afv?'#173#252#225#8'K'#250#137#6'B'#172 + +#221'W'#132#247#250'S'#165#159#139#154'}'#160#240#211' '#16'a'#245'/'#212'{' + +#234#10#244'>'#10#243'u]'#253'i'#236'7'#181#253#222#142#130#223'@U'#127'H'#8 + +#238#129#230#253'w'#251#254#211#241#25'v'#213#2#240#194#10#132#136#128#160#5 + ,'8'#2#198'9'#173'~'#211'l'#210#2'@'#161'`'#14'A'#5#154#2#150#178#157'@'#159 + +'W'#202#146#130#152#240#147#22#160#227'H'#128#181#15'S'#241#237#196'EY'#130 + +'2y'#186'.]Z'#252#235#210#3#193'Y'#187'Q'#234#203#24#189#192#223#210#146#203 + +#255#10#19#247#26#194#236#6#22#231#7#214#224#143#229#250#243'N'#191'X'#132#19 + +#254#8#175#250'G|'#156#6#16#246#243#142'?'#159#155#21#4#9'q'#127#149'<'#26 + +#168#206'k_'#143#199#139#241#171'?y'#254'Y'#213#31#173#254#184#175'U('#20#181 + +#180#250'k'#181'Z'#7#146#192#144'W'#127#246#17#164#235#163#236'N'#11' _'#0'p' + +#17#1#26'$R'#180#213#153#191#127'8'#166#178#10#217#129'$'#220'j'#189#145#229 + +#6#168#13'z.)'#136'O'#17'V'#178#220#0#222#20'`'#141'D'#249#14'Bra'#196#24'$' + +#213#128#225'J'#5#31#222'r24'#174#249'R'#234#203#24#149' '#13't'#191#27#159 + +#134#178'9'#139#7#252'Za'#213#231#179'}x'#187#159#19'~Z'#209'i'#245#143#133 + +'"'#201#176#31#229#252'GI'#248'q'#239'i'#217#10#222#214'm'#140' '#152#237'O9' + +#255#248'_'#165#217#177#193#160#14'S'#166#31#9'4y'#134#133#145#223'Md'#251 + +#147#240#163'L'#213#167's'#245''''#164#141#0#186#243#5#0'7H'#180#146#15#13 + +#150#249'#'#234#9#181#238#252'%l'#29'Wt'#154#2#134#252'r0'#151'N'#229'j'#3 + +#152#6' r'#8'R'#247' '#149#146'+'#24#18#154#137#178','#193#225#239#24'l\'#243 + +#5#252#231#230#147#165#190#140'Q'#7'CA'#25#28'~'#223#187'h'#130#230#15#252 + +#197#157#195'y:'#139'|'#226#156#205'O'#182'?'#173#234'L'#245#167#132#31'a' + +#245#199'-'#26#8#254#127'{_'#22'kYv'#158#181#246'x'#230's'#238'XsWwW'#187#219 + +'v'#187#227')'#241#0'v'#136#193#145#8#194'F'#8#5#148#4')'#145#176'P'#132#132 + +#20#241#18'!9'#188#0'/H'#188'!'#224#1'x'#2#9#17#144#128'XHH$`x'#128#7#144#172 + +'$'#216#198#221#158#186'k'#174'[w:'#243#176#7#254#239'_'#255'Z{'#237'}'#207 + +#173#186#213']w'#170#190'K'#218'w'#15#247#12#251#236#189#191#239#159#255#165 + +#166#253'='#181#243#222'wT2'#155#209'k'#23'\'#25#8#159'A;'#158'n'#223#232#238 + +#161#229#19#192#159#152#184'?:'#254#162#230'_'#233'Y'#127'n/'#145#254#0#255#7 + +'*'#27'}'#158#208')E'#4#136#173'V'#137#165'.'#139#22#128#174'A'#215'Q:|o'#208 + +#251'b'#127#214'x'#153'+'#255'B"'#129' d'#144#247#174#146')'#176'zUH@'#8#160 + +#225#248#3#184'V@'#155#2'l'#14#248#158'T'#15#150#127'I'#158#23'?'#201#243#206 + +'x'#28#144#198#191#254#181'O'#169#217#197'D'#159'''3'#232'ay'#245#203'_S'#191 + +#240#219#255#248'H/_'#250','#229#198#225'/'#137'>'#22#252#186#208''''#227'2_' + +'m'#247'c'#129#218#191#24'C'#19#152'p'#155#175#249#184#207#182#191'Q'#253'=z' + +#247'k'#171'['#127#28'x)'#138'}JY'#127#180#127'_<'#255'h'#251'u'#239'yK'#127 + +#254']'#207#243#242'.'#203#11#160#31'q'#21'~'#0#163#5'dyp'#229'G{'#27#191#152 + +#229'~'#13#0#246'E'#11#136#234#13#181#242#210'gT'#173#211#213'&'#128#144#0 + +#182#131'Z'#173'0'#5#196#31'P'#174#28'<'#191'Z'#192'w'#254#229'?P'#127#244 + +#187#23'U'#128#199'=z/}D'#253#153'o'#254#11#213#189'~'#235#253#127#8'W'#248 + +#228',ssW'#242'['#187#159'l'#250#217'\K'#127'V'#253#167'"'#253#231'j'#255#222 + +#247#213'd'#239'>{'#253'a&(N'#249'e'#199#223'{'#235#205#17'z'#251'C'#250#163 + +#3#12#247#251#163#5'Y'#128','#253#197#7#240'p>'#159#239':'#158#255#15','#253 + +'1'#158'7ll'#227'Pd'#7#146#22#128'9'#178'.!'#18' Q'#1#172'/'#239'Oko'#220#31 + +#174'~'#206#19#135#160'1'#5#226#246#138'Z}'#233#211'l'#2'@'#250'G-q'#8'J'#243 + +#16'?'#150'Ta3'#211#176';'#229#184#167'='#186#207#214'A'#244#244'G'#150#204 + +#213#191#250'K'#175'?'#243#172'D'#23#227'h'#163#181'y]'#253#220'_'#251#166'z' + +#229#231#223'g'#193#149#17#252'z'#30#175#178#211#15#246#187#145#252'H'#248 + +#129#228'g'#2#152#217#176#31'r'#255'G'#219'w'#200#246#127#135'$'#255#140'I"O' + +'u'#185'o=\'#244'_'#233'm'#191#157#231#252#137'\'#239'o'#26'~@'#250#211#254 + +'m4'#251#132#244#199#12#192#181'Z'#13'>'#130#217'Q'#27'~'#30'e<w'#2'0'#165 + +#194'd'#10'`'#18#145'6i'#2'0'#180#174#144#9'pC'#180#0'D'#7'6'#239#15#186#159 + +#221#159'7_e5'#222#15'X'#186'C'#213'o'#174#222'P'#157'+o'#20'Z@C'#155#2'Q'#3 + +#25#130#226#15'0'#165#195#156'#P'#20#14#217'_t'#206'b'#132#255#229'w~U'#221 + +#255#206#255'8'#237#211'xq'#6#221#255#205#143'~V}'#254'7'#255#158'Z'#127#227 + +'S'#31#236#179'rG'#245'W'#134#0#164#179'O'#166#139'|'#24#252#28#242'+'#164'?' + +'l~'#238#246#219#223'U'#251'w'#255#144#247'a'#247's'#216#143#136#195#247#211 + +#197#173#149#199#223#13#253#12#30#255#212#244#250#151'v_'#8#5'b'#210'J'#164 + +#253#222#165'}h'#3'{'#200#249#127#150'~'#127'G'#186'T'#199'q'#249'M'#195#144 + +'$I'#26'q'#28'w'#137#197'6'#209'5'#8#254#0'D'#4#232#7']'#165#179'_'#127'w' + +#127#227#203#179'$^'#209'*'#189'N'#19'F'#135#160#238#213#143#171#230#218#21 + +#142#4#128#4#160#1#128#8'8*'#0#240#219'.B'#1#147#7#28#131'6G'#192'w'#136' ' + +#247#158#173#155#0#212#187#252#228#201'c'#255#246#15#213#239#253#141'_'#184 + +'('#10#250#128#195'''-'#242#229'/}M}'#238'7'#255#174#170'u'#215#138#127#28 + +#225#190'.}N<'#29#232#231#2#31'%'#157'}8'#214#159#234'L?'#168#252#0#255'L' + +#171#254#139#169#145#254#180#158#234#148#223#221#219#223#161#253'>'#251#6'x' + +#138'/'#237#248#203'otw'#223'i'#199'3'#132#249#172#227#143#176#129#164#159'-' + +'H|'#241#252#179#227#143'0'#180'3'#164#177#183#183'7{'#214#134#31'O'#27#199 + ,'B'#0'J*'#5#209'6'#140#206#187#213'h4`'#10'\VZ'#250#223#148#245#165'E'#26'\!' + +#18#248'R'#166#194#136'I'#128#147'~"'#235#15#136#219#29#173#1#136'C'#16#25 + +#130'a='#226#181'o'#138#134'l'#142#128#152#3'b'#18#148#148#128'e'#191#242#164 + +#177#246#148'+'#253'?'#255#225'o'#169#31#253#193#191'='#225#147'z1'#6#188#249 + +#31#251#139#127']'#253#204'_'#254#155#207'>'#163#239#147#158#13#145#250#182 + +#194#207#218#252#162#250'/t'#184#143#19'z&s'#209#0'D'#253#167#237'>'#236#254 + +#253#251#252#154'<Ix'#14'@'#152#14'k'#141#209#189'K'#205#193'=Q'#253'M'#216 + +#15#234#253#142'8'#254'P'#241#7#231#31'&'#250#216'B'#193#207'h4'#154'<k'#187 + +#175#247#251#243#159#203#231#154'~'#1#180']CX'#144'~'#216':'#28#130#240#3#208 + +#177#155#178#189'1X4_'#185'7'#232'}'#6#0'F'#251'0'#246#7#144#132#143#218#171 + +'j'#229#198#167'8"'#192#154#0#231#6#196#188#246'k'#210'@'#132'5'#6#9#15'J~' + +#128#206#24#244#139'l'#193'\'#251#7'Nk'#210#209#163#14'<\'#191#251'W>'#174 + +#230#163#254'i'#159#202#185#25'+/'#127'T}'#246#27#127'G]'#255#220'W'#223#215 + +#251#151#206'>g5'#254#188'P'#251#179'\l~'#29#235#207#165#188'W'#199#251#181 + +#218#159#10#248#19'&'#130#153#26'o'#223'S'#253#135'?`'#211' [,'#172#215#191 + +#17#206#251'/'#147#221'/'#223#4#213#31'&'#192#152#22#132#130#224#12#180#170 + +'?-'#152#231#15#14#193#145#211#236#243#185'I'#127#251#155#143'iX'#135' &'#20 + +'%'#192'cZ'#241'Mt'#14#130'/'#0#166#0#189#230#10'-k'#15'G'#189#183'v'''#205 + +#151#141'w_;'#250'b'#213'\'#135'?'#224'u'#21#213'$1'#168#17'["'#240'M[q'#19 + +#30#180'='#5'i'#9#138#217#134'r'#201#21'8'#15'n'#129'{'#255#231#191#169#255 + +#250';'#191'z'#218#167'q'#166'Gs'#253#138'z'#233#203'_S?'#243'+'#191#165#234 + +#171#155#207#245#179'M#'#15'//'#8#0#21'}'#153#16#0#219#253#146#230#11#149#30 + +'E> '#0#150#254#0#255'Tk'#1#179#193#158#218#187#253#135#244#191#194#238'W' + +#176#251#189'd'#241#234#202#246#247'B'#178#255#149#168#254#180'L'#137#4'0' + +#203'/:'#253#222#147'f'#159'w$'#1'h'#219'8'#254#158'W'#216#175':'#142#149#0 + +#224#16#252#214#183#190#197'MC'#136#201'Z'#244#195'`'#152']'#22'-'#0'$pM!J' + +#160#188#149'w'#247#214#190'0Kk=eH'#0#210#157'H'#160's'#249'5'#186#233'/IRP' + +#205'j'#1#8#13#194#28#240'b'#157'#'#160#195#131#18'"4'#25#131#158''''#10#192 + +#249#9#19#254#254#223#254'e'#245#240'";'#176'4'#26'kW'#212#205#159#255#154'z' + +#235#24'@_'#26#206#196#157'6'#209'G&'#241#204#165#161'g.'#177'~V'#253#167#218 + +#238'O'#5#252')'#183#249#30#178#211'o1'#30'j'#233#159'&'#186'4'#152#237#254 + +#189'w'#218#209#180'oT'#127'z>9'#230'Ok4'#250#228'f'#31' '#0#244#249#203#178 + +#12#190#128#253#227'p'#252#185#227#184'aa'#29#130#244#163'j'#164#1'tMn'#0'H@' + +#136#0#29#133#215#147'<'#218#248#233#222#250#23'3'#130#189'q'#10#194#31#0'{' + +#191's'#245#227#170#209#187','#192#143#181'?'#192'5'#7'b]>\'#20#14'A'#11#208 + +'D'#144#151#10#136#156#159#251#164'_~'#18#254#129'C'#190#31's'#1#254#222#175 + +#127'A'#141#30#221'9'#129#147'8'#187#163#177'vYK'#250'_'#251'['#31#12#244'O{' + +#194#141#202#159#231#142#237'o'#192#159#217#226#158'\'#178#252'8'#140'7[X' + +#192'C'#242#167'Sc'#255#143#9#252#127#164'f'#163'}Q'#253#19#235'7Xo'#142#238 + +'m6'#251#144#240#244'Hz'#166#216'g'#12#144'#'#227'O'#21#210#255'.'#225#4#181 + +#254#187#180' '#230'?'#251#250#215#191#158'>O'#199#223#179'\'#158#231#241#249 + +#236#16#188'v'#237'ZD?'#166'I?'#142'M'#1':~]'#242#2#224#16#132'V'#176#218#159 + +'7n'#222#31#174'|'#138#253#1#220#16'$'#212#243#6#196#177#234'^{K'#213'z'#235 + +'L'#0'69'#168')'#249#1'5m'#10#232'D'#161'P'#207'1`'#252#2#158'8'#6#13#1'x:' + +#195#235','#155#4#217'|'#170#254#227'o|^M'#182#31#156#246#169#156#232#208#160 + +#255#243#234#19#4'zl'#31#247'0A'#23#207#216#251#210#196#147#255'!'#192'5Y~' + +#185#128#31#146'?'#19#181#127'!$'#144'Ng'#236#245#239#223#253#174#154#13'w4' + +#248#209#223#15#170#127#134'x?'#236#254#157#183#229#27'!'#253#145#245'7'#161 + +#239#178'1'#127'I'#246'A'#143'?T'#254'm#'#227#143#204#229#217'q8'#254#220'q' + +#18'0`-'#128#214#193#189'{'#247'0'#181'x'#11#141'C'#148#6#189'!'#1#248#5'6i{' + +'e{'#210'}'#227#241#164#253#154'.'#24#242#25#208' '#129#176#214'P'#221#171'o' + +'q'#255#128'@'#204#129#192#248#3#140'S'#208'!'#1#27#29'p'#27#140'B#p'#253#1 + +'v6'#226#167'\'#134#147'L)'#150's'#193#148#224#223#250#245#159'S'#211#189#173 + +#147#251#238#19#30'A\S'#221#151'^W'#215#190#240#139#234#245#191#240#13#213'X' + +#127'N'#160'?'#202#253't<'#253'&'#191'7wm'#254#212'H'#254#2#252#25#131'_''' + +#251'X'#181#31#14#192#217'L'#245#31'|_M'#247#183#216'<p'#237#254'0XL'#9#252 + +'?'#8#189'tQI'#248#225'R_'#153#225#23#141'>'#239#186#170#127#179#217#156#16 + +'^'#22#199#225#248'+]'#138#227#248#208'e'#223'cL'#1#218#174#199'q'#220'Y,'#22 + +'k'#196'vp'#2#26#18#192#246#6#189#180#247'`'#216'{s'#127#214#188'a'#253#1'a' + +#164'g'#24#170#183'T'#239#198'[*nuu'#211#16'h'#2#13#153'h'#148#246#217#31'P3' + +#230'@A'#2'z'#242'Q_'#151#17'{^'#209'r</'#251#6#242#202#229#240'N'#185#167'X' + +'Bv'#228#127#250#198#159'T'#227#199#247'O'#245'<'#158#215#128'F'#215#190#246 + +#138#186#242#179#127'Z}'#228'k'#191#161'z/'#127#244#216#190#235'i'#247#210 + +#230#243#155'F'#30#166#176'G'#156'}'#214#219#15#135'_R'#128#159#157'~'#211'"' + ,#236#135#253#193#131#183#9#252#247#11#143'?'#252#4'Y'#170'B/'#153#223'$'#240 + +#199'~2sC~2'#193#7#167#251'*'#173#250#223#145'\'#255'GF'#245''''#201#143#196 + +#160#244'8'#165#191#190'.''3'#216#20#248#202'W'#190#226#147#25#16#175#172#172 + +'4'#8#252']'#250#161#27'2'#185'('#204#0#16#1'G'#5#8#176#157#187#131#149'O'#14 + +#231#141'K'#202')'#29#230#28#129'f['#245#174#127#146#236#255#150#245#9'0'#17 + +#196#146#31' '#154#128'I'#27'6'#181#3#158#211'_'#176#152's@'#251#8#220'^'#131 + +'O'#157#233#229#20#198'w'#254#233'7'#213';'#255#254#159')'#253#12#157#159#1 + +#226'mn^W'#151'>'#253'e'#245#234'/'#253'U'#181#249#214#23#143#241#203#158#208 + +#198'/'#175#188#206'H{'''#179'O'#247#242'3'#224#207'X'#234'g'#21#201#207#241 + +'~'#2'}'#6'{_'#136#0#165#189#147#157#247#24#252#186#181#151#158#212#211#207 + +#210#228#229#149#237#31#212#130#197#196#181#251#149#14#249#193#238#223#18#213 + +#31's'#252'q'#200#143#182'w'#8#15#195#231'Y'#236's'#132#203'vb'#195#166#9'_' + +#191'~'#29#154'@'#11#181#2#240#7#208#15#191'*aA'#204'1'#8'=p5'#247#252#206 + +#157#254#234#167#198'I}'#213#23#167#160#23#232','#192#184#217'c'#18#8#26'uM' + +#0'l'#18'D'#146')'#136#16#161'4'#18'A'#152#208#180#21#243#29#18'0'#221#133'<' + +'!'#0#229#2#255'9D'#12#142'a6'#227#225#253#159#168#255#254#219#191#172#134 + +#247'~z'#130#183#236#217#6#8#186#190#178#169#214'>'#254#179#234#213'?'#251'+' + +#234#218#159#248#165#163#191#249#176'k'#246'<'#158'PG'#218'kG'#191#201#231 + +#207'm#'#143#194#230'/'#210'{y'#153#27#169#191#208#192#135#148#135#250'O'#132 + +'0'#217#190#163'F[?"'#146#152'Ks'#15']'#223#143'?7'#187'{o7'#194#217#208#177 + +#251#231#244'l'#163#197#23#18'='#182'%'#215#159#193'O8'#128#25#176#141#132 + +#159#157#157#157#169'x'#253#13#248'_'#24#2#224#239's'#19#132#8#248#173'$I' + +#216#31'@'#11'B'#130#208#4#216#31'@'#235#149'\'#249#157'w'#247#214'?='#205 + +#162#14#146#132#152#4#184'7'#0#145'@gMu'#174#189'%'#229#194#162#1#152#252#0 + +'h'#1#146'-X8'#6#203#154'@a'#18#248#197#228'#N1'#209'Y'#237'='#248#255#254 + +#205'?R?'#248'w'#255'DMw'#30#158#234'y'#4#245#166'jn\S+'#175'}'#130'$'#252 + +#159'R7'#190#244#231'T}'#253#202'i_'#158#202#200#203#210'_Rz='#227#236#147'r' + +'^'#6#191#163#246'['#240#139#202#15#224#179'z'#207'*'#191#246#1#204'v'#31#168 + +#193#195#183#233'usn'#238#193#239'Cyo'#154#229'W'#187'{?'#236#196#147#190#168 + +'l'#214#238#23#167#223'.'#236'~ZX'#245#135#211#143'0'#240#152#222#187'O'#166 + +#241#4#9'?'#199#233#245#175#142#211'x'#202'}'#152#2#180#6#9'X'#127#0#217'?' + +#151#29'S'#0#26#1#252#1#221'$'#243#187#239#246#215'?'#179#200#163#134'o'#204 + +#1#216#247'$'#233#153#4#174'|'#156'H'#160'nA'#207'f'#128'h'#4'L'#2#145'&'#1 + +#21#233#168#2#147'@h'#8'@r'#5'|'#129';'#214'2)'#225'Y'#159#166'|'#240#222#219 + +#234#143#255#249#223'W'#15#254#247#31#208'C99'#190'/'#162'k'#17#183'{'#170'u' + +#245'e'#181#250#209#207#168'+'#159#251#170#186#250#249#175#210#245#175#159 + +#246'%x'#250'03L'#219#130#30'c'#231#23#253#251#140#167#223'H~V'#225#231'I'#1 + +'x'#6#255#156#155'{'#178'&@'#255#155#238#222'U'#163'G'#210#206'{Q'#168#253' ' + +#146#203#173'}L'#231#181#131'/q'#156'~H'#245'E'#188#127#15#133'='#180#141'F' + +#144'P'#251#225#244'{D'#207#245#222'I'#218#253#238'8'#141'G|'#169'?@f'#22'b' + +#167#160#210'Z'#0#182#215#233#1#236#204#147'`'#229#189#254#250#167#19#21#198 + +'<w`'#16'J'#235#240'HE'#173#158#234'^}'#147#204#129#166#206#12't4'#128#192 + +#201#22#132#230#224#217#254#130'E'#132#128#9'AL'#129'R'#171'1[S'#228'-'#255#5 + +#238'8'#229#26#158'{'#255#235'?'#171';'#223#254#15'j'#239'G'#255'W'#141#31 + +#222'V'#139#241#224#169#14#11#238#197#16#197','#201#163'v'#151'C'#172#245#181 + +#203#170'y'#233#6#131#189's'#253'#'#170#251#202'Gy'#251#204#141#167'\'#255 + +#220#252#205#197#225'o[w)V'#249'mr'#15'@+'#9'>'#28#234'#p'#231'R'#217#151'I' + +#184#15#142'>'#14#251#137#31'`'#188#253#30'-'#239'jR'#224'i'#188'S'#142#22#0 + +#252#27#205#193#237#245#198#240#145#11'~z'#182#140#221#15#240'o'#153'J?z'#230 + +#239#201'4'#223#232#240#131#6' '#199#150#237#247','#151#242#196#190#215#245#7 + +#208#197'h'#18#248'{'#164#10'm'#18#192#175'Hx'#144#179#4'iY'#3#9#204#210'x' + +#237#246#254#250'''3'#207#15'Yr#<'#24'j'#18#8#27'm'#213'!'#18#136#154#29#2'~' + +'h'#181#0#228#8'x'#236#20',H'#128#181#129'J'#152#208#212#17#24#18'`'#231' t' + +#148#220#153#144#164'`'#132#234#147#246#244'+y'#10#4'1'#219'{'#172#230#253#29 + +'5'#31#236#210'zO-'#134#251'\9'#217'}'#249#13#213#185#249#250#217#149#224'G' + +#189#142'K'#239'C'#17#222's[u'#219#16#159#11#254#170#212#151#220#254'L'#154 + +'z'#148#9'@K'#255#209#214#143#213'd'#239#30#189'n'#206#145#1'~'#159#228#248 + +#175#214'F'#15#174#180#251'w'#243#2#252#200#244#131#221#15#240#195#238#127',' + +'!'#191'{R'#223#15#27'n{:'#157#14#136#0#160#194'%''e'#247#31#245'r'#31#251'w' + +'W'#243#3#200#28'@3'#209'Md'#10'*'#237#16#196#26'$'#176'J m'#141#23#181#205 + +#187#253#213#183#136#4#2'm'#207#11#9'p'#4#160#201#230'@D'#234#170#213#4#156 + +#181#23#11#17#24'M'#128'L'#2#21'j'#191#130'2s'#17#26's'#192'M'#30'2UEn'#163 + +#145'3l'#26'|'#232'F^'#10#226#8#224'M'#21#159#210#158'}'#137#239#187'i'#189 + +#218#230#215#128#207#13#248#173#228'_0'#200#217#241'7'#211#161#190#225#163 + ,#183#213#172#255'H'#146'|'#140#218#175'k'#251#187#209'd'#235'zw'#239'=m]d' + +#153'x'#252#145#236#3#240'#'#151#127'['#233'y'#253#24#252#216'F'#178#207'I' + +#198#251#15#27#167#253'('#151'R'#133'I'#11'h#'#25#136#180#128'K'#208#4'h'#31 + +'Z'#0'H'#0#164#176'B@lM'#147'x'#237'N'#127#245#19#169#23#198#218#179'/>'#1 + +#174#12#172#17#9'|L'#197#157'uM'#10#198#15'`'#192'/m'#198'=!'#2'_z'#10'('#19 + +'%'#16#231#160'2'#230#128#239#21#4'`'#174#214#139'>]'#241'y'#25'.'#234']sGl|' + +'O'#202'wm'#3#143#170#179#207'8'#250#0'f'#212#243'/'#28#240#27#231#31#175#167 + +'j'#240#240#7#164'ImK'#140'?'#209#196#145'j'#240#175#213'F'#247'/'#183#145 + +#226'k'#193#159'I'#154'/g'#250')]'#226#251'H'#230#245#131#228#199#164#30#143 + +'1'#171#207'|>'#31#31'w'#170#239'Q.'#227'i'#223'F'#207'8'#5#209'@'#4']'#132 + +#208'P'#212#9#15'"O'#224#138#201#20#4#9'$y'#220#189#189#191#250#214'BE'#245 + +#18#9#136's'#176's'#249#13#21'w/'#177'/'#192'3'#181#2#177#244#16#176'&A'#164 + +#253#2'b'#14#168#208'/'#146#134#140'i '#13'F'#172'F`'#175#152#163#10#156#159 + +':'#163#23'f'#148#146'xl'#171'.}'#140#193#159'i'#201'oc'#251#169'n'#226#1#240 + +'+'''#204#151'K'#190'>'#171#244'3'#241#250#211#177'\B'#127#201't'#162#6#247 + +#191#175#18#228#246'''s'#157#21#232#128#127#163'1'#184#189#217#28'>'#210#138 + +'F'#150';'#146#31'*={'#252#149#238#237#7#240#223#151'p'#223'cH'#254#197'b1' + +#186'v'#237#26#156#131''''#234#244#171#142#179#240#236'Z'#18#232't:1'#177'b' + +#157'.T'#27#149#131#232'$'#4#2'0$ '#173#198'A'#2#205'L'#133#237#219#253#181 + +'7gY'#220#214'}'#0#196#174#143't)qk'#243#150'j'#172'^'#215#146#222#1#189#217 + +'f-'#160#166#147#139'8Dh'#219#142#7#133's0'#240#10#141#192'I rs'#137#205'f~' + +#224'''='#225#10'?'#211#173'>'#175']'#130#142#248'h='#245#250','#191#178#185 + +#211#151#223#5#191#246#238#235#248#190'J'#181#202#175#4#176#156#155#159':' + +#246#254'\'#131'?'#183'j'#191'd'#242#17#25'$'#147#161#234#223#255#158'Ji]H~' + +#157#225#167#210','#191#220#217#255#201'j<'#217#21#193'o'#193#175#138#190'~' + +#166#190#255#1#164#191#132#254#30#163#190#159#198#168#209'h'#204#143';'#207 + +#255'9'#222#165#227'?'#15'S:'#140#162#161#241'x'#140#134#162#29#169#25#184'd' + +'4'#1#165#251#7#160#177'H'#143#174'X'#147#16#218#188#211'_'#251#216'8'#173 + +#173'x2'#239#160#206#254#211#18#191#190'rU'#181#214'oiM'#192#250#1'B'#157',$' + +'d'#224'I%'#161#138#138#190#2#166#152'Hq'#132#192#244#23#240#203#145#2#167 + +#243'P.'#161#195#234#21#245#202#127#158'q'#228'O'#220'='#179#195'{'#234#129 + +#167#255#238'|'#201#207#21#144#27#129#175#14#11#237'9'#133'<*-b'#251#197#162 + +#129#207#210#127#190#144'p'#223'B'#180#129#5#255'o>'#216'a'#155'?'#157#142'u' + +''''#31'Z'#148#128#223'#'#241#127#181#187#247#163'n8'#27','#3#191#210#225'>' + +#128#31'-'#188#31#144'&'#203#14'?'#228#248'#'#220'G'#175#27#161#200'G'#157 + +#146#211#239#131#222#157'c='#23#248#3'~'#252#227#31#251'h%F'#154'@'#195#228#8 + +'`V!'#164#12#131#8'h'#141#164'!4'#26#237#210'Uk'#17#240#234#247#6'k'#175#15 + +#23#245#13'c'#14'0'#17'DP'#241#145':'#220'Sm2'#9'PG'#224'K?'#193#2#252#142'6' + +#192#254#0'c'#14#232'm'#155'8Ti9f'#195#134#158#201'(tr'#207#171#253#7#204#173 + +'=KW'#250','#143#202#245#202#157#166#156'%'#208#27#162#200#164'eW'#150#29'H' + +#231'Ui'#1'z'#227#237'O%'#212#151#207#231#142#195'O|'#0'D'#2#147#221#219'j' + +#178#253#158#222'w$?>'#223#167#15#184#222#219'{'#167#21#204#199'K'#192'ob' + +#253'h'#234#137'4_+'#249#233#153'}L'#160#223#165#231#23'5'#0' '#137'3'#1'~' + +#231'2'#159#153#193'$'#240#189#239'}/@x'#16'$@Z@W'#26#137#184#154#0'"'#3#235 + +'('#28#162#27#129#18#227#248#254#160'wko'#222#188#234'['#245']k'#2#200#26#244 + +#227#26#153#4#31'Q'#181#206#166#150#248#174#244#23#223#128#206#17'0'#249#2 + +#129#205#30'TN'#6#161#237'@'#236#251#5#1'8m'#201#221#26#3#235#164#170#22#27 + +#157#181'+~F'#134'Wr'#228#185#155#249#1#240'k'''#159'H'#251#180#144#250#165 + +'t^'#168#251#137#238#215#175#9'@<'#254#226#237'7'#26#0#19#0#166#233#154'N' + +#213#136#164#254'|'#180#171#227#251'IR'#2#127#160#146#217'K'#221#221#31#214 + +#131#197'T'#192'o'#28'~F'#242's'#129#15'r'#252#209#220#3#146#31#26#0#212#254 + +'('#138'v'#7#131#193#136#180#218#19'M'#243'='#210'u?'#237#19'XvN&<'#184#181 + +#181#21#211'Ek'#208#5'4$'#128'lA'#180#24#135')'#192'$@'#251']'#248#4#232'X' + +#237#209#168#243#210#246#180'}SO8bH@2'#0#137#8#234#189#171#170#185#241'*'#131 + +#222's'#181#129'H'#147#129'''-'#199#149'q'#14'F'#21'm'#192'u'#16#154'z'#2'&' + +#3'eg)'#202#29'2p'#181#255#220'!'#133#15'f'#26#188'(C'#210'u\'#137#159#23#181 + +#249#202'sT}'#199#201'W'#168#249'"'#245#197#214#231'2'#222#180'p'#242'1'#232 + +#165#148#215'z'#252#141#234'/'#170'>'#219#254#201'B-'#250#187'j'#184#245#14 + +#29#27#219#200#128#174#229#151#137';'#189#249#228#165#238#222#15#185#170#143 + +#235#8'l'#168#143'S|'#149'd'#249')'#237#224'C'#184#15'R'#255#1#212'~'#178#249 + +'w'#233#249#29'6'#155#205')i'#183#201'iz'#252#151#141#179#250#4#150'H'#160'A' + +'c2'#153#160#145#8#155#3'B'#2' '#3#209#4'T'#151#128#136#190#131#181#253'Yc' + +#243#225#168#251'Z'#166#194'PKn'#169'!'#8'C1'#9#186#164#13#188#193#213#132#0 + +'>'#28#129#158'D'#4#220#16#161#155'9'#168#156'Z'#2#229#18#129#231#23#179#22 + ,#251#198'I'#232'j'#3'E'#30'a'#238#148#25'z'#213#146#195#3#153'mg'#245#182#188 + +#223#187#249#4#127#134#233#191#167#156#198#28'|'#188#2'zP'#168#3'~'#211#173 + +#135'U}'#9#239')'#167'O?'#188#245#249#28#251#11'+'#249's)'#238#201'%'#207'?' + +''''#240#143'wn'#171')-'#153'y]*R_f'#238'iG'#147#237#171#173#253#219#129#151 + +'&:'#151'(3e'#189#240#246'3'#248#149#206#242'CO?'#246#248#195#230'G'#168#15 + +#224#167'eH'#166#236#20#177#254#179#6'~}'#205#207#238#176#133'C'#4#254#136'.' + +'b'#147'L'#130'.H@:'#10']6'#225'A%$'#128#16'!H`'#158#133#237#187#131#222#235 + +#179#172#214#230'y'#3#140'o'#192#132#10#163#186'j_zM'#197#221#205#2#248'f1'#4 + +#16'W'#142#7#186#211#144#178#243#19#6'em@'#26#143#148'#'#6#158#149#244#172#29 + +','#137#30#152#249#11#142'zG'#206#204#147#227#222#168#167#189' ?'#252#128'i' + +#197#229'y'#14#248'3'''#150#175#28#27#223'Q'#247'y'#31#182#190#27#222'K'#11 + +#137#159#27#208''':'#181'7/'#145'@'#194#245#19'#'#146#250#243#225#142'h'#11 + +':'#188#167#138#30'~'#217#165'F'#255#246'Zc'#244#152'S{%'#212#167'tz/O'#223 + +'-s'#248'A'#237'7'#137'>'#15#207#19#248#143't'#239'N'#251#252#12#9#244#251 + +#253#184#213'j5'#232#226#162#197#248#154#132#4#225#16#188#12#173'@i'#18#232 + +'1'#9'('#175#158#7'~'#252'p'#208#189#185'?o]-'#146'|t'#184#15'&'#129'oL'#130 + +#245'W'#8#236#177#205#9#240'L'#5'a'#172'5'#6#171#9'p'#10'qPT'#21#210':'#15 + +#220')'#202#140'V'#224#21'D'#160#138#237'"JP'#172'K%'#200#206'f^9'#236'='#235 + +#173'z'#158'w'#245#153#31#215#188#152'>'#219'='#149#188#188#145';/'#178#245 + +#249'n'#18#143#177#243'MG^'#145#250'*u$'#191'c'#235#27'/?'#219#237#12#244'E' + +#161#254#207#11'R'#192#255#23#240#242'?'#254'!i'#1#19#177#247'u|'#223'|n'#228 + +'/&'#215#218'{?i'#132's'#174#229#23'G'#4#236'}'#147#222';'#145'P'#31#171#253 + +'J'#194'}'#178'F'#169#239#222'y'#0#127#233#254#156#209#193#231'W%'#1'd'#12'"' + +'Y'#136'.'#178'!'#1#152#5#151'0'#247#128#210'y'#2'm'#186#212'u'#146#184#241 + +'p'#222'X{0^'#185#149#145#236#215'@-'#155#4'H!'#6#9#196#157#13#201#7#144#136 + +#128#1#191')$'#10'+$ '#11#147#138'h'#6#156'N,'#145#130'\'#162#6'V'#27'x'#26 + +#17'8'#221#137'rG;'#240#202'^'#196''''#220#177#147#184#149#249#225#135'+'#167 + +'i'#140'{'#175#244'6'#167'<'#23#0'WO'#0'~^'#150#248#202#22#239'8N>c'#239#187 + +'v'#191#149#252#139#18#240'Y'#19#152'N'#213'd'#251#167'j6'#220'b'#130'@'#179 + +#15'+'#241'3=__'''#154'<'#190#210#234#223'!'#149'?'#205'm'#147'@]'#210#235'd' + +#248#245#165#178#15#222#254'G'#146#215#255'H4'#129'}8'#252'666'#206'<'#248 + +#237#253'9'#227#195#146#128#18#159#128#146'2b"'#130#21'h'#2#146'%h'#178#5'9Y' + +#136'$r'#155#192#211#160';'#23'''Y'#212#184';'#236#189'6Kk'#29'S'#0'd'#27#140 + +#8#184#163#214#26#19'APo'#21#17#1#167#138#208's'#251#10'<'#137#8#220#148'b' + +#153#194#220#134#14#205#196'%'#165')'#204#202'k7'#132'h'#230'4'#176#135#14 + +#132#20#143'n:<'#151'q'#152'*o'#156'v'#246#144#145#236#230#127#249#146#216 + +#189'~'#157#14#227'I'#230#158'!'#2'k'#227'/Q'#247'S'#145#248#2'|'#181#208#149 + +'|J'#236'w'#215#222'7'#206'?E'#251#147#254'=5'#221#189#173#19#127#210'%*?}' + +#209#229#198#224#189#149#198'h'#199#203'MI'#143#14#243')'#1'?'#173#199#180 + +#223#151#154'~4k'#132#196'GE'#31#182#183'I('#161#145'''{'#251#201'\=s'#14#191 + +'e'#227'<'#16#128'=OC'#2#251#251#251#17']'#228':]x'#174#29#136#162'h'#157#246 + +'a'#6'\'#18''''#225#134#212#14'th'#27'}'#4'b'#210#0#162'G'#195#206'K{U'#147 + +' '#212#201'C'#138#171#11'#U'#235']S'#245#181#27#156'M'#200#14'@'#199#4#0#1 + +'(''Dh'#136#192#148#24'+'#153#181'X'#249#229#198'#'#182#21'Y%'#179'P'#231#15 + +'-'''#3#207#209#255#139#222#4#166#151#161'{UN'#136#4#170#143#176#19#182'+m' + +#229#5'Y'#149'CxN'#165#158#27#198'3N='''#150'oA'#159#154'm'#0'>#b'#0#160'u' + +#17#143'Z'#20#13';'#173#199'?IJ>'#0#132#0#147#209#158#154#236#252'D-&'#131'B' + +#213#135#169#128#207'pU'#254#238#238'O'#234'^2'#245't'#229'@'#213#211'?'#147 + +#22#222#168#234#219'q'#193#15'O'#127#24#134#232#235#223'_,'#22#227#25#141#243 + +#2'~'#140#243'B'#0#246'\'#221'<'#1'8'#252#232#194#183#232'p'#143'.'#254#186 + +'8'#7'A'#4#156','#132'V'#227'$'#129';$u'#27#180'_#'#240'E'#131'i}'#237#193 + +#164#247'j'#150#235#249#7#180#147'0`'#21#222#244#16#132'Y'#208'X{'#133#139 + +#138#188#208#137#6#200#220#3#134#8'4q'#4#162#29#136'&`{'#13'8]'#137#131#138 + +#163'P'#8#161'hF"'#19#152#28'H76'#161#195#162','#185#240#15'T='#3'G'#200'1' + +#248#160'%'#203'y^yi'#25#240'z'#229'4'#218'TE|'#159'%'#189#153'l'#195#190#230 + +#160#154#207#246'~'#154#149#218'r+'#150#250#153#6#173#0'_'#137'='#175#164#131 + +#143'2'#4#144'h'#239#127':''u'#127#231']5'#239'?'#210#173#186'L'#26'p'#146#10 + +#209'h'#149#31#149'|'#151'['#253#187'P'#249'9'#188#143#254'}'#160'!m'#239#219 + +#24#191#1#191#210'e'#189#15'e'#198#222#199'R'#207'? '#1'4>K'#25'~G'#29#231 + +#137#0#236'9'#155#180'a'#218#142#26#141'F'#13#17#2#164#7#27#231#160'8'#5'/' + +#217#218#1#29'&'#132's'#176#6#147' Sa'#252'h'#220'~'#169'?onz@'#166#137#20 + +#216'f!Z'#226#195',h'#192', B'#176'R'#223#1#188'Bd '#22'B'#16'M@9'#25#132#214 + +'I'#24'>A+8'#204'GP'#154#242#188#186'v:'#26'['#13#193#161#130#165#190#130'CB' + +#143'O'#200#187#183#160'.%'#224#23#26'H.'#234'})Q'#199'%'#0#215#147'/'#158'}' + ,#163#226#219'p'#158'q'#240'Y'#208#167'b'#231';'#158'}l'#11#192#181#202#175 + +#215':'#175#223'8'#2'%vO'#235#217#222'}5'#222#131#186'?'#211#199#229'3y'#157 + +#167'"'#245#147#201#149#230#254#237'f<'#27'z'#26#247'8'#15#146#250'%{'#223'&' + +#248#208#178'C'#210#254'1'#9#153'G'#210#213'g'#155#128#191'K'#160#31#160#149 + +#23#13#152#8#231#10#252'K'#158#138's3,'#9#208#197#15'k4'#200#12'h"B'#16#4#193 + +#170#227#23#128'F'#0#18'X'#5'A B &A'#148#19#196''''#139#176#253'p'#178#242 + +#202','#141'ZE'#235#240#162'('#200#147'9'#10'k'#221'+'#170#182'rM'#5'h'#162 + +#17#154'y'#8#3#199#28'pM'#3#9#17#134'RK`'#10#140'l'#14'A Z'#129#201'$t'#218 + +#146'U'#137#160'j*'#148#202#146'+'#21#137#21'G'#162';'#242''''#146'A'#165#216 + +'f'#217'c'#235'Jw'#222#168#172'e;7'#137'<'#153#27#190'3'#137'<'#142#164'wc' + +#249#2'|'#29#203'/'#192#175#137#192#9#241#217't^'#13'r'#237#3'H'#10''' -'#139 + +#225#14#219#249#9#171#251#186'I'#167#146'L>'#179#246#232#207'j}t'#127#189'1x' + +#228#177#180#207'3'#147#214#171'$'#190'O'#203'\j'#249#135#226#233#135's'#15 + +#210#30#249#252'['#178#191'O'#207#220#160#223#239'O'#187#221#238#156#8' =o' + +#224#175'>'#9#231'm'#148'J'#137'I'#19#136'%u'#152#157#131't'#140#181#1#144#0 + +#250#11#210'z'#141#253#2#202'k#}'#152#182'czDc rw'#218#186#180'=m_'#207'H' + +#164#235#226#31#237'$'#132'fP'#168#249#145#170#181'/'#169#6#17#129#31'7'#180 + +#244'7j'#191'k'#14#24#127'@'#224#164#17#187#166#129#201'!p'#29#133#198'<'#176 + +#4#224'W'#18#139#180'G'#192#246'.'#180'='#11#141'iP'#152#3'n'#194'Q'#217';' + +#239#29'XU"s'#202'Az'#217#181#144#187#161'='#137#215#231'y'#197#214#151'B'#29 + +#163#226'gy'#145#167'oSu'#139')'#183'\'#201'_H'#253#20'M5'#197'VO-'#9#184'a' + +#190#220#170#251#198'!H'#18#127#184#173#166'{wU:'#27#22'f'#129#11'~'#241')' + +#180#162#217'.I'#253';'#152#156#211'C/`}n'#172#242'+'#221#187#207#228#244#143 + +#140#167#159#182#183#197#219#191'Ej'#254'6'#9#24'h'#2'}'#147#215#239#244#241 + +'3'#192'?7'#224'w'#30#135's;,'#9#16#1#4#8#19#18#27#195'9'#216#154#205'f=h'#3 + +#244#127#244#26'D'#171'1h'#2#240#11#160'r'#144#211#135#17'% '#192'D'#244#17 + +'A'#146#249#241#163'I'#247#230'`'#214'X'#247'l'#241'O'#1'^?0 '#142#184#166#0 + +#206'B'#244#211'3'#166#0#167#13'['#208#23#161'A'#27'!'#136#180#244#207#131 + +#224'@wb'#235'#p*'#15#11'"P:'#164'h'#211#139#165']'#153'*L'#4#151#24#150'^"' + +#175'r'#197#170#26#192'!'#14#190#18#15#184#245#246#216#204#242#146#189'o5'#0 + +'7W'#223#128#221'z'#244#141#202'/'#246'~'#166#167#219'V'#226#228#179#128#183 + +#29'{'#202#224#183#197'='#236#253'_'#168#217'`K'#205#246#239#17#240#199#146 + +#16#148'X'#147#1#251'J:'#246'D^2'#187#212#26#220'n'#215#166'}'#248#28'<'#143 + +'U~V'#252#233#146#177#163'Oz'#247'Me'#178'Nk'#239'C'#237#151#153'{9'#190#15 + +#149#159#20#206'1b'#252#245'z'#29#164'a'#234#249#237'U:O'#227#188#19#128#249 + +#13'H'#24#194#154'#'#4'p'#14#18#1'4E'#27'X5'#190#1'!'#1'6'#9'h'#191#7#191#0 + +'m'#195'A'#8'm'#128#222#231#251#163'$'#238'>'#28'uo.'#178#168#233#154#5#202 + +'I+V'#226''''#136#219#27#170#222#187#174#130'F'#235#160#212'7'#170#191'C'#4 + +#134'L'#148'K'#2#2'z'#229'U'#157#133#14')x'#166#10'Q9~'#130'J7cq$'#30#152#241 + +#232#176#154#3'[m'#231#188#196'm'#180'a6'#189'B+'#240#158#2'zW'#213#247'*' + +#222'|'#29#215#207#172'Df'#7'`R'#168#251#158#1'}'#226'H~'#163#13'd'#134#8'2' + +#142#223#207#6#143#24#248#217'bb'#237'~'#227#216#203'\u'#159#132#252'J}'#252 + +'p'#179'9x'#224#209#142#199#165#130#224#29#218'f%'#198':'#250'f'#210#187#207 + +'t'#238#133#167#223#130#31#19'v'#160#137#7#254#143#254'}'#163#209'h^'#241#244 + +'+u'#14#193#127#200#147'q.'#135#141#16#160#156#248#214#173'['#225#214#214'V' + +#141#14#213#137#173#17'*'#236#145#250#134'b'#162'u''u'#24#251#200'#hC'#27#160 + +#237#26#251#6'</'#204'r'#143#204#130#246#229#221'Y'#243'J'#154#135#145'1'#11 + +#236':'#8#172#175#0'N'#191#184#181#166#234'+D'#4#245'N'#17#1'p{'#10#28#0#190 + +#16#131#235#24'tk'#11'l'#152'R'#230'3t'#29#134'Nv!k'#7'jIU'#162'\'#17#175#148 + +'\T'#190#213#182#143'A'#245'B'#26#233'_r'#240')I'#218#145'}3}'#182#19#194#179 + +#224#183#251#6#240'N"O'#213#203'/'#241'}'#227#236'c'#144#27#147'@r'#251#141 + +'6'#144'%s'#246#232'O'#25#248'3'#171#254'g'#198#163#239'F'#17'h'#187'I'#234 + +#254#229'F'#255'^'#28#192'3O'#146#158#5'>'#199#245'3'#201#231#183'R'#159#22 + +#19#226'c'#149#31#160#199#2#149'_'#8#1#29'|'#198#244#182')'#217#253' '#140 + +#132#180#206#236'<'#132#249#142#4#156#23'h'#176's'#240#219#223#254'6'#251#5 + +#232#166'E'#4#234':'#28#132'259'#155#4'XD'#27'0$'#208#165#183#146'>'#175#26#4 + +#167#24'f'#1#129'='#160#199'%'#220#157#183'6'#247'&'#173#203#137#10#226#3'D' + +#224#23#246'>4'#130#176#209'!'#173'`'#147#8'a]'#249'a,m'#198#140#3#240'0'#167 + +#224'!'#5'F'#146'3'#224#149'|'#3#166#23'A1'#169#137'%'#2#153#224#196'LuV'#10 + +#18#10'7'#148#156#132#14#3'xF'#210'Wd'#153#145#246#7#28'{N'#252#222#149#252 + +#182'B'#207#237#200'c'#192'/'#132#160'\'#167#159#149#242#142#211#207#233#224 + +#131#255'-'#166#251'j1'#220#162'e'#155'I w'#205#128','#147#150'_'#236#220#195 + +'~'#222#138'g'#187#27#141#193#131'Z'#184#152#150#212'}'#199#214#151#182']' + +#166'c/l'#249'}i'#226#193#158'~Z?Fl'#159#164#252'>='''#3'2/'#199#244','#205 + ,'{'#189#30#192#127'n'#237#253#165#128'9'#237#19'8'#166#223'T2'#9'h N'#211'di' + +'O'#128#167#155'j'#137'@'#204#3#236#19#9#168#14#1#174'A'#251'u:'#30#25#179 + +#128'@'#21#236#205'Z'#27#187#227#230#229#133#10#235#218'F'#247#203#211#141#17 + +#1'('#223#183'ZA'#173#177#170'""'#131#176#185#162#163#4#230#181#142'3'#208'H' + +'~'#255'0-'#192#152#8'&'#147#208#248#7#248#23'V2'#12#221#28#130#220#137#12#8 + +#27#152#196#220#131#209#130'Jz'#174#167#172'j/'#255'V'#226#245'+Iyc'#227#27 + +'{'#223'4'#227#176'Z'#128#1#186#172#165#192#166't'#220'M'#237'u'#215'('#203 + +#157#13#31'3'#240'S'#132#242'2'']W'#166#220#206'e'#209#192'O'#243'vm'#182#189 + +#217#24'>'#140'|H|'#28#23#191'>'#171#251#220'%'#208#205#232#227#240#30#242 + +#249'i'#189'/'#237#187#182#205'"'#206'?'#28#199'k'#166'F'#229''''#205'2;'#207 + +#246#254'a`y'#17'G'#201'$@'#168#176#213'j'#197#2'lT'#12'v'#197#25#184'J'#140 + +#143#232#0#22#248#5'D'#27'P-!'#2#152#5'a'#206'd'#128#174#225#190#191'7k'#174 + +#237#142'[W'#230'y'#216#176#206':'#3'|'#207'H'#242#162#2#17#154'@'#212#222' ' + +#173'`C'#5#141#142#227#252#11#184#231#160#231'8'#2#139#168'@u'#10'3'#207#2 + +#222'F'#5#2#209#4'\'#237#192#151#144#161#149#252'U'#7'`%'#159#192#12#183#149 + +'6'#239'+'#235#28#176#213'zF'#229'O'#171#234'~&fA'#230'T'#234#21#206'?~'#189 + +#209#0'*a'#191#18#9','#230'j6'#218'f'#208''''#211'A'#161'!'#152'L@'#199'l0}' + +#0#16#210#235#198#147#199#27#4'|x'#246'M'#190#241#19#212'}k'#235#211#210#151 + +#238'='#12'~'#186#207#144#254#216#222#15#130#128#19'{h'#153#145#244'_ '#196 + +#247#162#168#252'K'#129#242#2#15'k'#18' J'#128#178'b'#186#185'54'#25'!R@'#227 + +'Q'#152#5'+ '#1#133'Y'#137'5'#9'@'#27#232#209#210#17#179#160#238'{~Lk'#16'A' + +#8'"'#240#9'}'#251#179#250#234#206#164'ue'#150'!'#135#192#128#177#144#218#5 + +#176#3'K'#10'a'#212'Tq'#7'Z'#193#154#10'j'#141'2'#184#157#210'bo'#9'!'#184#9 + +'C'#133#25#224#21'~'#2'''R`o'#173'u'#11'H'#180#192'M$'#146'W'#185'~'#128#210 + +#172#185#178'*'#194'}'#174#244#207#156#233#180#225#240#203'd'#178#205#138#183 + +#191'*'#245#179#188#18#1'H'#212'b'#178#175#230'P'#241#199#187#156#216#147';6' + +#189#251'~K '#244'}>1B'#183'6f'#224#7#200#15'6'#192#231#138#221'2'#240#149#6 + +'?'#128#143'N'#189'#'#201#229#223#23#240#195#185#135#25'y'#25#248#240#240'+M' + +#14#211'N'#167'3G'#3#143'7'#223'|'#243#133'R'#249#15#0#228#180'O'#224#132'~#' + +#155#4#208#6'h;Z]]'#141#160#13#200#140'D0'#11'z'#162#17#172#233#244'aM'#4#180 + +'&'#18'Pm'#186#235#220'l'#4'&'#129'o'#136' '#131'F'#224'y'#195#164#209#219 + +#153'4/O'#211'Z'#7#200#180#192'tH'#160'4'#231#128#152#0#232'I'#16#212'z*jt' + +#201#168#232#210'~'#173#210'[`I'#231'!G'#213'/'#171#254'x'#173#18#159#128#241 + +#234'{'#182#152#168#8#4'x'#149#181'*7'#222'PE'#218#190#178#13'8'#157#146#221 + +#204#13#241#21#234#190'w'#192#23'P'#201#233'7'#145#0#2'v2'#27#170#20'v'#253 + +#164'O'#219#131'"'#219#207'x'#239#197#137#231#153#254'~v;'#231'p^'#167'6'#217 + +'^'#175#143#182'|'#143'sy'#213'2'#224';'#237#185#173#147'O'#233#9':'#160#214 + +#239#25#240#3#248'$'#12#246#200#222#135#3#16'z'#254#132'l'#253#217#139#230 + +#232'{'#26'8>,'#227#128'6P'#171#213'bz^0G'#22#166'*G'#159#129#30#28#133#240 + +#17#28#212#6'T'#211#152#5#4#180#18#17'(.'#25#11#163#253'yc}0k'#172#205#210 + +#168'Y'#0#180#172#198#27#245'>'#247#202#196#0'B'#8#27'+*'#170'wT'#0'B'#128#19 + +#209'!'#0#27#14#148#162#162'jc'#210#146#9#224'4"'#177'w'#185#218#140'D'#194 + +'~n'#233'n)'#12#232'j'#2#198#9#232#168#251'n'#184'/'#207'+I?yA'#0'H'#206'I' + +#166'}'#150#244#201'tH'#255'J'#10''' '#155#20'i)4'#200'Q'#0'K&'#184#184'Y' + +#138#4#158#149#218'x'#167#25#209#135'i'#204#231#154#160#24#248#0'<'#235#252 + +'b'#231'/*'#234#254'H'#226#250#198#214'G'#136'oW'#188#251'}'#186#215'C'#168 + +#251#176#245'www'#23'd'#231'sl'#255#19#159#248'D'#254#162#131#223'yB>4'#163 + +#164#13#192'7'#176#178#178#18#17#25#208'f'#204'}'#6'h'#1#216#225'(\1'#218#128 + +#210#26#2#250#18'"'#164'h'#136#0'Y'#132'1a.'#160'g=dg!'#20'r'#210#11#166'i' + +#220#216#155'5'#215'G'#179#218'Z'#162#130#200'S'#5#25#20#146#220#169#7#240 + +#141#243#207#28#15#148#31'7Y;'#8#226#22'}B'#131#9#130#29#141#202'5'#3#156#181 + +#141#18#136#170#159#171#194'$'#200#171#209#1'U'#16#130#155#244#227'6'#222'4' + +#7#149#201#4#212'$'#192' u'#18'}'#12#232#177'dp'#188#211#146'/'#198'l'#199'c' + +#201#200'4/'#1#190#186'm'#181#137#204#250#20'`'#195'7'#195'y'#191'S'#159#236 + +'t'#163#233#158#199'I'#5'b'#143#232#188#131'Ll|l'#1#244#236#224's'#128#143 + +#134#29'#'#153#153#135#195'{'#198#222'7'#14'>'#216#249't'#175#199't'#159#167 + +'('#224'[b'#235';W'#224#197#29#31'6'#2#176#191#217'h'#3#155#155#155#254't:' + +#13'1S1'#252#3'0'#11#232#223'-'#178#7#225#12'D6'#225#138'8'#7'W'#196'y'#168 + +#157#132#158#215#164#199#177'A'#159'V;@'#4#30#224#166'Q:'#152#215#187#253'Yc' + +'}'#148#196'+'#185#22#233'V'#133'7)'#191'E'#135#225#162#243#176'K'#8#185#152 + +#0#164'x'#16#25#212#153#28#130#176#206')'#201'>'#214'd>'#148#10#139'J'#191 + +#244'`'#219#242'"G'#160#236#237#247'Jf@^$'#7#25'3'#1#248'K'#209'H'#19'@'#159 + +'p'#197']'#150#152#245#212#206#198#163#242#195#0#15#252'f%'#147#1#239'1'#251 + +#181'`1&'#21#127#167'GK'#232#193'!'#160'L'#237'0'#147'B'#154'iu'#223#177#241 + ,#171#18#223#216#249#3#1'?'#146'w'#0'~^'#144#194'K'#210#30#197';'#172#238'w' + +#187#221#217#214#214'V'#226'x'#248'_X['#255#176#241'a$'#128#210'o_f'#22#208 + +#225#26#217#130#28'6$'#2#128'F'#208's'#23#209#6#208'k'#160'm'#136#128#128#140 + +'(CL'#251#16#211'Rc'#204#157#238'|'#180'*O'#9#206#251#179#198#234'h^'#235'M' + +#211#168#157#230#162#25#24#199#158'r'#10#131'J'#132'`'#156#127#190'>ig'#187 + +#152#199#16']'#144#27'*'#8'"q:'#134'tX"'#17#158#164'"'#243#233#232#181'/Z' + +#134#150#190#137#216#218'R)'#151'9'#139's'#28#146#28#18#158'_'#207#225'7'#7 + +#196#182#196#183#240#1#184#0'W'#165#130' 1#8T'#167#242#154#191#24#213#163#249 + +#176'G*>Zn'#23#17#8#145#246'8'#3#2'>x'#18#206'}''o'#223#134#244#164'K'#207 + +#184#2'|'#187#208'=d'#224'#'#172#135'L>"'#2#246#238'#'#149#151#8' '#251#176 + +'I}w|'#152#9#192#140#3'f'#1'B'#127#244'p'#196#198'QH'#255'o'#9#216#187#244' ' + +#245#184#150#128#136'@4'#2'v'#20'*'#204'T'#164#188':4'#2')4'#10#173'V'#224'#' + +#29'E'#251#10#176#13#208#18#9#212#137#12#186#147'E'#220#157'$q'#139#224#16#26 + +'S'#161#232''''#232';'#205'D+'#246#190#152#2#150','#148#155'*l~'#150#252'@.' + +#30':$$'#232#216#255#182'EW'#169'1'#191#201#250'S'#165'\'#0'['#221#167#138 + +#148'`'#6'u'#166'T'#158'/'#7'<'#214#181' '#25#215#131#249#176#25#207#251#237 + +'h6'#242#149'8'#243'<61'#140'moA'#175't'#202'.'#24#133#213'|Y'#230#198#179'o' + +'T}'#19#211#151#5#158#254'>'#128'OD>'#140#162'h'#12#137'O'#199#167't'#127#23 + +'t<'#249'0'#170#251#203#198#5#1#20#195's'#205#130';w'#238#4#198'?'#128'9'#7 + +#232'!B'#205'@'#203#241#19#244'$'#140#200'k'#248#7#20'"'#6'9W'#26#214#161#209 + +#18#216#17'm@BQ'#24#248#30#200' '#160'c>'#180'^F'#165'/'#229'<'#244'wL$@'#132 + +#208#153'.'#162#206'4'#141#219#153#14#8#138#237'^T'#4#22'e'#194#170#168#10'T' + +#254'R'#240#219#191'U'#207#127#241#207'J'#246'_'#197#7'`Gn'#205#0#3'z'#183 + +#145'g'#225'G(^g'#0#31#251#201#164#22#206#135#173'h>h'#147#164#15#252'4)^c' + +#153#197#128'^Y'#21#255#160#180'/'#169#250#144#248'p'#224')'#1#187#164#242 + +#150#164#189#1'~'#171#213#154#141'F#'#246#236#147#169#151'~X'#213#253'e'#227 + +#130#0#202#227#128#127#192#16#1'=H'#28':'#164#127's2'#17#173'['#244#0#162#216 + +#168'+'#26#129#171#13#176#143#0#175#229#228'#'#223#135'Ya'#200' 8@'#6#128#174 + +#158'`'#132'a'#142'|<"'#132#246'x'#17#183#146'4'#168#207#179#176#190'H'#131 + +'Z'#170#160#219'k'#251#221'8'#245#140'K'#191'T'#13#184'$'#239#223#141#8#228 + +#203'~t5'#20'h'#134'['#251#239#185#210#221#253#191#6'n'#228#167#211#208#207 + +'fQ'#144#204#234#225'bL'#18'~'#16'.'#3#188#233#18'"'#182'C'#174#127#145#168 + +#248'E'#214#30'-'#11'g'#218'-'#171#234'+'#157#190#203#224#167'{'#224#18#192 + +#144'#'#179'I'#194#210#254#2#248'O'#31#23#4#176'|,%'#2'Z'#135#244'@'#177'F'#0 + +'`'#211#186'I*f'#139#236'J'#214#10#132#16#12#9'X"@'#19#18#218#6'y'#212'@'#6 + +' '#2#218#14#133#12'|'#218#151#194#2#206#177#169#16#130#178#128'N'#179' '#154 + +'fQm'#158#16')'#164'!'#19'C'#146#250#181'E'#22#214'r'#195#2'y'#17#247#207#221 + +#219#235#29#248'y2'#242#165#155#252#170'R'#11'0'#253'7'#240#178'E'#236#167 + +#179#200'O'#166'Q'#152#206#226' '#153#214'BZ'#252'd^'#10#31#28#4#188#212#222 + +#235#20']Ro'#178#220#168#19#185'JM'''#30'U'#150#246'('#207#157'J?>'#11'|'#168 + +#251't'#157#135#0#191#0#30'j>&'#221#132'I0E'#6#159#249#172'%'#192'_'#242'K?' + +#188#227#130#0#158'<'#150#18#1'|'#4#237'6'#201#183#217#140';'#20#19#1#160#203 + +#144#169'5h'#201#186'm'#246#141#198#0#243'@i'#13#2#4#2'2`"'#144#133#181#2'!' + +#4#175'B'#8#162#229#235'F'#0'E*'#191#201#243#247#2'"'#129'('#205#252' '#205 + +#149#159#229'~'#0#19'"'#203#184#160')'#160#181#143#207'&'#158#241#233'8'#142 + +#249'x'#15' '#233'{y'#202#139#162'Wy'#10#219#153'g'#142'y'#244#137'~'#158#6#4 + +'N'#218'N#?K0C'#14#127#181#237#249#167#247#204'1}Z'#185#20#11'j'#213#222#145 + +#240#12'B'#237#197#183'q{+'#237'Mi'#174#210#192#159'HW'#158#145'*'#128#15#169 + +#143#184'='#239#147#186#143#10#189'1'#173'!'#241#209#140'snl'#252'G'#143#30 + +'e'#23#192#127#250#184' '#128#163#13'K'#4#223#253#238'w=4%'#5#25#208#161#144 + +#164'N'#212'l6'#1'd'#214#10#232#129'lxz'#174'B'#180'('#3#240#153#4'h'#223#144 + +'C'#211#209#10'jB'#6#136#30'DJG'#16't'#20'A'#19#2#242#10#8#139#220#2'Dr'#130 + +#217'y^'#164#249#225#143#239#219'm'#140#220'sN'#250#224#207#240#14#252'#?' + +#176#225#202#240#138#242' '#249#0'z;/'#210#133'9'#25#152#147'!3'#237'P'#212 + +#21'x'#158#199#217#3'.'#224#233'X"'#221'vy'#150#29#167'@'#7#224#7#152'a'#223 + +#143' '#229#165' '#135#215't|'#4#208'C'#210#3#244#240#230'c!'#2'^'#192#171'O' + +#199#211#11#224'?'#219#184' '#128'g'#27'%"@'#212#224#210#165'K>I'#164#144#30 + +'D&'#3#180''''#4#168#145'a'#8'2'#192#2'2P'#152#202#220'Y'#132#8#140'i'#192 + +#230#1'k'#5#30';'#14']B`2'#160'c'#1'b'#8#162#29'0'#17#152#22' '#24'y'#145#223 + +#167'r'#183#11'`'#165#17#192#129'y'#9#151#254'J'#227#225'We'#253'_)'#227#164 + +#211'h'#215'L$'#130']'#25#231#157#150#242#136#238#231'6Vo='#248#6#240'R'#142 + +'k'#194'x'#0#255'd'#137#212#231'E'#18'vX'#189#23#21#127#14#208'c'#166']'#196 + +#241'WVV2x'#245#137#148#243#11#224'?'#219#184' '#128#247'7l^-'#194#135#244#16 + +'z'#198'<'#160#135#18#128'E'#143'B6'#17#224'/'#160'}'#16'B'#131#164#22#8#129 + ,'5'#0#172'}'#157'Q'#216#144'F'#165'L'#4'R'#177#200#239#177'D'#160#29#136#161 + +#199'A}'#144#129'v '#210#182#246#31'(]'#151' '#219#170#152'}'#132#165's'#209 + +'4'#200#156#244'!, '#160'Vy^v'#3'j'#183#164'W'#184#253#10'U>7'#157't'#217#129 + +''''#222'{'#165#165#188#5#190'S'#127#207'^|'#165#165'=/p'#236#161#209#6#253 + +'~'#168#243#19#172'%'#166'?!'#160'c'#31#196'0C=>'#169#247' '#142#132#142'!y' + +#7#128#207#156'8'#190#156#253#5#232#159'e\'#16#192#7#27#150#8#240#0#186'Z'#1 + +'I'#168'`gg'#7'R;'#132#137#0#243#20'd'#0'p'#139#218'_'#23#240'#'#215#192#128 + +#159'5'#2'G30D`4'#3#215'g`'#9'Ai'#13#1'$'#16'pI?'#231#28's'#242#156'''`'#247 + +#12#17'('#19';8D'#19'p'#192#207#0'/'#8'AK~'#165'{'#230#27#213'>'#173#0#222 + +#196#233#141#138'o'#156'y'#0#191#241#228'O'#5#220'v'#27#199#1'~'#243#127#168 + +#245'x}'#20'Es'#0#31#210#30#234'='#17'jz'#227#198#141#20#160#135#180'w'#242 + +#245#249'|O'#251'a8'#143#227#130#0#158#223'8'#160#21#12#6#3#175#211#233#4#180 + +#248#244#0#179#153#0'I'#14'S'#129#30#234#152#30'n'#164#31'C'#202#215#232'X' + +#141#142#25'S'#192#152#5#150#4#232#189#186'eY'#161#21#132'UBP'#154#20'x'#246 + +'$!'#4#156#147'/'#224#247'DK'#176#219#149#243#182#170#188'2'#210#221#181#225 + +'s''>/'#210']z'#234#25#208'/'#28#208'W'#213'|+'#245'E'#221#231#181#144#194#12 + +'*=IwH'#249#5'@O@_'#200'g&'#0'=T|c'#219#11#232#205'y'#186#235#139#241'>'#198 + +#5#1#28#207'Xj"'#208#218#7#25'@3'#160#7#157'M'#5','#4'nL'#127#142#233#206'"' + +#151#16'|'#157'?`4'#6#248#22'P'#189#24#11#17'D'#134#16'@*'#244#186'RD'#1'D@' + +#175'E'#196#194#19'2`"'#192#182#28#243#212#146'x`'#201#142'/'#0#159#27#21'_' + +#21'j=7'#212#196'B'#223#195#192#167#207#157#211#246#1#2#192'B'#191'k'#230#2 + +#158#200#14#210#29#239'Y@'#194#131'H'#232'xj$'#189#1'=]'#175#188#162#226#187 + +#235#139#241#1#199#5#1#28#239#176#215#215'8'#14#141'f'#0'3aoo'#143#9'!@i'#218 + +'`'#16#192'l'#160#151#134' '#3#172'A'#8' '#7':'#206'k'#128#158'^'#202'k9'#30 + +#154#227'J'#252#4#202'1'#13#180'I'#192'f'#128'oH'#0#231#148'!.X'#144'@q'#178 + +#5#208'sQ'#237'-'#240#177#166#247'X'#201#175#196#161''''#4#176'0'#251#134#0 + +'d!<'''#6#228#144#236#176#223#23'Fk'#0#224#137#3#210#181#181#181#148'~?'#212 + +#250#140'L'#168#28#160#191'p'#232#157#204#184' '#128#147#27#165'D\'#233'Y' + +#168'@'#8#208#12'n'#222#188#233'-#'#4#12#2'M '#160#14#5#212'au'#219#172#149 + +'&'#14#214#0'0'#0'v'#1'<k'#0#206#218#19#141'@r'#141'<'#211'T'#131'%?'#182#245 + +#219#249#205#25'}fN'#167'bl'#254'$/'#231#230''''#6#212#244'r6'#11'2]'#166#155 + +#212'j5k*'#0#240#147#201'$3'#128'o4'#26#185#145#242#142'M'#143#211#185#0#253 + +#9#141#11#2'8'#189'q$B'#216#216#216#128#198#128'jE'#159#192#227#19#160'|'#146 + +#164'L'#18'D'#16#216'f'#130#192#2#174#152#207#231#188'&'#172#225#0#131#29'=3' + +#176#157'qk'#252#220#163#247'yf'#187'tB'#4'~'#240#3'Im'#128#157'5'#1'l'#227 + +#24#246'IZ'#231'd'#186#0#199'<y&i*P'#217#193#17')'#22#218#207#232#251#179'V' + +#171#5'5>k6'#155#217't:'#205#232#156#243'e'#18'~'#9#224#171#219#23#227#152 + +#199#5#1#156#141'Q'#186#15#198'\'#192#182'1'#25#8'H'#30'H'#129'H'#192'#py' + +#134#24#8#148#30#200#129#128#232#25'r'#160'}'#143'@j'#23':'#206#128#199'6>' + +#19#219#4'V'#187#141#181#207#253'L'#148'"'#0#27#192#243'>}/o'#155#133#190'?' + +#7#208#137'Dr'#128#156#190'+'#235#247#251'9'#129#222#2#29#146#189#221'n'#231 + +#6#236#248#156#11#192#159#205'qA'#0'gsT'#239#139''''#192'Q.1`'#13'r'#184'u' + +#235#150'7'#28#14'-9'#224'8'#8#2'k'#179'O'#192#230'5'#8#3#235#245#245'u'#187 + +'m'#6#128#140'5Iy'#11'J'#2';o'#3#220'X?~'#252'8'#199'6@'#142#253'e@'#199#250 + +#16#176'/'#219#191#24#167'8.'#8#224'|'#141'e'#247#235#0'9`'#24#130'0'#3'D' + +#177#236#3#161'Y`]'#175#215#15#0#211#128#218#29#6#224#24#0'9'#214#135#0#253 + +#176'c'#23#227#12#141#11#2'x1'#198#179#220#199#163#190#246#168#224#189#0#249 + +'9'#30#23#4'p1.'#198#135'x'#252#127'p'#251'ut'#3#215#244'"'#0#0#0#0'IEND'#174 + +'B`'#130'('#0#0#0#128#0#0#0#0#1#0#0#1#0' '#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0 + +#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#1#0#0#0#1#0#0#0#2#128#128#128#2'UUU'#3'@@@'#4'333'#5'III'#7'@@@'#8 + +'999'#9'999'#9'MMM'#10'FFF'#11'FFF'#11'FFF'#11'MMM'#10'999'#9'@@@'#8'@@@'#8 + +'UUU'#6'333'#5'UUU'#3#128#128#128#2#0#0#0#2#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#1#0#0#0#1#128#128#128#2'UUU'#3'UUU'#6'@@@'#8'FFF'#11'III'#14'<<' + +'<'#17'III'#21'EEE'#26'DDD'#30'DDD"EEE%AAA''DDD)AAA+AAA+AAA+DDD)AAA''GGG$FFF' + +'!DDD'#30'==='#25'@@@'#20'@@@'#16';;;'#13'FFF'#11'@@@'#8'333'#5'UUU'#3#128 + +#128#128#2#0#0#0#1#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0 + +#2'UUU'#3'+++'#6'999'#9'NNN'#13'CCC'#19'BBB'#27'GGG$DDD-CCC5DDD<DDDDBBBMCCCT' + +'DDDZEEE]DDDaBBBdDDDfCCCgDDDfBBBdBBB`EEE]BBBYDDDSDDDKEEECAAA;AAA3AAA+DDD"GGG' + +#25'GGG'#18';;;'#13'@@@'#8'333'#5'UUU'#3#0#0#0#2#0#0#0#1#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#2'UUU'#3'UUU'#6'@' + +'@@'#12'GGG'#18'BBB'#27'CCC&BBB2DDD@EEENCCC\DDDiDDDtCCC~DDD'#136'DDD'#143'CC' + +'C'#149'DCC'#153'DCC'#155'EED'#158'DDC'#160'EED'#162'EED'#162'EDD'#161'DCC' + +#160'EDD'#157'CCC'#155'CCC'#152'CCC'#148'BBB'#142'CCC'#134'DDD|CCCrDDDfEEEYD' + +'DDKCCC=EEE0GGG$EEE'#26'<<<'#17'MMM'#10'UUU'#6'UUU'#3#0#0#0#1#0#0#0#1#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'+++'#6'FFF'#11'GGG'#18'FFF'#29'FFF,DDD<AAANC' + +'CC_DDDpCCC'#129'DDD'#142'EED'#154'DDC'#163'DDC'#171'DDC'#178'DDC'#183'EDB' + +#188'EDB'#190'EDB'#192'FFE'#192'FFE'#192'EED'#193'EED'#194'EED'#194'EED'#193 + +'EEB'#193'FEC'#192'FEC'#192'DDC'#190'DDC'#189'DDC'#187'DDC'#182'EED'#177'EDD' + +#169'DDD'#162'CCC'#152'CCC'#140'CCC~DDDmCCC\DDDKBBB:DDD)BBB'#27'@@@'#16'UUU' + +#9'333'#5#128#128#128#2#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'III'#7'DDD'#15'EEE'#26'DDD)EEE;DDDODDD' + +'fBBB{CCC'#141'DDC'#156'DDC'#168'DDC'#178'EDB'#187'EED'#192'FEC'#195'FFC'#198 + +'HFD'#200'HFD'#201'GGC'#202'HFC'#203'IGD'#203'IGD'#203'JHC'#203'IHD'#204'IHD' + +#204'IHD'#204'IHC'#204'IGD'#204'IGD'#203'IGD'#203'GEC'#203'GEC'#203'FFC'#202 + +'GFD'#201'FEC'#199'FFE'#196'EDB'#194'DDC'#190'EED'#185'EDD'#177'DDD'#166'DDD' + +#153'DDD'#139'DDDxDDDbDDDKFFF7CCC&CCC'#23';;;'#13'UUU'#6'UUU'#3#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'@@@'#8'@@@'#16'BBB'#31'BBB2BBB' + +'IBBBaCCCyDDD'#142'DDC'#160'DDC'#175'FEC'#186'FFE'#192'GFD'#197'HFD'#200'HFC' + +#202'IGD'#203'JID'#204'OF>'#211'SC6'#219'W@0'#227'[>+'#235']<('#238'^<'''#240 + +'_<%'#243'`<#'#245'a;"'#247'a:!'#248'a;"'#246'`<$'#245'_<%'#242'^='''#240'\=' + +')'#237'Z=,'#233'V@1'#225'RD8'#217'NG?'#210'JHD'#204'IHC'#204'HHD'#204'GEC' + +#203'FEC'#202'EED'#198'EED'#195'DDC'#190'DDC'#183'DDD'#172'DDD'#157'DDD'#138 + +'DDDtCCC\DDDDCCC.@@@'#28'DDD'#15'III'#7'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'@@' + +'@'#8'KKK'#17'HHH CCC5CCCPDDDlCCC'#134'DDC'#156'EED'#172'FEC'#185'GFD'#193'G' + +'FC'#198'HFC'#202'IGD'#203'PE;'#213'VA0'#227']<('#239'a;#'#246'd9'#30#254'g:' + +#29#255'g:'#30#255'i<'#30#255'j='#31#255'j>'#30#255'k>'#30#255'l?'#31#255'l@' + +#31#255'mA'#31#255'nA'#31#255'm@'#31#255'l@'#31#255'l?'#31#255'k>'#30#255'j>' + +#30#255'j='#31#255'i<'#30#255'g:'#30#255'f:'#29#255'd9'#31#252'`<#'#245'[=*' + +#236'UA3'#223'MF?'#210'IHC'#204'HFD'#204'FFC'#203'FFE'#200'DDC'#197'EED'#191 + +'DCC'#182'DDD'#170'CCC'#152'CCC'#129'DDDfDDDKDDD1FFF'#29'@@@'#16'III'#7'UUU' + +#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'II' + +'I'#7'@@@'#16'@@@ FFF7DDDRCCCoCCC'#140'DDC'#163'EED'#180'EED'#191'FFC'#198'I' + +'GD'#201'ME?'#208'UA2'#224'\<('#238'b9 '#250'f:'#29#255'h;'#30#255'j>'#30#255 + +'m@'#31#255'oB '#255'qD '#255'sF '#255'uH!'#255'|L#'#255#128'O$'#255#133'Q%' + +#255#136'S&'#255#139'V'''#255#143'X('#255#145'Y)'#255#142'W('#255#139'U''' + +#255#135'S&'#255#131'Q%'#255#128'O$'#255'yK"'#255'tG!'#255'rE '#255'pD '#255 + +'nA '#255'l@'#31#255'j='#31#255'g;'#30#255'e9'#29#255'a;!'#247'Z=+'#234'RB5' + +#221'JGC'#207'HFD'#204'FEC'#203'FFE'#200'EED'#196'DDC'#189'DDD'#177'CCC'#159 + +'DDD'#135'CCCjBBBMBBB2FFF'#29'III'#14'UUU'#6#128#128#128#2#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#2'333'#5';;;'#13'BBB'#27'AAA3BBBQDDDqDDD'#142'EED'#165 + +'EDB'#183'FEC'#194'HFD'#200'IFB'#205'SA3'#223'^;&'#242'e8'#29#255'g;'#30#255 + +'j>'#31#255'mA'#31#255'pD!'#255'tG!'#255'~M#'#255#141'W('#255#151']*'#255#160 + +'c-'#255#169'i0'#255#178'n1'#255#181'q2'#255#182's3'#255#183't3'#255#184't3' + +#255#184'v3'#255#185'v4'#255#186'w3'#255#185'v3'#255#184'u3'#255#184't3'#255 + +#183't3'#255#182'r3'#255#181'q2'#255#175'l1'#255#166'h/'#255#158'a,'#255#149 + ,'\*'#255#138'U('#255'zK"'#255'sF '#255'pC '#255'l@'#31#255'i='#31#255'g;'#30 + +#255'c8'#31#252'[<*'#237'RC8'#218'IGD'#205'HFD'#204'EED'#201'DDC'#198'EED' + +#191'DDD'#179'CCC'#161'DDD'#136'CCCkEEEJDDD-@@@'#24'FFF'#11'@@@'#4#0#0#0#1#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'UUU'#3'999'#9'FFF'#22'CCC*DDDGDDDiCCC'#138'EED'#165'FEC'#184'FEC'#194 + +'HHD'#200'QC9'#216'[<*'#237'c8'#31#253'g;'#30#255'j>'#31#255'nA '#255'sF!' + +#255'|M#'#255#141'W('#255#158'a,'#255#173'k1'#255#181'r3'#255#185'v4'#255#187 + +'y4'#255#189'{4'#255#191'~5'#255#193#129'5'#255#195#131'5'#255#196#132'6'#255 + +#197#134'6'#255#198#134'6'#255#199#136'6'#255#200#136'6'#255#200#137'6'#255 + +#199#136'6'#255#198#135'6'#255#198#134'6'#255#197#133'5'#255#196#132'6'#255 + +#195#131'5'#255#193#128'5'#255#191'~4'#255#188'z4'#255#186'x4'#255#184'u3' + +#255#181'q2'#255#168'i/'#255#153'_+'#255#137'T'''#255'yJ"'#255'rE '#255'm@' + +#31#255'i<'#31#255'f:'#30#255'b9!'#249'X>.'#232'MD>'#212'HFD'#204'EED'#202'E' + +'ED'#198'EED'#192'CCC'#180'CCC'#160'DDD'#132'DDDbCCCACCC&CCC'#19'@@@'#8'UUU' + +#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5 + +'III'#14'>>>!DDD<DDD^CCC'#129'EED'#158'DDC'#180'FEC'#194'IGD'#200'RB7'#219'^' + +'9%'#244'e8'#29#255'i<'#31#255'mA '#255'rE!'#255'|L#'#255#149'[+'#255#170'j1' + +#255#181'r3'#255#185'v4'#255#188'z4'#255#192#127'6'#255#196#132'6'#255#199 + +#136'6'#255#202#138'7'#255#204#142'7'#255#206#145'7'#255#209#147'8'#255#211 + +#150'8'#255#212#152'9'#255#213#152'9'#255#213#153'9'#255#214#154'9'#255#215 + +#155':'#255#215#155'9'#255#215#155':'#255#214#154'9'#255#213#153'9'#255#212 + +#152'9'#255#211#151'9'#255#210#149'9'#255#208#147'8'#255#206#143'8'#255#203 + +#141'8'#255#201#138'7'#255#198#135'7'#255#195#131'5'#255#191'~5'#255#188'y4' + +#255#184'u3'#255#180'q3'#255#165'f/'#255#142'W('#255'xJ"'#255'pD!'#255'l?'#31 + +#255'h;'#30#255'd7'#30#255'Z<)'#239'NC<'#214'HFD'#204'EED'#202'DDC'#198'EDD' + +#191'DDD'#176'DDD'#153'CCCzCCCXBBB6FFF'#29'@@@'#12'@@@'#4#0#0#0#1#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#1#128#128#128#2'@@@'#8'@@@'#20'FFF,AAANBBBtDCC'#149'D' + +'DC'#174'EED'#191'GEC'#199'R@5'#220'_9#'#245'e9'#30#255'i='#31#255'nB!'#255 + +'wI#'#255#142'W)'#255#165'f/'#255#181'q3'#255#186'x4'#255#191'~5'#255#195#131 + +'6'#255#199#136'7'#255#203#140'8'#255#207#145'9'#255#211#150'9'#255#214#154 + +':'#255#216#157':'#255#219#160';'#255#221#162';'#255#223#164';'#255#225#167 + +'<'#255#226#168'<'#255#226#169'='#255#227#170'<'#255#228#171'<'#255#228#171 + +'='#255#228#172'='#255#228#171'='#255#227#170'<'#255#227#169'<'#255#226#169 + +'='#255#226#168'<'#255#224#167';'#255#222#164';'#255#220#162';'#255#218#159 + +':'#255#216#157':'#255#213#154':'#255#210#149'9'#255#206#144'8'#255#202#139 + +'8'#255#198#134'7'#255#194#129'7'#255#189'|6'#255#184'v4'#255#178'n2'#255#159 + +'b.'#255#135'T'''#255'tF!'#255'mA '#255'h;'#31#255'd8'#30#255'\;('#240'OC;' + +#216'GGD'#204'EDD'#201'DDC'#197'DDD'#187'DDD'#170'DDD'#143'BBBlDDDGAAA''KKK' + +#17'UUU'#6#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'FFF'#11'BBB'#27'FFF7EEE]DDD' + +#132'DDC'#164'FEE'#186'GGD'#197'OA8'#216'_8#'#246'e9'#30#255'j= '#255'oB!' + +#255'zK$'#255#151'^,'#255#176'n4'#255#184'v5'#255#189'|6'#255#194#131'7'#255 + +#200#137'8'#255#205#144':'#255#210#149';'#255#214#154';'#255#217#158';'#255 + +#221#163'<'#255#225#167'='#255#227#171'='#255#229#173'='#255#231#175'>'#255 + +#232#177'>'#255#234#179'?'#255#236#181'>'#255#236#182'?'#255#237#183'?'#255 + ,#237#183'?'#255#238#183'@'#255#238#184'?'#255#238#185'?'#255#238#184'?'#255 + +#238#183'@'#255#237#182'?'#255#237#183'?'#255#236#182'?'#255#236#181'>'#255 + +#234#179'>'#255#232#176'>'#255#230#175'>'#255#229#172'='#255#227#169'='#255 + +#224#167'='#255#220#161'<'#255#217#157'<'#255#213#153';'#255#209#148':'#255 + +#204#142'9'#255#198#135'8'#255#193#129'7'#255#188'{6'#255#183't5'#255#171'k2' + +#255#142'W)'#255'tH"'#255'nA '#255'h<'#31#255'd7'#30#255'[:('#240'KD?'#211'G' + +'FD'#204'DDC'#201'EDD'#195'CCC'#182'CCC'#159'CCC}EEEUBBB2@@@'#24'999'#9'UUU' + +#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'333'#5'III'#14'BBB#EEECCCCkEEE'#145'DDC'#174'FFE'#192'KE@'#206'Z;)' + +#238'c8'#30#255'i<'#31#255'oB!'#255'|M%'#255#153'_-'#255#178'o4'#255#186'x6' + +#255#192#128'7'#255#198#135'9'#255#204#142':'#255#209#149';'#255#214#155'=' + +#255#219#161'>'#255#223#167'>'#255#227#170'>'#255#230#174'?'#255#232#177'@' + +#255#235#181'A'#255#237#183'A'#255#238#185'A'#255#240#187'A'#255#241#188'A' + +#255#242#189'B'#255#243#190'A'#255#244#191'B'#255#244#192'B'#255#244#191'B' + +#255#244#192'B'#255#244#192'B'#255#245#193'A'#255#244#192'B'#255#244#192'B' + +#255#244#191'B'#255#244#192'B'#255#244#191'B'#255#243#190'A'#255#242#189'B' + +#255#240#187'A'#255#239#186'A'#255#238#184'@'#255#237#183'A'#255#235#179'@' + +#255#232#176'?'#255#229#173'?'#255#226#169'?'#255#223#165'>'#255#218#160'=' + +#255#213#153'<'#255#208#147';'#255#202#140':'#255#196#133'9'#255#190'~7'#255 + +#184'v6'#255#173'l3'#255#145'Y+'#255'uH$'#255'm@ '#255'g;'#31#255'b7'#31#253 + +'U>/'#230'IEC'#206'FFE'#202'EED'#199'CCC'#189'DDD'#170'DDD'#139'BBBdCCC=BBB' + +#31'@@@'#12'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'UUU'#6'KKK'#17'DDD)EEENDDDxDCC'#157'DDC'#182'GGC'#197'T=1'#225'a7 ' + +#252'g;'#31#255'l@ '#255'wI$'#255#154'^.'#255#179'o6'#255#186'x7'#255#193#128 + +'9'#255#200#137':'#255#207#146'<'#255#212#153'>'#255#217#159'>'#255#222#166 + +'?'#255#227#170'@'#255#231#175'A'#255#234#180'B'#255#236#182'B'#255#238#185 + +'B'#255#240#187'B'#255#242#190'D'#255#243#191'C'#255#244#192'D'#255#245#193 + +'C'#255#246#194'D'#255#247#194'D'#255#247#196'E'#255#247#196'D'#255#247#196 + +'D'#255#248#197'D'#255#248#197'D'#255#248#197'D'#255#248#197'D'#255#248#197 + +'D'#255#248#197'D'#255#248#196'D'#255#247#196'D'#255#247#196'D'#255#247#195 + +'E'#255#246#195'D'#255#245#193'D'#255#245#193'C'#255#244#192'D'#255#243#191 + +'C'#255#242#189'C'#255#240#186'C'#255#238#184'C'#255#236#182'B'#255#233#179 + +'B'#255#230#174'A'#255#226#169'@'#255#221#164'?'#255#216#157'>'#255#211#151 + +'='#255#205#143'<'#255#198#135':'#255#191#127'8'#255#184'w7'#255#174'l4'#255 + +#144'X+'#255'rE"'#255'j> '#255'e9'#30#255'_8"'#247'O@8'#219'GFD'#204'DDC'#201 + +'CCC'#194'CCC'#178'DDD'#151'DDDqDDDGGGG$III'#14'@@@'#4#0#0#0#1#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#2'III'#7'@@@'#20'CCC.DDDVCCC'#130'EED'#165'DDC'#189 + +'LB='#207']7$'#244'd7'#31#255'j> '#255'qE"'#255#140'W+'#255#174'l5'#255#186 + +'x8'#255#193#129':'#255#200#138'<'#255#207#146'>'#255#213#155'?'#255#220#163 + +'@'#255#225#169'A'#255#229#174'B'#255#233#179'D'#255#236#182'D'#255#239#185 + +'D'#255#241#189'E'#255#242#190'E'#255#244#192'E'#255#245#194'E'#255#246#195 + +'F'#255#247#195'F'#255#247#196'G'#255#247#197'F'#255#248#197'F'#255#248#197 + +'F'#255#249#198'F'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198 + +'G'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198 + +'G'#255#249#198'G'#255#249#198'G'#255#249#198'F'#255#248#197'F'#255#248#197 + +'F'#255#247#196'F'#255#247#196'F'#255#247#195'F'#255#246#194'F'#255#244#193 + +'F'#255#243#191'E'#255#242#190'E'#255#240#188'E'#255#238#185'D'#255#235#181 + +'D'#255#232#178'C'#255#228#172'C'#255#223#167'B'#255#218#161'@'#255#212#153 + +'?'#255#205#144'='#255#198#135';'#255#191#127'9'#255#183'u7'#255#167'g3'#255 + +#130'P('#255'oB"'#255'h< '#255'c7'#30#255'X:*'#237'HFB'#207'EEE'#202'DCC'#197 + +'DDD'#184'CCC'#160'CCCzEEENFFF(@@@'#16'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2 + +'III'#7'FFF'#22'BBB2CCC\DDD'#136'DDC'#171'EED'#192'Q?5'#219'a6'#31#252'f:'#31 + +#255'mA!'#255#127'N'''#255#164'f3'#255#182'u8'#255#190#127':'#255#199#138'=' + +#255#207#147'?'#255#213#155'A'#255#220#163'B'#255#225#170'D'#255#230#177'E' + +#255#234#181'E'#255#237#184'F'#255#240#188'G'#255#242#189'G'#255#243#192'G' + +#255#244#193'H'#255#245#194'H'#255#246#195'H'#255#247#196'H'#255#247#197'H' + +#255#247#197'H'#255#248#198'H'#255#248#198'H'#255#248#197'H'#255#248#198'H' + +#255#248#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I' + +#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I' + +#255#249#198'I'#255#249#198'I'#255#248#198'I'#255#248#198'H'#255#248#198'H' + +#255#248#198'H'#255#248#198'H'#255#247#197'H'#255#247#196'I'#255#247#195'H' + +#255#246#195'H'#255#245#195'H'#255#244#193'H'#255#243#191'G'#255#241#189'G' + +#255#239#186'G'#255#236#183'F'#255#233#180'F'#255#229#175'D'#255#224#168'D' + +#255#218#161'B'#255#211#153'@'#255#205#144'?'#255#196#134'='#255#188'{:'#255 + +#180'r8'#255#155'_/'#255'wJ$'#255'j? '#255'e8'#30#255']8#'#246'LB<'#213'FEE' + +#203'EED'#199'DDD'#188'DDD'#165'DDD'#128'DDDSFFF,GGG'#18'+++'#6#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#2'III'#7'CCC'#23'BBB6DDDaCCC'#141'DDC'#174'GDB'#196'V:+'#233'c7'#30#255'h; ' + +#255'pC#'#255#146'Z-'#255#179'p7'#255#187'{;'#255#196#133'='#255#204#144'?' + +#255#212#154'B'#255#219#163'E'#255#225#170'E'#255#230#176'G'#255#234#181'H' + +#255#238#185'I'#255#240#189'I'#255#242#190'J'#255#243#192'J'#255#244#193'J' + +#255#245#195'J'#255#246#195'J'#255#246#196'J'#255#247#196'K'#255#247#196'K' + +#255#247#197'K'#255#247#197'K'#255#247#197'K'#255#247#197'J'#255#247#197'J' + +#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J' + +#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J' + +#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#197'J' + +#255#247#197'J'#255#247#197'J'#255#247#197'K'#255#247#197'K'#255#247#197'K' + +#255#247#196'K'#255#246#196'K'#255#246#196'J'#255#246#195'J'#255#245#195'J' + +#255#244#194'J'#255#243#191'I'#255#241#189'I'#255#239#188'I'#255#236#184'H' + +#255#233#180'H'#255#228#174'G'#255#223#168'E'#255#217#160'C'#255#210#151'B' + +#255#202#141'?'#255#193#130'<'#255#185'x:'#255#174'm6'#255#134'S*'#255'mA"' + +#255'f:'#31#255'a6'#30#253'R>4'#224'FFE'#203'EED'#200'CCC'#190'DDD'#169'CCC' + +#133'CCCXAAA/CCC'#19'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'CCC'#23'BBB6CCCcCCC'#144'EED'#177'JC>'#202 + +'[6"'#244'c8'#31#255'j?!'#255'xI&'#255#162'd2'#255#183'u:'#255#192#129'='#255 + +#200#140'@'#255#209#150'B'#255#217#160'E'#255#223#169'G'#255#229#176'H'#255 + +#233#181'J'#255#236#185'J'#255#239#188'K'#255#241#190'K'#255#242#192'K'#255 + +#243#193'L'#255#244#194'L'#255#245#195'L'#255#245#195'L'#255#245#195'L'#255 + +#246#196'L'#255#246#196'L'#255#246#196'L'#255#246#196'L'#255#246#196'M'#255 + +#246#196'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255 + +#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255 + +#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255 + +#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#196'M'#255 + +#246#196'M'#255#246#196'M'#255#246#196'L'#255#246#196'L'#255#246#196'L'#255 + +#246#196'L'#255#245#195'L'#255#245#196'L'#255#244#195'M'#255#244#194'L'#255 + +#243#193'L'#255#242#192'L'#255#241#190'K'#255#238#188'K'#255#236#184'J'#255 + +#232#179'I'#255#228#173'H'#255#222#166'F'#255#215#158'E'#255#207#148'B'#255 + +#198#137'?'#255#190'~<'#255#180'r9'#255#150']/'#255'qE$'#255'h< '#255'b6'#30 + +#255'W9*'#235'GED'#204'DDC'#201'DDD'#192'CCC'#172'CCC'#137'DDDZAAA/GGG'#18'3' + +'33'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'+++'#6'II' + +'I'#21'CCC5DDDbCCC'#145'DDC'#178'LB;'#206'^6 '#249'd8'#31#255'l@!'#255#131'Q' + +'*'#255#172'k7'#255#186'z;'#255#196#133'?'#255#205#146'C'#255#213#156'E'#255 + +#220#165'G'#255#227#173'I'#255#232#180'K'#255#236#184'L'#255#238#187'L'#255 + ,#240#189'N'#255#241#191'N'#255#242#192'N'#255#243#193'N'#255#244#194'N'#255 + +#244#194'N'#255#244#194'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#194'O'#255#244#195'N'#255#244#194'N'#255 + +#243#193'N'#255#242#192'M'#255#241#190'N'#255#240#189'M'#255#237#186'M'#255 + +#235#182'L'#255#230#178'K'#255#225#171'I'#255#219#163'G'#255#211#153'D'#255 + +#202#143'B'#255#192#130'>'#255#183'u:'#255#164'f4'#255'yK&'#255'i=!'#255'c7' + +#30#255'Z8%'#241'GEC'#205'DDC'#201'CCC'#193'DDD'#173'DDD'#136'BBBYDDD-KKK'#17 + +'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'CCC'#19'BBB2CCC_DD' + +'D'#143'DDC'#178'M@8'#211'_5'#31#251'e9'#31#255'lA"'#255#144'Y/'#255#179'r9' + +#255#188'}='#255#198#138'B'#255#208#149'D'#255#217#161'H'#255#223#170'K'#255 + +#229#177'L'#255#234#181'M'#255#236#186'N'#255#239#188'O'#255#240#190'P'#255 + +#241#191'P'#255#242#192'P'#255#242#192'P'#255#242#193'P'#255#243#193'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#193'P'#255 + +#242#193'P'#255#242#192'O'#255#242#192'P'#255#241#192'P'#255#240#190'P'#255 + +#238#188'O'#255#236#185'N'#255#232#180'M'#255#228#175'L'#255#222#167'I'#255 + +#215#159'H'#255#205#147'D'#255#196#134'@'#255#186'y<'#255#173'm7'#255#130'O*' + +#255'j?!'#255'c8'#31#255'[7#'#245'HDA'#208'DDC'#201'CCC'#193'CCC'#172'CCC' + +#134'AAAVAAA+@@@'#16'@@@'#4#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'<<<'#17'CCC.CC' + +'C[CCC'#140'EED'#176'O>5'#213'_5'#30#253'e9'#31#255'nB#'#255#151'\1'#255#181 + +'s:'#255#191#129'@'#255#201#142'C'#255#211#154'G'#255#219#164'K'#255#226#173 + +'M'#255#231#179'O'#255#234#184'P'#255#237#187'Q'#255#239#189'Q'#255#240#190 + +'R'#255#240#191'Q'#255#241#192'R'#255#241#192'R'#255#241#192'R'#255#242#192 + +'R'#255#242#192'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#192'R'#255#242#192'R'#255#241#192'R'#255#241#192'R'#255#241#192 + +'R'#255#240#191'Q'#255#240#190'R'#255#238#189'Q'#255#236#186'P'#255#234#182 + +'O'#255#230#177'N'#255#224#171'L'#255#217#162'J'#255#208#150'F'#255#198#138 + +'C'#255#188'}>'#255#177'o:'#255#136'S,'#255'k?"'#255'c8'#31#255'\6!'#248'JC?' + +#211'DCC'#201'CCC'#193'CCC'#171'BBB'#131'DDDRAAA''777'#14'UUU'#3#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'UUU'#3';;;'#13'AAA''CCCTBBB'#135'DDC'#174'N=5'#213'`4'#29#254'e9'#31#255'oC' + +'$'#255#156'`3'#255#181'u<'#255#193#131'A'#255#204#146'E'#255#213#157'I'#255 + +#221#167'M'#255#227#175'O'#255#232#180'Q'#255#235#184'R'#255#237#187'S'#255 + +#238#189'S'#255#239#190'S'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + ,#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#234#187'R'#255#202#161'G'#255#232#185'R'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#239#189'S'#255#238#188'R'#255#236#186'R'#255#234#184'Q'#255#231#179'Q'#255 + +#226#173'O'#255#219#165'L'#255#211#154'H'#255#201#142'E'#255#190#128'@'#255 + +#179'q:'#255#140'V.'#255'l@"'#255'c8'#31#255'\4'#31#250'JC>'#211'CCC'#201'DD' + +'D'#192'CCC'#168'CCC~DDDKFFF!MMM'#10#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'333'#10'@@@ EEE' + +'JCCC~EDD'#169'L?8'#208'^4'#30#253'd8 '#255'pD%'#255#159'b4'#255#182'v='#255 + +#194#132'C'#255#205#147'H'#255#215#160'L'#255#222#169'O'#255#228#176'Q'#255 + +#232#181'S'#255#235#185'T'#255#236#187'T'#255#237#188'U'#255#238#189'U'#255 + +#238#190'U'#255#238#190'U'#255#238#191'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#181#144'@'#255 + +';/'#21#255#21#16#7#255#9#7#3#255#2#2#1#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1 + +#1#255#7#6#3#255#17#14#6#255#31#25#11#255'2'''#18#255'SB'#29#255#157'}8'#255 + +#233#186'S'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#238#190'U'#255#238#190'U'#255 + +#238#190'U'#255#238#189'U'#255#237#188'U'#255#236#186'T'#255#234#184'T'#255 + +#231#180'S'#255#226#175'Q'#255#220#166'N'#255#212#156'K'#255#202#143'F'#255 + +#190#129'A'#255#179'r<'#255#145'Y0'#255'k?"'#255'c7'#31#255'[4 '#248'IC@'#209 + +'DDD'#200'CCC'#190'CCC'#163'DDDtCCCAEEE'#26'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'==='#25'AAA?CCCsBBB' + +#162'K?;'#202'^4'#30#252'c8 '#255'oB%'#255#160'b5'#255#183'v>'#255#194#134'D' + +#255#205#148'J'#255#215#161'M'#255#223#171'Q'#255#228#177'T'#255#232#182'U' + +#255#234#185'V'#255#236#187'V'#255#236#187'V'#255#237#188'W'#255#237#189'W' + +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W' + +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W' + +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W' + +#255#237#188'W'#255#237#188'W'#255#159'~:'#255#16#13#6#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#16#13#6 + +#255'9-'#21#255'y`,'#255#208#165'M'#255#237#188'W'#255#237#188'W'#255#237#188 + +'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188 + +'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188 + +'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#189'W'#255#237#188 + +'W'#255#236#187'V'#255#235#186'V'#255#234#184'U'#255#231#180'U'#255#227#175 + +'R'#255#221#169'Q'#255#213#157'L'#255#202#144'H'#255#191#129'C'#255#180's=' + +#255#145'X0'#255'j>#'#255'b6'#31#255'Z5#'#245'GDB'#206'DDD'#200'CCC'#186'DDD' + +#154'EEEhBBB6@@@'#20'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'@@@'#4'GGG'#18'AAA3DDDfCCC'#152'IA>'#195'\4 '#250'c7'#31#255'm@#'#255 + +#156'_5'#255#182'v?'#255#194#134'E'#255#206#148'K'#255#215#161'O'#255#223#171 + +'S'#255#228#178'V'#255#232#182'V'#255#233#185'X'#255#234#186'X'#255#235#187 + +'X'#255#236#187'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188 + +'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188 + +'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188 + +'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255'9-'#21 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#6 + +#5#2#255'$'#29#14#255'ZH"'#255#169#135'@'#255#234#186'X'#255#236#188'X'#255 + ,#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255 + +#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255 + +#236#188'X'#255#236#187'X'#255#235#187'Y'#255#235#186'X'#255#234#186'X'#255 + +#233#184'W'#255#231#180'W'#255#227#176'T'#255#221#169'R'#255#213#158'N'#255 + +#203#145'J'#255#192#130'D'#255#179's='#255#139'U/'#255'i="'#255'a5'#30#255'X' + +'7%'#242'FDC'#204'CCC'#198'DDD'#180'CCC'#144'CCC[AAA+III'#14'UUU'#3#0#0#0#1#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'@@@'#12'AAA''CCCWCCC'#140'GB?' + +#185'Z4!'#247'a6'#30#255'j?"'#255#151']2'#255#181't>'#255#194#133'F'#255#206 + +#149'M'#255#215#161'Q'#255#223#170'T'#255#228#178'W'#255#231#181'Y'#255#232 + +#183'Y'#255#233#185'Z'#255#234#185'Y'#255#234#186'Y'#255#234#186'Y'#255#234 + +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234 + +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234 + +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234 + +#186'Z'#255#234#186'Z'#255'C5'#26#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#1#1#1#255#20#16#8#255'K;'#29#255#189#150'I'#255#234#186'Z'#255#234#186 + +'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186 + +'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Y'#255#234#186 + +'Y'#255#234#185'Y'#255#233#185'Z'#255#232#183'Y'#255#230#181'X'#255#226#176 + +'W'#255#221#169'T'#255#213#159'O'#255#203#145'K'#255#190#129'D'#255#178'p=' + +#255#134'Q-'#255'g;"'#255'`4'#29#255'U7('#238'CCC'#202'DDD'#195'DDD'#173'BBB' + +#131'CCCL@@@ 999'#9#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'BBB'#27'CC' + +'CEDDD|DDD'#170'V6%'#238'`5'#30#255'h<"'#255#145'Y1'#255#179's?'#255#192#132 + +'F'#255#205#148'M'#255#215#161'R'#255#222#171'U'#255#227#176'X'#255#230#181 + +'Z'#255#231#183'Z'#255#232#183'['#255#232#184'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#127'd1'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13#11#5 + +#255'N>'#31#255#193#153'L'#255#233#185'['#255#233#185'['#255#233#185'['#255 + +#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255 + +#233#185'['#255#233#184'['#255#232#184'['#255#232#183'Z'#255#231#182'Z'#255 + +#229#180'Y'#255#226#175'X'#255#220#168'U'#255#213#158'R'#255#201#144'K'#255 + +#189#127'D'#255#175'n<'#255#128'N+'#255'e9 '#255'_3'#29#255'Q;1'#227'CCC'#201 + +'CCC'#191'CCC'#163'CCCrAAA;FFF'#22'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'<<<' + +#17'AAA3EEEhCCC'#156'R:/'#220'_3'#29#255'e: '#255#134'Q-'#255#178'p>'#255#190 + +#130'F'#255#203#145'M'#255#213#161'S'#255#221#170'W'#255#226#176'Z'#255#229 + +#180'Z'#255#230#182'\'#255#231#182'\'#255#231#183'\'#255#231#183'\'#255#231 + +#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231 + +#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231 + +#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231 + +#183'\'#255#231#183'\'#255#231#183'\'#255#180#142'G'#255#1#1#1#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#15#12#6#255'VE"'#255#215#171'V'#255 + +#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255 + +#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#182'\'#255 + +#230#181'['#255#228#178'['#255#225#175'Y'#255#219#168'W'#255#211#156'Q'#255 + +#200#142'K'#255#187'|D'#255#172'k<'#255'wF('#255'c7 '#255'^1'#30#254'K@:'#214 + +'DDD'#199'CCC'#184'CCC'#148'AAA^GGG+NNN'#13'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'MMM'#10'@' + +'@@$DDDSDDD'#139'L?8'#197'^1'#29#254'c7 '#255'wG)'#255#173'l<'#255#188#127'E' + +#255#201#144'N'#255#212#158'T'#255#220#169'X'#255#225#175'['#255#228#179'\' + +#255#229#180'\'#255#230#181']'#255#230#181']'#255#230#182']'#255#230#182']' + +#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']' + +#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']' + +#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']' + +#255#230#182']'#255#230#182']'#255#221#175'Y'#255#10#8#4#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255'4' + +')'#21#255#184#146'J'#255#230#182']'#255#230#182']'#255#230#182']'#255#230 + +#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#181']'#255#229 + +#182']'#255#228#180']'#255#227#178'\'#255#224#174'['#255#218#166'W'#255#209 + +#155'R'#255#198#139'K'#255#184'zC'#255#162'd8'#255'l@$'#255'a5'#30#255'Z3 ' + +#249'FBA'#206'DDD'#196'CCC'#174'CCC'#129'BBBIFFF'#29'@@@'#8#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'FF' + +'F'#22'BBB>CCCvFA?'#174'Z3'#31#248'`5'#30#255'l@$'#255#163'd9'#255#184'{D' + +#255#199#142'N'#255#210#156'T'#255#218#167'Y'#255#223#174'\'#255#226#177'^' + +#255#228#179'^'#255#228#179'^'#255#228#180'_'#255#228#180'_'#255#228#180'_' + +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_' + +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_' + +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_' + +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255'bM)'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#27#21#11#255#140'o;'#255#228#180'_'#255#228#180 + +'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180 + +'_'#255#228#179'^'#255#227#179'^'#255#226#176']'#255#222#172'['#255#216#164 + +'X'#255#207#152'R'#255#195#137'K'#255#181'tA'#255#149'Z3'#255'g<"'#255'_3'#29 + +#255'V6'''#239'CCC'#201'CCC'#190'CCC'#159'CCCkCCC5GGG'#18'@@@'#4#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'@@@'#12'CCC' + +'*DDD^DDD'#150'U6('#230'^2'#28#255'f:!'#255#149'Z3'#255#181'uB'#255#195#137 + +'K'#255#208#154'T'#255#216#165'Y'#255#221#172']'#255#225#176'^'#255#226#178 + +'_'#255#227#178'_'#255#227#178'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#13#10#6#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'&'#30#16#255#208#164 + +'W'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#178 + +'_'#255#227#178'_'#255#226#179'`'#255#226#177'_'#255#224#176'^'#255#220#170 + +'\'#255#214#162'X'#255#205#149'R'#255#191#131'I'#255#177'p?'#255#131'O.'#255 + +'c7 '#255']1'#29#255'N;3'#222'DDD'#199'DDD'#181'CCC'#140'DDDSDDD"999'#9#0#0#0 + +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'+++'#6'@@@'#24 + +'EEECCCC~K=7'#193']0'#28#255'b6'#31#255#129'M,'#255#177'o@'#255#191#131'J' + +#255#204#149'S'#255#214#163'Z'#255#220#171']'#255#223#174'_'#255#225#176'`' + +#255#225#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + ,#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#161'~D'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2 + +#255#134'i9'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255 + +#226#177'`'#255#225#178'`'#255#225#177'`'#255#224#176'_'#255#222#174'^'#255 + +#219#169']'#255#212#159'X'#255#200#144'Q'#255#187'~G'#255#170'j<'#255'qB%' + +#255'`5'#30#255'Z2'#31#250'FBA'#205'CCC'#193'DDD'#166'CCCsCCC9CCC'#19'@@@'#4 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'@@@'#12'AAA+BBB' + +'aDBB'#155'Y3!'#244'_3'#29#255'l?$'#255#167'f;'#255#186'}H'#255#200#144'R' + +#255#211#158'Y'#255#218#168']'#255#221#172'`'#255#223#174'a'#255#223#176'a' + +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b' + +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b' + +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b' + +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b' + +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255'hR.'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'qY2'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176 + +'b'#255#224#176'b'#255#224#176'b'#255#223#176'a'#255#223#174'`'#255#221#172 + +'_'#255#217#166']'#255#208#155'W'#255#196#139'O'#255#182'wE'#255#152'\5'#255 + +'e9!'#255'^2'#29#255'S7*'#233'DDD'#200'CCC'#183'DDD'#143'EEEUDDD"UUU'#9#0#0#0 + +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'@@@'#24'DDDDCCC~P8-' + +#211']0'#29#255'c8!'#255#144'V2'#255#180'uD'#255#196#138'P'#255#207#155'X' + +#255#215#165']'#255#220#171'`'#255#221#173'b'#255#222#174'a'#255#222#175'b' + +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b' + +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b' + +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b' + +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b' + +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255'VD&'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#1#1#0#255#166#132'J'#255#222#175'b'#255#222#175'b'#255#222#175 + +'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#174'a'#255#221#173 + +'a'#255#219#170'`'#255#213#163'\'#255#205#150'V'#255#192#132'M'#255#176'oA' + +#255'}K,'#255'a5'#31#255'\0'#28#254'I?;'#212'CCC'#194'DDD'#166'CCCrDDD8GGG' + +#18'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#11'DDD)BBB`G@<' + +#164'[1'#29#252'_3'#29#255'uD)'#255#174'l?'#255#189#130'L'#255#204#150'V'#255 + +#213#162'^'#255#217#168'`'#255#220#172'b'#255#221#173'b'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255'gQ.'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + ,#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#4#255#207#163']'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#172'b'#255#219#171'b'#255#217#167'`'#255#211#159'['#255#200#145'T'#255 + +#185'{H'#255#164'd;'#255'h<#'#255'^1'#29#255'X3#'#244'DDD'#200'CCC'#183'DDD' + +#142'DDDSFFF!@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'III'#21'EEE?DD' + +'D|S5'''#222'\1'#28#255'c8!'#255#158'_8'#255#183'yH'#255#198#142'S'#255#209 + +#158'\'#255#215#166'`'#255#218#170'b'#255#219#171'c'#255#219#171'd'#255#219 + +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219 + +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219 + +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219 + +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219 + +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#213 + +#168'b'#255#3#3#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'M<#'#255#219#172 + +'d'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172 + +'d'#255#219#171'd'#255#219#170'c'#255#217#168'b'#255#214#164'`'#255#207#153 + +'Z'#255#194#136'P'#255#178'rD'#255#139'R1'#255'a4'#31#255'\0'#28#255'L<5'#219 + +'CCC'#193'DDD'#164'CCCoCCC5@@@'#16'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#8 + +'BBB#CCCWHA='#158'\0'#28#253'_3'#29#255'~I+'#255#175'nB'#255#191#133'O'#255 + +#205#151'Z'#255#213#163'a'#255#216#167'c'#255#217#169'c'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255'YF)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#15#12#7#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#169'c'#255#217#168'c'#255 + +#215#166'b'#255#211#160'_'#255#201#147'W'#255#187#127'L'#255#169'h>'#255'l=$' + +#255'^1'#29#255'W3"'#244'DDD'#199'DDD'#180'DDD'#136'DDDKBBB'#27'UUU'#6#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'UUU'#3'DDD'#15'EEE4BBBpS6)'#215'\1'#28#255'b7!'#255#158'_9' + +#255#184'{J'#255#199#144'W'#255#209#158'_'#255#214#165'c'#255#216#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +'YD)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#189#147'W'#255#217#168'd' + +#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd' + +#255#217#168'd'#255#216#168'd'#255#215#167'c'#255#213#164'a'#255#207#154']' + +#255#195#138'S'#255#179'tF'#255#139'R1'#255'`5'#30#255'\0'#28#255'K=7'#216'D' + +'DD'#191'DDD'#157'CCCcAAA+FFF'#11#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'+++'#6'EEE'#26'BBBIE?=' + +#144'Z0'#28#252'^2'#29#255'zF*'#255#174'mB'#255#192#135'R'#255#205#152'\'#255 + +#211#161'b'#255#214#165'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255'jR1'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'fN/'#255#215#166'd'#255#215#166'd'#255#215#166'd' + +#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd' + +#255#215#167'e'#255#214#164'c'#255#210#159'a'#255#202#148'Z'#255#187#128'N' + +#255#168'f='#255'i;#'#255'\1'#28#255'V3#'#242'CCC'#197'DDD'#173'BBB{FFF>@@@' + +#20'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#1'MMM'#10'FFF(CCC_R6*'#206'\0'#28#255'`5'#31#255#154'\8' + +#255#182'yJ'#255#199#144'Y'#255#208#156'`'#255#212#163'd'#255#213#165'd'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#135'h@'#255#2#1#1#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'b' + +'L/'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165 + +'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#213#165'e'#255#213#164 + +'d'#255#211#161'c'#255#206#154'^'#255#194#139'U'#255#177'sF'#255#135'P/'#255 + +'^3'#29#255'[/'#27#255'J>9'#213'DDD'#185'CCC'#144'DDDSHHH III'#7#0#0#0#1#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3 + +'<<<'#17'DDD8DBAyZ0'#29#248'\1'#28#255'uB'''#255#172'lA'#255#190#132'Q'#255 + +#203#151'^'#255#209#160'c'#255#211#162'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#156'xK'#255#1#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'jQ2'#255#212 + +#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212 + +#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#162'e'#255#211 + +#162'd'#255#208#158'b'#255#200#147'['#255#186'~M'#255#165'd<'#255'd8!'#255'\' + +'0'#28#255'T5'''#237'CCC'#193'DDD'#162'CCCjCCC.@@@'#12#0#0#0#2#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'333'#5'GGG'#25'BB' + +'BIN:1'#174'[/'#27#255'^2'#29#255#145'T3'#255#180'vI'#255#196#142'Y'#255#206 + +#155'a'#255#209#161'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + ,#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255'O=&'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'sX7'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#210 + +#161'f'#255#209#159'd'#255#204#153'`'#255#192#135'U'#255#175'pE'#255'~H+'#255 + +']0'#29#255'Z0'#28#253'FBA'#201'DDD'#176'CCC~FFF>CCC'#19'@@@'#4#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'EEE%CCC[V3' + +'$'#222'\0'#27#255'f7!'#255#167'd>'#255#187#128'Q'#255#200#148'^'#255#207#156 + +'d'#255#209#159'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160 + +'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160 + +'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160 + +'e'#255#209#160'e'#255#209#160'e'#255#151'tI'#255'2&'#25#255#27#21#13#255#15 + +#12#7#255#7#5#3#255#7#5#3#255' '#25#16#255'P='''#255#151'tI'#255#209#160'e' + +#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e' + +#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e' + +#255#209#160'e'#255#209#160'e'#255#6#5#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#146'pF'#255#209#160'e'#255#209#160'e'#255 + +#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255 + +#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#159'e'#255 + +#206#155'c'#255#198#143'['#255#182'zM'#255#151'Y6'#255'^3'#29#255'[/'#27#255 + +'N:1'#222'DDD'#185'DDD'#142'DDDOIII'#28'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2';;;'#13'DDD1F@=x[/'#28#253'\1'#28 + +#255'~G+'#255#174'oE'#255#193#137'X'#255#203#151'b'#255#207#156'e'#255#207 + +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208 + +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208 + +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255'x[;' + +#255#15#12#8#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2#255'bJ0'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255'3'''#25#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#207#158'e'#255#206#156'd'#255#201#149'_'#255#189#131'T' + +#255#169'h@'#255'j:#'#255'\0'#28#255'V3#'#242'DDD'#191'CCC'#156'BBB`AAA''333' + +#10#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'C' + +'CC'#19'EEE?Q7+'#179'[/'#27#255'^1'#29#255#152'X6'#255#181'yM'#255#197#144']' + +#255#204#153'c'#255#206#155'f'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#202#154'c'#255'6)'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#14#10#7#255#178#135'W'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255'WB+'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + ,#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#29#22#14#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#205#156'e' + +#255#203#151'c'#255#194#139'Z'#255#176'qH'#255#131'K-'#255'\1'#28#255'[/'#27 + +#255'HA='#204'DDD'#169'DDDqEEE4III'#14#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'+++'#6'BBB'#27'EEENW2!'#228'[/'#27#255'i9!' + +#255#168'e?'#255#187#130'T'#255#200#147'`'#255#203#153'e'#255#205#154'e'#255 + +#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255 + +#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255 + +#205#154'e'#255#205#154'e'#255#199#150'a'#255#19#14#9#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#6#4#255#178#133'W' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255'S>)'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128'a?'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#204#154'e'#255#203#152'd'#255#197#145'^'#255#182'zO'#255 + +#157'Z8'#255']1'#29#255'[/'#27#255'P9.'#226'CCC'#179'CCC'#129'CCCA@@@'#20'@@' + +'@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'EEE%EA?' + +'b[/'#27#253'\0'#27#255#127'F*'#255#173'nG'#255#191#136'Z'#255#200#149'c'#255 + +#202#152'e'#255#202#152'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#31#24#16#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#11#8#6#255#200#151'e'#255#202#153'e'#255#202#153'e'#255#202 + +#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255'O;''' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255''''#29#19#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#152'e'#255#202#151'd'#255 + +#199#147'b'#255#188#130'U'#255#168'e@'#255'k:"'#255'[/'#27#255'V3$'#241'CCC' + +#186'BBB'#142'EEENBBB'#27'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#2'@@@'#12'DDD-O:0'#146'[/'#27#255'\0'#28#255#145'R2'#255#179'wM' + +#255#194#141'^'#255#200#148'c'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255';,'#30#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'S>*'#255#201#150'e' + +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255#201#150'e'#255'K8&'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#29#22#14#255 + +#184#138']'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255 + ,#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255 + +#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255 + +#201#150'e'#255#200#149'd'#255#199#148'c'#255#191#136'['#255#173'mG'#255'}D(' + +#255'\0'#27#255'Z0'#28#253'DBB'#192'CCC'#152'DDDZBBB#@@@'#8#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'III'#14'CCC5T5'''#190'[/'#27#255 + +'_2'#29#255#162'^:'#255#184'}S'#255#195#142'`'#255#198#147'd'#255#199#148'd' + +#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd' + +#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd' + +#255#199#148'd'#255#147'mJ'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#3#2#1#255#195#144'b'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255 + +#199#148'd'#255#199#148'd'#255#199#148'd'#255'H6$'#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#3#2#1#255#23#17#12 + +#255'qT8'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199 + +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199 + +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199 + +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#198#146'c'#255#193 + +#140'^'#255#178'uN'#255#143'O1'#255'\0'#28#255'[/'#27#255'J=7'#208'CCC'#161 + +'DDDfAAA+FFF'#11#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'<<<' + +#17'CCC=X1 '#227'[/'#27#255'm:"'#255#167'eA'#255#187#130'X'#255#195#143'a' + +#255#196#144'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c' + +#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c' + +#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#19#14#10#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#135'cD'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255'I5$' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#19#14#10#255'4&'#26#255'cI2'#255 + +#161'vP'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'b'#255#196#144'c'#255#194#140'`'#255#182'|S'#255#159'\:' + +#255']2'#28#255'[/'#27#255'Q8-'#226'DDD'#168'DDDqAAA3NNN'#13#128#128#128#2#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4':::'#22'G@<N[/'#27#253'[/'#27 + +#255'~D('#255#172'lF'#255#189#133'['#255#194#141'a'#255#194#142'b'#255#195 + +#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195 + +#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195 + +#142'b'#255'oQ8'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'N9'''#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142 + +'b'#255#195#142'b'#255#195#142'b'#255#145'jI'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'7('#28 + +#255#166'yS'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255 + +#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255 + +#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255 + +#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255 + +#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255 + +#195#142'b'#255#194#142'a'#255#193#140'`'#255#185#128'X'#255#166'c?'#255'k8!' + +#255'[/'#27#255'V3#'#241'DDD'#175'DDD{BBB:@@@'#16#128#128#128#2#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'EEE'#26'Q:/z[/'#27#255'\0'#27#255#142'M/' + ,#255#176'rM'#255#189#135']'#255#192#139'a'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#26#19#13#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'D1"'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192 + +#139'`'#255#192#139'`'#255#192#139'`'#255#11#8#6#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#4#255#143'hH'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#138'a'#255#187#131'Z'#255#170'iE'#255'{B' + +''''#255'[/'#27#255'Z0'#28#253'DDD'#182'DDD'#132'CCCACCC'#19'UUU'#3#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'BBB'#31'S5('#154'[/'#27#255'\0'#28#255 + +#153'W5'#255#179'wQ'#255#189#133'^'#255#190#136'_'#255#190#136'_'#255#190#136 + +'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136 + +'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#184#132 + +']'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'dH2'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255 + +#190#136'_'#255#190#136'_'#255#190#136'_'#255'G3#'#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255#165'wS'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#187#131'\'#255#173 + +'nJ'#255#134'H,'#255'[/'#27#255'[/'#27#255'HA='#194'DDD'#139'CCCHCCC'#23'@@@' + +#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#8'DDD"V4$'#182'[/'#27#255'`2' + +#29#255#160'\9'#255#181'zT'#255#187#132']'#255#188#133'^'#255#188#134'^'#255 + +#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255 + +#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255 + +'hK4'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#2#1#1#255#163'uR'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#180#128'Z'#255#13#9 + +#6#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'cF1'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#133'^'#255#186 + +#131'\'#255#176'sO'#255#144'O/'#255'[/'#27#255'[/'#27#255'L=6'#206'DDD'#143 + +'BBBMEEE'#26'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'EEE%X2 ' + +#209'[/'#27#255'j8 '#255#163'_='#255#181'{V'#255#186#130'\'#255#186#130'\' + +#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\' + +#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\' + +#255#186#130'\'#255'#'#25#17#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + ,#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'_B/'#255#186#130'\'#255#186#130'\'#255#186#130'\' + +#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\' + +#255#186#130'\'#255#163'rQ'#255#5#3#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'$'#26#18#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#185#129'\'#255#177'vR'#255#155'V5'#255'\0'#28 + +#255'[/'#27#255'P9/'#217'DDD'#146'BBBQ@@@'#28'UUU'#6#0#0#0#1#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#1'MMM'#10'@@@(Z0'#29#234'[/'#27#255't<$'#255#165'b@'#255#181 + +'{V'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127 + +'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127 + +'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#4#3#2#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255'Q8('#255#184#127'Z'#255#184#127 + +'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127 + +'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#142'bE' + +#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#6#4#3#255#174'yV'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#183 + +'~Z'#255#178'wT'#255#159'Y8'#255'b3'#30#255'[/'#27#255'S6)'#228'CCC'#149'CCC' + +'TBBB'#31'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'FFF'#11'F@>/[/'#27 + +#254'[/'#27#255'}A&'#255#167'gD'#255#180'zW'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y' + +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#136']C'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#19#13#9#255#151'gJ'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y' + +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#171'vU'#255'1"'#24#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'}V>'#255 + +#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y' + +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255 + +#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y' + +#255#181'|Y'#255#181'|Y'#255#178'wT'#255#161'];'#255'k8 '#255'[/'#27#255'V3#' + +#238'DDD'#151'CCCWFFF!@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#11 + +'K:3?[/'#27#255'[/'#27#255#131'F*'#255#169'iH'#255#179'xV'#255#180'zW'#255 + +#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180 + +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255'<)'#29#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#1#1#1#255'O6&'#255#180'{W'#255#180'{W'#255#180'{W'#255#180 + +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W' + +#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255 + +#180'{W'#255#142'aE'#255#27#19#13#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255 + ,#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#5#4#255 + +#135']A'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180 + +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255'pL6'#255'+'#29#20#255'('#28#19 + +#255'*'#28#20#255'+'#29#21#255'-'#30#21#255'fF2'#255#180'{W'#255#180'{W'#255 + +#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180 + +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W' + +#255#180'{W'#255#180'{W'#255#180'{W'#255#180'zX'#255#178'vU'#255#163'_>'#255 + +'r<"'#255'[/'#27#255'X2!'#243'CCC'#152'BBBYDDD"@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#2'FFF'#11'N8.J[/'#27#255'[/'#27#255#135'H,'#255#170'kI'#255 + +#178'wV'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179 + +'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#16#11#8#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#19#13#10#255#150'fJ'#255#179'yX'#255#179 + +'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255 + +#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179 + +'yX'#255'~V>'#255'=)'#30#255#19#13#9#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255'$'#24#17#255#172'uT'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#158'kN'#255'=)'#30#255#6 + +#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#6#4#3#255'?+'#31#255#164'oP'#255#179'yX'#255#179'yX'#255#179'yX'#255#179 + +'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255 + +#177'uU'#255#164'b@'#255'v?%'#255'[/'#27#255'Y1'#31#246'CCC'#152'BBBYDDD"@@@' + +#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'FFF'#11'Q7+U[/'#27#255'\0'#28#255 + +#139'J-'#255#171'lL'#255#177'wW'#255#178'wV'#255#178'wV'#255#178'wV'#255#178 + +'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV' + +#255#178'wV'#255#172'sT'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255'O5&'#255#178'wV'#255#178'wV' + +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255 + +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178 + +'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV' + +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#176'wV'#255 + +'vO9'#255'7%'#27#255#16#10#8#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#11#8#6#255'9&'#28#255#137'\C'#255#178'wV'#255#178'wV'#255 + +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255'M3%' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'4"'#25#255#178'wV' + +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255 + +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178 + +'wV'#255#178'wV'#255#176'tT'#255#165'cC'#255'yA'''#255'[/'#27#255'Z0'#29#250 + +'DDD'#150'CCCWFFF!III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'MMM'#10'R4' + +'''^[/'#27#255'\0'#28#255#142'M.'#255#171'nN'#255#177'uV'#255#177'wX'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255'gF3'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#23#16#12#255#152'fK'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255 + +#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#173'uV'#255 + +#136'\D'#255#133'YB'#255#131'XA'#255#128'V@'#255#153'gL'#255#177'wX'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255'S8)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255'"'#23#17#255#175'wX'#255#177'wX'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#175'tU'#255 + +#166'eE'#255'}B)'#255'\0'#28#255'[/'#28#253'CCC'#148'CCCTBBB'#31'III'#7#0#0#0 + ,#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'V4%h[/'#27#255'\0'#28#255#145'O0' + +#255#171'mN'#255#175'sU'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255'*'#29#21#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2 + +#1#1#255'X;,'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW' + +#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW' + +#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255'^?/'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'$'#24#18#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255#175'uW'#255#175'uW'#255#175'sT'#255#166'eE'#255#128'D*'#255'\0'#28 + +#255'[/'#27#255'ECB'#149'CCCP@@@'#28'UUU'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'@@@'#8'W3#q[/'#27#255'\1'#29#255#150'Q1'#255#171'mN'#255#174'sU'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#15#10#8#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#4#3#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#29#19#14#255#156'iM'#255#175'uV'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV' + +#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV' + +#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#11#7#6#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'sM9'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'tV'#255#174'rS'#255#167'fG'#255#131'G,'#255'\0'#28#255'[/'#27#255'GA?'#150 + +'CCCLGGG'#25'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'W3#k[/'#27 + +#255'\1'#29#255#149'P2'#255#169'lM'#255#174'qT'#255#175'tV'#255#175'tV'#255 + +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#9#6#4#255#0#0#0#255#0#0#0#255#0#0#0#255#136 + +'ZC'#255'T8*'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#3#255 + +'bA0'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255 + +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255 + +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255 + +#165'nR'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#10#7#5#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#174'sU'#255#173'qR'#255#166'eG'#255 + +#131'F,'#255'\0'#28#255'[/'#27#255'EA?'#145'DDDGFFF'#22'@@@'#4#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'W3#\[/'#27#255'\1'#29#255#146'P3'#255#168 + +'jM'#255#173'pT'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#4#3#2#255#0#0#0#255#0#0#0#255#21#14#10#255#173'rU'#255#173'rU'#255#152'dK' + +#255'dB1'#255'A+ '#255'D-!'#255#141']E'#255#173'rU'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173 + +'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU' + ,#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173 + +'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#169'pS'#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#139'\D'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'qT'#255#172'oR'#255#165'cF'#255#128'E+'#255'\0' + +#28#255'[/'#27#255'CBA'#132'DDD@CCC'#19'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0'@@@'#4'U2"L[/'#27#255'\1'#29#255#143'N3'#255#168'hK'#255#172'oT' + +#255#173'qU'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#1#1#1#255#0#0#0 + +#255#0#0#0#255'nI7'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173 + +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173 + +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173 + +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#2#1#1#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255'H0$'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'qU'#255#171'nQ'#255#165'dF'#255'~D+'#255'\1'#29#255'Z0'#28 + +#252'CCCzCCC9@@@'#16#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U' + +'UU'#3'T2#=[/'#27#255'\1'#29#255#140'N1'#255#166'gI'#255#171'oR'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#1#1#1#255#27#18#13#255'a@0' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255'$'#24#18#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#31#20#15#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#172'pT'#255#169'lP'#255#164'aD'#255'{C*'#255'\1'#29#255'Y0'#30#247 + +'CCCoBBB2;;;'#13#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128 + +#2'V6''-[/'#27#255'\1'#29#255#137'L0'#255#165'fH'#255#170'mQ'#255#172'pT'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#166'lS'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#168'nS'#255#134'WB'#255'b@0'#255'tK' + +'9'#255#166'lS'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#129'T@'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + ,#255#0#0#0#255#0#0#0#255#22#14#11#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'oT'#255#170'mP'#255#163'`C'#255'xB*'#255'\1'#29#255'Y1'#31#241'BBBd' + +'CCC*MMM'#10#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'T7*'#29 + +'[/'#27#255'\1'#29#255#134'J0'#255#165'dG'#255#169'lQ'#255#171'pU'#255#172'q' + +'W'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172 + +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#135'YD'#255'$'#24#18#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#8#5#4#255#30#20#16#255'xO='#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172 + +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172 + +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#14#9#7#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#20#13#10#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#171'oT'#255 + +#169'jM'#255#162'_A'#255's>'''#255'\1'#29#255'X2 '#234'CCCXDDD"@@@'#8#0#0#0#1 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'C><'#9'[/'#27#247'\1'#29#255 + +'}F-'#255#164'bE'#255#169'lO'#255#171'pT'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172 + +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255#172'qV'#255#154'eM'#255#22#15#11#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#25#17#13#255#136'ZE'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172 + +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255'U7*'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#17#11#9#255#172'qV'#255#172 + +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#171'oT'#255#168'jM'#255#161'^@'#255'k;%'#255'\0' + +#28#255'V3#'#220'CCCLEEE'#26'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'+++'#6'[/'#28#214'\1'#29#255't@)'#255#162'`B'#255#168'jO'#255 + +#172'pV'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX' + +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255 + +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#144'_I'#255#6#4#3 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'Z;-'#255 + +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX' + +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255 + +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#171'pV'#255#3#2#1#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'!'#22#17#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX' + +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#172'qX'#255#171'oU'#255 + +#167'hM'#255#160'[>'#255'b5!'#255'\0'#28#255'S5'''#196'EEE?CCC'#19'@@@'#4#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'Z0'#29#176'\1'#29 + +#255'k:%'#255#162'^A'#255#169'jN'#255#173'qV'#255#174'sY'#255#174'sY'#255#174 + +'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255 + +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174 + ,'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + +#255#151'dM'#255#4#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#1#1#1#255#136'YF'#255#174'sY'#255#174'sY'#255#174's' + +'Y'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255 + +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174 + +'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + +#255#174'sY'#255'5#'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'G.$'#255#174'sY'#255#174'sY'#255 + +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174 + +'sY'#255#174'sY'#255#172'pV'#255#167'gK'#255#153'X:'#255'^3'#31#255'\0'#28 + +#255'Q7+'#166'BBB2777'#14#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#2'Z0'#29#137'\0'#28#255'a5!'#255#160']>'#255#168'jN'#255 + +#173'sY'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175 + +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\' + +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255 + +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175 + +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#29#20#15#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8 + +#5#4#255#169'rX'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\' + +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255 + +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175 + +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\' + +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#156'jR'#255#1#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'yQ?'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255 + +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#174'u['#255#172'qV'#255#166 + +'gJ'#255#143'S6'#255'^2'#31#255'[/'#27#255'O;2'#130'CCC&999'#9#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'Z0'#29'a\0'#28#255 + +'^3'#31#255#153'W;'#255#168'jN'#255#174'tZ'#255#176'x_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_' + +#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255 + +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255'oL='#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255']@2'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255'Z=1'#255')'#28#22#255#26#18#14 + +#255#14#10#8#255#10#7#5#255#23#16#12#255'+'#30#23#255'E0&'#255#138'_J'#255 + +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_' + +#255#176'y_'#255'#'#24#19#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#172'w]'#255#176'y_'#255#176'y_'#255 + +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#175'w^'#255#172'rW'#255#165'fI'#255#134'K2'#255']1'#30#255'[/'#27 + +#255'H?:ZBBB'#27'+++'#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'X/'#29'7[/'#27#255'^2'#31#255#141'P5'#255#167'hK'#255#174 + +'sY'#255#177'x_'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255 + +#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177 + +'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255#9#6#5#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'%'#25#20#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255'bD6'#255#8 + +#6#4#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'>+"'#255#175'za'#255#177'za'#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255 + +#177'za'#255#177'za'#255#177'za'#255#136'^K'#255#0#0#0#255#0#0#0#255#0#0#0 + ,#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#16#11#9#255#177'za'#255#177 + +'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255#176'x^'#255#172'qV'#255#164'cF'#255'{E,'#255']1' + +#30#255'Z0'#29#245'DDD<GGG'#18'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X?4'#7'[/'#27#243']1'#30#255'}G/'#255#165'e' + +'H'#255#174'sY'#255#178'zb'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d' + +#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255 + +#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179 + +'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d' + +#255#179'}d'#255#179'}d'#255#158'oX'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'&'#26#21#255#179'}d'#255#179'}d'#255#179'}d'#255'kK;'#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#12#8#6#255#137'_L'#255#179'}d'#255 + +#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179 + +'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#20#14#11#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'vRB'#255#179'}d' + +#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255 + +#179'}d'#255#179'}d'#255#179'}d'#255#177'y`'#255#172'pU'#255#163'aC'#255'i;&' + +#255'\1'#29#255'W2!'#206'FFF,@@@'#12#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'[/'#27#184'\1'#29#255'l<''' + +#255#164'bE'#255#173'rX'#255#179'|c'#255#180#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255'_C6'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'Q9.'#255#181#127'g'#255#181#127'g'#255#152'kW'#255#2 + +#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#3#2#2#255 + +#151'jV'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255'sPA'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#23#16#13#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#180#127'g'#255#177'za'#255#171'nS'#255#156'[>'#255 + +'`5!'#255'\0'#28#255'T5'''#155'DDD'#30'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#28'w\0'#28#255 + +'`5!'#255#157'\?'#255#172'pU'#255#179'}d'#255#181#129'i'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255'.!'#27#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#2#1#1#255#166'va'#255#182#129'j'#255#182#129'j'#255'A.&' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#9#6#5#255#170'yd'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182 + +#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182 + +#129'j'#255#182#129'j'#255#182#129'j'#255#8#6#5#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#135'`O'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#181#128'h'#255#177'za'#255#169'kP'#255#139'Q7' + +#255'^3'#31#255'\0'#28#255'N9/\GGG'#18'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X.'#26'4\0'#28#255 + ,'^3'#31#255#141'S8'#255#170'mQ'#255#179'|c'#255#182#130'k'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#20#15#12#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'N8.'#255#184#132'm'#255#184#132'm'#255#184#132'm' + +#255#22#16#13#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#21#15#13#255#182#130'm'#255#184#132'm'#255#184#132 + +'m'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132 + +'m'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255'N8.'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#23#17#13#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#183#131'l'#255#182#129'j'#255#177'x_'#255#167 + +'hK'#255'zG/'#255']1'#30#255'Z0'#28#241'@@@(MMM'#10#0#0#0#1#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'='#31 + +#18#3'[/'#27#238']1'#30#255'{G/'#255#167'hL'#255#177'za'#255#183#131'l'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#26#19#16#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#12#9#7#255#185#134'p'#255#185#134'p'#255#185#134'p' + +#255#185#134'p'#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'U>4'#255#185#134'p'#255#185 + +#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185 + +#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#25#18 + +#15#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255'xWI'#255#185#134'p'#255#185#134'p'#255#185#134 + +'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134 + +'p'#255#185#134'p'#255#185#134'p'#255#184#134'o'#255#182#129'j'#255#175'v\' + +#255#165'dG'#255'h;&'#255'\1'#29#255'X2 '#193'==='#25'+++'#6#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'[/'#27#170'\1'#29#255'f9%'#255#164'bG'#255#175'v]'#255#183#131 + +'l'#255#186#135'r'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255'$'#27#23 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#129'_P'#255#186#137's'#255#186#137's'#255 + +#186#137's'#255#186#137's'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255' '#23#19#255#186 + +#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186 + +#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186 + +#137's'#255#172#127'j'#255#7#5#4#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#12#9#7#255#186#137's'#255#186#137's' + +#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's' + +#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#185#135'q' + +#255#181#129'i'#255#173'qW'#255#149'X='#255'`5!'#255'\0'#28#255'V4%'#127'333' + +#15#0#0#0#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27'O\0'#28#255'_4 '#255#144'U:' + +#255#172'qV'#255#182#130'k'#255#187#137't'#255#188#139'u'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + ,#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255'1$'#31#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255':+$'#255#188#140'v'#255#188#140 + +'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#1#1#1#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#4#3#3#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255'}]N'#255'6("' + +#255#14#11#9#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'S>5'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#139'u'#255#186#136'r'#255#180'~f'#255#169'kP'#255'|H1'#255'^2'#31#255'[' + +'/'#27#249'L=6+III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#5'[/'#27#235 + +']1'#30#255'wD/'#255#169'jO'#255#180#127'g'#255#187#137'u'#255#189#141'x'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255 + +#189#142'y'#255#189#142'y'#255'J7/'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#16#12#11#255#187#140'y'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#1 + +#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#181#136'u'#255#189#142'y'#255#189#142 + +'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142 + +'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142 + +'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#11#8#7#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#1#1#1#255#181#136's'#255#189#142'y'#255#189#142'y'#255#189 + +#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189 + +#142'y'#255#189#142'y'#255#189#142'y'#255#189#141'x'#255#186#136'q'#255#177 + +'za'#255#164'dG'#255'f:&'#255'\1'#29#255'Y1'#31#186'@@@'#16'UUU'#3#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27#147'\1'#29#255'b8$'#255#160'bF'#255 + +#177'y`'#255#186#137's'#255#190#143'z'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#162 + +'{i'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#1#1#1#255#162'{i'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255 + +#191#145'|'#255#191#145'|'#255#191#145'|'#255#2#1#1#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1 + +#1#1#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145 + +'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145 + +'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145 + +'|'#255#191#145'|'#255#5#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255'&'#29#25#255 + +#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255 + +#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255 + +#191#145'|'#255#189#142'y'#255#184#134'o'#255#174'sY'#255#143'U;'#255'`5!' + +#255'\0'#28#255'U3$`@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0'Z.'#27'5\0'#28#255'_4 '#255#137'Q8'#255#173'rX'#255#184#134'o'#255#190#144 + +'{'#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192 + +#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255 + +#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127 + +#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147 + +#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#14 + ,#11#9#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255' ' + +#24#21#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255 + +#192#147#127#255#192#147#127#255#192#147#127#255#4#3#3#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#8#6#5#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127 + +#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147 + +#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192 + +#147#127#255#192#147#127#255#192#147#127#255#1#1#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#137'iZ'#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147 + +#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192 + +#147#127#255#192#147#127#255#192#146'~'#255#189#142'y'#255#182#129'j'#255#169 + +'lP'#255'uD.'#255'^2'#31#255'[/'#28#237'NFB'#21'UUU'#3#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#211']1'#30#255'l>)'#255#167'iM' + +#255#181#127'g'#255#190#143'z'#255#193#148#128#255#194#149#130#255#194#149 + +#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194 + +#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255 + +#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130 + +#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149 + +#130#255#194#149#130#255'G60'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255'ZE<'#255#194#149#130#255#194#149#130#255#194#149#130#255 + +#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#7#6#5#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#23#17#15#255#194#149#130#255#194#149#130#255#194#149#130 + +#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149 + +#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194 + +#149#130#255#194#149#130#255#194#149#130#255#179#137'x'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'-#'#30#255#194#149#130#255#194#149#130#255#194#149#130#255#194 + +#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255 + +#194#149#130#255#194#149#130#255#194#149#130#255#192#147#127#255#188#140'v' + +#255#177'za'#255#156'_D'#255'a6#'#255'\1'#29#255'Y1'#31#153'@@@'#8#0#0#0#1#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27']\0'#28#255 + +'`5!'#255#143'V='#255#175'v]'#255#187#138'u'#255#193#149#129#255#195#152#132 + +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152 + +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195 + +#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255 + +#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133 + +#255#195#152#133#255#195#152#133#255#170#133't'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#172#133'u'#255#195#152#133#255#195#152 + +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#146 + +'rd'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'_JA'#255#195#152#133#255#195#152#133 + +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152 + +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195 + +#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#140'm`'#255#0#0 + +#0#255#0#0#0#255#6#5#4#255#186#145#127#255#195#152#133#255#195#152#133#255 + +#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133 + +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#132#255#192#147 + +#127#255#185#134'p'#255#172'pU'#255'|I2'#255'^3'#31#255'\0'#28#250'R5()UUU'#3 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3 + +'[/'#27#221']1'#30#255'oA,'#255#169'lP'#255#183#131'l'#255#192#147#127#255 + +#196#154#135#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136 + +#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155 + +#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197 + +#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255 + +#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#26#20#18#255 + ,#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#5#255#197#155#136#255#197 + +#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255 + +#197#155#136#255#28#22#19#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#3#255#193#153#134#255 + +#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136 + +#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155 + +#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197 + +#155#136#255#182#143'~'#255'=0*'#255#7#5#5#255#130'fY'#255#197#155#136#255 + +#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136 + +#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#196#154 + +#136#255#195#152#133#255#190#144'{'#255#180'~f'#255#159'bG'#255'c8%'#255'\1' + +#29#255'Z0'#30#163'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'g\0'#28#255'a6#'#255#147'Y@'#255#177 + +'za'#255#190#143'z'#255#196#154#135#255#198#157#139#255#198#157#139#255#198 + +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255 + +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157 + +#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198 + +#157#139#255'<0+'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'*!'#29#255 + +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#164#130's'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'?2,'#255#198 + +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255 + +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157 + +#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198 + +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255 + +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#198#156#138#255#195#152#132#255#187#138't'#255#173'sY' + +#255#127'L5'#255'^3'#31#255'\0'#28#252'U3$,'#128#128#128#2#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#7 + +'[/'#27#229'^2'#31#255'qB.'#255#171'nS'#255#185#134'p'#255#194#151#131#255 + +#198#158#140#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160 + +#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200 + +#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255 + +#200#160#142#255#200#160#142#255#200#160#142#255'9.)'#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'hSJ'#255#200#160#142#255#200#160#142#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255'6+'''#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#6#5#5#255#184#148#131#255#200#160#142#255#200#160#142#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160 + +#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200 + +#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255 + +#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160 + +#142#255#200#160#142#255#200#160#142#255#199#159#141#255#198#157#139#255#192 + +#147#127#255#181#127'g'#255#161'dI'#255'd:&'#255'\1'#29#255'Z0'#29#171'@@@'#4 + +#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'q\1'#29#255'a6#'#255#143'W?'#255#177'za'#255 + +#191#144'|'#255#198#157#139#255#200#161#144#255#201#162#145#255#201#163#145 + +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163 + +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201 + +#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255 + +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255'=2,'#255#0#0 + ,#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255'!'#27#24#255#197#161#143#255#201#163#145#255 + +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#197#161#143 + +#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#1#1#1#255#149'zl'#255#201#163#145#255#201#163#145 + +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163 + +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201 + +#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255 + +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145 + +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163 + +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#162#145#255#200 + +#161#143#255#197#155#136#255#187#138'u'#255#173'rX'#255'|I3'#255'_4 '#255'\0' + +#28#253'W1 2'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#6'\0'#28#216'^2'#31#255 + +'i=)'#255#165'jP'#255#184#133'n'#255#196#152#134#255#201#162#145#255#202#164 + +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202 + +#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255 + +#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165 + +#148#255'E82'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#2#255#1#1#1#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'.&"'#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165 + +#148#255#146'wk'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'eRI'#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165 + +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202 + +#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255 + +#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165 + +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202 + +#164#147#255#200#160#143#255#193#148#128#255#180'~f'#255#151'^D'#255'a7$'#255 + +'\1'#29#255'Z0'#28#156'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +'D\0'#28#255'`5!'#255#128'N8'#255#175'v]'#255#190#143'{'#255#200#159#142#255 + +#203#165#150#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151 + +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167 + +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204 + +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255 + +#204#167#151#255'N?9'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'vaW'#255 + +#204#167#151#255#160#131'w'#255'cRI'#255'WG@'#255#168#137'|'#255#204#167#151 + +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167 + +#151#255#204#167#151#255#204#167#151#255#145'wk'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'G:4'#255#204#167 + +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204 + +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255 + +#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151 + +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167 + +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204 + +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255 + +#204#167#151#255#204#167#150#255#202#165#148#255#198#155#138#255#186#137's' + +#255#171'nU'#255'oB.'#255'^2'#31#255'\0'#28#235'V2"'#21#0#0#0#1#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#169'\1'#29#255'c9&'#255#155'aH'#255 + +#182#128'j'#255#195#152#133#255#202#164#148#255#205#169#154#255#206#169#155 + +#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169 + +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#206#169#155#255#206#169#155#255#206#169#155#255'VGA'#255#0#0#0#255#0#0#0#255 + ,#0#0#0#255#5#4#4#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169 + +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#206#169#155#255#152'}r'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#2#1#1#255'vaY'#255#206#169#155#255#206#169#155#255#206#169 + +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155 + +#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169 + +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#205#167#152#255#201#162#145#255#192#147#127#255#177'za'#255#138'T='#255'`6"' + +#255'\1'#29#255'[0'#29'e'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'[/'#27#27'\0'#28#243'^3'#31#255'pC/'#255#171'oU'#255#188#138'u' + +#255#199#158#141#255#205#169#154#255#207#171#157#255#207#172#158#255#207#172 + +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255'~i`'#255#0#0#0#255#0#0#0#255#0#0#0#255#22#18#16#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255'/''$'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#9#7#7#255 + +#164#136'~'#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#171#157#255#204 + +#167#151#255#196#153#136#255#183#131'l'#255#160'fK'#255'f;('#255']1'#30#255 + +'[/'#27#199'te^'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'[/'#27'q\0'#28#255'`6"'#255#130'P9'#255#177'x`'#255#192#146 + +#127#255#203#164#149#255#208#173#159#255#209#175#161#255#209#175#161#255#209 + +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255 + +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#199#167#153#255#0#0#0#255#0#0#0#255#0#0#0#255'.&#'#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209 + +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255 + +#209#175#161#255'*$!'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'"'#28#26#255#197#165#153#255 + +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209 + +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255 + +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#209#175#161#255#209#175#161#255#209#174#160#255#207#171#157#255#200 + +#160#144#255#188#139'w'#255#171'pV'#255'rD0'#255'^3'#31#255'\0'#28#250'\2'#30 + +'1'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'[/'#27#1'[/'#27#184']1'#30#255'c9&'#255#148'^E'#255#182#128'j'#255#197 + +#154#136#255#206#170#155#255#210#176#163#255#211#178#164#255#211#178#165#255 + +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165 + +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178 + ,#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#12#10#9#255#0#0#0#255#0#0#0#255'MA<'#255#211#178#165#255#211#178 + +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255 + +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165 + +#255#211#178#165#255#178#150#139#255'D95'#255#9#7#7#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'VIC'#255#211#178#165#255#211#178#165 + +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178 + +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255 + +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165 + +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178 + +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#211#178#165#255#211#178#164#255#209#176#162#255#204#167#151#255 + +#193#148#129#255#177'x`'#255#129'P9'#255'`6"'#255'\0'#28#255'[0'#28't'#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'[/'#27#21'\0'#28#229'^2'#31#255'i?+'#255#163'jP'#255#186#136 + +'s'#255#200#160#144#255#209#174#160#255#212#180#167#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255 + +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181 + +#169#255'.''%'#255#0#0#0#255',%#'#255#200#170#159#255#213#181#169#255#213#181 + +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255 + +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#139'vo'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'.''$'#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181 + +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255 + +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181 + +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#212#180#168#255#211#178#165#255#207#171#157#255 + +#197#155#137#255#182#128'j'#255#148']E'#255'c9&'#255']1'#30#255'[/'#27#179#0 + +#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'?\0'#28#252'_4 '#255'tF1'#255#172 + +'sY'#255#190#142'z'#255#203#165#150#255#211#178#164#255#213#183#170#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255 + +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#127'ng'#255'{ib'#255#214#184#172#255#214#184#172#255#214#184#172#255 + +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255' '#28#26#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#14#12#11#255#209#180#168#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255 + +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#213#182#169#255#209#176#161#255 + +#200#161#143#255#186#135'q'#255#161'gO'#255'h=*'#255'^2'#31#255'\0'#28#226'W' + +'-'#26#19#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'}\1'#29#255'`6"' + +#255'|M8'#255#175'x^'#255#192#147#127#255#205#170#154#255#213#181#169#255#215 + ,#185#173#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255 + +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216 + +#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255 + +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#187#162#151#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#2#255#180#156#146#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216 + +#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255 + +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216 + +#187#175#255#216#187#175#255#216#187#175#255#215#185#173#255#211#179#166#255 + +#202#165#148#255#188#139'w'#255#167'mU'#255'nC/'#255'^3'#31#255'\0'#28#251'Z' + +'.'#27';'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#2'[/'#27 + +#170'\1'#29#255'a7$'#255#130'Q<'#255#178'{c'#255#195#151#132#255#208#173#159 + +#255#215#185#173#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255 + +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178 + +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255 + +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255'.(&'#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128'oi'#255#217#189#178#255#217#189#178 + +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255 + +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178 + +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#188#177#255#213#183#170#255#205#168#153#255 + +#191#144'|'#255#170'rZ'#255'sF2'#255'`5!'#255'\0'#28#255'Z/'#27'g'#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#6'[/'#27 + +#188']1'#30#255'c9&'#255#136'V?'#255#180'~g'#255#197#154#136#255#209#176#162 + +#255#216#187#176#255#219#192#181#255#219#192#182#255#219#193#183#255#219#193 + +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219 + +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183 + +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193 + +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219 + +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#158#138#131#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#1#1#1#255#131'sm'#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183 + +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193 + +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219 + +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183 + +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#192 + +#182#255#218#191#180#255#215#185#173#255#207#172#156#255#193#147#128#255#174 + +'v^'#255'wJ6'#255'`6"'#255'\1'#29#255'[/'#27'~'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#12'[/'#27#203 + +']1'#30#255'c:'''#255#141'YC'#255#181#128'h'#255#198#155#138#255#210#177#164 + +#255#217#190#178#255#220#194#184#255#221#195#185#255#221#196#186#255#221#196 + +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186 + +#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196 + +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255're_'#255#0#0#0#255#0#0#0#255#4#4#4#255#160#142#134#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186 + +#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196 + +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186 + +#255#221#196#186#255#221#196#186#255#221#195#185#255#219#193#183#255#216#187 + +#175#255#207#172#158#255#194#148#130#255#176'x_'#255'{M8'#255'a6#'#255'\1'#29 + +#255'[/'#27#148#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#21'\0'#28#217']1'#30#255'c:''' + +#255#138'XB'#255#181#127'h'#255#197#156#137#255#211#178#164#255#218#191#180 + +#255#221#196#187#255#222#198#188#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255 + +#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189 + +#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#221#196#187#255 + +#6#6#5#255#10#9#8#255#188#167#159#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255 + +#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189 + +#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255 + +#222#198#188#255#221#196#186#255#217#188#177#255#208#173#159#255#193#149#129 + +#255#174'w^'#255'zM8'#255'a7$'#255'\1'#29#255'[/'#27#170'[/'#27#2#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'[/'#27' \0'#28#223']1'#30#255'c:'''#255#132'T?'#255#180 + +'~g'#255#197#155#136#255#211#178#164#255#219#193#181#255#223#198#189#255#224 + +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255 + +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201 + +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224 + +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255 + +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#134'xr'#255#205#184#176#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201 + +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224 + +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255 + +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201 + +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224 + +#201#192#255#224#201#192#255#223#200#191#255#222#197#187#255#217#189#178#255 + +#207#172#158#255#192#147#127#255#171'u\'#255'vI6'#255'a6#'#255'\1'#29#255'[/' + +#27#179'[/'#27#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#25'\' + +'0'#28#209']1'#30#255'c9&'#255#128'Q='#255#177'{c'#255#195#151#133#255#209 + +#176#162#255#219#192#181#255#223#200#191#255#225#203#194#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196 + +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204 + +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226 + +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196 + +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204 + +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226 + +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196 + +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204 + +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226 + +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#203#195#255#225#202#193#255#222#198#188 + +#255#217#188#177#255#206#169#155#255#191#144'|'#255#168'qY'#255'rG3'#255'`6"' + +#255'\1'#29#255'[/'#27#159'[/'#27#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0'[/'#27#15'\0'#28#193']1'#30#255'b8%'#255'yM8'#255#170 + +'u\'#255#192#146'~'#255#207#171#156#255#217#189#178#255#223#200#191#255#226 + +#205#197#255#227#206#198#255#228#207#199#255#228#207#199#255#228#207#199#255 + +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199 + +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207 + +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228 + +#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255 + +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199 + +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207 + +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228 + +#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255 + +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199 + +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207 + +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228 + +#207#199#255#228#207#199#255#227#206#198#255#226#204#196#255#222#198#188#255 + +#215#185#173#255#202#165#148#255#187#137'u'#255#159'jR'#255'nD0'#255'`6"'#255 + +'\1'#29#255'[/'#27#137#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#8'[/'#27#175'\1'#29#255'`6"'#255'n' + +'D0'#255#158'iR'#255#187#137'u'#255#202#165#148#255#215#186#174#255#223#199 + +#190#255#227#205#198#255#229#208#201#255#229#209#202#255#229#210#202#255#229 + +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255 + +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202 + +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210 + +#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229 + +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255 + +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202 + +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210 + +#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229 + +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255 + +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202 + +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#209 + +#202#255#228#207#201#255#226#204#197#255#221#196#187#255#212#180#168#255#198 + +#157#140#255#183#130'l'#255#143'^G'#255'g>+'#255'_4 '#255'\1'#29#254'[/'#27 + +'q'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/'#27#132'\1'#29#254'_4 '#255'g>+' + +#255#140'[F'#255#181#129'j'#255#198#155#138#255#211#178#165#255#221#195#185 + +#255#227#204#197#255#230#209#203#255#230#212#205#255#231#212#206#255#231#212 + +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231 + +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255 + +#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206 + +#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212 + +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231 + +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255 + +#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206 + +#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212 + +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231 + +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255 + +#231#212#206#255#231#211#206#255#230#211#205#255#229#209#201#255#225#203#194 + +#255#219#191#181#255#208#173#159#255#193#149#129#255#173'w`'#255'~Q='#255'c:' + +''''#255'^2'#31#255'\0'#28#238'[/'#27'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'[/'#27'F\0'#28#234'^2'#31#255'c:'''#255'zN:'#255#168's['#255 + +#190#143'{'#255#205#167#152#255#217#187#177#255#225#201#193#255#229#209#202 + +#255#232#213#207#255#232#214#209#255#233#215#210#255#233#215#210#255#233#215 + +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233 + +#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255 + +#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210 + +#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215 + +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233 + +#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255 + +#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210 + +#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215 + +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233 + +#215#210#255#232#215#209#255#232#214#208#255#231#212#206#255#228#207#201#255 + +#223#198#189#255#213#182#170#255#200#160#144#255#186#136'r'#255#158'iR'#255 + +'pE2'#255'a7$'#255']1'#30#255'\0'#28#201'[/'#27#31#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#26'\0'#28#193']1'#30#255'`' + +'6"'#255'iA.'#255#142']H'#255#179#128'h'#255#196#153#135#255#210#176#163#255 + +#220#194#184#255#227#205#198#255#231#212#206#255#233#216#211#255#234#217#212 + +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218 + +#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234 + +#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255 + +#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213 + +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218 + +#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234 + +#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255 + +#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213 + +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#217 + +#212#255#234#216#211#255#233#215#210#255#230#211#205#255#226#203#195#255#218 + +#190#179#255#206#170#155#255#192#146#127#255#172'v`'#255#129'S?'#255'e<)'#255 + +'_4 '#255'\1'#29#255'[/'#27#143'[/'#27#5#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/'#27#127'\0'#28 + +#248'^3'#31#255'c:'''#255'sI6'#255#158'kT'#255#186#136's'#255#200#160#143#255 + ,#213#180#169#255#222#197#187#255#229#208#201#255#232#214#209#255#234#218#213 + +#255#235#219#215#255#236#220#215#255#236#220#216#255#236#220#216#255#236#220 + +#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236 + +#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255 + +#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216 + +#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220 + +#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236 + +#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255 + +#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216 + +#255#236#220#216#255#236#220#215#255#235#219#215#255#234#217#212#255#232#213 + +#207#255#227#205#198#255#219#193#183#255#209#176#162#255#196#153#136#255#181 + +#129'l'#255#145'`K'#255'lB0'#255'a7$'#255']1'#30#255'\0'#28#231'[/'#27'O'#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'$\0'#28#185'\1'#29#255'`5!'#255 + +'f=*'#255#128'S>'#255#166'r['#255#188#139'v'#255#201#161#145#255#213#181#169 + +#255#223#197#189#255#229#209#202#255#233#216#210#255#235#219#215#255#236#221 + +#217#255#237#222#219#255#238#223#220#255#238#223#220#255#238#223#220#255#238 + +#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255 + +#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220 + +#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223 + +#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238 + +#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255 + +#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220 + +#255#237#222#219#255#237#222#218#255#236#221#217#255#235#218#214#255#232#214 + +#208#255#228#206#199#255#220#193#184#255#210#176#163#255#197#155#137#255#184 + +#134'o'#255#155'iR'#255'uI7'#255'c:'''#255'^3'#31#255'\1'#29#252'[/'#27#144 + +'[/'#27#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[' + +'/'#27'U\0'#28#228']1'#30#255'`6"'#255'g>,'#255#127'R?'#255#164'qZ'#255#188 + +#139'v'#255#200#159#144#255#211#179#166#255#220#194#184#255#228#206#199#255 + +#232#214#209#255#235#219#215#255#237#222#219#255#238#225#221#255#239#225#222 + +#255#239#225#222#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226 + +#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239 + +#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255 + +#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223 + +#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226 + +#223#255#239#226#223#255#239#226#223#255#239#225#222#255#238#225#221#255#238 + +#224#220#255#237#222#218#255#235#218#214#255#231#212#206#255#226#203#195#255 + +#218#191#180#255#209#174#160#255#197#154#136#255#184#132'o'#255#154'hR'#255 + +'uK8'#255'e;('#255'_4 '#255'\1'#29#255'\0'#28#197'[/'#27'/'#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +#12'[/'#27#134'\0'#28#242'^2'#31#255'a5#'#255'g>+'#255'|Q='#255#160'lV'#255 + +#184#133'p'#255#196#152#134#255#207#170#156#255#216#187#175#255#224#200#192 + +#255#230#210#203#255#234#216#211#255#236#220#216#255#238#224#220#255#239#226 + +#223#255#240#227#225#255#240#228#225#255#240#228#225#255#241#229#226#255#241 + +#229#226#255#241#229#226#255#241#229#226#255#241#229#227#255#241#229#227#255 + +#241#229#227#255#241#229#227#255#241#229#227#255#241#229#227#255#241#229#227 + +#255#241#229#227#255#241#229#227#255#241#229#226#255#241#229#226#255#241#229 + ,#226#255#241#229#226#255#240#228#225#255#240#228#225#255#240#227#224#255#239 + +#225#222#255#238#223#220#255#236#220#215#255#233#215#210#255#228#207#201#255 + +#222#196#187#255#213#183#170#255#204#166#150#255#192#147#127#255#179#127'i' + +#255#150'fO'#255'tI7'#255'e;('#255'`5!'#255']1'#30#255'\0'#28#223'[/'#27'`[/' + +#27#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#17'[/'#27#127'\0'#28#238']1' + +#30#255'`6"'#255'e<)'#255'rI6'#255#142'_J'#255#170'wa'#255#188#140'w'#255#199 + +#158#141#255#208#173#159#255#216#186#175#255#222#196#187#255#227#206#198#255 + +#232#213#208#255#235#219#214#255#237#222#218#255#238#224#220#255#239#226#223 + +#255#240#227#225#255#241#229#226#255#242#230#228#255#242#230#228#255#242#231 + +#229#255#242#231#229#255#242#231#229#255#242#231#229#255#242#231#229#255#242 + +#231#229#255#242#231#229#255#242#230#228#255#241#229#227#255#241#229#226#255 + +#240#227#225#255#239#225#222#255#238#224#220#255#236#221#217#255#234#218#213 + +#255#231#211#206#255#226#204#196#255#220#194#184#255#214#183#171#255#206#169 + +#155#255#196#153#135#255#185#135'r'#255#162'q['#255#134'XD'#255'lC1'#255'c:' + +''''#255'_4 '#255']0'#30#255'\0'#28#217'[/'#27'`[/'#27#4#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#13'[/'#27'w\0'#28#233 + +']1'#30#255'_4 '#255'b8%'#255'h?-'#255'zN;'#255#149'dP'#255#170'xa'#255#187 + +#137't'#255#194#150#131#255#202#164#148#255#210#176#163#255#216#187#175#255 + +#220#194#184#255#224#200#192#255#228#207#199#255#231#212#206#255#234#217#211 + +#255#236#220#215#255#236#222#217#255#237#222#219#255#238#223#220#255#238#223 + +#220#255#238#224#220#255#238#223#220#255#237#223#219#255#237#223#218#255#236 + +#221#217#255#235#219#215#255#233#216#210#255#230#211#204#255#227#204#197#255 + +#223#199#190#255#219#192#183#255#215#185#173#255#208#173#159#255#200#160#144 + +#255#192#146#127#255#183#133'o'#255#164's\'#255#142']J'#255'rI7'#255'f=*'#255 + +'a6#'#255'^3'#31#255'\1'#29#255'\0'#28#210'[/'#27'X[/'#27#2#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'[/'#27#5'[/'#27'P\0'#28#173'\1'#29#249']1'#30#255'`5!'#255'c9&'#255'g' + +'>,'#255'qH6'#255#133'YE'#255#153'iT'#255#172'yd'#255#186#136'q'#255#191#144 + +'}'#255#196#153#136#255#202#162#146#255#207#171#156#255#211#178#165#255#214 + +#183#171#255#216#186#175#255#217#188#177#255#218#190#179#255#219#191#182#255 + +#219#192#182#255#219#192#181#255#218#189#179#255#217#187#177#255#215#185#173 + +#255#213#182#169#255#210#176#163#255#205#169#154#255#200#160#144#255#195#151 + +#133#255#190#142'z'#255#183#132'o'#255#167'u_'#255#148'eP'#255#127'S@'#255'm' + +'E2'#255'f=*'#255'b7%'#255'_4 '#255']1'#30#255'\0'#28#235'[/'#27#147'[/'#27 + +'5'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[' + ,'/'#27#18'[/'#27'i\0'#28#199'\1'#29#254']1'#30#255'_4 '#255'a6#'#255'd9('#255 + +'g>,'#255'oF3'#255'}Q>'#255#138'[G'#255#149'fQ'#255#160'oZ'#255#170'xa'#255 + +#176'}h'#255#180#128'l'#255#183#133'p'#255#186#136's'#255#188#138'u'#255#188 + +#139'v'#255#187#138'u'#255#186#135'r'#255#183#132'n'#255#178#128'j'#255#174 + +'|e'#255#168'v`'#255#158'mW'#255#146'bN'#255#133'YE'#255'yM;'#255'mC1'#255'g' + +'>+'#255'c9&'#255'`6"'#255'^3'#31#255']1'#30#255'\0'#28#248'\0'#28#173'[/'#27 + +'O[/'#27#5#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#20'[/'#27'V\0'#28#153 + +'\0'#28#220'\1'#29#255']1'#30#255'^3'#31#255'`5!'#255'a7$'#255'c9&'#255'e;(' + +#255'f=*'#255'g>,'#255'i@.'#255'jB0'#255'mE2'#255'qH5'#255'tJ7'#255'qG5'#255 + +'lC1'#255'jA0'#255'h?-'#255'g>+'#255'e<)'#255'd:('#255'c9&'#255'a6#'#255'`5!' + +#255'^2'#31#255']1'#30#255'\1'#29#252'\0'#28#201'[/'#27#134'[/'#27'C[/'#27#8 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'[/'#27#31'[/'#27'_[/'#27#138'\0'#28#176'\0'#28#213'\0'#28 + +#248'\1'#29#255'\1'#29#255'\1'#29#255']1'#30#255'^2'#31#255'^2'#31#255'^3'#31 + +#255'^3'#31#255'^3'#31#255'^2'#31#255']1'#30#255']1'#30#255'\1'#29#255'\1'#29 + +#255'\1'#29#255'\0'#28#241'\0'#28#203'\0'#28#165'[/'#27#127'[/'#27'N[/'#27#15 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'[/'#27#2'[/'#27'![/'#27'E[/'#27'U[/'#27'a[/'#27'm[/'#27'y[/'#27 + +#134'\0'#29#141'[/'#27#130'[/'#27'v[/'#27'j[/'#27'^[/'#27'Q[/'#27'=[/'#27#23 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#128#0#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#224#0#0#3#255#255#255#255#255 + +#255#255#255#255#255#255#254#0#0#0#0'?'#255#255#255#255#255#255#255#255#255 + +#255#240#0#0#0#0#7#255#255#255#255#255#255#255#255#255#255#128#0#0#0#0#0#255 + +#255#255#255#255#255#255#255#255#254#0#0#0#0#0#0'?'#255#255#255#255#255#255 + +#255#255#248#0#0#0#0#0#0#15#255#255#255#255#255#255#255#255#224#0#0#0#0#0#0#3 + +#255#255#255#255#255#255#255#255#128#0#0#0#0#0#0#0#255#255#255#255#255#255 + +#255#254#0#0#0#0#0#0#0#0'?'#255#255#255#255#255#255#252#0#0#0#0#0#0#0#0#31 + +#255#255#255#255#255#255#240#0#0#0#0#0#0#0#0#7#255#255#255#255#255#255#224#0 + +#0#0#0#0#0#0#0#3#255#255#255#255#255#255#128#0#0#0#0#0#0#0#0#1#255#255#255 + +#255#255#255#0#0#0#0#0#0#0#0#0#0#127#255#255#255#255#254#0#0#0#0#0#0#0#0#0#0 + +'?'#255#255#255#255#252#0#0#0#0#0#0#0#0#0#0#31#255#255#255#255#248#0#0#0#0#0 + +#0#0#0#0#0#15#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0#7#255#255#255#255#224#0 + +#0#0#0#0#0#0#0#0#0#3#255#255#255#255#192#0#0#0#0#0#0#0#0#0#0#1#255#255#255 + +#255#128#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#127 + +#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0#127#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0 + +'?'#255#255#252#0#0#0#0#0#0#0#0#0#0#0#0#31#255#255#248#0#0#0#0#0#0#0#0#0#0#0 + +#0#15#255#255#240#0#0#0#0#0#0#0#0#0#0#0#0#7#255#255#240#0#0#0#0#0#0#0#0#0#0#0 + +#0#7#255#255#224#0#0#0#0#0#0#0#0#0#0#0#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0 + +#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0 + +#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#127#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#127#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?' + +#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#31#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#7#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3 + +#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#3#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15 + +#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#127#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#127#255#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#128#0#0#0#0#0#0#0#0 + +#0#0#0#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#1#255#255#192#0#0#0#0#0#0#0#0 + +#0#0#0#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0#0#3#255#255#224#0#0#0#0#0#0#0#0 + +#0#0#0#0#7#255#255#224#0#0#0#0#0#0#0#0#0#0#0#0#15#255#255#240#0#0#0#0#0#0#0#0 + +#0#0#0#0#15#255#255#248#0#0#0#0#0#0#0#0#0#0#0#0#31#255#255#248#0#0#0#0#0#0#0 + +#0#0#0#0#0'?'#255#255#252#0#0#0#0#0#0#0#0#0#0#0#0#127#255#255#252#0#0#0#0#0#0 + +#0#0#0#0#0#0#255#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#0#0#0 + +#0#0#0#0#0#0#0#1#255#255#255#255#128#0#0#0#0#0#0#0#0#0#0#3#255#255#255#255 + +#128#0#0#0#0#0#0#0#0#0#0#7#255#255#255#255#192#0#0#0#0#0#0#0#0#0#0#15#255#255 + +#255#255#224#0#0#0#0#0#0#0#0#0#0#31#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0 + +#31#255#255#255#255#248#0#0#0#0#0#0#0#0#0#0'?'#255#255#255#255#252#0#0#0#0#0 + +#0#0#0#0#0#127#255#255#255#255#254#0#0#0#0#0#0#0#0#0#1#255#255#255#255#255 + +#255#0#0#0#0#0#0#0#0#0#3#255#255#255#255#255#255#128#0#0#0#0#0#0#0#0#7#255 + +#255#255#255#255#255#224#0#0#0#0#0#0#0#0#15#255#255#255#255#255#255#240#0#0#0 + +#0#0#0#0#0#31#255#255#255#255#255#255#248#0#0#0#0#0#0#0#0#127#255#255#255#255 + +#255#255#254#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#128#0#0#0#0#0#0 + +#3#255#255#255#255#255#255#255#255#192#0#0#0#0#0#0#7#255#255#255#255#255#255 + +#255#255#240#0#0#0#0#0#0#31#255#255#255#255#255#255#255#255#252#0#0#0#0#0#0 + +#127#255#255#255#255#255#255#255#255#255#0#0#0#0#0#3#255#255#255#255#255#255 + +#255#255#255#255#224#0#0#0#0#15#255#255#255#255#255#255#255#255#255#255#252#0 + +#0#0#0#127#255#255#255#255#255#255#255#255#255#255#255#192#0#0#7#255#255#255 + +#255#255#255#255#255#255#255#255#255#254#0#1#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255'('#0#0#0'@'#0#0#0#128#0#0#0#1#0' '#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'III'#7'III'#7 + +'333'#5#128#128#128#2#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#6'DDD' + +#15'FFF'#22'EEE'#26'DDD'#30'III#GGG/DDD<DDD@CCC5FFF(BBB'#31'BBB'#27'@@@'#24 + +'GGG'#18'999'#9#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128 + +#128#2'999'#9'GGG'#18'DDD'#30'CCC9FFF_DDD'#127'EDD'#146'DDC'#159'EED'#170'DD' + +'C'#175'DDC'#178'DDC'#179'EED'#177'EED'#173'DCC'#164'EDD'#151'BBB'#136'CCCoC' + +'CCHCCC&CCC'#23';;;'#13'@@@'#4#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'777'#14'DDD"EEEFCCCoEDD'#150'DD' + +'C'#175'FFC'#187'GGC'#195'IFC'#200'LD<'#208'OB:'#215'RA6'#221'WA0'#226'TA3' + +#223'PB9'#218'MD<'#212'JD@'#206'IGD'#200'HGD'#197'EED'#191'DDC'#180'CCC'#163 + +'DDD'#128'DDDVGGG/III'#21'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#128#128#128#2'FFF'#11'BBB#CCCXEED'#149'EEB'#179'GFC'#191'MC<'#208'W?.'#228 + +'d=%'#246'i?!'#252'j?'#30#255'l?'#31#255'nA'#31#255'sF!'#253'zL%'#253'wG#' + +#253'oB!'#254'm@'#31#255'k>'#30#255'j>'#31#253'g>#'#249'[>+'#235'PB8'#218'HE' + +'C'#203'FEC'#195'EED'#184'DDD'#166'DDDqEEE4@@@'#20'@@@'#4#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1 + +'999'#9'BBB'#31'CCCPEDD'#143'FFE'#182'NB:'#211'Z?-'#231'g>#'#249'l?'#31#255 + +'zK$'#253#150']*'#255#165'h.'#255#172'm0'#255#180's2'#255#186'x4'#255#189'{4' + +#255#192#127'5'#255#190'|4'#255#187'x4'#255#182'u3'#255#175'p1'#255#167'j/' + +#255#156'b+'#255#131'R&'#254'oB '#255'i>!'#253'_>)'#238'S@6'#222'FEB'#203'DD' + +'C'#190'DDD'#164'CCCkCCC.PPP'#16'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'CCC'#19'BBBBDDD'#136'EED'#179'LA9' + +#209'`=&'#243'k?'#31#255#127'N&'#254#154'`,'#255#176'q1'#255#191'~5'#255#200 + +#138'7'#255#207#145'8'#255#210#149'9'#255#213#153'9'#255#217#157':'#255#219 + +#160';'#255#221#162';'#255#220#162':'#255#217#158':'#255#215#155':'#255#211 + +#151'9'#255#208#146'8'#255#203#141'8'#255#194#129'6'#255#183'v4'#255#163'f.' + +#255#137'U('#254'qC"'#254'f<!'#250'T?4'#224'GDB'#202'CCB'#188'DDD'#158'BBB`>' + +'>>!+++'#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'BBB'#27'CC' + +'C[CCB'#165'LD='#203']<('#238'j> '#255#135'R('#254#176'p3'#255#193#128'7'#255 + +#202#139'9'#255#211#151';'#255#220#162'<'#255#227#170'>'#255#232#176'?'#255 + +#234#180'?'#255#237#182'?'#255#239#185'@'#255#241#187'@'#255#242#188'A'#255 + +#241#187'@'#255#240#185'A'#255#238#183'@'#255#235#180'@'#255#233#178'?'#255 + +#229#173'>'#255#222#165'='#255#215#156'<'#255#205#144':'#255#196#133'8'#255 + +#185'x5'#255#152'^-'#255'oC"'#254'd<#'#247'QA7'#220'FFE'#200'CCC'#180'CCC}AA' + +'A/UUU'#9#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'CCC&DDDpECC'#180'X<,'#232'i=' + +'!'#254#128'O('#254#170'l3'#255#194#130':'#255#210#150'>'#255#220#163'?'#255 + +#227#171'A'#255#234#180'B'#255#240#187'D'#255#242#190'D'#255#244#193'E'#255 + +#246#194'D'#255#247#195'E'#255#248#197'E'#255#249#197'E'#255#249#198'E'#255 + +#249#197'E'#255#248#196'E'#255#247#195'E'#255#246#195'E'#255#245#194'D'#255 + +#243#191'D'#255#240#188'C'#255#236#183'C'#255#230#174'B'#255#223#165'@'#255 + +#215#156'?'#255#200#137';'#255#182'u6'#255#146'[,'#255'm@!'#254'`:%'#244'KA;' + +#211'CCC'#189'CCC'#144'BBB>PPP'#16#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'@@@4CCC'#133 + +'HD@'#192'_9$'#244'rE%'#254#164'h3'#255#191#127';'#255#206#146'?'#255#219#163 + +'C'#255#232#178'F'#255#238#185'G'#255#241#189'H'#255#244#193'H'#255#246#195 + +'I'#255#247#196'I'#255#247#197'J'#255#247#197'I'#255#247#198'I'#255#248#198 + +'I'#255#248#198'I'#255#248#197'I'#255#248#198'I'#255#248#198'I'#255#248#198 + +'I'#255#247#197'I'#255#247#197'I'#255#247#196'I'#255#246#196'I'#255#245#194 + +'H'#255#242#190'H'#255#239#187'H'#255#235#182'G'#255#224#168'D'#255#211#153 + +'A'#255#196#134'='#255#177'q7'#255#133'Q)'#254'e: '#253'N?7'#218'DDC'#195'CC' + +'C'#160'FFFP@@@'#20#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'III'#7'FFF3CCC'#145'LB;'#204'd:"'#250'|L('#254#180's9'#255 + +#202#143'A'#255#216#159'F'#255#228#174'I'#255#236#184'K'#255#241#191'L'#255 + +#243#193'M'#255#244#194'M'#255#244#195'M'#255#245#196'M'#255#245#195'M'#255 + +#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255 + +#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255 + +#245#195'M'#255#245#195'M'#255#245#196'M'#255#245#195'M'#255#244#194'M'#255 + +#243#194'M'#255#242#192'M'#255#238#186'L'#255#232#179'J'#255#220#165'F'#255 + +#208#150'C'#255#190#127'<'#255#147'[.'#255'h< '#255'S=1'#228'EED'#199'DDD' + +#168'BBBUGGG'#18#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'@@@'#4'FFF(EEE'#134'P?5'#212'e:!'#254#137'U,'#254#186'z='#255#208#150'E'#255 + +#224#171'L'#255#233#181'O'#255#238#187'P'#255#240#191'P'#255#242#192'Q'#255 + +#242#193'Q'#255#242#193'Q'#255#242#193'P'#255#242#193'Q'#255#242#193'Q'#255 + +#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255 + ,#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255 + +#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255 + +#242#193'Q'#255#242#193'Q'#255#241#192'Q'#255#239#189'P'#255#234#184'O'#255 + +#228#175'M'#255#215#159'I'#255#194#132'@'#255#160'd3'#255'k?"'#254'X:*'#236 + +'FDC'#201'CCC'#164'AAAG;;;'#13#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U' + +'UU'#3'BBB'#31'CCCvO=3'#211'f:'#31#255#150']2'#255#190#128'A'#255#211#155'I' + +#255#226#175'Q'#255#234#185'S'#255#237#188'T'#255#238#190'T'#255#239#191'U' + +#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U' + +#255#239#191'U'#255#239#191'U'#255#235#189'S'#255'|d,'#255'N>'#28#255'4*'#19 + +#255'=1'#22#255'WE'#31#255'w_*'#255#173#139'='#255#239#191'U'#255#239#191'U' + +#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U' + +#255#239#191'U'#255#239#191'U'#255#239#190'T'#255#238#189'U'#255#236#187'S' + +#255#230#179'R'#255#217#162'L'#255#198#138'D'#255#170'l8'#255'pC$'#254'Z8''' + +#240'DBB'#197'CCC'#153'FFF:@@@'#8#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#22 + +'BBBeJ?9'#195'b8 '#254#150']2'#255#194#133'E'#255#213#158'N'#255#226#176'T' + +#255#233#185'W'#255#236#187'W'#255#236#188'X'#255#236#188'X'#255#236#188'X' + +#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X' + +#255#236#188'X'#255'cO%'#255#4#3#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#18#14#7#255'A4'#24#255#134'k2' + +#255#218#174'R'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X' + +#255#236#188'X'#255#236#188'X'#255#236#187'W'#255#234#186'W'#255#229#180'U' + +#255#218#165'P'#255#201#143'H'#255#173'o<'#255'k>#'#254'S;-'#231'CCC'#193'CC' + +'C'#141'DDD-fff'#5#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#12'DDDKFA='#179'`7 '#251#137'S-' + +#255#192#131'E'#255#214#161'Q'#255#226#176'W'#255#231#183'Y'#255#233#185'[' + +#255#233#186'['#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z' + +#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255'L<'#29#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#7#3#255'P' + +'?'#31#255#203#161'N'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234 + +#185'Z'#255#233#186'['#255#232#183'Z'#255#228#178'Y'#255#219#167'T'#255#201 + +#143'K'#255#163'g8'#255'f: '#255'O=4'#222'DDD'#188'CCCzBBB'#27#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U' + +'UU'#3'GGG$D@@'#147'\6#'#245'{I*'#254#185'{C'#255#211#157'R'#255#225#175'Z' + +#255#229#181'\'#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']' + +#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']' + +#255#230#183']'#255#138'm8'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#24#20#10#255'x_0' + +#255#226#181'['#255#230#183']'#255#230#183']'#255#230#183']'#255#230#181'\' + +#255#227#177'['#255#217#165'V'#255#196#136'J'#255#151']4'#255'b8 '#254'K@9' + +#214'CCC'#175'AAAJ...'#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#16'CCC\V6'''#228'nA&'#254#178'tA'#255#205 + +#151'R'#255#221#172'\'#255#226#179'_'#255#228#180'_'#255#228#180'_'#255#228 + +#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228 + +#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#17#13#7#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255'H9'#30#255#224#178']' + +#255#228#180'_'#255#228#180'_'#255#227#179'^'#255#224#175']'#255#213#160'W' + +#255#190#129'H'#255#137'T/'#255'^4 '#252'FB?'#201'CCC'#140'DDD"'#0#0#0#3#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'FFF,J=7' + +#175'`4'#30#255#165'g;'#255#200#144'Q'#255#217#166'\'#255#223#176'`'#255#225 + +#177'`'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225 + +#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225 + +#177'a'#255#218#171'^'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#11#9#5#255#196#154'U'#255#225#177'a'#255#225#177 + +'`'#255#224#177'a'#255#220#171'^'#255#208#154'W'#255#184'{F'#255'nA%'#254'T8' + +'*'#233'DDD'#180'CCCX333'#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'CCC'#19'CCCjY5#'#239'~J,'#254#191#132'M'#255#213#162']'#255 + ,#220#171'a'#255#221#173'c'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255 + +#222#174'b'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255 + +#222#174'b'#255#222#174'b'#255#222#174'b'#255#154'yC'#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#15#11#6 + +#255#218#172'`'#255#222#174'b'#255#222#174'b'#255#221#173'b'#255#217#167'_' + +#255#202#146'T'#255#156'a9'#255'^4'#30#254'G@='#206'DDD'#151'>>>)@@@'#4#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'AAA+L;4'#188'b6 '#254#170 + +'l@'#255#206#152'Z'#255#217#168'b'#255#219#171'd'#255#219#171'd'#255#219#171 + +'d'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171 + +'d'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171 + +'d'#255#219#171'd'#255#26#20#12#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'oW3'#255#219#171'd'#255#219 + +#171'd'#255#219#171'd'#255#218#169'c'#255#212#161'_'#255#187#127'L'#255'uD)' + +#254'W6('#238'CCC'#182'CCC[III'#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'@@@'#12'EBBS[3'#31#244#134'O/'#255#192#134'Q'#255#212#162'b'#255#215 + +#167'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216 + +#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216 + +#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#198 + +#154'\'#255#5#4#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'!'#25#15#255#216#168'd'#255#216#168'd'#255#216#168 + +'d'#255#216#168'd'#255#214#166'd'#255#202#147'Y'#255#161'e='#255'^2'#29#255 + +'J?:'#208'CCC'#137'EEE'#26#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'C' + +'CC'#23'O9/'#171'`3'#31#254#174'pD'#255#203#150']'#255#212#163'e'#255#213#164 + +'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164 + +'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164 + +'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164 + +'e'#255#173#133'R'#255#3#2#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#22#17#11#255#213#164'e'#255#213#164'e'#255#213#164 + +'e'#255#213#164'e'#255#213#164'f'#255#209#158'a'#255#187#128'O'#255'yD)'#254 + +'W4$'#241'BBB'#169'DDD1@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF(W4' + +'$'#229'{E)'#255#191#134'T'#255#207#157'c'#255#210#160'f'#255#210#160'f'#255 + +#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255 + +#210#160'f'#255#152'tJ'#255'[E,'#255'K9$'#255'{]<'#255#196#149'_'#255#210#160 + +'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#159'yM' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'"' + +#26#17#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210 + +#160'f'#255#209#160'e'#255#199#146']'#255#156'_;'#255'\1'#28#254'FBA'#188'FF' + +'FXNNN'#13#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FFF'#11'F@=T\/'#28#253#151'\9'#255 + +#200#147'_'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255 + +#207#156'e'#255#207#156'e'#255#207#156'e'#255#178#135'W'#255'$'#27#17#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'N:&'#255#207#156'e'#255#207 + +#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#3#2#1#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'uX9'#255#207#156'e'#255#207 + +#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#207#157'e'#255#204 + +#153'b'#255#180'wK'#255'a4'#30#254'M;3'#216'DDD'#132'==='#25#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'CCC'#19'N9.'#159'^2'#30#254#176'rI'#255#202#150'c'#255#203 + +#153'e'#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203 + +#153'f'#255#163'zQ'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#29#22#15#255#203#153'f'#255#203#153'f'#255#203#153 + +'f'#255#203#153'f'#255#14#10#7#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + ,#0#0#255#4#3#2#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#153'f' + +#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#152'e'#255#190#134'X' + +#255'yC)'#254'V5&'#239'DDD'#165'FFF('#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0 + +'GGG'#25'V4%'#212's@&'#254#186#128'U'#255#199#148'd'#255#200#148'd'#255#200 + +#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255#198#146'd'#255#12#9 + +#6#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#138'fE'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255 + +#15#11#7#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'&'#28#19#255#145'kH'#255 + +#200#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255 + +#200#148'd'#255#200#148'd'#255#200#148'd'#255#194#141'^'#255#146'W6'#255'[0' + +#28#254'EBB'#178'CCC9UUU'#6#0#0#0#0#0#0#0#0#0#0#0#0'JAA'#31'\1'#29#249#140'P' + +'2'#255#190#135'\'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143 + +'c'#255#196#143'c'#255#196#143'c'#255'>-'#31#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'&' + +#28#19#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#25#18#12#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1 + +#255'*'#31#21#255'kM6'#255#187#137'_'#255#196#143'c'#255#196#143'c'#255#196 + +#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196 + +#143'c'#255#196#143'c'#255#196#143'c'#255#194#141'b'#255#170'kF'#255'\0'#28 + +#254'L<5'#203'CCCH333'#10#0#0#0#0#0#0#0#0#0#0#0#1'K3+@[/'#27#255#160'`>'#255 + +#190#136'_'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255 + +#191#137'`'#255#189#135'`'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#30#21#15#255 + +#191#137'`'#255#191#137'`'#255#191#137'`'#255'aF1'#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#5#3#2#255#165'vS'#255#191#137'`' + +#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`' + +#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`' + +#255#191#137'`'#255#191#137'`'#255#191#136'`'#255#178'vQ'#255'h7 '#253'Q8,' + +#220'DDDV;;;'#13#0#0#0#0#0#0#0#0'UUU'#3'R4''^[/'#27#255#169'hF'#255#187#131 + +']'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132 + +'^'#255'uS;'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'{W>'#255#187#132'^'#255 + +#187#132'^'#255#187#132'^'#255#185#130'^'#255#19#14#10#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#158'oO'#255#187#132'^'#255#187#132'^' + +#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^' + +#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^' + +#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#181'{V'#255'r<"'#255'T6''' + +#228'BBBd@@@'#16#0#0#0#0#0#0#0#0'UUU'#6'T5''}_2'#30#253#171'kI'#255#183'}Z' + +#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255'. '#23#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#1#1#0#255'S9)'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z' + +#255#183'~Z'#255#173'xV'#255#31#21#15#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'b' + +'C0'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z' + +#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255 + +#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#181'zV'#255'zA%'#255'X4$' + +#237'DDDqCCC'#19#0#0#0#0#0#0#0#0'@@@'#8'U4%'#149'f5'#31#252#172'mK'#255#180 + +'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#6#4#3 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#19#13#9#255#153'gK'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX' + +#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255'{S<'#255'+'#29#21#255#7 + +#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1 + +#255'gF3'#255#180'yX'#255#180'yX'#255#180'yX'#255#139']D'#255'+'#29#21#255#8 + +#6#4#255#8#6#4#255#16#11#8#255'W:*'#255#178'wV'#255#180'yX'#255#180'yX'#255 + +#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#179'yV'#255#131 + +'F+'#255'[3!'#245'CCCyIII'#21#0#0#0#0#0#0#0#0'UUU'#6'X3"'#165'n:"'#253#172'p' + +'O'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#173'uU' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1 + +#0#0#255'P6'''#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW' + ,#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255 + +#177'wW'#255#177'wW'#255#158'jM'#255'W;+'#255''''#26#19#255'"'#23#17#255'%' + +#25#18#255'W:+'#255#167'qS'#255#177'wW'#255#177'wW'#255#177'wW'#255'@+'#31 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#3#2#1#255 + +#149'dI'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177 + +'wW'#255#177'vV'#255#139'M0'#255'[1'#30#250'DDDpCCC'#19#0#0#0#0#0#0#0#0'UUU' + +#3'Y1'#31#182'v>%'#255#172'oQ'#255#175'tW'#255#175'tW'#255#175'tW'#255#175't' + +'W'#255#175'tW'#255'}S?'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#26#17#13#255#150'cK'#255#175'tW'#255#175'tW'#255#175'tW'#255 + +#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175 + +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW' + +#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255 + +#175'tW'#255'dC2'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#9#6#4#255#169'pU'#255#175'tW'#255#175'tW'#255#175't' + +'W'#255#175'tW'#255#175'tW'#255#174'sU'#255#145'S6'#255']0'#28#254'DBBd@@@' + +#16#0#0#0#0#0#0#0#0#0#0#0#0'Z0'#30#175'v=%'#255#171'nP'#255#174'rV'#255#174 + +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255'L2&'#255#0#0#0#255'/'#31#23#255 + +'}R>'#255' '#21#16#255'!'#22#17#255#139'[E'#255#174'rV'#255#174'rV'#255#174 + +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV' + +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255 + +#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174 + +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255'?*'#31#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'6#'#27 + +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#173'qT'#255 + +#145'S7'#255'\1'#29#254'AAAV;;;'#13#0#0#0#0#0#0#0#0#0#0#0#0'Z1'#30#150'n;$' + +#252#169'jM'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +#149'bI'#255'@* '#255#170'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +'G/#'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#24#16#12#255#172'qU'#255#172'qU'#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#171'oS'#255#138'N3'#255'\2'#31#249'DDDG999'#9#0#0#0#0#0 + +#0#0#0#0#0#0#0'X1!|g7#'#250#167'gI'#255#172'pT'#255#172'qU'#255#172'qU'#255 + +#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#172'qU'#255'P5('#255')'#27#20#255#27#18#13#255'5#'#26#255'pJ8'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +#172'qU'#255#172'qU'#255#162'jO'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#9#6#4#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#170'mR'#255#131'I.'#255'[4"'#241 + +'FFF7UUU'#6#0#0#0#0#0#0#0#0#0#0#0#0'Y1!`b5 '#251#164'cG'#255#172'pU'#255#173 + +'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW' + +#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255 + +#173'rW'#255'}S?'#255#9#6#5#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#16#11#8#255#152'dM'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255 + +#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173 + +'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255'$'#24#18#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2#255#173'r' + +'W'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#170'mQ'#255'|C*'#255 + +'W4$'#229'CCC&'#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0'X5!A^2'#31#254#162'bE'#255 + +#173'rV'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175 + +'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY' + +#255#175'tY'#255'{Q?'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#14#9#7#255#173'tY'#255#175'tY'#255#175'tY'#255 + +#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175 + +'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#132'XC'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#21 + +#14#11#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#174'tY'#255#170'm' + +'P'#255't?('#254'U5&'#203'@@@'#24#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X0'#24' ^2' + +#31#255#156'\A'#255#175'v\'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`' + +#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255 + ,#177'y`'#255#177'y`'#255#177'y`'#255#11#8#6#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#136']J'#255#177 + +'y`'#255#177'y`'#255'7%'#30#255#9#6#5#255#13#9#7#255#16#11#9#255#26#18#14#255 + +#139'_K'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177 + +'y`'#255#18#12#9#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'<)!'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#176 + +'x^'#255#169'kP'#255'j<&'#253'U4%'#168';;;'#13#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0'^2'#29#234#136'O4'#255#176'x^'#255#180'~f'#255#180'~f'#255#180'~f' + +#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255 + +#180'~f'#255#180'~f'#255#180'~f'#255#146'gS'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#139'bO'#255#170'x`'#255#20#14#11#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255']A4'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255 + +#180'~f'#255'qO@'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#1#1#0#255#165't^'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255 + +#178'zb'#255#162'dH'#255'_3'#31#254'R6)c@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0'[/'#29#153'r?)'#252#174'sZ'#255#182#129'j'#255#183#131'l'#255#183 + +#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183 + +#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255'ZA5' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#5#3#3#255#179#127'j'#255'uTE'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'{XI'#255#183#131'l' + +#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#20#15#12#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255':)"'#255#183#131'l'#255 + +#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#179'|c'#255#140 + +'R9'#255'\2'#31#248'@@6'#28#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'[/'#29'E`5 '#252#166'iO'#255#183#131'l'#255#186#136'q'#255#186#136'q'#255 + +#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255 + +#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255'\D8'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'oQC'#255#186#136'q'#255'X@6'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#12#9#7#255#186#136'q'#255#186 + +#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#148'lZ'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#169'|g'#255#186#136'q'#255#186 + +#136'q'#255#186#136'q'#255#186#136'q'#255#185#134'q'#255#177'y`'#255'tB+'#254 + +'W2!'#194'III'#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@'#0#4'^3' + +#30#245#144'W='#255#184#134'o'#255#189#141'x'#255#189#141'x'#255#189#141'x' + +#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x' + +#255#189#141'x'#255#189#141'x'#255#189#141'x'#255'tWJ'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'('#30#26#255 + +#189#141'x'#255#189#141'x'#255'?/('#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#187#139'v'#255#189#141 + +'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#172#128 + +'m'#255'_G<'#255#1#0#0#255#0#0#0#255'-"'#28#255#189#141'x'#255#189#141'x'#255 + +#189#141'x'#255#189#141'x'#255#189#141'x'#255#186#137's'#255#171'oU'#255'a6"' + +#253'T5$jUUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\/' + +#27#170'vD,'#252#181#128'h'#255#190#144'{'#255#192#146'~'#255#192#146'~'#255 + +#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255 + +#192#146'~'#255#192#146'~'#255#192#146'~'#255#186#142'z'#255#1#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255#186#142'z' + +#255#192#146'~'#255#192#146'~'#255'=.('#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#192#146'~'#255#192 + +#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192 + +#146'~'#255#192#146'~'#255#0#0#0#255#0#0#0#255#167#127'n'#255#192#146'~'#255 + +#192#146'~'#255#192#146'~'#255#192#146'~'#255#191#145'}'#255#186#137's'#255 + +#149'[A'#255'^1'#31#250'F:.'#22#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'\.'#28'H`5 '#252#164'jP'#255#190#143'z'#255#194#151#131 + +#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151 + +#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194 + +#151#131#255#27#21#18#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255' '#25#21#255#194#151#131#255#194#151#131#255#194#151#131#255'7*%' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#12#9#8#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151 + +#131#255#194#151#131#255#194#151#131#255#194#151#131#255#190#149#129#255#0#0 + ,#0#255'0% '#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131 + +#255#194#151#131#255#192#147#127#255#180'~f'#255'q@+'#252'Z0'#29#180#0#0#0#2 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0']0' + +#28#199'{H2'#252#184#134'o'#255#196#153#134#255#197#156#137#255#197#156#137 + +#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156 + +#137#255#197#156#137#255#197#156#137#255#197#156#137#255'G81'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'WE='#255#197#156#137#255#197 + +#156#137#255#191#152#133#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#135'k^'#255#197#156#137#255#197 + +#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255 + +#197#156#137#255#197#156#137#255#16#12#11#255#174#138'y'#255#197#156#137#255 + +#197#156#137#255#197#156#137#255#197#156#137#255#197#155#136#255#191#145'|' + +#255#151'_F'#255'^3'#31#253'T2!-'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[0'#29'5_4 '#254#161'hP'#255#195#152#132 + +#255#200#161#143#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161 + +#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200 + +#161#144#255'xaW'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1 + +#255#171#138'{'#255#200#161#144#255#200#161#144#255#127'f\'#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255')!'#30#255 + +#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144 + +#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#153'{n' + +#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161 + +#144#255#198#156#138#255#181#128'h'#255'l>*'#252'Z1'#30#159#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0'^0'#27#173'uE/'#249#186#136'r'#255#201#162#145#255#203#165#150#255#203#165 + +#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203 + +#165#150#255#203#165#150#255#203#165#150#255#163#132'x'#255#0#0#0#255#0#0#0 + +#255#26#21#19#255',$!'#255'-%!'#255#156'~s'#255#203#165#150#255#203#165#150 + +#255#203#165#150#255'@4/'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#4#3#3#255#186#151#138#255#203#165#150#255#203#165 + +#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203 + +#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255 + +#203#165#150#255#203#165#150#255#203#165#150#255#203#164#149#255#195#152#132 + +#255#146'\D'#255'_3'#31#247'R3'#30#25#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z-'#30'"^4 '#252#155 + +'cK'#255#196#153#136#255#206#169#155#255#207#171#156#255#207#171#156#255#207 + +#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255 + +#207#171#156#255#203#167#152#255#0#0#0#255#0#0#0#255#193#159#145#255#207#171 + +#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207 + +#171#156#255'E94'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#15#12#11#255#182#150#137#255#207#171#156#255#207#171#156#255#207#171#156 + +#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171 + +#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207 + +#171#156#255#207#171#156#255#206#170#155#255#201#162#145#255#178'}f'#255'h<(' + +#250'[0'#28#129#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0']1'#29#130'f:&'#250#171'u' + +'^'#255#202#164#148#255#210#176#163#255#210#177#164#255#210#177#164#255#210 + +#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255 + +#210#177#164#255#2#1#1#255#27#22#21#255#210#177#164#255#210#177#164#255#210 + +#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255 + +#210#177#164#255'I=8'#255#6#5#4#255#0#0#0#255#0#0#0#255#0#0#0#255'''!'#31#255 + +#206#175#162#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164 + +#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177 + +#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210 + +#177#164#255#210#176#163#255#206#170#155#255#188#139'w'#255'zI4'#252'^2'#29 + +#222']/'#23#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'^1'#29#181'oA-' + +#249#182#132'n'#255#208#173#159#255#213#182#169#255#213#183#170#255#213#183 + +#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213 + +#183#170#255#12#10#9#255#159#136#127#255#213#183#170#255#213#183#170#255#213 + +#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255 + +#213#183#170#255#213#183#170#255#139'xo'#255#0#0#0#255#0#0#0#255'% '#30#255 + +#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170 + +#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183 + ,#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213 + +#183#170#255#213#183#170#255#211#178#165#255#196#152#134#255#136'T?'#254'`1 ' + +#243'U+'#28'$'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U+'#21#12 + +']2'#30#218'zK5'#251#192#146#127#255#212#180#168#255#216#187#176#255#217#188 + +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217 + +#188#177#255'o`Z'#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188 + +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217 + +#188#177#255#217#188#177#255#27#24#22#255#0#0#0#255#9#8#7#255#209#180#171#255 + +#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177 + +#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188 + +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217 + +#188#177#255#215#185#173#255#202#163#147#255#152'cM'#255'`5 '#252'X.'#27'B'#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#23'!_' + +'3 '#241#135'V@'#254#197#155#137#255#215#185#173#255#219#193#183#255#220#194 + +#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220 + +#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255 + +#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184 + +#255#220#194#184#255#4#4#4#255#13#11#11#255#197#173#164#255#220#194#184#255 + +#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184 + +#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194 + +#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#183#255#218 + +#190#179#255#205#169#154#255#165'pY'#255'b8$'#252'[/'#27'h'#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Y1'#28'?_' + +'3!'#249#132'T?'#252#193#148#130#255#215#186#174#255#223#198#189#255#223#200 + +#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223 + +#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255 + +#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191 + +#255#199#179#171#255#215#192#183#255#223#200#191#255#223#200#191#255#223#200 + +#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223 + +#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255 + +#223#200#191#255#223#200#191#255#223#199#190#255#219#192#183#255#203#165#150 + +#255#158'kS'#255'c9%'#251']0'#30#147#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z-'#25'3_3'#30 + +#234'wI5'#250#185#138'v'#255#215#186#174#255#225#203#194#255#227#205#197#255 + +#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197 + +#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205 + +#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227 + +#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255 + +#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197 + +#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#226#204 + +#196#255#220#194#183#255#200#159#143#255#144'_H'#254'a6"'#253'\1'#30'y'#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\3'#31#25'^2'#29#207'nB.'#249#175'~i'#255 + +#213#182#169#255#225#202#193#255#230#209#203#255#230#211#205#255#230#211#205 + +#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211 + +#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230 + +#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255 + +#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205 + +#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#210 + +#204#255#227#205#198#255#219#191#181#255#193#149#131#255#131'R='#251'_4 '#247 + +'Z0'#26'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'` '#8']0' + +#28#169'e:'''#250#148'aL'#255#196#153#136#255#220#193#183#255#229#209#202#255 + +#233#216#210#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211 + +#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216 + +#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234 + +#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255 + +#234#216#211#255#234#216#211#255#234#216#211#255#233#216#211#255#231#212#206 + ,#255#224#200#192#255#207#171#156#255#168'va'#255'rE1'#249'^3'#31#230'Y,'#28 + +'.'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'^1'#29'h`3'#31#237'nA/'#249#158'mW'#255#203#165#150#255#224#201#192 + +#255#232#213#208#255#235#219#215#255#237#222#218#255#237#222#218#255#237#222 + +#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237 + +#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255 + +#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218 + +#255#236#220#216#255#233#216#211#255#228#206#200#255#213#182#170#255#177#131 + +'n'#255'}M:'#250'a6"'#253']1'#29#155'U1'#24#21#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#23#11 + +']1'#29'~`5!'#246'tF5'#249#166'u`'#255#202#164#148#255#221#195#186#255#230 + +#210#203#255#234#218#213#255#238#224#220#255#240#227#224#255#240#227#225#255 + +#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225 + +#255#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225#255#239#225 + +#222#255#236#220#215#255#232#213#207#255#225#203#194#255#210#176#164#255#183 + +#138'u'#255#133'UA'#252'c9&'#254'^2'#30#178'\.'#26''''#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U1'#24#21']0'#30#147'`7"'#251'jA-'#249#133'UA' + +#253#169'zf'#255#201#162#146#255#220#194#184#255#230#211#205#255#233#215#210 + +#255#234#217#212#255#236#220#215#255#237#222#218#255#238#223#220#255#237#222 + +#219#255#236#220#216#255#234#219#213#255#233#216#211#255#231#213#206#255#225 + +#203#194#255#209#174#160#255#181#136'u'#255#145'`L'#255'sG4'#249'c9&'#255'_2' + +#30#198'].'#28'7'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0'U+'#28#18'\.'#27'^_1'#30#179'c7$'#248'h?,'#251#127 + +'Q;'#251#148'dN'#255#163't_'#255#175#129'n'#255#186#143'~'#255#198#157#141 + +#255#204#167#151#255#201#161#145#255#191#149#132#255#179#135'u'#255#167'ye' + +#255#153'iT'#255#136'WC'#254'pE2'#249'c9&'#255'_3'#31#212'Z/'#27'|].'#29','#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U9'#28#9'\.'#26'N^0'#29#157'`' + +'4 '#203'c6#'#230'c7%'#249'd:('#255'f=*'#255'i?-'#252'g>+'#255'e;('#255'd9&' + +#253'b7$'#237'a5!'#214'_1'#30#180'\/'#26'lX,'#26#29#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'`0 '#16'[1'#24'*].'#27'B]1'#29'4\3'#31#25'UU'#0#3#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#248#15#255 + +#255#255#255#255#254#0#0#127#255#255#255#255#240#0#0#7#255#255#255#255#192#0 + +#0#1#255#255#255#255#0#0#0#0#255#255#255#252#0#0#0#0'?'#255#255#248#0#0#0#0 + +#31#255#255#240#0#0#0#0#7#255#255#192#0#0#0#0#3#255#255#128#0#0#0#0#1#255#255 + +#128#0#0#0#0#0#255#255#0#0#0#0#0#0#127#254#0#0#0#0#0#0#127#252#0#0#0#0#0#0'?' + +#252#0#0#0#0#0#0#31#248#0#0#0#0#0#0#31#248#0#0#0#0#0#0#15#240#0#0#0#0#0#0#15 + ,#240#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#3#192 + +#0#0#0#0#0#0#3#192#0#0#0#0#0#0#3#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0 + +#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0 + +#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0 + +#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#3#192#0#0#0#0#0#0#3 + +#224#0#0#0#0#0#0#3#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#240 + +#0#0#0#0#0#0#15#240#0#0#0#0#0#0#15#248#0#0#0#0#0#0#31#248#0#0#0#0#0#0#31#252 + +#0#0#0#0#0#0'?'#252#0#0#0#0#0#0#127#254#0#0#0#0#0#0#127#254#0#0#0#0#0#0#255 + +#255#0#0#0#0#0#1#255#255#128#0#0#0#0#3#255#255#192#0#0#0#0#7#255#255#224#0#0 + +#0#0#15#255#255#240#0#0#0#0#31#255#255#248#0#0#0#0'?'#255#255#254#0#0#0#0#127 + +#255#255#255#0#0#0#1#255#255#255#255#192#0#0#7#255#255#255#255#240#0#0#31#255 + +#255#255#255#254#0#0#255#255#255#255#255#255#248#31#255#255#255#255#255#255 + +#255#255#255#255#255'('#0#0#0'0'#0#0#0'`'#0#0#0#1#0' '#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'333'#5'UUU'#6'III'#7'@@@'#8'@@@'#8'III'#7 + +'UUU'#6'333'#5'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@' + +#4'@@@'#8'@@@'#16'DDD1BBBMCCC_FCCrDBB'#129'FDD'#133'CCCvCCCcDDDRDDD<FFF'#22 + +'333'#10'333'#5#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'FFF'#22'CCCEDAA|CCB'#173'FEC'#194'IGC'#198 + +'KE?'#204'QD:'#211'TC4'#218'SD6'#216'OD<'#209'JD@'#201'HGD'#197'FEC'#195'DDC' + +#184'DDD'#139'EEEUDDD"999'#9#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#1'+++'#6'FFF'#22'BBBaDDC'#175'JEA'#198'TB5'#218'a>('#240'l@!'#252'qE!' + +#253'yJ$'#252#129'R&'#252#138'X)'#253#134'T('#253'}N%'#252'uG#'#252'oC"'#253 + +'h=#'#248'Z>.'#230'OC;'#211'FEC'#198'DDC'#187'BBB|CCC&999'#9#0#0#0#1#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#2'<<<'#17'CCCWEED'#170'OB9'#211'd=&'#244'qE"'#253#137'V)'#253 + +#164'h.'#255#186'y3'#255#194#130'5'#255#198#135'6'#255#203#140'7'#255#207#145 + +'8'#255#205#143'7'#255#201#137'7'#255#196#132'6'#255#192#127'5'#255#177'r1' + +#255#152'_+'#254'{L%'#252'k?"'#251'[>-'#233'IEA'#203'EDD'#184'DDDq<<<'#30'@@' + +'@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0'@@@'#4'BBB#EDD'#146'KB<'#205'a='''#242'yK&'#252#166'i/'#255#192#128'6' + +#255#205#143'9'#255#217#159'<'#255#226#169'>'#255#230#173'>'#255#232#176'>' + +#255#235#180'?'#255#237#182'@'#255#236#181'?'#255#234#178'>'#255#231#175'>' + +#255#228#171'>'#255#223#165'<'#255#211#150':'#255#199#136'8'#255#182'v5'#255 + +#146'\,'#253'k@"'#252'W?1'#227'GFE'#199'CCC'#171'???=@@@'#8#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#7'DDD8ECB'#170'[>,'#234'sF$' + +#252#160'e0'#255#196#133';'#255#216#158'@'#255#227#170'A'#255#234#180'C'#255 + +#241#189'D'#255#245#193'E'#255#246#195'F'#255#247#195'F'#255#247#196'E'#255 + +#248#197'F'#255#248#197'E'#255#247#195'F'#255#247#194'F'#255#246#194'E'#255 + +#244#192'E'#255#238#184'C'#255#230#176'C'#255#223#166'A'#255#207#147'='#255 + +#182'w7'#255#138'V+'#253'h>#'#250'NA9'#215'CCC'#186'@@@[;;;'#13#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#8'EEENGC?'#189'b;%'#245#139'W-'#253#190 + +#127';'#255#212#153'B'#255#227#172'F'#255#239#186'I'#255#242#191'J'#255#244 + +#193'K'#255#246#195'K'#255#247#196'K'#255#247#196'K'#255#247#196'L'#255#247 + +#196'L'#255#247#196'L'#255#247#196'L'#255#247#196'L'#255#247#196'K'#255#247 + +#196'K'#255#246#196'K'#255#245#195'J'#255#243#193'J'#255#242#190'J'#255#234 + +#180'H'#255#221#165'E'#255#202#142'@'#255#173'o5'#255'oC$'#252'T?3'#225'CCC' + +#193'AAAy@@@'#16#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'+++'#6'DDD@K@<'#198'g<"'#250#154 + +'a2'#254#200#141'B'#255#222#168'J'#255#234#183'N'#255#239#189'P'#255#242#192 + +'P'#255#242#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193 + +'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193 + ,'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#242#193 + +'P'#255#242#193'P'#255#241#191'P'#255#238#187'N'#255#229#176'L'#255#214#158 + +'G'#255#183'y;'#255'yJ)'#252'[=,'#236'CCB'#195'EEEoFFF'#11#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3 + +'CCC.J?;'#190'g=#'#252#167'k7'#255#205#147'H'#255#226#173'P'#255#235#186'T' + +#255#238#189'T'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U' + +#255#239#190'U'#255#239#190'U'#255#191#152'D'#255'A4'#23#255'>1'#22#255'D6' + +#24#255'H9'#26#255'RA'#29#255#146's4'#255#228#182'Q'#255#239#190'U'#255#239 + +#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#238#190'U'#255#237 + +#187'T'#255#232#182'S'#255#217#162'M'#255#191#129'B'#255#132'R-'#253'[9('#240 + +'DDD'#191'CCCW@@@'#8#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#1'>>>'#29'F@='#169'd9#'#250#165'i8'#255#208#151'L'#255 + +#226#174'U'#255#233#184'Y'#255#235#186'Y'#255#235#187'Y'#255#235#187'Y'#255 + +#235#187'Y'#255#235#187'Y'#255#235#187'Y'#255#235#187'Y'#255'<0'#23#255#1#1#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#0#0#0#255#6 + +#5#2#255'*!'#16#255'w^-'#255#227#181'W'#255#235#187'Y'#255#235#187'Y'#255#235 + +#186'Y'#255#234#186'Y'#255#231#181'X'#255#218#164'Q'#255#194#133'E'#255'{J*' + +#252'U=/'#230'CCC'#186'EEE?@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'333'#10'DAAw_9%'#244#150'^4'#254#204#148'N'#255#225#175 + +'Y'#255#230#181'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183 + +'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255'hR*'#255#1#1#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#1#1#0#255#1#1#0#255'*!'#17#255#164#130'B'#255#231#183'\' + +#255#231#183'\'#255#231#182']'#255#228#179'['#255#217#165'V'#255#185'|C'#255 + +'nA'''#252'N>5'#219'CCC'#163'@@@'#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#128#128#128#2'@@@,W8*'#227#132'P/'#253#196#139'M'#255#220 + +#170'['#255#226#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227 + +#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#4#3#2 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0 + +#255#7#6#3#255#178#141'J'#255#227#179'_'#255#227#179'_'#255#225#176'^'#255 + +#211#158'U'#255#174'q?'#255'c9"'#252'GA>'#203'BBB]III'#7#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FFF'#11'H>:'#150'e:#'#252#186'~H'#255#214#164'\' + +#255#222#174'a'#255#223#175'b'#255#223#175'b'#255#223#175'b'#255#223#175'b' + +#255#223#175'b'#255#223#175'b'#255#223#175'b'#255#223#175'b'#255#188#148'S' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#1#1#1#255#154'yC'#255#223#175'b'#255#223#175'a'#255 + +#220#171'`'#255#204#150'U'#255#145'Y5'#254'Y8('#238'CCC'#175'FFF'#29#0#0#0#1 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'AAA3Z7'''#236#148'\6'#255#207#154'Z' + +#255#218#170'b'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd' + +#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd' + +#255#211#165'`'#255#6#5#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#219#171'd'#255#219 + +#171'd'#255#219#171'd'#255#215#166'`'#255#189#129'M'#255'h=$'#252'H>;'#207'E' + +'EEhIII'#7#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#7'K<5'#137'h;$'#252#188#130 + +'O'#255#213#164'b'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167 + +'d'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167 + +'d'#255#215#167'd'#255#215#167'd'#255#168#130'N'#255#1#1#1#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#200#155']'#255#215#167'd'#255#215#167'd'#255#215#166'd'#255#205#153']' + +#255#153'`:'#255'[6$'#243'CCC'#164';;;'#13#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'7' + +'77'#14'Z5%'#229#150'[8'#255#203#150'^'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#142'mD'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#145'pF'#255#211#162'e'#255#211#162 + +'e'#255#211#162'e'#255#210#159'd'#255#189#131'R'#255'f9#'#252'I@;'#202'===.' + +#128#128#128#2#0#0#0#0#0#0#0#0#128#128#128#2'D??4]3'#30#252#181'yM'#255#206 + +#155'd'#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#205 + +#155'f'#255'S?('#255#1#1#1#255#1#0#0#255#3#2#1#255#15#11#7#255#169#128'S'#255 + ,#207#157'f'#255#207#157'f'#255#207#157'f'#255#16#12#8#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#186#141'\' + +#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#207#157'e'#255#201#148'`' + +#255#135'O0'#254'R9-'#226'BBBeIII'#7#0#0#0#0#0#0#0#0'UUU'#6'O8/'#141'o>''' + +#251#193#139'['#255#203#151'e'#255#203#152'e'#255#203#152'e'#255#203#152'e' + +#255#203#152'e'#255#23#17#11#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#1#1#1#255#153'rL'#255#203#152'e'#255#203#152'e'#255',!'#22#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255' '#24#16 + +#255#203#152'e'#255#203#152'e'#255#203#152'e'#255#203#152'e'#255#203#152'e' + +#255#202#150'd'#255#165'jC'#255'\3!'#247'DDD'#151'MMM'#10#0#0#0#0#0#0#0#0'@@' + +'@'#8'Z6%'#206#142'T5'#255#195#142'a'#255#198#145'c'#255#198#145'c'#255#198 + +#145'c'#255#198#145'c'#255'W@,'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255'%'#27#19#255#198#145'c'#255#198#145'c'#255'U>+' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#1#1#1#255#27#20#13#255'vW;' + +#255#198#145'c'#255#198#145'c'#255#198#145'c'#255#198#145'c'#255#198#145'c' + +#255#198#145'c'#255#198#145'c'#255#184'}S'#255'`4 '#252'FA>'#183'@@@'#12#0#0 + +#0#0#0#0#0#0'999'#9']2'#30#243#166'gD'#255#192#138'`'#255#192#139'a'#255#192 + +#139'a'#255#192#139'a'#255#190#137'a'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#4#255#192#139'a'#255#192#139 + +'a'#255#129']B'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'Q;)'#255#192#139'a' + +#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a' + +#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#188#132'[' + +#255'u@'''#252'M;3'#212'999'#18#0#0#0#0#0#0#0#0'FFF'#11'^1'#29#250#174'oK' + +#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255'vS:'#255#1#1 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255 + +'S:)'#255#186#131'\'#255#186#131'\'#255#184#129'\'#255'('#28#20#255#1#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'Q9('#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186 + +#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186 + +#131'\'#255#186#131'\'#255#186#130'['#255#131'I-'#255'Q9-'#221'FFF!'#0#0#0#1 + +#0#0#0#0'M33'#20'_2'#30#251#173'pN'#255#180'{X'#255#180'{X'#255#180'{X'#255 + +#180'{X'#255'-'#30#22#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#2#1#1#255'dE1'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255 + +#180'{X'#255'O6&'#255#2#1#1#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'G0#'#255#180'{X'#255#180'{X'#255#178'{X'#255'hH3'#255'U:)'#255 + +'mK5'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X' + +#255#180'{X'#255#139'P3'#255'U7)'#231'BBB2UUU'#3#0#0#0#0'T1&,c5 '#249#174'rQ' + +#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#8#5#4#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#1#0#0#255#27#18#13#255#164'nQ'#255#178'wW'#255#178 + +'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW' + +#255#142'_F'#255'H0#'#255#20#13#10#255#25#16#12#255'9'''#28#255'lI5'#255#178 + +'wW'#255#178'wW'#255'kG4'#255#1#1#1#255#1#1#0#255#1#0#0#255#1#0#0#255#3#2#1 + +#255'zQ<'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#149 + +'W9'#255'Z5%'#238'DDD-'#128#128#128#2#0#0#0#0'Y3 Bj8#'#248#173'qS'#255#175't' + +'W'#255#175'tW'#255#175'tW'#255#175'tW'#255#1#0#0#255#1#1#1#255#0#0#0#255#0#0 + +#0#255#5#3#3#255'cB2'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175 + +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW' + +#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255 + +#173'rU'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1 + +#1#255#152'eL'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#155'[>' + +#255'\4"'#244'@@@'#28#0#0#0#1#0#0#0#0'X0!3g7"'#246#172'oR'#255#174'rV'#255 + +#174'rV'#255#174'rV'#255#166'lR'#255#7#5#3#255#131'VA'#255#155'fM'#255'oI7' + +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255 + +#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174 + +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV' + +#255#153'dL'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255'<'''#29#255#174'rV'#255#174'rV'#255#174'rV'#255#173'qU'#255#151'Y' + +'='#255']6%'#239'333'#15#0#0#0#0#0#0#0#0'O1'''#25'b3'#31#247#168'jN'#255#172 + +'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU' + +#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#136'XD'#255 + ,'U7*'#255'^=/'#255'kE5'#255#170'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255 + +#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172 + +'oU'#255#172'oU'#255#5#3#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'!'#21#16#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oT'#255 + +#143'R7'#255'Y6('#225'@@@'#12#0#0#0#0#0#0#0#0'333'#5'_2'#31#248#167'hL'#255 + +#172'qW'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172 + +'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255':&'#30#255#1#0#0#255 + +#1#1#0#255#1#1#1#255#1#1#0#255#4#2#2#255#133'WD'#255#172'qX'#255#172'qX'#255 + +#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172 + +'qX'#255#172'qX'#255'E.$'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#30#20#15#255#172'qX'#255#172'qX'#255#172'qX'#255#172'pV'#255 + +#134'K2'#255'V8)'#199'999'#9#0#0#0#0#0#0#0#0#0#0#0#1'_3'#30#239#164'fJ'#255 + +#175'w]'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255#175 + +'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255'hF7'#255#1#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#4#255#175'w^'#255#175'w^'#255'{TB' + +#255'X;/'#255']?2'#255#127'VD'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w' + +'^'#255#165'qY'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1 + +#255'fF7'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'v\'#255'{D-'#253'S5(' + +#154'333'#5#0#0#0#0#0#0#0#0#0#0#0#0'a3'#30#200#149'Z?'#255#179'|c'#255#179'}' + +'e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e' + +#255#179'}e'#255#179'}e'#255#19#13#11#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#2#1#1#255#179'}e'#255'E0'''#255#1#0#0#255#1#1#0#255 + +#1#1#0#255#0#0#0#255'R:/'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255 + +'.!'#26#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#177'}e'#255#179 + +'}e'#255#179'}e'#255#179'}e'#255#175'v\'#255'g8$'#251'W7*O'#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0'[0'#29'lyD-'#249#181#128'i'#255#183#131'l'#255#183#131'l'#255 + +#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255 + +#183#131'l'#255#183#131'l'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'"'#25#20#255#183#131'l'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255'B/'''#255#183#131'l'#255#183#131'l'#255 + +#183#131'l'#255#169'yd'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255'#'#25#21 + +#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#167'lQ'#255 + +'^3'#31#248'@@@'#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Y1'#30#26'b5 '#244#178'z' + +'c'#255#187#138't'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138 + +'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#2#2#1#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#170'~j'#255#177 + +#130'o'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#3 + +#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255'jNB'#255#11 + +#8#7#255#0#0#0#255#0#0#0#255#152'p`'#255#187#138'u'#255#187#138'u'#255#187 + +#138'u'#255#186#136'r'#255#144'W?'#255']6#'#193'333'#5#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'`4'#31#217#160'gN'#255#190#143'{'#255#191#145'}'#255#191 + +#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191 + +#145'}'#255#191#145'}'#255#19#14#12#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'7*$'#255#191#145'}'#255#164'|k'#255#1#1#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#191#145'}'#255#191#145'}'#255 + +#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#0#0#0#255#30#23 + +#20#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#187#138 + +'t'#255'p>('#249'Y2#U'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +'huB+'#244#190#142'z'#255#195#152#132#255#195#152#132#255#195#152#132#255#195 + +#152#132#255#195#152#132#255#195#152#132#255#195#152#132#255#195#152#132#255 + +'A3,'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#183#142'|'#255 + +#195#152#132#255#138'k]'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#9#7#6#255#195#152#132#255#195#152#132#255#195#152#132#255#195 + +#152#132#255#195#152#132#255#195#152#132#255#1#1#1#255#160'}m'#255#195#152 + +#132#255#195#152#132#255#195#152#132#255#194#150#131#255#167'pW'#255'`4 '#240 + +'M33'#10#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@'#0#4'`3'#30#229 + +#164'nU'#255#197#156#137#255#199#159#141#255#199#159#141#255#199#159#141#255 + +#199#159#141#255#199#159#141#255#199#159#141#255#199#159#141#255'x`U'#255#1#1 + +#1#255#0#0#0#255#0#0#0#255#0#0#0#255#18#14#13#255#199#159#141#255#199#159#141 + +#255' '#26#23#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255 + +#139'oc'#255#199#159#141#255#199#159#141#255#199#159#141#255#199#159#141#255 + +#199#159#141#255#199#159#141#255'^KC'#255#199#159#141#255#199#159#141#255#199 + +#159#141#255#199#159#141#255#192#147#127#255'rB-'#249'\1 k'#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\.'#28'Sn>('#243#194#149#131 + ,#255#202#165#148#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165 + +#149#255#203#165#149#255#203#165#149#255#169#138'|'#255#0#0#0#255#1#1#1#255 + +#16#13#11#255#23#19#17#255#171#139'~'#255#203#165#149#255#203#165#149#255#3#3 + +#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'*"'#31#255#203#165 + +#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203 + +#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255 + +#203#165#149#255#201#162#145#255#163'mU'#255'_3'#31#227'U'#0#0#3#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'a3'#30#213#153 + +'eM'#254#204#167#151#255#207#172#158#255#207#172#158#255#207#172#158#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#205#170#156#255#0#0#0#255'<1.' + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#20#16#15#255#1#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'?40'#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#171#156#255#192#147#127#255'k<'''#244'Z.'#29'L'#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'^/'#27'&b5!'#240#174'{f'#255#209#176#162#255#212#180#167#255#212#180#167#255 + +#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#6#5#5#255 + +#179#151#140#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167 + +#255#212#180#167#255#212#180#167#255'gXR'#255#0#0#0#255#0#0#0#255'gXR'#255 + +#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167 + +#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180 + +#167#255#212#180#167#255#211#179#166#255#202#162#146#255#127'M7'#248'`2'#31 + +#169#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0'[/'#26'Fg:#'#242#190#145#127#255#214#184#172#255#216 + +#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255 + +'k]X'#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216 + +#187#176#255#216#187#176#255#216#187#176#255'E<8'#255#0#0#0#255'>63'#255#216 + +#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255 + +#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176 + +#255#216#187#176#255#216#187#175#255#210#176#163#255#147'_H'#252'`4'#31#210 + +'U++'#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\0'#29'trB-'#242#198#157#140#255#218#191 + +#180#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221 + +#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255 + +#221#195#185#255#221#195#185#255#221#195#185#255',''%'#255'920'#255#221#195 + +#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221 + +#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255 + +#221#195#185#255#220#194#184#255#213#183#170#255#162'oW'#255'b5 '#232'].'#23 + +#22#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'_1'#30#138'l>)'#242#187#143'|' + +#255#221#196#186#255#225#202#193#255#225#203#194#255#225#203#194#255#225#203 + +#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225 + +#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255 + +#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194 + +#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203 + +#194#255#224#201#192#255#212#180#168#255#149'aK'#252'a5!'#230']2'#25')'#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#28'\d9$'#241#172 + +'|h'#255#222#197#187#255#228#206#200#255#230#209#203#255#230#209#203#255#230 + +#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255 + +#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203 + +#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209 + +#203#255#230#209#203#255#230#209#203#255#229#209#202#255#226#204#197#255#208 + +#173#159#255#131'R;'#245'a3'#31#207'Y3'#26#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#28'7a5!'#236#137'WB'#248#201 + +#163#148#255#229#210#202#255#233#215#210#255#234#217#212#255#234#217#212#255 + +#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212 + +#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217 + +#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#216#211#255#231 + +#212#206#255#221#195#185#255#174#128'm'#255'm>*'#242'`1'#29#163'f33'#5#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0'b'''#20#13'`2'#29#140'd8$'#241#151'hR'#251#211#179#167#255#233#215 + +#210#255#236#220#215#255#237#222#219#255#238#225#221#255#238#225#221#255#238 + +#225#221#255#238#225#221#255#238#225#221#255#238#225#221#255#238#225#221#255 + +#238#225#221#255#238#225#221#255#238#223#220#255#236#221#217#255#234#219#213 + +#255#227#205#198#255#188#146#128#255'wH2'#242'b5 '#219'].'#27'B'#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X1'#29#26'a3'#30#168'f:$'#242#134'T?' + +#246#179#136'v'#255#214#183#172#255#235#218#214#255#238#225#221#255#239#226 + +#223#255#240#227#224#255#240#227#225#255#240#227#225#255#239#226#223#255#239 + +#225#222#255#238#224#220#255#226#204#196#255#199#161#145#255#158'o['#254'rD-' + +#239'b4"'#232'^2'#30'\'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0'`+ '#24']/'#30'fd6#'#197'c8#'#243'vE0'#240#140'ZF' + +#247#156'mY'#255#171#127'm'#255#184#143#127#255#178#136'v'#255#164'wd'#255 + +#148'dP'#252#130'Q;'#243'l<('#239'b6"'#234'b5!'#151'Z-'#29'>UU'#0#3#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#23#11'Z/'#29'G^4 fa4!'#130'd6!'#166'd7#'#194 + +'d7"'#182'c6"'#150'_3'#31's\0'#29'YY/'#30'+'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#224#3#255#255#255 + +#255#255#254#0#0#127#255#255#255#255#248#0#0#31#255#255#255#255#224#0#0#7#255 + +#255#255#255#192#0#0#3#255#255#255#255#128#0#0#1#255#255#255#255#0#0#0#0#127 + +#255#255#254#0#0#0#0#127#255#255#252#0#0#0#0'?'#255#255#248#0#0#0#0#31#255 + +#255#240#0#0#0#0#15#255#255#240#0#0#0#0#15#255#255#224#0#0#0#0#7#255#255#224 + +#0#0#0#0#3#255#255#192#0#0#0#0#3#255#255#192#0#0#0#0#3#255#255#192#0#0#0#0#1 + +#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255 + +#128#0#0#0#0#1#255#255#128#0#0#0#0#0#255#255#128#0#0#0#0#0#255#255#128#0#0#0 + +#0#0#255#255#128#0#0#0#0#0#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255 + +#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255#192#0#0#0#0#1#255#255#192#0 + +#0#0#0#3#255#255#192#0#0#0#0#3#255#255#224#0#0#0#0#7#255#255#224#0#0#0#0#7 + +#255#255#224#0#0#0#0#15#255#255#240#0#0#0#0#15#255#255#248#0#0#0#0#31#255#255 + +#248#0#0#0#0'?'#255#255#252#0#0#0#0'?'#255#255#254#0#0#0#0#127#255#255#255#0 + +#0#0#0#255#255#255#255#128#0#0#1#255#255#255#255#192#0#0#3#255#255#255#255 + +#224#0#0#15#255#255#255#255#248#0#0#31#255#255#255#255#254#0#0#127#255#255 + +#255#255#255#192#7#255#255#255#255#255#255#255#255#255#255#255#255'('#0#0#0 + +' '#0#0#0'@'#0#0#0#1#0' '#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'CCC'#19'FFF'#22'UUU'#3#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#12'EAAGDDB'#133'DDC'#181'HC?'#205'LA;'#213 + +'JB='#212'FC@'#204'EED'#185'DDC'#145'DDDSFFF'#22#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#14'EEBoLA;'#208'eE-'#235'xK(' + +#246#131'R)'#250#139'W*'#251#149'_,'#252#145'\+'#252#136'V*'#250#128'Q('#249 + +'rI)'#244'\D2'#227'FB?'#207'CCC'#134'DDD'#30#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'EEENMA9'#206'oF)'#245#147']-'#252#187'}4'#255#211#150'9'#255#224 + +#167';'#255#230#174'='#255#234#179'>'#255#233#178'>'#255#228#171'='#255#221 + +#163'<'#255#205#143'8'#255#175'r2'#255#131'R*'#250'eC,'#238'FB?'#205'CCCoUUU' + +#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'@@@'#4'GEA|dB+'#239#142'[.'#252#198#137'<'#255#227#172'C'#255 + +#236#183'E'#255#242#190'F'#255#246#195'G'#255#248#198'G'#255#249#199'H'#255 + +#249#198'H'#255#247#196'G'#255#245#193'G'#255#240#188'F'#255#234#180'D'#255 + +#220#163'A'#255#183'y8'#255'}O*'#250'WA4'#225'CCC'#152'<<<'#17#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'G@='#148 + +'lD*'#245#175'u8'#254#221#166'I'#255#234#182'M'#255#242#193'P'#255#243#194'O' + +#255#244#195'O'#255#244#195'P'#255#244#195'P'#255#244#195'P'#255#244#195'P' + +#255#244#195'P'#255#244#195'P'#255#243#194'O'#255#243#194'O'#255#240#190'O' + +#255#230#179'L'#255#212#155'F'#255#148'^1'#252'`A.'#234'CCC'#171'@@@'#12#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FA>vmB)'#247#189 + +#130'A'#255#224#172'P'#255#236#187'U'#255#238#189'W'#255#238#190'V'#255#238 + +#190'V'#255#238#190'V'#255'fQ%'#255#17#14#6#255#17#13#6#255#16#13#6#255',#' + +#16#255#155'|8'#255#238#190'V'#255#238#190'V'#255#238#189'V'#255#238#189'W' + +#255#233#184'U'#255#217#163'M'#255#164'l8'#254'_>+'#238'DDD'#147#128#128#128 + +#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FDD=e?*'#243#183'}B'#255 + +#223#171'W'#255#232#183'['#255#232#183'\'#255#232#183'\'#255#232#183'\'#255 + +#232#183'\'#255'>1'#25#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#1#1#1#255#5#4#2#255#22#17#9#255'pX,'#255#218#171'V'#255#232#183'\'#255#230 + +#182'['#255#217#164'T'#255#152'a7'#252'V=1'#228'DDDb'#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#128#128#128#2'Z<-'#215#163'k='#254#217#166'['#255#226#178'`' + +#255#226#179'a'#255#226#179'a'#255#226#179'a'#255#226#179'a'#255#226#179'a' + +#255#5#4#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#3#3#1#255',#'#19#255#226#179'a'#255#225#177'_' + +#255#208#154'T'#255#129'O1'#251'H?;'#205'@@@'#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0'J@<[vF,'#249#206#153'Y'#255#220#172'b'#255#220#172'c'#255#220#172'c'#255 + +#220#172'c'#255#220#172'c'#255#220#172'c'#255#205#160']'#255#4#3#2#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#1#0#0#255'.$'#21#255#220#172'c'#255#218#170'a'#255#190#132 + +'N'#255'c=)'#242'CCCz'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\9('#218#177'vG'#255 + +#213#164'c'#255#214#166'e'#255#214#166'e'#255#214#166'e'#255#214#166'e'#255 + +#214#166'e'#255#214#166'e'#255#214#166'e'#255'v\8'#255#2#2#1#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#11#9#5#255#214#166'e'#255#214#166'e'#255#209#159'a'#255#139'Y' + +'6'#252'K>7'#206'333'#5#0#0#0#0#0#0#0#0'?;9'#19'mA+'#247#201#148'^'#255#209 + +#159'e'#255#209#159'e'#255#209#159'e'#255#146'oF'#255#18#14#9#255#21#16#10 + +#255'O<&'#255#209#159'e'#255#209#159'e'#255'$'#27#17#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#11#8#5#255#209#159'e'#255#209#159'e'#255#208#158'e'#255#185#128'Q'#255 + +'^9)'#240'BBB6'#0#0#0#0#0#0#0#0'P8-q'#144'Z:'#252#201#150'd'#255#202#151'd' + +#255#202#151'd'#255'uW:'#255#2#1#1#255#0#0#0#255#0#0#0#255#1#0#0#255'-!'#22 + +#255#202#151'd'#255'ZC-'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#5#4#3#255'gM3'#255#202#151'd' + +#255#202#151'd'#255#202#151'd'#255#197#145'`'#255'l@*'#248'CCBo'#0#0#0#0#0#0 + +#0#0'^7$'#194#171'pK'#255#194#140'a'#255#194#140'a'#255#194#140'a'#255#6#4#3 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#4#255#194#140'a'#255#139'eE' + +#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13 + +#9#6#255'wV<'#255#192#138'a'#255#194#140'a'#255#194#140'a'#255#194#140'a'#255 + +#194#140'a'#255#193#140'a'#255#137'T7'#252'K=6'#158#0#0#0#0#0#0#0#0'a6#'#220 + +#177'uQ'#255#185#129'['#255#185#129'['#255#127'Y>'#255#1#1#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#2#1#1#255'8'''#27#255#185#129'['#255#185#129'['#255'+'#30 + +#21#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13#9#6#255#179'}Y' + +#255#185#129'['#255#185#129'['#255#185#129'['#255#185#129'['#255#185#129'[' + +#255#185#129'['#255#185#129'['#255#152'^>'#255'P:1'#190#0#0#0#0#0#0#0#0'c7#' + +#227#175'sS'#255#178'xW'#255#178'xW'#255','#30#21#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#5#4#3#255'uO:'#255#178'xW'#255#178'xW'#255#178'xW'#255#178'xW'#255'xP' + +':'#255'('#26#19#255#10#7#5#255#10#7#5#255#28#19#13#255#168'rS'#255#163'nO' + +#255#25#17#12#255#6#4#3#255#17#11#8#255'bB/'#255#178'xW'#255#178'xW'#255#178 + +'xW'#255#158'aB'#255'V9,'#210#0#0#0#0#0#0#0#0'f7"'#227#173'sT'#255#175'tW' + +#255#175'tW'#255#15#10#7#255#13#8#6#255#5#4#3#255'+'#29#21#255#169'pU'#255 + +#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175 + +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#17#11#8#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#2#2#1#255#136'ZD'#255#175'tW'#255#175'tW'#255#161'd' + +'G'#255'[8('#211#0#0#0#0#0#0#0#0'e6"'#218#171'nR'#255#173'qV'#255#173'qV'#255 + +#136'YC'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255'sK9' + +#255'uM:'#255#159'gN'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255#173 + +'qV'#255#173'qV'#255#173'qV'#255'5"'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255'H/$'#255#173'qV'#255#173'qV'#255#153'^D'#255'Y8*'#188#0#0#0#0#0#0#0#0 + +'c5 '#203#170'kQ'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + ,#255#174'sY'#255#164'mU'#255#11#7#6#255#1#1#1#255#1#1#1#255#5#3#2#255#127'TA' + +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255 + +#128'UA'#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255'J1&'#255#174'sY'#255#174 + +'sY'#255#147'X?'#255'S8,'#140#0#0#0#0#0#0#0#0'd4'#30#153#162'gM'#255#178'{c' + +#255#178'{c'#255#178'{c'#255#178'{c'#255#178'{c'#255#178'{c'#255'A-$'#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#20#14#11#255'xSB'#255#6#4#3#255#5#4#3 + +#255#18#12#10#255#170'u_'#255#178'{c'#255#178'{c'#255#9#6#5#255#0#0#0#255#0#0 + +#0#255#3#2#2#255#166's]'#255#178'{c'#255#178'{c'#255#131'P8'#252'S3$>'#0#0#0 + +#0#0#0#0#0'[/'#27'3'#137'T='#247#184#134'o'#255#184#134'o'#255#184#134'o'#255 + +#184#134'o'#255#184#134'o'#255#184#134'o'#255#14#10#9#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#1#1#1#255'\C7'#255#14#10#8#255#0#0#0#255#0#0#0#255#0#0#0#255#14#10 + +#8#255#184#134'o'#255#184#134'o'#255'xWI'#255#2#1#1#255#0#0#0#255#18#14#11 + +#255#184#134'o'#255#184#134'o'#255#183#131'l'#255'h:&'#240#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'n<%'#218#189#140'x'#255#190#143'z'#255#190#143'z'#255#190#143 + +'z'#255#190#143'z'#255#190#143'z'#255',!'#28#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#9#7#6#255#190#143'z'#255#9#7#6#255#0#0#0#255#0#0#0#255#0#0#0#255#5#4#3 + +#255#190#143'z'#255#190#143'z'#255#190#143'z'#255#159'xe'#255#0#0#0#255#140 + +'jZ'#255#190#143'z'#255#190#143'z'#255#175'yc'#255'b6"'#193#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'd4'#30#151#167's\'#254#196#154#135#255#196#154#135#255#196#154 + +#135#255#196#154#135#255#196#154#135#255'qYN'#255#0#0#0#255#0#0#0#255#1#1#1 + +#255'v]R'#255#194#152#133#255#5#4#4#255#0#0#0#255#0#0#0#255#0#0#0#255#10#8#7 + +#255#196#154#135#255#196#154#135#255#196#154#135#255#196#154#135#255'"'#27#24 + +#255#196#154#135#255#196#154#135#255#196#154#135#255#131'R<'#248'^1'#28'1'#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#14'o>('#224#198#157#140#255#202#163#146 + +#255#202#163#146#255#202#163#146#255#202#163#146#255#170#138'{'#255#0#0#0#255 + +#8#6#6#255#26#21#19#255#202#163#146#255#143'th'#255#1#1#1#255#0#0#0#255#0#0#0 + +#255#2#2#2#255#143'sg'#255#202#163#146#255#202#163#146#255#202#163#146#255 + +#202#163#146#255#191#155#138#255#202#163#146#255#202#163#146#255#183#135'r' + +#255'd5 '#193#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'd3'#30'{'#156 + +'jS'#248#209#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255#209 + +#174#160#255#2#2#2#255#205#172#158#255#209#174#160#255#209#174#160#255#169 + +#140#129#255#11#9#9#255#1#1#0#255#4#3#3#255#132'oe'#255#209#174#160#255#209 + +#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255 + +#209#174#160#255#205#167#152#255'yG3'#235'[/'#27'"'#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'd4'#30#181#179#134'r'#254#215#185#173#255#215 + +#185#173#255#215#185#173#255#215#185#173#255'm^X'#255#215#185#173#255#215#185 + +#173#255#215#185#173#255#215#185#173#255#133'sk'#255#0#0#0#255#156#134'}'#255 + +#215#185#173#255#215#185#173#255#215#185#173#255#215#185#173#255#215#185#173 + +#255#215#185#173#255#215#185#173#255#214#183#172#255#143'^I'#243'b3'#29'`'#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#8'f6 ' + +#205#189#148#131#254#222#197#187#255#222#197#187#255#222#197#187#255#222#197 + +#187#255#222#197#187#255#222#197#187#255#222#197#187#255#222#197#187#255#127 + +'qk'#255#134'wq'#255#222#197#187#255#222#197#187#255#222#197#187#255#222#197 + +#187#255#222#197#187#255#222#197#187#255#222#197#187#255#220#193#183#255#159 + +'o['#247'd3'#30#147#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0'[/'#27#15'c3'#30#193#176#132'q'#248#228#206#199#255 + +#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201 + +#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208 + +#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#221 + +#196#186#255#141']I'#237'c3'#29#129#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#2'c3'#29#150 + +#135'XD'#231#208#176#164#255#235#219#215#255#235#219#215#255#235#219#215#255 + +#235#219#215#255#235#219#215#255#235#219#215#255#235#219#215#255#235#219#215 + +#255#235#219#215#255#235#219#215#255#235#219#215#255#232#214#209#255#189#149 + +#133#253'qA+'#220'a2'#29'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +'"e4'#30#185#144'cO'#235#195#158#144#254#230#209#203#255#242#231#229#255#242 + +#231#229#255#242#231#229#255#242#231#229#255#242#231#229#255#241#230#226#255 + +#220#193#184#255#180#141'|'#251'zK6'#226'd3'#30#142'[/'#27#10#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#28'b3'#29'{g5'#30 + +#198'xH2'#218#137']J'#229#156'r`'#236#151'mZ'#234#132'VB'#227'q?)'#213'f4'#30 + +#182'_1'#28'W[/'#27#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#5'[/' + +#27#30'[/'#27#22'[/'#27#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#252'?'#255 + +#255#192#3#255#255#0#0#255#254#0#0'?'#248#0#0#31#240#0#0#15#240#0#0#7#224#0#0 + +#7#192#0#0#3#192#0#0#3#192#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128 + +#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#3#192#0#0#3#192#0#0#3 + +#192#0#0#7#224#0#0#7#240#0#0#15#240#0#0#31#248#0#0'?'#252#0#0#127#255#0#0#255 + +#255#192#3#255#255#252'?'#255'('#0#0#0#16#0#0#0' '#0#0#0#1#0' '#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +';;;'#13'ICB7M=4zL>6xFBA;@@@'#16#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'III'#7'W;,'#171'nC('#245#145'`+'#250#181#127'2'#253#175 + +'z1'#253#139'\*'#250'h?&'#244'P=3'#159'@@@'#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0'K921d;'''#235#191#137'7'#254#249#198'E'#255#251#199'F'#255#251#200 + +'F'#255#251#200'F'#255#251#199'F'#255#246#194'E'#255#173'y3'#253'\9)'#229'E>' + +';2'#0#0#0#0#0#0#0#0#0#0#0#0'>2,'#7'nC'''#238#223#171'N'#255#239#191'U'#255 + +#240#192'U'#255#164#131':'#255'@3'#23#255'J;'#26#255'~e-'#255#196#157'E'#255 + +#239#191'U'#255#212#159'J'#255'a<('#231'MMM'#10#0#0#0#0#0#0#0#0'[7('#183#195 + +#145'N'#254#228#180'_'#255#228#180'_'#255#228#180'_'#255'</'#25#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#4#3#1#255'9-'#24#255#205#163'U'#255#175'~E'#253'Q:0'#168 + +#0#0#0#0'[/'#27#10#143'd@'#248#219#174'l'#255#219#173'l'#255#159'~N'#255#206 + +#163'f'#255'qY7'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#152'x' + +'K'#255#218#172'k'#255'zQ5'#246'UUU'#3'W4$H'#178#134'_'#254#213#169'x'#255'Y' + +'F2'#255#0#0#0#255'L<+'#255#200#158'p'#255#8#6#4#255#0#0#0#255#0#0#0#255#18 + +#15#10#255'pY?'#255#213#169'x'#255#213#169'x'#255#157'tR'#251'M=74^6$'#154 + +#193#151'x'#255#179#144's'#255#6#5#4#255#27#21#17#255#155'|c'#255#206#165#132 + +#255#130'hS'#255'=1'''#255':/%'#255#170#137'm'#255#141'q['#255#166#133'j'#255 + +#206#165#132#255#178#135'l'#253'Q8,{c5 '#167#195#154#133#255#163#130'q'#255 + +#153'zj'#255#192#152#132#255#199#159#138#255#200#159#138#255#201#160#139#255 + +#201#160#139#255#201#160#139#255#154'zj'#255#1#1#1#255#29#23#20#255#197#157 + +#136#255#181#139'v'#255'X5%|_1'#28'V'#176#132'r'#254#199#159#141#255#199#159 + +#141#255#184#147#130#255'#'#28#25#255#27#22#19#255#167#133'v'#255#127'fZ'#255 + +#172#137'z'#255#197#157#139#255' '#26#23#255#15#12#11#255#187#150#133#255#156 + +'tb'#251'W1 0[/'#27#30#160'zk'#246#210#176#163#255#210#176#163#255#154#129'x' + +#255#0#0#0#255' '#27#25#255#152#128'v'#255#4#3#3#255'>40'#255#210#176#163#255 + +#148'|s'#255'RD?'#255#210#176#163#255#140'fW'#243'[/'#27#2#0#0#0#0'tI6'#209 + +#216#188#178#255#221#195#185#255#213#188#178#255'$'#31#30#255#131'sn'#255'sf' + +'`'#255#0#0#0#255'eYU'#255#221#195#185#255#221#195#185#255#204#180#170#255 + +#207#178#166#255'k>+'#182#0#0#0#0#0#0#0#0'[/'#27#31#156'xi'#240#232#213#207 + +#255#232#213#207#255#180#165#161#255#232#213#207#255#182#167#162#255'ICA'#255 + +#226#207#201#255#232#213#207#255#232#213#207#255#231#213#206#255#134'_O'#233 + +'[/'#27#12#0#0#0#0#0#0#0#0#0#0#0#0'd3'#30'e'#171#139'~'#240#239#226#224#255 + +#242#231#229#255#242#231#229#255#240#229#227#255#242#231#229#255#242#231#229 + +#255#242#231#229#255#235#221#216#255#153'uh'#236'a2'#29'?'#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0'\0'#27'*'#131'\I'#215#212#191#183#252#239#229#226#255 + +#253#250#252#255#253#249#250#255#236#223#220#255#204#180#172#250'yM;'#196'[/' + +#27#23#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/' + +#27'>c3'#29#131'uI4'#190'oA-'#183'b2'#29'v[/'#27'4'#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#248#31#172'A'#224#7#172'A'#192#3#172'A'#128#1#172'A'#128#1#172 + +'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#128#1 + +#172'A'#128#1#172'A'#192#3#172'A'#224#7#172'A'#240#31#172'A' +]); + diff --git a/components/rx/version/2.1/Demos/RxDateEdit/project1.manifest b/components/rx/version/2.1/Demos/RxDateEdit/project1.manifest new file mode 100644 index 000000000..515fedeef --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDateEdit/project1.manifest @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/> + <description>Your application description here.</description> + <dependency> + <dependentAssembly> + <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> + </dependentAssembly> + </dependency> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> + <security> + <requestedPrivileges> + <requestedExecutionLevel level="asInvoker" uiAccess="false"/> + </requestedPrivileges> + </security> + </trustInfo> +</assembly> \ No newline at end of file diff --git a/components/rx/version/2.1/Demos/RxDateEdit/project1.rc b/components/rx/version/2.1/Demos/RxDateEdit/project1.rc new file mode 100644 index 000000000..cd8e7b0d6 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDateEdit/project1.rc @@ -0,0 +1,7 @@ +#define RT_MANIFEST 24 +#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 +#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2 +#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3 + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "project1.manifest" +MAINICON ICON "project1.ico" diff --git a/components/rx/version/2.1/Demos/RxDateEdit/unit1.lfm b/components/rx/version/2.1/Demos/RxDateEdit/unit1.lfm new file mode 100644 index 000000000..1144fe04c --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDateEdit/unit1.lfm @@ -0,0 +1,121 @@ +object Form1: TForm1 + Left = 608 + Height = 300 + Top = 495 + Width = 400 + Caption = 'Form1' + ClientHeight = 300 + ClientWidth = 400 + OnCreate = FormCreate + LCLVersion = '1.3' + object Label1: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 15 + Top = 6 + Width = 43 + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + Caption = 'Label1' + ParentColor = False + end + object Label2: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = DBDateEdit1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 15 + Top = 58 + Width = 87 + BorderSpacing.Around = 6 + Caption = 'Currency edit' + ParentColor = False + end + object CurrencyEdit1: TCurrencyEdit + AnchorSideLeft.Control = Label2 + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + Left = 12 + Height = 25 + Top = 79 + Width = 148 + Alignment = taCenter + BorderSpacing.Around = 6 + MaxValue = 0 + MinValue = 0 + TabOrder = 0 + Value = 0 + end + object Button1: TButton + Left = 248 + Height = 27 + Top = 80 + Width = 77 + AutoSize = True + Caption = 'Invalidate' + OnClick = Button1Click + TabOrder = 1 + end + object RxDateEdit1: TRxDateEdit + Left = 12 + Height = 25 + Top = 135 + Width = 80 + ButtonWidth = 23 + CharCase = ecNormal + MaxLength = 10 + NumGlyphs = 2 + PopupColor = clWindow + TabOrder = 2 + Text = ' . . ' + end + object DBDateEdit1: TDBDateEdit + AnchorSideLeft.Control = Label1 + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + Left = 12 + Height = 25 + Top = 27 + Width = 139 + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + ButtonWidth = 23 + CharCase = ecNormal + Enabled = False + MaxLength = 10 + NumGlyphs = 2 + PopupColor = clWindow + TabOrder = 3 + Text = ' . . ' + DataField = 'DOC_DATE' + DataSource = dsData + end + object dsData: TDataSource + DataSet = rxData + left = 264 + top = 21 + end + object rxData: TRxMemoryData + FieldDefs = < + item + Name = 'DOC_DATE' + DataType = ftDate + Precision = 0 + Size = 0 + end> + PacketRecords = 0 + left = 304 + top = 21 + object rxDataDOC_DATE: TDateField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'DOC_DATE' + Index = 0 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + end +end diff --git a/components/rx/version/2.1/Demos/RxDateEdit/unit1.lrs b/components/rx/version/2.1/Demos/RxDateEdit/unit1.lrs new file mode 100644 index 000000000..f49d1b60b --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDateEdit/unit1.lrs @@ -0,0 +1,43 @@ +LazarusResources.Add('TForm1','FORMDATA',[ + 'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'`'#2#6'Height'#3','#1#3'Top'#3#239#1#5'Wi' + +'dth'#3#144#1#7'Caption'#6#5'Form1'#12'ClientHeight'#3','#1#11'ClientWidth'#3 + +#144#1#8'OnCreate'#7#10'FormCreate'#10'LCLVersion'#6#6'0.9.29'#0#6'TLabel'#6 + +'Label1'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#5 + +'Owner'#4'Left'#2#6#6'Height'#2#18#3'Top'#2#6#5'Width'#2'.'#18'BorderSpacing' + +'.Left'#2#6#17'BorderSpacing.Top'#2#6#7'Caption'#6#6'Label1'#11'ParentColor' + +#8#0#0#6'TLabel'#6'Label2'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSi' + +'deTop.Control'#7#11'DBDateEdit1'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Le' + +'ft'#2#6#6'Height'#2#18#3'Top'#2'?'#5'Width'#2']'#20'BorderSpacing.Around'#2 + +#6#7'Caption'#6#13'Currency edit'#11'ParentColor'#8#0#0#11'TDBDateEdit'#11'D' + +'BDateEdit1'#22'AnchorSideLeft.Control'#7#6'Label1'#21'AnchorSideTop.Control' + +#7#6'Label1'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#12#6'Height'#2 + +#27#3'Top'#2#30#5'Width'#3#148#0#18'BorderSpacing.Left'#2#6#17'BorderSpacing' + +'.Top'#2#6#11'ButtonWidth'#2#23#7'Enabled'#8#10'Glyph.Data'#10':'#1#0#0'6'#1 + +#0#0'BM6'#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#28#0#0#0#12#0#0#0#1#0#4#0#0#0#0#0 + +#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128 + +#128#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255 + +#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#221 + +#215'wwwww'#221#255#255#255#255#255#255#0#0#221#0'@D'#4#0'G'#215'wwwww'#127#0 + +#0#221#255#255#255#255#255'G'#215#253#255#253#255#253#127#0#0#221#240#0#240#0 + +#143'G'#215#247'w'#215'w'#223#127#0#0#221#255#15#248#248#15'G'#215#253#127 + +#221#221#127#127#0#0#221#255#15#255#255#15'G'#215#253#127#221#255'}'#127#0#0 + +#221#255#15#240#0#143'G'#215#253#127#215'w'#221#127#0#0#221#240#15#240#255 + +#255'G'#215#247#127#215#255#255#127#0#0#221#255#15#240#0#15'G'#215#253'}'#215 + +'w}'#127#0#0#221#255#255#255#255#255'G'#215#253#221#221#221#221#127#0#0#221 + +#248#136#136#136#143'G'#215#255#255#255#255#255#127#0#0#221#0#0#0#0#0#221#215 + +'wwwww}'#0#0#9'NumGlyphs'#2#2#10'PopupColor'#7#8'clWindow'#8'TabOrder'#2#0#9 + +'DataField'#6#8'DOC_DATE'#10'DataSource'#7#6'dsData'#0#0#13'TCurrencyEdit'#13 + +'CurrencyEdit1'#22'AnchorSideLeft.Control'#7#6'Label2'#21'AnchorSideTop.Cont' + +'rol'#7#6'Label2'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#12#6'Heigh' + +'t'#2#27#3'Top'#2'W'#5'Width'#3#148#0#9'Alignment'#7#8'taCenter'#20'BorderSp' + +'acing.Around'#2#6#8'MaxValue'#2#0#8'MinValue'#2#0#8'TabOrder'#2#1#5'Value'#2 + +#0#0#0#7'TButton'#7'Button1'#4'Left'#3#248#0#6'Height'#2#29#3'Top'#2'P'#5'Wi' + +'dth'#2'L'#8'AutoSize'#9#7'Caption'#6#10'Invalidate'#7'OnClick'#7#12'Button1' + +'Click'#8'TabOrder'#2#2#0#0#11'TDatasource'#6'dsData'#7'DataSet'#7#6'rxData' + +#4'left'#3#8#1#3'top'#2#21#0#0#13'TRxMemoryData'#6'rxData'#9'FieldDefs'#14#1 + +#4'Name'#6#8'DOC_DATE'#8'DataType'#7#6'ftDate'#9'Precision'#2#0#4'Size'#2#0#0 + +#0#4'left'#3'0'#1#3'top'#2#21#0#10'TDateField'#14'rxDataDOC_DATE'#12'Display' + +'Width'#2#10#9'FieldKind'#7#6'fkData'#9'FieldName'#6#8'DOC_DATE'#5'Index'#2#0 + +#11'LookupCache'#8#13'ProviderFlags'#11#10'pfInUpdate'#9'pfInWhere'#0#8'Read' + +'Only'#8#8'Required'#8#0#0#0#0 +]); diff --git a/components/rx/version/2.1/Demos/RxDateEdit/unit1.pas b/components/rx/version/2.1/Demos/RxDateEdit/unit1.pas new file mode 100644 index 000000000..de05f14e5 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxDateEdit/unit1.pas @@ -0,0 +1,56 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, db, FileUtil, LResources, Forms, Controls, Graphics, + Dialogs, StdCtrls, rxmemds, dbdateedit, curredit, tooledit; + +type + + { TForm1 } + + TForm1 = class(TForm) + Button1: TButton; + CurrencyEdit1: TCurrencyEdit; + DBDateEdit1: TDBDateEdit; + dsData: TDatasource; + Label1: TLabel; + Label2: TLabel; + rxData: TRxMemoryData; + rxDataDOC_DATE: TDateField; + RxDateEdit1: TRxDateEdit; + procedure Button1Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.lfm} + +{ TForm1 } + +procedure TForm1.FormCreate(Sender: TObject); +begin + rxData.Open; + rxData.Append; + rxDataDOC_DATE.AsDateTime:=Now; + CurrencyEdit1.Value:=1214.55 +end; + +procedure TForm1.Button1Click(Sender: TObject); +begin + CurrencyEdit1.Invalidate; +end; + +end. + diff --git a/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.ico b/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.ico new file mode 100644 index 0000000000000000000000000000000000000000..0341321b5d952e1662a3d9444a73cf9f42a7db37 GIT binary patch literal 137040 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 G`+orYGy**U literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lpi b/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lpi new file mode 100644 index 000000000..4332c1686 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lpi @@ -0,0 +1,87 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <General> + <SessionStorage Value="InProjectDir"/> + <MainUnit Value="0"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + </General> + <i18n> + <EnableI18N LFM="False"/> + </i18n> + <VersionInfo> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + </local> + </RunParams> + <RequiredPackages Count="2"> + <Item1> + <PackageName Value="rxnew"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + </RequiredPackages> + <Units Count="2"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + </Unit1> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <Target> + <Filename Value="project1"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lpr b/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lpr new file mode 100644 index 000000000..2eea9e5ee --- /dev/null +++ b/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lpr @@ -0,0 +1,21 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, Unit1, rxnew + { you can add units after this }; + +{$R *.res} + +begin + RequireDerivedFormResource := True; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lps b/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lps new file mode 100644 index 000000000..f121fa033 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.lps @@ -0,0 +1,272 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectSession> + <Version Value="9"/> + <BuildModes Active="Default"/> + <Units Count="16"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + <UsageCount Value="28"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="0"/> + <WindowIndex Value="0"/> + <TopLine Value="45"/> + <CursorPos X="26" Y="58"/> + <UsageCount Value="28"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit1> + <Unit2> + <Filename Value="../../rxhistorynavigator.pas"/> + <UnitName Value="RxHistoryNavigator"/> + <EditorIndex Value="1"/> + <WindowIndex Value="0"/> + <TopLine Value="179"/> + <CursorPos X="3" Y="181"/> + <UsageCount Value="12"/> + <Loaded Value="True"/> + </Unit2> + <Unit3> + <Filename Value="/home/alexs/install/fpcsrc/rtl/objpas/classes/classesh.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="102"/> + <CursorPos X="55" Y="120"/> + <UsageCount Value="12"/> + </Unit3> + <Unit4> + <Filename Value="/home/alexs/work/makosh/trunk/MakoshShared/system/makoshnavigateobjectunit.pas"/> + <UnitName Value="makoshNavigateObjectUnit"/> + <WindowIndex Value="0"/> + <TopLine Value="37"/> + <CursorPos X="1" Y="38"/> + <UsageCount Value="10"/> + </Unit4> + <Unit5> + <Filename Value="../../../../lcl/actnlist.pas"/> + <UnitName Value="ActnList"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="14" Y="22"/> + <UsageCount Value="10"/> + </Unit5> + <Unit6> + <Filename Value="../../rxtoolbar.pas"/> + <UnitName Value="rxtoolbar"/> + <EditorIndex Value="5"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="31"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit6> + <Unit7> + <Filename Value="../../../../lcl/include/control.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="1398"/> + <CursorPos X="1" Y="1416"/> + <UsageCount Value="10"/> + </Unit7> + <Unit8> + <Filename Value="../../../../lcl/include/customaction.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="104"/> + <CursorPos X="1" Y="134"/> + <UsageCount Value="10"/> + </Unit8> + <Unit9> + <Filename Value="../../../../lcl/include/controlactionlink.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="31"/> + <CursorPos X="1" Y="50"/> + <UsageCount Value="10"/> + </Unit9> + <Unit10> + <Filename Value="../../../../lcl/include/actionlink.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="3"/> + <CursorPos X="1" Y="33"/> + <UsageCount Value="10"/> + </Unit10> + <Unit11> + <Filename Value="../../registerrxdb.pas"/> + <UnitName Value="RegisterRxDB"/> + <WindowIndex Value="0"/> + <TopLine Value="45"/> + <CursorPos X="47" Y="62"/> + <UsageCount Value="10"/> + </Unit11> + <Unit12> + <Filename Value="../../../../ideintf/dbpropedits.pas"/> + <UnitName Value="DBPropEdits"/> + <WindowIndex Value="0"/> + <TopLine Value="115"/> + <CursorPos X="1" Y="146"/> + <UsageCount Value="10"/> + </Unit12> + <Unit13> + <Filename Value="../../../../ideintf/propedits.pp"/> + <UnitName Value="PropEdits"/> + <EditorIndex Value="4"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="15" Y="26"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit13> + <Unit14> + <Filename Value="../../registerrx.pas"/> + <UnitName Value="registerrx"/> + <EditorIndex Value="3"/> + <WindowIndex Value="0"/> + <TopLine Value="65"/> + <CursorPos X="1" Y="84"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit14> + <Unit15> + <Filename Value="../../rxconst.pas"/> + <UnitName Value="rxconst"/> + <EditorIndex Value="2"/> + <WindowIndex Value="0"/> + <TopLine Value="89"/> + <CursorPos X="1" Y="119"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit15> + </Units> + <General> + <ActiveWindowIndexAtStart Value="0"/> + </General> + <JumpHistory Count="30" HistoryIndex="29"> + <Position1> + <Filename Value="../../rxtoolbar.pas"/> + <Caret Line="35" Column="1" TopLine="1"/> + </Position1> + <Position2> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="4" Column="1" TopLine="1"/> + </Position2> + <Position3> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="32" Column="6" TopLine="1"/> + </Position3> + <Position4> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="3" Column="26" TopLine="1"/> + </Position4> + <Position5> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="241" Column="1" TopLine="223"/> + </Position5> + <Position6> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="272" Column="1" TopLine="254"/> + </Position6> + <Position7> + <Filename Value="unit1.pas"/> + <Caret Line="57" Column="6" TopLine="39"/> + </Position7> + <Position8> + <Filename Value="unit1.pas"/> + <Caret Line="56" Column="26" TopLine="39"/> + </Position8> + <Position9> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="387" Column="13" TopLine="367"/> + </Position9> + <Position10> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="103" Column="89" TopLine="77"/> + </Position10> + <Position11> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="104" Column="76" TopLine="86"/> + </Position11> + <Position12> + <Filename Value="unit1.pas"/> + <Caret Line="49" Column="7" TopLine="38"/> + </Position12> + <Position13> + <Filename Value="unit1.pas"/> + <Caret Line="51" Column="7" TopLine="40"/> + </Position13> + <Position14> + <Filename Value="unit1.pas"/> + <Caret Line="72" Column="7" TopLine="46"/> + </Position14> + <Position15> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="333" Column="26" TopLine="324"/> + </Position15> + <Position16> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="338" Column="1" TopLine="324"/> + </Position16> + <Position17> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="98" Column="1" TopLine="90"/> + </Position17> + <Position18> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="160" Column="1" TopLine="126"/> + </Position18> + <Position19> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="110" Column="25" TopLine="94"/> + </Position19> + <Position20> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="122" Column="15" TopLine="100"/> + </Position20> + <Position21> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="185" Column="1" TopLine="156"/> + </Position21> + <Position22> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="113" Column="1" TopLine="99"/> + </Position22> + <Position23> + <Filename Value="../../registerrx.pas"/> + <Caret Line="55" Column="7" TopLine="54"/> + </Position23> + <Position24> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="109" Column="14" TopLine="100"/> + </Position24> + <Position25> + <Filename Value="../../registerrx.pas"/> + <Caret Line="128" Column="1" TopLine="92"/> + </Position25> + <Position26> + <Filename Value="../../registerrx.pas"/> + <Caret Line="118" Column="36" TopLine="100"/> + </Position26> + <Position27> + <Filename Value="../../registerrx.pas"/> + <Caret Line="120" Column="29" TopLine="102"/> + </Position27> + <Position28> + <Filename Value="../../registerrx.pas"/> + <Caret Line="122" Column="31" TopLine="104"/> + </Position28> + <Position29> + <Filename Value="unit1.pas"/> + <Caret Line="58" Column="26" TopLine="45"/> + </Position29> + <Position30> + <Filename Value="../../rxhistorynavigator.pas"/> + <Caret Line="378" Column="10" TopLine="358"/> + </Position30> + </JumpHistory> + </ProjectSession> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.res b/components/rx/version/2.1/Demos/RxHistoryNavigator/project1.res new file mode 100644 index 0000000000000000000000000000000000000000..7c6cf3e4be6fa881cb2f2caa9bda693328155c28 GIT binary patch literal 138128 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 S)M$%T8;H+2FPFK8vi}DltTdMZ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxHistoryNavigator/unit1.lfm b/components/rx/version/2.1/Demos/RxHistoryNavigator/unit1.lfm new file mode 100644 index 000000000..f8663f511 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxHistoryNavigator/unit1.lfm @@ -0,0 +1,387 @@ +object Form1: TForm1 + Left = 484 + Height = 397 + Top = 317 + Width = 552 + Caption = 'Find form' + ClientHeight = 397 + ClientWidth = 552 + Position = poScreenCenter + ShowHint = True + LCLVersion = '0.9.31' + object ToolPanel1: TToolPanel + Left = 0 + Height = 34 + Top = 0 + Width = 552 + Items = < + item + Action = actExit + Visible = True + Left = 5 + Height = 24 + Top = 5 + Width = 53 + ShowCaption = True + end + item + Visible = True + Left = 58 + Height = 24 + Top = 5 + Width = 7 + ShowCaption = False + ButtonStyle = tbrSeparator + end + item + Action = actBack + Visible = True + Left = 65 + Height = 24 + Top = 5 + Width = 76 + ShowCaption = True + ButtonStyle = tbrDropDownExtra + end + item + Action = actForward + Visible = True + Left = 141 + Height = 24 + Top = 5 + Width = 89 + ShowCaption = True + ButtonStyle = tbrDropDownExtra + end> + ImageList = ImageList1 + ToolBarStyle = tbsWindowsXP + Options = [tpFlatBtns] + Align = alTop + BorderWidth = 4 + ClientHeight = 34 + ClientWidth = 552 + TabOrder = 0 + end + object Label1: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ToolPanel1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 18 + Top = 40 + Width = 99 + BorderSpacing.Around = 6 + Caption = 'Enter finde text' + ParentColor = False + end + object Edit1: TEdit + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = BitBtn1 + Left = 6 + Height = 27 + Top = 64 + Width = 476 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + TabOrder = 1 + Text = 'text to find' + end + object Memo1: TMemo + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Edit1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = StatusBar1 + Left = 6 + Height = 273 + Top = 97 + Width = 540 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + TabOrder = 2 + end + object BitBtn1: TBitBtn + AnchorSideTop.Control = Edit1 + AnchorSideTop.Side = asrCenter + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 488 + Height = 30 + Top = 62 + Width = 58 + Action = actFind + Anchors = [akTop, akRight] + AutoSize = True + BorderSpacing.Left = 6 + BorderSpacing.Right = 6 + Glyph.Data = { + 46050000424D4605000000000000360000002800000012000000120000000100 + 2000000000001005000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF003E39 + 34FF393430FF332F2BFF2C2925FF272421FF201D1BFF1716141A110F0EDB0B0A + 09FF070706FF040403FF000000FF000000FFFFFFFF00FFFFFF00000000000000 + 0000FFFFFF0046413BFF857A70FFC3B8AEFF7C7268FF7F756BFF36322DFF1E1C + 190F282522D495897DFFBAAEA2FF7C7268FF7F756BFF010101FFFFFFFF00FFFF + FF000000000000000000FFFFFF004D4741FF83786FFFCCC3BAFF786F65FF7B71 + 67FF2F2B28F9272421011D1B18EE95897DFFC2B8ADFF786F65FF7C7268FF0605 + 05FFFFFFFF00FFFFFF000000000000000000FFFFFF00534C46FC83786FFFCCC3 + BAFF797066FF71685FFF37332ED5FFFFFF00252220D5857A70FFC2B8ADFF786F + 65FF7B7167FF0A0908FCFFFFFF00FFFFFF000000000000000000FFFFFF005A52 + 4CC39F9286FFCCC3BAFFC0B4AAFFA6988BFF3E3934A8FFFFFF002C2925A89084 + 79FFC2B8ADFFC0B4AAFFA89B8EFF110F0EC3FFFFFF00FFFFFF00000000000000 + 0000797066055C554EF9423D38FF58514AFF3D3833FF332F2BFF23201DE51716 + 14301E1C19B51A1816FF252220FF191715FF0F0E0DFF010101EE00000002FFFF + FF0000000000000000009F9286059D9185FFB1A396FF7F756BFF7C7268FF776D + 64FF6C635BFF2E2A26FF564F48FF80766CFF7C7268FF776D64FF70675EFF0000 + 00FE00000005FFFFFF000000000000000000AB9D9004AFA194E1BAAEA2FF8277 + 6DFF82776DFFAA917BFFBAA794FFB7A48EFAB09781FF9F8D7DFF836D5BFF7163 + 57FF95897DFF040403E000000003FFFFFF000000000000000000B9ACA008877D + 72489B8E82FF9D9185FF867B71FF564F48FF504A44FF80766CFF6E665DFF826C + 58FFA6917DFF948474FF564F48FF0C0B0B7A07070601FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00746B62FFA4978AFF95897DFF9F9286FF3E3934FFFFFF + FF004C4640FF7E746AFF857A70FF3E3934FF453F3AA72522200C15131102FFFF + FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008E8378E2C3B8 + AEFF655D55FFFFFFFF007C7268FFA89B8EFF9C8F83E4FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF009C8F83E2BCB0A4FF9D9185FFFFFFFF00AEA093FF9D9185FF655D55DAFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000 + } + TabOrder = 3 + end + object StatusBar1: TStatusBar + Left = 0 + Height = 21 + Top = 376 + Width = 552 + Panels = <> + end + object ActionList1: TActionList + Images = ImageList1 + left = 264 + top = 200 + object actExit: TAction + Caption = 'Exit' + ImageIndex = 0 + OnExecute = actExitExecute + end + object actFind: TAction + Caption = 'Find' + ImageIndex = 1 + OnExecute = actFindExecute + end + object actBack: TAction + Caption = 'Back' + Enabled = False + ImageIndex = 2 + end + object actForward: TAction + Caption = 'Repeat' + Enabled = False + ImageIndex = 3 + end + end + object ImageList1: TImageList + Height = 18 + Width = 18 + left = 320 + top = 200 + Bitmap = { + 4C69040000001200000012000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF006D9CD4896A9AD2FB6697CFEE0000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00709ED6DB6D9CD4FF85B1DAFF5A91B9FF6093CBEA0000000000000000FFFF + FF00FFFFFF00808080FF7E7E7EFF7C7C7CFF7A7A7AFF777777FF757575FF7272 + 72FF719ED4FF6F9ED6FF87B2DCFFABD3E8FFA9D0E6FF5890B8FF598EC6EA0000 + 000000000000FFFFFF00FFFFFF007D7D7DFF999999FF999999FF9A9A9AFF9A9A + 9AFF9B9B9BFF9B9B9BFF6F9DD3FFAAD1E7FFABD1E7FF98C7E1FF91C2DEFF568F + B7FF5289C1EA0000000000000000FFFFFF00FFFFFF007A7A7AFF999999FF5291 + 59FF999A99FF9B9B9BFF9C9C9CFF9C9C9CFF6C9AD0FFA7CEE5FF8FC1DFFF89BD + DCFF8BBDDCFF538DB6FF4B84BCEA0000000000000000FFFFFF00FFFFFF007777 + 77FF9A9A9AFF3D8A45FF498A4FFF9C9C9CFF9D9D9DFF9D9D9DFF6696CCFFA2CB + E3FF89BDDCFF83B9DAFF84B9DAFF518BB5FF437EB6EA00000000000000004494 + 4DFF42914BFF3F8D48FF3D8945FF5DA465FF5AA061FF45834BFF9E9E9EFF9E9E + 9EFF6092C9FF9EC7E2FF83B8DAFF7DB4D7FF7EB3D7FF4F89B4FF3B79B1EA0000 + 00000000000041904AFF94D29FFF91D09AFF8DCD96FF89CB92FF84C88DFF5198 + 58FF417C46FF9F9F9FFF5A8EC4FF98C3E0FF7CB3D7FF74AFD6FF5EC4EDFF4B88 + B3FF3473ABEA00000000000000003E8B46FF8FCE99FF7DC687FF78C381FF73C0 + 7CFF74C07CFF79C281FF49904FFF547F57FF5489BFFF94BFDDFF75ADD4FF63B8 + E1FF4BD4FFFF428BB8FF2C6EA6EA00000000000000003B8742FF89CB92FF84C8 + 8DFF80C688FF7BC383FF77C17FFF478F4DFF3B743FFFA1A1A1FF4C84BAFF8DBB + DBFF6EA8D1FF66A6D1FF5FB4DFFF4785B1FF2569A1EA00000000000000003782 + 3EFF347E3BFF317937FF2E7534FF499150FF468F4CFF39733DFFA1A1A1FFA2A2 + A2FF457EB4FF88B7D9FF67A3CFFF619ECCFF639FCCFF4583B1FF1F649CEA0000 + 000000000000FFFFFF00FFFFFF00606060FFA0A0A0FF3D7641FF367139FFA2A2 + A2FFA2A2A2FFA3A3A3FF3D79B0FF82B3D7FF629FCCFF5A9AC9FF5E9BCAFF4381 + AFFF196098EA0000000000000000FFFFFF00FFFFFF005C5C5CFFA1A1A1FF3C73 + 40FFA0A1A1FFA3A3A3FFA3A3A3FFA4A4A4FF3674AAFF7DAFD4FF5B9AC9FF5495 + C7FF5896C8FF4180AEFF135C94EA0000000000000000FFFFFF00FFFFFF005858 + 58FFA2A2A2FFA2A2A2FFA3A3A3FFA4A4A4FFA4A4A4FFA5A5A5FF2F6FA5FF78AB + D2FF78ABD3FF73A7D1FF69A0CDFF407FAEFF0F5991EA00000000000000009999 + 99FF717171FF545454FF515151FF4F4F4FFF4C4C4CFF4A4A4AFF474747FF4545 + 45FF25679DFF3274A8FF3D7CAFFF4784B5FF4E8ABAFF3E7EADFF0C578FEA0000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF001D639B1619609839145D9562105A92880D5890A4135C + 92FC0C578FED0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF009C8F + 83E2BCB0A4FF9D9185FFFFFFFF00AEA093FF9D9185FF655D55DAFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF008E8378E2C3B8AEFF655D55FFFFFFFF007C7268FFA89B8EFF9C8F + 83E4FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00746B62FFA4978AFF95897DFF9F9286FF3E3934FFFFFFFF004C46 + 40FF7E746AFF857A70FF3E3934FF453F3AA72522200C15131102FFFFFF000000 + 000000000000B9ACA008877D72489B8E82FF9D9185FF867B71FF564F48FF504A + 44FF80766CFF6E665DFF826C58FFA6917DFF948474FF564F48FF0C0B0B7A0707 + 0601FFFFFF000000000000000000AB9D9004AFA194E1BAAEA2FF82776DFF8277 + 6DFFAA917BFFBAA794FFB7A48EFAB09781FF9F8D7DFF836D5BFF716357FF9589 + 7DFF040403E000000003FFFFFF0000000000000000009F9286059D9185FFB1A3 + 96FF7F756BFF7C7268FF776D64FF6C635BFF2E2A26FF564F48FF80766CFF7C72 + 68FF776D64FF70675EFF000000FE00000005FFFFFF0000000000000000007970 + 66055C554EF9423D38FF58514AFF3D3833FF332F2BFF23201DE5171614301E1C + 19B51A1816FF252220FF191715FF0F0E0DFF010101EE00000002FFFFFF000000 + 000000000000FFFFFF005A524CC39F9286FFCCC3BAFFC0B4AAFFA6988BFF3E39 + 34A8FFFFFF002C2925A8908479FFC2B8ADFFC0B4AAFFA89B8EFF110F0EC3FFFF + FF00FFFFFF000000000000000000FFFFFF00534C46FC83786FFFCCC3BAFF7970 + 66FF71685FFF37332ED5FFFFFF00252220D5857A70FFC2B8ADFF786F65FF7B71 + 67FF0A0908FCFFFFFF00FFFFFF000000000000000000FFFFFF004D4741FF8378 + 6FFFCCC3BAFF786F65FF7B7167FF2F2B28F9272421011D1B18EE95897DFFC2B8 + ADFF786F65FF7C7268FF060505FFFFFFFF00FFFFFF000000000000000000FFFF + FF0046413BFF857A70FFC3B8AEFF7C7268FF7F756BFF36322DFF1E1C190F2825 + 22D495897DFFBAAEA2FF7C7268FF7F756BFF010101FFFFFFFF00FFFFFF000000 + 000000000000FFFFFF003E3934FF393430FF332F2BFF2C2925FF272421FF201D + 1BFF1716141A110F0EDB0B0A09FF070706FF040403FF000000FF000000FFFFFF + FF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00DFDBD7FFB3A79CFFA5998DFFFFFF + FF00AC9F92FF94897FFFB8B4B0FFFFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5E3E1FFCFC9C4FFACA2 + 97FF776F66FFFFFFFF00776D64FFA09488FFBAB3ADFFE2E1E0FFFFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00897E + 73FF9B8E82FF887D72FF564F48FFC0BCB8FF5D564EFF857668FF7C6F63FF6C65 + 5FFFBBBAB9FF0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00C8BFB7FFA89B90FF897E74FF86786AFF8E7F70FFA19181FF958372FF937F + 6DFF897666FF7D7166FF555351FF0000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A3978BFFA99D90FF7F756BFF7F7469FF7D7267FF4E47 + 3FFF6B6056FF84786DFF7A6E64FF776D63FF1C1A18FF0000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00605953FF46413BFF4E4842FF3833 + 2FFF383532FFC6C6C5FF5A5856FF1D1B19FF201D1BFF131110FF111111FF0000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0078726EFFA397 + 8CFFC2B9AFFFA6998EFF827C76FFFFFFFF006F6C69FF9C9186FFBBB0A5FFA69A + 8EFF4F4C49FF0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00524C46FF90867DFFAEA59BFF776D64FF55504CFFFFFFFF0045423FFF9A8F + 84FFA0978CFF7A7167FF1F1C1AFF0000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0049433DFF90857CFFABA197FF7C7268FF49433EFFFFFF + FF00484441FFA09488FF9F9489FF7D7369FF191715FF0000000000000000FFFF + FF00FFFFFF00FFFFFF003BA8DBFFFFFFFF00403B35FF4A443EFF49443EFF3A36 + 31FF2A2623FFFFFFFF00373434FF282522FF24221FFF1A1816FF050404FF0000 + 000000000000FFFFFF00FFFFFF003BA8DBFF3BA8DBFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF003BA8DBFF3BA8DBFF3BA8DBFF3BA8 + DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8 + DBFF3BA8DBFFFFFFFF00FFFFFF000000000000000000FFFFFF003BA8DBFF3BA8 + DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8 + DBFF3BA8DBFF3BA8DBFF3BA8DBFFFFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF003BA8DBFF3BA8DBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00FFFFFF003BA8DBFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF00B8B4B0FF94897FFFAC9F92FFFFFFFF00A599 + 8DFFB3A79CFFDFDBD7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000FFFFFF00E2E1E0FFBAB3ADFFA09488FF776D + 64FFFFFFFF00776F66FFACA297FFCFC9C4FFE5E3E1FFFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000BBBAB9FF6C655FFF7C6F + 63FF857668FF5D564EFFC0BCB8FF564F48FF887D72FF9B8E82FF897E73FFFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000005553 + 51FF7D7166FF897666FF937F6DFF958372FFA19181FF8E7F70FF86786AFF897E + 74FFA89B90FFC8BFB7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000000000001C1A18FF776D63FF7A6E64FF84786DFF6B6056FF4E473FFF7D72 + 67FF7F7469FF7F756BFFA99D90FFA3978BFFFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000111111FF131110FF201D1BFF1D1B19FF5A58 + 56FFC6C6C5FF383532FF38332FFF4E4842FF46413BFF605953FFFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000000000004F4C49FFA69A8EFFBBB0 + A5FF9C9186FF6F6C69FFFFFFFF00827C76FFA6998EFFC2B9AFFFA3978CFF7872 + 6EFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000001F1C + 1AFF7A7167FFA0978CFF9A8F84FF45423FFFFFFFFF0055504CFF776D64FFAEA5 + 9BFF90867DFF524C46FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000000000000191715FF7D7369FF9F9489FFA09488FF484441FFFFFFFF004943 + 3EFF7C7268FFABA197FF90857CFF49433DFFFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000050404FF1A1816FF24221FFF282522FF3734 + 34FFFFFFFF002A2623FF3A3631FF49443EFF4A443EFF403B35FFFFFFFF003BA8 + DBFFFFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF003BA8DBFF3BA8DBFFFFFFFF00FFFFFF000000000000000000FFFF + FF00FFFFFF003BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8 + DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFFFFFFFF000000 + 000000000000FFFFFF00FFFFFF003BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8 + DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8DBFF3BA8 + DBFFFFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003BA8 + DBFF3BA8DBFFFFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF003BA8DBFFFFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000 + } + end + object PopupMenu1: TPopupMenu + left = 120 + top = 136 + end + object RxHistoryNavigator1: TRxHistoryNavigator + ToolPanel = ToolPanel1 + BackBtn = 'actBack' + ForwardBtn = 'actForward' + OnHistoryNavigate = RxHistoryNavigator1HistoryNavigate + left = 441 + top = 48 + end + object ApplicationProperties1: TApplicationProperties + OnHint = ApplicationProperties1Hint + left = 360 + top = 200 + end +end diff --git a/components/rx/version/2.1/Demos/RxHistoryNavigator/unit1.pas b/components/rx/version/2.1/Demos/RxHistoryNavigator/unit1.pas new file mode 100644 index 000000000..6c426dd1d --- /dev/null +++ b/components/rx/version/2.1/Demos/RxHistoryNavigator/unit1.pas @@ -0,0 +1,82 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, RxHistoryNavigator, rxtoolbar, Forms, Controls, + Graphics, Dialogs, ActnList, StdCtrls, Buttons, ComCtrls, Menus; + +type + + { TForm1 } + + TForm1 = class(TForm) + actExit: TAction; + actFind: TAction; + actBack: TAction; + ActionList1: TActionList; + actForward: TAction; + ApplicationProperties1: TApplicationProperties; + BitBtn1: TBitBtn; + Edit1: TEdit; + ImageList1: TImageList; + Label1: TLabel; + Memo1: TMemo; + PopupMenu1: TPopupMenu; + RxHistoryNavigator1: TRxHistoryNavigator; + StatusBar1: TStatusBar; + ToolPanel1: TToolPanel; + procedure actExitExecute(Sender: TObject); + procedure actFindExecute(Sender: TObject); + procedure ApplicationProperties1Hint(Sender: TObject); + procedure RxHistoryNavigator1HistoryNavigate(Sender: TRxHistoryNavigator; + AInfo: string; AProcessed: boolean); + private + procedure DoFind(S:string); + public + { public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.lfm} + +{ TForm1 } + +procedure TForm1.actExitExecute(Sender: TObject); +begin + Close; +end; + +procedure TForm1.actFindExecute(Sender: TObject); +begin + RxHistoryNavigator1.AddToHistory('Find text', Edit1.Text); + DoFind(Edit1.Text); + Edit1.Text:=''; + Edit1.SetFocus; +end; + +procedure TForm1.ApplicationProperties1Hint(Sender: TObject); +begin + StatusBar1.SimpleText:=Application.Hint; +end; + +procedure TForm1.RxHistoryNavigator1HistoryNavigate( + Sender: TRxHistoryNavigator; AInfo: string; AProcessed: boolean); +begin + Memo1.Lines.Add('History Find text ' + AInfo); +end; + +procedure TForm1.DoFind(S: string); +begin + //Что-то ищем - Ð¸Ð¼Ð¸Ñ‚Ð°Ñ†Ð¸Ñ Ð±ÑƒÑ€Ð½Ð¾Ð¹ деÑтельноÑти + Memo1.Lines.Add('Find text ' + S); +end; + +end. + diff --git a/components/rx/version/2.1/Demos/RxLookup/project1.ico b/components/rx/version/2.1/Demos/RxLookup/project1.ico new file mode 100644 index 0000000000000000000000000000000000000000..0341321b5d952e1662a3d9444a73cf9f42a7db37 GIT binary patch literal 137040 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 G`+orYGy**U literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxLookup/project1.lpi b/components/rx/version/2.1/Demos/RxLookup/project1.lpi new file mode 100644 index 000000000..1bd29f4ac --- /dev/null +++ b/components/rx/version/2.1/Demos/RxLookup/project1.lpi @@ -0,0 +1,278 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <Version Value="7"/> + <General> + <MainUnit Value="0"/> + <TargetFileExt Value=""/> + <Icon Value="0"/> + <UseXPManifest Value="True"/> + <ActiveEditorIndexAtStart Value="0"/> + </General> + <VersionInfo> + <ProjectVersion Value=""/> + <Language Value=""/> + <CharSet Value=""/> + </VersionInfo> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="3"> + <Item1> + <PackageName Value="FCL"/> + <MinVersion Major="1" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="rxnew"/> + <MinVersion Major="2" Minor="1" Release="1" Build="103" Valid="True"/> + </Item2> + <Item3> + <PackageName Value="LCL"/> + </Item3> + </RequiredPackages> + <Units Count="9"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + <UsageCount Value="22"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + <CursorPos X="3" Y="54"/> + <TopLine Value="25"/> + <EditorIndex Value="0"/> + <UsageCount Value="22"/> + <Loaded Value="True"/> + </Unit1> + <Unit2> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <UnitName Value="rxlookup"/> + <CursorPos X="19" Y="646"/> + <TopLine Value="645"/> + <EditorIndex Value="1"/> + <UsageCount Value="11"/> + <Bookmarks Count="1"> + <Item0 X="1" Y="1315" ID="1"/> + </Bookmarks> + <Loaded Value="True"/> + </Unit2> + <Unit3> + <Filename Value="../../../../../../../../usr/local/share/lazarus/lcl/controls.pp"/> + <UnitName Value="Controls"/> + <CursorPos X="1" Y="1152"/> + <TopLine Value="1135"/> + <EditorIndex Value="5"/> + <UsageCount Value="11"/> + <Loaded Value="True"/> + </Unit3> + <Unit4> + <Filename Value="../../../../../../../../usr/local/share/lazarus/lcl/include/control.inc"/> + <CursorPos X="1" Y="4129"/> + <TopLine Value="4113"/> + <EditorIndex Value="6"/> + <UsageCount Value="11"/> + <Loaded Value="True"/> + </Unit4> + <Unit5> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxpopupunit.pas"/> + <UnitName Value="rxpopupunit"/> + <CursorPos X="1" Y="785"/> + <TopLine Value="770"/> + <EditorIndex Value="4"/> + <UsageCount Value="11"/> + <Loaded Value="True"/> + </Unit5> + <Unit6> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxdconst.pas"/> + <UnitName Value="rxdconst"/> + <CursorPos X="3" Y="68"/> + <TopLine Value="77"/> + <EditorIndex Value="3"/> + <UsageCount Value="11"/> + <Loaded Value="True"/> + </Unit6> + <Unit7> + <Filename Value="../../../../../../../../usr/local/share/lazarus/lcl/include/wincontrol.inc"/> + <CursorPos X="1" Y="7579"/> + <TopLine Value="7563"/> + <EditorIndex Value="7"/> + <UsageCount Value="11"/> + <Loaded Value="True"/> + </Unit7> + <Unit8> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <UnitName Value="dbutils"/> + <CursorPos X="1" Y="326"/> + <TopLine Value="310"/> + <EditorIndex Value="2"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit8> + </Units> + <JumpHistory Count="30" HistoryIndex="29"> + <Position1> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="225" Column="1" TopLine="209"/> + </Position1> + <Position2> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="227" Column="1" TopLine="211"/> + </Position2> + <Position3> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="340" Column="1" TopLine="324"/> + </Position3> + <Position4> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="341" Column="1" TopLine="325"/> + </Position4> + <Position5> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="342" Column="1" TopLine="326"/> + </Position5> + <Position6> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="344" Column="1" TopLine="328"/> + </Position6> + <Position7> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="345" Column="1" TopLine="329"/> + </Position7> + <Position8> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="346" Column="1" TopLine="330"/> + </Position8> + <Position9> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="232" Column="1" TopLine="216"/> + </Position9> + <Position10> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="227" Column="1" TopLine="211"/> + </Position10> + <Position11> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="229" Column="1" TopLine="213"/> + </Position11> + <Position12> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="230" Column="1" TopLine="214"/> + </Position12> + <Position13> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="235" Column="1" TopLine="219"/> + </Position13> + <Position14> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="315" Column="1" TopLine="299"/> + </Position14> + <Position15> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="318" Column="1" TopLine="302"/> + </Position15> + <Position16> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="321" Column="1" TopLine="305"/> + </Position16> + <Position17> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="322" Column="1" TopLine="306"/> + </Position17> + <Position18> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="323" Column="1" TopLine="307"/> + </Position18> + <Position19> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="324" Column="1" TopLine="308"/> + </Position19> + <Position20> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/dbutils.pas"/> + <Caret Line="326" Column="1" TopLine="310"/> + </Position20> + <Position21> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <Caret Line="1331" Column="1" TopLine="1315"/> + </Position21> + <Position22> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <Caret Line="1332" Column="1" TopLine="1316"/> + </Position22> + <Position23> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <Caret Line="1445" Column="1" TopLine="1429"/> + </Position23> + <Position24> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <Caret Line="1447" Column="1" TopLine="1431"/> + </Position24> + <Position25> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <Caret Line="1448" Column="1" TopLine="1432"/> + </Position25> + <Position26> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <Caret Line="1451" Column="1" TopLine="1435"/> + </Position26> + <Position27> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <Caret Line="1454" Column="1" TopLine="1438"/> + </Position27> + <Position28> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <Caret Line="1333" Column="1" TopLine="1317"/> + </Position28> + <Position29> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <Caret Line="1059" Column="1" TopLine="1043"/> + </Position29> + <Position30> + <Filename Value="../../../../../../../../usr/local/share/lazarus/components/rxnew/rxlookup.pas"/> + <Caret Line="1060" Column="1" TopLine="1044"/> + </Position30> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="8"/> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)/"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/RxLookup/project1.lpr b/components/rx/version/2.1/Demos/RxLookup/project1.lpr new file mode 100644 index 000000000..f3c004e85 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxLookup/project1.lpr @@ -0,0 +1,21 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, Unit1, rxnew, LResources + { you can add units after this }; + +{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF} + +begin + {$I project1.lrs} + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/RxLookup/project1.lrs b/components/rx/version/2.1/Demos/RxLookup/project1.lrs new file mode 100644 index 000000000..2747aa9b9 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxLookup/project1.lrs @@ -0,0 +1,5237 @@ +LazarusResources.Add('MAINICON','ICO',[ + #0#0#1#0#6#0#0#0#0#0#1#0' '#0#226#145#0#0'f'#0#0#0#128#128#0#0#1#0' '#0'('#8#1 + +#0'H'#146#0#0'@@'#0#0#1#0' '#0'(B'#0#0'p'#154#1#0'00'#0#0#1#0' '#0#168'%'#0#0 + +#152#220#1#0' '#0#0#1#0' '#0#168#16#0#0'@'#2#2#0#16#16#0#0#1#0' '#0'h'#4#0#0 + +#232#18#2#0#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#1#0#0#0#1#0#8#6#0#0#0'\r' + +#168'f'#0#0#145#169'IDATx'#218#236']'#5#128#28#245#213#127#235'n'#231'w9I.N' + +#136#144#4#139#17#220'['#220#221#138';!'#184'|'#180#148#2#197'Kq'#13'R('#20 + +'(V'#180#197#3#9'!'#144#144#16#187#156#219#202#173#251'~'#239#253'gfo'#246'r' + +'~'#187';{'#242#131#201#236#173#204#204#202#251#253#159'?'#25#140'a'#12'c'#24 + +#181#144'I}'#1'c'#24#195#24#164#195#24#1#140'a'#12#163#24'c'#4'0'#134'1'#140 + +'b'#140#17#192#24#198'0'#138'1F'#0'c'#24#195'('#198#24#1#140'"'#140#155'}2}' + +#223#6#220'L'#184#25'q'#11#227#230#161#173#225#167#21#17#169#175'o'#12#217 + +#199#24#1#12'c'#160'@'#155'q7'#21#183'i'#184'M'#198#173#8'8'#225'N'#217'd2' + +#153'p'#155#132#191#167#239'<'#132#155''''#145'H0B'#224'7'#175#232'v'#7'n' + +#219'p'#219#128#219'F'#220'j'#145'4'#18'R'#127#6'c'#24#26#198#8' '#199#129'B' + +'.'#199#221'x'#224#132'|'#170#176#161'P'#211#223'%='#189'N'#214#195'7+'#235 + +#230'+O@'#207'r'#156#232#249#161#0#146#197'&'#232'$'#132#228#134#196#224#145 + +#250's'#27'C'#255'0F'#0'9'#6#20'x'#18#234#189'q'#219#7#183'=P'#208'ie'#215 + +#136#159'#'#22'nA'#160'e'#194#157#226#199'DO'#20'nwG'#12'b!O'#240#127'$R'#238 + +#236#230'q'#209#157']I'#2#159#211#136#187#181#184'}'#198'o'#171#145#20'bR' + +#127#182'c'#216#17'c'#4' 1P'#224#11'p'#183#20'8'#161#223#27#5'u'#186#240'X' + +#167'L'#239'('#228't'#155#219#0#228#244#12#185#140'{'#158#140'{'#157#140#191 + +'!'#235#250'|'#232'<'#166' '#196#130#252#146'ps'#27'pRM'#255#203#184#191#197 + +#143#209#235#196#247'AbGb'#232'B'#10#29#248#248#255#160#147#16'~'#26'3'#31'r' + +#3'c'#4#144'e'#160#192'[p'#183#23#240#171'<'#10#229'L'#224#191#7#177#192#203 + +'8)'#6#185'\'#158#20'h'#185#156#187'_.'#227#4#158#30#163#219#10'z'#142#188 + +#203#227#252#30'D'#247#201#21#10#220'+AF{P@\'#22#135'D,'#134#194#26#131'8' + +#238#227#241#24'/'#216'qn'#31'O'#0#222#194#251#241#223'8@'#28#255#137#199#185 + +#191#227#137#4#187#157#224#239'#'#2#136''''#186''''#134'nH'#193#129#247#127 + +#14'<! '#25#172#147#250'{'#25#173#24'#'#128','#0#133#158#28'p'#199#224'v'#26 + +#10#227'b'#220'+'#232#254#174#2'/'#19#11#171#188'S'#176'i'#175'P'#200#153#192 + +'''o'#227#166'R'#169'A'#173'1'#128'Z'#173#3#149'V'#15'J'#165#26#31'S'#226'cJ' + +'~'#143#130'.W'#224'm'#5'w'#155'i'#10#144#212#20'8'#1#5'v'#131#9'6'#9'q,'#202 + +#136' '#22#231'H!'#22#141#178#219#177'H'#4'"'#17'?'#132#131#1#8#135'|'#16#9#7 + +'!F'#143'#'#25#196'bqF'#10#220'>'#193#238#139#11'['#146'(R'#9#161#139#217'A&' + +#195#10#220#158'G2'#248'E'#234#239'k4a'#140#0'2'#4#20'z%'#238#246#7'N'#232 + +#127#143'{'#29#221'/'#172#230#226#21'^,'#240'$'#172'$'#224'J'#165#2#148#180 + +'W)A'#163#214'3'#1#215#144#176'ku'#160#209#242'B'#175'V'#129#10#159#175'T' + +#202#217's'#233'u'#10#185'p'#172'.'#26#129#130'3'#21#184#251#216#149'p'#23 + +#202'Vn'#224'Vo'#129#4#226#156#128#198'x'#1#142#197'8'#161#142'E'#19#16'E!' + +#143'D'#227#16'Eb'#8'!'#9#132#131'~n'#11's'#251#16'#'#135'0>/'#134#207#225'6' + +#129#16#24'A'#136#8#129#206#215'U;'#192#251#215#224#238#5#220'^B2h'#150#250 + +'{'#28#233#24'#'#128'4'#3#5#127'.'#238'N'#197#237'D'#20#190'b'#186'O,'#244 + +#130#170#174#144#209'*.c'#2#175#228#133'^'#173'T'#162'P'#171'Ao'#178#130'^o' + +#3#157#209#10'Z'#29#10#187'J'#129#171'=nL'#208#233#182#156#221'V)'#21#201'=#' + +#11'%G'#0'D$r9g'#247#211#185#146'&'#3#179#8'd)'#206'AnE'#134#20'5'#30'e'#149 + +#187#29#231'6"'#128'h'#156#132'9'#158'$'#128'H'#132#246'1'#238#182'h'#31#198 + +'}8'#24#130#128#175#3#252'^'''#248'}N'#8#5'}'#236'1'#129#16#162#177#174#132 + +#16'g'#218#1#153#24#220'5'#177']'#12#175#225'c'#224#200#224'M$'#3#191#212#223 + +#237'H'#196#24#1#164#1'('#244#21#184';'#25#183'SQ'#184'v'#162#251#186#21'z~' + +#133#231'Vv'#18'^'#20'x'#149#10#244'('#232'z'#163#13#12#6#220#27#204#184#226 + +#227#170#175'Q'#130'V'#173'`'#194'O'#127#171'U'#188#192#171':'#133'^'#197#142 + +#195#173#254't'#31'g&p'#171#127#210#148#160#235#224#29#132#130#250#159#18#9 + +#224#205#0#178#245#133#21#153#217#251#252#223'$'#155'$'#160#209'8'#183#250'w' + +#146#0#10'2'#145#0#222#14'G8'#2#160'=m'#161'H'#20#205#132#24#4#195#220#237'@' + +' '#0'~'#143#139#145#1#145'B'#136#204#8#188#159'#'#131#24'gJ'#224'qbq'#193 + +#223#176#131#153#224'E2'#248'''pd@>'#131#184#212#223#249'H'#193#24#1#12#1'(' + +#248#243'pw='#10#219#17#192'-'#174#12'rN'#210'8'#149'\&O'#170#244'*'#21#9#178 + +#146#9#188#193'd'#195'}'#30'nf'#208'jT'#160#19#132#30'7'#29#19'~%G'#4'<'#9 + +#168#149#220#202'O'#171'<'#169#253#10#165#12#148'ra'#213#167's'#164#10'>]'#2 + +'wA'#188#192#11#209#129'D*'#1'$U'#239#164'g'#159#255#139#183#215#227#188'3P' + +#16#206'(o'#14#16#9#196#4'2Hj'#5#164#1#160#208#147#224#135#163'l'#31#8'E!(' + +#222'P'#240#253'>'#31#4#188'.'#240'!'#25#248'<'#14'4'#27#130#248#218'(#'#5'F' + +#4#140#12'x"'#232#226'3'#192#191')'#25#233'/'#184'='#131'D'#16#146#250'70' + +#220'1F'#0#131#0#10#254'"'#220#221#128#194'v'#16#253#157'\'#237'y'#207'<S' + ,#195#153#208'+'#217'J'#205#132#30'Wv'#163#181#24#204#184#233#13':'#20'x'#21 + +'h'#181'x'#191'H'#232'5'#188#224#179#219'$'#252'*A'#221'W$Wx'#177#176#11#231 + +'JQ'#239#229'"'#129#23#9'{JN'#128#232#189'$xg '#187#157#232'b'#143#11#130#199 + +#251#8#4'3!'#198#251#10#216'>'#198#147'BLl'#30#136#136#0#133'>'#16'N%'#1#250 + +';'#16#196'-'#20#129'` '#2#30#183#3'<'#174'f'#240'x'#218'Q;'#8'32 '#13'C'#236 + +'d'#20'L'#4#17#17#144#227#240'^'#220#30'C"'#240'I'#253#155#24#174#24'#'#128#1 + +#0#5#159#156'z7'#162'0-'#161#191#185#24'<-'#181#220'j'#159'j'#203#163'0'#235 + +'t`'#182#20#131#201'V'#2'F'#147#25#244'Z'#21#24'p'#163#189'^G'#130#174'b'#194 + +#175#21'V|'#141#130#9'='#17#6#19#252#164#131#143#183#229#153#195#16'D6=''' + +#224#178#174#241#254'.'#215'-'#147#13#236'k'#22''''#1#137's'#4#128#251#159'#' + +#2#193'THtF'#16#146#132'@'#26'B$'#158'4'#11'B'#145'N'#141' '#200#147'A '#24#1 + +'?'#146#128#31'I'#192#239#167#219#184#5#130#224'v'#181#129#219#217#194'i'#6 + +','#242#16'c'#14#199#164#137#16#139#167'h'#5'x'#187#29'/'#233'~'#220#30'F"' + +#232#144#250'72'#220'0F'#0'}'#128'/'#160#249#29'p+'#254#174't'#31#23'^'#239 + +#12#209'1!Ur'#234#189'V'#171#1#147#165#136#173#244'&K'#30'/'#236'j0'#232'T' + +#201'M'#199#147#128'V'#195#169#248#156#208'+83A'#201#31'O.'#178#231'{'#17'v' + +#254'&'#183#239'A'#208#7'"'#255'='#165#254'v%'#133'D'#167#154#176#3')p^'#255 + +#4#243#27#196'D'#142'C'#210#10#194#188'_'#128#153#7'A'#142#8'|'#129'0n'#17 + +#182#249'i'#143'Z'#128#23#205#4#15#18#1#145#129#223#239#193#215'E'#153'f'#192 + +#162#11#188#19#177#139#175#128#146#141#30#193#253'}H'#4#237'R'#255'n'#134#11 + +#198#8#160#7#240'9'#248#199#1'g'#227'S'#178#206#14#130#175#18#236'z\'#189#13 + +'&+X'#243#199#161#224#23#162#144#235'P'#232'U`'#228#5#158#8#192#168#231#132 + +'^'''#8'>'#9#189'Z'#145't'#230'q'#26#132'8'#254'/J'#254#17'.'#170#15'u>['#232 + +#202#17']'#201#128#249#14#4#13'A'#228'?`'#209#4'2'#17'b'#228','#140'32 '#159 + +#0#167#13#136#8#0'5'#2'/'#146#130#159#255#219#227'qA'#135#179#25':'#28#141'h' + +'R'#132'92Hj'#5';'#16#129#31#207#255#24#238#239'A"h'#148#224#227#25'V'#24'#' + +#128'n'#128#194#191#27#238#30'EA'#163#144'^'#138#224'+yU_'#141'6'#188#6'7' + +#163'9'#15'l'#133#149'`'#177#230#163#176#227'J'#143#130'n'#212#171#217'mN' + +#232#213'('#244'h'#235'k95_'#205'<'#250#188#7'_'#217#25#183#239'N'#173'g'#231 + +#22'.j8|S]'#202#7'RR'#135'E'#230'B,'#193#231#20#240#161'Cf"'#136'|'#3'$'#244 + +'^A+'#240#163'6 '#236'}~p'#180#213'!'#17'4'#224#243#130#140#8':#'#9#169'D' + +#128#231#14#224'%'#220#137#219'_'#198#156#133'=c8'#252#172#178#6#20#252'<' + +#220#221#137#194'w.'#240'2'#152'"'#248#188#154#175'A'#219#221'd)`'#130'oE5' + +#223'hP3'#161'7'#25'4L'#232#13#188#202#159#180#241#153#224#139#156'y'#188'z/' + +#8#190'8'#127'?'#165#208'g'#128#182'{'#174#161''''#167'b2'#225#136'O2'#226 + +#180#2'!'#140'H>'#130'X'#167#143#0#137#192'C'#194#207#8' '#12'n'#220'{'#188 + +'~p'#182#215#131#203'^'#15'A'#127#144#249#10'z!'#2#170'X'#188#24'I'#224'?R' + +#127#30#185#136#225#253#11'K'#19'x;'#255','#220#238'B'#161#203#23#156'{2'#133 + +#160#234's+'#183#22'W|'#147#181#8#242#138'+'#193'l'#182#129#137#9'='''#248'&' + +'#'#238'Q'#240'uL'#229'W'#177#24#190#134'9'#243'RU|qr'#14#8#222'z'#254':d#' + +#248#235#216#161'z0'#25'f'#228'3'#17#197'&'#2'i'#5'Q^+ '#18#8'F'#152#22#224 + +#245#133#192'C$'#224'#R'#8#129#215#27#0#167#189#1#156#168#21'P'#174'A('#140 + +'D@9'#9'T'#215#192';'#11#227#157#213#141#175#225#238#10'$'#130#6#169'?'#139 + +'\'#194#200#253#197#245#19'('#252#187#224#238'o('#152'{'#136#195'y,'#227#142 + +'6'#18'|T'#227'-'#214#18#176#21'U'#160#224'['#153#208#155'I'#232'y'#225'g'#26 + +#128#150#19'|q'#248'N'#156#158'+'#8'>'#147#249#212'z'#222#209#9'Q'#232'1'#233 + +'7'#224#137#128#204#132#8#159'tDQ'#0#166#17#132#200'9'#136#155#143#211#8#220 + +'H'#6'D'#4#28')'#4#145#8#26#145#8'j'#193#239#247'!qt'#18#1#167'm'#196#5'm' + +#128#26#156#220#138#219#3'H'#4'Q'#169'?'#130'\'#192'h'#253#249#9'Uyw'#160'0^' + +#128'{'#133#160#238#179'"'#27#222#185'G'#9':'#228#205'/('#169'F'#193'71a'#239 + +'I'#240#5#199#30'K'#203'U'#202'S'#236'zN'#232#187#177#235#199#176'C'#30'BB' + +#172#25#176#236'CN+'#8'G'#163#157'D'#192#251#4'8m'#128'#'#2#143'@'#4'm'#13 + +#224'h'#169'A'#205'!'#192#136' '#194#155#6']'#204#2'*8'#186#16'I'#224#11#169 + +#223#191#212#24#149#191'E'#20#254'Spw'#15#229#234'''Km'#21'|J-+'#190'A;'#222 + +'hB'#193#159#4#182#252'"&'#244'f#'''#252'f^'#240#13#188'W_'#219'e'#197'O&' + +#231#240'R'#223#25#162#147#250']'#231'>D'#193#4'n/'#242#21'$S'#144'{'#210#8 + +#188'!'#232' '#18#160'}'#135#23#218#155#183#130#203#217#4#193'`'#152#249#21 + +#136#8#226#172#246' %'#153#232'y'#220']'#141'D'#208'&'#245'{'#151#10#163#234 + +'g'#137#130'O'#141'0'#31'G'#193'?'#145#254#22'Vh'#5#191#234#171'U*'#180#225 + +'5'#204#185'WP2'#30','#6#29'XL'#26#176#24'9'#2#160'U'#159#9#190'F'#136#225'+' + +'9'#167#30#139#219#11'y'#255'\'#213']'#231'''<'#170'>'#226#244'A'#228'@L@gM' + +#2#249#9'"'#2#17#136#162#6#130'Y'#208#225#9'22'#160#205#225'h'#135#246#166'M' + +'H'#10#29#156'6'#192#242#8#226#156#127#160'S'#27#160'P'#225#137'H'#2#255#147 + +#250'-K'#129'Q'#243#235'D'#225#159#141#187#127#160#144'N'#17'V}'#5#159'i'#199 + ,#169#251'h'#215'['#11#160#176't2'#218#251'f&'#244'V'#163#22#204'D'#0#6'-S' + +#251'){'#143#4#159#203#244#227#146'u'#196'e'#183'];'#248#140'a'#232#16#151#11 + +#11#230'A,'#193#167#30'G'#184#228'"'#230','#196#205#195#155#5#29#222' '#18'A' + +#136#237#221'H'#8#237#173#181#224'l'#217#14#254'`'#16'B'#225'0'#159'f'#28'Oj' + +#24#192'U'#30#222#130#251';G['#161#209#168#248#165#162#240#159#135#187#7'PH' + +#181'2'#190#6'_H'#217#165#144#158#222'`'#196#21#127'"'#228#229#151#178#149 + +#158'V}+['#249'9'#193'7'#232#213'l'#213#167#172'='#242#234's'#9';\'#201#173 + +'Pp'#195'>'#204'Q'#241'iJ'#131#206'DDn'#229'N'#166#31#147'F'#16#229#170#16')' + +#143#128#210#138#189#188'I'#224#18#17'A'#135#219#11'mM'#155#161#195#209#130 + +'&'#4#146#0'%'#19#9#209#130'Nm'#224'#<'#193')H'#2#173'R'#191#223'laD'#255'd' + +#249'N<'#143#137'U~'#193#214#167'D'#30#29#174#250'yE'#168#238#23'O'#0#179'Y' + +#199#4'>'#185#242#27'9[_H'#217'e'#169#186#138#212#226#155#222#26'm'#142'!3' + +#224#139#21#147#14#195'd>A'#148'K7'#230'2'#11'9"'#224#28#132'H'#4'n$'#0#242 + +#13#144'Y`o'#133#246#230'M'#224#243'x:'#181#129'h\'#28')h'#194'3'#156#140'$' + +#240#153#212#239'5'#27#24#177'?]^'#229#127#141#186#234#138'='#252#172#180'VE' + +'N>#'#148#148#239#4'V[>'#191#226'k'#25#1#144#202'O'#241'}'#178#245'uj~'#213 + +#23'j'#237'E^}'#246#225#141#216'O/'#247#145'$'#2#232#236'AH)'#199'Q'#190#0 + +#137#10#142#168#208#200#231#227#136#128#132#223#229#9'2'#31'A'#135''''#0#173 + +#13#191#177#208'a'#144'O-'#142'&C'#134#236#200#184'K'#220#142#251#255#27#233 + +'&'#193#136#252#9#163#240#255#1'w'#247#139'U~'#174#147#14#197#244'U`'#177#21 + +'Cq'#249'4'#176#153#13'('#252'Z&'#252#164#242's'#153'|\'#234'.'#173#250'\5' + +#30#223'aG&'#235'6'#23#127#12#210'"'#145'd'#1#224#27#152#242'D'#16#137#179 + +#162'#"'#2#31#239'$'#228#132'?'#4'N'#158#8#236'm'#13#208#214#248#27'j'#11'A' + +#150'D$D'#10'D&'#193#167#192'i'#3'#'#182'5'#217#136#250'%'#243'*?y'#249'O' + +#160#191#197'*'#191'FM'#130#173#129#252#210'j(,'#169'bj'#190#213#162#5#155'I' + +#155#12#241#137#227#249'B'#18'Ogn>$k'#236#199#144'['#160#214#229#157#185#4 + +#188'Y'#192#218#152'qY'#133#212#153'('#192#215#23'0'#223#0#145#128';'#128#166 + +#1#238#157'Nh'#169'_'#15'^O'#7#231#27#216#209'$h'#1#206'/'#240#177#212#239'3' + +#19#24'1'#191'f'#20'~'#26#139#245#30#10#255#188#174'I=\\'#159'T'#254#25'`' + +#203#207'c+'#190#205#164#3#171'Y'#203#135#247#212#172'XGH'#221'e'#13'7'#146 + +#234#190'h'#229#151#250'M'#142#161'G'#136'|'#132#220','#131'8'#223#201'('#193 + +'7)'#9'sNB'#210#6#220#188'9@'#190#1#167#155#246#254#164'I'#16#224#27#146'DY' + +#155#244'$'#9'P'#214#224#217'H'#2#207'K'#253'>'#211#141#17#241#155'F'#225#159 + +#128#187#255#160#240'O'#18#132#159'b'#243#228#229'gi'#188#182'"T'#249#167#163 + +#192#163#202#143'B'#159#135#155#133'_'#249#141'|}'#190#154'o'#192'A'#141':' + +#229'2Q'#231#220#17#241#9#141'B'#240#13'L'#200#128#23'Z'#153#9#185#3'T['#224 + +#241#134#185'('#1'j'#1#14#212#6#220#168#21#180#183#212'C['#243'&'#214#152#132 + +#202#142#133#156#1#222'/'#128'<'#144'X'#134'$p'#143#212'o-'#157#24#246'?o' + +#222#217#247#1#10#127#137#216#222#167#226#29#157'V'#203#210'x'#11'H'#229''';' + +#223#204#169#252't'#155'e'#243#233':='#252#201#10'='#161':O'#234'76'#134#161 + +'#'#193#165#26#11'-'#200#163#188#147#144#186#19#177#188#1'_8'#169#13'8'#153 + +'F'#16'@'#147#160#3'Z'#234#214'1'#147#128#146#135'('#5'YD'#2't'#172#187'qw' + +#237'H'#153'l4'#172#127#231'('#252'4a'#231'-'#20'~'#139' '#252','#163#143'T~' + +#131#1#138'+f@^^A'#167#224#155#185'0'#31#9'?+'#213#229#227#250'B'#231#29#232 + +'R'#142';'#134#145#1'q'#163#211'd'#164' '#202#165#19#11#225'Br'#14':'#220#28 + +#9#208#214'Z'#191#1'\'#246'&'#212#24#194','#170#16''''#191#0'$M'#130#231#240 + +#128#231#140#132#130#162'a'#251'sG'#225'?'#10'w/'#161#240'k'#132#240#28#169 + +#252'j'#170#213'7'#153#160#164'r6'#216'lff'#235#219#204#218#164#189'/'#180 + +#228'R'#243#173#183#200#209''''#212#225#143#9#255#200#133#144'H'#148'lJ'#130 + +'&A'#24#237#252#16'_n'#204#162#4'nN'#27' '#147#128#162#4'-'#13#155#192#209'Z' + +#203#234#9'('#162' '#174'%@'#18#248'7'#30#238'8$'#129#128#212#239'm('#24#150 + +'?y>'#204'G%'#188'r'#193#211'/8'#251#168#15'_i'#213'L'#176'YM'#144'G'#206'>' + +#139'.'#25#226#211#179'&'#29#202'd'#223'='#161'D'#151#251' '#134#229'G1'#134 + +#1'B<'#216'Th^J+'#188'@'#2'd'#18#144'c'#208#217#17'`'#251#182#230#237#208#214 + +#180#9#130#129'03'#7#186'D'#8#190#194'C'#30#142'$'#224#148#250'}'#13#22#195 + +#238'W'#143#194#127'3'#10#238'mt['#16'~5_'#193'g'#177#22'@i'#229'L'#176'Z' + +#245'L'#240#137#0#200#233#199#132#159'o'#201'%'#30#160#193'>'#128#177'e'#127 + +#212'A<'#2']'#156'<D~'#1#175#136#4#28#29#1#22')hk'#173'G'#147'`#'#4#130'!|^' + +#164'+'#9'Pi'#241'A'#195#181#209#200#176#250#245#163#240#255#5#5#246#26#186 + +#205#166#226'*'#185#250'{*'#228#177#229#149'@Q'#229'N'#144'g&'#149'_'#199'b' + +#252'V'#163'P'#196#163#226'b'#251#226':}'#217#152#240#143'f'#8'$'#16#231'{' + +#21#198#248#150'd'#20'%`$'#224#225'5'#1#182#5#160#189#189#5'Z'#235#214#131 + +#207#31#224#194#132#148'4'#212'I'#2'5x'#168'E'#195#145#4#134#141#4#160#240'_' + +#5'\'#13#127'R'#248#201'{'#207#132#191#160#2#138#203#167#160#170#143#171#190 + ,'E'#155#20'~'#202#234'#'#225#23#242#248#147'^~'#24#157#246#190#215#235#134 + +#143#222#127#19#190#253#234#19#216'^'#179#25#206'8'#247'J8'#232#208'c'#164 + +#190',I'#209#217#180#148#139#18'DDEEIs'#192#205#153#3'v'#135#29'Zj'#127#6#159 + +#207#151'lH'#218'E'#19'X2'#220#204#129'a!'#6'|'#3#143#231'ed'#244'w'#17#254 + +#252#226'j(*'#171'f'#161#189'<f'#239'kYn'#191#144#210'+.'#226#1#217#232#246 + +#242#31#184'x'#10#174't'#169#142#235'Ysv'#131'?'#223#255'<'#168#213'j'#169'/' + +'O2p='#10';['#146'Q'#203'r'#150'/ J'#26'b&'#1#31'&l'#222#190#150#145'i7$@>' + +#129#253#135#147'c0'#231#197#1#133#159#198'o'#189#141#178#175#18#219#252':' + +#173#26#10#203#166'@Aq%'#243#240''''#133#159'<'#253'$'#252#201#10'>'#174'tW6' + +#22#219#135#223#29'0'#11#2#254#29#167'hi'#181':'#184#231#161#151'`'#234#244 + +'YR_'#162'd'#224'9 '#233#23#136'D'#184#209'f'#228#28'd'#21#133#148''''#208#17 + +'d'#161'B'#167#203#141'$'#240#19'x<'#29#221#145#192';x'#168'#'#145#4'bR'#191 + +#167#254' '#167'e'#130#239#207#255')'#10#191'A,'#252#180#242#23#148'N'#130 + +#162#210#241'I'#225#23'r'#250#5#225#231'Fi'#203'E='#249'r'#250#173'f'#5'''' + +#31#181#16#218#219#186#175'kQ('#148'p'#239'#'#175#192#244#25#187'H}'#153#146 + +'AhP'#10#2#9'D'#185#225'%b'#18'pv'#8#155#27#154'j'#214#128#215#227'fm'#201 + +#187'8'#6#159'F'#2'8['#234#247#211#31#228#172'T'#160#240'O'#193#221'W('#184#5 + +'B'#146#143' '#252#249'EU'#156#205#207#132#159#203#235'gi'#189'z.'#179#143#28 + +#131#138#148#148'^'#24#157'F'#127#23','#191#252#20#248'i'#245#183'=>N$p'#215 + +#131'/'#194#140#153#243#165#190'T'#233#144#28'f'#2#201#129#167'D'#2#212#127 + +#144#230#18#8'$@'#230#128#195#233'B'#18#248#17'|>'#127'2:'#192'&'#21'q'#14 + +#198'?#'#9'\'''#245#219#233#11'9)'#21'('#252#165#184#251#26#133#127#188'8' + +#195#143'9'#252#10#199'AI'#197'N,'#185''''#143#247#246#179#236'>'#157#154#13 + +#215'd'#194'/j'#211#149#179'oR'#2#216#219'Z'#224#180#227#150#224#15#180#231 + +#18'w'#185'B'#1'w'#222#251'<'#204#156#179#155#212#151'+'#9#196#195'P'#133#206 + +'CD'#2'!VC'#16'e'#221#135#133'""'#202#21' '#199' i'#2#1#170#31#160#241#230 + +#204#28'H'#8'$@s'#8#238#151#250'='#245#134#156#147#13#190']'#247#255'Pxg%' + +#133#31#127#148#26#190#168#167#140#226#252#164#242'S'#156#223',R'#251#213'JP' + +#170#184'>}c!'#190#158'q'#255']'#215#194''''#31#190#217#235's'#228'r'#5#252 + +#249#129#21'h'#14#204#149#250'r%'#133#16'*'#20'r'#5'h'#132#25#149#21#139#205 + +#1#210#4#236#237#173#208#178#253'g'#8#132#130#140'('#132#218#129#4'7R'#249 + +#148#134#159'^zI'#234#247#210#19'rJJP'#248#201#21#253#17#141#223#22#170#250 + +#148'|'#134#159#217#146#7'%'#19'fC'#158#201#0'6'#171#150#197#250#217#202#143 + +#194#175#213'(S'#187#246#228#212#187#202'-'#196#227'Q8'#254#176'y'#16#194#31 + +'ko'#208'hu'#240#220'k_'#130'^o'#148#250#146'%'#133#216'1('#152#3#204''''#224 + +#237'L'#27'&'#231' '#151','#180#129#235'0'#20'I!'#129#8#30#225'0$'#129#156#28 + +'M'#150'S'#162#130#4#240#16#10#255#197#226#146'^'#141#138'r'#251'-P:a'#23'\' + +#249#141'l'#213'g'#194'o'#226'V~-'#133#250'D'#243#246'r'#234#13#229'('#222 + +#254#231#179#240#244#223#255#220#231#243#202'+'#171#225#225#167#222#147#250 + +'r%Grr'#17#175#9#4#187#144#128#144''''#208#218'T'#3#246#166#205#157'$'#208 + +#217'O'#192#145'H'#196'vi\'#251'J'#173#212#239#165'+rF^'#248#226#158#127#138 + +#19'}'#168'A'#7'5'#242'('#173#154#11'y63W'#213#199#215#242#147#195#143'*'#250 + +#132#129#28#178#177#149#127'@8'#251#132'%'#224't'#244'='#15'c'#191#131#143 + +#133#11#175#184']'#234#203#149#28'B1'#17'9'#249'"|'#187'1.O '#204'J'#137#137 + +#4':P'#19'hi'#220#4#246#214#237#16#162#198'"'#169'ME'#190#142#4#28'K['#127'{' + +'?"'#245'{'#17'#''D'#134'o'#232#241'#'#149#245#10#225'>'#18'~'#157'^'#15#165 + +#227'w'#1#155#205#154't'#248'Y'#153#218#175#225#235#248';'#213'~!'#183#127#12 + +#253#195'/?}'#7#183',;'#163'_'#207#189#234#134#251'`'#193#146#131#164#190'd' + +#201#145#28'Y'#22#227#204#1#210#4'|B'#155#177'dw'#161' 4'#213#173#131#14#190 + +#148'85<'#24#191#27'M'#129'k!e'#144#186#180#144'\jx'#187#255'K'#20#254']'#187 + +#134#251#138'+w'#134#130#130#210'd'#172#191#179'}'#151#138#235#207#207#183 + +#232#22#6'}'#140'a`8'#239#228#165#168#5#244#221#2#159#194#131#15'='#253#1#20 + +#22#149'I}'#201#146#131'K'#27#230'5'#1#190#185#8'M.'#166#218#1#18'~'#135'''' + +#192'Z'#140'5m'#253#17'<ng'#215#200'@'#130#247#7#188#15'9B'#2#146'K'#13#18 + +#192'}('#252#151#167'8'#253'P'#181'O'#198#250'M'#156#205'/.'#233'U'#11's'#248 + +'d|'#168'O'#226'wq'#238#137#139'Y'#7#25'6/@'#174#128'3'#254#176#28'U'#231#227 + +#164#254'h'#251#196'#'#247'\'#7#255#251#244#237'~='#215'j+'#128'G_'#248#140 + +#17#244#168'G'#2'R'#134#146'P'#218#176#143'u'#29#230':'#14'S'#21#161#147'r'#4 + +#182#173'b'#237#197#186'8'#5#219#19#241#216'.'#141'?'#191'R/'#245#219' H*:(' + +#252#191#199#221#191'R'#236'~'#230#241#183'A'#217#248#185#184#242's'#225'>' + +#202#242'3'#25#185#149#159#230#241'q'#133'=\'#168'Oj'#6#251#237#215#31#225 + +#230'kNM'#185#143'H'#224#222#199#222#134#210#210'*'#137#175#174'wl\'#183#26 + +'n'#185#246#180'~?'#127#238#174'{'#193#178'['#30#145#250#178's'#2#180'|s-' + +#200#169#187#16#154#3'An"'#17#235','#212#17#20#149#17#175'Ov'#27#22#249#3#190 + ,#12'y['#246'n'#223#242#177#228#29#133'$'#147#31#20'~'#146#14#178#251'm'#226 + +'4_='#218#253'e'#19#230#161#221'oa'#130#207'9'#253'h'#229'W'#179#22'^\I'#175 + +'<9r[j'#220'y'#243'y'#240#243#143#223#236'p'#127'qi'#5#220#247'xnz'#208#219 + +'['#155#224#213#23#30#128'5?|'#1'>'#175'{@'#175'='#243#130#27'`'#255'CN'#144 + +#250'-H'#14'![0'#193#135#7'I'#192'i"'#145#208'^'#140'5'#20'Am'#160#185#238'W' + +'p'#182#215'C8'#196'u'#26'&'#194#224#15'pg'#253'O+n'#0#137'M'#1'ID'#8#133'_' + +#5'\'#178#207#30#226'L?'#157'F'#3'E'#21';'#163#250'_'#146'l'#229'%T'#246'Q3' + +#15#214#194'K)'#227#166#239#230#130#244'#'#206'8z.D#;:v'#149'J'#21'<'#251#198 + +'j'#169'//'#137'p8'#12#239#188#254#4#252#247#227'7'#193#209#222'2'#232#227 + +#200#240#187':'#253#188#235'`'#191'1'#18'H'#166#13#11#227#203'Y'#162#144'P7' + +#144#236'%'#224'GS`5x'#221#174#29#252#1'h1'#30'R'#183'f'#197#135' !'#9'HE'#0 + +'w'#161#240'/'#163#219#10#161#139#175'F'#9#249#133#227#161#168'|2o'#247'wv' + +#239'e'#225#190'd'''#159#220'q'#248#213'l^'#15'7]'#221#179' <'#241#202#183 + +#160#213#234'%'#189#198'`'#208#15#127#185#245#15#176'y'#227#207#189#166#0#15 + +#20#147#167#205#134#229#183'?'#1'j'#181'V'#210#247'''5'#18#162'a'#165'\'#142 + +#0'?{'#128'H'#128#138#134'<\'#205'@'#179#216#31#208'i'#10#180'i'#212#138#217 + +'['#191#127#190#25'$"'#129#172'K'#18#10#255#28#220#253#128#4#160#16#199#251 + +#141'f'#206#238#183#176#6#158#188#221'o'#224'j'#250#233'q*'#238#145#201'd9' + +#21#239#127#255'_'#207#193'+'#207#253#181#199#199#175#189#237'q'#216'i'#214 + +#238#146']'#223#166#13'?'#193#221'('#252#161'Pf'#202#211#213#26'-\t'#245#221 + +'0g'#254#18#201#222#163#212'H$'''#18#9#21#132#220'\'#194'dk1'#26'C'#198'g'#10 + +#182'5n`'#13'F'#187#148#15#191#220#240#211#10#234'w'#193#15'8'#203'.'#178'*J' + +'('#252't'#190#175#197#170#191'`'#247#151#140'G'#187#223'jN'#246#239#167'Q]' + +#212#193'W'#173#22'M'#229#205#21#201#231#241#183'{'#151#193#247'_'#247#156 + +#225'y'#197#13#15#195#172#185#139'$'#185#182#230#198#237'p'#253#165'G'#166'u' + +#213#239#9#187'.'#216#31'.'#188#234'nI'#222'g'#174'@('#30'bN'#193#8#231#15 + +#160'Qd'#212'i'#216#201#166#19#147'?`='#184#218#27'v('#26#146#203#18#251#213 + +#173'y'#137#166#17'g'#157#4#178'M'#0#231#2'7'#187#143#169#254#148#234#171'U' + +#171'Q'#237#223#9#237#254'q,'#212'G'#4'@'#19'z'#141#186'N'#187'_'#220#202'+' + +#151'p'#203'U'#199'A}'#237#166#30#31'?'#245#188#27'a'#233#254'GKrm'#203'/:' + +#12'W'#157#236#181#168'3'#154#173'p'#205#205#143'Cy'#213'dI'#222'o.@p'#10'F' + +#226#220'(2'#214'iX(!&'#18#240#248#161'q'#235#15#224#247'y'#216'0R'#145')' + +#176#161#208#28#223'e'#205#23'/'#135'`'#164#18#0#10#127#1#238'6'#162#240#231 + +#145',+'#168#194#15#5#220'l-'#130#210#170#217#220#136'nQ'#129#15#169#254#201 + +#210#222#28#136#245'w'#135#171#207';'#0':\'#237'=>>{'#222#18#184#248#218#236 + +'W'#131#174#250#246#19#248#251'_'#175#201#250'y'#169#148#248#162'k'#254#138 + +'Z'#207#226#172#159';W@>'#129'x'#12#152#199#159':'#10#249#168#183#160#159's' + +#10#18#17#216#219'['#160#165'v-'#155':'#20#21'B'#131'@?'#239#196#245'{L'#14 + +#255#229#181#215'^'#139'C'#22'I '#155#4#240'4'#10#255#153'B'#194#15'e'#242'i' + +#181#26'('#171#222#21'l'#22'+X-'#26#150#227'o'#210#11#241'~E'#206'W'#247']y' + +#206#190#224#245#184'z|'#220'`'#180#192'}O}'#154#245#235'z'#230'o'#183#192'7' + +#255#253#183'$'#159#9'iw'''#156#185#12#246'>0'#247#19#161'2'#1'nE'#231'z'#11 + +'R'#166' '#181#26'gIB'#194'@R'#26'8R'#251#11#184#28'M]K'#135'}'#10'Yd'#230'Y' + +'G'#236#180#253#214'[o'#205#154')'#144#21#209'B'#225'_'#136#187'/'#196'M=)' + +#225''''#191'x'#2#20#150'M'#228#236'~'#190#159#31#27#209#205''''#251#200#20 + +'|'#154'o'#142#142#228#190#242#156#165'L'#157#235#13#203'n'#127#22#170'''' + +#207#204#234'u'#253#241#186#147#160#174'f'#163#148#31#13#236'{'#200#201'p' + +#236#169'WJz'#13'R!'#217'e'#152'2'#5'Q'#19#160#162'!'#174#155#16'_='#232'rC' + +#211#214#239'!'#16#12'tI'#16#138#191'5'#217#214'x'#204#231#159#127'.h'#1#25 + +''''#129#140'K'#22#10#191#18'w'#171'Q'#246'g'#138#29#127#6#163#9'W'#255#221 + +'P'#232'u'#220#234'o'#20'B~'#156#221#175#148'Q?'#191#172'\'#226#160'q'#229'Y' + +'KX'#152#173'7L'#156':'#27#174#186#229')v'#155#190#232#141#235#190#135'_~' + +#252#2'j6'#255#2#173'-u'#16#14#5#161#176#184#28'f'#238#178#24#150#236#127',' + +#216#242#139#135'|]w\{<4'#214'm'#145#250#227#129'='#150#28#6#167#157#127#171 + +#212#151'!'#13'(*'#144#224#187#9#133'R'#203#135'iko'#222#14#237'M'#155' '#28 + +#230'M'#1#222'!'#168#144#197#143#216'}r'#244#223#217'2'#5#178'A'#0#201'~'#254 + +#130#227#143'V'#255#226#138'Y'#144'_X'#194#170#251#204#204#235#175'f3'#251'4' + +#194#164'^'#5#191#242#231#174#252#195#21'g.'#198'/0'#216#231#243'*''L'#135 + +#246#214#6'^['#232#253';'#173#154'8'#3'.^'#246' '#232#141#230'A_'#215#223#239 + +#189#18'~^'#253#133#212#31#15#195#137'g]'#7#139#246'=J'#234#203#200':'#196 + +#249#1#194#172#1#242#7'P4'#192#229#14#129#27'I'#160'q'#219#15#204#132#236#146 + +#27#176#173#196#26#155'S]'#20#243'e'#131#4'2*^('#252#229#184#251#21#133#223 + +'(8'#254'h'#245'7'#219#138#161#164'r&'#179#249#201#243'o'#22#169#254#148#240 + +#195#138'j'#134#193#140#238'+'#206'\'#4#209'H8'#237#199#165#234#187#227#207 + ,#188#22#246'\'#250#251'A'#189#254#173#151#31#130#143#223'}A'#234#143#135#129 + +'4'#190#229#127'Z'#1#165#229#19#165#190#148#172'#9'#131#144'R'#133#249#209'c' + +'n'#26'I'#206#180#128#16'8'#236'm'#208'R'#187#134#213#10#136#27#138#202'e' + +#137'?'#21')6'#222#186'j'#213'*j-'#158'QS '#211#4#240','#238'N'#231#194'x\' + +#165#159'N'#167#129#210#9#187#162#218'o'#6'3o'#247#155'x'#213'_'#165'Rt'#198 + +#251's\'#248#9'W'#158#177'p'#135'A'#27#233#2'}'#6'W'#160#233'@'#26#193'@'#225 + +#180#183#192#173#151#255'N'#234#143''''#9#157#222#8'w<'#244'>(G'#227#240#145 + +#132#184#167' '#167#5#176#198#162#158#16#155'@'#220'Z'#255'+t8'#26#152'C0'#22 + +#139#9#164#17#210'(";W'#154'[k>'#255#252's'#129#4'2'#130#140#137#25'_'#236 + +#179#25#127#200#202'd'#147#15'\'#225#243'J&Aa'#201#4'&'#248#22'>'#219#143#188 + +#254'B'#194#143#208#214'K6'#28'4'#128'3'#22#160#234#150#185#249#15#148'F'#252 + +#199'G>'#4#165'j'#224#130#243#199'k'#143#131#214#166#237'R~<)'#168#24'?'#13 + +#174#190#253'9'#169'/#'#171'H'#206#31#20'G'#5#130'\'#150' E'#5#152'&'#224#246 + +'A'#211#182#149#16#240#7#146#25#130'd6'#160#22#240#216#30#147'#'#151#226#203 + +'c'#153'4'#5'2I'#0#127#195#221#5#194#234'O'#171#187#222'`'#198#213#127'>'#174 + +#252#186#164#234'O1'#127#13#175#250#11#173#188's5'#236#215#21'W"'#1'd:'#211 + +'n'#206'n'#251#194#233#23#253'q'#192#175'['#245#205#135#240#226#223'o'#145 + +#234#163#233#22'{'#29'x'#2#28'q'#210#229'R_FV'#145'L'#21'&_'#0#223'T4'#16#226 + +#18#132'H'#3' "ho'#169#5'{'#211#198#174'a'#193#160'Y'#23#157#174#143'ln'#200 + +#164')'#144#17'Q'#227#251#250'oCa'#214#8#171#191#150#194'~'#227'v'#130#130 + +#194'q,'#233#135'R}'#169#198#159#10'}'#146#173#189#134'Y['#175#171#207'^'#136 + +'_lf'#9'@'#173#209#193#157#127#31'\.'#193'u'#231#239#3#225#12#213#1#12#22#231 + +'^y'#31'L'#155#185#135#212#151#145'u'#136'G'#145'S'#130#16#171#21#224'K'#135 + +'I'#19' -'#192#231#245'$'#147#131#226#156'/'#224#129#137#214#198#229#133#133 + +#133#145'Li'#1#153'"'#128'{pw'#149#216#246'7'#24'q'#245#175#222#21'W}m'#146#0 + +'('#215'_'#163'Q'#138'r'#253'3'#253'5'#164#23#203#206'Y'#196#190#172'L'#131 + +#132'f'#234#206#3'/*'#250#199'3'#127#130#149'_H'#147#16#212#19#242#10'J'#225 + +#250#191#252'S'#234#203#200':'#132#4'!'#161'V'#128#229#6#8#166'@W-'#128#250#8 + +#178'(B'#194'k'#209#248#166#203'|'#155'Z'#143'='#246#216'h&'#18#132#210'.r(' + +#252#249#184#219'.'#158#231'G*~~'#233'4(('#174'`'#182#191'9'#153#238#171'J' + +#233#231'?'#220#176#252#188#197#25#245#1#8#152#188#211#174'H'#2#15#12#248'u~' + +#159#27'n'#187#252#224#164'-'#154'+'#184#244#198#167#161'|'#252'4'#169'/#' + +#235'`i'#194#162#178'a'#214'U'#152#143#10'Px'#176'i'#203'w'#224#247#251#152 + +#22' D'#4#20#178#248'_'#198#233'jn'#213'h4'#145'L8'#4'3A'#0#255#135#187#27 + +#133#184'?'#173#254'z'#189#1#202'&'#238#193#4#159'<'#255#20#243#167#176#31 + +#149#249#178'b'#31#190#189#207'p'#226#128#166#186#205'p'#255'm'#167'g'#229'\' + +'&K>'#220'xo'#255'z'#247'u'#197#227#247'\'#10'[6'#172#202#230'G'#211'''*'#171 + +'w'#134#139#174#127'L'#234#203'H'#162'v'#235'z'#248#224#141#191#179'U'#248 + +#202#219'^'#4'm'#6#134#161#236'P6LZ'#0's'#8#134'Xkq'#242#7#216'['#182#131#189 + +'y'#19#203#11#16'E'#4':'#10#13#222#25#165#150'p'#187#209'h'#140#166#219#20'H' + +#171#200#161#240'S'#246#10#173#254#214'd'#193#15#10'y^'#233#20#200'/'#170'd' + +#4'`'#225'+'#253#132#213'_.'#204#241'K'#251'G'#158'Y<'#245#192#149#176'i'#221 + +#202#172#156#139#138'l'#254#244#232#127#7#245'Z'#183#171#13#238#188#246#168 + +#156#210#2'hq'#184#225#158'w'#192'h'#178'Jz'#29'?'#175#250#12#222'z'#233#175 + +#224#245'8'#147#247'Yl'#133'p'#237#157#175#225'oR'#153#246#243#9'#'#200#147 + +#29#132#216#188#193#8'x<H'#0'>'#242#5'P'#181#224'w'#16#164#136'@'#172'S'#11 + +'P'#202#227#255'7'#181#208'~'#151#221'n'#15#167#219'!'#152'n'#2#184#30'w'#127 + +#20#175#254#172#183#127#245#238#184#234#235'p'#245'Ws'#157'}'#249'b'#159'd' + +#216'o8-'#253#192#133'tn'#190'x'#31#136'g('#7#160';\'#247#151#183#152'&0'#24 + +'<Cd'#181'>;d'#213'_'#204#156#191#15#156'x'#174#180#3'G'#222'|'#225'.'#248 + +#254#203'wv'#184#191'x\5\v'#243#243#25'9'#167'0'#130'<'#22#19#194#130#145'd' + +#243#16#210#4#218#155#183#130#179'uk'#215'r'#225#246#170'<'#255',u'#194#233 + +'L'#183'C0m'#146#135#194'O'#189#175'jP'#152#11#133#156#127'J'#249#205'+'#158 + +#4#249#197#227'q'#245'Ws'#131'<uj~'#168#7#151#244#3#195'p'#144#231#23#31#190 + +#4#31#190#249'hV'#207#249#251'S'#174#129']'#23#13'.'#185#199#231'q'#193#159 + +#151#253'.'#167#180#0#202'v'#188#229#161#143'2'#178#210#246#23'_}'#252'*'#188 + +#255#250#195#221'>6'#127#209#225'p'#196')'#203'2r^'#241#152'1'#234'#'#232#167 + +#228' >*@Z@'#211#150'o!'#24#10'B4'#210'Y#'#160'R'#196'o'#24#167#171'}'#200 + +#229'r'#133#210#233#16'L'''#1'\'#134#187#251#133#22#223'JV'#238#171#195#213 + +#127#15'0'#25#185')'#190#228#249#215#137'W'#255'af'#247#11#248#203'uG'#130 + +#167#195#158#213's'#206#156#191'/'#28'w'#214#224#227#250#143#254#249'\h'#172 + +#149#182'B'#176'+'#14':'#234'"X'#184#223#241#146#157#127#235#198#213#168#29 + +'u'#159#151' '#147#201#225#218#187#254#5#6'cf'#204#148#148#185#2'4v<'#16#6 + +#143#151'#'#129#246#166#205#224'j'#171'I'#169#17#192#127#154'&'#216#218#230 + ,'DC'#30'O:'#29#130#233'$'#128#159#196'#'#189')'#231#223'VT'#13#249'%'#213',' + +#219#143'y'#254'u'#157#147'|'#5#219#127#184#161#177#246'7x'#236#174's'#179'~' + +#222#130#226'J'#184#228#230#193#231#247'?'#250#167#179#160#185'A'#250#10'A1' + +#170#167#205#131#211'/'#249#235#208#15'4H'#4#253'^'#184#243#154'C{|'#188'j' + +#210'l8'#235#138#7'3rn'#161'N'#128#204#0'J'#14#242#5#195#172'd'#152#204#0#183 + +#199#11#205#219'V'#162#22#16'Ji'#29#166'SFO'#221'i\'#224'-$'#128#208#140#25 + +'3'#210#162#5#164'E'#2#199#205':q'#14#200#228'?'#166#14#248'PC'#217#196'=' + +#193'h'#212'%'#195'~]m'#127'v'#1#195'L'#5'x'#246#129#203#160'f'#211#154#172 + +#159'W'#161'T'#193'M'#247#127'<'#232#215'?p'#203#9#224#180'7e'#253#186'{'#131 + +#209#156#15'W'#255#233#13'I'#175#225#214'K'#150'v'#186#232#187#193'y'#203#158 + +#128#178#202')i='#167'`'#138'u'#230#5#196'Y#Qj'#28'Bu'#2#20#26'lk'#218#8#238 + +#246':'#22'-'#16#210#131#21#242#196#191''''#231#181#156#145#151#151#231'okkK' + +#139#22#144#30#2#152'}'#242#189#184#187'R'#156#248'c'#206'+'#133#162#242#25 + +'l'#245#167#141'l'#255#174#5'?'#195'L'#246#25#238#184'|'#191#140#21#0#245#133 + +#195'O'#186#6#230#238'y'#232#160'^{'#207#245'G0_@.'#129'4'#197#155#30#200'~' + +#199'$1'#250#250'>+&'#236#12'g]'#249#240#0#142#216'?'#8#26'@gD'#160#179#135 + +' +'#22'r9'#160#173'v'#245#14'EB'#165'F'#215#156'Bs'#188#209'h4'#6#211#161#5 + +#12'Y'#4#11'&'#238#167#212#24#139#235'P'#160'K'#196#206#191#194#242'Y`'#205 + +'+J'#18#0'7'#211'O'#148#243#159#246#143'4'#243#168#223#182#14#158#185#255'b' + +#201#206'o+('#131#139'oZ1'#168#215#222'u'#237#161#16#238#163'y'#137#20#184 + +#225#222#143'@'#174#148#206#17'x'#247#242#195'!'#24#240#246#248'8'#249#2#150 + +#223#243'>.j'#233#175'd'#20#198#139#209#198':'#9#135'"\'#15'A$'#0'2'#7#154'k' + +#190'g'#201'\bg'#160'F'#17#185'~'#130#205#254'x'#186#180#128'!'#203#225#184 + +#217''''#29#130#135'yW'#172#254#235'tz('#157#184#7#152#244#26#214#229#135'e' + +#253#241#171'?'#169#255#220#7#155#246#207'3'#227'xg'#197#159'a'#237#247#255 + +#25#250#129#134#128'E'#7#158#10'{'#29'|'#230#128'_'#247#231#171#15'D{2'#167 + +'F'#211'3\q'#199#27#160#207#144#163#173'?x'#232#182#19#192#237#236'}B'#242 + +#194#253'N'#130#165#135#157#147#145#243''''#135#138#196'83'#128#178#3'='#188 + +')`o'#169#1'g'#203#230'd'#219'0'#190'Jp'#213#228#188#230#223#163#6#224'N'#135 + +'/`'#168'b(C'#245#255'%'#220#159' '#174#250#179#20'TAA'#233'd'#182#242#147 + +#240#179#156#127'a'#180#215'0'#140#251#11'x'#152'~,'#174#190#199'ig'#18#244 + +#217#157'q'#249'#PZ9'#176'T'#218';'#175#220'/+3'#2#6#138#11#174#127#1'l'#133 + +#227'$;'#255'S'#247#156#7'-'#13#155'{}'#142#193'd'#131#203'n'#207'L'#253#2 + +#203#11#192#175'%'#154#156'''@y'#1'\'#207#0#143#199#3#205#219#190#235'j'#6'$' + +#242#180#158#189#139#140#190'_'#210#161#5#12'I'#18'Kw>'#214'"W'#168#155#240 + +'G'#169#19'w'#252')'#170#154#7#22#139#141#9#191#208#231'O'#205#175#254#178'a' + +#24#247#23'p'#215'5'#251'g'#188#250#175'?'#208'h'#13'p'#217'mo'#12'Hu'#206 + +#149'k'#239#138#11'oz'#5#204#214'B'#201#206#255#226#195#151#161'i'#247'K'#159 + +#207';'#227#138'G'#161#164'<'#189#206'@'#1#226'J'#193#0#211#2#194'L'#11' 3' + +#160#165'n'#13#248#220#246#20'3@'#173#136'>2)'#223#241''''#157'N'#231#25#170 + +#22'0'#20'I'#148#141#155'u'#210'Y('#205'O'#138'c'#255':'#189#25'J&'#236#202 + +'B~F'#3#183#250'k'#133#138'?'#129#0'2'#242'1f'#30'w]'#189#159#212#151#144'DE' + +#245',8'#233#194#254#135#208#238'^v@V*'#23#7#2#250#221','#187#251#163#172#159 + +#215#209'V'#7#171#190#252#23'4'#213'n'#128#182#230'm'#253'j'#235'V5i'#23'8' + +#225#252#244'O?'#18'$'#150#141#26#143'u:'#3'}'#228#12'D"p'#182'7'#128#189#241 + +#215#20'3@&K'#212'M'#201'k'#222#27'??'#215'P'#181#128#161#17#192#236#147'?' + +#199#253#18'.'#166#207'M'#248#181#22'q'#153#127'$'#248#194'`O'#173#134'k'#244 + +#169#16#226#254#195'P'#3#8#6#189#240#208'MGH}'#25')'#216#231'w'#23#194#188 + +#197#253'k'#184'y'#239#181#7'f'#165'rq '#160'^'#7#151#221#241#206#208#15#212 + +#7#162#209'0'#252#188#242#3#216#176#230'S'#166#238'G'#250#209#200#181'+'#228 + +'r'#5'\q'#231#251#236'w'#158'v'#240#209#0#193#25#200'B'#130#188'/'#192#231#11 + +'@'#243#214'o'#184#190#129#157'f'#0'X'#181#129'S'#202#173#190'OQ'#3#240'644' + +#4#15'?'#252#240#216'`'#180#128'AKb'#217#204#227#170'er'#21#181#252#146#137 + +#213#255#226#234#221#209#246'7'#166#172#254#164#254#211#7''''#31#198#234#127 + +'['#211'Vx'#238#190'?H}'#25') '#15#245'YW?'#133'6ty'#159#207#253#235#242#131 + +'r'#142#0#242#138'*'#217#245'g'#18#159#189#243'wX'#245#5#229#26#12'='#13'z' + +#241'Ag'#194#238#251#156#148#145#235'$'#225#23#18#131#184'"!./'#128#234#4#218 + +#234#215#131#167#163#169'Kjp'#236#141')'#5#142#171'U*'#149#203#135',1'#216#26 + +#129#193'J'#163#172'|'#246#201'7'#226#153'n'#23'{'#255#141#230#2'('#172#152 + +#205#173#254'z'#21#232#209#12#160'6'#223'*'#149#144#246';<'#133#159#176'm' + +#195'w'#240#230#179'7I}'#25';'#128'<'#232#231#223#248#143'>'#159'w'#255#13 + +#135'd'#181'x'#169'?'#216#251#240#11'`'#151#133'Gf'#236#248#219'6'#174#132'7' + +#159#185'1m'#199#179#228#149#194#217#203'2'#211#215'P'#152'+'#200':'#8'G'#185 + +#225#162'>'#161'i'#136#179#21#218#235#215#166'$'#5#201' '#209'19'#191'u'#145 + ,'\'#150'h'#195#197#215'+'#170#20#28#144#157'7h'#2'@'#245#159#234'S'#23#139'+' + +#255#242'J'#167#131'-'#191#12#244'zU2'#244#199#138'~'#134'q'#222#191#128#159 + +#191#127#31'>~#'#251's'#254#250#131'I;/'#130#195'O'#238#157#156#30#188#241'P' + +#201#18#152#186#3#149'8_v'#251#191'I'#183#206#200#241#253'^'#23'<y'#215')i' + +#14'}'#202#224#162'['#222#0#181'V'#159#145'k'#238#172#15#232','#21'&G'#160'/' + +#16'ff@('#20'L1'#3#242#245#254'S'#138#12#30#26#0#209#129#154'@p0'#253#2#6'#' + +#146#178#162#169#135#234'UZ'#171#3#133'_-'#206#253'/'#174'^'#128#170#191'.' + +#153#246'+'#228#253''''#157#127'9>'#232#163'7|'#247#217#10#248#230#163#204 + +#148#136#166#3#135#156'p=L'#153#181'W'#143#143'?q'#231#137#224#243'8'#164#190 + +#204'$'#170'&'#207#131'#'#207#252'S'#198#142#255#244#221#167#129#219#217#146 + +#246#227#238#182#247#137#176'`'#255'3'#210'~\'#241' '#145#168#168'y('#133#4 + +'I'#19'ho\'#7#30'gsJm'#128'^'#21'y'#180#210'b'#191#31'I'#193#129'&'#128'o0' + +#206#192'A'#17'@'#197#156#147#247#195#235#252#143'X'#253#215#234#200#251'?' + +#159#9#190#1'5'#0#193#249#199#133#254#134'o'#234#175#128#207#223'y'#4#214'~' + +#155'y'#135#213'`'#161'Ti'#224#194'['#223#234#241#241#247'^'#186#3'6'#175#251 + +'R'#234#203#228#175'U'#13#231','#127'%c+'#233#251#175#222#9#155#214#14#174 + +#129'J'#223#215#174#129#243'o~3#'#206'@ae'#167'h@'#152#31'$B'#137'AD'#0'N{=8' + +#155'6'#166#180#11'S'#202'c'#223'O'#202'k;'#7#175#165'='#18#137#184'='#30'Oh' + +#160#13'C'#6'E'#0'h'#255#255#9#143#190'\'#28#254'3'#219'*'#209#4#152#204#236 + +#127#218'h'#188#183'Z'#24#243'5'#12#171#254#186#226#235#15#159#130#213'_'#190 + +'.'#245'e'#244#138#5#7#156#9's'#23'w?'#149'w'#203#250#175#224#253#151#239#144 + +#250#18#25#14';'#229'6'#24'?u'#183#140#28';'#232'w'#195#147#127'>'#161#215#2 + +#159#161'b'#202#172#189#225#128'c3'#215'+'#128#181#12#19#204#0#158#0'|^/'#180 + +#212'|'#151','#17#230#252#0#16#156'\'#208#182#31#138'Y'#227'`'#157#129#3#149 + +'L'#217#173#183#222'*{'#226#205'M_'#225#237'='#196#197'?y'#227'v'#6#171#173 + +#152#23'~n'#245#231#188#255#178'a'#217#240#179'+'#182#172#255#18'>x%s*k:'#160 + +#213#153#224#236#235'^'#237#254'A'#252#209#252#237#182#195'%o'#10'2e'#246#222 + +#176#255#209#215'd'#236#248#159#188'q/lX'#243'IF'#223#3'-|''_'#246'$s'#10#166 + +#27'I3 '#206#153#1','''#0#9#128#136#128#8' '#24#240#165#248#1#10#244#254'K' + +#11#13#158#143'Q'#11#176'SH'#16#181#128#240'@'#204#128#1#19#192#148#221'N2' + +#251'B'#178'v'#154#248#211'i'#255#171#160#164'zO'#208#235'u'#172#232#135#156 + +#127'Z>'#245'W>'#12#219'}w'#7'ZY'#158#185#235'D'#169'/'#163'O'#236'{'#212#213 + +'L'#200#186#195#11#247#158#14'^w'#187'd'#215'V4n2'#28'}^f'#29#169'O'#220'q' + +#20'D#'#161#140#191#23'K'#254'88'#233#210#199#211'~'#220#174#237#195')'#26'@' + +'$'#16' ?@'#211#6#240'8'#27#187#250#1'^'#172'0'#183#223#135'ZA'#171'N'#167's' + +#15#180'Jp'#160#162')/'#159'}'#226'!'#9#144#191'#'#216#244#20#255#215#27#172 + +'PX9'#151#9'?'#249#0#152#250#175'$'#239#191#208#244'cd'#144#192'cl'#5#205#173 + +'l'#186#174'(.'#159#6'G'#158'so'#183#143#173#252#228'9X'#253'E'#223'!'#195'L' + +' '#191'x'#2#28'{A'#250#203'j'#197#248'u'#213#7#240#223'w'#30#202#218'{Zt' + +#240#249#176#243#238#135#167#245#152'|'#247#31#212#0#184'nA'#194'hq6^'#220 + +#209#4#142#166'_'#187#250#1#214'M'#206'o?'#31#9#160#9#205#0'g('#20#242#15#196 + +#12#24#136'X2I.'#159's'#242#221'x'#222'+'#197#14'@s~%'#235#253'G'#194#175'G' + +#225#167'a'#31'D'#0'r'#133'l'#216#135#255#196'x'#225#222'S'#193#239'u'#14#253 + +'@'#25#132'Zk'#128'3'#175'}'#181#199#199#223'x'#252'rhk'#218'<'#128'#'#14#29 + +#214#130'r8'#254'"'#154#20#151#153#144#159#128#151#30'8'#27'<'#174#244'{'#254 + +'{'#2#245'5<c'#249#171#168#233'j'#210'v'#204'd'#159#0#22#13'H0'#155#223#31 + +#136#242'EB~h'#221#246'M'#151'|'#0#136'T'#219'Z'#143'R'#200#162#219#200#25'H' + +'9'#1#225'p8'#132'f'#0#17'@'#159#171#213#128#8#224#216'c'#143#149#127#253#155 + +#154#218#203#206#21#226#255#10'T'#243#243#199#205#6#147#165#128#9'?'#179#255 + +#169#235#15'S'#255#249#158#255'#'#4#159#191'u'#31'lZ+m'#3#139#254#224#204#235 + +'^'#239#241'GIi'#177'+'#238';'#13#194'A_V'#174#165'l'#252'L8'#244'Tr>fV'#248 + +#219#26'7'#193#191#158#186'2+'#239'I'#140#25#187#30#6#11#14'Jo'#134'hgRPg' + +#159#0#193#20'h'#175#253#129#245#8#16'u'#12#134'|'#157#247#230'b'#147#255'}' + +#148#201#22'$'#128#14'2'#3'P'#3#136'B?'#162#1#3#17'O'#249#132'9G'#230#133#19 + +#250'f'#188#173'H'#150#255#170')'#254#191#16#237'~'#174#233#7#197#254'5|'#242 + +#15#215#245'w'#228'0'#128#179'm;'#188#241#152't'#13'A'#250#139#197#135']'#10 + +'S'#230#236#223#235#251'x'#243#241'K3n'#206#204'^x'#28#204#223#251#212#172 + +#188#231#183#159#190#10'I'#224#183#172#156'K'#12#149'Z'#11#167'-{-'#189#7'Mp' + +'9'#1#228#8#140'D'#184'h'#128#16#18't'#182'lBS'#160'N<D'#20#244#170#240'[' + +#149#22#199#189#177'X'#172'I'#163#209'8'#6'b'#6#244'W:'#153#250'_'#185#203 + +#201#191#199#243#190'!'#216#255#180#194#235#141'yPP1'#135'9'#254#184#216#191 + +#146#13#251'd'#171#191#156#31#243'='#130#240#194'='#199'C$'#156'['#3'7'#187 + +'b'#225#193#23#193#212']'#14#236#245'9['#215#253#23#190'|'#239#225#140'8'#204 + +#228#168#26#239's'#212'r'#168#156#156#153'P_W'#248#189#14'x'#229'Aj'#146'"M' + ,#132'c'#209#161'H'#184#179#211'[)'#26#231#11#132#136#0#132'>'#1'D'#2'd'#226 + +#216#27#215#165'8'#2'U'#242#216'&4'#3'.'#198#219#13']'#204#128'>'#163#1#253 + +'&'#0'R'#255#191#217#164#186')'#145#144#221'"'#216#255'4'#247#207#156'?'#30 + +#172'E'#19#152#240#147#243#143'&'#1#177#220#127#249#200#178#255#5'|'#251#225 + +'c'#240#235#170#247#164#190#140'^ '#195#21#233#31'h'#154#245#175#133#213#170 + +#207'_'#128'u+'#223#198#31'T'#223'%'#177'}'#158#25'5'#194#9#211#23#194'B'#212 + +'@2'#209'B'#171'''|'#242#250#157'P'#251#219#183'Y;_W'#152'l%p'#204#5#233#27 + +'u&D'#2#132#226' V'#27#16#138'23 '#16#8'B'#203#182#175#240#251#138''''#29#129 + +'2Y'#194'7'#173#160#245'd4'#11#234'('#26'`6'#155';'#182'l'#217#18'Z'#183'n' + +#29#153#1#189#170'y'#253'&'#128#165'K'#151'*6'#187#198#189#128#231';A'#236#0 + +#180#149'L'#7#147#181#132#9'?'#167#254'wv'#254'aC?F'#152#6#16#143'Ga'#5'j'#1 + +#180#207'E'#232#12'68'#238#146'g'#7#250#174#224#251'O'#158#133#223#214'|0@' + +#141'@'#198#178#250'4:3'#20#148'N'#130#5#7'_'#12'jm'#250#231#234#245'z'#229 + +#236#251'8N'#210'JG'#146#135#211#174#253'WZ'#143#201'R'#131'y?'#0#155#29#128 + +#4'@'#27#17'A'#235#182#239' '#28#246#167#248#1#198'['#237#231'j'#20#225#245 + +'J'#165#178#9'W'#127#167'N'#167#11#244#167'6'#160#191#210')'#159'7o'#158#162 + +'9:'#141'hv'#174#152#0#10'*'#230#130#201'le'#194#175#213't'#134#255#134's' + +#235#175#190#240#213'{'#15#194#230#28'u'#6#142#199#21'x'#175#223#15'>'#209 + +#134#242#29#234'6}'#7'M'#219#215#178'N4'#241'X'#132'U'#17#146#160#145#160'[' + +#242#203#153#176#23'W'#236#4#230'<'#233'Zy'#9#248#254#147#167'a'#253#247#131 + +#27#156#154'N,='#234'Z'#168#154#178'g'#218#142#215'u'#132#24'5'#10#9#242'Z@{' + +#253'Oh'#246#216'S'#8#160#216#232#249#147'M'#235#251#24#239'k'#196#191#237 + +#161'P'#200#215#159#1'"'#253#145'Pf'#255#31'|'#240#193#170#181#141'ymx'#219 + +'$'#142#0#20'MX'#8#6#157#134'['#253#133#226#31#249#200'I'#0#234#14'$'#12#175 + +'=tF'#214'<'#233#253#6'~'#224'G'#254#225'Q0Z'#138#165#190#146#172#225#229#191 + +#158#136'Z'#203#192#27'|'#164#27#21#147'wC'#18#184'.m'#199'K'#13#7'v'#18#0 + +#141#21'w4'#253#6'^WC'#151#6'!'#254#23#139#244#174#151#209#254#175#139'F'#163 + +'mj'#181#218#211#159#18#225'~'#17#0#217#255#171'6'#199'+Cq'#237#214#164#3#16 + +#237'='#181'F'#143#4#176#27#203#250'c'#171#191'Z'#193#186#2')'#21'#'''#249 + +#167''''#216'['#182#192#7'/,'#203'h'#206#249'@Q9e'#15'X'#252#251#204#228#168 + +#231'"6'#253#248#1#172#252'8'#253#217'x'#131#129'Vo'#129#163'/z&'#173#199#20 + +#210#130#201#214''''#2#16#162#1#29#246':'#232'h'#221#156#18#9'0'#168'C'#159 + +'UZ\'#15#163'|'#214#14'$'#28#216#31#17#149#163#253'/'#175'q'#151#238#23#137 + +#201#223'O'#137#0#24#242'!'#191'b'#22#155#3'@'#177#127'F'#0#138#206#8#192'H' + +#199#154#255#189#0#235'W'#190')'#245'e0'#144#231#253#152'K^'#204#170#243'Mj' + +#188#249#232#217#16#240#229'Fb'#150#12#127#240'''^'#153#222'b1a'#148'x'#140 + +#207#7' '#2#8#134'#'#224#235#176#131#189#241#231#148'H'#128'F'#25#253#181#218 + +'f'#191#3#229's;'#254#221#20#12#6#157'J'#165#178#207#226#160'~'#17#192#140#25 + +'3'#148'n'#213#172#11#226#9#249#253'b'#2'0'#217#202#193'V<'#25'U'#255'N'#2'H' + +#142#252#30#225#26#128#128#207'^'#191#29#154'j'#178'?*L'#12#242#190#239'}' + +#204'MPR5['#234#143'#kh'#220#182#26'>'#255'gnT7'#10'8'#225#242'W@'#158'&'#2 + +'f'#170'='#223'#@'#240#3#176'~'#129#148#16#228#247'B'#235#246#149')'#4#160 + +#148#199#237#147#242'Z'#175'E'#185#164#9#221#13#129'@'#192#238#247#251'}&' + +#147#169#215#226#160#190'D'#148#169#255'^'#175'W'#249'K'#147#237#190'xBv'#129 + +#152#0#172#197'S'#192#130'$'#160#161#8#128'J!'#234#254#3#204#30#29#13#4'@' + +#248#238#195'G`'#235'/'#210'8'#5#233#251'Xr'#228#245'P6a'#174#212#31'CV'#241 + +#239#167'/'#6#143'3'#183'f'#29#238'{'#252#237'l'#28'^'#186#144#236#15' '#26 + +'%N&@'#24'5'#129#230'-_B4'#18'I'#18#0'">5'#191#229'r'#20#203#173#248'w]8'#28 + +#166'Va'#30'Q'#143#128'n'#253#0#253'"'#128#182#182'6'#213'fW'#217';'#137#132 + +'l?q'#17'P'#222#184#153'`4'#23#178#213#159#171#254#235','#0#26'%'#178#159#196 + +'/'#223#252#3#183'W'#135'~'#160#1#128':'#213'.8'#236'*('#159#180#187#212'o?' + +#171'p'#182'l'#133#15'Wd'#174#164'x'#176#152#179#228't'#152'6'#255'wi;'#30'_' + +#23#196'|'#0#177'(?D'#20'M'#0'r'#6#182'm'#255#1#194'A/'#171#9#16#136#162#210 + +#226#252#139'A'#29#254#142#252#0#161'P'#168#197'`0t'#212#214#214#6'{'#203#7 + +#232#147#0'('#254#143'j'#132#250#199'Z'#243'z<O'#149'8'#9#168'h'#252#238#160 + +#211#25#184#8#0#159#255'O'#17#0'N'#1#24'm'#20#0#176'm'#221#167#240#253'G'#127 + +#203'J'#205#189#181'p<'#170#253#183#128'Zk'#150#250'mg'#29#31#189#180#12#28 + +'-'#185'5'#234#156'0q'#214#1'0'#127#223#244#213#5#8#161'@'#202#7#136#196#249 + +'p`'#8#9' '#24#3'{'#227'/'#16#240#180#165#16'@'#161#222#243'b'#129#193#255'~' + +'<'#30#175#161'|'#0'4'#1'\('#187#254#222#242#1#250#146'R'#22#255'Oh'#138#205 + +'->'#27#205#196#146'wv'#1'RB'#209#132'E'#160#165#236'?u'#151#177#223#195#184 + +#253#247'PA'#171#211#234'O'#30#3'G3'#253'@'#211'O'#4'*'#181#30'v^t'#18'L'#154 + +'s'#176#212'oU'#18#248#221'm'#240#238#147#231'K}'#25#221'b'#210#156#131'`' + +#151'}'#206'M'#235'1'#217'b'#194#143#14#139#242'&'#0#249#1'\'#246'm'#224'm' + ,#175'I!'#0#139'6'#240'q'#153#201'M'#163#250#182#225#223#141#184'''?'#128#191 + +#188#188'<<h'#2' '#7'`'#212'0c'#170'7'#164'Z'#203'^'#192#19#128'ZoB{g>g'#255 + +#167'$'#0#201'G'#141#237#223#27#130'~'#23#172#254#244'Ih'#216#250'=2'#248#208 + +#179#212#244'hj'#237#188#231#9'0~'#250'^C>'#214'p'#198#127#223#248'?h'#169 + +#253'I'#234#203#232#22'S'#230#30#206#204#128'tB'#136#4'P80'#18#163'\'#0#218 + +'"'#172'1'#136#171'ecJ2'#16#170#255'?V'#152#29#143#201#229#242'mx'#127'='#154 + +#233#237'}u'#9#234'MTY'#251#175#239#190#251'N'#245'['#171'q~0'#170#254'R'#198 + +#229#246'2'#2#208#26#242#160#160'|6'#18#0'7'#248'S'#171#230#186#255#202'y' + +#239#255#232#243#2't'#15#250#130'~'#254#250'%'#168#221#240'?'#22#178#234'o'#5 + +#30'y'#246#13#150'"('#169#154#3#147#231#28#2'f'#155#244'YwR#'#26#14#194#27 + +#143#158'"y['#179#158'0}'#215#163'`'#214#194#147#211'v<!'#10'@{65'#136#252#0 + +'|.'#128#183#163#13#28#141'?'#167#16#128'N'#25#222'Peu<'#138'/'#221#138'[m' + +#127#28#129#189#18#128#224#0#172#243#20#239#19#140'*'#223#21#212'z'#5#254'8' + +#181#166#2#200#31#183'3'#174#254'|'#251'o'#214#0#20#197'^'#14#163#214#7#208 + +#31#184#218'j'#160#254#183'o'#160#195'^'#11#177'H'#8'b'#177'0+'#196'Qi'#12'`' + +#180#150#128'%'#191#10'l'#197#213#144'_'#154#153'A'#148#195#25'k'#191'x'#1'6' + +#254#240#214#208#15#148'!'#204#216#243'x'#216'i'#143'c'#211'z'#204#206#148'`' + +'.'#31' '#20#226#250#2#248'='#14#176'7'#172'I!'#0#173'2'#178'm'#188#213#254#8 + +#222#166'H@-n-'#145'H'#164'#'#136#24'4'#1#212#215#215#171#155'C'#149#191#11 + +#199#148#175#164#16#128#185#24#127#164#211'A'#175'U'#163#22#192#141#5#147#141 + +#144#6#160'c'#200'M'#188#251#228'y'#16#240#218#165#190#140#30#177#243#162'S`' + +#218#252#244'O:'#18'R'#130')'#245#151'B'#129#212#23#192#239#237#128#246#186 + +'U)'#4#160'QD'#27''''#216#218#169#239#218'Vr'#4#162#188'6'#163'9'#224#178#217 + +'l'#129#158#250#4#246'J'#0'B'#4#224#151#6#195#201#225#152#226'q'#193#4' '#2 + +#208#163'Jj+'#158#194#170#0#169#11#144'P'#1#152#201#16' '#133'='#26#182#172 + +'D'#27'p-L'#156'y '#20#150'O'#207#208#153#198#144'k'#8#162#249#244#246#227 + +#233'u'#176#165#27#187',='#11'&'#239'rHZ'#143#201#133#2#249#6'!T'#19'@'#131 + +'C'#169','#216#235#131#182#218'oS'#8'@'#165#136#181'O'#180#181'QSDJ'#217#175 + +#193'}#e'#4#246#22#9#232'MVY'#4#0'_'#172#217#238'.'#249#3#18#192'=b'#31#128 + +'1'#175#10#172'E'#19'Y'#27'p'#174#7#160#156#133#6#217'A3'#192#0#31'<{)s|$/' + +#28'O2k'#241#169'0e^'#250#226#174'c'#200']'#172#254#228'q'#216#178#246'?R_F' + +#175'8'#240#180#251#192#156'_'#145#246#227'2'#1#231'K'#131#169#24#136'5'#7 + +#241#7#161#181#230#171#20#2'P'#202#227#238#201#249'm'#15#2#231#3'HF'#2'Ps' + +#240#245#148#18#220''''#1'h'#17#245#254#138#171#163'q'#197#205#236#5'|'#20 + +#192'T0'#17#172#5'U'#160#215#171'Y'#18#144'0'#0'4SC@'#222'|'#228#148'n;'#241 + +#236'y'#232'UP1eAF'#206'9'#134#220#193#219#143#159#141'Z'#128'K'#234#203#232 + +#17'r'#133#10#142#185#244#149#140#28';Y'#21#136'{6+ '#16'fm'#194'['#182#254 + +'/'#133#0#20#178'x`J'#1'G'#0#248#247'6'#148#213#250#190#230#5#244'$'#173','#2 + +#176'n'#221':'#165#211#233#212'm'#178#23#220#138#4'p9{'#128''''#0's'#209'dd' + +#187'r'#212#0#144#0'P'#11'P%K'#128'3'#147#2#252#250#3#199'w;'#221#150#28'g' + +#135#156#245'HF>'#248'1'#228#14#254#249#192#9'h'#3#167's'#208'gzA+'#255'A' + +#167#167#127#230'A'#178',8'#193'E'#148#136#0'hX('#245#5'h'#221#250#5#27#248 + +'*<G&KD'#167#230#183'<'#128#183'k'#20#10#5'K'#9#22'J'#131'{j'#17#214'#'#1#8 + +'5'#0#200#28#250':_'#197#221#209#184#252'l'#246'@'#146#0#166#130#165'`'#28#24 + +'H'#3#208#168'X'#31#0'Y2'#4#152'~'#188'v'#255'1='#134#127#14':'#237#254#140 + +#168'^c'#200#29#252#3#191#255'\*'#189#238#138')s'#15#131'9{'#157#153#145'c' + +#11'~'#0#214#29'('#18'e'#3'C'#3#193'0'#180'm'#251#154'uy'#22#8#128'0'#173#160 + +#249#1#178#255'qc'#161'@'#220'Z'#187#204#13'L'#137#4#244'J'#0#20#2'D'#245'A' + +#191#161'5'#239'Q$'#0'6tN '#0'K'#201'N'#172#21#152#201#200'5'#3#161#230' '#10 + +#25#215#7' '#19#12#240#218'_'#143#134#158'2'#235#138'*g'#194'^'#199#220#182 + +#195#253'[~'#250#0#218#27'~'#5#183#163#30#2#30';'#132'C\'#3#15#210#26#202#170 + +'w'#133#201's'#15#5#157'1?#_'#218#24#210#7#250#145#191#249#224#9'R_F'#175'8' + +#240#244#7'2'#183#8#145#6' '#228#2'Db'#224#245#134'9'#2#168#249#14#162#145'@' + +#10#1'L'#206'k}\'#169'H'#208#224#7'r'#4'nW*'#149#205'*'#149#170#163#161#161 + +'!8`'#2#160#16' '#18#128'a'#171#171#244#249'XB'#206'rO'#5#2#176#150#206'DA*' + +#4#147'A'#195'G'#1'd,y%SQ@'#166#2#246#208#184#146#206'{'#228#197#207#131'R' + +#205'M'#155#165't'#209'O^'#185#158#9'}_Pi'#244'P2~.'#236'~'#200#229#25#153 + +#248':'#134#161#195#217#188#25'>Z'#145#187#141'N'#20'*'#13#28'}'#233#203#25 + +';'#190#160#248'PYp'#8'5'#0#31#18#128'?D3'#2'VA$'#232'N!'#128#234'<'#251#11 + +#26'Et='#222#220#138#191#231#237'h'#2#244#26#10#236#145#0'('#4'XXX'#168'B3' + +#192#248'K'#147#237#159#241#132'l1{@ '#128'q'#179#193'h'#202#7#147#137''''#0 + +#26#3#206#183#1#207#4#9#188#243#216#185#224#239'E'#160#199#207#216#27'v?'#248 + +#18#230')^'#245#241#19#3'N'#191'U'#170#180#176#199'!'#151#193#184#201#163#171 + +#178'n8'#128'l'#223#215#239';6g3'#0#231#238's6'#211'&3'#5'!'#29#152'"'#1#212 + ,#25#200#235#11#177'\'#0'J'#4#10#251#157')'#4'0'#222#234#248#135'N'#21'YK&'#0 + +#229#2#224#234'O'#205'A\'#212'$t'#247#221'w'#143#12#136#0'('#7' '#20#10#25 + +#127'm-x'#27#9#128'IF'''#1#204#5#163#217#10'f'#163#22#180'H'#0#212#9'H'#166 + +#200'\'#15#128#143'W,'#7'{'#227#198#30#31'''/l'#193#184'i'#208'Z'#251#243#144 + +#206'SX1'#3#150#28'u#j'#19#218#204#188#145'1'#12#10#239'>q'#1'x]'#205'R_'#198 + +#14#160#26#141#195#255#144#217#182'd'#9'^d'#217#192#208'p'#20'<^'#158#0#234 + +#215'B8`O!'#128'J'#139#227#13#189'*L'#197#18#201'\'#0#212#226#157'H'#6#221 + +#230#2#244'J'#0'j'#181'Z'#19#139#197#140#155#28'E'#175#196#226#242#165#236#1 + +#222#203'o+'#157#131'&@>'#243#1'P$@'#145't'#2'f'#134#1'V~'#240' l'#203'R'#211 + +#13#5#146#201#220#253#206#131#234#153#251#15#253'`cH'#11#214'|'#254'LN'#166#1 + +#31'p'#234'=`+'#158#148#209's'#8#233#192'q'#158#0#220'D'#0#254'0'#18#192#26 + +'4'#1'\)'#4'0'#193#230'x]'#171#140#172#3'>'#27#144#186#4#247'6-'#168'O'#2#8 + +#135#195#166'm'#29#165'OF'#227'r'#166#227#8#4'`)'#153#9'f['#17#24'y'#2#160'f' + +' '#178#12'N'#2'j'#174'Y'#3#255'}'#237#214#140'~'#208']a+'#158#8'K'#143#187 + +'-'#235#189#238#199#176'#'#130#254#14'x'#251'og'#230#212't'#230#146#9#187#192 + +'^'#199#220#146#241#243#8'EAqf'#2'D'#192#235#14#129#151#8#160'n'#21'DB'#30 + +#238'9<'#1'L'#180#181#189#162'R'#196'6Q='#128#208#30#12'I'#192#209'S2PO'#210 + +#154#204#2'D'#152'6'#180#218#238#143#198#21#201'('#0#17#128#185#136#250#194 + +#151#128#201#164#3#131'^'#197#17'@'#134#235#0'^'#187#247'('#180#131#178#251#3 + +#144#203#149'0{'#233#25'0y'#222'aY='#239#24'v'#196#166#213#239#194#143#159'<' + +'!'#245'e0'#208#140#132'C'#207#251'{'#210#241#156#13#196#248'T`'#143''''#8'>' + +'$'#0'J'#5#142#133#131')'#190#145')'#249'-+'#208#26#175#1'>'#25#8#247#13'(' + +#252#164#1#248#186#235#11#208''''#1#168'T*'#243'f{'#254#31#195'1'#197#25#236 + +#5'<'#1#152#10#166#176'D '#179'Y'#139#4#160'a'#4#192'f'#1'f'#144#4#200#14#244 + +'8'#26#135'~'#160'A'#192'RP'#9'{'#31#127#27'h'#141'y'#146#156#127#12#28'>}' + +#233#6'h'#173#251'E'#210'k'#208#155#242#225#16#18#254',u`f&@'#28'X'#243#15'J' + +#0'r'#187#3#204#7#208'F'#169#192#209#136#152#0#18#211#11'[^'#196#191#235'I'#3 + +'P('#20#219'"'#145'H'#3#222#223'>h'#2'@5'#194'R'#227'*'#188'>'#20'S^'#200'^' + +#192#11#184')'#127'"'#152#11#171#192'l'#210#128#209#160#3#165#138'k'#6#154 + +#201'>'#0#171'>~'#156#173#2'R'#129'Z?'#239#188#240'$'#152#177'gzK>'#135#27 + +#220#246'zh'#216#252#29#11#183#6'|.'#8#5#220#172'V_'#165#214#129'Zg'#2#173 + +#222#12'Fk)TN['#12'zsAZ'#207'MCY'#222#127'J'#186#134#160#244#190#14'9'#231'a' + +#166#25'f'#11#156#15#144'/'#7#14'F'#160#163'#'#192#178#1#219#182#254#143'/' + +#20#226#228'Y.KDP'#3'x'#149'R'#128#129#171#5'`'#233#192#184#136#183#187'\.ow' + +#147#130'z%'#0#170#3#192#23'['#234#189#197#151#6'"'#202'd'#23'F"'#1#131#181 + +#10#172'%'#19#193'd'#208#130#201#172'I'#154#0#178#12#134#210'i '#194#7'OH?' + +#158#219'd+'#133#165''''#252#31#232'-'#133'R_J'#198'A'#130']'#187#225'Kh'#218 + +#242#3'ks'#22#244#216#7'4'#135#143#134#148#26#172#197'P1u'#1#236#180#240#184 + +#180#9#206#215'o'#221#13'u'#191'~'#153#213#207#194'Z4'#30#14'<'#235'>'#188 + +#149#253'|'#17#166#1#160#249#27'@'#193'w'#185#209#4#240#5#161'}'#235#23#220 + +'c<'#1'('#229#241#224#164#188#214#127#226'M'#154#18'L'#234#255#214#190':'#3 + +#245'J'#0#227#198#141#211#6#131'Ak'#141#211'r'#182'/'#172'Nz;H'#208#245#214 + +'r'#176'P='#0#154#0'&'#147'6'#217#15' '#211'x'#253#158'c'#210'2'#201'v'#168 + +#160#228#163'Is'#15#129#185#251#159''''#245#165#164#21'm'#245#235#161'n'#195 + +'W'#208'^'#183#142#173#178#209'4'#142'B'#167#207#172#160'b'''#152#179#247#153 + +#144'W:y'#200#199#219#188#250'='#248#241#227'''3>'#168#149#186'/O'#158#127'8' + +#204#217#231#172#140#158#167'W$'#184#17'a'#1#180#253']'#164#1'x}`'#223#254#13 + +#255#16''''#207'*E'#204';)'#175#157#6'%'#146#218#207'4'#0#154#24'L#'#195#245 + +'z'#189#167#191#4#192#10#129#208'VPVVVjc'#177#152'e'#187#211'|'#162'7'#172 + +#185'+'#249#4'j'#9'f*'#5'['#201'4\'#253#181','#23'@'#165'Qr'#149#128#221#229 + +'j'#164#145#23#254#243#236#149',3,W@'#17#130'='#127'w5'#148'T'#15#207#190#252 + +'q$'#211#205'?~'#0'5'#235'>'#135#142#182#154'n'#11#174'2'#129#252#178#169#176 + +#232#152#27#217'H'#173'!]?'#10#255#143#31'?'#1'['#127#250#152#13'2M+'#240'w^' + +'>y'#15#216#253#176'+'#178#155#23#210#141#12'%d'#192'f'#3#4#252'!'#232'p'#5 + +#192#235'q'#131#163'ne'#138#3'P'#163#140'vT'#219#236'4'#187#190#129#132#159 + +'6'#165'RY'#135'2'#220'6h'#2#136'D"'#214#6#183#249'w'#238#144#238'!'#241#147 + +#180#166'b'#176#149#206'`y'#0'&'#139#142'M'#7'b'#29#129'2'#252#217#172#251 + +#250#31#240#243#127'_'#200#222#151#209'O'#20#148'O'#135'%'#199#222'<,B'#134 + +'^\'#217'7'#174#252#23#218#241#223#131#223#211'.Y'#145#13#249'T'#166#237'~$' + +#139#178#12#29'qX'#243#201'3Hd'#255'e'#205'C'#134#2#133#146#146#202#166#163 + +#224'_'#206#18'}r'#1'T'#13#24#141#198'P'#245#15#129#219#229#7#175#219#1#206 + +#134#31'S'#8'@'#167#140#216#171#172#246#143#128#215#0#168'"'#16#247#140#0#240 + +#182#183#187#138#192'~'#17'@'#179#199#184#175'3hxZ'#252'$'#141#161#0#242#198 + +#237#12'F'#163#14#205#0#29'k'#14#154#169'^'#0'b'#208'D'#222'7'#239#203#205 + ,#194#16#25#170#138';-8'#22'v^'#156#190#198#144#233'BG{'#29#252#244#233#211 + +#208#142'*~$'#228#151#250'rR`-'#154#0#251#159'y'#127#218'j1(g`'#195'7'#175'C' + +#253#198#175#193#215'A'#3#173#251'&8r`'#22'V'#238#12'Sw;'#2#138#170'fI'#253 + +#145#236#0'z'#7#17'j'#7#230#9#162#9#224#199#247#213#14#206#198#212#238#200'z' + +'U'#184#165#210#226#248#12':}'#0#228#4#172#29#18#1#144#9#208#234#209#237#209 + +#230'7'#254'#'#229#3#211'Z!'#191'b'#14#24'P'#253#183#152#245#172''''#0'u'#4 + +#202'F3'#208#127#221'w'#18#251#146's'#21'Z'#163#13#22#163'z'#155'?n'#154#212 + +#151#2#174#214#26#248#238#223#247#129#179')w'#204#166#238'@'#159#217'!'#231 + +#254#13#212#250#244#14':!'#19#193#217#188#21':Z'#183#129#27'I'#208#227'jfu"F' + +'['#25'X'#11'+Y'#178#151#165#184':'#183#11#193'X'#166#31#215#11#192#235#13 + +#176'('#128#199#209#12#238#150'u)O3'#170'C'#141#21#22#215#127#249'N@d'#2'l' + +#29#148#9'@'#155#216#9#232#244#171'f6z'#172')'#241'7'#133'J'#7#5'U'#187#131 + +#193#160#1'3'#154#0':'#150#11' '#239#182#31'X'#186')'#225#203#127#222#153'u' + +#15#240'`0e'#215#195'a'#222#129#210#12#177#8#251#221#240#217#203'7'#131#163 + +'i'#147#212#31'C'#191'A'#5'Y'#135#156#255'(k'#135'>'#154#209#157#190'B'#9'pa' + +'>'#9#168#3'M'#0'w'#251'v'#240#218'S'#167'#Y'#180#193#154'2S'#7'y'#6#27#248 + +'$ F'#0#209'ht@N@BJ'#24'P'#169'R'#149'nh-'#250#2'_'#165'I>'#3#5#189'p'#194'"' + +'$'#0#29'X'#172'z'#208#27'5'#172'5x'#159'y'#0'i`'#131#230'mk'#224#211#23#174 + +#207#202#151'1T'#152#11'*'#224#128#179#238#205#170'o`'#235#154#255#192#202'w' + +#31#206#154'C/'#157#160'<'#130#163#174'x!mSv'#135#5#250#180'P'#184#28#128'`0' + +#2#30'w'#0#220#168#1#184'Z6@'#160'#5)'#174#208#224']W'#160#247#253'D'#137'@d' + +#2#240#142#192#186'A'#135#1#137#0#240#133#164#147#21'ov'#20#191#30'K'#200'''' + +'$'#159#129#4#144'W1'#15'L'#22#27'j'#0#6'V'#19#160#226'C'#129']'#223'O&'#140 + +#130'W'#238'8l@'#241'h)A'#177#240#189'N'#184'%+'#145#130'O'#158'_'#14'-5'#185 + +'99'#167#191#176#20#141#135'C'#207#127'T'#234#203#144#4'='#5#209'('#2#16#12 + +#132'Q'#248#253#168#5#4#192'Q'#207#149#2#139'Qnv'#174'D3`'#19'%'#255#8#26#128 + +#144#8#132#154#128'o'#192#4' '#164#2#227#193#138#183'8'#10#30#12#199#20#139 + +#196#151'E]'#129','#249'e`'#178#234#192'd'#212#129'ZC~'#128#236#204#5'x'#239 + +#209#11#192#217#178'-+'#231'J'#23#166#237'q$'#204';(}'#195'#S'#128'6'#226'{' + +#127#191'h'#216'}&=a'#194#236'}a'#193#145#185'7'#1'X'#10'P'#18#16'E'#0'('#4 + +#200#17'@'#16#218#183'}'#3#177'h0'#229'y'#19#243#218'>U+'#226#164#254#215#163 + +#224'3'' j'#2#245#129'@'#192#142'f'#128'w'#208#181#0#248'wQ'#141#211'v'#173 + +'?'#162'Jq'#191#27#242#171#217#20#27#179'Y'#159#12#5#210'x'#176#158'k'#12#211 + +#247#161#172#253#244'yX'#251#249#138#236#127#27'C'#196'n'#135']'#12'Sv;<'#189 + +#7'E'#251#240#237#135#207'cN'#174#145#3#25#28'~'#201'c`)'#172#146#250'B'#178 + +#131'^'#204#0'j'#6#18#165'n'#192'>'#206#254#247'z'#252#208#182#245#139#148#16 + +#160'\'#150#136'N'#201'o'#249#8#5#159#194#30'uB'#30#0'nD'#8#246#129#214#2'$' + +#203#129#241#128'fd'#143#194'F'#143#229#20'wH'#151'B'#201'ZS'#9#228#143#155#1 + +'&'#179#14#204'V=h'#132#178#224',('#1'>W'#11#188'q'#239#169#153'?Q'#154'AYeG' + +']'#189#2't'#166#244#21#21#189#247#247'K'#192#222#176'q'#232#7#202'1'#152#242 + +#199#193#17#151'?#'#245'eH'#10'a&'#0#245#1#240'y'#3','#7#192#237'p'#160#9#240 + +'Cj'#18#144'"'#234#169#206#179#127#129#247#181#161#204#210'J'#192'f'#3#12#182 + +#28'8'#165#31#0#218#15#133#142#128'ai'#139#215#248#160#248'Ij'#141#5#10#198 + +#207#3'#O'#0','#18#160'R'#176#142'A'#137','#12#7'}'#233#214'Cr"-x'#160'`?' + +#236'+'#158'K'#203#177'H'#19#250#9#183#145#138'='#143#184#10'&'#205#31#157 + +#163#208'9$ '#30#163#8#0#239#0't'#250#193#213#214#0#238#214#245')'#4#128#182 + +#127'K'#133#197#245#3#222'l%'#199#31#240#229#192#168#193#147#167'pp'#13'A' + +#168'%'#152#223#239'7!'#131#20'D'#19#170#201'['#157#133'o'#136'_'#163'P*'#161 + +#176'z1K'#6#162'H'#128#206#168'ERP'#246'/'#23' '#13#252#240#206#131#231#177 + +#24#239'p'#196#188#131#207#131#25#139#143#27#210'1'#236#13#191#193'{'#127#187 + +'(g{'#229#165#3'r'#133#18#142#185#246#21#208#26#173'R_J'#250#209#143#175#141 + +'u'#2'B'#251#159#28#128#140#0'P'#3'p6o'#1#175'c[J'#6'g'#158#206#191#173#200 + +#224#166#196#128'VJ'#254#17'z'#2#146#6'0'#232#150'`BO@T'#31#10#240'GV'#190 + +#201'Q'#242'J<!'#179'%'#159'$'#151'AA'#213#2#180#255'M'#168#1#24#152'&'#160 + +'V+'#185#17'a'#252#140#192'LF'#4#214'|'#252#28#219#134'#J'''#205#133#3#207 + +#185'gH'#199'x'#227#238'S'#193'mo'#144#250#173'd'#28#230#194#10'8'#234#170 + +#225#249'='#247#7'='#201'H'#130#31#6#18'#'#2#240'q'#14'@'#234#5'`'#175#255#5 + +#130#238#212#254#136#165'&'#247'z'#171'6'#176#25#229#148#8'`;'#240'-'#193'P{' + +'oB-'#222'IMA'#7'D'#0#212#22#28#247#234#182#182'6'#3#238#11'P'#149#24#183#201 + +#158#255'P$'#166'HN'#228#164#149#222'6n'#14#152#243#138':'#9#128#250#3#138':' + +#4'g'#18#164#254#191'x'#227#193'9'#213'&'#170#191'0'#229#151#193#209#203#6 + +#239#196'l'#173'Y'#7#239'=*}it'#182'0c'#241#177#176#235'a'#23'J}'#25'YE'#130 + +#239#4#28'A'#251#159#28#128#180#250#251#144#0#218'j~'#128'p05'#19#182#202'j' + +#255'^'#167#140#144#186'O'#204#192#8#128#136#0'I'#160'iPm'#193#133#193' '#10 + ,#133#194#128#7#200#195#139#25'W'#227#202#187')'#16'Q'#237#147'|'#18'M'#8'*' + +#156#2#150#162'*'#230#3'0RJ'#176'^'#205#252#0'T'#232#145#141#128#224';'#15 + +#254#1#218#235#135#159#3#140#230#17#156#242#127#239#13#250#245'o'#222'{&'#184 + +'FH'#200#175#127#144#193'.'#7#156#9's'#246';M'#234#11#201#26#136#0'b'#188#253 + +#239#247'p'#234#191#207#19#132#214#173#255#195#197'/5'#201'kj~'#203#231'2Y' + +#194#137'2'#217#132#175'c'#4#128#219'v'#148#223'f'#220':jkk'#131'('#211#3'#' + +#0#26#13#134#194#175#15#4#2'y'#184'/'#173'w['#206#243#132#180#157#174'w'#234 + +#11'`.'#131#188'q'#211#209#12#208#179#141#252#0'*'#181#146'o'#29'&'#154#18'$' + +#214's'#210#200#12#219#127#249#2'>}'#246'F)'#191#167'A'#129'j'#227#207#184 + +#251#179'A'#189'6'#28#244#195#138#27'G'#167'c'#172#176'r''8'#248#194#7'Xr' + +#213#136'@'#143#250'?O'#0#188#253'O+'#191#199#229'C'#18'p'#130#189'v%'#211#12 + +#4'('#229#177#224#228#252#246#175#240#249#2#1#212#0#231#4#164#209'`-h'#198 + +#187#131#136#1'M'#6#18#15#7#141'F'#163'6'#180'%J'#28'~'#221#190'->'#243#29 + +#226''''#170#212'z('#172#222#19#140'&'#29#152'mD'#0'\B'#144#208'&<'#27'j'#192 + +#11#215#31#8#145'P'#250#26'Wd'#3#244#3'>'#253#174#143#7#245#218'_'#254#251'*' + +#172'|{'#244#14'DUi'#13#176#223#153#127'd~'#148#145#138#4'_'#0'D'#241#255#160 + +'?'#4#30#180#255#189#184'9[j'#192#221#250'['#138#227#215#160#14#219'+'#204 + +#142#213'('#252#14#138#251#211'<'#0'>'#19#144'*'#1'['#7'3'#28#148' G'#155#129 + +'U'#4#250'|>'#139'F'#163')'#142#199'a'#194'F{'#225#243#137#132','#217#29#129 + +#170#168#24#1'X,'#204#15'`'#160#210'`'#230#7'P$'#29#129';'#156'-'#205'N'#235 + +'_'#191'z'#19#190#249#231'_%'#249#162#6#11's'#193'88'#230#250#193#141#147#254 + +#247#131#23'@k'#141#180#141'1s'#1'TA8m'#193#239'a'#206#1#167'g'#181'G_Z'#209 + +#131#134'L+<'#133#255#200#254#15#160#253'/'#16'@{'#221'Z'#8#186'[S'#8#160#208 + +#224#221'R'#160#247'Q'#185'g;'#17'@'#127#235#0#196#167#239#14';d'#3#226'V' + +#185#197#158#255#167'PL1#'#249'$'#20'rK'#241'N`-'#174#0#147'U'#143#4'`'#0#173 + +'A'#13'*%'#154#1#138#204#205#10#236#138'Wn;'#10'|'#206#214#236#156','#13#152 + +'0go'#216#231#140#255#27#212'k'#159'_~'#0'D'#130#185'U'#211'/%'#168#15'C'#233 + +#164']'#160'z'#151'}'#161'j'#230#226'a'#31'2dFz'#156'S'#255'#A'#222#254#167 + +#30#0#184'o'#222#252#5#196'#'#225#20#2#24'o'#181#175#210#169#162'-x'#179#29#6 + +#144#5#200'>'#187#222'>W'#241't d'#146'B4'#5'*'#154#188#182#179#221'!'#237 + +#209#201'''Q'#131'PK)'#228'W'#206'dQ'#0#163#197#0':'#147#150#21#6#201#149#217 + +#233#15'@h'#217#250#19#252#251#129#225#227'%^t'#194'r'#152#186#231#224'R'#130 + +#159#185'b'#201#176')'#132#146#2#148';'#160'3'#231#225#162'4'#30'J'#170'g' + +#195#196'y'#251#131#9'5'#174'a'#131#4'7'#9#184#211#254#199#213#159'e'#0#182 + +#131#189#230#7'6"L'#144'c'#133'<'#30#153#146#223#246'5'#10#186#7'e'#141'V@' + +#178#251#5#2'h'#196#197#219#217'S'#18#16#161'W'#2#16'&'#4#163#253'o'#212#233 + +'t'#249#241'x'#188#188'#'#168']'#220#232#177#220#156'|'#18#10#184'R'#163#131 + +#226#137#11#153#31#192'h3'#128#158#18#130#180#252#184#176#12'N'#12#238#138 + +#183#239#251#3#180'n'#27#218'l'#192'l'#225#212'?'#127#0#154'A6'#191'x'#242 + +#210#133#144'v;j'#132#131'HAo)'#128#252#242')P>mw'#152#186#224#240#156'4'#27 + +#216#234#159#224#212#255'('#170#255'd'#255#147#240'3'#251#191'y+'#218#255#155 + +'Xn'#128#0#163':'#212'^aq'#145'='#216#129#178#216#140#143#17#1#176#8#0'.'#220 + +#212';'#189#199#193#160#132'>'#9'@'#28#10#196#251#202#240#160#213#155#28'%' + +#143#196#19'2'#29'{'#18'k'#5'.'#135#194#9'{'#128#201'f'#227#205#0#174'.@AZ'#0 + +#171#14#236'>)'#168#219#147#14#225#195#11#184#29#240#210#141#135#231'|^@~' + +#197'T8r'#217#179#131'z-E'#0#158#191'f_'#169#223#194#176#135'J'#171#135#165 + +#167#222#2'U'#179#150'd'#252'\'#253#253#221#211#243'h'#177#140#199'x'#245'?' + +#20#129#128'7'#136#194#239#227#226#255#219#127#132#128#167'-%'#2'Pd'#240'l' + +#201#211#249#182#163#28#186#144'8'#154#132'$ '#218#227#202#223'b0'#24'X'#8'p' + +#221#186'u'#20'7'#140'ww'#222#30#175#137'"'#1#223'}'#247#157'*'#16#8#232#208 + +#20#176#161#9'P'#138'D0~'#155'3'#255#250'`T9C8'#4#249#1#172#165#211'Q'#229 + +#170#2#163'@'#0'z'#13#168#132'h@'#182'T'#0#196#202#127'='#12'k?z1k'#231#27'(' + +#232#179'8'#254#246'7'#192#152'W:'#168#215#7#189'Nx'#241#218#209#25#2#204#4 + +#138#170'g'#194#129#23#220';hm,'#221'`'#222#127'Z'#253#163'Q'#8#163#250'O' + +#246#191#151'%'#0#249#161#5#237#255'h'#23#251#191#218#214#190'J'#173#136'R' + +#248#207#129#127'6R'#8#144#239#7'H'#154'@k$'#18'q{<'#158'Pw!@B'#175#4'@'#155 + +#16#9#160#230#160#212#23#0#239#171'j'#246'ZNv'#5'uG'#8'O$'#2#208'['#202' ' + +#175'b&'#18#0#154#1'f'#3'W'#23'@'#141'B'#217#200'0'#25'd'#205#14'@'#188#255 + +#224'%'#208#176'ae'#214#206'7'#16'L'#156#191'?'#236'}'#214#29'C:'#198#147#23 + +#238'.'#245#219#24'Q '#243'`'#223's'#239#204#138'6'#208#27'HB'#168#244'7'#30 + +'E'#2#8#161#250#31#8#129#223#205#169#255'n{+'#180'o_'#197'Z'#131'u'#14#2#137 + +#133'&'#229#181'}'#143#194#239#195'?'#237'|'#8#144#217#255#168#181#215#247 + +#214#12'T|'#206'^?'#27#161'3'#144'^'#175'7'#1#31#9#240#132#212'{'#214'uX'#151 + +''''#15'"''?'#128#22#138'''.b'#171'?e'#4#234'L|8'#144#175#13'`'#166'B'#22'?' + ,#204'Wo>'#10#220'm'#245'Y<c'#223#160#216#255#25#247'}'#142#164'84'#219#243 + +#169#139#23#12#203'v_'#185#12#234#251#127#250#189#159#14#249#187#25','#18#252 + +'?d'#190#10#222#127#10#255#249'X'#7'`?8'#154'6'#131#167'u+'#155#15'('#20#1 + +#153'5'#193#214'2'#147'k'#3#202#150#151'/'#3#174#23'"'#0#168#177'7'#4#131#193 + +'^#'#0#132#190'd2%'#18#160'T*'#11'('#18#128''''#154#176#177#189#232#238'xBf`' + +'OB'#225'&!'#167'&'#161#198#252'<F'#0'z'#150#22#140'f'#128#150#239#22#204'r' + +#2#178'G'#1#209#144#31'V,?'#20#213'(o'#214#206#217#23#22#157#180#28#166'/9z' + +#200#199'y'#238#138#189's'#234'}'#141#20#140#159#179#20#246'?'#255'niN'#158 + +#224#230#255#177#226#159'p'#20'B'#168#254#7#188#1#240#241#249#255#237#181#171 + +#248#177'l'#157'2\bto'#182'j'#253#212#253#199'ME@'#192'G'#0'('#17'H'#165'R5' + +#225#177'z'#141#0#16#250'$'#0'!'#18#160#209'h'#12#168'N'#144'#p'#28#158'`|' + +#141'3'#239#202'@T'#181'3'#247','#25'('#228'r0'#21'V'#131#173'l2'#232'id'#184 + +#5#9#192#160'eZ'#128#156'z'#4'p'#163#131#179'i'#9#160#6#208#0#175#221'|tN' + +#172#150#187#31's'#25#204': ='#13'L'#158#191'b_'#8#249'r'#183'-'#250'p'#198 + +#239#151'?'#195#252#2'Y'#5#231#250#231#212#127'J'#254#9'E '#228''''#245'?'#0 + +'~'#150#0#228#134#214'-_A'#12#127#199'b'#7#224#196#188#182#31'T'#242#152#155 + +'w'#0#178'" >'#3'p;'#202#27#253#221#209'S'#17#144#128'~'#17#0#213#4'x<'#30 + +#180#2#244'Vr'#4'"'#17'T5{'#244'G8'#2#198'dA;'#9#184'Zg'#132#162#137'{2'#2' ' + +#13'@'#199#178#2'5'#172'6@'#208#2#178#146#27',B'#243#230'5'#240#254'}'#23'B4' + +#18#202#234'y'#197#216#237#168'K`'#246'Ag'#164#237'x/\'#181#31#174#6'C'#155 + +'~3'#134#238'A'#157#154'N'#185#247#163#172#159#151#171#252#227#212#255'p0'#12 + +'Ao'#144#9'?'#173#254'T'#244#229'j'#222#200#156#131#130#253#175'VD'#253#19 + +#243#236'?'#226#223#148#17#230'@'#18'`'#14'@'#222#254#167#134' }:'#0#9#253 + +#145'F9'#146#128#18'I'#128#210#127#205'h'#10#20'#'#9'T'#198#19#138')'#155#157 + +#133#183''''#18'2V'#149'A'#194'M'#13'B'#10'*'#231#161#25'P'#8#6#19#18#0#211#2 + +#136#0'T'#160#16'*'#4'3<B'#188';'#132#253'^x'#235#174'3'#192#217#152#253#230 + +'!'#187#29'y1'#204'9$'#189'C%_'#188#250#0#252'q'#180'g'#253#189#140#22#28'}' + +#211'K'#144'_'#153#165#161'.'#178#4'_'#247#207#173#254#156#250#31#130#128'''' + +#192#28#128#20#5'h'#223#246'='#254#237'J'#177#255#11#244#190#218#2#189#135'B' + +'~^'#20#254'v'#222#254#23'j'#0#26#250'J'#1'N'#158#190#31#151#200#28#129#249 + +#249#249'j'#161'='#24'%'#4#145#31#160#182'#'#239'|'#127'D'#205#244'%'#230#228 + +#195'U'#222#148'W'#9'y'#21#211'Q'#11#224#252#0',+PK%'#194#157#206'@.'#190#144 + +']'#18' |'#243#242#221#240#203#199'/C6'#146'h'#200#169#180#224#164'e0u'#241 + +#145'i?'#246'KW'#31#4'>gK'#198#223#195'h'#197#180'%G'#193#226#211'o'#202#206 + +#201#184#170#31#142#0#248#216#127#208#23'd'#130#207#212#127#167#19#9#224';' + +#212#12'"b'#251'?1)'#191'}'#21#170#255#228#8'"'#251#159#26#129#214'R'#248#15 + +#23'h'#234#1#208#136#194#239#232#203#254''''#244'G'#10#153'#'#16#15#166'"?'#0 + +#10'p>'#158#168#140#252#0#206#128'vi'#179#215#194#21'h'#147'#PFf'#128#14#205 + +#128#5#140#0'H'#3#224#162#1#252#244'`j'#24'*'#151'u'#27#17#200#240'P'#225'$' + +#26#127']'#9#31'>|%D'#130#190'L|'#157'L'#203#153#186#232#8'Xr'#234#13'd'#23 + +'e'#228#28'O'#253'a7'#246#131#24'Cf`*('#131#19#239'zw'#200#199#233#235'7-<' + +#206#21#254#196#208'LE'#2' '#231#31#18'@'#160#131'['#253#157'M'#155#192'M' + +#222#255'h4'#169#254#235'U'#225#142'J'#139'c'#29#202'Q'#0#239's'#1#215#4#164 + +'V'#176#255'qk'#17#154#128#160#240'G'#249'S'#13#158#0#186#250#1#144'eJ'#240 + +'~'#234#215'\'#189#201'Q'#180'<'#22#151'S'#136#144#17#0'e'#255#217#202'g'#130 + +#185#176#140'#'#1'3o'#6'h'#133#204#192#206'nA;'#148'Bw'#185#154'L'#182#186 + +#219#248#191'7'#224#199'w'#159#2'O['#250'Zj'#149'M'#155#15#251'^xOF'#139'Q' + +#234#214'~'#9#31#220'?z:'#1'I'#1'J_?'#231#137#31#134'D'#224#221')'#184']'#127 + +#207','#251'/'#193'y'#254#185#213'?'#138#230'j'#136'y'#255'I'#253#15'P'#243 + +#143'-'#223'@'#200#239'I'#137#255#151#24#221'[l'#186#0#165#249#250#241'>'#150 + +#0'$'#148#0#227#177#234'PKo'#235#143#253'/\C'#127#192#252#0#168#5'h'#220'n' + +#183#5#217#165#8'OXIf@'#131#219'r'#130';'#164#221#141#29#140#198#131'+'#20 + +#172'8('#175'j&o'#6#232#144#0't'#160#210#169#147'Z'#128#16#17#200#5'8'#27#182 + +#194#183'/'#255#5#26'~]'#201#134'F'#14#4'T'#133'f-'#29#15#19#230#239#15';' + +#239#127'2h'#12#153#207'&{'#239#238'?@'#195#250'o'#165#250#184'F'#13#246#189 + +#240'n'#168#222#245#128#140#158'#!'#168#255#148#249#23#137'B4'#200#169#255'd' + +#255#7#220'T'#252#211#10#142#237#171'!'#134#143#197#249#231#202'e'#137#216 + +#228#252#182#213'2'#136#7#248#248'?9'#131'X'#252#31#229#170#6'o7'#160#156#182 + +'['#173'V__'#246'?'#161#223#4#128'f'#128'\'#156#15#128#251'rd'#155#9#193#152 + +'v'#238'v'#151#237'\v02'#3'P'#184#149#26'5'#20#146#25'`6'#161#9#192#145#128 + +'Z'#199#229#4#144'/@&'#242#5#236#176#234#15#225'"'#135#2'R'#177#234'~'#254#10 + +#26#214'}'#11'm'#219#214'1'#205#128'&'#203#138#175#130'VvKq'#5's'#16#149'M' + +#159#15'e;e?#'#239#233'sw'#131'hX'#186#136#198'hA'#213'.K'#225#192#203#31#24 + +#212'k'#251'j'#132#155'L'#250#137'sC?c'#164#254#211#234#31#8'A'#136#188#255 + ,'l'#245'G'#245#191'a=x'#237#245')'#225'?'#179'&'#216'^fr'#209#196'W'#26#11 + +#228#22'*'#0#137#0#132#30#128#129'@'#192#137#230'z'#159#246#127'w'#215#214 + +#227#243#132'|'#0#178#1#168'0('#26#141#150'Q8'#16#31#155#176#197#145#127'a8' + +#166','#226#252#0'\4'#192'R6'#13#204'EU,$H~'#0#202#9' -@'#201#198#135')'#144 + +#4#184#196#160#28'Q'#4#134#5'>z'#248'*'#216#246'}'#246'CT'#163#17#182#242'Ip' + +#236#31#223#200#216#241')'#233''''#17#3'V'#214'M+<e'#254#133'|!'#8'2'#245#31 + +'5'#0#175#31#218#182'|'#9#225'`0%'#252'Wnv'#254'j'#210#132#169#243#15'i'#0#20 + +#11'n'#166#30#128#148#2#204#183#3'o'#161#30#128'F'#163'1'#216#151#253'O'#232 + +'7'#1#8#133'Ah[h'#145'e'#168'.'#160'D0'#3'Z}'#166'C'#28#1#195'^'#236#137#188 + +#25'@'#241#212#252#170#249','#10'@Z'#0#17#128#218#160'a'#218#1#27#30'"'#20#9 + +#245#196#0#217#152'0:'#140#176#253#199#207#225'?'#247']"'#245'e'#140#26#232 + +','#5'p'#202'C'#3#236#217#216#31#245'5'#1#201#142'?$'#216#204#249#199#135#254 + +'h'#245''''#2#8#184#131#224'io@'#13#224#231#20#245'_)'#143#135'Q'#253#167#216 + +'?M'#195'a'#249#255#184#177#22'`'#212#2#156#230#0#226#194#220'F-'#192#236'v{' + +#184'/'#251#191#187#203#235#13')'#29#130'h\'#24'2M9^'#204#248'h\9m'#139#163 + +#224#194#4#249#1'y3@'#161'V1'#2'0'#216#242'QuF'#13#128'i'#1'd'#6#16#9'(QK'#16 + +#21#9#141#169#1#189'"'#26#244#195#11#23'-'#193#31'Jp'#232#7#27'C'#191'@'#181 + +'-g>'#249'C'#250#15#156#224#226#254'@'#158#255'8'#231#249#143#6#195','#243 + +#143#169#255#168#250#19#9#216'kV'#163#25'`gY'#172#130#250'o'#211#249#27'K' + +#140#30'R'#247#131'|'#250'/'#27#3'F'#241#127'R'#255#169#1#8#154#19#142#190 + +#242#255#197#24#136#228'%'#195#129'V'#171#213#24#12#6#169'Sp'#25#17#0#238#171 + +'j'#156'yg'#4#162#170'*'#193#12#160#162#10#163#173#4'l'#21#179#144#0#180'<'#9 + +'hy_'#128#154'9'#3#169'T'#24'dBX'#176#135#14#194#144'$'#205'~^e'#250#191'3)A' + +'~'#136#215#151#31#1#174#198#209#212#2'\zP'#133#224'9'#207#241'c'#214#135#26 + +#141#226#139#253#19#252#129#216#234#207'l'#127#170#250#139#176#208#31'9'#255 + +'H'#240#131'H'#0'>G'#27'8jWC$'#28'I'#241#254'O'#176#182#175#213#170'b'#30'R' + +#255#241'O'#23'5'#0#1#222#254''''#239'?'#223#16#164#163#183#6' '#221']Z'#191 + +#223#134#16#14#164#254#0#248#183#21'U'#13#150#21'H='#2':'#130#186#5#141#30'3' + +'+'#17'f'#177'~'#185#2'Tj5'#20'T'#239#10'z'#139#141'E'#2#136#0'4d'#10#176'f!' + +'*'#166#5'0_'#128#140#159'(<'#194#132'w'#168#160#130#159#215#151#253#14#127 + +#16'cI?'#217#134'B'#165#129#179#158']'#157#222#131#242#131'>'#133#142'?'#204 + +#246'G'#2#8'3'#225#231#9#0#247#142#186#159#192#239'la'#142'iA'#253#215#169'"' + +#238#241'V'#199#175#188#250'O'#9'@'#164#254#179#240#31'%'#255#144#250'O'#225 + +'?\'#160'='#253#9#255#9#24#16#1#208'&'#152#1#8#19#153#1#148#21'H'#4#128#143 + +'Umu'#22#156#25#142')'#11#133'.A'#20#247'7'#228#149#129'm'#220#206'I-@C$@CDY' + +#179#16'!/'#128'F'#137'e?E8'#151'AQ'#136'7'#174';r'#172#234'O"'#168'tF8'#227 + +#201#244#246#148#16#135#253'('#238'O'#158#255'H'#16'U'#127'"'#0#15'n>'#170 + +#254#179#163#250#191#10#205#189'0'#243#15#8#234#127#185#217#185#193#168#14 + +#145#211#143#169#255#192#13#1#173#23#17'@'#147#160#254#163'lF'#250#10#255#9 + +#24#168#196'13'#160#176#176'PE#'#195#168':'#144#6#134#224#133'T'#145')'#224 + +#10#234#23'4{'#205#7#2#175#210'S'#21' '#211#2#198#239#14':'#139#5'4F'#29's' + +#10#170#13'|'#207'@'#181#138'=G!'#231'g'#9#202#248'K'#234'O'#154#224'`'#223 + +#193'0@'#235#166#159#224#223#183#159'6,'''#31#143#20'h'#205'yp'#234'c_u'#255 + +'`_b'#213#205#239#151#21#251#240#163#190'H'#176#227#201#213#191#211#249'G' + +#171#191#179#254'g\'#253#155'8'#231#31#175#254'k'#149#17#239'x'#171'}='#10'{' + +#132#138#127#200#251'O'#237#191#240#200#181'|'#2#16#169#255#164'&v'#168'T' + +#170'`w3'#0#251'{'#169'}>_0'#3'('#26#128#127'['#168'K'#16#158#188#130#8#0#168 + +'m'#184#179#240#244'HLa'#21'j'#3#148#168#234#27#243#202#193':n:'#168'Q'#11 + +#160#193'!D'#4'j'#22#18'$'#18'P'#240'aA9?V|'#16'W5'#130#176#229#235#247#224 + +#243'G'#174'a'#182#223#24#164#3#133#1#143#190#251#157#244#28#140#15#252'S.' + +#127'"'#202#175#254'h'#223'G'#130'a^'#253#15#176#172#191'@'#135#19'W'#255#239 + +#185#213'?'#130'$'#193'1'#7#140'3w'#252'f'#214#4')'#244#23'F'#185#242#240#201 + +'?'#228#253#167#240'_'#13#202'"'#205#4'l'#31#136#247'_'#192'`D-'#165'8'#8#184 + +#193#161#204#25'H'#154#128'#`X'#208#234'3-'#21'F'#131#145'3P'#169#209'@'#225 + +#132#221'@k'#178'0'#19#128#242#2'Th'#6#8'Z'#0#171#20'Lv'#16#150'%'#157'&'#253 + +'m$:R'#176#254'?+'#224#235'g'#239#200'l'#14#244#24#250#133#233#251#159#8#11 + +#207#186'eP'#175'M'#249#221#242'!?'#230#253#143'q'#5'?'#156#237#31#134#8#31 + +#250#163#212'_'#218';'#27#214#129#223#209#8#209'H$'#25#251#215'('#162#254#9 + +#182'v'#234#250'K1}'#10#3'Q'#247#223#22'~'#213#175#193#191'k)'#249#167#175 + +#246#223#189']'#235#128#223#159#208'-'#24'm'#13'='#178#143#141#204#0#188#191 + +#146'i'#1'2Y'#229#22'{'#193'I'#145#184#194#196'r'#2#228#10'P'#170#149'`'#200 + +#175#2'k'#233'T\'#253#181'H'#2#168#5#232#185#196' V)H'#179#4'),'#168#232#140 + +#10#176#19#245#148'" zk'#178#228'?'#195#27#171'^{'#8'V'#191#254#176#212#151 + +'1'#6#30#135#223#186#2'J'#166#207#239#246#177#148#223'_/'#191#189#4#223#232 + ,'#E'#245#167#213'?'#24'a5'#255#17'?'#231#252#11#177#216#127#7#180'o['#9'Q$'#6 + +'z'#14#181#6#163#215#149#153':'#182'X'#180'A'#154#248#19#225'{'#255#145'&@+>' + +#9'>'#133#255#234'q'#223#170#211#233#220'='#13#0#237#13#131'"'#0'J'#10'B'#150 + +'a'#205'B'#3#129#128#153'J'#132'c'#177'X'#5'e'#6'rZ'#128#17#181#0#227#158#130 + +'3'#144'T|'#138#255#231'O'#216#3'W'#127#19'G'#2#212'4T'#207#151#10#147'CP' + +#221#233#16#148#241#166#128'l'#7#233#30#204#202#152#251#236#240#213#147#183 + +#192#175#31#189','#245'e'#140#129#7#253#6#207'~'#249#215#129#190'Jt;'#145#12 + +']'''#189#254'd'#207'Gx'#199#31#173#254#254'P'#210#251'O{W'#227#175#224'u' + +#212#177'~'#0#148#31'@i'#194'jE4Pmk'#251#5#229'!'#138#199#160#252'o'#15'nT' + +#250'['#207''''#255'lG'#217'#2p'#244#167#246#191#175#171#30#208#187'%g'#160 + +#201'dR'#163#218'a'#196#191'Yj0'#229#3#224#237'*|'#175#228#11'8>'#154'P'#232 + +#153'3'#16'Ww'#188'P0'#20#146#22'0'#133'9'#1'Y8'#144'6=_)H)'#194'h'#6'P'#18 + +#145'L('#22#202#206'lQIa'#175#217#0'o.'#251#157#212#151'1'#6#17'J'#166#205 + +#135#195'n'#127'iH'#199#232'n'#245#143#161#240#179#184#127'0'#196'9'#255'|A' + +#206#1#232'qC{'#205'w'#168#25#132'x'#207'?'#183#250#151#24#221#219#172'Z'#127 + +#155#200#249#151','#253'%'#225'GY'#169'C'#185'k'#182'Z'#173'.'#148#195#192'@' + +#156#127#2#6'M'#0#130'3'#16#153'G'#231'r'#185#200#233'W'#140#23'T'#1'\'#153 + +'pe'#155#207#184#208#30'0'#206'Kj'#1'H'#2'*'#141#22#242'(='#216'bE'#2#208'$' + +#137#128#180#3#133'P($T'#11#138#251#6#140'`'#22'x'#251#250'c'#161'u'#211#26 + +#169'/c'#12'"'#28'q'#215#155'PP'#189#243#160'_'#207#249#252'D'#141'>H'#168'#' + +#188#227'/'#192#173#254'L'#248'}AF'#4#174'z'#180#253#157'h'#251'S'#211#15'z.' + +#190'T%'#139#134'&'#230#183#255','#227'l'#255#16#18#0#139#253#163'l4'#144#240 + +#227'mr'#0#178#206'?]b'#255#253'V'#255#9#131'&'#0#232#146#19#128#23'H'#163 + +#195'h'#0'[%nU1'#210#2#28#133#199#198'P'#180#217#160'p'#210#2'P'#192'u'#150 + +'"'#176'U'#204'fu'#1'I'#2'`'#14'A$'#1'V.'#204#153#2#192'L'#7#254#242'Fh'#170 + +#176#223#217#10'/'#159#183'p'#204#233#151'C0'#20#148#194#9#127#255'b'#208#175 + +#151#241#169#190#204#8#136'w'#198#252#185#130#31'A'#245#199#205#31'`'#197'?' + +#1#23'e'#253#173#225'<'#255#209#206#213#191#216#232#169#177'i}'#173#252#234 + +'O'#153#127#212#5#150'B}'#245'T'#246'KN@Z'#253#145#0#156'~D'#127'S'#127'w' + +#184#222'!|V'#201#10'A'#179#217#172'#g '#222#199'B'#130#184#175#162'=j'#1#11 + +#218#253#134#185#204#169'Ge'#194'D'#2'j'#13'X'#199#205#0'}~)S'#255#213#6#29 + +#211#6'Tz'#13#31#22#228'{'#6'$'#253#1#248#142'd'#217'm)'#158'-|'#244#231's' + +#161#246#135'O'#165#190#140'1'#136'p'#240#205#207'C'#217#172#133#131'|5'#159 + +#236#203#219#253'B'#177'O'#156#217#254#188#234'O'#4#224#193#149'?'#192#217 + +#254#142#237'?@'#200#211#193'&'#1'1'#2#192#255'T'#242'hp'#162#205#142#182#127 + +'"'#202#135#254#216#234'/'#196#254#129#235#250'['#143'2'#215'N'#206'?'#170 + +#252#235#173#243'oo'#24#18#1#144'3p'#221#186'u'#172'QH '#16'0'#161#6'P'#128 + +#23'Im'#195#153#22#128'W2n'#155#179#224#247#225#184#202'"h'#1#148#2#172#209 + +#27#208#20#216#13#212#148#19' '#242#5'(u'#184'Qr'#16#159#27' h'#2'2'#161#157 + +'xOq'#193#158#222'E'#142'/'#172#207#158#176#19#174#12'c'#181#253#185#130#202 + +#249#251#192#254#215'='#193#253'1'#136#223#148'X'#248'i'#229#135'8'#151#238 + +'K'#142'='#177#227'/B'#234'?'#222#246#180#214#128#167'e'#243#14#171#127#185 + +#197#181#209#168#10'R'#184#143#250#190#177#208#31'n'#173'(_'#245'|'#209#15'%' + +#0'5S'#230#31'j'#224#254#193'8'#255#4#12'uYMf'#6':'#28#14#189'R'#169#180#225 + +'E'#22#227'F'#137'AL'#11#240#133'5'#211#235#220#182'}'#4'-@'#193#180#0'5'#24 + +#11''''#128#185'x"'#175#5'p$'#192#180#0#161'u'#24#223'>'#172#147#4#248#203#29 + +'A'#138#192'sD'#0'c'#21'~9'#1#26#22'z'#242#243#171'Q'#251'T'#15#238#0#188#25 + +#215#185#242#243#170#127#152's'#252#145#131#143#179#253#3#16#246'"'#17'x=,' + +#233''''#18#12'B'#140#250#253'E'#185#196#31#20'|G'#133#197#181#5#15#21#19'V' + +#127#161#237#23#169#253#192#245#252'k'#224#203'~'#221'}'#245#253#239#11'C&'#0 + +'A'#11#160#182#225#168#9#144'/'#160#0#137#128#249#2#144#8'H'#19'(k'#240#216 + +#246#246#132#181#149'r'#150#29#168'`5'#0#10#10#11'V'#206#3#141#201#10#26'#g' + +#10#168#146#17#1'5'#243#7#176'b!'#218#152'#'#145'+'#27#30'I'#166#192#138#211 + +'v'#129#144#215'%'#245'e'#140'zP'#225#218#161'w'#188#10'E'#211#230#13#234#245 + +#9#174#212#143#247#250#199#217'l'#191#4#223#230'+'#30#140'$W'#127#138#251'3' + +#199#31#222'v5'#252#2'AWK'#202#234'/C'#218#168'F'#213'_)'#143#134'zZ'#253#5 + +#207'?n'#142#254#182#253#234#245#189#167#227#243#19#215#7'h4'#26#214'4'#148 + +'O'#15#166#188#128#242'h\^'#177#213'Yxp'#2#215'uA'#11'P'#168#212#160#181#20 + +#176'ra'#181#174'S'#3'P'#11'Z'#0#229#6#8'Q'#1#190#155'0'#136#202#134'G'#130 + +'_'#240#213's'#22#130#175#189'Q'#234#203#24#213#160#197'e'#191#27#158#132#10 + +'T'#255#7#140#132'x'#166#31#231#244'#Afv?'#173#252#225#8'K'#250#137#6'B'#172 + +#221'W'#132#247#250'S'#165#159#139#154'}'#160#240#211' '#16'a'#245'/'#212'{' + +#234#10#244'>'#10#243'u]'#253'i'#236'7'#181#253#222#142#130#223'@U'#127'H'#8 + +#238#129#230#253'w'#251#254#211#241#25'v'#213#2#240#194#10#132#136#128#160#5 + ,'8'#2#198'9'#173'~'#211'l'#210#2'@'#161'`'#14'A'#5#154#2#150#178#157'@'#159 + +'W'#202#146#130#152#240#147#22#160#227'H'#128#181#15'S'#241#237#196'EY'#130 + +'2y'#186'.]Z'#252#235#210#3#193'Y'#187'Q'#234#203#24#189#192#223#210#146#203 + +#255#10#19#247#26#194#236#6#22#231#7#214#224#143#229#250#243'N'#191'X'#132#19 + +#254#8#175#250'G|'#156#6#16#246#243#142'?'#159#155#21#4#9'q'#127#149'<'#26 + +#168#206'k_'#143#199#139#241#171'?y'#254'Y'#213#31#173#254#184#175'U('#20#181 + +#180#250'k'#181'Z'#7#146#192#144'W'#127#246#17#164#235#163#236'N'#11' _'#0'p' + +#17#1#26'$R'#180#213#153#191#127'8'#166#178#10#217#129'$'#220'j'#189#145#229 + +#6#168#13'z.)'#136'O'#17'V'#178#220#0#222#20'`'#141'D'#249#14'Bra'#196#24'$' + +#213#128#225'J'#5#31#222'r24'#174#249'R'#234#203#24#149' '#13't'#191#27#159 + +#134#178'9'#139#7#252'Za'#213#231#179'}x'#187#159#19'~Z'#209'i'#245#143#133 + +'"'#201#176#31#229#252'GI'#248'q'#239'i'#217#10#222#214'm'#140' '#152#237'O9' + +#255#248'_'#165#217#177#193#160#14'S'#166#31#9'4y'#134#133#145#223'Md'#251 + +#147#240#163'L'#213#167's'#245''''#164#141#0#186#243#5#0'7H'#180#146#15#13 + +#150#249'#'#234#9#181#238#252'%l'#29'Wt'#154#2#134#252'r0'#151'N'#229'j'#3 + +#152#6' r'#8'R'#247' '#149#146'+'#24#18#154#137#178','#193#225#239#24'l\'#243 + +#5#252#231#230#147#165#190#140'Q'#7'CA'#25#28'~'#223#187'h'#130#230#15#252 + +#197#157#195'y:'#139'|'#226#156#205'O'#182'?'#173#234'L'#245#167#132#31'a' + +#245#199'-'#26#8#254#127'{_'#22'kYv'#158#181#246'x'#230's'#238'XsWwW'#187#219 + +'v'#187#227')'#241#0'v'#136#193#145#8#194'F'#8#5#148#4')'#145#176'P'#132#132 + +#20#241#18'!9'#188#0'/H'#188'!'#224#1'x'#2#9#17#144#128'XHH$`x'#128#7#144#172 + +'$'#216#198#221#158#186'k'#174'[w:'#243#176#7#254#239'_'#255'Z{'#237'}'#207 + +#173#186#213']w'#170#190'K'#218'w'#15#247#12#251#236#189#191#239#159#255#165 + +#166#253'='#181#243#222'wT2'#155#209'k'#23'\'#25#8#159'A;'#158'n'#223#232#238 + +#161#229#19#192#159#152#184'?:'#254#162#230'_'#233'Y'#127'n/'#145#254#0#255#7 + +'*'#27'}'#158#208')E'#4#136#173'V'#137#165'.'#139#22#128#174'A'#215'Q:|o'#208 + +#251'b'#127#214'x'#153'+'#255'B"'#129' d'#144#247#174#146')'#176'zUH@'#8#160 + +#225#248#3#184'V@'#155#2'l'#14#248#158'T'#15#150#127'I'#158#23'?'#201#243#206 + +'x'#28#144#198#191#254#181'O'#169#217#197'D'#159'''3'#232'ay'#245#203'_S'#191 + +#240#219#255#248'H/_'#250','#229#198#225'/'#137'>'#22#252#186#208''''#227'2_' + +'m'#247'c'#129#218#191#24'C'#19#152'p'#155#175#249#184#207#182#191'Q'#253'=z' + +#247'k'#171'['#127#28'x)'#138'}JY'#127#180#127'_<'#255'h'#251'u'#239'yK'#127 + +#254']'#207#243#242'.'#203#11#160#31'q'#21'~'#0#163#5'dyp'#229'G{'#27#191#152 + +#229'~'#13#0#246'E'#11#136#234#13#181#242#210'gT'#173#211#213'&'#128#144#0 + +#182#131'Z'#173'0'#5#196#31'P'#174#28'<'#191'Z'#192'w'#254#229'?P'#127#244 + +#187#23'U'#128#199'=z/}D'#253#153'o'#254#11#213#189'~'#235#253#127#8'W'#248 + +#228',ssW'#242'['#187#159'l'#250#217'\K'#127'V'#253#167'"'#253#231'j'#255#222 + +#247#213'd'#239'>{'#253'a&(N'#249'e'#199#223'{'#235#205#17'z'#251'C'#250#163 + +#3#12#247#251#163#5'Y'#128','#253#197#7#240'p>'#159#239':'#158#255#15','#253 + +'1'#158'7ll'#227'Pd'#7#146#22#128'9'#178'.!'#18' Q'#1#172'/'#239'Oko'#220#31 + +#174'~'#206#19#135#160'1'#5#226#246#138'Z}'#233#211'l'#2'@'#250'G-q'#8'J'#243 + +#16'?'#150'Ta3'#211#176';'#229#184#167'='#186#207#214'A'#244#244'G'#150#204 + +#213#191#250'K'#175'?'#243#172'D'#23#227'h'#163#181'y]'#253#220'_'#251#166'z' + +#229#231#223'g'#193#149#17#252'z'#30#175#178#211#15#246#187#145#252'H'#248 + +#129#228'g'#2#152#217#176#31'r'#255'G'#219'w'#200#246#127#135'$'#255#140'I"O' + +'u'#185'o=\'#244'_'#233'm'#191#157#231#252#137'\'#239'o'#26'~@'#250#211#254 + +'m4'#251#132#244#199#12#192#181'Z'#13'>'#130#217'Q'#27'~'#30'e<w'#2'0'#165 + +#194'd'#10'`'#18#145'6i'#2'0'#180#174#144#9'pC'#180#0'D'#7'6'#239#15#186#159 + +#221#159'7_e5'#222#15'X'#186'C'#213'o'#174#222'P'#157'+o'#20'Z@C'#155#2'Q'#3 + +#25#130#226#15'0'#165#195#156'#P'#20#14#217'_t'#206'b'#132#255#229'w~U'#221 + +#255#206#255'8'#237#211'xq'#6#221#255#205#143'~V}'#254'7'#255#158'Z'#127#227 + +'S'#31#236#179'rG'#245'W'#134#0#164#179'O'#166#139'|'#24#252#28#242'+'#164'?' + +'l~'#238#246#219#223'U'#251'w'#255#144#247'a'#247's'#216#143#136#195#247#211 + +#197#173#149#199#223#13#253#12#30#255#212#244#250#151'v_'#8#5'b'#210'J'#164 + +#253#222#165'}h'#3'{'#200#249#127#150'~'#127'G'#186'T'#199'q'#249'M'#195#144 + +'$I'#26'q'#28'w'#137#197'6'#209'5'#8#254#0'D'#4#232#7']'#165#179'_'#127'w' + +#127#227#203#179'$^'#209'*'#189'N'#19'F'#135#160#238#213#143#171#230#218#21 + +#142#4#128#4#160#1#128#8'8*'#0#240#219'.B'#1#147#7#28#131'6G'#192'w'#136' ' + +#247#158#173#155#0#212#187#252#228#201'c'#255#246#15#213#239#253#141'_'#184 + +'('#10#250#128#195'''-'#242#229'/}M}'#238'7'#255#174#170'u'#215#138#127#28 + +#225#190'.}N<'#29#232#231#2#31'%'#157'}8'#214#159#234'L?'#168#252#0#255'L' + +#171#254#139#169#145#254#180#158#234#148#223#221#219#223#161#253'>'#251#6'x' + +#138'/'#237#248#203'otw'#223'i'#199'3'#132#249#172#227#143#176#129#164#159'-' + +'H|'#241#252#179#227#143'0'#180'3'#164#177#183#183'7{'#214#134#31'O'#27#199 + ,'B'#0'J*'#5#209'6'#140#206#187#213'h4`'#10'\VZ'#250#223#148#245#165'E'#26'\!' + +#18#248'R'#166#194#136'I'#128#147'~"'#235#15#136#219#29#173#1#136'C'#16#25 + +#130'a='#226#181'o'#138#134'l'#142#128#152#3'b'#18#148#148#128'e'#191#242#164 + +#177#246#148'+'#253'?'#255#225'o'#169#31#253#193#191'='#225#147'z1'#6#188#249 + +#31#251#139#127']'#253#204'_'#254#155#207'>'#163#239#147#158#13#145#250#182 + +#194#207#218#252#162#250'/t'#184#143#19'z&s'#209#0'D'#253#167#237'>'#236#254 + +#253#251#252#154'<Ix'#14'@'#152#14'k'#141#209#189'K'#205#193'=Q'#253'M'#216 + +#15#234#253#142'8'#254'P'#241#7#231#31'&'#250#216'B'#193#207'h4'#154'<k'#187 + +#175#247#251#243#159#203#231#154'~'#1#180']CX'#144'~'#216':'#28#130#240#3#208 + +#177#155#178#189'1X4_'#185'7'#232'}'#6#0'F'#251'0'#246#7#144#132#143#218#171 + +'j'#229#198#167'8"'#192#154#0#231#6#196#188#246'k'#210'@'#132'5'#6#9#15'J~' + +#128#206#24#244#139'l'#193'\'#251#7'Nk'#210#209#163#14'<\'#191#251'W>'#174 + +#230#163#254'i'#159#202#185#25'+/'#127'T}'#246#27#127'G]'#255#220'W'#223#215 + +#251#151#206'>g5'#254#188'P'#251#179'\l~'#29#235#207#165#188'W'#199#251#181 + +#218#159#10#248#19'&'#130#153#26'o'#223'S'#253#135'?`'#211' [,'#172#215#191 + +#17#206#251'/'#147#221'/'#223#4#213#31'&'#192#152#22#132#130#224#12#180#170 + +'?-'#152#231#15#14#193#145#211#236#243#185'I'#127#251#155#143'iX'#135' &'#20 + +'%'#192'cZ'#241'Mt'#14#130'/'#0#166#0#189#230#10'-k'#15'G'#189#183'v'''#205 + +#151#141'w_;'#250'b'#213'\'#135'?'#224'u'#21#213'$1'#168#17'["'#240'M[q'#19 + +#30#180'='#5'i'#9#138#217#134'r'#201#21'8'#15'n'#129'{'#255#231#191#169#255 + +#250';'#191'z'#218#167'q'#166'Gs'#253#138'z'#233#203'_S?'#243'+'#191#165#234 + +#171#155#207#245#179'M#'#15'//'#8#0#21'}'#153#16#0#219#253#146#230#11#149#30 + +'E> '#0#150#254#0#255'Tk'#1#179#193#158#218#187#253#135#244#191#194#238'W' + +#176#251#189'd'#241#234#202#246#247'B'#178#255#149#168#254#180'L'#137#4'0' + +#203'/:'#253#222#147'f'#159'w$'#1'h'#219'8'#254#158'W'#216#175':'#142#149#0 + +#224#16#252#214#183#190#197'MC'#136#201'Z'#244#195'`'#152']'#22'-'#0'$pM!J' + +#160#188#149'w'#247#214#190'0Kk=eH'#0#210#157'H'#160's'#249'5'#186#233'/IRP' + +#205'j'#1#8#13#194#28#240'b'#157'#'#160#195#131#18'"4'#25#131#158''''#10#192 + +#249#9#19#254#254#223#254'e'#245#240'";'#176'4'#26'kW'#212#205#159#255#154'z' + +#235#24'@_'#26#206#196#157'6'#209'G&'#241#204#165#161'g.'#177'~V'#253#167#218 + +#238'O'#5#252')'#183#249#30#178#211'o1'#30'j'#233#159'&'#186'4'#152#237#254 + +#189'w'#218#209#180'oT'#127'z>9'#230'Ok4'#250#228'f'#31' '#0#244#249#203#178 + +#12#190#128#253#227'p'#252#185#227#184'aa'#29#130#244#163'j'#164#1'tMn'#0'H@' + +#136#0#29#133#215#147'<'#218#248#233#222#250#23'3'#130#189'q'#10#194#31#0'{' + +#191's'#245#227#170#209#187','#192#143#181'?'#192'5'#7'b]>\'#20#14'A'#11#208 + +'D'#144#151#10#136#156#159#251#164'_~'#18#254#129'C'#190#31's'#1#254#222#175 + +#127'A'#141#30#221'9'#129#147'8'#187#163#177'vYK'#250'_'#251'['#31#12#244'O{' + +#194#141#202#159#231#142#237'o'#192#159#217#226#158'\'#178#252'8'#140'7[X' + +#192'C'#242#167'Sc'#255#143#9#252#127#164'f'#163'}Q'#253#19#235'7Xo'#142#238 + +'m6'#251#144#240#244'Hz'#166#216'g'#12#144'#'#227'O'#21#210#255'.'#225#4#181 + +#254#187#180' '#230'?'#251#250#215#191#158'>O'#199#223#179'\'#158#231#241#249 + +#236#16#188'v'#237'ZD?'#166'I?'#142'M'#1':~]'#242#2#224#16#132'V'#176#218#159 + +'7n'#222#31#174'|'#138#253#1#220#16'$'#212#243#6#196#177#234'^{K'#213'z'#235 + +'L'#0'69'#168')'#249#1'5m'#10#232'D'#161'P'#207'1`'#252#2#158'8'#6#13#1'x:' + +#195#235','#155#4#217'|'#170#254#227'o|^M'#182#31#156#246#169#156#232#208#160 + +#255#243#234#19#4'zl'#31#247'0A'#23#207#216#251#210#196#147#255'!'#192'5Y~' + +#185#128#31#146'?'#19#181#127'!$'#144'Ng'#236#245#239#223#253#174#154#13'w4' + +#248#209#223#15#170#127#134'x?'#236#254#157#183#229#27'!'#253#145#245'7'#161 + +#239#178'1'#127'I'#246'A'#143'?T'#254'm#'#227#143#204#229#217'q8'#254#220'q' + +#18'0`-'#128#214#193#189'{'#247'0'#181'x'#11#141'C'#148#6#189'!'#1#248#5'6i{' + +'e{'#210'}'#227#241#164#253#154'.'#24#242#25#208' '#129#176#214'P'#221#171'o' + +'q'#255#128'@'#204#129#192#248#3#140'S'#208'!'#1#27#29'p'#27#140'B#p'#253#1 + +'v6'#226#167'\'#134#147'L)'#150's'#193#148#224#223#250#245#159'S'#211#189#173 + +#147#251#238#19#30'A\S'#221#151'^W'#215#190#240#139#234#245#191#240#13#213'X' + +#127'N'#160'?'#202#253't<'#253'&'#191'7wm'#254#212'H'#254#2#252#25#131'_''' + +#251'X'#181#31#14#192#217'L'#245#31'|_M'#247#183#216'<p'#237#254'0XL'#9#252 + +'?'#8#189'tQI'#248#225'R_'#153#225#23#141'>'#239#186#170#127#179#217#156#16 + +'^'#22#199#225#248'+]'#138#227#248#208'e'#223'cL'#1#218#174#199'q'#220'Y,'#22 + +'k'#196'vp'#2#26#18#192#246#6#189#180#247'`'#216'{s'#127#214#188'a'#253#1'a' + +#164'g'#24#170#183'T'#239#198'[*nuu'#211#16'h'#2#13#153'h'#148#246#217#31'P3' + +#230'@A'#2'z'#242'Q_'#151#17'{^'#209'r</'#251#6#242#202#229#240'N'#185#167'X' + +'Bv'#228#127#250#198#159'T'#227#199#247'O'#245'<'#158#215#128'F'#215#190#246 + +#138#186#242#179#127'Z}'#228'k'#191#161'z/'#127#244#216#190#235'i'#247#210 + +#230#243#155'F'#30#166#176'G'#156'}'#214#219#15#135'_R'#128#159#157'~'#211'"' + ,#236#135#253#193#131#183#9#252#247#11#143'?'#252#4'Y'#170'B/'#153#223'$'#240 + +#199'~2sC~2'#193#7#167#251'*'#173#250#223#145'\'#255'GF'#245''''#201#143#196 + +#160#244'8'#165#191#190'.''3'#216#20#248#202'W'#190#226#147#25#16#175#172#172 + +'4'#8#252']'#250#161#27'2'#185'('#204#0#16#1'G'#5#8#176#157#187#131#149'O'#14 + +#231#141'K'#202')'#29#230#28#129'f['#245#174#127#146#236#255#150#245#9'0'#17 + +#196#146#31' '#154#128'I'#27'6'#181#3#158#211'_'#176#152's@'#251#8#220'^'#131 + +'O'#157#233#229#20#198'w'#254#233'7'#213';'#255#254#159')'#253#12#157#159#1 + +#226'mn^W'#151'>'#253'e'#245#234'/'#253'U'#181#249#214#23#143#241#203#158#208 + +#198'/'#175#188#206'H{'''#179'O'#247#242'3'#224#207'X'#234'g'#21#201#207#241 + +'~'#2'}'#6'{_'#136#0#165#189#147#157#247#24#252#186#181#151#158#212#211#207 + +#210#228#229#149#237#31#212#130#197#196#181#251#149#14#249#193#238#223#18#213 + +#31's'#252'q'#200#143#182'w'#8#15#195#231'Y'#236's'#132#203'vb'#195#166#9'_' + +#191'~'#29#154'@'#11#181#2#240#7#208#15#191'*aA'#204'1'#8'=p5'#247#252#206 + +#157#254#234#167#198'I}'#213#23#167#160#23#232','#192#184#217'c'#18#8#26'uM' + +#0'l'#18'D'#146')'#136#16#161'4'#18'A'#152#208#180#21#243#29#18'0'#221#133'<' + +'!'#0#229#2#255'9D'#12#142'a6'#227#225#253#159#168#255#254#219#191#172#134 + +#247'~z'#130#183#236#217#6#8#186#190#178#169#214'>'#254#179#234#213'?'#251'+' + +#234#218#159#248#165#163#191#249#176'k'#246'<'#158'PG'#218'kG'#191#201#231 + +#207'm#'#143#194#230'/'#210'{y'#153#27#169#191#208#192#135#148#135#250'O'#132 + +'0'#217#190#163'F[?"'#146#152'Ks'#15']'#223#143'?7'#187'{o7'#194#217#208#177 + +#251#231#244'l'#163#197#23#18'='#182'%'#215#159#193'O8'#128#25#176#141#132 + +#159#157#157#157#169'x'#253#13#248'_'#24#2#224#239's'#19#132#8#248#173'$I' + +#216#31'@'#11'B'#130#208#4#216#31'@'#235#149'\'#249#157'w'#247#214'?='#205 + +#162#14#146#132#152#4#184'7'#0#145'@gMu'#174#189'%'#229#194#162#1#152#252#0 + +'h'#1#146'-X8'#6#203#154'@a'#18#248#197#228'#N1'#209'Y'#237'='#248#255#254 + +#205'?R?'#248'w'#255'DMw'#30#158#234'y'#4#245#166'jn\S+'#175'}'#130'$'#252 + +#159'R7'#190#244#231'T}'#253#202'i_'#158#202#200#203#210'_Rz='#227#236#147'r' + +'^'#6#191#163#246'['#240#139#202#15#224#179'z'#207'*'#191#246#1#204'v'#31#168 + +#193#195#183#233'usn'#238#193#239'Cyo'#154#229'W'#187'{?'#236#196#147#190#168 + +'l'#214#238#23#167#223'.'#236'~ZX'#245#135#211#143'0'#240#152#222#187'O'#166 + +#241#4#9'?'#199#233#245#175#142#211'x'#202'}'#152#2#180#6#9'X'#127#0#217'?' + +#151#29'S'#0#26#1#252#1#221'$'#243#187#239#246#215'?'#179#200#163#134'o'#204 + +#1#216#247'$'#233#153#4#174'|'#156'H'#160'nA'#207'f'#128'h'#4'L'#2#145'&'#1 + +#21#233#168#2#147'@h'#8'@r'#5'|'#129';'#214'2)'#225'Y'#159#166'|'#240#222#219 + +#234#143#255#249#223'W'#15#254#247#31#208'C99'#190'/'#162'k'#17#183'{'#170'u' + +#245'e'#181#250#209#207#168'+'#159#251#170#186#250#249#175#210#245#175#159 + +#246'%x'#250'03L'#219#130#30'c'#231#23#253#251#140#167#223'H~V'#225#231'I'#1 + +'x'#6#255#156#155'{'#178'&@'#255#155#238#222'U'#163'G'#210#206'{Q'#168#253' ' + +#146#203#173'}L'#231#181#131'/q'#156'~H'#245'E'#188#127#15#133'='#180#141'F' + +#144'P'#251#225#244'{D'#207#245#222'I'#218#253#238'8'#141'G|'#169'?@f'#22'b' + +#167#160#210'Z'#0#182#215#233#1#236#204#147'`'#229#189#254#250#167#19#21#198 + +'<w`'#16'J'#235#240'HE'#173#158#234'^}'#147#204#129#166#206#12't4'#128#192 + +#201#22#132#230#224#217#254#130'E'#132#128#9'AL'#129'R'#171'1[S'#228'-'#255#5 + +#238'8'#229#26#158'{'#255#235'?'#171';'#223#254#15'j'#239'G'#255'W'#141#31 + +#222'V'#139#241#224#169#14#11#238#197#16#197','#201#163'v'#151'C'#172#245#181 + +#203#170'y'#233#6#131#189's'#253'#'#170#251#202'Gy'#251#204#141#167'\'#255 + +#220#252#205#197#225'o[w)V'#249'mr'#15'@+'#9'>'#28#234'#p'#231'R'#217#151'I' + +#184#15#142'>'#14#251#137#31'`'#188#253#30'-'#239'jR'#224'i'#188'S'#142#22#0 + +#252#27#205#193#237#245#198#240#145#11'~z'#182#140#221#15#240'o'#153'J?z'#230 + +#239#201'4'#223#232#240#131#6' '#199#150#237#247','#151#242#196#190#215#245#7 + +#208#197'h'#18#248'{'#164#10'm'#18#192#175'Hx'#144#179#4'iY'#3#9#204#210'x' + +#237#246#254#250'''3'#207#15'Yr#<'#24'j'#18#8#27'm'#213'!'#18#136#154#29#2'~' + +'h'#181#0#228#8'x'#236#20',H'#128#181#129'J'#152#208#212#17#24#18'`'#231' t' + +#148#220#153#144#164'`'#132#234#147#246#244'+y'#10#4'1'#219'{'#172#230#253#29 + +'5'#31#236#210'zO-'#134#251'\9'#217'}'#249#13#213#185#249#250#217#149#224'G' + +#189#142'K'#239'C'#17#222's[u'#219#16#159#11#254#170#212#151#220#254'L'#154 + +'z'#148#9'@K'#255#209#214#143#213'd'#239#30#189'n'#206#145#1'~'#159#228#248 + +#175#214'F'#15#174#180#251'w'#243#2#252#200#244#131#221#15#240#195#238#127',' + +'!'#191'{R'#223#15#27'n{:'#157#14#136#0#160#194'%''e'#247#31#245'r'#31#251'w' + +'W'#243#3#200#28'@3'#209'Md'#10'*'#237#16#196#26'$'#176'J m'#141#23#181#205 + +#187#253#213#183#136#4#2'm'#207#11#9'p'#4#160#201#230'@D'#234#170#213#4#156 + +#181#23#11#17#24'M'#128'L'#2#21'j'#191#130'2s'#17#26's'#192'M'#30'2UEn'#163 + +#145'3l'#26'|'#232'F^'#10#226#8#224'M'#21#159#210#158'}'#137#239#187'i'#189 + +#218#230#215#128#207#13#248#173#228'_0'#200#217#241'7'#211#161#190#225#163 + ,#183#213#172#255'H'#146'|'#140#218#175'k'#251#187#209'd'#235'zw'#239'=m]d' + +#153'x'#252#145#236#3#240'#'#151#127'['#233'y'#253#24#252#216'F'#178#207'I' + +#198#251#15#27#167#253'('#151'R'#133'I'#11'h#'#25#136#180#128'K'#208#4'h'#31 + +'Z'#0'H'#0#164#176'B@lM'#147'x'#237'N'#127#245#19#169#23#198#218#179'/>'#1 + +#174#12#172#17#9'|L'#197#157'uM'#10#198#15'`'#192'/m'#198'=!'#2'_z'#10'('#19 + +'%'#16#231#160'2'#230#128#239#21#4'`'#174#214#139'>]'#241'y'#25'.'#234']sGl|' + +'O'#202'wm'#3#143#170#179#207'8'#250#0'f'#212#243'/'#28#240#27#231#31#175#167 + +'j'#240#240#7#164'ImK'#140'?'#209#196#145'j'#240#175#213'F'#247'/'#183#145 + +#226'k'#193#159'I'#154'/g'#250')]'#226#251'H'#230#245#131#228#199#164#30#143 + +'1'#171#207'|>'#31#31'w'#170#239'Q.'#227'i'#223'F'#207'8'#5#209'@'#4']'#132 + +#208'P'#212#9#15'"O'#224#138#201#20#4#9'$y'#220#189#189#191#250#214'BE'#245 + +#18#9#136's'#176's'#249#13#21'w/'#177'/'#192'3'#181#2#177#244#16#176'&A'#164 + +#253#2'b'#14#168#208'/'#146#134#140'i '#13'F'#172'F`'#175#152#163#10#156#159 + +':'#163#23'f'#148#146'xl'#171'.}'#140#193#159'i'#201'oc'#251#169'n'#226#1#240 + +'+'''#204#151'K'#190'>'#171#244'3'#241#250#211#177'\B'#127#201't'#162#6#247 + +#191#175#18#228#246'''s'#157#21#232#128#127#163'1'#184#189#217#28'>'#210#138 + +'F'#150';'#146#31'*={'#252#149#238#237#7#240#223#151'p'#223'cH'#254#197'b1' + +#186'v'#237#26#156#131''''#234#244#171#142#179#240#236'Z'#18#232't:1'#177'b' + +#157'.T'#27#149#131#232'$'#4#2'0$ '#173#198'A'#2#205'L'#133#237#219#253#181 + +'7gY'#220#214'}'#0#196#174#143't)qk'#243#150'j'#172'^'#215#146#222#1#189#217 + +'f-'#160#166#147#139'8Dh'#219#142#7#133's0'#240#10#141#192'I rs'#137#205'f~' + +#224'''='#225#10'?'#211#173'>'#175']'#130#142#248'h='#245#250','#191#178#185 + +#211#151#223#5#191#246#238#235#248#190'J'#181#202#175#4#176#156#155#159':' + +#246#254'\'#131'?'#183'j'#191'd'#242#17#25'$'#147#161#234#223#255#158'Ji]H~' + +#157#225#167#210','#191#220#217#255#201'j<'#217#21#193'o'#193#175#138#190'~' + +#166#190#255#1#164#191#132#254#30#163#190#159#198#168#209'h'#204#143';'#207 + +#255'9'#222#165#227'?'#15'S:'#140#162#161#241'x'#140#134#162#29#169#25#184'd' + +'4'#1#165#251#7#160#177'H'#143#174'X'#147#16#218#188#211'_'#251#216'8'#173 + +#173'x2'#239#160#206#254#211#18#191#190'rU'#181#214'oiM'#192#250#1'B'#157',$' + +'d'#224'I%'#161#138#138#190#2#166#152'Hq'#132#192#244#23#240#203#145#2#167 + +#243'P.'#161#195#234#21#245#202#127#158'q'#228'O'#220'='#179#195'{'#234#129 + +#167#255#238'|'#201#207#21#144#27#129#175#14#11#237'9'#133'<*-b'#251#197#162 + +#129#207#210#127#190#144'p'#223'B'#180#129#5#255'o>'#216'a'#155'?'#157#142'u' + +''''#31'Z'#148#128#223'#'#241#127#181#187#247#163'n8'#27','#3#191#210#225'>' + +#128#31'-'#188#31#144'&'#203#14'?'#228#248'#'#220'G'#175#27#161#200'G'#157 + +#146#211#239#131#222#157'c='#23#248#3'~'#252#227#31#251'h%F'#154'@'#195#228#8 + +'`V!'#164#12#131#8'h'#141#164'!4'#26#237#210'Uk'#17#240#234#247#6'k'#175#15 + +#23#245#13'c'#14'0'#17'DP'#241#145':'#220'Sm2'#9'PG'#224'K?'#193#2#252#142'6' + +#192#254#0'c'#14#232'm'#155'8Ti9f'#195#134#158#201'(tr'#207#171#253#7#204#173 + +'=KW'#250','#143#202#245#202#157#166#156'%'#208#27#162#200#164'eW'#150#29'H' + +#231'Ui'#1'z'#227#237'O%'#212#151#207#231#142#195'O|'#0'D'#2#147#221#219'j' + +#178#253#158#222'w$?>'#223#167#15#184#222#219'{'#167#21#204#199'K'#192'ob' + +#253'h'#234#137'4_+'#249#233#153'}L'#160#223#165#231#23'5'#0' '#137'3'#1'~' + +#231'2'#159#153#193'$'#240#189#239'}/@x'#16'$@Z@W'#26#137#184#154#0'"'#3#235 + +'('#28#162#27#129#18#227#248#254#160'wko'#222#188#234'['#245']k'#2#200#26#244 + +#227#26#153#4#31'Q'#181#206#166#150#248#174#244#23#223#128#206#17'0'#249#2 + +#129#205#30'TN'#6#161#237'@'#236#251#5#1'8m'#201#221#26#3#235#164#170#22#27 + +#157#181'+~F'#134'Wr'#228#185#155#249#1#240'k'''#159'H'#251#180#144#250#165 + +'t^'#168#251#137#238#215#175#9'@<'#254#226#237'7'#26#0#19#0#166#233#154'N' + +#213#136#164#254'|'#180#171#227#251'IR'#2#127#160#146#217'K'#221#221#31#214 + +#131#197'T'#192'o'#28'~F'#242's'#129#15'r'#252#209#220#3#146#31#26#0#212#254 + +'('#138'v'#7#131#193#136#180#218#19'M'#243'='#210'u?'#237#19'XvN&<'#184#181 + +#181#21#211'Ek'#208#5'4$'#128'lA'#180#24#135')'#192'$@'#251']'#248#4#232'X' + +#237#209#168#243#210#246#180'}SO8bH@2'#0#137#8#234#189#171#170#185#241'*'#131 + +#222's'#181#129'H'#147#129'''-'#199#149'q'#14'F'#21'm'#192'u'#16#154'z'#2'&' + +#3'eg)'#202#29'2p'#181#255#220'!'#133#15'f'#26#188'(C'#210'u\'#137#159#23#181 + +#249#202'sT}'#199#201'W'#168#249'"'#245#197#214#231'2'#222#180'p'#242'1'#232 + +#165#148#215'z'#252#141#234'/'#170'>'#219#254#201'B-'#250#187'j'#184#245#14 + +#29#27#219#200#128#174#229#151#137';'#189#249#228#165#238#222#15#185#170#143 + +#235#8'l'#168#143'S|'#149'd'#249')'#237#224'C'#184#15'R'#255#1#212'~'#178#249 + +'w'#233#249#29'6'#155#205')i'#183#201'iz'#252#151#141#179#250#4#150'H'#160'A' + +'c2'#153#160#145#8#155#3'B'#2' '#3#209#4'T'#151#128#136#190#131#181#253'Yc' + +#243#225#168#251'Z'#166#194'PKn'#169'!'#8'C1'#9#186#164#13#188#193#213#132#0 + +'>'#28#129#158'D'#4#220#16#161#155'9'#168#156'Z'#2#229#18#129#231#23#179#22 + ,#251#198'I'#232'j'#3'E'#30'a'#238#148#25'z'#213#146#195#3#153'mg'#245#182#188 + +#223#187#249#4#127#134#233#191#167#156#198#28'|'#188#2'zP'#168#3'~'#211#173 + +#135'U}'#9#239')'#167'O?'#188#245#249#28#251#11'+'#249's)'#238#201'%'#207'?' + +''''#240#143'wn'#171')-'#153'y]*R_f'#238'iG'#147#237#171#173#253#219#129#151 + +'&:'#151'(3e'#189#240#246'3'#248#149#206#242'CO?'#246#248#195#230'G'#168#15 + +#224#167'eH'#166#236#20#177#254#179#6'~}'#205#207#238#176#133'C'#4#254#136'.' + +'b'#147'L'#130'.H@:'#10']6'#225'A%$'#128#16'!H`'#158#133#237#187#131#222#235 + +#179#172#214#230'y'#3#140'o'#192#132#10#163#186'j_zM'#197#221#205#2#248'f1'#4 + +#16'W'#142#7#186#211#144#178#243#19#6'em@'#26#143#148'#'#6#158#149#244#172#29 + +','#137#30#152#249#11#142'zG'#206#204#147#227#222#168#167#189' ?'#252#128'i' + +#197#229'y'#14#248'3'''#150#175#28#27#223'Q'#247'y'#31#182#190#27#222'K'#11 + +#137#159#27#208''':'#181'7/'#145'@'#194#245#19'#'#146#250#243#225#142'h'#11 + +':'#188#167#138#30'~'#217#165'F'#255#246'Zc'#244#152'S{%'#212#167'tz/O'#223 + +'-s'#248'A'#237'7'#137'>'#15#207#19#248#143't'#239'N'#251#252#12#9#244#251 + +#253#184#213'j5'#232#226#162#197#248#154#132#4#225#16#188#12#173'@i'#18#232 + +'1'#9'('#175#158#7'~'#252'p'#208#189#185'?o]-'#146'|t'#184#15'&'#129'oL'#130 + +#245'W'#8#236#177#205#9#240'L'#5'a'#172'5'#6#171#9'p'#10'qPT'#21#210':'#15 + +#220')'#202#140'V'#224#21'D'#160#138#237'"JP'#172'K%'#200#206'f^9'#236'='#235 + +#173'z'#158'w'#245#153#31#215#188#152'>'#219'='#149#188#188#145';/'#178#245 + +#249'n'#18#143#177#243'MG^'#145#250'*u$'#191'c'#235#27'/?'#219#237#12#244'E' + +#161#254#207#11'R'#192#255#23#240#242'?'#254'!i'#1#19#177#247'u|'#223'|n'#228 + +'/&'#215#218'{?i'#132's'#174#229#23'G'#4#236'}'#147#222';'#145'P'#31#171#253 + +'J'#194'}'#178'F'#169#239#222'y'#0#127#233#254#156#209#193#231'W%'#1'd'#12'"' + +'Y'#136'.'#178'!'#1#152#5#151'0'#247#128#210'y'#2'm'#186#212'u'#146#184#241 + +'p'#222'X{0^'#185#149#145#236#215'@-'#155#4'H!'#6#9#196#157#13#201#7#144#136 + +#128#1#191')$'#10'+$ '#11#147#138'h'#6#156'N,'#145#130'\'#162#6'V'#27'x'#26 + +#17'8'#221#137'rG;'#240#202'^'#196''''#220#177#147#184#149#249#225#135'+'#167 + +'i'#140'{'#175#244'6'#167'<'#23#0'WO'#0'~^'#150#248#202#22#239'8N>c'#239#187 + +'v'#191#149#252#139#18#240'Y'#19#152'N'#213'd'#251#167'j6'#220'b'#130'@'#179 + +#15'+'#241'3=__'''#154'<'#190#210#234#223'!'#149'?'#205'm'#147'@]'#210#235'd' + +#248#245#165#178#15#222#254'G'#146#215#255'H4'#129'}8'#252'666'#206'<'#248 + +#237#253'9'#227#195#146#128#18#159#128#146'2b"'#130#21'h'#2#146'%h'#178#5'9Y' + +#136'$r'#155#192#211#160';'#23'''Y'#212#184';'#236#189'6Kk'#29'S'#0'd'#27#140 + +#8#184#163#214#26#19'APo'#21#17#1#167#138#208's'#251#10'<'#137#8#220#148'b' + +#153#194#220#134#14#205#196'%'#165')'#204#202'k7'#132'h'#230'4'#176#135#14 + +#132#20#143'n:<'#151'q'#152'*o'#156'v'#246#144#145#236#230#127#249#146#216 + +#189'~'#157#14#227'I'#230#158'!'#2'k'#227'/Q'#247'S'#145#248#2'|'#181#208#149 + +'|J'#236'w'#215#222'7'#206'?E'#251#147#254'=5'#221#189#173#19#127#210'%*?}' + +#209#229#198#224#189#149#198'h'#199#203'MI'#143#14#243')'#1'?'#173#199#180 + +#223#151#154'~4k'#132#196'GE'#31#182#183'I('#161#145'''{'#251#201'\=s'#14#191 + +'e'#227'<'#16#128'=OC'#2#251#251#251#17']'#228':]x'#174#29#136#162'h'#157#246 + +'a'#6'\'#18''''#225#134#212#14'th'#27'}'#4'b'#210#0#162'G'#195#206'K{U'#147 + +' '#212#201'C'#138#171#11'#U'#235']S'#245#181#27#156'M'#200#14'@'#199#4#0#1 + +'(''Dh'#136#192#148#24'+'#153#181'X'#249#229#198'#'#182#21'Y%'#179'P'#231#15 + +'-'''#3#207#209#255#139#222#4#166#151#161'{UN'#136#4#170#143#176#19#182'+m' + +#229#5'Y'#149'CxN'#165#158#27#198'3N='''#150'oA'#159#154'm'#0'>#b'#0#160'u' + +#17#143'Z'#20#13';'#173#199'?IJ>'#0#132#0#147#209#158#154#236#252'D-&'#131'B' + +#213#135#169#128#207'pU'#254#238#238'O'#234'^2'#245't'#229'@'#213#211'?'#147 + +#22#222#168#234#219'q'#193#15'O'#127#24#134#232#235#223'_,'#22#227#25#141#243 + +#2'~'#140#243'B'#0#246'\'#221'<'#1'8'#252#232#194#183#232'p'#143'.'#254#186 + +'8'#7'A'#4#156','#132'V'#227'$'#129';$u'#27#180'_#'#240'E'#131'i}'#237#193 + +#164#247'j'#150#235#249#7#180#147'0`'#21#222#244#16#132'Y'#208'X{'#133#139 + +#138#188#208#137#6#200#220#3#134#8'4q'#4#162#29#136'&`{'#13'8]'#137#131#138 + +#163'P'#8#161'hF"'#19#152#28'H76'#161#195#162','#185#240#15'T='#3'G'#200'1' + +#248#160'%'#203'y^yi'#25#240'z'#229'4'#218'TE|'#159'%'#189#153'l'#195#190#230 + +#160#154#207#246'~'#154#149#218'r+'#150#250#153#6#173#0'_'#137'='#175#164#131 + +#143'2'#4#144'h'#239#127':''u'#127#231']5'#239'?'#210#173#186'L'#26'p'#146#10 + +#209'h'#149#31#149'|'#151'['#253#187'P'#249'9'#188#143#254'}'#160'!m'#239#219 + +#24#191#1#191#210'e'#189#15'e'#198#222#199'R'#207'? '#1'4>K'#25'~G'#29#231 + +#137#0#236'9'#155#180'a'#218#142#26#141'F'#13#17#2#164#7#27#231#160'8'#5'/' + +#217#218#1#29'&'#132's'#176#6#147' Sa'#252'h'#220'~'#169'?onz@'#166#137#20 + +#216'f!Z'#226#195',h'#192', B'#176'R'#223#1#188'Bd '#22'B'#16'M@9'#25#132#214 + +'I'#24'>A+8'#204'GP'#154#242#188#186'v:'#26'['#13#193#161#130#165#190#130'CB' + +#143'O'#200#187#183#160'.%'#224#23#26'H.'#234'})Q'#199'%'#0#215#147'/'#158'}' + ,#163#226#219'p'#158'q'#240'Y'#208#167'b'#231';'#158'}l'#11#192#181#202#175 + +#215':'#175#223'8'#2'%vO'#235#217#222'}5'#222#131#186'?'#211#199#229'3y'#157 + +#167'"'#245#147#201#149#230#254#237'f<'#27'z'#26#247'8'#15#146#250'%{'#223'&' + +#248#208#178'C'#210#254'1'#9#153'G'#210#213'g'#155#128#191'K'#160#31#160#149 + +#23#13#152#8#231#10#252'K'#158#138's3,'#9#208#197#15'k4'#200#12'h"B'#16#4#193 + +#170#227#23#128'F'#0#18'X'#5'A B &A'#148#19#196''''#139#176#253'p'#178#242 + +#202','#141'ZE'#235#240#162'('#200#147'9'#10'k'#221'+'#170#182'rM'#5'h'#162 + +#17#154'y'#8#3#199#28'pM'#3#9#17#134'RK`'#10#140'l'#14'A Z'#129#201'$t'#218 + +#146'U'#137#160'j*'#148#202#146'+'#21#137#21'G'#162';'#242''''#146'A'#165#216 + +'f'#217'c'#235'Jw'#222#168#172'e;7'#137'<'#153#27#190'3'#137'<'#142#164'wc' + +#249#2'|'#29#203'/'#192#175#137#192#9#241#217't^'#13'r'#237#3'H'#10''' -'#139 + +#225#14#219#249#9#171#251#186'I'#167#146'L>'#179#246#232#207'j}t'#127#189'1x' + +#228#177#180#207'3'#147#214#171'$'#190'O'#203'\j'#249#135#226#233#135's'#15 + +#210#30#249#252'['#178#191'O'#207#220#160#223#239'O'#187#221#238#156#8' =o' + +#224#175'>'#9#231'm'#148'J'#137'I'#19#136'%u'#152#157#131't'#140#181#1#144#0 + +#250#11#210'z'#141#253#2#202'k#}'#152#182'czDc rw'#218#186#180'=m_'#207'H' + +#164#235#226#31#237'$'#132'fP'#168#249#145#170#181'/'#169#6#17#129#31'7'#180 + +#244'7j'#191'k'#14#24#127'@'#224#164#17#187#166#129#201'!p'#29#133#198'<'#176 + +#4#224'W'#18#139#180'G'#192#246'.'#180'='#11#141'iP'#152#3'n'#194'Q'#217';' + +#239#29'XU"s'#202'Az'#217#181#144#187#161'='#137#215#231'y'#197#214#151'B'#29 + +#163#226'gy'#145#167'oSu'#139')'#183'\'#201'_H'#253#20'M5'#197'VO-'#9#184'a' + +#190#220#170#251#198'!H'#18#127#184#173#166'{wU:'#27#22'f'#129#11'~'#241')' + +#180#162#217'.I'#253';'#152#156#211'C/`}n'#172#242'+'#221#187#207#228#244#143 + +#140#167#159#182#183#197#219#191'Ej'#254'6'#9#24'h'#2'}'#147#215#239#244#241 + +'3'#192'?7'#224'w'#30#135's;,'#9#16#1#4#8#19#18#27#195'9'#216#154#205'f=h'#3 + +#244#127#244#26'D'#171'1h'#2#240#11#160'r'#144#211#135#17'% '#192'D'#244#17 + +'A'#146#249#241#163'I'#247#230'`'#214'X'#247'l'#241'O'#1'^?0 '#142#184#166#0 + +#206'B'#244#211'3'#166#0#167#13'['#208#23#161'A'#27'!'#136#180#244#207#131 + +#224'@wb'#235'#p*'#15#11'"P:'#164'h'#211#139#165']'#153'*L'#4#151#24#150'^"' + +#175'r'#197#170#26#192'!'#14#190#18#15#184#245#246#216#204#242#146#189'o5'#0 + +'7W'#223#128#221'z'#244#141#202'/'#246'~'#166#167#219'V'#226#228#179#128#183 + +#29'{'#202#224#183#197'='#236#253'_'#168#217'`K'#205#246#239#17#240#199#146 + +#16#148'X'#147#1#251'J:'#246'D^2'#187#212#26#220'n'#215#166'}'#248#28'<'#143 + +'U~V'#252#233#146#177#163'Oz'#247'Me'#178'Nk'#239'C'#237#151#153'{9'#190#15 + +#149#159#20#206'1b'#252#245'z'#29#164'a'#234#249#237'U:O'#227#188#19#128#249 + +#13'H'#24#194#154'#'#4'p'#14#18#1'4E'#27'X5'#190#1'!'#1'6'#9'h'#191#7#191#0 + +'m'#195'A'#8'm'#128#222#231#251#163'$'#238'>'#28'uo.'#178#168#233#154#5#202 + +'I+V'#226''''#136#219#27#170#222#187#174#130'F'#235#160#212'7'#170#191'C'#4 + +#134'L'#148'K'#2#2'z'#229'U'#157#133#14')x'#166#10'Q9~'#130'J7cq$'#30#152#241 + +#232#176#154#3'[m'#231#188#196'm'#180'a6'#189'B+'#240#158#2'zW'#213#247'*' + +#222'|'#29#215#207#172'Df'#7'`R'#168#251#158#1'}'#226'H~'#163#13'd'#134#8'2' + +#142#223#207#6#143#24#248#217'bb'#237'~'#227#216#203'\u'#159#132#252'J}'#252 + +'p'#179'9x'#224#209#142#199#165#130#224#29#218'f%'#198':'#250'f'#210#187#207 + +'t'#238#133#167#223#130#31#19'v'#160#137#7#254#143#254'}'#163#209'h^'#241#244 + +'+u'#14#193#127#200#147'q.'#135#141#16#160#156#248#214#173'['#225#214#214'V' + +#141#14#213#137#173#17'*'#236#145#250#134'b'#162'u''u'#24#251#200'#hC'#27#160 + +#237#26#251#6'</'#204'r'#143#204#130#246#229#221'Y'#243'J'#154#135#145'1'#11 + +#236':'#8#172#175#0'N'#191#184#181#166#234'+D'#4#245'N'#17#1'p{'#10#28#0#190 + +#16#131#235#24'tk'#11'l'#152'R'#230'3t'#29#134'Nv!k'#7'jIU'#162'\'#17#175#148 + +'\T'#190#213#182#143'A'#245'B'#26#233'_r'#240')I'#218#145'}3}'#182#19#194#179 + +#224#183#251#6#240'N"O'#213#203'/'#241'}'#227#236'c'#144#27#147'@r'#251#141 + +'6'#144'%s'#246#232'O'#25#248'3'#171#254'g'#198#163#239'F'#17'h'#187'I'#234 + +#254#229'F'#255'^'#28#192'3O'#146#158#5'>'#199#245'3'#201#231#183'R'#159#22 + +#19#226'c'#149#31#160#199#2#149'_'#8#1#29'|'#198#244#182')'#217#253' '#140 + +#132#180#206#236'<'#132#249#142#4#156#23'h'#176's'#240#219#223#254'6'#251#5 + +#232#166'E'#4#234':'#28#132'259'#155#4'XD'#27'0$'#208#165#183#146'>'#175#26#4 + +#167#24'f'#1#129'='#160#199'%'#220#157#183'6'#247'&'#173#203#137#10#226#3'D' + +#224#23#246'>4'#130#176#209'!'#173'`'#147#8'a]'#249'a,m'#198#140#3#240'0'#167 + +#224'!'#5'F'#146'3'#224#149'|'#3#166#23'A1'#169#137'%'#2#153#224#196'LuV'#10 + +#18#10'7'#148#156#132#14#3'xF'#210'Wd'#153#145#246#7#28'{N'#252#222#149#252 + +#182'B'#207#237#200'c'#192'/'#132#160'\'#167#159#149#242#142#211#207#233#224 + +#131#255'-'#166#251'j1'#220#162'e'#155'I w'#205#128','#147#150'_'#236#220#195 + +'~'#222#138'g'#187#27#141#193#131'Z'#184#152#150#212'}'#199#214#151#182']' + +#166'c/l'#249'}i'#226#193#158'~Z?Fl'#159#164#252'>='''#3'2/'#199#244','#205 + ,'{'#189#30#192#127'n'#237#253#165#128'9'#237#19'8'#166#223'T2'#9'h N'#211'di' + +'O'#128#167#155'j'#137'@'#204#3#236#19#9#168#14#1#174'A'#251'u:'#30#25#179 + +#128'@'#21#236#205'Z'#27#187#227#230#229#133#10#235#218'F'#247#203#211#141#17 + +#1'('#223#183'ZA'#173#177#170'""'#131#176#185#162#163#4#230#181#142'3'#208'H' + +'~'#255'0-'#192#152#8'&'#147#208#248#7#248#23'V2'#12#221#28#130#220#137#12#8 + +#27#152#196#220#131#209#130'Jz'#174#167#172'j/'#255'V'#226#245'+Iyc'#227#27 + +'{'#223'4'#227#176'Z'#128#1#186#172#165#192#166't'#220'M'#237'u'#215'('#203 + +#157#13#31'3'#240'S'#132#242'2'']W'#166#220#206'e'#209#192'O'#243'vm'#182#189 + +#217#24'>'#140'|H|'#28#23#191'>'#171#251#220'%'#208#205#232#227#240#30#242 + +#249'i'#189'/'#237#187#182#205'"'#206'?'#28#199'k'#166'F'#229''''#205'2;'#207 + +#246#254'a`y'#17'G'#201'$@'#168#176#213'j'#197#2'lT'#12'v'#197#25#184'J'#140 + +#143#232#0#22#248#5'D'#27'P-!'#2#152#5'a'#206'd'#128#174#225#190#191'7k'#174 + +#237#142'[W'#230'y'#216#176#206':'#3'|'#207'H'#242#162#2#17#154'@'#212#222' ' + +#173'`C'#5#141#142#227#252#11#184#231#160#231'8'#2#139#168'@u'#10'3'#207#2 + +#222'F'#5#2#209#4'\'#237#192#151#144#161#149#252'U'#7'`%'#159#192#12#183#149 + +'6'#239'+'#235#28#176#213'zF'#229'O'#171#234'~&fA'#230'T'#234#21#206'?~'#189 + +#209#0'*a'#191#18#9','#230'j6'#218'f'#208''''#211'A'#161'!'#152'L@'#199'l0}' + +#0#16#210#235#198#147#199#27#4'|x'#246'M'#190#241#19#212'}k'#235#211#210#151 + +#238'='#12'~'#186#207#144#254#216#222#15#130#128#19'{h'#153#145#244'_ '#196 + +#247#162#168#252'K'#129#242#2#15'k'#18' J'#128#178'b'#186#185'54'#25'!R@'#227 + +'Q'#152#5'+ '#1#133'Y'#137'5'#9'@'#27#232#209#210#17#179#160#238'{~Lk'#16'A' + +#8'"'#240#9'}'#251#179#250#234#206#164'ue'#150'!'#135#192#128#177#144#218#5 + +#176#3'K'#10'a'#212'Tq'#7'Z'#193#154#10'j'#141'2'#184#157#210'bo'#9'!'#184#9 + +'C'#133#25#224#21'~'#2'''R`o'#173'u'#11'H'#180#192'M$'#146'W'#185'~'#128#210 + +#172#185#178'*'#194'}'#174#244#207#156#233#180#225#240#203'd'#178#205#138#183 + +#191'*'#245#179#188#18#1'H'#212'b'#178#175#230'P'#241#199#187#156#216#147';6' + +#189#251'~K '#244'}>1B'#183'6f'#224#7#200#15'6'#192#231#138#221'2'#240#149#6 + +'?'#128#143'N'#189'#'#201#229#223#23#240#195#185#135#25'y'#25#248#240#240'+M' + +#14#211'N'#167'3G'#3#143'7'#223'|'#243#133'R'#249#15#0#228#180'O'#224#132'~#' + +#155#4#208#6'h;Z]]'#141#160#13#200#140'D0'#11'z'#162#17#172#233#244'aM'#4#180 + +'&'#18'Pm'#186#235#220'l'#4'&'#129'o'#136' '#131'F'#224'y'#195#164#209#219 + +#153'4/O'#211'Z'#7#200#180#192'tH'#160'4'#231#128#152#0#232'I'#16#212'z*jt' + +#201#168#232#210'~'#173#210'[`I'#231'!G'#213'/'#171#254'x'#173#18#159#128#241 + +#234'{'#182#152#168#8#4'x'#149#181'*7'#222'PE'#218#190#178#13'8'#157#146#221 + +#204#13#241#21#234#190'w'#192#23'P'#201#233'7'#145#0#2'v2'#27#170#20'v'#253 + +#164'O'#219#131'"'#219#207'x'#239#197#137#231#153#254'~v;'#231'p^'#167'6'#217 + +'^'#175#143#182'|'#143'sy'#213'2'#224';'#237#185#173#147'O'#233#9':'#160#214 + +#239#25#240#3#248'$'#12#246#200#222#135#3#16'z'#254#132'l'#253#217#139#230 + +#232'{'#26'8>,'#227#128'6P'#171#213'bz^0G'#22#166'*G'#159#129#30#28#133#240 + +#17#28#212#6'T'#211#152#5#4#180#18#17'(.'#25#11#163#253'yc}0k'#172#205#210 + +#168'Y'#0#180#172#198#27#245'>'#247#202#196#0'B'#8#27'+*'#170'wT'#0'B'#128#19 + +#209'!'#0#27#14#148#162#162'jc'#210#146#9#224'4"'#177'w'#185#218#140'D'#194 + +'~n'#233'n)'#12#232'j'#2#198#9#232#168#251'n'#184'/'#207'+I?yA'#0'H'#206'I' + +#166'}'#150#244#201'tH'#255'J'#10''' '#155#20'i)4'#200'Q'#0'K&'#184#184'Y' + +#138#4#158#149#218'x'#167#25#209#135'i'#204#231#154#160#24#248#0'<'#235#252 + +'b'#231'/*'#234#254'H'#226#250#198#214'G'#136'oW'#188#251'}'#186#215'C'#168 + +#251#176#245'www'#23'd'#231'sl'#255#19#159#248'D'#254#162#131#223'yB>4'#163 + +#164#13#192'7'#176#178#178#18#17#25#208'f'#204'}'#6'h'#1#216#225'(\1'#218#128 + +#210#26#2#250#18'"'#164'h'#136#0'Y'#132'1a.'#160'g=dg!'#20'r'#210#11#166'i' + +#220#216#155'5'#215'G'#179#218'Z'#162#130#200'S'#5#25#20#146#220#169#7#240 + +#141#243#207#28#15#148#31'7Y;'#8#226#22'}B'#131#9#130#29#141#202'5'#3#156#181 + +#141#18#136#170#159#171#194'$'#200#171#209#1'U'#16#130#155#244#227'6'#222'4' + +#7#149#201#4#212'$'#192' u'#18'}'#12#232#177'dp'#188#211#146'/'#198'l'#199'c' + +#201#200'4/'#1#190#186'm'#181#137#204#250#20'`'#195'7'#195'y'#191'S'#159#236 + +'t'#163#233#158#199'I'#5'b'#143#232#188#131'Ll|l'#1#244#236#224's'#128#143 + +#134#29'#'#153#153#135#195'{'#198#222'7'#14'>'#216#249't'#175#199't'#159#167 + +'('#224'[b'#235';W'#224#197#29#31'6'#2#176#191#217'h'#3#155#155#155#254't:' + +#13'1S1'#252#3'0'#11#232#223'-'#178#7#225#12'D6'#225#138'8'#7'W'#196'y'#168 + +#157#132#158#215#164#199#177'A'#159'V;@'#4#30#224#166'Q:'#152#215#187#253'Yc' + +'}'#148#196'+'#185#22#233'V'#133'7)'#191'E'#135#225#162#243#176'K'#8#185#152 + +#0#164'x'#16#25#212#153#28#130#176#206')'#201'>'#214'd>'#148#10#139'J'#191 + +#244'`'#219#242'"G'#160#236#237#247'Jf@^$'#7#25'3'#1#248'K'#209'H'#19'@'#159 + +'p'#197']'#150#152#245#212#206#198#163#242#195#0#15#252'f%'#147#1#239'1'#251 + +#181'`1&'#21#127#167'GK'#232#193'!'#160'L'#237'0'#147'B'#154'iu'#223#177#241 + ,#171#18#223#216#249#3#1'?'#146'w'#0'~^'#144#194'K'#210#30#197';'#172#238'w' + +#187#221#217#214#214'V'#226'x'#248'_X['#255#176#241'a$'#128#210'o_f'#22#208 + +#225#26#217#130#28'6$'#2#128'F'#208's'#23#209#6#208'k'#160'm'#136#128#128#140 + +'(CL'#251#16#211'Rc'#204#157#238'|'#180'*O'#9#206#251#179#198#234'h^'#235'M' + +#211#168#157#230#162#25#24#199#158'r'#10#131'J'#132'`'#156#127#190'>ig'#187 + +#152#199#16']'#144#27'*'#8'"q:'#134'tX"'#17#158#164'"'#243#233#232#181'/Z' + +#134#150#190#137#216#218'R)'#151'9'#139's'#28#146#28#18#158'_'#207#225'7'#7 + +#196#182#196#183#240#1#184#0'W'#165#130' 1#8T'#167#242#154#191#24#213#163#249 + +#176'G*>Zn'#23#17#8#145#246'8'#3#2'>x'#18#206'}''o'#223#134#244#164'K'#207 + +#184#2'|'#187#208'=d'#224'#'#172#135'L>"'#2#246#238'#'#149#151#8' '#251#176 + +'I}w|'#152#9#192#140#3'f'#1'B'#127#244'p'#196#198'QH'#255'o'#9#216#187#244' ' + +#245#184#150#128#136'@4'#2'v'#20'*'#204'T'#164#188':4'#2')4'#10#173'V'#224'#' + +#29'E'#251#10#176#13#208#18#9#212#137#12#186#147'E'#220#157'$q'#139#224#16#26 + +'S'#161#232''''#232';'#205'D+'#246#190#152#2#150','#148#155'*l~'#150#252'@.' + +#30':$$'#232#216#255#182'EW'#169'1'#191#201#250'S'#165'\'#0'['#221#167#138 + +#148'`'#6'u'#166'T'#158'/'#7'<'#214#181' '#25#215#131#249#176#25#207#251#237 + +'h6'#242#149'8'#243'<61'#140'moA'#175't'#202'.'#24#133#213'|Y'#230#198#179'o' + +'T}'#19#211#151#5#158#254'>'#128'OD>'#140#162'h'#12#137'O'#199#167't'#127#23 + +'t<'#249'0'#170#251#203#198#5#1#20#195's'#205#130';w'#238#4#198'?'#128'9'#7 + +#232'!B'#205'@'#203#241#19#244'$'#140#200'k'#248#7#20'"'#6'9W'#26#214#161#209 + +#18#216#17'm@BQ'#24#248#30#200' '#160'c>'#180'^F'#165'/'#229'<'#244'wL$@'#132 + +#208#153'.'#162#206'4'#141#219#153#14#8#138#237'^T'#4#22'e'#194#170#168#10'T' + +#254'R'#240#219#191'U'#207#127#241#207'J'#246'_'#197#7'`Gn'#205#0#3'z'#183 + +#145'g'#225'G(^g'#0#31#251#201#164#22#206#135#173'h>h'#147#164#15#252'4)^c' + +#153#197#128'^Y'#21#255#160#180'/'#169#250#144#248'p'#224')'#1#187#164#242 + +#150#164#189#1'~'#171#213#154#141'F#'#246#236#147#169#151'~X'#213#253'e'#227 + +#130#0#202#227#128#127#192#16#1'=H'#28':'#164#127's2'#17#173'['#244#0#162#216 + +#168'+'#26#129#171#13#176#143#0#175#229#228'#'#223#135'Ya'#200' 8@'#6#128#174 + +#158'`'#132'a'#142'|<"'#132#246'x'#17#183#146'4'#168#207#179#176#190'H'#131 + +'Z'#170#160#219'k'#251#221'8'#245#140'K'#191'T'#13#184'$'#239#223#141#8#228 + +#203'~t5'#20'h'#134'['#251#239#185#210#221#253#191#6'n'#228#167#211#208#207 + +'fQ'#144#204#234#225'bL'#18'~'#16'.'#3#188#233#18'"'#182'C'#174#127#145#168 + +#248'E'#214#30'-'#11'g'#218'-'#171#234'+'#157#190#203#224#167'{'#224#18#192 + +#144'#'#179'I'#194#210#254#2#248'O'#31#23#4#176'|,%'#2'Z'#135#244'@'#177'F'#0 + +'`'#211#186'I*f'#139#236'J'#214#10#132#16#12#9'X"@'#19#18#218#6'y'#212'@'#6 + +' '#2#218#14#133#12'|'#218#151#194#2#206#177#169#16#130#178#128'N'#179' '#154 + +'fQm'#158#16')'#164'!'#19'C'#146#250#181'E'#22#214'r'#195#2'y'#17#247#207#221 + +#219#235#29#248'y2'#242#165#155#252#170'R'#11'0'#253'7'#240#178'E'#236#167 + +#179#200'O'#166'Q'#152#206#226' '#153#214'BZ'#252'd^'#10#31#28#4#188#212#222 + +#235#20']Ro'#178#220#168#19#185'JM'''#30'U'#150#246'('#207#157'J?>'#11'|'#168 + +#251't'#157#135#0#191#0#30'j>&'#221#132'I0E'#6#159#249#172'%'#192'_'#242'K?' + +#188#227#130#0#158'<'#150#18#1'|'#4#237'6'#201#183#217#140';'#20#19#1#160#203 + +#144#169'5h'#201#186'm'#246#141#198#0#243'@i'#13#2#4#2'2`"'#144#133#181#2'!' + +#4#175'B'#8#162#229#235'F'#0'E*'#191#201#243#247#2'"'#129'('#205#252' '#205 + +#149#159#229'~'#0#19'"'#203#184#160')'#160#181#143#207'&'#158#241#233'8'#142 + +#249'x'#15' '#233'{y'#202#139#162'Wy'#10#219#153'g'#142'y'#244#137'~'#158#6#4 + +'N'#218'N#?K0C'#14#127#181#237#249#167#247#204'1}Z'#185#20#11'j'#213#222#145 + +#240#12'B'#237#197#183'q{+'#237'Mi'#174#210#192#159'HW'#158#145'*'#128#15#169 + +#143#184'='#239#147#186#143#10#189'1'#173'!'#241#209#140'snl'#252'G'#143#30 + +'e'#23#192#127#250#184' '#128#163#13'K'#4#223#253#238'w=4%'#5#25#208#161#144 + +#164'N'#212'l6'#1'd'#214#10#232#129'lxz'#174'B'#180'('#3#240#153#4'h'#223#144 + +'C'#211#209#10'jB'#6#136#30'DJG'#16't'#20'A'#19#2#242#10#8#139#220#2'Dr'#130 + +#217'y^'#164#249#225#143#239#219'm'#140#220'sN'#250#224#207#240#14#252'#?' + +#176#225#202#240#138#242' '#249#0'z;/'#210#133'9'#25#152#147'!3'#237'P'#212 + +#21'x'#158#199#217#3'.'#224#233'X"'#221'vy'#150#29#167'@'#7#224#7#152'a'#223 + +#143' '#229#165' '#135#215't|'#4#208'C'#210#3#244#240#230'c!'#2'^'#192#171'O' + +#199#211#11#224'?'#219#184' '#128'g'#27'%"@'#212#224#210#165'K>I'#164#144#30 + +'D&'#3#180''''#4#168#145'a'#8'2'#192#2'2P'#152#202#220'Y'#132#8#140'i'#192 + +#230#1'k'#5#30';'#14']B`2'#160'c'#1'b'#8#162#29'0'#17#152#22' '#24'y'#145#223 + +#167'r'#183#11'`'#165#17#192#129'y'#9#151#254'J'#227#225'We'#253'_)'#227#164 + +#211'h'#215'L$'#130']'#25#231#157#150#242#136#238#231'6Vo='#248#6#240'R'#142 + +'k'#194'x'#0#255'd'#137#212#231'E'#18'vX'#189#23#21#127#14#208'c'#166']'#196 + +#241'WVV2x'#245#137#148#243#11#224'?'#219#184' '#128#247'7l^-'#194#135#244#16 + +'z'#198'<'#160#135#18#128'E'#143'B6'#17#224'/'#160'}'#16'B'#131#164#22#8#129 + ,'5'#0#172'}'#157'Q'#216#144'F'#165'L'#4'R'#177#200#239#177'D'#160#29#136#161 + +#199'A}'#144#129'v '#210#182#246#31'(]'#151' '#219#170#152'}'#132#165's'#209 + +'4'#200#156#244'!, '#160'Vy^v'#3'j'#183#164'W'#184#253#10'U>7'#157't'#217#129 + +''''#222'{'#165#165#188#5#190'S'#127#207'^|'#165#165'=/p'#236#161#209#6#253 + +'~'#168#243#19#172'%'#166'?!'#160'c'#31#196'0C=>'#169#247' '#142#132#142'!y' + +#7#128#207#156'8'#190#156#253#5#232#159'e\'#16#192#7#27#150#8#240#0#186'Z'#1 + +'I'#168'`gg'#7'R;'#132#137#0#243#20'd'#0'p'#139#218'_'#23#240'#'#215#192#128 + +#159'5'#2'G30D`4'#3#215'g`'#9'Ai'#13#1'$'#16'pI?'#231#28's'#242#156'''`'#247 + +#12#17'('#19';8D'#19'p'#192#207#0'/'#8'AK~'#165'{'#230#27#213'>'#173#0#222 + +#196#233#141#138'o'#156'y'#0#191#241#228'O'#5#220'v'#27#199#1'~'#243#127#168 + +#245'x}'#20'Es'#0#31#210#30#234'='#17'jz'#227#198#141#20#160#135#180'w'#242 + +#245#249'|O'#251'a8'#143#227#130#0#158#223'8'#160#21#12#6#3#175#211#233#4#180 + +#248#244#0#179#153#0'I'#14'S'#129#30#234#152#30'n'#164#31'C'#202#215#232'X' + +#141#142#25'S'#192#152#5#150#4#232#189#186'eY'#161#21#132'UBP'#154#20'x'#246 + +'$!'#4#156#147'/'#224#247'DK'#176#219#149#243#182#170#188'2'#210#221#181#225 + +'s''>/'#210']z'#234#25#208'/'#28#208'W'#213'|+'#245'E'#221#231#181#144#194#12 + +'*=IwH'#249#5'@O@_'#200'g&'#0'=T|c'#219#11#232#205'y'#186#235#139#241'>'#198 + +#5#1#28#207'Xj"'#208#218#7#25'@3'#160#7#157'M'#5','#4'nL'#127#142#233#206'"' + +#151#16'|'#157'?`4'#6#248#22'P'#189#24#11#17'D'#134#16'@*'#244#186'RD'#1'D@' + +#175'E'#196#194#19'2`"'#192#182#28#243#212#146'x`'#201#142'/'#0#159#27#21'_' + +#21'j=7'#212#196'B'#223#195#192#167#207#157#211#246#1#2#192'B'#191'k'#230#2 + +#158#200#14#210#29#239'Y@'#194#131'H'#232'xj$'#189#1'=]'#175#188#162#226#187 + +#235#139#241#1#199#5#1#28#239#176#215#215'8'#14#141'f'#0'3aoo'#143#9'!@i'#218 + +'`'#16#192'l'#160#151#134' '#3#172'A'#8' '#7':'#206'k'#128#158'^'#202'k9'#30 + +#154#227'J'#252#4#202'1'#13#180'I'#192'f'#128'oH'#0#231#148'!.X'#144'@q'#178 + +#5#208'sQ'#237'-'#240#177#166#247'X'#201#175#196#161''''#4#176'0'#251#134#0 + +'d!<'''#6#228#144#236#176#223#23'Fk'#0#224#137#3#210#181#181#181#148'~?'#212 + +#250#140'L'#168#28#160#191'p'#232#157#204#184' '#128#147#27#165'D\'#233'Y' + +#168'@'#8#208#12'n'#222#188#233'-#'#4#12#2'M '#160#14#5#212'au'#219#172#149 + +'&'#14#214#0'0'#0'v'#1'<k'#0#206#218#19#141'@r'#141'<'#211'T'#131'%?'#182#245 + +#219#249#205#25'}fN'#167'bl'#254'$/'#231#230''''#6#212#244'r6'#11'2]'#166#155 + +#212'j5k*'#0#240#147#201'$3'#128'o4'#26#185#145#242#142'M'#143#211#185#0#253 + +#9#141#11#2'8'#189'q$B'#216#216#216#128#198#128'jE'#159#192#227#19#160'|'#146 + +#164'L'#18'D'#16#216'f'#130#192#2#174#152#207#231#188'&'#172#225#0#131#29'=3' + +#176#157'qk'#252#220#163#247'yf'#187'tB'#4'~'#240#3'Im'#128#157'5'#1'l'#227 + +#24#246'IZ'#231'd'#186#0#199'<y&i*P'#217#193#17')'#22#218#207#232#251#179'V' + +#171#5'5>k6'#155#217't:'#205#232#156#243'e'#18'~'#9#224#171#219#23#227#152 + +#199#5#1#156#141'Q'#186#15#198'\'#192#182'1'#25#8'H'#30'H'#129'H'#192'#py' + +#134#24#8#148#30#200#129#128#232#25'r'#160'}'#143'@j'#23':'#206#128#199'6>' + +#19#219#4'V'#187#141#181#207#253'L'#148'"'#0#27#192#243'>}/o'#155#133#190'?' + +#7#208#137'Dr'#128#156#190'+'#235#247#251'9'#129#222#2#29#146#189#221'n'#231 + +#6#236#248#156#11#192#159#205'qA'#0'gsT'#239#139''''#192'Q.1`'#13'r'#184'u' + +#235#150'7'#28#14'-9'#224'8'#8#2'k'#179'O'#192#230'5'#8#3#235#245#245'u'#187 + +'m'#6#128#140'5Iy'#11'J'#2';o'#3#220'X?~'#252'8'#199'6@'#142#253'e@'#199#250 + +#16#176'/'#219#191#24#167'8.'#8#224'|'#141'e'#247#235#0'9`'#24#130'0'#3'D' + +#177#236#3#161'Y`]'#175#215#15#0#211#128#218#29#6#224#24#0'9'#214#135#0#253 + +#176'c'#23#227#12#141#11#2'x1'#198#179#220#199#163#190#246#168#224#189#0#249 + +'9'#30#23#4'p1.'#198#135'x'#252#127'p'#251'ut'#3#215#244'"'#0#0#0#0'IEND'#174 + +'B`'#130'('#0#0#0#128#0#0#0#0#1#0#0#1#0' '#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0 + +#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#1#0#0#0#1#0#0#0#2#128#128#128#2'UUU'#3'@@@'#4'333'#5'III'#7'@@@'#8 + +'999'#9'999'#9'MMM'#10'FFF'#11'FFF'#11'FFF'#11'MMM'#10'999'#9'@@@'#8'@@@'#8 + +'UUU'#6'333'#5'UUU'#3#128#128#128#2#0#0#0#2#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#1#0#0#0#1#128#128#128#2'UUU'#3'UUU'#6'@@@'#8'FFF'#11'III'#14'<<' + +'<'#17'III'#21'EEE'#26'DDD'#30'DDD"EEE%AAA''DDD)AAA+AAA+AAA+DDD)AAA''GGG$FFF' + +'!DDD'#30'==='#25'@@@'#20'@@@'#16';;;'#13'FFF'#11'@@@'#8'333'#5'UUU'#3#128 + +#128#128#2#0#0#0#1#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0 + +#2'UUU'#3'+++'#6'999'#9'NNN'#13'CCC'#19'BBB'#27'GGG$DDD-CCC5DDD<DDDDBBBMCCCT' + +'DDDZEEE]DDDaBBBdDDDfCCCgDDDfBBBdBBB`EEE]BBBYDDDSDDDKEEECAAA;AAA3AAA+DDD"GGG' + +#25'GGG'#18';;;'#13'@@@'#8'333'#5'UUU'#3#0#0#0#2#0#0#0#1#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#2'UUU'#3'UUU'#6'@' + +'@@'#12'GGG'#18'BBB'#27'CCC&BBB2DDD@EEENCCC\DDDiDDDtCCC~DDD'#136'DDD'#143'CC' + +'C'#149'DCC'#153'DCC'#155'EED'#158'DDC'#160'EED'#162'EED'#162'EDD'#161'DCC' + +#160'EDD'#157'CCC'#155'CCC'#152'CCC'#148'BBB'#142'CCC'#134'DDD|CCCrDDDfEEEYD' + +'DDKCCC=EEE0GGG$EEE'#26'<<<'#17'MMM'#10'UUU'#6'UUU'#3#0#0#0#1#0#0#0#1#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'+++'#6'FFF'#11'GGG'#18'FFF'#29'FFF,DDD<AAANC' + +'CC_DDDpCCC'#129'DDD'#142'EED'#154'DDC'#163'DDC'#171'DDC'#178'DDC'#183'EDB' + +#188'EDB'#190'EDB'#192'FFE'#192'FFE'#192'EED'#193'EED'#194'EED'#194'EED'#193 + +'EEB'#193'FEC'#192'FEC'#192'DDC'#190'DDC'#189'DDC'#187'DDC'#182'EED'#177'EDD' + +#169'DDD'#162'CCC'#152'CCC'#140'CCC~DDDmCCC\DDDKBBB:DDD)BBB'#27'@@@'#16'UUU' + +#9'333'#5#128#128#128#2#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'III'#7'DDD'#15'EEE'#26'DDD)EEE;DDDODDD' + +'fBBB{CCC'#141'DDC'#156'DDC'#168'DDC'#178'EDB'#187'EED'#192'FEC'#195'FFC'#198 + +'HFD'#200'HFD'#201'GGC'#202'HFC'#203'IGD'#203'IGD'#203'JHC'#203'IHD'#204'IHD' + +#204'IHD'#204'IHC'#204'IGD'#204'IGD'#203'IGD'#203'GEC'#203'GEC'#203'FFC'#202 + +'GFD'#201'FEC'#199'FFE'#196'EDB'#194'DDC'#190'EED'#185'EDD'#177'DDD'#166'DDD' + +#153'DDD'#139'DDDxDDDbDDDKFFF7CCC&CCC'#23';;;'#13'UUU'#6'UUU'#3#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'@@@'#8'@@@'#16'BBB'#31'BBB2BBB' + +'IBBBaCCCyDDD'#142'DDC'#160'DDC'#175'FEC'#186'FFE'#192'GFD'#197'HFD'#200'HFC' + +#202'IGD'#203'JID'#204'OF>'#211'SC6'#219'W@0'#227'[>+'#235']<('#238'^<'''#240 + +'_<%'#243'`<#'#245'a;"'#247'a:!'#248'a;"'#246'`<$'#245'_<%'#242'^='''#240'\=' + +')'#237'Z=,'#233'V@1'#225'RD8'#217'NG?'#210'JHD'#204'IHC'#204'HHD'#204'GEC' + +#203'FEC'#202'EED'#198'EED'#195'DDC'#190'DDC'#183'DDD'#172'DDD'#157'DDD'#138 + +'DDDtCCC\DDDDCCC.@@@'#28'DDD'#15'III'#7'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'@@' + +'@'#8'KKK'#17'HHH CCC5CCCPDDDlCCC'#134'DDC'#156'EED'#172'FEC'#185'GFD'#193'G' + +'FC'#198'HFC'#202'IGD'#203'PE;'#213'VA0'#227']<('#239'a;#'#246'd9'#30#254'g:' + +#29#255'g:'#30#255'i<'#30#255'j='#31#255'j>'#30#255'k>'#30#255'l?'#31#255'l@' + +#31#255'mA'#31#255'nA'#31#255'm@'#31#255'l@'#31#255'l?'#31#255'k>'#30#255'j>' + +#30#255'j='#31#255'i<'#30#255'g:'#30#255'f:'#29#255'd9'#31#252'`<#'#245'[=*' + +#236'UA3'#223'MF?'#210'IHC'#204'HFD'#204'FFC'#203'FFE'#200'DDC'#197'EED'#191 + +'DCC'#182'DDD'#170'CCC'#152'CCC'#129'DDDfDDDKDDD1FFF'#29'@@@'#16'III'#7'UUU' + +#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'II' + +'I'#7'@@@'#16'@@@ FFF7DDDRCCCoCCC'#140'DDC'#163'EED'#180'EED'#191'FFC'#198'I' + +'GD'#201'ME?'#208'UA2'#224'\<('#238'b9 '#250'f:'#29#255'h;'#30#255'j>'#30#255 + +'m@'#31#255'oB '#255'qD '#255'sF '#255'uH!'#255'|L#'#255#128'O$'#255#133'Q%' + +#255#136'S&'#255#139'V'''#255#143'X('#255#145'Y)'#255#142'W('#255#139'U''' + +#255#135'S&'#255#131'Q%'#255#128'O$'#255'yK"'#255'tG!'#255'rE '#255'pD '#255 + +'nA '#255'l@'#31#255'j='#31#255'g;'#30#255'e9'#29#255'a;!'#247'Z=+'#234'RB5' + +#221'JGC'#207'HFD'#204'FEC'#203'FFE'#200'EED'#196'DDC'#189'DDD'#177'CCC'#159 + +'DDD'#135'CCCjBBBMBBB2FFF'#29'III'#14'UUU'#6#128#128#128#2#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#2'333'#5';;;'#13'BBB'#27'AAA3BBBQDDDqDDD'#142'EED'#165 + +'EDB'#183'FEC'#194'HFD'#200'IFB'#205'SA3'#223'^;&'#242'e8'#29#255'g;'#30#255 + +'j>'#31#255'mA'#31#255'pD!'#255'tG!'#255'~M#'#255#141'W('#255#151']*'#255#160 + +'c-'#255#169'i0'#255#178'n1'#255#181'q2'#255#182's3'#255#183't3'#255#184't3' + +#255#184'v3'#255#185'v4'#255#186'w3'#255#185'v3'#255#184'u3'#255#184't3'#255 + +#183't3'#255#182'r3'#255#181'q2'#255#175'l1'#255#166'h/'#255#158'a,'#255#149 + ,'\*'#255#138'U('#255'zK"'#255'sF '#255'pC '#255'l@'#31#255'i='#31#255'g;'#30 + +#255'c8'#31#252'[<*'#237'RC8'#218'IGD'#205'HFD'#204'EED'#201'DDC'#198'EED' + +#191'DDD'#179'CCC'#161'DDD'#136'CCCkEEEJDDD-@@@'#24'FFF'#11'@@@'#4#0#0#0#1#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'UUU'#3'999'#9'FFF'#22'CCC*DDDGDDDiCCC'#138'EED'#165'FEC'#184'FEC'#194 + +'HHD'#200'QC9'#216'[<*'#237'c8'#31#253'g;'#30#255'j>'#31#255'nA '#255'sF!' + +#255'|M#'#255#141'W('#255#158'a,'#255#173'k1'#255#181'r3'#255#185'v4'#255#187 + +'y4'#255#189'{4'#255#191'~5'#255#193#129'5'#255#195#131'5'#255#196#132'6'#255 + +#197#134'6'#255#198#134'6'#255#199#136'6'#255#200#136'6'#255#200#137'6'#255 + +#199#136'6'#255#198#135'6'#255#198#134'6'#255#197#133'5'#255#196#132'6'#255 + +#195#131'5'#255#193#128'5'#255#191'~4'#255#188'z4'#255#186'x4'#255#184'u3' + +#255#181'q2'#255#168'i/'#255#153'_+'#255#137'T'''#255'yJ"'#255'rE '#255'm@' + +#31#255'i<'#31#255'f:'#30#255'b9!'#249'X>.'#232'MD>'#212'HFD'#204'EED'#202'E' + +'ED'#198'EED'#192'CCC'#180'CCC'#160'DDD'#132'DDDbCCCACCC&CCC'#19'@@@'#8'UUU' + +#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5 + +'III'#14'>>>!DDD<DDD^CCC'#129'EED'#158'DDC'#180'FEC'#194'IGD'#200'RB7'#219'^' + +'9%'#244'e8'#29#255'i<'#31#255'mA '#255'rE!'#255'|L#'#255#149'[+'#255#170'j1' + +#255#181'r3'#255#185'v4'#255#188'z4'#255#192#127'6'#255#196#132'6'#255#199 + +#136'6'#255#202#138'7'#255#204#142'7'#255#206#145'7'#255#209#147'8'#255#211 + +#150'8'#255#212#152'9'#255#213#152'9'#255#213#153'9'#255#214#154'9'#255#215 + +#155':'#255#215#155'9'#255#215#155':'#255#214#154'9'#255#213#153'9'#255#212 + +#152'9'#255#211#151'9'#255#210#149'9'#255#208#147'8'#255#206#143'8'#255#203 + +#141'8'#255#201#138'7'#255#198#135'7'#255#195#131'5'#255#191'~5'#255#188'y4' + +#255#184'u3'#255#180'q3'#255#165'f/'#255#142'W('#255'xJ"'#255'pD!'#255'l?'#31 + +#255'h;'#30#255'd7'#30#255'Z<)'#239'NC<'#214'HFD'#204'EED'#202'DDC'#198'EDD' + +#191'DDD'#176'DDD'#153'CCCzCCCXBBB6FFF'#29'@@@'#12'@@@'#4#0#0#0#1#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#1#128#128#128#2'@@@'#8'@@@'#20'FFF,AAANBBBtDCC'#149'D' + +'DC'#174'EED'#191'GEC'#199'R@5'#220'_9#'#245'e9'#30#255'i='#31#255'nB!'#255 + +'wI#'#255#142'W)'#255#165'f/'#255#181'q3'#255#186'x4'#255#191'~5'#255#195#131 + +'6'#255#199#136'7'#255#203#140'8'#255#207#145'9'#255#211#150'9'#255#214#154 + +':'#255#216#157':'#255#219#160';'#255#221#162';'#255#223#164';'#255#225#167 + +'<'#255#226#168'<'#255#226#169'='#255#227#170'<'#255#228#171'<'#255#228#171 + +'='#255#228#172'='#255#228#171'='#255#227#170'<'#255#227#169'<'#255#226#169 + +'='#255#226#168'<'#255#224#167';'#255#222#164';'#255#220#162';'#255#218#159 + +':'#255#216#157':'#255#213#154':'#255#210#149'9'#255#206#144'8'#255#202#139 + +'8'#255#198#134'7'#255#194#129'7'#255#189'|6'#255#184'v4'#255#178'n2'#255#159 + +'b.'#255#135'T'''#255'tF!'#255'mA '#255'h;'#31#255'd8'#30#255'\;('#240'OC;' + +#216'GGD'#204'EDD'#201'DDC'#197'DDD'#187'DDD'#170'DDD'#143'BBBlDDDGAAA''KKK' + +#17'UUU'#6#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'FFF'#11'BBB'#27'FFF7EEE]DDD' + +#132'DDC'#164'FEE'#186'GGD'#197'OA8'#216'_8#'#246'e9'#30#255'j= '#255'oB!' + +#255'zK$'#255#151'^,'#255#176'n4'#255#184'v5'#255#189'|6'#255#194#131'7'#255 + +#200#137'8'#255#205#144':'#255#210#149';'#255#214#154';'#255#217#158';'#255 + +#221#163'<'#255#225#167'='#255#227#171'='#255#229#173'='#255#231#175'>'#255 + +#232#177'>'#255#234#179'?'#255#236#181'>'#255#236#182'?'#255#237#183'?'#255 + ,#237#183'?'#255#238#183'@'#255#238#184'?'#255#238#185'?'#255#238#184'?'#255 + +#238#183'@'#255#237#182'?'#255#237#183'?'#255#236#182'?'#255#236#181'>'#255 + +#234#179'>'#255#232#176'>'#255#230#175'>'#255#229#172'='#255#227#169'='#255 + +#224#167'='#255#220#161'<'#255#217#157'<'#255#213#153';'#255#209#148':'#255 + +#204#142'9'#255#198#135'8'#255#193#129'7'#255#188'{6'#255#183't5'#255#171'k2' + +#255#142'W)'#255'tH"'#255'nA '#255'h<'#31#255'd7'#30#255'[:('#240'KD?'#211'G' + +'FD'#204'DDC'#201'EDD'#195'CCC'#182'CCC'#159'CCC}EEEUBBB2@@@'#24'999'#9'UUU' + +#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'333'#5'III'#14'BBB#EEECCCCkEEE'#145'DDC'#174'FFE'#192'KE@'#206'Z;)' + +#238'c8'#30#255'i<'#31#255'oB!'#255'|M%'#255#153'_-'#255#178'o4'#255#186'x6' + +#255#192#128'7'#255#198#135'9'#255#204#142':'#255#209#149';'#255#214#155'=' + +#255#219#161'>'#255#223#167'>'#255#227#170'>'#255#230#174'?'#255#232#177'@' + +#255#235#181'A'#255#237#183'A'#255#238#185'A'#255#240#187'A'#255#241#188'A' + +#255#242#189'B'#255#243#190'A'#255#244#191'B'#255#244#192'B'#255#244#191'B' + +#255#244#192'B'#255#244#192'B'#255#245#193'A'#255#244#192'B'#255#244#192'B' + +#255#244#191'B'#255#244#192'B'#255#244#191'B'#255#243#190'A'#255#242#189'B' + +#255#240#187'A'#255#239#186'A'#255#238#184'@'#255#237#183'A'#255#235#179'@' + +#255#232#176'?'#255#229#173'?'#255#226#169'?'#255#223#165'>'#255#218#160'=' + +#255#213#153'<'#255#208#147';'#255#202#140':'#255#196#133'9'#255#190'~7'#255 + +#184'v6'#255#173'l3'#255#145'Y+'#255'uH$'#255'm@ '#255'g;'#31#255'b7'#31#253 + +'U>/'#230'IEC'#206'FFE'#202'EED'#199'CCC'#189'DDD'#170'DDD'#139'BBBdCCC=BBB' + +#31'@@@'#12'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'UUU'#6'KKK'#17'DDD)EEENDDDxDCC'#157'DDC'#182'GGC'#197'T=1'#225'a7 ' + +#252'g;'#31#255'l@ '#255'wI$'#255#154'^.'#255#179'o6'#255#186'x7'#255#193#128 + +'9'#255#200#137':'#255#207#146'<'#255#212#153'>'#255#217#159'>'#255#222#166 + +'?'#255#227#170'@'#255#231#175'A'#255#234#180'B'#255#236#182'B'#255#238#185 + +'B'#255#240#187'B'#255#242#190'D'#255#243#191'C'#255#244#192'D'#255#245#193 + +'C'#255#246#194'D'#255#247#194'D'#255#247#196'E'#255#247#196'D'#255#247#196 + +'D'#255#248#197'D'#255#248#197'D'#255#248#197'D'#255#248#197'D'#255#248#197 + +'D'#255#248#197'D'#255#248#196'D'#255#247#196'D'#255#247#196'D'#255#247#195 + +'E'#255#246#195'D'#255#245#193'D'#255#245#193'C'#255#244#192'D'#255#243#191 + +'C'#255#242#189'C'#255#240#186'C'#255#238#184'C'#255#236#182'B'#255#233#179 + +'B'#255#230#174'A'#255#226#169'@'#255#221#164'?'#255#216#157'>'#255#211#151 + +'='#255#205#143'<'#255#198#135':'#255#191#127'8'#255#184'w7'#255#174'l4'#255 + +#144'X+'#255'rE"'#255'j> '#255'e9'#30#255'_8"'#247'O@8'#219'GFD'#204'DDC'#201 + +'CCC'#194'CCC'#178'DDD'#151'DDDqDDDGGGG$III'#14'@@@'#4#0#0#0#1#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#2'III'#7'@@@'#20'CCC.DDDVCCC'#130'EED'#165'DDC'#189 + +'LB='#207']7$'#244'd7'#31#255'j> '#255'qE"'#255#140'W+'#255#174'l5'#255#186 + +'x8'#255#193#129':'#255#200#138'<'#255#207#146'>'#255#213#155'?'#255#220#163 + +'@'#255#225#169'A'#255#229#174'B'#255#233#179'D'#255#236#182'D'#255#239#185 + +'D'#255#241#189'E'#255#242#190'E'#255#244#192'E'#255#245#194'E'#255#246#195 + +'F'#255#247#195'F'#255#247#196'G'#255#247#197'F'#255#248#197'F'#255#248#197 + +'F'#255#249#198'F'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198 + +'G'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198 + +'G'#255#249#198'G'#255#249#198'G'#255#249#198'F'#255#248#197'F'#255#248#197 + +'F'#255#247#196'F'#255#247#196'F'#255#247#195'F'#255#246#194'F'#255#244#193 + +'F'#255#243#191'E'#255#242#190'E'#255#240#188'E'#255#238#185'D'#255#235#181 + +'D'#255#232#178'C'#255#228#172'C'#255#223#167'B'#255#218#161'@'#255#212#153 + +'?'#255#205#144'='#255#198#135';'#255#191#127'9'#255#183'u7'#255#167'g3'#255 + +#130'P('#255'oB"'#255'h< '#255'c7'#30#255'X:*'#237'HFB'#207'EEE'#202'DCC'#197 + +'DDD'#184'CCC'#160'CCCzEEENFFF(@@@'#16'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2 + +'III'#7'FFF'#22'BBB2CCC\DDD'#136'DDC'#171'EED'#192'Q?5'#219'a6'#31#252'f:'#31 + +#255'mA!'#255#127'N'''#255#164'f3'#255#182'u8'#255#190#127':'#255#199#138'=' + +#255#207#147'?'#255#213#155'A'#255#220#163'B'#255#225#170'D'#255#230#177'E' + +#255#234#181'E'#255#237#184'F'#255#240#188'G'#255#242#189'G'#255#243#192'G' + +#255#244#193'H'#255#245#194'H'#255#246#195'H'#255#247#196'H'#255#247#197'H' + +#255#247#197'H'#255#248#198'H'#255#248#198'H'#255#248#197'H'#255#248#198'H' + +#255#248#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I' + +#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I' + +#255#249#198'I'#255#249#198'I'#255#248#198'I'#255#248#198'H'#255#248#198'H' + +#255#248#198'H'#255#248#198'H'#255#247#197'H'#255#247#196'I'#255#247#195'H' + +#255#246#195'H'#255#245#195'H'#255#244#193'H'#255#243#191'G'#255#241#189'G' + +#255#239#186'G'#255#236#183'F'#255#233#180'F'#255#229#175'D'#255#224#168'D' + +#255#218#161'B'#255#211#153'@'#255#205#144'?'#255#196#134'='#255#188'{:'#255 + +#180'r8'#255#155'_/'#255'wJ$'#255'j? '#255'e8'#30#255']8#'#246'LB<'#213'FEE' + +#203'EED'#199'DDD'#188'DDD'#165'DDD'#128'DDDSFFF,GGG'#18'+++'#6#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#2'III'#7'CCC'#23'BBB6DDDaCCC'#141'DDC'#174'GDB'#196'V:+'#233'c7'#30#255'h; ' + +#255'pC#'#255#146'Z-'#255#179'p7'#255#187'{;'#255#196#133'='#255#204#144'?' + +#255#212#154'B'#255#219#163'E'#255#225#170'E'#255#230#176'G'#255#234#181'H' + +#255#238#185'I'#255#240#189'I'#255#242#190'J'#255#243#192'J'#255#244#193'J' + +#255#245#195'J'#255#246#195'J'#255#246#196'J'#255#247#196'K'#255#247#196'K' + +#255#247#197'K'#255#247#197'K'#255#247#197'K'#255#247#197'J'#255#247#197'J' + +#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J' + +#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J' + +#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#197'J' + +#255#247#197'J'#255#247#197'J'#255#247#197'K'#255#247#197'K'#255#247#197'K' + +#255#247#196'K'#255#246#196'K'#255#246#196'J'#255#246#195'J'#255#245#195'J' + +#255#244#194'J'#255#243#191'I'#255#241#189'I'#255#239#188'I'#255#236#184'H' + +#255#233#180'H'#255#228#174'G'#255#223#168'E'#255#217#160'C'#255#210#151'B' + +#255#202#141'?'#255#193#130'<'#255#185'x:'#255#174'm6'#255#134'S*'#255'mA"' + +#255'f:'#31#255'a6'#30#253'R>4'#224'FFE'#203'EED'#200'CCC'#190'DDD'#169'CCC' + +#133'CCCXAAA/CCC'#19'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'CCC'#23'BBB6CCCcCCC'#144'EED'#177'JC>'#202 + +'[6"'#244'c8'#31#255'j?!'#255'xI&'#255#162'd2'#255#183'u:'#255#192#129'='#255 + +#200#140'@'#255#209#150'B'#255#217#160'E'#255#223#169'G'#255#229#176'H'#255 + +#233#181'J'#255#236#185'J'#255#239#188'K'#255#241#190'K'#255#242#192'K'#255 + +#243#193'L'#255#244#194'L'#255#245#195'L'#255#245#195'L'#255#245#195'L'#255 + +#246#196'L'#255#246#196'L'#255#246#196'L'#255#246#196'L'#255#246#196'M'#255 + +#246#196'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255 + +#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255 + +#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255 + +#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#196'M'#255 + +#246#196'M'#255#246#196'M'#255#246#196'L'#255#246#196'L'#255#246#196'L'#255 + +#246#196'L'#255#245#195'L'#255#245#196'L'#255#244#195'M'#255#244#194'L'#255 + +#243#193'L'#255#242#192'L'#255#241#190'K'#255#238#188'K'#255#236#184'J'#255 + +#232#179'I'#255#228#173'H'#255#222#166'F'#255#215#158'E'#255#207#148'B'#255 + +#198#137'?'#255#190'~<'#255#180'r9'#255#150']/'#255'qE$'#255'h< '#255'b6'#30 + +#255'W9*'#235'GED'#204'DDC'#201'DDD'#192'CCC'#172'CCC'#137'DDDZAAA/GGG'#18'3' + +'33'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'+++'#6'II' + +'I'#21'CCC5DDDbCCC'#145'DDC'#178'LB;'#206'^6 '#249'd8'#31#255'l@!'#255#131'Q' + +'*'#255#172'k7'#255#186'z;'#255#196#133'?'#255#205#146'C'#255#213#156'E'#255 + +#220#165'G'#255#227#173'I'#255#232#180'K'#255#236#184'L'#255#238#187'L'#255 + ,#240#189'N'#255#241#191'N'#255#242#192'N'#255#243#193'N'#255#244#194'N'#255 + +#244#194'N'#255#244#194'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255 + +#244#195'O'#255#244#195'O'#255#244#194'O'#255#244#195'N'#255#244#194'N'#255 + +#243#193'N'#255#242#192'M'#255#241#190'N'#255#240#189'M'#255#237#186'M'#255 + +#235#182'L'#255#230#178'K'#255#225#171'I'#255#219#163'G'#255#211#153'D'#255 + +#202#143'B'#255#192#130'>'#255#183'u:'#255#164'f4'#255'yK&'#255'i=!'#255'c7' + +#30#255'Z8%'#241'GEC'#205'DDC'#201'CCC'#193'DDD'#173'DDD'#136'BBBYDDD-KKK'#17 + +'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'CCC'#19'BBB2CCC_DD' + +'D'#143'DDC'#178'M@8'#211'_5'#31#251'e9'#31#255'lA"'#255#144'Y/'#255#179'r9' + +#255#188'}='#255#198#138'B'#255#208#149'D'#255#217#161'H'#255#223#170'K'#255 + +#229#177'L'#255#234#181'M'#255#236#186'N'#255#239#188'O'#255#240#190'P'#255 + +#241#191'P'#255#242#192'P'#255#242#192'P'#255#242#193'P'#255#243#193'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255 + +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#193'P'#255 + +#242#193'P'#255#242#192'O'#255#242#192'P'#255#241#192'P'#255#240#190'P'#255 + +#238#188'O'#255#236#185'N'#255#232#180'M'#255#228#175'L'#255#222#167'I'#255 + +#215#159'H'#255#205#147'D'#255#196#134'@'#255#186'y<'#255#173'm7'#255#130'O*' + +#255'j?!'#255'c8'#31#255'[7#'#245'HDA'#208'DDC'#201'CCC'#193'CCC'#172'CCC' + +#134'AAAVAAA+@@@'#16'@@@'#4#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'<<<'#17'CCC.CC' + +'C[CCC'#140'EED'#176'O>5'#213'_5'#30#253'e9'#31#255'nB#'#255#151'\1'#255#181 + +'s:'#255#191#129'@'#255#201#142'C'#255#211#154'G'#255#219#164'K'#255#226#173 + +'M'#255#231#179'O'#255#234#184'P'#255#237#187'Q'#255#239#189'Q'#255#240#190 + +'R'#255#240#191'Q'#255#241#192'R'#255#241#192'R'#255#241#192'R'#255#242#192 + +'R'#255#242#192'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193 + +'R'#255#242#192'R'#255#242#192'R'#255#241#192'R'#255#241#192'R'#255#241#192 + +'R'#255#240#191'Q'#255#240#190'R'#255#238#189'Q'#255#236#186'P'#255#234#182 + +'O'#255#230#177'N'#255#224#171'L'#255#217#162'J'#255#208#150'F'#255#198#138 + +'C'#255#188'}>'#255#177'o:'#255#136'S,'#255'k?"'#255'c8'#31#255'\6!'#248'JC?' + +#211'DCC'#201'CCC'#193'CCC'#171'BBB'#131'DDDRAAA''777'#14'UUU'#3#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'UUU'#3';;;'#13'AAA''CCCTBBB'#135'DDC'#174'N=5'#213'`4'#29#254'e9'#31#255'oC' + +'$'#255#156'`3'#255#181'u<'#255#193#131'A'#255#204#146'E'#255#213#157'I'#255 + +#221#167'M'#255#227#175'O'#255#232#180'Q'#255#235#184'R'#255#237#187'S'#255 + +#238#189'S'#255#239#190'S'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + ,#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#234#187'R'#255#202#161'G'#255#232#185'R'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255 + +#239#189'S'#255#238#188'R'#255#236#186'R'#255#234#184'Q'#255#231#179'Q'#255 + +#226#173'O'#255#219#165'L'#255#211#154'H'#255#201#142'E'#255#190#128'@'#255 + +#179'q:'#255#140'V.'#255'l@"'#255'c8'#31#255'\4'#31#250'JC>'#211'CCC'#201'DD' + +'D'#192'CCC'#168'CCC~DDDKFFF!MMM'#10#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'333'#10'@@@ EEE' + +'JCCC~EDD'#169'L?8'#208'^4'#30#253'd8 '#255'pD%'#255#159'b4'#255#182'v='#255 + +#194#132'C'#255#205#147'H'#255#215#160'L'#255#222#169'O'#255#228#176'Q'#255 + +#232#181'S'#255#235#185'T'#255#236#187'T'#255#237#188'U'#255#238#189'U'#255 + +#238#190'U'#255#238#190'U'#255#238#191'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#181#144'@'#255 + +';/'#21#255#21#16#7#255#9#7#3#255#2#2#1#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1 + +#1#255#7#6#3#255#17#14#6#255#31#25#11#255'2'''#18#255'SB'#29#255#157'}8'#255 + +#233#186'S'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255 + +#239#190'U'#255#239#190'U'#255#239#190'U'#255#238#190'U'#255#238#190'U'#255 + +#238#190'U'#255#238#189'U'#255#237#188'U'#255#236#186'T'#255#234#184'T'#255 + +#231#180'S'#255#226#175'Q'#255#220#166'N'#255#212#156'K'#255#202#143'F'#255 + +#190#129'A'#255#179'r<'#255#145'Y0'#255'k?"'#255'c7'#31#255'[4 '#248'IC@'#209 + +'DDD'#200'CCC'#190'CCC'#163'DDDtCCCAEEE'#26'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'==='#25'AAA?CCCsBBB' + +#162'K?;'#202'^4'#30#252'c8 '#255'oB%'#255#160'b5'#255#183'v>'#255#194#134'D' + +#255#205#148'J'#255#215#161'M'#255#223#171'Q'#255#228#177'T'#255#232#182'U' + +#255#234#185'V'#255#236#187'V'#255#236#187'V'#255#237#188'W'#255#237#189'W' + +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W' + +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W' + +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W' + +#255#237#188'W'#255#237#188'W'#255#159'~:'#255#16#13#6#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#16#13#6 + +#255'9-'#21#255'y`,'#255#208#165'M'#255#237#188'W'#255#237#188'W'#255#237#188 + +'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188 + +'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188 + +'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#189'W'#255#237#188 + +'W'#255#236#187'V'#255#235#186'V'#255#234#184'U'#255#231#180'U'#255#227#175 + +'R'#255#221#169'Q'#255#213#157'L'#255#202#144'H'#255#191#129'C'#255#180's=' + +#255#145'X0'#255'j>#'#255'b6'#31#255'Z5#'#245'GDB'#206'DDD'#200'CCC'#186'DDD' + +#154'EEEhBBB6@@@'#20'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'@@@'#4'GGG'#18'AAA3DDDfCCC'#152'IA>'#195'\4 '#250'c7'#31#255'm@#'#255 + +#156'_5'#255#182'v?'#255#194#134'E'#255#206#148'K'#255#215#161'O'#255#223#171 + +'S'#255#228#178'V'#255#232#182'V'#255#233#185'X'#255#234#186'X'#255#235#187 + +'X'#255#236#187'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188 + +'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188 + +'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188 + +'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255'9-'#21 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#6 + +#5#2#255'$'#29#14#255'ZH"'#255#169#135'@'#255#234#186'X'#255#236#188'X'#255 + ,#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255 + +#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255 + +#236#188'X'#255#236#187'X'#255#235#187'Y'#255#235#186'X'#255#234#186'X'#255 + +#233#184'W'#255#231#180'W'#255#227#176'T'#255#221#169'R'#255#213#158'N'#255 + +#203#145'J'#255#192#130'D'#255#179's='#255#139'U/'#255'i="'#255'a5'#30#255'X' + +'7%'#242'FDC'#204'CCC'#198'DDD'#180'CCC'#144'CCC[AAA+III'#14'UUU'#3#0#0#0#1#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'@@@'#12'AAA''CCCWCCC'#140'GB?' + +#185'Z4!'#247'a6'#30#255'j?"'#255#151']2'#255#181't>'#255#194#133'F'#255#206 + +#149'M'#255#215#161'Q'#255#223#170'T'#255#228#178'W'#255#231#181'Y'#255#232 + +#183'Y'#255#233#185'Z'#255#234#185'Y'#255#234#186'Y'#255#234#186'Y'#255#234 + +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234 + +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234 + +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234 + +#186'Z'#255#234#186'Z'#255'C5'#26#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#1#1#1#255#20#16#8#255'K;'#29#255#189#150'I'#255#234#186'Z'#255#234#186 + +'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186 + +'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Y'#255#234#186 + +'Y'#255#234#185'Y'#255#233#185'Z'#255#232#183'Y'#255#230#181'X'#255#226#176 + +'W'#255#221#169'T'#255#213#159'O'#255#203#145'K'#255#190#129'D'#255#178'p=' + +#255#134'Q-'#255'g;"'#255'`4'#29#255'U7('#238'CCC'#202'DDD'#195'DDD'#173'BBB' + +#131'CCCL@@@ 999'#9#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'BBB'#27'CC' + +'CEDDD|DDD'#170'V6%'#238'`5'#30#255'h<"'#255#145'Y1'#255#179's?'#255#192#132 + +'F'#255#205#148'M'#255#215#161'R'#255#222#171'U'#255#227#176'X'#255#230#181 + +'Z'#255#231#183'Z'#255#232#183'['#255#232#184'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185 + +'['#255#233#185'['#255#233#185'['#255#127'd1'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13#11#5 + +#255'N>'#31#255#193#153'L'#255#233#185'['#255#233#185'['#255#233#185'['#255 + +#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255 + +#233#185'['#255#233#184'['#255#232#184'['#255#232#183'Z'#255#231#182'Z'#255 + +#229#180'Y'#255#226#175'X'#255#220#168'U'#255#213#158'R'#255#201#144'K'#255 + +#189#127'D'#255#175'n<'#255#128'N+'#255'e9 '#255'_3'#29#255'Q;1'#227'CCC'#201 + +'CCC'#191'CCC'#163'CCCrAAA;FFF'#22'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'<<<' + +#17'AAA3EEEhCCC'#156'R:/'#220'_3'#29#255'e: '#255#134'Q-'#255#178'p>'#255#190 + +#130'F'#255#203#145'M'#255#213#161'S'#255#221#170'W'#255#226#176'Z'#255#229 + +#180'Z'#255#230#182'\'#255#231#182'\'#255#231#183'\'#255#231#183'\'#255#231 + +#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231 + +#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231 + +#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231 + +#183'\'#255#231#183'\'#255#231#183'\'#255#180#142'G'#255#1#1#1#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#15#12#6#255'VE"'#255#215#171'V'#255 + +#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255 + +#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#182'\'#255 + +#230#181'['#255#228#178'['#255#225#175'Y'#255#219#168'W'#255#211#156'Q'#255 + +#200#142'K'#255#187'|D'#255#172'k<'#255'wF('#255'c7 '#255'^1'#30#254'K@:'#214 + +'DDD'#199'CCC'#184'CCC'#148'AAA^GGG+NNN'#13'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'MMM'#10'@' + +'@@$DDDSDDD'#139'L?8'#197'^1'#29#254'c7 '#255'wG)'#255#173'l<'#255#188#127'E' + +#255#201#144'N'#255#212#158'T'#255#220#169'X'#255#225#175'['#255#228#179'\' + +#255#229#180'\'#255#230#181']'#255#230#181']'#255#230#182']'#255#230#182']' + +#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']' + +#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']' + +#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']' + +#255#230#182']'#255#230#182']'#255#221#175'Y'#255#10#8#4#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255'4' + +')'#21#255#184#146'J'#255#230#182']'#255#230#182']'#255#230#182']'#255#230 + +#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#181']'#255#229 + +#182']'#255#228#180']'#255#227#178'\'#255#224#174'['#255#218#166'W'#255#209 + +#155'R'#255#198#139'K'#255#184'zC'#255#162'd8'#255'l@$'#255'a5'#30#255'Z3 ' + +#249'FBA'#206'DDD'#196'CCC'#174'CCC'#129'BBBIFFF'#29'@@@'#8#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'FF' + +'F'#22'BBB>CCCvFA?'#174'Z3'#31#248'`5'#30#255'l@$'#255#163'd9'#255#184'{D' + +#255#199#142'N'#255#210#156'T'#255#218#167'Y'#255#223#174'\'#255#226#177'^' + +#255#228#179'^'#255#228#179'^'#255#228#180'_'#255#228#180'_'#255#228#180'_' + +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_' + +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_' + +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_' + +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255'bM)'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#27#21#11#255#140'o;'#255#228#180'_'#255#228#180 + +'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180 + +'_'#255#228#179'^'#255#227#179'^'#255#226#176']'#255#222#172'['#255#216#164 + +'X'#255#207#152'R'#255#195#137'K'#255#181'tA'#255#149'Z3'#255'g<"'#255'_3'#29 + +#255'V6'''#239'CCC'#201'CCC'#190'CCC'#159'CCCkCCC5GGG'#18'@@@'#4#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'@@@'#12'CCC' + +'*DDD^DDD'#150'U6('#230'^2'#28#255'f:!'#255#149'Z3'#255#181'uB'#255#195#137 + +'K'#255#208#154'T'#255#216#165'Y'#255#221#172']'#255#225#176'^'#255#226#178 + +'_'#255#227#178'_'#255#227#178'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179 + +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#13#10#6#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'&'#30#16#255#208#164 + +'W'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#178 + +'_'#255#227#178'_'#255#226#179'`'#255#226#177'_'#255#224#176'^'#255#220#170 + +'\'#255#214#162'X'#255#205#149'R'#255#191#131'I'#255#177'p?'#255#131'O.'#255 + +'c7 '#255']1'#29#255'N;3'#222'DDD'#199'DDD'#181'CCC'#140'DDDSDDD"999'#9#0#0#0 + +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'+++'#6'@@@'#24 + +'EEECCCC~K=7'#193']0'#28#255'b6'#31#255#129'M,'#255#177'o@'#255#191#131'J' + +#255#204#149'S'#255#214#163'Z'#255#220#171']'#255#223#174'_'#255#225#176'`' + +#255#225#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + ,#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`' + +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#161'~D'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2 + +#255#134'i9'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255 + +#226#177'`'#255#225#178'`'#255#225#177'`'#255#224#176'_'#255#222#174'^'#255 + +#219#169']'#255#212#159'X'#255#200#144'Q'#255#187'~G'#255#170'j<'#255'qB%' + +#255'`5'#30#255'Z2'#31#250'FBA'#205'CCC'#193'DDD'#166'CCCsCCC9CCC'#19'@@@'#4 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'@@@'#12'AAA+BBB' + +'aDBB'#155'Y3!'#244'_3'#29#255'l?$'#255#167'f;'#255#186'}H'#255#200#144'R' + +#255#211#158'Y'#255#218#168']'#255#221#172'`'#255#223#174'a'#255#223#176'a' + +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b' + +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b' + +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b' + +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b' + +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255'hR.'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'qY2'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176 + +'b'#255#224#176'b'#255#224#176'b'#255#223#176'a'#255#223#174'`'#255#221#172 + +'_'#255#217#166']'#255#208#155'W'#255#196#139'O'#255#182'wE'#255#152'\5'#255 + +'e9!'#255'^2'#29#255'S7*'#233'DDD'#200'CCC'#183'DDD'#143'EEEUDDD"UUU'#9#0#0#0 + +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'@@@'#24'DDDDCCC~P8-' + +#211']0'#29#255'c8!'#255#144'V2'#255#180'uD'#255#196#138'P'#255#207#155'X' + +#255#215#165']'#255#220#171'`'#255#221#173'b'#255#222#174'a'#255#222#175'b' + +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b' + +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b' + +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b' + +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b' + +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255'VD&'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#1#1#0#255#166#132'J'#255#222#175'b'#255#222#175'b'#255#222#175 + +'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#174'a'#255#221#173 + +'a'#255#219#170'`'#255#213#163'\'#255#205#150'V'#255#192#132'M'#255#176'oA' + +#255'}K,'#255'a5'#31#255'\0'#28#254'I?;'#212'CCC'#194'DDD'#166'CCCrDDD8GGG' + +#18'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#11'DDD)BBB`G@<' + +#164'[1'#29#252'_3'#29#255'uD)'#255#174'l?'#255#189#130'L'#255#204#150'V'#255 + +#213#162'^'#255#217#168'`'#255#220#172'b'#255#221#173'b'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255'gQ.'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + ,#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#4#255#207#163']'#255#221#173'c'#255 + +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255 + +#221#172'b'#255#219#171'b'#255#217#167'`'#255#211#159'['#255#200#145'T'#255 + +#185'{H'#255#164'd;'#255'h<#'#255'^1'#29#255'X3#'#244'DDD'#200'CCC'#183'DDD' + +#142'DDDSFFF!@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'III'#21'EEE?DD' + +'D|S5'''#222'\1'#28#255'c8!'#255#158'_8'#255#183'yH'#255#198#142'S'#255#209 + +#158'\'#255#215#166'`'#255#218#170'b'#255#219#171'c'#255#219#171'd'#255#219 + +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219 + +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219 + +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219 + +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219 + +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#213 + +#168'b'#255#3#3#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'M<#'#255#219#172 + +'d'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172 + +'d'#255#219#171'd'#255#219#170'c'#255#217#168'b'#255#214#164'`'#255#207#153 + +'Z'#255#194#136'P'#255#178'rD'#255#139'R1'#255'a4'#31#255'\0'#28#255'L<5'#219 + +'CCC'#193'DDD'#164'CCCoCCC5@@@'#16'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#8 + +'BBB#CCCWHA='#158'\0'#28#253'_3'#29#255'~I+'#255#175'nB'#255#191#133'O'#255 + +#205#151'Z'#255#213#163'a'#255#216#167'c'#255#217#169'c'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255'YF)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#15#12#7#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255 + +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#169'c'#255#217#168'c'#255 + +#215#166'b'#255#211#160'_'#255#201#147'W'#255#187#127'L'#255#169'h>'#255'l=$' + +#255'^1'#29#255'W3"'#244'DDD'#199'DDD'#180'DDD'#136'DDDKBBB'#27'UUU'#6#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'UUU'#3'DDD'#15'EEE4BBBpS6)'#215'\1'#28#255'b7!'#255#158'_9' + +#255#184'{J'#255#199#144'W'#255#209#158'_'#255#214#165'c'#255#216#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255 + +'YD)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#189#147'W'#255#217#168'd' + +#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd' + +#255#217#168'd'#255#216#168'd'#255#215#167'c'#255#213#164'a'#255#207#154']' + +#255#195#138'S'#255#179'tF'#255#139'R1'#255'`5'#30#255'\0'#28#255'K=7'#216'D' + +'DD'#191'DDD'#157'CCCcAAA+FFF'#11#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'+++'#6'EEE'#26'BBBIE?=' + +#144'Z0'#28#252'^2'#29#255'zF*'#255#174'mB'#255#192#135'R'#255#205#152'\'#255 + +#211#161'b'#255#214#165'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255 + +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255'jR1'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'fN/'#255#215#166'd'#255#215#166'd'#255#215#166'd' + +#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd' + +#255#215#167'e'#255#214#164'c'#255#210#159'a'#255#202#148'Z'#255#187#128'N' + +#255#168'f='#255'i;#'#255'\1'#28#255'V3#'#242'CCC'#197'DDD'#173'BBB{FFF>@@@' + +#20'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#1'MMM'#10'FFF(CCC_R6*'#206'\0'#28#255'`5'#31#255#154'\8' + +#255#182'yJ'#255#199#144'Y'#255#208#156'`'#255#212#163'd'#255#213#165'd'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255 + +#214#165'e'#255#214#165'e'#255#214#165'e'#255#135'h@'#255#2#1#1#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'b' + +'L/'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165 + +'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#213#165'e'#255#213#164 + +'d'#255#211#161'c'#255#206#154'^'#255#194#139'U'#255#177'sF'#255#135'P/'#255 + +'^3'#29#255'[/'#27#255'J>9'#213'DDD'#185'CCC'#144'DDDSHHH III'#7#0#0#0#1#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3 + +'<<<'#17'DDD8DBAyZ0'#29#248'\1'#28#255'uB'''#255#172'lA'#255#190#132'Q'#255 + +#203#151'^'#255#209#160'c'#255#211#162'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255 + +#212#163'e'#255#212#163'e'#255#212#163'e'#255#156'xK'#255#1#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'jQ2'#255#212 + +#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212 + +#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#162'e'#255#211 + +#162'd'#255#208#158'b'#255#200#147'['#255#186'~M'#255#165'd<'#255'd8!'#255'\' + +'0'#28#255'T5'''#237'CCC'#193'DDD'#162'CCCjCCC.@@@'#12#0#0#0#2#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'333'#5'GGG'#25'BB' + +'BIN:1'#174'[/'#27#255'^2'#29#255#145'T3'#255#180'vI'#255#196#142'Y'#255#206 + +#155'a'#255#209#161'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + ,#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255'O=&'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'sX7'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#210 + +#161'f'#255#209#159'd'#255#204#153'`'#255#192#135'U'#255#175'pE'#255'~H+'#255 + +']0'#29#255'Z0'#28#253'FBA'#201'DDD'#176'CCC~FFF>CCC'#19'@@@'#4#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'EEE%CCC[V3' + +'$'#222'\0'#27#255'f7!'#255#167'd>'#255#187#128'Q'#255#200#148'^'#255#207#156 + +'d'#255#209#159'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160 + +'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160 + +'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160 + +'e'#255#209#160'e'#255#209#160'e'#255#151'tI'#255'2&'#25#255#27#21#13#255#15 + +#12#7#255#7#5#3#255#7#5#3#255' '#25#16#255'P='''#255#151'tI'#255#209#160'e' + +#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e' + +#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e' + +#255#209#160'e'#255#209#160'e'#255#6#5#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#146'pF'#255#209#160'e'#255#209#160'e'#255 + +#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255 + +#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#159'e'#255 + +#206#155'c'#255#198#143'['#255#182'zM'#255#151'Y6'#255'^3'#29#255'[/'#27#255 + +'N:1'#222'DDD'#185'DDD'#142'DDDOIII'#28'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2';;;'#13'DDD1F@=x[/'#28#253'\1'#28 + +#255'~G+'#255#174'oE'#255#193#137'X'#255#203#151'b'#255#207#156'e'#255#207 + +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208 + +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208 + +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255'x[;' + +#255#15#12#8#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2#255'bJ0'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255'3'''#25#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f' + +#255#208#158'f'#255#207#158'e'#255#206#156'd'#255#201#149'_'#255#189#131'T' + +#255#169'h@'#255'j:#'#255'\0'#28#255'V3#'#242'DDD'#191'CCC'#156'BBB`AAA''333' + +#10#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'C' + +'CC'#19'EEE?Q7+'#179'[/'#27#255'^1'#29#255#152'X6'#255#181'yM'#255#197#144']' + +#255#204#153'c'#255#206#155'f'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#202#154'c'#255'6)'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#14#10#7#255#178#135'W'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255'WB+'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + ,#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#29#22#14#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e' + +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#205#156'e' + +#255#203#151'c'#255#194#139'Z'#255#176'qH'#255#131'K-'#255'\1'#28#255'[/'#27 + +#255'HA='#204'DDD'#169'DDDqEEE4III'#14#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'+++'#6'BBB'#27'EEENW2!'#228'[/'#27#255'i9!' + +#255#168'e?'#255#187#130'T'#255#200#147'`'#255#203#153'e'#255#205#154'e'#255 + +#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255 + +#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255 + +#205#154'e'#255#205#154'e'#255#199#150'a'#255#19#14#9#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#6#4#255#178#133'W' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255'S>)'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128'a?'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e' + +#255#205#154'e'#255#204#154'e'#255#203#152'd'#255#197#145'^'#255#182'zO'#255 + +#157'Z8'#255']1'#29#255'[/'#27#255'P9.'#226'CCC'#179'CCC'#129'CCCA@@@'#20'@@' + +'@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'EEE%EA?' + +'b[/'#27#253'\0'#27#255#127'F*'#255#173'nG'#255#191#136'Z'#255#200#149'c'#255 + +#202#152'e'#255#202#152'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#31#24#16#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#11#8#6#255#200#151'e'#255#202#153'e'#255#202#153'e'#255#202 + +#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255'O;''' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255''''#29#19#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255 + +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#152'e'#255#202#151'd'#255 + +#199#147'b'#255#188#130'U'#255#168'e@'#255'k:"'#255'[/'#27#255'V3$'#241'CCC' + +#186'BBB'#142'EEENBBB'#27'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#2'@@@'#12'DDD-O:0'#146'[/'#27#255'\0'#28#255#145'R2'#255#179'wM' + +#255#194#141'^'#255#200#148'c'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255';,'#30#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'S>*'#255#201#150'e' + +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e' + +#255#201#150'e'#255'K8&'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#29#22#14#255 + +#184#138']'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255 + ,#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255 + +#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255 + +#201#150'e'#255#200#149'd'#255#199#148'c'#255#191#136'['#255#173'mG'#255'}D(' + +#255'\0'#27#255'Z0'#28#253'DBB'#192'CCC'#152'DDDZBBB#@@@'#8#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'III'#14'CCC5T5'''#190'[/'#27#255 + +'_2'#29#255#162'^:'#255#184'}S'#255#195#142'`'#255#198#147'd'#255#199#148'd' + +#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd' + +#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd' + +#255#199#148'd'#255#147'mJ'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#3#2#1#255#195#144'b'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255 + +#199#148'd'#255#199#148'd'#255#199#148'd'#255'H6$'#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#3#2#1#255#23#17#12 + +#255'qT8'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199 + +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199 + +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199 + +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#198#146'c'#255#193 + +#140'^'#255#178'uN'#255#143'O1'#255'\0'#28#255'[/'#27#255'J=7'#208'CCC'#161 + +'DDDfAAA+FFF'#11#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'<<<' + +#17'CCC=X1 '#227'[/'#27#255'm:"'#255#167'eA'#255#187#130'X'#255#195#143'a' + +#255#196#144'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c' + +#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c' + +#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#19#14#10#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#135'cD'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255'I5$' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#19#14#10#255'4&'#26#255'cI2'#255 + +#161'vP'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197 + +#145'c'#255#197#145'b'#255#196#144'c'#255#194#140'`'#255#182'|S'#255#159'\:' + +#255']2'#28#255'[/'#27#255'Q8-'#226'DDD'#168'DDDqAAA3NNN'#13#128#128#128#2#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4':::'#22'G@<N[/'#27#253'[/'#27 + +#255'~D('#255#172'lF'#255#189#133'['#255#194#141'a'#255#194#142'b'#255#195 + +#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195 + +#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195 + +#142'b'#255'oQ8'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'N9'''#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142 + +'b'#255#195#142'b'#255#195#142'b'#255#145'jI'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'7('#28 + +#255#166'yS'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255 + +#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255 + +#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255 + +#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255 + +#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255#195#142'b'#255 + +#195#142'b'#255#194#142'a'#255#193#140'`'#255#185#128'X'#255#166'c?'#255'k8!' + +#255'[/'#27#255'V3#'#241'DDD'#175'DDD{BBB:@@@'#16#128#128#128#2#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'EEE'#26'Q:/z[/'#27#255'\0'#27#255#142'M/' + ,#255#176'rM'#255#189#135']'#255#192#139'a'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#26#19#13#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'D1"'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192 + +#139'`'#255#192#139'`'#255#192#139'`'#255#11#8#6#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#4#255#143'hH'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255#192#139'`'#255 + +#192#139'`'#255#192#139'`'#255#192#138'a'#255#187#131'Z'#255#170'iE'#255'{B' + +''''#255'[/'#27#255'Z0'#28#253'DDD'#182'DDD'#132'CCCACCC'#19'UUU'#3#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'BBB'#31'S5('#154'[/'#27#255'\0'#28#255 + +#153'W5'#255#179'wQ'#255#189#133'^'#255#190#136'_'#255#190#136'_'#255#190#136 + +'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136 + +'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#184#132 + +']'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'dH2'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255 + +#190#136'_'#255#190#136'_'#255#190#136'_'#255'G3#'#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255#165'wS'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#190 + +#136'_'#255#190#136'_'#255#190#136'_'#255#190#136'_'#255#187#131'\'#255#173 + +'nJ'#255#134'H,'#255'[/'#27#255'[/'#27#255'HA='#194'DDD'#139'CCCHCCC'#23'@@@' + +#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#8'DDD"V4$'#182'[/'#27#255'`2' + +#29#255#160'\9'#255#181'zT'#255#187#132']'#255#188#133'^'#255#188#134'^'#255 + +#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255 + +#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255 + +'hK4'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#2#1#1#255#163'uR'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#180#128'Z'#255#13#9 + +#6#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'cF1'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188 + +#134'^'#255#188#134'^'#255#188#134'^'#255#188#134'^'#255#188#133'^'#255#186 + +#131'\'#255#176'sO'#255#144'O/'#255'[/'#27#255'[/'#27#255'L=6'#206'DDD'#143 + +'BBBMEEE'#26'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'EEE%X2 ' + +#209'[/'#27#255'j8 '#255#163'_='#255#181'{V'#255#186#130'\'#255#186#130'\' + +#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\' + +#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\' + +#255#186#130'\'#255'#'#25#17#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + ,#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'_B/'#255#186#130'\'#255#186#130'\'#255#186#130'\' + +#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\' + +#255#186#130'\'#255#163'rQ'#255#5#3#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'$'#26#18#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255#186#130'\'#255 + +#186#130'\'#255#186#130'\'#255#185#129'\'#255#177'vR'#255#155'V5'#255'\0'#28 + +#255'[/'#27#255'P9/'#217'DDD'#146'BBBQ@@@'#28'UUU'#6#0#0#0#1#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#1'MMM'#10'@@@(Z0'#29#234'[/'#27#255't<$'#255#165'b@'#255#181 + +'{V'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127 + +'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127 + +'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#4#3#2#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255'Q8('#255#184#127'Z'#255#184#127 + +'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127 + +'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#142'bE' + +#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#6#4#3#255#174'yV'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184 + +#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#184#127'Z'#255#183 + +'~Z'#255#178'wT'#255#159'Y8'#255'b3'#30#255'[/'#27#255'S6)'#228'CCC'#149'CCC' + +'TBBB'#31'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'FFF'#11'F@>/[/'#27 + +#254'[/'#27#255'}A&'#255#167'gD'#255#180'zW'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y' + +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#136']C'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#19#13#9#255#151'gJ'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y' + +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#171'vU'#255'1"'#24#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'}V>'#255 + +#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y' + +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255 + +#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181 + +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y' + +#255#181'|Y'#255#181'|Y'#255#178'wT'#255#161'];'#255'k8 '#255'[/'#27#255'V3#' + +#238'DDD'#151'CCCWFFF!@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#11 + +'K:3?[/'#27#255'[/'#27#255#131'F*'#255#169'iH'#255#179'xV'#255#180'zW'#255 + +#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180 + +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255'<)'#29#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#1#1#1#255'O6&'#255#180'{W'#255#180'{W'#255#180'{W'#255#180 + +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W' + +#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255 + +#180'{W'#255#142'aE'#255#27#19#13#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255 + ,#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#5#4#255 + +#135']A'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180 + +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255'pL6'#255'+'#29#20#255'('#28#19 + +#255'*'#28#20#255'+'#29#21#255'-'#30#21#255'fF2'#255#180'{W'#255#180'{W'#255 + +#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180 + +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W' + +#255#180'{W'#255#180'{W'#255#180'{W'#255#180'zX'#255#178'vU'#255#163'_>'#255 + +'r<"'#255'[/'#27#255'X2!'#243'CCC'#152'BBBYDDD"@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#2'FFF'#11'N8.J[/'#27#255'[/'#27#255#135'H,'#255#170'kI'#255 + +#178'wV'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179 + +'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#16#11#8#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#19#13#10#255#150'fJ'#255#179'yX'#255#179 + +'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255 + +#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179 + +'yX'#255'~V>'#255'=)'#30#255#19#13#9#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255'$'#24#17#255#172'uT'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#158'kN'#255'=)'#30#255#6 + +#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#6#4#3#255'?+'#31#255#164'oP'#255#179'yX'#255#179'yX'#255#179'yX'#255#179 + +'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX' + +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255 + +#177'uU'#255#164'b@'#255'v?%'#255'[/'#27#255'Y1'#31#246'CCC'#152'BBBYDDD"@@@' + +#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'FFF'#11'Q7+U[/'#27#255'\0'#28#255 + +#139'J-'#255#171'lL'#255#177'wW'#255#178'wV'#255#178'wV'#255#178'wV'#255#178 + +'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV' + +#255#178'wV'#255#172'sT'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255'O5&'#255#178'wV'#255#178'wV' + +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255 + +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178 + +'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV' + +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#176'wV'#255 + +'vO9'#255'7%'#27#255#16#10#8#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#11#8#6#255'9&'#28#255#137'\C'#255#178'wV'#255#178'wV'#255 + +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255'M3%' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'4"'#25#255#178'wV' + +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255 + +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178 + +'wV'#255#178'wV'#255#176'tT'#255#165'cC'#255'yA'''#255'[/'#27#255'Z0'#29#250 + +'DDD'#150'CCCWFFF!III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'MMM'#10'R4' + +'''^[/'#27#255'\0'#28#255#142'M.'#255#171'nN'#255#177'uV'#255#177'wX'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255'gF3'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#23#16#12#255#152'fK'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255 + +#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#173'uV'#255 + +#136'\D'#255#133'YB'#255#131'XA'#255#128'V@'#255#153'gL'#255#177'wX'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255'S8)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255'"'#23#17#255#175'wX'#255#177'wX'#255#177 + +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX' + +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#175'tU'#255 + +#166'eE'#255'}B)'#255'\0'#28#255'[/'#28#253'CCC'#148'CCCTBBB'#31'III'#7#0#0#0 + ,#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'V4%h[/'#27#255'\0'#28#255#145'O0' + +#255#171'mN'#255#175'sU'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255'*'#29#21#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2 + +#1#1#255'X;,'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW' + +#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW' + +#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255'^?/'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'$'#24#18#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255 + +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175 + +'uW'#255#175'uW'#255#175'uW'#255#175'sT'#255#166'eE'#255#128'D*'#255'\0'#28 + +#255'[/'#27#255'ECB'#149'CCCP@@@'#28'UUU'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#1'@@@'#8'W3#q[/'#27#255'\1'#29#255#150'Q1'#255#171'mN'#255#174'sU'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#15#10#8#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#4#3#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#29#19#14#255#156'iM'#255#175'uV'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV' + +#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV' + +#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#11#7#6#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'sM9'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255 + +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175 + +'tV'#255#174'rS'#255#167'fG'#255#131'G,'#255'\0'#28#255'[/'#27#255'GA?'#150 + +'CCCLGGG'#25'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'W3#k[/'#27 + +#255'\1'#29#255#149'P2'#255#169'lM'#255#174'qT'#255#175'tV'#255#175'tV'#255 + +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#9#6#4#255#0#0#0#255#0#0#0#255#0#0#0#255#136 + +'ZC'#255'T8*'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#3#255 + +'bA0'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255 + +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255 + +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255 + +#165'nR'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#10#7#5#255#175'tV'#255#175 + +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV' + +#255#175'tV'#255#175'tV'#255#175'tV'#255#174'sU'#255#173'qR'#255#166'eG'#255 + +#131'F,'#255'\0'#28#255'[/'#27#255'EA?'#145'DDDGFFF'#22'@@@'#4#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'W3#\[/'#27#255'\1'#29#255#146'P3'#255#168 + +'jM'#255#173'pT'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#4#3#2#255#0#0#0#255#0#0#0#255#21#14#10#255#173'rU'#255#173'rU'#255#152'dK' + +#255'dB1'#255'A+ '#255'D-!'#255#141']E'#255#173'rU'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173 + +'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU' + ,#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173 + +'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#169'pS'#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#139'\D'#255#173'rU'#255#173'rU' + +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255 + +#173'rU'#255#173'rU'#255#173'qT'#255#172'oR'#255#165'cF'#255#128'E+'#255'\0' + +#28#255'[/'#27#255'CBA'#132'DDD@CCC'#19'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0'@@@'#4'U2"L[/'#27#255'\1'#29#255#143'N3'#255#168'hK'#255#172'oT' + +#255#173'qU'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#1#1#1#255#0#0#0 + +#255#0#0#0#255'nI7'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173 + +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173 + +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173 + +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#2#1#1#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255'H0$'#255#173'rV'#255#173'rV'#255#173'rV' + +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255 + +#173'rV'#255#173'qU'#255#171'nQ'#255#165'dF'#255'~D+'#255'\1'#29#255'Z0'#28 + +#252'CCCzCCC9@@@'#16#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U' + +'UU'#3'T2#=[/'#27#255'\1'#29#255#140'N1'#255#166'gI'#255#171'oR'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#1#1#1#255#27#18#13#255'a@0' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU' + +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255'$'#24#18#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#31#20#15#255#173'qU'#255#173'qU'#255#173'qU'#255 + +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173 + +'qU'#255#172'pT'#255#169'lP'#255#164'aD'#255'{C*'#255'\1'#29#255'Y0'#30#247 + +'CCCoBBB2;;;'#13#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128 + +#2'V6''-[/'#27#255'\1'#29#255#137'L0'#255#165'fH'#255#170'mQ'#255#172'pT'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#166'lS'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#168'nS'#255#134'WB'#255'b@0'#255'tK' + +'9'#255#166'lS'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255 + +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#129'T@'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + ,#255#0#0#0#255#0#0#0#255#22#14#11#255#172'pU'#255#172'pU'#255#172'pU'#255#172 + +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU' + +#255#172'oT'#255#170'mP'#255#163'`C'#255'xB*'#255'\1'#29#255'Y1'#31#241'BBBd' + +'CCC*MMM'#10#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'T7*'#29 + +'[/'#27#255'\1'#29#255#134'J0'#255#165'dG'#255#169'lQ'#255#171'pU'#255#172'q' + +'W'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172 + +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#135'YD'#255'$'#24#18#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#8#5#4#255#30#20#16#255'xO='#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172 + +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255 + +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172 + +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#14#9#7#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#20#13#10#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW' + +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#171'oT'#255 + +#169'jM'#255#162'_A'#255's>'''#255'\1'#29#255'X2 '#234'CCCXDDD"@@@'#8#0#0#0#1 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'C><'#9'[/'#27#247'\1'#29#255 + +'}F-'#255#164'bE'#255#169'lO'#255#171'pT'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172 + +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255#172'qV'#255#154'eM'#255#22#15#11#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#25#17#13#255#136'ZE'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172 + +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255 + +#172'qV'#255'U7*'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#17#11#9#255#172'qV'#255#172 + +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV' + +#255#172'qV'#255#172'qV'#255#171'oT'#255#168'jM'#255#161'^@'#255'k;%'#255'\0' + +#28#255'V3#'#220'CCCLEEE'#26'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'+++'#6'[/'#28#214'\1'#29#255't@)'#255#162'`B'#255#168'jO'#255 + +#172'pV'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX' + +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255 + +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#144'_I'#255#6#4#3 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'Z;-'#255 + +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX' + +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255 + +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173 + +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#171'pV'#255#3#2#1#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'!'#22#17#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX' + +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#172'qX'#255#171'oU'#255 + +#167'hM'#255#160'[>'#255'b5!'#255'\0'#28#255'S5'''#196'EEE?CCC'#19'@@@'#4#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'Z0'#29#176'\1'#29 + +#255'k:%'#255#162'^A'#255#169'jN'#255#173'qV'#255#174'sY'#255#174'sY'#255#174 + +'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255 + +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174 + ,'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + +#255#151'dM'#255#4#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#1#1#1#255#136'YF'#255#174'sY'#255#174'sY'#255#174's' + +'Y'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255 + +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174 + +'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + +#255#174'sY'#255'5#'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'G.$'#255#174'sY'#255#174'sY'#255 + +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174 + +'sY'#255#174'sY'#255#172'pV'#255#167'gK'#255#153'X:'#255'^3'#31#255'\0'#28 + +#255'Q7+'#166'BBB2777'#14#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#2'Z0'#29#137'\0'#28#255'a5!'#255#160']>'#255#168'jN'#255 + +#173'sY'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175 + +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\' + +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255 + +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175 + +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#29#20#15#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8 + +#5#4#255#169'rX'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\' + +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255 + +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175 + +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\' + +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#156'jR'#255#1#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'yQ?'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255 + +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#174'u['#255#172'qV'#255#166 + +'gJ'#255#143'S6'#255'^2'#31#255'[/'#27#255'O;2'#130'CCC&999'#9#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'Z0'#29'a\0'#28#255 + +'^3'#31#255#153'W;'#255#168'jN'#255#174'tZ'#255#176'x_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_' + +#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255 + +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255'oL='#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255']@2'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255'Z=1'#255')'#28#22#255#26#18#14 + +#255#14#10#8#255#10#7#5#255#23#16#12#255'+'#30#23#255'E0&'#255#138'_J'#255 + +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_' + +#255#176'y_'#255'#'#24#19#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#172'w]'#255#176'y_'#255#176'y_'#255 + +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176 + +'y_'#255#175'w^'#255#172'rW'#255#165'fI'#255#134'K2'#255']1'#30#255'[/'#27 + +#255'H?:ZBBB'#27'+++'#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'X/'#29'7[/'#27#255'^2'#31#255#141'P5'#255#167'hK'#255#174 + +'sY'#255#177'x_'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255 + +#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177 + +'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255#9#6#5#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'%'#25#20#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255'bD6'#255#8 + +#6#4#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'>+"'#255#175'za'#255#177'za'#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255 + +#177'za'#255#177'za'#255#177'za'#255#136'^K'#255#0#0#0#255#0#0#0#255#0#0#0 + ,#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#16#11#9#255#177'za'#255#177 + +'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za' + +#255#177'za'#255#177'za'#255#176'x^'#255#172'qV'#255#164'cF'#255'{E,'#255']1' + +#30#255'Z0'#29#245'DDD<GGG'#18'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X?4'#7'[/'#27#243']1'#30#255'}G/'#255#165'e' + +'H'#255#174'sY'#255#178'zb'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d' + +#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255 + +#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179 + +'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d' + +#255#179'}d'#255#179'}d'#255#158'oX'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'&'#26#21#255#179'}d'#255#179'}d'#255#179'}d'#255'kK;'#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#12#8#6#255#137'_L'#255#179'}d'#255 + +#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179 + +'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#20#14#11#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'vRB'#255#179'}d' + +#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255#179'}d'#255 + +#179'}d'#255#179'}d'#255#179'}d'#255#177'y`'#255#172'pU'#255#163'aC'#255'i;&' + +#255'\1'#29#255'W2!'#206'FFF,@@@'#12#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'[/'#27#184'\1'#29#255'l<''' + +#255#164'bE'#255#173'rX'#255#179'|c'#255#180#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255'_C6'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'Q9.'#255#181#127'g'#255#181#127'g'#255#152'kW'#255#2 + +#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#3#2#2#255 + +#151'jV'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255'sPA'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#23#16#13#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181#127'g'#255#181 + +#127'g'#255#181#127'g'#255#180#127'g'#255#177'za'#255#171'nS'#255#156'[>'#255 + +'`5!'#255'\0'#28#255'T5'''#155'DDD'#30'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#28'w\0'#28#255 + +'`5!'#255#157'\?'#255#172'pU'#255#179'}d'#255#181#129'i'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255'.!'#27#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#2#1#1#255#166'va'#255#182#129'j'#255#182#129'j'#255'A.&' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#9#6#5#255#170'yd'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182 + +#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182 + +#129'j'#255#182#129'j'#255#182#129'j'#255#8#6#5#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#135'`O'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255 + +#182#129'j'#255#182#129'j'#255#181#128'h'#255#177'za'#255#169'kP'#255#139'Q7' + +#255'^3'#31#255'\0'#28#255'N9/\GGG'#18'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X.'#26'4\0'#28#255 + ,'^3'#31#255#141'S8'#255#170'mQ'#255#179'|c'#255#182#130'k'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#20#15#12#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'N8.'#255#184#132'm'#255#184#132'm'#255#184#132'm' + +#255#22#16#13#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#21#15#13#255#182#130'm'#255#184#132'm'#255#184#132 + +'m'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132 + +'m'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255'N8.'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#23#17#13#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255 + +#184#132'm'#255#184#132'm'#255#183#131'l'#255#182#129'j'#255#177'x_'#255#167 + +'hK'#255'zG/'#255']1'#30#255'Z0'#28#241'@@@(MMM'#10#0#0#0#1#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'='#31 + +#18#3'[/'#27#238']1'#30#255'{G/'#255#167'hL'#255#177'za'#255#183#131'l'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255 + +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#26#19#16#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#12#9#7#255#185#134'p'#255#185#134'p'#255#185#134'p' + +#255#185#134'p'#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'U>4'#255#185#134'p'#255#185 + +#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185 + +#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#25#18 + +#15#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255'xWI'#255#185#134'p'#255#185#134'p'#255#185#134 + +'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134 + +'p'#255#185#134'p'#255#185#134'p'#255#184#134'o'#255#182#129'j'#255#175'v\' + +#255#165'dG'#255'h;&'#255'\1'#29#255'X2 '#193'==='#25'+++'#6#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'[/'#27#170'\1'#29#255'f9%'#255#164'bG'#255#175'v]'#255#183#131 + +'l'#255#186#135'r'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137 + +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255'$'#27#23 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#129'_P'#255#186#137's'#255#186#137's'#255 + +#186#137's'#255#186#137's'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255' '#23#19#255#186 + +#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186 + +#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186 + +#137's'#255#172#127'j'#255#7#5#4#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#12#9#7#255#186#137's'#255#186#137's' + +#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's' + +#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#185#135'q' + +#255#181#129'i'#255#173'qW'#255#149'X='#255'`5!'#255'\0'#28#255'V4%'#127'333' + +#15#0#0#0#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27'O\0'#28#255'_4 '#255#144'U:' + +#255#172'qV'#255#182#130'k'#255#187#137't'#255#188#139'u'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + ,#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255'1$'#31#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255':+$'#255#188#140'v'#255#188#140 + +'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#1#1#1#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#4#3#3#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255'}]N'#255'6("' + +#255#14#11#9#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'S>5'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255 + +#188#139'u'#255#186#136'r'#255#180'~f'#255#169'kP'#255'|H1'#255'^2'#31#255'[' + +'/'#27#249'L=6+III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#5'[/'#27#235 + +']1'#30#255'wD/'#255#169'jO'#255#180#127'g'#255#187#137'u'#255#189#141'x'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255 + +#189#142'y'#255#189#142'y'#255'J7/'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#16#12#11#255#187#140'y'#255 + +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#1 + +#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#181#136'u'#255#189#142'y'#255#189#142 + +'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142 + +'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142 + +'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#11#8#7#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#1#1#1#255#181#136's'#255#189#142'y'#255#189#142'y'#255#189 + +#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189 + +#142'y'#255#189#142'y'#255#189#142'y'#255#189#141'x'#255#186#136'q'#255#177 + +'za'#255#164'dG'#255'f:&'#255'\1'#29#255'Y1'#31#186'@@@'#16'UUU'#3#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27#147'\1'#29#255'b8$'#255#160'bF'#255 + +#177'y`'#255#186#137's'#255#190#143'z'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191 + +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#162 + +'{i'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#1#1#1#255#162'{i'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255 + +#191#145'|'#255#191#145'|'#255#191#145'|'#255#2#1#1#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1 + +#1#1#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145 + +'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145 + +'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145 + +'|'#255#191#145'|'#255#5#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255'&'#29#25#255 + +#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255 + +#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255 + +#191#145'|'#255#189#142'y'#255#184#134'o'#255#174'sY'#255#143'U;'#255'`5!' + +#255'\0'#28#255'U3$`@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0'Z.'#27'5\0'#28#255'_4 '#255#137'Q8'#255#173'rX'#255#184#134'o'#255#190#144 + +'{'#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192 + +#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255 + +#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127 + +#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147 + +#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#14 + ,#11#9#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255' ' + +#24#21#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255 + +#192#147#127#255#192#147#127#255#192#147#127#255#4#3#3#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#8#6#5#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127 + +#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147 + +#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192 + +#147#127#255#192#147#127#255#192#147#127#255#1#1#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#137'iZ'#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147 + +#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192 + +#147#127#255#192#147#127#255#192#146'~'#255#189#142'y'#255#182#129'j'#255#169 + +'lP'#255'uD.'#255'^2'#31#255'[/'#28#237'NFB'#21'UUU'#3#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#211']1'#30#255'l>)'#255#167'iM' + +#255#181#127'g'#255#190#143'z'#255#193#148#128#255#194#149#130#255#194#149 + +#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194 + +#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255 + +#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130 + +#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149 + +#130#255#194#149#130#255'G60'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255'ZE<'#255#194#149#130#255#194#149#130#255#194#149#130#255 + +#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#7#6#5#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#23#17#15#255#194#149#130#255#194#149#130#255#194#149#130 + +#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149 + +#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194 + +#149#130#255#194#149#130#255#194#149#130#255#179#137'x'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'-#'#30#255#194#149#130#255#194#149#130#255#194#149#130#255#194 + +#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255 + +#194#149#130#255#194#149#130#255#194#149#130#255#192#147#127#255#188#140'v' + +#255#177'za'#255#156'_D'#255'a6#'#255'\1'#29#255'Y1'#31#153'@@@'#8#0#0#0#1#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27']\0'#28#255 + +'`5!'#255#143'V='#255#175'v]'#255#187#138'u'#255#193#149#129#255#195#152#132 + +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152 + +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195 + +#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255 + +#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133 + +#255#195#152#133#255#195#152#133#255#170#133't'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#172#133'u'#255#195#152#133#255#195#152 + +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#146 + +'rd'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'_JA'#255#195#152#133#255#195#152#133 + +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152 + +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195 + +#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#140'm`'#255#0#0 + +#0#255#0#0#0#255#6#5#4#255#186#145#127#255#195#152#133#255#195#152#133#255 + +#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133 + +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#132#255#192#147 + +#127#255#185#134'p'#255#172'pU'#255'|I2'#255'^3'#31#255'\0'#28#250'R5()UUU'#3 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3 + +'[/'#27#221']1'#30#255'oA,'#255#169'lP'#255#183#131'l'#255#192#147#127#255 + +#196#154#135#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136 + +#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155 + +#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197 + +#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255 + +#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#26#20#18#255 + ,#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#5#255#197#155#136#255#197 + +#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255 + +#197#155#136#255#28#22#19#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#3#255#193#153#134#255 + +#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136 + +#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155 + +#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197 + +#155#136#255#182#143'~'#255'=0*'#255#7#5#5#255#130'fY'#255#197#155#136#255 + +#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136 + +#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#196#154 + +#136#255#195#152#133#255#190#144'{'#255#180'~f'#255#159'bG'#255'c8%'#255'\1' + +#29#255'Z0'#30#163'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'g\0'#28#255'a6#'#255#147'Y@'#255#177 + +'za'#255#190#143'z'#255#196#154#135#255#198#157#139#255#198#157#139#255#198 + +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255 + +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157 + +#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198 + +#157#139#255'<0+'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'*!'#29#255 + +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#164#130's'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'?2,'#255#198 + +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255 + +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157 + +#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198 + +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255 + +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139 + +#255#198#157#139#255#198#156#138#255#195#152#132#255#187#138't'#255#173'sY' + +#255#127'L5'#255'^3'#31#255'\0'#28#252'U3$,'#128#128#128#2#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#7 + +'[/'#27#229'^2'#31#255'qB.'#255#171'nS'#255#185#134'p'#255#194#151#131#255 + +#198#158#140#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160 + +#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200 + +#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255 + +#200#160#142#255#200#160#142#255#200#160#142#255'9.)'#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'hSJ'#255#200#160#142#255#200#160#142#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255'6+'''#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#6#5#5#255#184#148#131#255#200#160#142#255#200#160#142#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160 + +#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200 + +#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255 + +#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142 + +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160 + +#142#255#200#160#142#255#200#160#142#255#199#159#141#255#198#157#139#255#192 + +#147#127#255#181#127'g'#255#161'dI'#255'd:&'#255'\1'#29#255'Z0'#29#171'@@@'#4 + +#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'q\1'#29#255'a6#'#255#143'W?'#255#177'za'#255 + +#191#144'|'#255#198#157#139#255#200#161#144#255#201#162#145#255#201#163#145 + +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163 + +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201 + +#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255 + +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255'=2,'#255#0#0 + ,#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255'!'#27#24#255#197#161#143#255#201#163#145#255 + +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#197#161#143 + +#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#1#1#1#255#149'zl'#255#201#163#145#255#201#163#145 + +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163 + +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201 + +#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255 + +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145 + +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163 + +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#162#145#255#200 + +#161#143#255#197#155#136#255#187#138'u'#255#173'rX'#255'|I3'#255'_4 '#255'\0' + +#28#253'W1 2'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#6'\0'#28#216'^2'#31#255 + +'i=)'#255#165'jP'#255#184#133'n'#255#196#152#134#255#201#162#145#255#202#164 + +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202 + +#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255 + +#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165 + +#148#255'E82'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#2#255#1#1#1#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'.&"'#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165 + +#148#255#146'wk'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'eRI'#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165 + +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202 + +#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255 + +#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148 + +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165 + +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202 + +#164#147#255#200#160#143#255#193#148#128#255#180'~f'#255#151'^D'#255'a7$'#255 + +'\1'#29#255'Z0'#28#156'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +'D\0'#28#255'`5!'#255#128'N8'#255#175'v]'#255#190#143'{'#255#200#159#142#255 + +#203#165#150#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151 + +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167 + +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204 + +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255 + +#204#167#151#255'N?9'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'vaW'#255 + +#204#167#151#255#160#131'w'#255'cRI'#255'WG@'#255#168#137'|'#255#204#167#151 + +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167 + +#151#255#204#167#151#255#204#167#151#255#145'wk'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'G:4'#255#204#167 + +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204 + +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255 + +#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151 + +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167 + +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204 + +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255 + +#204#167#151#255#204#167#150#255#202#165#148#255#198#155#138#255#186#137's' + +#255#171'nU'#255'oB.'#255'^2'#31#255'\0'#28#235'V2"'#21#0#0#0#1#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#169'\1'#29#255'c9&'#255#155'aH'#255 + +#182#128'j'#255#195#152#133#255#202#164#148#255#205#169#154#255#206#169#155 + +#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169 + +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#206#169#155#255#206#169#155#255#206#169#155#255'VGA'#255#0#0#0#255#0#0#0#255 + ,#0#0#0#255#5#4#4#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169 + +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#206#169#155#255#152'}r'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#2#1#1#255'vaY'#255#206#169#155#255#206#169#155#255#206#169 + +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155 + +#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169 + +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206 + +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255 + +#205#167#152#255#201#162#145#255#192#147#127#255#177'za'#255#138'T='#255'`6"' + +#255'\1'#29#255'[0'#29'e'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'[/'#27#27'\0'#28#243'^3'#31#255'pC/'#255#171'oU'#255#188#138'u' + +#255#199#158#141#255#205#169#154#255#207#171#157#255#207#172#158#255#207#172 + +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255'~i`'#255#0#0#0#255#0#0#0#255#0#0#0#255#22#18#16#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255'/''$'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#9#7#7#255 + +#164#136'~'#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#171#157#255#204 + +#167#151#255#196#153#136#255#183#131'l'#255#160'fK'#255'f;('#255']1'#30#255 + +'[/'#27#199'te^'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'[/'#27'q\0'#28#255'`6"'#255#130'P9'#255#177'x`'#255#192#146 + +#127#255#203#164#149#255#208#173#159#255#209#175#161#255#209#175#161#255#209 + +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255 + +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#199#167#153#255#0#0#0#255#0#0#0#255#0#0#0#255'.&#'#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209 + +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255 + +#209#175#161#255'*$!'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'"'#28#26#255#197#165#153#255 + +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209 + +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255 + +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161 + +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175 + +#161#255#209#175#161#255#209#175#161#255#209#174#160#255#207#171#157#255#200 + +#160#144#255#188#139'w'#255#171'pV'#255'rD0'#255'^3'#31#255'\0'#28#250'\2'#30 + +'1'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'[/'#27#1'[/'#27#184']1'#30#255'c9&'#255#148'^E'#255#182#128'j'#255#197 + +#154#136#255#206#170#155#255#210#176#163#255#211#178#164#255#211#178#165#255 + +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165 + +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178 + ,#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#12#10#9#255#0#0#0#255#0#0#0#255'MA<'#255#211#178#165#255#211#178 + +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255 + +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165 + +#255#211#178#165#255#178#150#139#255'D95'#255#9#7#7#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'VIC'#255#211#178#165#255#211#178#165 + +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178 + +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255 + +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165 + +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178 + +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211 + +#178#165#255#211#178#165#255#211#178#164#255#209#176#162#255#204#167#151#255 + +#193#148#129#255#177'x`'#255#129'P9'#255'`6"'#255'\0'#28#255'[0'#28't'#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'[/'#27#21'\0'#28#229'^2'#31#255'i?+'#255#163'jP'#255#186#136 + +'s'#255#200#160#144#255#209#174#160#255#212#180#167#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255 + +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181 + +#169#255'.''%'#255#0#0#0#255',%#'#255#200#170#159#255#213#181#169#255#213#181 + +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255 + +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#139'vo'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'.''$'#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181 + +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255 + +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169 + +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181 + +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213 + +#181#169#255#213#181#169#255#212#180#168#255#211#178#165#255#207#171#157#255 + +#197#155#137#255#182#128'j'#255#148']E'#255'c9&'#255']1'#30#255'[/'#27#179#0 + +#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'?\0'#28#252'_4 '#255'tF1'#255#172 + +'sY'#255#190#142'z'#255#203#165#150#255#211#178#164#255#213#183#170#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255 + +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#127'ng'#255'{ib'#255#214#184#172#255#214#184#172#255#214#184#172#255 + +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255' '#28#26#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#14#12#11#255#209#180#168#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255 + +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172 + +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184 + +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214 + +#184#172#255#214#184#172#255#214#184#172#255#213#182#169#255#209#176#161#255 + +#200#161#143#255#186#135'q'#255#161'gO'#255'h=*'#255'^2'#31#255'\0'#28#226'W' + +'-'#26#19#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'}\1'#29#255'`6"' + +#255'|M8'#255#175'x^'#255#192#147#127#255#205#170#154#255#213#181#169#255#215 + ,#185#173#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255 + +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216 + +#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255 + +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#187#162#151#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#2#255#180#156#146#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216 + +#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255 + +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175 + +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187 + +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216 + +#187#175#255#216#187#175#255#216#187#175#255#215#185#173#255#211#179#166#255 + +#202#165#148#255#188#139'w'#255#167'mU'#255'nC/'#255'^3'#31#255'\0'#28#251'Z' + +'.'#27';'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#2'[/'#27 + +#170'\1'#29#255'a7$'#255#130'Q<'#255#178'{c'#255#195#151#132#255#208#173#159 + +#255#215#185#173#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255 + +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178 + +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255 + +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255'.(&'#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128'oi'#255#217#189#178#255#217#189#178 + +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255 + +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178 + +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189 + +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217 + +#189#178#255#217#189#178#255#217#188#177#255#213#183#170#255#205#168#153#255 + +#191#144'|'#255#170'rZ'#255'sF2'#255'`5!'#255'\0'#28#255'Z/'#27'g'#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#6'[/'#27 + +#188']1'#30#255'c9&'#255#136'V?'#255#180'~g'#255#197#154#136#255#209#176#162 + +#255#216#187#176#255#219#192#181#255#219#192#182#255#219#193#183#255#219#193 + +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219 + +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183 + +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193 + +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219 + +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#158#138#131#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#1#1#1#255#131'sm'#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183 + +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193 + +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219 + +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255 + +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183 + +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#192 + +#182#255#218#191#180#255#215#185#173#255#207#172#156#255#193#147#128#255#174 + +'v^'#255'wJ6'#255'`6"'#255'\1'#29#255'[/'#27'~'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#12'[/'#27#203 + +']1'#30#255'c:'''#255#141'YC'#255#181#128'h'#255#198#155#138#255#210#177#164 + +#255#217#190#178#255#220#194#184#255#221#195#185#255#221#196#186#255#221#196 + +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186 + +#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196 + +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255're_'#255#0#0#0#255#0#0#0#255#4#4#4#255#160#142#134#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186 + +#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196 + +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221 + +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255 + +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186 + +#255#221#196#186#255#221#196#186#255#221#195#185#255#219#193#183#255#216#187 + +#175#255#207#172#158#255#194#148#130#255#176'x_'#255'{M8'#255'a6#'#255'\1'#29 + +#255'[/'#27#148#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#21'\0'#28#217']1'#30#255'c:''' + +#255#138'XB'#255#181#127'h'#255#197#156#137#255#211#178#164#255#218#191#180 + +#255#221#196#187#255#222#198#188#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255 + +#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189 + +#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#221#196#187#255 + +#6#6#5#255#10#9#8#255#188#167#159#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255 + +#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189 + +#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198 + +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223 + +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255 + +#222#198#188#255#221#196#186#255#217#188#177#255#208#173#159#255#193#149#129 + +#255#174'w^'#255'zM8'#255'a7$'#255'\1'#29#255'[/'#27#170'[/'#27#2#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'[/'#27' \0'#28#223']1'#30#255'c:'''#255#132'T?'#255#180 + +'~g'#255#197#155#136#255#211#178#164#255#219#193#181#255#223#198#189#255#224 + +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255 + +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201 + +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224 + +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255 + +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#134'xr'#255#205#184#176#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201 + +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224 + +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255 + +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192 + +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201 + +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224 + +#201#192#255#224#201#192#255#223#200#191#255#222#197#187#255#217#189#178#255 + +#207#172#158#255#192#147#127#255#171'u\'#255'vI6'#255'a6#'#255'\1'#29#255'[/' + +#27#179'[/'#27#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#25'\' + +'0'#28#209']1'#30#255'c9&'#255#128'Q='#255#177'{c'#255#195#151#133#255#209 + +#176#162#255#219#192#181#255#223#200#191#255#225#203#194#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196 + +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204 + +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226 + +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196 + +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204 + +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226 + +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196 + +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204 + +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226 + +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255 + +#226#204#196#255#226#204#196#255#226#203#195#255#225#202#193#255#222#198#188 + +#255#217#188#177#255#206#169#155#255#191#144'|'#255#168'qY'#255'rG3'#255'`6"' + +#255'\1'#29#255'[/'#27#159'[/'#27#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0'[/'#27#15'\0'#28#193']1'#30#255'b8%'#255'yM8'#255#170 + +'u\'#255#192#146'~'#255#207#171#156#255#217#189#178#255#223#200#191#255#226 + +#205#197#255#227#206#198#255#228#207#199#255#228#207#199#255#228#207#199#255 + +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199 + +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207 + +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228 + +#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255 + +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199 + +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207 + +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228 + +#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255 + +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199 + +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207 + +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228 + +#207#199#255#228#207#199#255#227#206#198#255#226#204#196#255#222#198#188#255 + +#215#185#173#255#202#165#148#255#187#137'u'#255#159'jR'#255'nD0'#255'`6"'#255 + +'\1'#29#255'[/'#27#137#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#8'[/'#27#175'\1'#29#255'`6"'#255'n' + +'D0'#255#158'iR'#255#187#137'u'#255#202#165#148#255#215#186#174#255#223#199 + +#190#255#227#205#198#255#229#208#201#255#229#209#202#255#229#210#202#255#229 + +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255 + +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202 + +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210 + +#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229 + +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255 + +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202 + +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210 + +#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229 + +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255 + +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202 + +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#209 + +#202#255#228#207#201#255#226#204#197#255#221#196#187#255#212#180#168#255#198 + +#157#140#255#183#130'l'#255#143'^G'#255'g>+'#255'_4 '#255'\1'#29#254'[/'#27 + +'q'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/'#27#132'\1'#29#254'_4 '#255'g>+' + +#255#140'[F'#255#181#129'j'#255#198#155#138#255#211#178#165#255#221#195#185 + +#255#227#204#197#255#230#209#203#255#230#212#205#255#231#212#206#255#231#212 + +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231 + +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255 + +#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206 + +#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212 + +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231 + +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255 + +#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206 + +#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212 + +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231 + +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255 + +#231#212#206#255#231#211#206#255#230#211#205#255#229#209#201#255#225#203#194 + +#255#219#191#181#255#208#173#159#255#193#149#129#255#173'w`'#255'~Q='#255'c:' + +''''#255'^2'#31#255'\0'#28#238'[/'#27'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'[/'#27'F\0'#28#234'^2'#31#255'c:'''#255'zN:'#255#168's['#255 + +#190#143'{'#255#205#167#152#255#217#187#177#255#225#201#193#255#229#209#202 + +#255#232#213#207#255#232#214#209#255#233#215#210#255#233#215#210#255#233#215 + +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233 + +#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255 + +#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210 + +#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215 + +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233 + +#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255 + +#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210 + +#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215 + +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233 + +#215#210#255#232#215#209#255#232#214#208#255#231#212#206#255#228#207#201#255 + +#223#198#189#255#213#182#170#255#200#160#144#255#186#136'r'#255#158'iR'#255 + +'pE2'#255'a7$'#255']1'#30#255'\0'#28#201'[/'#27#31#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#26'\0'#28#193']1'#30#255'`' + +'6"'#255'iA.'#255#142']H'#255#179#128'h'#255#196#153#135#255#210#176#163#255 + +#220#194#184#255#227#205#198#255#231#212#206#255#233#216#211#255#234#217#212 + +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218 + +#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234 + +#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255 + +#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213 + +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218 + +#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234 + +#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255 + +#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213 + +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#217 + +#212#255#234#216#211#255#233#215#210#255#230#211#205#255#226#203#195#255#218 + +#190#179#255#206#170#155#255#192#146#127#255#172'v`'#255#129'S?'#255'e<)'#255 + +'_4 '#255'\1'#29#255'[/'#27#143'[/'#27#5#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/'#27#127'\0'#28 + +#248'^3'#31#255'c:'''#255'sI6'#255#158'kT'#255#186#136's'#255#200#160#143#255 + ,#213#180#169#255#222#197#187#255#229#208#201#255#232#214#209#255#234#218#213 + +#255#235#219#215#255#236#220#215#255#236#220#216#255#236#220#216#255#236#220 + +#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236 + +#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255 + +#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216 + +#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220 + +#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236 + +#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255 + +#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216 + +#255#236#220#216#255#236#220#215#255#235#219#215#255#234#217#212#255#232#213 + +#207#255#227#205#198#255#219#193#183#255#209#176#162#255#196#153#136#255#181 + +#129'l'#255#145'`K'#255'lB0'#255'a7$'#255']1'#30#255'\0'#28#231'[/'#27'O'#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'$\0'#28#185'\1'#29#255'`5!'#255 + +'f=*'#255#128'S>'#255#166'r['#255#188#139'v'#255#201#161#145#255#213#181#169 + +#255#223#197#189#255#229#209#202#255#233#216#210#255#235#219#215#255#236#221 + +#217#255#237#222#219#255#238#223#220#255#238#223#220#255#238#223#220#255#238 + +#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255 + +#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220 + +#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223 + +#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238 + +#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255 + +#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220 + +#255#237#222#219#255#237#222#218#255#236#221#217#255#235#218#214#255#232#214 + +#208#255#228#206#199#255#220#193#184#255#210#176#163#255#197#155#137#255#184 + +#134'o'#255#155'iR'#255'uI7'#255'c:'''#255'^3'#31#255'\1'#29#252'[/'#27#144 + +'[/'#27#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[' + +'/'#27'U\0'#28#228']1'#30#255'`6"'#255'g>,'#255#127'R?'#255#164'qZ'#255#188 + +#139'v'#255#200#159#144#255#211#179#166#255#220#194#184#255#228#206#199#255 + +#232#214#209#255#235#219#215#255#237#222#219#255#238#225#221#255#239#225#222 + +#255#239#225#222#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226 + +#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239 + +#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255 + +#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223 + +#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226 + +#223#255#239#226#223#255#239#226#223#255#239#225#222#255#238#225#221#255#238 + +#224#220#255#237#222#218#255#235#218#214#255#231#212#206#255#226#203#195#255 + +#218#191#180#255#209#174#160#255#197#154#136#255#184#132'o'#255#154'hR'#255 + +'uK8'#255'e;('#255'_4 '#255'\1'#29#255'\0'#28#197'[/'#27'/'#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +#12'[/'#27#134'\0'#28#242'^2'#31#255'a5#'#255'g>+'#255'|Q='#255#160'lV'#255 + +#184#133'p'#255#196#152#134#255#207#170#156#255#216#187#175#255#224#200#192 + +#255#230#210#203#255#234#216#211#255#236#220#216#255#238#224#220#255#239#226 + +#223#255#240#227#225#255#240#228#225#255#240#228#225#255#241#229#226#255#241 + +#229#226#255#241#229#226#255#241#229#226#255#241#229#227#255#241#229#227#255 + +#241#229#227#255#241#229#227#255#241#229#227#255#241#229#227#255#241#229#227 + +#255#241#229#227#255#241#229#227#255#241#229#226#255#241#229#226#255#241#229 + ,#226#255#241#229#226#255#240#228#225#255#240#228#225#255#240#227#224#255#239 + +#225#222#255#238#223#220#255#236#220#215#255#233#215#210#255#228#207#201#255 + +#222#196#187#255#213#183#170#255#204#166#150#255#192#147#127#255#179#127'i' + +#255#150'fO'#255'tI7'#255'e;('#255'`5!'#255']1'#30#255'\0'#28#223'[/'#27'`[/' + +#27#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#17'[/'#27#127'\0'#28#238']1' + +#30#255'`6"'#255'e<)'#255'rI6'#255#142'_J'#255#170'wa'#255#188#140'w'#255#199 + +#158#141#255#208#173#159#255#216#186#175#255#222#196#187#255#227#206#198#255 + +#232#213#208#255#235#219#214#255#237#222#218#255#238#224#220#255#239#226#223 + +#255#240#227#225#255#241#229#226#255#242#230#228#255#242#230#228#255#242#231 + +#229#255#242#231#229#255#242#231#229#255#242#231#229#255#242#231#229#255#242 + +#231#229#255#242#231#229#255#242#230#228#255#241#229#227#255#241#229#226#255 + +#240#227#225#255#239#225#222#255#238#224#220#255#236#221#217#255#234#218#213 + +#255#231#211#206#255#226#204#196#255#220#194#184#255#214#183#171#255#206#169 + +#155#255#196#153#135#255#185#135'r'#255#162'q['#255#134'XD'#255'lC1'#255'c:' + +''''#255'_4 '#255']0'#30#255'\0'#28#217'[/'#27'`[/'#27#4#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#13'[/'#27'w\0'#28#233 + +']1'#30#255'_4 '#255'b8%'#255'h?-'#255'zN;'#255#149'dP'#255#170'xa'#255#187 + +#137't'#255#194#150#131#255#202#164#148#255#210#176#163#255#216#187#175#255 + +#220#194#184#255#224#200#192#255#228#207#199#255#231#212#206#255#234#217#211 + +#255#236#220#215#255#236#222#217#255#237#222#219#255#238#223#220#255#238#223 + +#220#255#238#224#220#255#238#223#220#255#237#223#219#255#237#223#218#255#236 + +#221#217#255#235#219#215#255#233#216#210#255#230#211#204#255#227#204#197#255 + +#223#199#190#255#219#192#183#255#215#185#173#255#208#173#159#255#200#160#144 + +#255#192#146#127#255#183#133'o'#255#164's\'#255#142']J'#255'rI7'#255'f=*'#255 + +'a6#'#255'^3'#31#255'\1'#29#255'\0'#28#210'[/'#27'X[/'#27#2#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'[/'#27#5'[/'#27'P\0'#28#173'\1'#29#249']1'#30#255'`5!'#255'c9&'#255'g' + +'>,'#255'qH6'#255#133'YE'#255#153'iT'#255#172'yd'#255#186#136'q'#255#191#144 + +'}'#255#196#153#136#255#202#162#146#255#207#171#156#255#211#178#165#255#214 + +#183#171#255#216#186#175#255#217#188#177#255#218#190#179#255#219#191#182#255 + +#219#192#182#255#219#192#181#255#218#189#179#255#217#187#177#255#215#185#173 + +#255#213#182#169#255#210#176#163#255#205#169#154#255#200#160#144#255#195#151 + +#133#255#190#142'z'#255#183#132'o'#255#167'u_'#255#148'eP'#255#127'S@'#255'm' + +'E2'#255'f=*'#255'b7%'#255'_4 '#255']1'#30#255'\0'#28#235'[/'#27#147'[/'#27 + +'5'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[' + ,'/'#27#18'[/'#27'i\0'#28#199'\1'#29#254']1'#30#255'_4 '#255'a6#'#255'd9('#255 + +'g>,'#255'oF3'#255'}Q>'#255#138'[G'#255#149'fQ'#255#160'oZ'#255#170'xa'#255 + +#176'}h'#255#180#128'l'#255#183#133'p'#255#186#136's'#255#188#138'u'#255#188 + +#139'v'#255#187#138'u'#255#186#135'r'#255#183#132'n'#255#178#128'j'#255#174 + +'|e'#255#168'v`'#255#158'mW'#255#146'bN'#255#133'YE'#255'yM;'#255'mC1'#255'g' + +'>+'#255'c9&'#255'`6"'#255'^3'#31#255']1'#30#255'\0'#28#248'\0'#28#173'[/'#27 + +'O[/'#27#5#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#20'[/'#27'V\0'#28#153 + +'\0'#28#220'\1'#29#255']1'#30#255'^3'#31#255'`5!'#255'a7$'#255'c9&'#255'e;(' + +#255'f=*'#255'g>,'#255'i@.'#255'jB0'#255'mE2'#255'qH5'#255'tJ7'#255'qG5'#255 + +'lC1'#255'jA0'#255'h?-'#255'g>+'#255'e<)'#255'd:('#255'c9&'#255'a6#'#255'`5!' + +#255'^2'#31#255']1'#30#255'\1'#29#252'\0'#28#201'[/'#27#134'[/'#27'C[/'#27#8 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'[/'#27#31'[/'#27'_[/'#27#138'\0'#28#176'\0'#28#213'\0'#28 + +#248'\1'#29#255'\1'#29#255'\1'#29#255']1'#30#255'^2'#31#255'^2'#31#255'^3'#31 + +#255'^3'#31#255'^3'#31#255'^2'#31#255']1'#30#255']1'#30#255'\1'#29#255'\1'#29 + +#255'\1'#29#255'\0'#28#241'\0'#28#203'\0'#28#165'[/'#27#127'[/'#27'N[/'#27#15 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'[/'#27#2'[/'#27'![/'#27'E[/'#27'U[/'#27'a[/'#27'm[/'#27'y[/'#27 + +#134'\0'#29#141'[/'#27#130'[/'#27'v[/'#27'j[/'#27'^[/'#27'Q[/'#27'=[/'#27#23 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#128#0#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#224#0#0#3#255#255#255#255#255 + +#255#255#255#255#255#255#254#0#0#0#0'?'#255#255#255#255#255#255#255#255#255 + +#255#240#0#0#0#0#7#255#255#255#255#255#255#255#255#255#255#128#0#0#0#0#0#255 + +#255#255#255#255#255#255#255#255#254#0#0#0#0#0#0'?'#255#255#255#255#255#255 + +#255#255#248#0#0#0#0#0#0#15#255#255#255#255#255#255#255#255#224#0#0#0#0#0#0#3 + +#255#255#255#255#255#255#255#255#128#0#0#0#0#0#0#0#255#255#255#255#255#255 + +#255#254#0#0#0#0#0#0#0#0'?'#255#255#255#255#255#255#252#0#0#0#0#0#0#0#0#31 + +#255#255#255#255#255#255#240#0#0#0#0#0#0#0#0#7#255#255#255#255#255#255#224#0 + +#0#0#0#0#0#0#0#3#255#255#255#255#255#255#128#0#0#0#0#0#0#0#0#1#255#255#255 + +#255#255#255#0#0#0#0#0#0#0#0#0#0#127#255#255#255#255#254#0#0#0#0#0#0#0#0#0#0 + +'?'#255#255#255#255#252#0#0#0#0#0#0#0#0#0#0#31#255#255#255#255#248#0#0#0#0#0 + +#0#0#0#0#0#15#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0#7#255#255#255#255#224#0 + +#0#0#0#0#0#0#0#0#0#3#255#255#255#255#192#0#0#0#0#0#0#0#0#0#0#1#255#255#255 + +#255#128#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#127 + +#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0#127#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0 + +'?'#255#255#252#0#0#0#0#0#0#0#0#0#0#0#0#31#255#255#248#0#0#0#0#0#0#0#0#0#0#0 + +#0#15#255#255#240#0#0#0#0#0#0#0#0#0#0#0#0#7#255#255#240#0#0#0#0#0#0#0#0#0#0#0 + +#0#7#255#255#224#0#0#0#0#0#0#0#0#0#0#0#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0 + +#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0 + +#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#127#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#127#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?' + +#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#31#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#7#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3 + +#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#3#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15 + +#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#127#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#127#255#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#128#0#0#0#0#0#0#0#0 + +#0#0#0#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#1#255#255#192#0#0#0#0#0#0#0#0 + +#0#0#0#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0#0#3#255#255#224#0#0#0#0#0#0#0#0 + +#0#0#0#0#7#255#255#224#0#0#0#0#0#0#0#0#0#0#0#0#15#255#255#240#0#0#0#0#0#0#0#0 + +#0#0#0#0#15#255#255#248#0#0#0#0#0#0#0#0#0#0#0#0#31#255#255#248#0#0#0#0#0#0#0 + +#0#0#0#0#0'?'#255#255#252#0#0#0#0#0#0#0#0#0#0#0#0#127#255#255#252#0#0#0#0#0#0 + +#0#0#0#0#0#0#255#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#0#0#0 + +#0#0#0#0#0#0#0#1#255#255#255#255#128#0#0#0#0#0#0#0#0#0#0#3#255#255#255#255 + +#128#0#0#0#0#0#0#0#0#0#0#7#255#255#255#255#192#0#0#0#0#0#0#0#0#0#0#15#255#255 + +#255#255#224#0#0#0#0#0#0#0#0#0#0#31#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0 + +#31#255#255#255#255#248#0#0#0#0#0#0#0#0#0#0'?'#255#255#255#255#252#0#0#0#0#0 + +#0#0#0#0#0#127#255#255#255#255#254#0#0#0#0#0#0#0#0#0#1#255#255#255#255#255 + +#255#0#0#0#0#0#0#0#0#0#3#255#255#255#255#255#255#128#0#0#0#0#0#0#0#0#7#255 + +#255#255#255#255#255#224#0#0#0#0#0#0#0#0#15#255#255#255#255#255#255#240#0#0#0 + +#0#0#0#0#0#31#255#255#255#255#255#255#248#0#0#0#0#0#0#0#0#127#255#255#255#255 + +#255#255#254#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#128#0#0#0#0#0#0 + +#3#255#255#255#255#255#255#255#255#192#0#0#0#0#0#0#7#255#255#255#255#255#255 + +#255#255#240#0#0#0#0#0#0#31#255#255#255#255#255#255#255#255#252#0#0#0#0#0#0 + +#127#255#255#255#255#255#255#255#255#255#0#0#0#0#0#3#255#255#255#255#255#255 + +#255#255#255#255#224#0#0#0#0#15#255#255#255#255#255#255#255#255#255#255#252#0 + +#0#0#0#127#255#255#255#255#255#255#255#255#255#255#255#192#0#0#7#255#255#255 + +#255#255#255#255#255#255#255#255#255#254#0#1#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255'('#0#0#0'@'#0#0#0#128#0#0#0#1#0' '#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'III'#7'III'#7 + +'333'#5#128#128#128#2#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#6'DDD' + +#15'FFF'#22'EEE'#26'DDD'#30'III#GGG/DDD<DDD@CCC5FFF(BBB'#31'BBB'#27'@@@'#24 + +'GGG'#18'999'#9#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128 + +#128#2'999'#9'GGG'#18'DDD'#30'CCC9FFF_DDD'#127'EDD'#146'DDC'#159'EED'#170'DD' + +'C'#175'DDC'#178'DDC'#179'EED'#177'EED'#173'DCC'#164'EDD'#151'BBB'#136'CCCoC' + +'CCHCCC&CCC'#23';;;'#13'@@@'#4#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'777'#14'DDD"EEEFCCCoEDD'#150'DD' + +'C'#175'FFC'#187'GGC'#195'IFC'#200'LD<'#208'OB:'#215'RA6'#221'WA0'#226'TA3' + +#223'PB9'#218'MD<'#212'JD@'#206'IGD'#200'HGD'#197'EED'#191'DDC'#180'CCC'#163 + +'DDD'#128'DDDVGGG/III'#21'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#128#128#128#2'FFF'#11'BBB#CCCXEED'#149'EEB'#179'GFC'#191'MC<'#208'W?.'#228 + +'d=%'#246'i?!'#252'j?'#30#255'l?'#31#255'nA'#31#255'sF!'#253'zL%'#253'wG#' + +#253'oB!'#254'm@'#31#255'k>'#30#255'j>'#31#253'g>#'#249'[>+'#235'PB8'#218'HE' + +'C'#203'FEC'#195'EED'#184'DDD'#166'DDDqEEE4@@@'#20'@@@'#4#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1 + +'999'#9'BBB'#31'CCCPEDD'#143'FFE'#182'NB:'#211'Z?-'#231'g>#'#249'l?'#31#255 + +'zK$'#253#150']*'#255#165'h.'#255#172'm0'#255#180's2'#255#186'x4'#255#189'{4' + +#255#192#127'5'#255#190'|4'#255#187'x4'#255#182'u3'#255#175'p1'#255#167'j/' + +#255#156'b+'#255#131'R&'#254'oB '#255'i>!'#253'_>)'#238'S@6'#222'FEB'#203'DD' + +'C'#190'DDD'#164'CCCkCCC.PPP'#16'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'CCC'#19'BBBBDDD'#136'EED'#179'LA9' + +#209'`=&'#243'k?'#31#255#127'N&'#254#154'`,'#255#176'q1'#255#191'~5'#255#200 + +#138'7'#255#207#145'8'#255#210#149'9'#255#213#153'9'#255#217#157':'#255#219 + +#160';'#255#221#162';'#255#220#162':'#255#217#158':'#255#215#155':'#255#211 + +#151'9'#255#208#146'8'#255#203#141'8'#255#194#129'6'#255#183'v4'#255#163'f.' + +#255#137'U('#254'qC"'#254'f<!'#250'T?4'#224'GDB'#202'CCB'#188'DDD'#158'BBB`>' + +'>>!+++'#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'BBB'#27'CC' + +'C[CCB'#165'LD='#203']<('#238'j> '#255#135'R('#254#176'p3'#255#193#128'7'#255 + +#202#139'9'#255#211#151';'#255#220#162'<'#255#227#170'>'#255#232#176'?'#255 + +#234#180'?'#255#237#182'?'#255#239#185'@'#255#241#187'@'#255#242#188'A'#255 + +#241#187'@'#255#240#185'A'#255#238#183'@'#255#235#180'@'#255#233#178'?'#255 + +#229#173'>'#255#222#165'='#255#215#156'<'#255#205#144':'#255#196#133'8'#255 + +#185'x5'#255#152'^-'#255'oC"'#254'd<#'#247'QA7'#220'FFE'#200'CCC'#180'CCC}AA' + +'A/UUU'#9#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'CCC&DDDpECC'#180'X<,'#232'i=' + +'!'#254#128'O('#254#170'l3'#255#194#130':'#255#210#150'>'#255#220#163'?'#255 + +#227#171'A'#255#234#180'B'#255#240#187'D'#255#242#190'D'#255#244#193'E'#255 + +#246#194'D'#255#247#195'E'#255#248#197'E'#255#249#197'E'#255#249#198'E'#255 + +#249#197'E'#255#248#196'E'#255#247#195'E'#255#246#195'E'#255#245#194'D'#255 + +#243#191'D'#255#240#188'C'#255#236#183'C'#255#230#174'B'#255#223#165'@'#255 + +#215#156'?'#255#200#137';'#255#182'u6'#255#146'[,'#255'm@!'#254'`:%'#244'KA;' + +#211'CCC'#189'CCC'#144'BBB>PPP'#16#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'@@@4CCC'#133 + +'HD@'#192'_9$'#244'rE%'#254#164'h3'#255#191#127';'#255#206#146'?'#255#219#163 + +'C'#255#232#178'F'#255#238#185'G'#255#241#189'H'#255#244#193'H'#255#246#195 + +'I'#255#247#196'I'#255#247#197'J'#255#247#197'I'#255#247#198'I'#255#248#198 + +'I'#255#248#198'I'#255#248#197'I'#255#248#198'I'#255#248#198'I'#255#248#198 + +'I'#255#247#197'I'#255#247#197'I'#255#247#196'I'#255#246#196'I'#255#245#194 + +'H'#255#242#190'H'#255#239#187'H'#255#235#182'G'#255#224#168'D'#255#211#153 + +'A'#255#196#134'='#255#177'q7'#255#133'Q)'#254'e: '#253'N?7'#218'DDC'#195'CC' + +'C'#160'FFFP@@@'#20#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'III'#7'FFF3CCC'#145'LB;'#204'd:"'#250'|L('#254#180's9'#255 + +#202#143'A'#255#216#159'F'#255#228#174'I'#255#236#184'K'#255#241#191'L'#255 + +#243#193'M'#255#244#194'M'#255#244#195'M'#255#245#196'M'#255#245#195'M'#255 + +#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255 + +#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255 + +#245#195'M'#255#245#195'M'#255#245#196'M'#255#245#195'M'#255#244#194'M'#255 + +#243#194'M'#255#242#192'M'#255#238#186'L'#255#232#179'J'#255#220#165'F'#255 + +#208#150'C'#255#190#127'<'#255#147'[.'#255'h< '#255'S=1'#228'EED'#199'DDD' + +#168'BBBUGGG'#18#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'@@@'#4'FFF(EEE'#134'P?5'#212'e:!'#254#137'U,'#254#186'z='#255#208#150'E'#255 + +#224#171'L'#255#233#181'O'#255#238#187'P'#255#240#191'P'#255#242#192'Q'#255 + +#242#193'Q'#255#242#193'Q'#255#242#193'P'#255#242#193'Q'#255#242#193'Q'#255 + +#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255 + ,#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255 + +#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255 + +#242#193'Q'#255#242#193'Q'#255#241#192'Q'#255#239#189'P'#255#234#184'O'#255 + +#228#175'M'#255#215#159'I'#255#194#132'@'#255#160'd3'#255'k?"'#254'X:*'#236 + +'FDC'#201'CCC'#164'AAAG;;;'#13#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U' + +'UU'#3'BBB'#31'CCCvO=3'#211'f:'#31#255#150']2'#255#190#128'A'#255#211#155'I' + +#255#226#175'Q'#255#234#185'S'#255#237#188'T'#255#238#190'T'#255#239#191'U' + +#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U' + +#255#239#191'U'#255#239#191'U'#255#235#189'S'#255'|d,'#255'N>'#28#255'4*'#19 + +#255'=1'#22#255'WE'#31#255'w_*'#255#173#139'='#255#239#191'U'#255#239#191'U' + +#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U' + +#255#239#191'U'#255#239#191'U'#255#239#190'T'#255#238#189'U'#255#236#187'S' + +#255#230#179'R'#255#217#162'L'#255#198#138'D'#255#170'l8'#255'pC$'#254'Z8''' + +#240'DBB'#197'CCC'#153'FFF:@@@'#8#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#22 + +'BBBeJ?9'#195'b8 '#254#150']2'#255#194#133'E'#255#213#158'N'#255#226#176'T' + +#255#233#185'W'#255#236#187'W'#255#236#188'X'#255#236#188'X'#255#236#188'X' + +#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X' + +#255#236#188'X'#255'cO%'#255#4#3#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#18#14#7#255'A4'#24#255#134'k2' + +#255#218#174'R'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X' + +#255#236#188'X'#255#236#188'X'#255#236#187'W'#255#234#186'W'#255#229#180'U' + +#255#218#165'P'#255#201#143'H'#255#173'o<'#255'k>#'#254'S;-'#231'CCC'#193'CC' + +'C'#141'DDD-fff'#5#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#12'DDDKFA='#179'`7 '#251#137'S-' + +#255#192#131'E'#255#214#161'Q'#255#226#176'W'#255#231#183'Y'#255#233#185'[' + +#255#233#186'['#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z' + +#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255'L<'#29#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#7#3#255'P' + +'?'#31#255#203#161'N'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234 + +#185'Z'#255#233#186'['#255#232#183'Z'#255#228#178'Y'#255#219#167'T'#255#201 + +#143'K'#255#163'g8'#255'f: '#255'O=4'#222'DDD'#188'CCCzBBB'#27#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U' + +'UU'#3'GGG$D@@'#147'\6#'#245'{I*'#254#185'{C'#255#211#157'R'#255#225#175'Z' + +#255#229#181'\'#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']' + +#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']' + +#255#230#183']'#255#138'm8'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#24#20#10#255'x_0' + +#255#226#181'['#255#230#183']'#255#230#183']'#255#230#183']'#255#230#181'\' + +#255#227#177'['#255#217#165'V'#255#196#136'J'#255#151']4'#255'b8 '#254'K@9' + +#214'CCC'#175'AAAJ...'#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#16'CCC\V6'''#228'nA&'#254#178'tA'#255#205 + +#151'R'#255#221#172'\'#255#226#179'_'#255#228#180'_'#255#228#180'_'#255#228 + +#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228 + +#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#17#13#7#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255'H9'#30#255#224#178']' + +#255#228#180'_'#255#228#180'_'#255#227#179'^'#255#224#175']'#255#213#160'W' + +#255#190#129'H'#255#137'T/'#255'^4 '#252'FB?'#201'CCC'#140'DDD"'#0#0#0#3#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'FFF,J=7' + +#175'`4'#30#255#165'g;'#255#200#144'Q'#255#217#166'\'#255#223#176'`'#255#225 + +#177'`'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225 + +#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225 + +#177'a'#255#218#171'^'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#11#9#5#255#196#154'U'#255#225#177'a'#255#225#177 + +'`'#255#224#177'a'#255#220#171'^'#255#208#154'W'#255#184'{F'#255'nA%'#254'T8' + +'*'#233'DDD'#180'CCCX333'#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'CCC'#19'CCCjY5#'#239'~J,'#254#191#132'M'#255#213#162']'#255 + ,#220#171'a'#255#221#173'c'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255 + +#222#174'b'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255 + +#222#174'b'#255#222#174'b'#255#222#174'b'#255#154'yC'#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#15#11#6 + +#255#218#172'`'#255#222#174'b'#255#222#174'b'#255#221#173'b'#255#217#167'_' + +#255#202#146'T'#255#156'a9'#255'^4'#30#254'G@='#206'DDD'#151'>>>)@@@'#4#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'AAA+L;4'#188'b6 '#254#170 + +'l@'#255#206#152'Z'#255#217#168'b'#255#219#171'd'#255#219#171'd'#255#219#171 + +'d'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171 + +'d'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171 + +'d'#255#219#171'd'#255#26#20#12#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'oW3'#255#219#171'd'#255#219 + +#171'd'#255#219#171'd'#255#218#169'c'#255#212#161'_'#255#187#127'L'#255'uD)' + +#254'W6('#238'CCC'#182'CCC[III'#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'@@@'#12'EBBS[3'#31#244#134'O/'#255#192#134'Q'#255#212#162'b'#255#215 + +#167'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216 + +#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216 + +#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#198 + +#154'\'#255#5#4#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'!'#25#15#255#216#168'd'#255#216#168'd'#255#216#168 + +'d'#255#216#168'd'#255#214#166'd'#255#202#147'Y'#255#161'e='#255'^2'#29#255 + +'J?:'#208'CCC'#137'EEE'#26#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'C' + +'CC'#23'O9/'#171'`3'#31#254#174'pD'#255#203#150']'#255#212#163'e'#255#213#164 + +'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164 + +'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164 + +'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164 + +'e'#255#173#133'R'#255#3#2#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#22#17#11#255#213#164'e'#255#213#164'e'#255#213#164 + +'e'#255#213#164'e'#255#213#164'f'#255#209#158'a'#255#187#128'O'#255'yD)'#254 + +'W4$'#241'BBB'#169'DDD1@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF(W4' + +'$'#229'{E)'#255#191#134'T'#255#207#157'c'#255#210#160'f'#255#210#160'f'#255 + +#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255 + +#210#160'f'#255#152'tJ'#255'[E,'#255'K9$'#255'{]<'#255#196#149'_'#255#210#160 + +'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#159'yM' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'"' + +#26#17#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210 + +#160'f'#255#209#160'e'#255#199#146']'#255#156'_;'#255'\1'#28#254'FBA'#188'FF' + +'FXNNN'#13#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FFF'#11'F@=T\/'#28#253#151'\9'#255 + +#200#147'_'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255 + +#207#156'e'#255#207#156'e'#255#207#156'e'#255#178#135'W'#255'$'#27#17#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'N:&'#255#207#156'e'#255#207 + +#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#3#2#1#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'uX9'#255#207#156'e'#255#207 + +#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#207#157'e'#255#204 + +#153'b'#255#180'wK'#255'a4'#30#254'M;3'#216'DDD'#132'==='#25#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0'CCC'#19'N9.'#159'^2'#30#254#176'rI'#255#202#150'c'#255#203 + +#153'e'#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203 + +#153'f'#255#163'zQ'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#29#22#15#255#203#153'f'#255#203#153'f'#255#203#153 + +'f'#255#203#153'f'#255#14#10#7#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + ,#0#0#255#4#3#2#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#153'f' + +#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#152'e'#255#190#134'X' + +#255'yC)'#254'V5&'#239'DDD'#165'FFF('#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0 + +'GGG'#25'V4%'#212's@&'#254#186#128'U'#255#199#148'd'#255#200#148'd'#255#200 + +#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255#198#146'd'#255#12#9 + +#6#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#138'fE'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255 + +#15#11#7#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'&'#28#19#255#145'kH'#255 + +#200#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255 + +#200#148'd'#255#200#148'd'#255#200#148'd'#255#194#141'^'#255#146'W6'#255'[0' + +#28#254'EBB'#178'CCC9UUU'#6#0#0#0#0#0#0#0#0#0#0#0#0'JAA'#31'\1'#29#249#140'P' + +'2'#255#190#135'\'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143 + +'c'#255#196#143'c'#255#196#143'c'#255'>-'#31#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'&' + +#28#19#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#25#18#12#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1 + +#255'*'#31#21#255'kM6'#255#187#137'_'#255#196#143'c'#255#196#143'c'#255#196 + +#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196 + +#143'c'#255#196#143'c'#255#196#143'c'#255#194#141'b'#255#170'kF'#255'\0'#28 + +#254'L<5'#203'CCCH333'#10#0#0#0#0#0#0#0#0#0#0#0#1'K3+@[/'#27#255#160'`>'#255 + +#190#136'_'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255 + +#191#137'`'#255#189#135'`'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#30#21#15#255 + +#191#137'`'#255#191#137'`'#255#191#137'`'#255'aF1'#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#5#3#2#255#165'vS'#255#191#137'`' + +#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`' + +#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`' + +#255#191#137'`'#255#191#137'`'#255#191#136'`'#255#178'vQ'#255'h7 '#253'Q8,' + +#220'DDDV;;;'#13#0#0#0#0#0#0#0#0'UUU'#3'R4''^[/'#27#255#169'hF'#255#187#131 + +']'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132 + +'^'#255'uS;'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'{W>'#255#187#132'^'#255 + +#187#132'^'#255#187#132'^'#255#185#130'^'#255#19#14#10#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#158'oO'#255#187#132'^'#255#187#132'^' + +#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^' + +#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^' + +#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#181'{V'#255'r<"'#255'T6''' + +#228'BBBd@@@'#16#0#0#0#0#0#0#0#0'UUU'#6'T5''}_2'#30#253#171'kI'#255#183'}Z' + +#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255'. '#23#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#1#1#0#255'S9)'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z' + +#255#183'~Z'#255#173'xV'#255#31#21#15#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'b' + +'C0'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z' + +#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255 + +#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#181'zV'#255'zA%'#255'X4$' + +#237'DDDqCCC'#19#0#0#0#0#0#0#0#0'@@@'#8'U4%'#149'f5'#31#252#172'mK'#255#180 + +'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#6#4#3 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#19#13#9#255#153'gK'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX' + +#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255'{S<'#255'+'#29#21#255#7 + +#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1 + +#255'gF3'#255#180'yX'#255#180'yX'#255#180'yX'#255#139']D'#255'+'#29#21#255#8 + +#6#4#255#8#6#4#255#16#11#8#255'W:*'#255#178'wV'#255#180'yX'#255#180'yX'#255 + +#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#179'yV'#255#131 + +'F+'#255'[3!'#245'CCCyIII'#21#0#0#0#0#0#0#0#0'UUU'#6'X3"'#165'n:"'#253#172'p' + +'O'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#173'uU' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1 + +#0#0#255'P6'''#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW' + ,#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255 + +#177'wW'#255#177'wW'#255#158'jM'#255'W;+'#255''''#26#19#255'"'#23#17#255'%' + +#25#18#255'W:+'#255#167'qS'#255#177'wW'#255#177'wW'#255#177'wW'#255'@+'#31 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#3#2#1#255 + +#149'dI'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177 + +'wW'#255#177'vV'#255#139'M0'#255'[1'#30#250'DDDpCCC'#19#0#0#0#0#0#0#0#0'UUU' + +#3'Y1'#31#182'v>%'#255#172'oQ'#255#175'tW'#255#175'tW'#255#175'tW'#255#175't' + +'W'#255#175'tW'#255'}S?'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#26#17#13#255#150'cK'#255#175'tW'#255#175'tW'#255#175'tW'#255 + +#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175 + +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW' + +#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255 + +#175'tW'#255'dC2'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#9#6#4#255#169'pU'#255#175'tW'#255#175'tW'#255#175't' + +'W'#255#175'tW'#255#175'tW'#255#174'sU'#255#145'S6'#255']0'#28#254'DBBd@@@' + +#16#0#0#0#0#0#0#0#0#0#0#0#0'Z0'#30#175'v=%'#255#171'nP'#255#174'rV'#255#174 + +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255'L2&'#255#0#0#0#255'/'#31#23#255 + +'}R>'#255' '#21#16#255'!'#22#17#255#139'[E'#255#174'rV'#255#174'rV'#255#174 + +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV' + +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255 + +#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174 + +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255'?*'#31#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'6#'#27 + +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#173'qT'#255 + +#145'S7'#255'\1'#29#254'AAAV;;;'#13#0#0#0#0#0#0#0#0#0#0#0#0'Z1'#30#150'n;$' + +#252#169'jM'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +#149'bI'#255'@* '#255#170'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +'G/#'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#24#16#12#255#172'qU'#255#172'qU'#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#171'oS'#255#138'N3'#255'\2'#31#249'DDDG999'#9#0#0#0#0#0 + +#0#0#0#0#0#0#0'X1!|g7#'#250#167'gI'#255#172'pT'#255#172'qU'#255#172'qU'#255 + +#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#172'qU'#255'P5('#255')'#27#20#255#27#18#13#255'5#'#26#255'pJ8'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU' + +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255 + +#172'qU'#255#172'qU'#255#162'jO'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#9#6#4#255#172'qU'#255#172 + +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#170'mR'#255#131'I.'#255'[4"'#241 + +'FFF7UUU'#6#0#0#0#0#0#0#0#0#0#0#0#0'Y1!`b5 '#251#164'cG'#255#172'pU'#255#173 + +'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW' + +#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255 + +#173'rW'#255'}S?'#255#9#6#5#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#16#11#8#255#152'dM'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255 + +#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173 + +'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255'$'#24#18#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2#255#173'r' + +'W'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#170'mQ'#255'|C*'#255 + +'W4$'#229'CCC&'#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0'X5!A^2'#31#254#162'bE'#255 + +#173'rV'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175 + +'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY' + +#255#175'tY'#255'{Q?'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#14#9#7#255#173'tY'#255#175'tY'#255#175'tY'#255 + +#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175 + +'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#132'XC'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#21 + +#14#11#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#174'tY'#255#170'm' + +'P'#255't?('#254'U5&'#203'@@@'#24#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X0'#24' ^2' + +#31#255#156'\A'#255#175'v\'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`' + +#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255 + ,#177'y`'#255#177'y`'#255#177'y`'#255#11#8#6#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#136']J'#255#177 + +'y`'#255#177'y`'#255'7%'#30#255#9#6#5#255#13#9#7#255#16#11#9#255#26#18#14#255 + +#139'_K'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177 + +'y`'#255#18#12#9#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'<)!'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#176 + +'x^'#255#169'kP'#255'j<&'#253'U4%'#168';;;'#13#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0'^2'#29#234#136'O4'#255#176'x^'#255#180'~f'#255#180'~f'#255#180'~f' + +#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255 + +#180'~f'#255#180'~f'#255#180'~f'#255#146'gS'#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#139'bO'#255#170'x`'#255#20#14#11#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255']A4'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255 + +#180'~f'#255'qO@'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#1#1#0#255#165't^'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255 + +#178'zb'#255#162'dH'#255'_3'#31#254'R6)c@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0'[/'#29#153'r?)'#252#174'sZ'#255#182#129'j'#255#183#131'l'#255#183 + +#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183 + +#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255'ZA5' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#5#3#3#255#179#127'j'#255'uTE'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'{XI'#255#183#131'l' + +#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#20#15#12#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255':)"'#255#183#131'l'#255 + +#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#179'|c'#255#140 + +'R9'#255'\2'#31#248'@@6'#28#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'[/'#29'E`5 '#252#166'iO'#255#183#131'l'#255#186#136'q'#255#186#136'q'#255 + +#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255 + +#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255'\D8'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255'oQC'#255#186#136'q'#255'X@6'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#12#9#7#255#186#136'q'#255#186 + +#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#148'lZ'#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#169'|g'#255#186#136'q'#255#186 + +#136'q'#255#186#136'q'#255#186#136'q'#255#185#134'q'#255#177'y`'#255'tB+'#254 + +'W2!'#194'III'#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@'#0#4'^3' + +#30#245#144'W='#255#184#134'o'#255#189#141'x'#255#189#141'x'#255#189#141'x' + +#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x' + +#255#189#141'x'#255#189#141'x'#255#189#141'x'#255'tWJ'#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'('#30#26#255 + +#189#141'x'#255#189#141'x'#255'?/('#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#187#139'v'#255#189#141 + +'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#172#128 + +'m'#255'_G<'#255#1#0#0#255#0#0#0#255'-"'#28#255#189#141'x'#255#189#141'x'#255 + +#189#141'x'#255#189#141'x'#255#189#141'x'#255#186#137's'#255#171'oU'#255'a6"' + +#253'T5$jUUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\/' + +#27#170'vD,'#252#181#128'h'#255#190#144'{'#255#192#146'~'#255#192#146'~'#255 + +#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255 + +#192#146'~'#255#192#146'~'#255#192#146'~'#255#186#142'z'#255#1#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255#186#142'z' + +#255#192#146'~'#255#192#146'~'#255'=.('#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#192#146'~'#255#192 + +#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192 + +#146'~'#255#192#146'~'#255#0#0#0#255#0#0#0#255#167#127'n'#255#192#146'~'#255 + +#192#146'~'#255#192#146'~'#255#192#146'~'#255#191#145'}'#255#186#137's'#255 + +#149'[A'#255'^1'#31#250'F:.'#22#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'\.'#28'H`5 '#252#164'jP'#255#190#143'z'#255#194#151#131 + +#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151 + +#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194 + +#151#131#255#27#21#18#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255' '#25#21#255#194#151#131#255#194#151#131#255#194#151#131#255'7*%' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#12#9#8#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151 + +#131#255#194#151#131#255#194#151#131#255#194#151#131#255#190#149#129#255#0#0 + ,#0#255'0% '#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131 + +#255#194#151#131#255#192#147#127#255#180'~f'#255'q@+'#252'Z0'#29#180#0#0#0#2 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0']0' + +#28#199'{H2'#252#184#134'o'#255#196#153#134#255#197#156#137#255#197#156#137 + +#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156 + +#137#255#197#156#137#255#197#156#137#255#197#156#137#255'G81'#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'WE='#255#197#156#137#255#197 + +#156#137#255#191#152#133#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#135'k^'#255#197#156#137#255#197 + +#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255 + +#197#156#137#255#197#156#137#255#16#12#11#255#174#138'y'#255#197#156#137#255 + +#197#156#137#255#197#156#137#255#197#156#137#255#197#155#136#255#191#145'|' + +#255#151'_F'#255'^3'#31#253'T2!-'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[0'#29'5_4 '#254#161'hP'#255#195#152#132 + +#255#200#161#143#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161 + +#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200 + +#161#144#255'xaW'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1 + +#255#171#138'{'#255#200#161#144#255#200#161#144#255#127'f\'#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255')!'#30#255 + +#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144 + +#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#153'{n' + +#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161 + +#144#255#198#156#138#255#181#128'h'#255'l>*'#252'Z1'#30#159#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0'^0'#27#173'uE/'#249#186#136'r'#255#201#162#145#255#203#165#150#255#203#165 + +#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203 + +#165#150#255#203#165#150#255#203#165#150#255#163#132'x'#255#0#0#0#255#0#0#0 + +#255#26#21#19#255',$!'#255'-%!'#255#156'~s'#255#203#165#150#255#203#165#150 + +#255#203#165#150#255'@4/'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#4#3#3#255#186#151#138#255#203#165#150#255#203#165 + +#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203 + +#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255 + +#203#165#150#255#203#165#150#255#203#165#150#255#203#164#149#255#195#152#132 + +#255#146'\D'#255'_3'#31#247'R3'#30#25#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z-'#30'"^4 '#252#155 + +'cK'#255#196#153#136#255#206#169#155#255#207#171#156#255#207#171#156#255#207 + +#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255 + +#207#171#156#255#203#167#152#255#0#0#0#255#0#0#0#255#193#159#145#255#207#171 + +#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207 + +#171#156#255'E94'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#15#12#11#255#182#150#137#255#207#171#156#255#207#171#156#255#207#171#156 + +#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171 + +#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207 + +#171#156#255#207#171#156#255#206#170#155#255#201#162#145#255#178'}f'#255'h<(' + +#250'[0'#28#129#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0']1'#29#130'f:&'#250#171'u' + +'^'#255#202#164#148#255#210#176#163#255#210#177#164#255#210#177#164#255#210 + +#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255 + +#210#177#164#255#2#1#1#255#27#22#21#255#210#177#164#255#210#177#164#255#210 + +#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255 + +#210#177#164#255'I=8'#255#6#5#4#255#0#0#0#255#0#0#0#255#0#0#0#255'''!'#31#255 + +#206#175#162#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164 + +#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177 + +#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210 + +#177#164#255#210#176#163#255#206#170#155#255#188#139'w'#255'zI4'#252'^2'#29 + +#222']/'#23#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'^1'#29#181'oA-' + +#249#182#132'n'#255#208#173#159#255#213#182#169#255#213#183#170#255#213#183 + +#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213 + +#183#170#255#12#10#9#255#159#136#127#255#213#183#170#255#213#183#170#255#213 + +#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255 + +#213#183#170#255#213#183#170#255#139'xo'#255#0#0#0#255#0#0#0#255'% '#30#255 + +#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170 + +#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183 + ,#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213 + +#183#170#255#213#183#170#255#211#178#165#255#196#152#134#255#136'T?'#254'`1 ' + +#243'U+'#28'$'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U+'#21#12 + +']2'#30#218'zK5'#251#192#146#127#255#212#180#168#255#216#187#176#255#217#188 + +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217 + +#188#177#255'o`Z'#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188 + +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217 + +#188#177#255#217#188#177#255#27#24#22#255#0#0#0#255#9#8#7#255#209#180#171#255 + +#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177 + +#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188 + +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217 + +#188#177#255#215#185#173#255#202#163#147#255#152'cM'#255'`5 '#252'X.'#27'B'#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#23'!_' + +'3 '#241#135'V@'#254#197#155#137#255#215#185#173#255#219#193#183#255#220#194 + +#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220 + +#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255 + +#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184 + +#255#220#194#184#255#4#4#4#255#13#11#11#255#197#173#164#255#220#194#184#255 + +#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184 + +#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194 + +#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#183#255#218 + +#190#179#255#205#169#154#255#165'pY'#255'b8$'#252'[/'#27'h'#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Y1'#28'?_' + +'3!'#249#132'T?'#252#193#148#130#255#215#186#174#255#223#198#189#255#223#200 + +#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223 + +#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255 + +#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191 + +#255#199#179#171#255#215#192#183#255#223#200#191#255#223#200#191#255#223#200 + +#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223 + +#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255 + +#223#200#191#255#223#200#191#255#223#199#190#255#219#192#183#255#203#165#150 + +#255#158'kS'#255'c9%'#251']0'#30#147#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z-'#25'3_3'#30 + +#234'wI5'#250#185#138'v'#255#215#186#174#255#225#203#194#255#227#205#197#255 + +#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197 + +#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205 + +#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227 + +#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255 + +#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197 + +#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#226#204 + +#196#255#220#194#183#255#200#159#143#255#144'_H'#254'a6"'#253'\1'#30'y'#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\3'#31#25'^2'#29#207'nB.'#249#175'~i'#255 + +#213#182#169#255#225#202#193#255#230#209#203#255#230#211#205#255#230#211#205 + +#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211 + +#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230 + +#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255 + +#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205 + +#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#210 + +#204#255#227#205#198#255#219#191#181#255#193#149#131#255#131'R='#251'_4 '#247 + +'Z0'#26'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'` '#8']0' + +#28#169'e:'''#250#148'aL'#255#196#153#136#255#220#193#183#255#229#209#202#255 + +#233#216#210#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211 + +#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216 + +#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234 + +#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255 + +#234#216#211#255#234#216#211#255#234#216#211#255#233#216#211#255#231#212#206 + ,#255#224#200#192#255#207#171#156#255#168'va'#255'rE1'#249'^3'#31#230'Y,'#28 + +'.'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0'^1'#29'h`3'#31#237'nA/'#249#158'mW'#255#203#165#150#255#224#201#192 + +#255#232#213#208#255#235#219#215#255#237#222#218#255#237#222#218#255#237#222 + +#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237 + +#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255 + +#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218 + +#255#236#220#216#255#233#216#211#255#228#206#200#255#213#182#170#255#177#131 + +'n'#255'}M:'#250'a6"'#253']1'#29#155'U1'#24#21#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#23#11 + +']1'#29'~`5!'#246'tF5'#249#166'u`'#255#202#164#148#255#221#195#186#255#230 + +#210#203#255#234#218#213#255#238#224#220#255#240#227#224#255#240#227#225#255 + +#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225 + +#255#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225#255#239#225 + +#222#255#236#220#215#255#232#213#207#255#225#203#194#255#210#176#164#255#183 + +#138'u'#255#133'UA'#252'c9&'#254'^2'#30#178'\.'#26''''#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U1'#24#21']0'#30#147'`7"'#251'jA-'#249#133'UA' + +#253#169'zf'#255#201#162#146#255#220#194#184#255#230#211#205#255#233#215#210 + +#255#234#217#212#255#236#220#215#255#237#222#218#255#238#223#220#255#237#222 + +#219#255#236#220#216#255#234#219#213#255#233#216#211#255#231#213#206#255#225 + +#203#194#255#209#174#160#255#181#136'u'#255#145'`L'#255'sG4'#249'c9&'#255'_2' + +#30#198'].'#28'7'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0'U+'#28#18'\.'#27'^_1'#30#179'c7$'#248'h?,'#251#127 + +'Q;'#251#148'dN'#255#163't_'#255#175#129'n'#255#186#143'~'#255#198#157#141 + +#255#204#167#151#255#201#161#145#255#191#149#132#255#179#135'u'#255#167'ye' + +#255#153'iT'#255#136'WC'#254'pE2'#249'c9&'#255'_3'#31#212'Z/'#27'|].'#29','#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U9'#28#9'\.'#26'N^0'#29#157'`' + +'4 '#203'c6#'#230'c7%'#249'd:('#255'f=*'#255'i?-'#252'g>+'#255'e;('#255'd9&' + +#253'b7$'#237'a5!'#214'_1'#30#180'\/'#26'lX,'#26#29#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'`0 '#16'[1'#24'*].'#27'B]1'#29'4\3'#31#25'UU'#0#3#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#248#15#255 + +#255#255#255#255#254#0#0#127#255#255#255#255#240#0#0#7#255#255#255#255#192#0 + +#0#1#255#255#255#255#0#0#0#0#255#255#255#252#0#0#0#0'?'#255#255#248#0#0#0#0 + +#31#255#255#240#0#0#0#0#7#255#255#192#0#0#0#0#3#255#255#128#0#0#0#0#1#255#255 + +#128#0#0#0#0#0#255#255#0#0#0#0#0#0#127#254#0#0#0#0#0#0#127#252#0#0#0#0#0#0'?' + +#252#0#0#0#0#0#0#31#248#0#0#0#0#0#0#31#248#0#0#0#0#0#0#15#240#0#0#0#0#0#0#15 + ,#240#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#3#192 + +#0#0#0#0#0#0#3#192#0#0#0#0#0#0#3#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0 + +#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0 + +#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0 + +#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#3#192#0#0#0#0#0#0#3 + +#224#0#0#0#0#0#0#3#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#240 + +#0#0#0#0#0#0#15#240#0#0#0#0#0#0#15#248#0#0#0#0#0#0#31#248#0#0#0#0#0#0#31#252 + +#0#0#0#0#0#0'?'#252#0#0#0#0#0#0#127#254#0#0#0#0#0#0#127#254#0#0#0#0#0#0#255 + +#255#0#0#0#0#0#1#255#255#128#0#0#0#0#3#255#255#192#0#0#0#0#7#255#255#224#0#0 + +#0#0#15#255#255#240#0#0#0#0#31#255#255#248#0#0#0#0'?'#255#255#254#0#0#0#0#127 + +#255#255#255#0#0#0#1#255#255#255#255#192#0#0#7#255#255#255#255#240#0#0#31#255 + +#255#255#255#254#0#0#255#255#255#255#255#255#248#31#255#255#255#255#255#255 + +#255#255#255#255#255'('#0#0#0'0'#0#0#0'`'#0#0#0#1#0' '#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'333'#5'UUU'#6'III'#7'@@@'#8'@@@'#8'III'#7 + +'UUU'#6'333'#5'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@' + +#4'@@@'#8'@@@'#16'DDD1BBBMCCC_FCCrDBB'#129'FDD'#133'CCCvCCCcDDDRDDD<FFF'#22 + +'333'#10'333'#5#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'FFF'#22'CCCEDAA|CCB'#173'FEC'#194'IGC'#198 + +'KE?'#204'QD:'#211'TC4'#218'SD6'#216'OD<'#209'JD@'#201'HGD'#197'FEC'#195'DDC' + +#184'DDD'#139'EEEUDDD"999'#9#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#1'+++'#6'FFF'#22'BBBaDDC'#175'JEA'#198'TB5'#218'a>('#240'l@!'#252'qE!' + +#253'yJ$'#252#129'R&'#252#138'X)'#253#134'T('#253'}N%'#252'uG#'#252'oC"'#253 + +'h=#'#248'Z>.'#230'OC;'#211'FEC'#198'DDC'#187'BBB|CCC&999'#9#0#0#0#1#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#2'<<<'#17'CCCWEED'#170'OB9'#211'd=&'#244'qE"'#253#137'V)'#253 + +#164'h.'#255#186'y3'#255#194#130'5'#255#198#135'6'#255#203#140'7'#255#207#145 + +'8'#255#205#143'7'#255#201#137'7'#255#196#132'6'#255#192#127'5'#255#177'r1' + +#255#152'_+'#254'{L%'#252'k?"'#251'[>-'#233'IEA'#203'EDD'#184'DDDq<<<'#30'@@' + +'@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0'@@@'#4'BBB#EDD'#146'KB<'#205'a='''#242'yK&'#252#166'i/'#255#192#128'6' + +#255#205#143'9'#255#217#159'<'#255#226#169'>'#255#230#173'>'#255#232#176'>' + +#255#235#180'?'#255#237#182'@'#255#236#181'?'#255#234#178'>'#255#231#175'>' + +#255#228#171'>'#255#223#165'<'#255#211#150':'#255#199#136'8'#255#182'v5'#255 + +#146'\,'#253'k@"'#252'W?1'#227'GFE'#199'CCC'#171'???=@@@'#8#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#7'DDD8ECB'#170'[>,'#234'sF$' + +#252#160'e0'#255#196#133';'#255#216#158'@'#255#227#170'A'#255#234#180'C'#255 + +#241#189'D'#255#245#193'E'#255#246#195'F'#255#247#195'F'#255#247#196'E'#255 + +#248#197'F'#255#248#197'E'#255#247#195'F'#255#247#194'F'#255#246#194'E'#255 + +#244#192'E'#255#238#184'C'#255#230#176'C'#255#223#166'A'#255#207#147'='#255 + +#182'w7'#255#138'V+'#253'h>#'#250'NA9'#215'CCC'#186'@@@[;;;'#13#0#0#0#1#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#8'EEENGC?'#189'b;%'#245#139'W-'#253#190 + +#127';'#255#212#153'B'#255#227#172'F'#255#239#186'I'#255#242#191'J'#255#244 + +#193'K'#255#246#195'K'#255#247#196'K'#255#247#196'K'#255#247#196'L'#255#247 + +#196'L'#255#247#196'L'#255#247#196'L'#255#247#196'L'#255#247#196'K'#255#247 + +#196'K'#255#246#196'K'#255#245#195'J'#255#243#193'J'#255#242#190'J'#255#234 + +#180'H'#255#221#165'E'#255#202#142'@'#255#173'o5'#255'oC$'#252'T?3'#225'CCC' + +#193'AAAy@@@'#16#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'+++'#6'DDD@K@<'#198'g<"'#250#154 + +'a2'#254#200#141'B'#255#222#168'J'#255#234#183'N'#255#239#189'P'#255#242#192 + +'P'#255#242#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193 + +'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193 + ,'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#242#193 + +'P'#255#242#193'P'#255#241#191'P'#255#238#187'N'#255#229#176'L'#255#214#158 + +'G'#255#183'y;'#255'yJ)'#252'[=,'#236'CCB'#195'EEEoFFF'#11#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3 + +'CCC.J?;'#190'g=#'#252#167'k7'#255#205#147'H'#255#226#173'P'#255#235#186'T' + +#255#238#189'T'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U' + +#255#239#190'U'#255#239#190'U'#255#191#152'D'#255'A4'#23#255'>1'#22#255'D6' + +#24#255'H9'#26#255'RA'#29#255#146's4'#255#228#182'Q'#255#239#190'U'#255#239 + +#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#238#190'U'#255#237 + +#187'T'#255#232#182'S'#255#217#162'M'#255#191#129'B'#255#132'R-'#253'[9('#240 + +'DDD'#191'CCCW@@@'#8#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#1'>>>'#29'F@='#169'd9#'#250#165'i8'#255#208#151'L'#255 + +#226#174'U'#255#233#184'Y'#255#235#186'Y'#255#235#187'Y'#255#235#187'Y'#255 + +#235#187'Y'#255#235#187'Y'#255#235#187'Y'#255#235#187'Y'#255'<0'#23#255#1#1#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#0#0#0#255#6 + +#5#2#255'*!'#16#255'w^-'#255#227#181'W'#255#235#187'Y'#255#235#187'Y'#255#235 + +#186'Y'#255#234#186'Y'#255#231#181'X'#255#218#164'Q'#255#194#133'E'#255'{J*' + +#252'U=/'#230'CCC'#186'EEE?@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'333'#10'DAAw_9%'#244#150'^4'#254#204#148'N'#255#225#175 + +'Y'#255#230#181'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183 + +'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255'hR*'#255#1#1#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#1#1#0#255#1#1#0#255'*!'#17#255#164#130'B'#255#231#183'\' + +#255#231#183'\'#255#231#182']'#255#228#179'['#255#217#165'V'#255#185'|C'#255 + +'nA'''#252'N>5'#219'CCC'#163'@@@'#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#128#128#128#2'@@@,W8*'#227#132'P/'#253#196#139'M'#255#220 + +#170'['#255#226#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227 + +#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#4#3#2 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0 + +#255#7#6#3#255#178#141'J'#255#227#179'_'#255#227#179'_'#255#225#176'^'#255 + +#211#158'U'#255#174'q?'#255'c9"'#252'GA>'#203'BBB]III'#7#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FFF'#11'H>:'#150'e:#'#252#186'~H'#255#214#164'\' + +#255#222#174'a'#255#223#175'b'#255#223#175'b'#255#223#175'b'#255#223#175'b' + +#255#223#175'b'#255#223#175'b'#255#223#175'b'#255#223#175'b'#255#188#148'S' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#1#1#1#255#154'yC'#255#223#175'b'#255#223#175'a'#255 + +#220#171'`'#255#204#150'U'#255#145'Y5'#254'Y8('#238'CCC'#175'FFF'#29#0#0#0#1 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'AAA3Z7'''#236#148'\6'#255#207#154'Z' + +#255#218#170'b'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd' + +#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd' + +#255#211#165'`'#255#6#5#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#219#171'd'#255#219 + +#171'd'#255#219#171'd'#255#215#166'`'#255#189#129'M'#255'h=$'#252'H>;'#207'E' + +'EEhIII'#7#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#7'K<5'#137'h;$'#252#188#130 + +'O'#255#213#164'b'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167 + +'d'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167 + +'d'#255#215#167'd'#255#215#167'd'#255#168#130'N'#255#1#1#1#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#200#155']'#255#215#167'd'#255#215#167'd'#255#215#166'd'#255#205#153']' + +#255#153'`:'#255'[6$'#243'CCC'#164';;;'#13#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'7' + +'77'#14'Z5%'#229#150'[8'#255#203#150'^'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211 + +#162'e'#255#142'mD'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#145'pF'#255#211#162'e'#255#211#162 + +'e'#255#211#162'e'#255#210#159'd'#255#189#131'R'#255'f9#'#252'I@;'#202'===.' + +#128#128#128#2#0#0#0#0#0#0#0#0#128#128#128#2'D??4]3'#30#252#181'yM'#255#206 + +#155'd'#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#205 + +#155'f'#255'S?('#255#1#1#1#255#1#0#0#255#3#2#1#255#15#11#7#255#169#128'S'#255 + ,#207#157'f'#255#207#157'f'#255#207#157'f'#255#16#12#8#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#186#141'\' + +#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#207#157'e'#255#201#148'`' + +#255#135'O0'#254'R9-'#226'BBBeIII'#7#0#0#0#0#0#0#0#0'UUU'#6'O8/'#141'o>''' + +#251#193#139'['#255#203#151'e'#255#203#152'e'#255#203#152'e'#255#203#152'e' + +#255#203#152'e'#255#23#17#11#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#1#1#1#255#153'rL'#255#203#152'e'#255#203#152'e'#255',!'#22#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255' '#24#16 + +#255#203#152'e'#255#203#152'e'#255#203#152'e'#255#203#152'e'#255#203#152'e' + +#255#202#150'd'#255#165'jC'#255'\3!'#247'DDD'#151'MMM'#10#0#0#0#0#0#0#0#0'@@' + +'@'#8'Z6%'#206#142'T5'#255#195#142'a'#255#198#145'c'#255#198#145'c'#255#198 + +#145'c'#255#198#145'c'#255'W@,'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255'%'#27#19#255#198#145'c'#255#198#145'c'#255'U>+' + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#1#1#1#255#27#20#13#255'vW;' + +#255#198#145'c'#255#198#145'c'#255#198#145'c'#255#198#145'c'#255#198#145'c' + +#255#198#145'c'#255#198#145'c'#255#184'}S'#255'`4 '#252'FA>'#183'@@@'#12#0#0 + +#0#0#0#0#0#0'999'#9']2'#30#243#166'gD'#255#192#138'`'#255#192#139'a'#255#192 + +#139'a'#255#192#139'a'#255#190#137'a'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#4#255#192#139'a'#255#192#139 + +'a'#255#129']B'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'Q;)'#255#192#139'a' + +#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a' + +#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#188#132'[' + +#255'u@'''#252'M;3'#212'999'#18#0#0#0#0#0#0#0#0'FFF'#11'^1'#29#250#174'oK' + +#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255'vS:'#255#1#1 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255 + +'S:)'#255#186#131'\'#255#186#131'\'#255#184#129'\'#255'('#28#20#255#1#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255'Q9('#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186 + +#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186 + +#131'\'#255#186#131'\'#255#186#130'['#255#131'I-'#255'Q9-'#221'FFF!'#0#0#0#1 + +#0#0#0#0'M33'#20'_2'#30#251#173'pN'#255#180'{X'#255#180'{X'#255#180'{X'#255 + +#180'{X'#255'-'#30#22#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#2#1#1#255'dE1'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255 + +#180'{X'#255'O6&'#255#2#1#1#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'G0#'#255#180'{X'#255#180'{X'#255#178'{X'#255'hH3'#255'U:)'#255 + +'mK5'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X' + +#255#180'{X'#255#139'P3'#255'U7)'#231'BBB2UUU'#3#0#0#0#0'T1&,c5 '#249#174'rQ' + +#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#8#5#4#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#1#0#0#255#27#18#13#255#164'nQ'#255#178'wW'#255#178 + +'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW' + +#255#142'_F'#255'H0#'#255#20#13#10#255#25#16#12#255'9'''#28#255'lI5'#255#178 + +'wW'#255#178'wW'#255'kG4'#255#1#1#1#255#1#1#0#255#1#0#0#255#1#0#0#255#3#2#1 + +#255'zQ<'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#149 + +'W9'#255'Z5%'#238'DDD-'#128#128#128#2#0#0#0#0'Y3 Bj8#'#248#173'qS'#255#175't' + +'W'#255#175'tW'#255#175'tW'#255#175'tW'#255#1#0#0#255#1#1#1#255#0#0#0#255#0#0 + +#0#255#5#3#3#255'cB2'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175 + +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW' + +#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255 + +#173'rU'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1 + +#1#255#152'eL'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#155'[>' + +#255'\4"'#244'@@@'#28#0#0#0#1#0#0#0#0'X0!3g7"'#246#172'oR'#255#174'rV'#255 + +#174'rV'#255#174'rV'#255#166'lR'#255#7#5#3#255#131'VA'#255#155'fM'#255'oI7' + +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255 + +#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174 + +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV' + +#255#153'dL'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255'<'''#29#255#174'rV'#255#174'rV'#255#174'rV'#255#173'qU'#255#151'Y' + +'='#255']6%'#239'333'#15#0#0#0#0#0#0#0#0'O1'''#25'b3'#31#247#168'jN'#255#172 + +'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU' + +#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#136'XD'#255 + ,'U7*'#255'^=/'#255'kE5'#255#170'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255 + +#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172 + +'oU'#255#172'oU'#255#5#3#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'!'#21#16#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oT'#255 + +#143'R7'#255'Y6('#225'@@@'#12#0#0#0#0#0#0#0#0'333'#5'_2'#31#248#167'hL'#255 + +#172'qW'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172 + +'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255':&'#30#255#1#0#0#255 + +#1#1#0#255#1#1#1#255#1#1#0#255#4#2#2#255#133'WD'#255#172'qX'#255#172'qX'#255 + +#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172 + +'qX'#255#172'qX'#255'E.$'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#30#20#15#255#172'qX'#255#172'qX'#255#172'qX'#255#172'pV'#255 + +#134'K2'#255'V8)'#199'999'#9#0#0#0#0#0#0#0#0#0#0#0#1'_3'#30#239#164'fJ'#255 + +#175'w]'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255#175 + +'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255'hF7'#255#1#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#4#255#175'w^'#255#175'w^'#255'{TB' + +#255'X;/'#255']?2'#255#127'VD'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w' + +'^'#255#165'qY'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1 + +#255'fF7'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'v\'#255'{D-'#253'S5(' + +#154'333'#5#0#0#0#0#0#0#0#0#0#0#0#0'a3'#30#200#149'Z?'#255#179'|c'#255#179'}' + +'e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e' + +#255#179'}e'#255#179'}e'#255#19#13#11#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#2#1#1#255#179'}e'#255'E0'''#255#1#0#0#255#1#1#0#255 + +#1#1#0#255#0#0#0#255'R:/'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255 + +'.!'#26#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#177'}e'#255#179 + +'}e'#255#179'}e'#255#179'}e'#255#175'v\'#255'g8$'#251'W7*O'#0#0#0#1#0#0#0#0#0 + +#0#0#0#0#0#0#0'[0'#29'lyD-'#249#181#128'i'#255#183#131'l'#255#183#131'l'#255 + +#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255 + +#183#131'l'#255#183#131'l'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255'"'#25#20#255#183#131'l'#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255'B/'''#255#183#131'l'#255#183#131'l'#255 + +#183#131'l'#255#169'yd'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255'#'#25#21 + +#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#167'lQ'#255 + +'^3'#31#248'@@@'#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Y1'#30#26'b5 '#244#178'z' + +'c'#255#187#138't'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138 + +'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#2#2#1#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#170'~j'#255#177 + +#130'o'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#3 + +#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255'jNB'#255#11 + +#8#7#255#0#0#0#255#0#0#0#255#152'p`'#255#187#138'u'#255#187#138'u'#255#187 + +#138'u'#255#186#136'r'#255#144'W?'#255']6#'#193'333'#5#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0'`4'#31#217#160'gN'#255#190#143'{'#255#191#145'}'#255#191 + +#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191 + +#145'}'#255#191#145'}'#255#19#14#12#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255'7*$'#255#191#145'}'#255#164'|k'#255#1#1#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#191#145'}'#255#191#145'}'#255 + +#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#0#0#0#255#30#23 + +#20#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#187#138 + +'t'#255'p>('#249'Y2#U'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +'huB+'#244#190#142'z'#255#195#152#132#255#195#152#132#255#195#152#132#255#195 + +#152#132#255#195#152#132#255#195#152#132#255#195#152#132#255#195#152#132#255 + +'A3,'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#183#142'|'#255 + +#195#152#132#255#138'k]'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#9#7#6#255#195#152#132#255#195#152#132#255#195#152#132#255#195 + +#152#132#255#195#152#132#255#195#152#132#255#1#1#1#255#160'}m'#255#195#152 + +#132#255#195#152#132#255#195#152#132#255#194#150#131#255#167'pW'#255'`4 '#240 + +'M33'#10#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@'#0#4'`3'#30#229 + +#164'nU'#255#197#156#137#255#199#159#141#255#199#159#141#255#199#159#141#255 + +#199#159#141#255#199#159#141#255#199#159#141#255#199#159#141#255'x`U'#255#1#1 + +#1#255#0#0#0#255#0#0#0#255#0#0#0#255#18#14#13#255#199#159#141#255#199#159#141 + +#255' '#26#23#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255 + +#139'oc'#255#199#159#141#255#199#159#141#255#199#159#141#255#199#159#141#255 + +#199#159#141#255#199#159#141#255'^KC'#255#199#159#141#255#199#159#141#255#199 + +#159#141#255#199#159#141#255#192#147#127#255'rB-'#249'\1 k'#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\.'#28'Sn>('#243#194#149#131 + ,#255#202#165#148#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165 + +#149#255#203#165#149#255#203#165#149#255#169#138'|'#255#0#0#0#255#1#1#1#255 + +#16#13#11#255#23#19#17#255#171#139'~'#255#203#165#149#255#203#165#149#255#3#3 + +#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'*"'#31#255#203#165 + +#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203 + +#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255 + +#203#165#149#255#201#162#145#255#163'mU'#255'_3'#31#227'U'#0#0#3#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'a3'#30#213#153 + +'eM'#254#204#167#151#255#207#172#158#255#207#172#158#255#207#172#158#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#205#170#156#255#0#0#0#255'<1.' + +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172 + +#158#255#20#16#15#255#1#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'?40'#255#207 + +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255 + +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158 + +#255#207#172#158#255#207#171#156#255#192#147#127#255'k<'''#244'Z.'#29'L'#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +'^/'#27'&b5!'#240#174'{f'#255#209#176#162#255#212#180#167#255#212#180#167#255 + +#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#6#5#5#255 + +#179#151#140#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167 + +#255#212#180#167#255#212#180#167#255'gXR'#255#0#0#0#255#0#0#0#255'gXR'#255 + +#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167 + +#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180 + +#167#255#212#180#167#255#211#179#166#255#202#162#146#255#127'M7'#248'`2'#31 + +#169#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0'[/'#26'Fg:#'#242#190#145#127#255#214#184#172#255#216 + +#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255 + +'k]X'#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216 + +#187#176#255#216#187#176#255#216#187#176#255'E<8'#255#0#0#0#255'>63'#255#216 + +#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255 + +#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176 + +#255#216#187#176#255#216#187#175#255#210#176#163#255#147'_H'#252'`4'#31#210 + +'U++'#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\0'#29'trB-'#242#198#157#140#255#218#191 + +#180#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221 + +#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255 + +#221#195#185#255#221#195#185#255#221#195#185#255',''%'#255'920'#255#221#195 + +#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221 + +#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255 + +#221#195#185#255#220#194#184#255#213#183#170#255#162'oW'#255'b5 '#232'].'#23 + +#22#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'_1'#30#138'l>)'#242#187#143'|' + +#255#221#196#186#255#225#202#193#255#225#203#194#255#225#203#194#255#225#203 + +#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225 + +#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255 + +#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194 + +#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203 + +#194#255#224#201#192#255#212#180#168#255#149'aK'#252'a5!'#230']2'#25')'#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#28'\d9$'#241#172 + +'|h'#255#222#197#187#255#228#206#200#255#230#209#203#255#230#209#203#255#230 + +#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255 + +#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203 + +#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209 + +#203#255#230#209#203#255#230#209#203#255#229#209#202#255#226#204#197#255#208 + +#173#159#255#131'R;'#245'a3'#31#207'Y3'#26#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#28'7a5!'#236#137'WB'#248#201 + +#163#148#255#229#210#202#255#233#215#210#255#234#217#212#255#234#217#212#255 + +#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212 + +#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217 + +#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#216#211#255#231 + +#212#206#255#221#195#185#255#174#128'm'#255'm>*'#242'`1'#29#163'f33'#5#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0'b'''#20#13'`2'#29#140'd8$'#241#151'hR'#251#211#179#167#255#233#215 + +#210#255#236#220#215#255#237#222#219#255#238#225#221#255#238#225#221#255#238 + +#225#221#255#238#225#221#255#238#225#221#255#238#225#221#255#238#225#221#255 + +#238#225#221#255#238#225#221#255#238#223#220#255#236#221#217#255#234#219#213 + +#255#227#205#198#255#188#146#128#255'wH2'#242'b5 '#219'].'#27'B'#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X1'#29#26'a3'#30#168'f:$'#242#134'T?' + +#246#179#136'v'#255#214#183#172#255#235#218#214#255#238#225#221#255#239#226 + +#223#255#240#227#224#255#240#227#225#255#240#227#225#255#239#226#223#255#239 + +#225#222#255#238#224#220#255#226#204#196#255#199#161#145#255#158'o['#254'rD-' + +#239'b4"'#232'^2'#30'\'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0'`+ '#24']/'#30'fd6#'#197'c8#'#243'vE0'#240#140'ZF' + +#247#156'mY'#255#171#127'm'#255#184#143#127#255#178#136'v'#255#164'wd'#255 + +#148'dP'#252#130'Q;'#243'l<('#239'b6"'#234'b5!'#151'Z-'#29'>UU'#0#3#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#23#11'Z/'#29'G^4 fa4!'#130'd6!'#166'd7#'#194 + +'d7"'#182'c6"'#150'_3'#31's\0'#29'YY/'#30'+'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#224#3#255#255#255 + +#255#255#254#0#0#127#255#255#255#255#248#0#0#31#255#255#255#255#224#0#0#7#255 + +#255#255#255#192#0#0#3#255#255#255#255#128#0#0#1#255#255#255#255#0#0#0#0#127 + +#255#255#254#0#0#0#0#127#255#255#252#0#0#0#0'?'#255#255#248#0#0#0#0#31#255 + +#255#240#0#0#0#0#15#255#255#240#0#0#0#0#15#255#255#224#0#0#0#0#7#255#255#224 + +#0#0#0#0#3#255#255#192#0#0#0#0#3#255#255#192#0#0#0#0#3#255#255#192#0#0#0#0#1 + +#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255 + +#128#0#0#0#0#1#255#255#128#0#0#0#0#0#255#255#128#0#0#0#0#0#255#255#128#0#0#0 + +#0#0#255#255#128#0#0#0#0#0#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255 + +#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255#192#0#0#0#0#1#255#255#192#0 + +#0#0#0#3#255#255#192#0#0#0#0#3#255#255#224#0#0#0#0#7#255#255#224#0#0#0#0#7 + +#255#255#224#0#0#0#0#15#255#255#240#0#0#0#0#15#255#255#248#0#0#0#0#31#255#255 + +#248#0#0#0#0'?'#255#255#252#0#0#0#0'?'#255#255#254#0#0#0#0#127#255#255#255#0 + +#0#0#0#255#255#255#255#128#0#0#1#255#255#255#255#192#0#0#3#255#255#255#255 + +#224#0#0#15#255#255#255#255#248#0#0#31#255#255#255#255#254#0#0#127#255#255 + +#255#255#255#192#7#255#255#255#255#255#255#255#255#255#255#255#255'('#0#0#0 + +' '#0#0#0'@'#0#0#0#1#0' '#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'CCC'#19'FFF'#22'UUU'#3#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#12'EAAGDDB'#133'DDC'#181'HC?'#205'LA;'#213 + +'JB='#212'FC@'#204'EED'#185'DDC'#145'DDDSFFF'#22#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#14'EEBoLA;'#208'eE-'#235'xK(' + +#246#131'R)'#250#139'W*'#251#149'_,'#252#145'\+'#252#136'V*'#250#128'Q('#249 + +'rI)'#244'\D2'#227'FB?'#207'CCC'#134'DDD'#30#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'EEENMA9'#206'oF)'#245#147']-'#252#187'}4'#255#211#150'9'#255#224 + +#167';'#255#230#174'='#255#234#179'>'#255#233#178'>'#255#228#171'='#255#221 + +#163'<'#255#205#143'8'#255#175'r2'#255#131'R*'#250'eC,'#238'FB?'#205'CCCoUUU' + +#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'@@@'#4'GEA|dB+'#239#142'[.'#252#198#137'<'#255#227#172'C'#255 + +#236#183'E'#255#242#190'F'#255#246#195'G'#255#248#198'G'#255#249#199'H'#255 + +#249#198'H'#255#247#196'G'#255#245#193'G'#255#240#188'F'#255#234#180'D'#255 + +#220#163'A'#255#183'y8'#255'}O*'#250'WA4'#225'CCC'#152'<<<'#17#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'G@='#148 + +'lD*'#245#175'u8'#254#221#166'I'#255#234#182'M'#255#242#193'P'#255#243#194'O' + +#255#244#195'O'#255#244#195'P'#255#244#195'P'#255#244#195'P'#255#244#195'P' + +#255#244#195'P'#255#244#195'P'#255#243#194'O'#255#243#194'O'#255#240#190'O' + +#255#230#179'L'#255#212#155'F'#255#148'^1'#252'`A.'#234'CCC'#171'@@@'#12#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FA>vmB)'#247#189 + +#130'A'#255#224#172'P'#255#236#187'U'#255#238#189'W'#255#238#190'V'#255#238 + +#190'V'#255#238#190'V'#255'fQ%'#255#17#14#6#255#17#13#6#255#16#13#6#255',#' + +#16#255#155'|8'#255#238#190'V'#255#238#190'V'#255#238#189'V'#255#238#189'W' + +#255#233#184'U'#255#217#163'M'#255#164'l8'#254'_>+'#238'DDD'#147#128#128#128 + +#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FDD=e?*'#243#183'}B'#255 + +#223#171'W'#255#232#183'['#255#232#183'\'#255#232#183'\'#255#232#183'\'#255 + +#232#183'\'#255'>1'#25#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#1#1#1#255#5#4#2#255#22#17#9#255'pX,'#255#218#171'V'#255#232#183'\'#255#230 + +#182'['#255#217#164'T'#255#152'a7'#252'V=1'#228'DDDb'#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#128#128#128#2'Z<-'#215#163'k='#254#217#166'['#255#226#178'`' + +#255#226#179'a'#255#226#179'a'#255#226#179'a'#255#226#179'a'#255#226#179'a' + +#255#5#4#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#3#3#1#255',#'#19#255#226#179'a'#255#225#177'_' + +#255#208#154'T'#255#129'O1'#251'H?;'#205'@@@'#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0'J@<[vF,'#249#206#153'Y'#255#220#172'b'#255#220#172'c'#255#220#172'c'#255 + +#220#172'c'#255#220#172'c'#255#220#172'c'#255#205#160']'#255#4#3#2#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#1#0#0#255'.$'#21#255#220#172'c'#255#218#170'a'#255#190#132 + +'N'#255'c=)'#242'CCCz'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\9('#218#177'vG'#255 + +#213#164'c'#255#214#166'e'#255#214#166'e'#255#214#166'e'#255#214#166'e'#255 + +#214#166'e'#255#214#166'e'#255#214#166'e'#255'v\8'#255#2#2#1#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#11#9#5#255#214#166'e'#255#214#166'e'#255#209#159'a'#255#139'Y' + +'6'#252'K>7'#206'333'#5#0#0#0#0#0#0#0#0'?;9'#19'mA+'#247#201#148'^'#255#209 + +#159'e'#255#209#159'e'#255#209#159'e'#255#146'oF'#255#18#14#9#255#21#16#10 + +#255'O<&'#255#209#159'e'#255#209#159'e'#255'$'#27#17#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#11#8#5#255#209#159'e'#255#209#159'e'#255#208#158'e'#255#185#128'Q'#255 + +'^9)'#240'BBB6'#0#0#0#0#0#0#0#0'P8-q'#144'Z:'#252#201#150'd'#255#202#151'd' + +#255#202#151'd'#255'uW:'#255#2#1#1#255#0#0#0#255#0#0#0#255#1#0#0#255'-!'#22 + +#255#202#151'd'#255'ZC-'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#5#4#3#255'gM3'#255#202#151'd' + +#255#202#151'd'#255#202#151'd'#255#197#145'`'#255'l@*'#248'CCBo'#0#0#0#0#0#0 + +#0#0'^7$'#194#171'pK'#255#194#140'a'#255#194#140'a'#255#194#140'a'#255#6#4#3 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#4#255#194#140'a'#255#139'eE' + +#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13 + +#9#6#255'wV<'#255#192#138'a'#255#194#140'a'#255#194#140'a'#255#194#140'a'#255 + +#194#140'a'#255#193#140'a'#255#137'T7'#252'K=6'#158#0#0#0#0#0#0#0#0'a6#'#220 + +#177'uQ'#255#185#129'['#255#185#129'['#255#127'Y>'#255#1#1#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#2#1#1#255'8'''#27#255#185#129'['#255#185#129'['#255'+'#30 + +#21#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13#9#6#255#179'}Y' + +#255#185#129'['#255#185#129'['#255#185#129'['#255#185#129'['#255#185#129'[' + +#255#185#129'['#255#185#129'['#255#152'^>'#255'P:1'#190#0#0#0#0#0#0#0#0'c7#' + +#227#175'sS'#255#178'xW'#255#178'xW'#255','#30#21#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#5#4#3#255'uO:'#255#178'xW'#255#178'xW'#255#178'xW'#255#178'xW'#255'xP' + +':'#255'('#26#19#255#10#7#5#255#10#7#5#255#28#19#13#255#168'rS'#255#163'nO' + +#255#25#17#12#255#6#4#3#255#17#11#8#255'bB/'#255#178'xW'#255#178'xW'#255#178 + +'xW'#255#158'aB'#255'V9,'#210#0#0#0#0#0#0#0#0'f7"'#227#173'sT'#255#175'tW' + +#255#175'tW'#255#15#10#7#255#13#8#6#255#5#4#3#255'+'#29#21#255#169'pU'#255 + +#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175 + +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#17#11#8#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#2#2#1#255#136'ZD'#255#175'tW'#255#175'tW'#255#161'd' + +'G'#255'[8('#211#0#0#0#0#0#0#0#0'e6"'#218#171'nR'#255#173'qV'#255#173'qV'#255 + +#136'YC'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255'sK9' + +#255'uM:'#255#159'gN'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255#173 + +'qV'#255#173'qV'#255#173'qV'#255'5"'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255'H/$'#255#173'qV'#255#173'qV'#255#153'^D'#255'Y8*'#188#0#0#0#0#0#0#0#0 + +'c5 '#203#170'kQ'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY' + ,#255#174'sY'#255#164'mU'#255#11#7#6#255#1#1#1#255#1#1#1#255#5#3#2#255#127'TA' + +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255 + +#128'UA'#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255'J1&'#255#174'sY'#255#174 + +'sY'#255#147'X?'#255'S8,'#140#0#0#0#0#0#0#0#0'd4'#30#153#162'gM'#255#178'{c' + +#255#178'{c'#255#178'{c'#255#178'{c'#255#178'{c'#255#178'{c'#255'A-$'#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#20#14#11#255'xSB'#255#6#4#3#255#5#4#3 + +#255#18#12#10#255#170'u_'#255#178'{c'#255#178'{c'#255#9#6#5#255#0#0#0#255#0#0 + +#0#255#3#2#2#255#166's]'#255#178'{c'#255#178'{c'#255#131'P8'#252'S3$>'#0#0#0 + +#0#0#0#0#0'[/'#27'3'#137'T='#247#184#134'o'#255#184#134'o'#255#184#134'o'#255 + +#184#134'o'#255#184#134'o'#255#184#134'o'#255#14#10#9#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#1#1#1#255'\C7'#255#14#10#8#255#0#0#0#255#0#0#0#255#0#0#0#255#14#10 + +#8#255#184#134'o'#255#184#134'o'#255'xWI'#255#2#1#1#255#0#0#0#255#18#14#11 + +#255#184#134'o'#255#184#134'o'#255#183#131'l'#255'h:&'#240#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'n<%'#218#189#140'x'#255#190#143'z'#255#190#143'z'#255#190#143 + +'z'#255#190#143'z'#255#190#143'z'#255',!'#28#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#9#7#6#255#190#143'z'#255#9#7#6#255#0#0#0#255#0#0#0#255#0#0#0#255#5#4#3 + +#255#190#143'z'#255#190#143'z'#255#190#143'z'#255#159'xe'#255#0#0#0#255#140 + +'jZ'#255#190#143'z'#255#190#143'z'#255#175'yc'#255'b6"'#193#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0'd4'#30#151#167's\'#254#196#154#135#255#196#154#135#255#196#154 + +#135#255#196#154#135#255#196#154#135#255'qYN'#255#0#0#0#255#0#0#0#255#1#1#1 + +#255'v]R'#255#194#152#133#255#5#4#4#255#0#0#0#255#0#0#0#255#0#0#0#255#10#8#7 + +#255#196#154#135#255#196#154#135#255#196#154#135#255#196#154#135#255'"'#27#24 + +#255#196#154#135#255#196#154#135#255#196#154#135#255#131'R<'#248'^1'#28'1'#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#14'o>('#224#198#157#140#255#202#163#146 + +#255#202#163#146#255#202#163#146#255#202#163#146#255#170#138'{'#255#0#0#0#255 + +#8#6#6#255#26#21#19#255#202#163#146#255#143'th'#255#1#1#1#255#0#0#0#255#0#0#0 + +#255#2#2#2#255#143'sg'#255#202#163#146#255#202#163#146#255#202#163#146#255 + +#202#163#146#255#191#155#138#255#202#163#146#255#202#163#146#255#183#135'r' + +#255'd5 '#193#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'd3'#30'{'#156 + +'jS'#248#209#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255#209 + +#174#160#255#2#2#2#255#205#172#158#255#209#174#160#255#209#174#160#255#169 + +#140#129#255#11#9#9#255#1#1#0#255#4#3#3#255#132'oe'#255#209#174#160#255#209 + +#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255 + +#209#174#160#255#205#167#152#255'yG3'#235'[/'#27'"'#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'd4'#30#181#179#134'r'#254#215#185#173#255#215 + +#185#173#255#215#185#173#255#215#185#173#255'm^X'#255#215#185#173#255#215#185 + +#173#255#215#185#173#255#215#185#173#255#133'sk'#255#0#0#0#255#156#134'}'#255 + +#215#185#173#255#215#185#173#255#215#185#173#255#215#185#173#255#215#185#173 + +#255#215#185#173#255#215#185#173#255#214#183#172#255#143'^I'#243'b3'#29'`'#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#8'f6 ' + +#205#189#148#131#254#222#197#187#255#222#197#187#255#222#197#187#255#222#197 + +#187#255#222#197#187#255#222#197#187#255#222#197#187#255#222#197#187#255#127 + +'qk'#255#134'wq'#255#222#197#187#255#222#197#187#255#222#197#187#255#222#197 + +#187#255#222#197#187#255#222#197#187#255#222#197#187#255#220#193#183#255#159 + +'o['#247'd3'#30#147#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0'[/'#27#15'c3'#30#193#176#132'q'#248#228#206#199#255 + +#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201 + +#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208 + +#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#221 + +#196#186#255#141']I'#237'c3'#29#129#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#2'c3'#29#150 + +#135'XD'#231#208#176#164#255#235#219#215#255#235#219#215#255#235#219#215#255 + +#235#219#215#255#235#219#215#255#235#219#215#255#235#219#215#255#235#219#215 + +#255#235#219#215#255#235#219#215#255#235#219#215#255#232#214#209#255#189#149 + +#133#253'qA+'#220'a2'#29'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27 + +'"e4'#30#185#144'cO'#235#195#158#144#254#230#209#203#255#242#231#229#255#242 + +#231#229#255#242#231#229#255#242#231#229#255#242#231#229#255#241#230#226#255 + +#220#193#184#255#180#141'|'#251'zK6'#226'd3'#30#142'[/'#27#10#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#28'b3'#29'{g5'#30 + +#198'xH2'#218#137']J'#229#156'r`'#236#151'mZ'#234#132'VB'#227'q?)'#213'f4'#30 + +#182'_1'#28'W[/'#27#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#5'[/' + +#27#30'[/'#27#22'[/'#27#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#252'?'#255 + +#255#192#3#255#255#0#0#255#254#0#0'?'#248#0#0#31#240#0#0#15#240#0#0#7#224#0#0 + +#7#192#0#0#3#192#0#0#3#192#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128 + +#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#3#192#0#0#3#192#0#0#3 + +#192#0#0#7#224#0#0#7#240#0#0#15#240#0#0#31#248#0#0'?'#252#0#0#127#255#0#0#255 + +#255#192#3#255#255#252'?'#255'('#0#0#0#16#0#0#0' '#0#0#0#1#0' '#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +';;;'#13'ICB7M=4zL>6xFBA;@@@'#16#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0'III'#7'W;,'#171'nC('#245#145'`+'#250#181#127'2'#253#175 + +'z1'#253#139'\*'#250'h?&'#244'P=3'#159'@@@'#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0'K921d;'''#235#191#137'7'#254#249#198'E'#255#251#199'F'#255#251#200 + +'F'#255#251#200'F'#255#251#199'F'#255#246#194'E'#255#173'y3'#253'\9)'#229'E>' + +';2'#0#0#0#0#0#0#0#0#0#0#0#0'>2,'#7'nC'''#238#223#171'N'#255#239#191'U'#255 + +#240#192'U'#255#164#131':'#255'@3'#23#255'J;'#26#255'~e-'#255#196#157'E'#255 + +#239#191'U'#255#212#159'J'#255'a<('#231'MMM'#10#0#0#0#0#0#0#0#0'[7('#183#195 + +#145'N'#254#228#180'_'#255#228#180'_'#255#228#180'_'#255'</'#25#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#4#3#1#255'9-'#24#255#205#163'U'#255#175'~E'#253'Q:0'#168 + +#0#0#0#0'[/'#27#10#143'd@'#248#219#174'l'#255#219#173'l'#255#159'~N'#255#206 + +#163'f'#255'qY7'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#152'x' + +'K'#255#218#172'k'#255'zQ5'#246'UUU'#3'W4$H'#178#134'_'#254#213#169'x'#255'Y' + +'F2'#255#0#0#0#255'L<+'#255#200#158'p'#255#8#6#4#255#0#0#0#255#0#0#0#255#18 + +#15#10#255'pY?'#255#213#169'x'#255#213#169'x'#255#157'tR'#251'M=74^6$'#154 + +#193#151'x'#255#179#144's'#255#6#5#4#255#27#21#17#255#155'|c'#255#206#165#132 + +#255#130'hS'#255'=1'''#255':/%'#255#170#137'm'#255#141'q['#255#166#133'j'#255 + +#206#165#132#255#178#135'l'#253'Q8,{c5 '#167#195#154#133#255#163#130'q'#255 + +#153'zj'#255#192#152#132#255#199#159#138#255#200#159#138#255#201#160#139#255 + +#201#160#139#255#201#160#139#255#154'zj'#255#1#1#1#255#29#23#20#255#197#157 + +#136#255#181#139'v'#255'X5%|_1'#28'V'#176#132'r'#254#199#159#141#255#199#159 + +#141#255#184#147#130#255'#'#28#25#255#27#22#19#255#167#133'v'#255#127'fZ'#255 + +#172#137'z'#255#197#157#139#255' '#26#23#255#15#12#11#255#187#150#133#255#156 + +'tb'#251'W1 0[/'#27#30#160'zk'#246#210#176#163#255#210#176#163#255#154#129'x' + +#255#0#0#0#255' '#27#25#255#152#128'v'#255#4#3#3#255'>40'#255#210#176#163#255 + +#148'|s'#255'RD?'#255#210#176#163#255#140'fW'#243'[/'#27#2#0#0#0#0'tI6'#209 + +#216#188#178#255#221#195#185#255#213#188#178#255'$'#31#30#255#131'sn'#255'sf' + +'`'#255#0#0#0#255'eYU'#255#221#195#185#255#221#195#185#255#204#180#170#255 + +#207#178#166#255'k>+'#182#0#0#0#0#0#0#0#0'[/'#27#31#156'xi'#240#232#213#207 + +#255#232#213#207#255#180#165#161#255#232#213#207#255#182#167#162#255'ICA'#255 + +#226#207#201#255#232#213#207#255#232#213#207#255#231#213#206#255#134'_O'#233 + +'[/'#27#12#0#0#0#0#0#0#0#0#0#0#0#0'd3'#30'e'#171#139'~'#240#239#226#224#255 + +#242#231#229#255#242#231#229#255#240#229#227#255#242#231#229#255#242#231#229 + +#255#242#231#229#255#235#221#216#255#153'uh'#236'a2'#29'?'#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0'\0'#27'*'#131'\I'#215#212#191#183#252#239#229#226#255 + +#253#250#252#255#253#249#250#255#236#223#220#255#204#180#172#250'yM;'#196'[/' + +#27#23#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/' + +#27'>c3'#29#131'uI4'#190'oA-'#183'b2'#29'v[/'#27'4'#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#248#31#172'A'#224#7#172'A'#192#3#172'A'#128#1#172'A'#128#1#172 + +'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#128#1 + +#172'A'#128#1#172'A'#192#3#172'A'#224#7#172'A'#240#31#172'A' +]); + diff --git a/components/rx/version/2.1/Demos/RxLookup/project1.manifest b/components/rx/version/2.1/Demos/RxLookup/project1.manifest new file mode 100644 index 000000000..515fedeef --- /dev/null +++ b/components/rx/version/2.1/Demos/RxLookup/project1.manifest @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/> + <description>Your application description here.</description> + <dependency> + <dependentAssembly> + <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> + </dependentAssembly> + </dependency> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> + <security> + <requestedPrivileges> + <requestedExecutionLevel level="asInvoker" uiAccess="false"/> + </requestedPrivileges> + </security> + </trustInfo> +</assembly> \ No newline at end of file diff --git a/components/rx/version/2.1/Demos/RxLookup/project1.rc b/components/rx/version/2.1/Demos/RxLookup/project1.rc new file mode 100644 index 000000000..cd8e7b0d6 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxLookup/project1.rc @@ -0,0 +1,7 @@ +#define RT_MANIFEST 24 +#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 +#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2 +#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3 + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "project1.manifest" +MAINICON ICON "project1.ico" diff --git a/components/rx/version/2.1/Demos/RxLookup/unit1.lfm b/components/rx/version/2.1/Demos/RxLookup/unit1.lfm new file mode 100644 index 000000000..bc09adede --- /dev/null +++ b/components/rx/version/2.1/Demos/RxLookup/unit1.lfm @@ -0,0 +1,213 @@ +object Form1: TForm1 + Left = 534 + Height = 368 + Top = 234 + Width = 498 + ActiveControl = RxDBLookupCombo1 + Caption = 'RxDBLookupCombo test' + ClientHeight = 368 + ClientWidth = 498 + OnCreate = FormCreate + LCLVersion = '0.9.29' + object Label1: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 18 + Top = 6 + Width = 90 + BorderSpacing.Around = 6 + Caption = 'Select item...' + ParentColor = False + end + object Label2: TLabel + AnchorSideLeft.Control = Button1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Button1 + AnchorSideTop.Side = asrCenter + Left = 108 + Height = 18 + Top = 70 + Width = 46 + BorderSpacing.Around = 6 + Caption = 'Label2' + ParentColor = False + end + object RxDBLookupCombo1: TRxDBLookupCombo + AnchorSideLeft.Control = Label1 + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 12 + Height = 29 + Top = 30 + Width = 480 + AutoSize = True + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + ButtonOnlyWhenFocused = False + ButtonWidth = 15 + DataField = 'ID' + DataSource = dsData1 + PopUpFormOptions.Columns = <> + Flat = False + Glyph.Data = { + 72000000424D7200000000000000360000002800000005000000030000000100 + 2000000000003C00000064000000640000000000000000000000000000000000 + 0000000000FF000000000000000000000000000000FF000000FF000000FF0000 + 0000000000FF000000FF000000FF000000FF000000FF + } + NumGlyphs = 1 + ParentColor = False + ReadOnly = False + TabOrder = 0 + TabStop = True + DisplayAllFields = True + LookupDisplay = 'ID;Price;Caption' + LookupDisplayIndex = 2 + LookupField = 'ID' + LookupSource = dsLookUpData + end + object Button1: TButton + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = RxDBLookupCombo1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 29 + Top = 65 + Width = 96 + AutoSize = True + BorderSpacing.Around = 6 + Caption = 'Test caption' + OnClick = Button1Click + TabOrder = 1 + end + object Button2: TButton + AnchorSideTop.Control = Button1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 427 + Height = 29 + Top = 100 + Width = 65 + Anchors = [akTop, akRight] + AutoSize = True + BorderSpacing.Around = 6 + Caption = 'Set text' + OnClick = Button2Click + TabOrder = 2 + end + object Edit1: TEdit + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Button1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Button2 + Left = 6 + Height = 27 + Top = 100 + Width = 415 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + TabOrder = 3 + Text = 'Edit1' + end + object DBGrid1: TDBGrid + Left = 0 + Height = 208 + Top = 160 + Width = 498 + Align = alBottom + DataSource = dsLookUpData + TabOrder = 4 + end + object rxData1: TRxMemoryData + FieldDefs = < + item + Name = 'ID' + DataType = ftInteger + Precision = 0 + Size = 0 + end> + left = 320 + top = 8 + object rxData1ID: TLongintField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'ID' + Index = 0 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + end + object rxLookUpData: TRxMemoryData + FieldDefs = < + item + Name = 'ID' + DataType = ftInteger + Precision = 0 + Size = 0 + end + item + Name = 'Caption' + DataType = ftString + Precision = 0 + Size = 100 + end + item + Name = 'Price' + DataType = ftCurrency + Precision = 0 + Size = 0 + end> + left = 208 + top = 56 + object rxLookUpDataID: TLongintField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'ID' + Index = 0 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + object rxLookUpDataCaption: TStringField + DisplayWidth = 100 + FieldKind = fkData + FieldName = 'Caption' + Index = 1 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 100 + end + object rxLookUpDataPrice: TCurrencyField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'Price' + Index = 2 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + MaxValue = 0 + MinValue = 0 + Precision = 2 + end + end + object dsData1: TDatasource + DataSet = rxData1 + left = 288 + top = 8 + end + object dsLookUpData: TDatasource + DataSet = rxLookUpData + left = 176 + top = 56 + end +end diff --git a/components/rx/version/2.1/Demos/RxLookup/unit1.lrs b/components/rx/version/2.1/Demos/RxLookup/unit1.lrs new file mode 100644 index 000000000..5ff800d4f --- /dev/null +++ b/components/rx/version/2.1/Demos/RxLookup/unit1.lrs @@ -0,0 +1,64 @@ +LazarusResources.Add('TForm1','FORMDATA',[ + 'TPF0'#6'TForm1'#5'Form1'#4'Left'#3#22#2#6'Height'#3'p'#1#3'Top'#3#234#0#5'Wi' + +'dth'#3#242#1#13'ActiveControl'#7#16'RxDBLookupCombo1'#7'Caption'#6#20'RxDBL' + +'ookupCombo test'#12'ClientHeight'#3'p'#1#11'ClientWidth'#3#242#1#8'OnCreate' + +#7#10'FormCreate'#10'LCLVersion'#6#6'0.9.29'#0#6'TLabel'#6'Label1'#22'Anchor' + +'SideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#2 + +#6#6'Height'#2#18#3'Top'#2#6#5'Width'#2'Z'#20'BorderSpacing.Around'#2#6#7'Ca' + +'ption'#6#14'Select item...'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#22'An' + +'chorSideLeft.Control'#7#7'Button1'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21 + +'AnchorSideTop.Control'#7#7'Button1'#18'AnchorSideTop.Side'#7#9'asrCenter'#4 + +'Left'#2'l'#6'Height'#2#18#3'Top'#2'F'#5'Width'#2'.'#20'BorderSpacing.Around' + +#2#6#7'Caption'#6#6'Label2'#11'ParentColor'#8#0#0#16'TRxDBLookupCombo'#16'Rx' + +'DBLookupCombo1'#22'AnchorSideLeft.Control'#7#6'Label1'#21'AnchorSideTop.Con' + +'trol'#7#6'Label1'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.' + +'Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#2#12#6 + +'Height'#2#29#3'Top'#2#30#5'Width'#3#224#1#8'AutoSize'#9#7'Anchors'#11#5'akT' + +'op'#6'akLeft'#7'akRight'#0#20'BorderSpacing.Around'#2#6#21'ButtonOnlyWhenFo' + +'cused'#8#11'ButtonWidth'#2#15#9'DataField'#6#2'ID'#10'DataSource'#7#7'dsDat' + +'a1'#24'PopUpFormOptions.Columns'#14#0#4'Flat'#8#10'Glyph.Data'#10'v'#0#0#0 + +'r'#0#0#0'BMr'#0#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#5#0#0#0#3#0#0#0#1#0' '#0#0#0#0 + +#0'<'#0#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#9'NumGlyphs'#2#1#11'ParentColor'#8#8'ReadOnly' + +#8#8'TabOrder'#2#0#7'TabStop'#9#16'DisplayAllFields'#9#13'LookupDisplay'#6#16 + +'ID;Price;Caption'#18'LookupDisplayIndex'#2#2#11'LookupField'#6#2'ID'#12'Loo' + +'kupSource'#7#12'dsLookUpData'#0#0#7'TButton'#7'Button1'#22'AnchorSideLeft.C' + +'ontrol'#7#5'Owner'#21'AnchorSideTop.Control'#7#16'RxDBLookupCombo1'#18'Anch' + +'orSideTop.Side'#7#9'asrBottom'#4'Left'#2#6#6'Height'#2#29#3'Top'#2'A'#5'Wid' + +'th'#2'`'#8'AutoSize'#9#20'BorderSpacing.Around'#2#6#7'Caption'#6#12'Test ca' + +'ption'#7'OnClick'#7#12'Button1Click'#8'TabOrder'#2#1#0#0#7'TButton'#7'Butto' + +'n2'#21'AnchorSideTop.Control'#7#7'Button1'#18'AnchorSideTop.Side'#7#9'asrBo' + +'ttom'#23'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'a' + +'srBottom'#4'Left'#3#171#1#6'Height'#2#29#3'Top'#2'd'#5'Width'#2'A'#7'Anchor' + +'s'#11#5'akTop'#7'akRight'#0#8'AutoSize'#9#20'BorderSpacing.Around'#2#6#7'Ca' + +'ption'#6#8'Set text'#7'OnClick'#7#12'Button2Click'#8'TabOrder'#2#2#0#0#5'TE' + +'dit'#5'Edit1'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Contro' + +'l'#7#7'Button1'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Co' + +'ntrol'#7#7'Button2'#4'Left'#2#6#6'Height'#2#27#3'Top'#2'd'#5'Width'#3#159#1 + +#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#20'BorderSpacing.Around'#2#6#8 + +'TabOrder'#2#3#4'Text'#6#5'Edit1'#0#0#7'TDBGrid'#7'DBGrid1'#4'Left'#2#0#6'He' + +'ight'#3#208#0#3'Top'#3#160#0#5'Width'#3#242#1#5'Align'#7#8'alBottom'#10'Dat' + +'aSource'#7#12'dsLookUpData'#8'TabOrder'#2#4#0#0#13'TRxMemoryData'#7'rxData1' + +#9'FieldDefs'#14#1#4'Name'#6#2'ID'#8'DataType'#7#9'ftInteger'#9'Precision'#2 + +#0#4'Size'#2#0#0#0#4'left'#3'@'#1#3'top'#2#8#0#13'TLongintField'#9'rxData1ID' + +#12'DisplayWidth'#2#10#9'FieldKind'#7#6'fkData'#9'FieldName'#6#2'ID'#5'Index' + +#2#0#11'LookupCache'#8#13'ProviderFlags'#11#10'pfInUpdate'#9'pfInWhere'#0#8 + +'ReadOnly'#8#8'Required'#8#0#0#0#13'TRxMemoryData'#12'rxLookUpData'#9'FieldD' + +'efs'#14#1#4'Name'#6#2'ID'#8'DataType'#7#9'ftInteger'#9'Precision'#2#0#4'Siz' + +'e'#2#0#0#1#4'Name'#6#7'Caption'#8'DataType'#7#8'ftString'#9'Precision'#2#0#4 + +'Size'#2'd'#0#1#4'Name'#6#5'Price'#8'DataType'#7#10'ftCurrency'#9'Precision' + +#2#0#4'Size'#2#0#0#0#4'left'#3#208#0#3'top'#2'8'#0#13'TLongintField'#14'rxLo' + +'okUpDataID'#12'DisplayWidth'#2#10#9'FieldKind'#7#6'fkData'#9'FieldName'#6#2 + +'ID'#5'Index'#2#0#11'LookupCache'#8#13'ProviderFlags'#11#10'pfInUpdate'#9'pf' + +'InWhere'#0#8'ReadOnly'#8#8'Required'#8#0#0#12'TStringField'#19'rxLookUpData' + +'Caption'#12'DisplayWidth'#2'd'#9'FieldKind'#7#6'fkData'#9'FieldName'#6#7'Ca' + +'ption'#5'Index'#2#1#11'LookupCache'#8#13'ProviderFlags'#11#10'pfInUpdate'#9 + +'pfInWhere'#0#8'ReadOnly'#8#8'Required'#8#4'Size'#2'd'#0#0#14'TCurrencyField' + +#17'rxLookUpDataPrice'#12'DisplayWidth'#2#10#9'FieldKind'#7#6'fkData'#9'Fiel' + +'dName'#6#5'Price'#5'Index'#2#2#11'LookupCache'#8#13'ProviderFlags'#11#10'pf' + +'InUpdate'#9'pfInWhere'#0#8'ReadOnly'#8#8'Required'#8#8'MaxValue'#2#0#8'MinV' + +'alue'#2#0#9'Precision'#2#2#0#0#0#11'TDatasource'#7'dsData1'#7'DataSet'#7#7 + +'rxData1'#4'left'#3' '#1#3'top'#2#8#0#0#11'TDatasource'#12'dsLookUpData'#7'D' + +'ataSet'#7#12'rxLookUpData'#4'left'#3#176#0#3'top'#2'8'#0#0#0 +]); diff --git a/components/rx/version/2.1/Demos/RxLookup/unit1.pas b/components/rx/version/2.1/Demos/RxLookup/unit1.pas new file mode 100644 index 000000000..0a33184af --- /dev/null +++ b/components/rx/version/2.1/Demos/RxLookup/unit1.pas @@ -0,0 +1,76 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, db, FileUtil, LResources, Forms, Controls, Graphics, + Dialogs, StdCtrls, DBGrids, rxlookup, rxmemds; + +type + + { TForm1 } + + TForm1 = class(TForm) + Button1: TButton; + Button2: TButton; + DBGrid1: TDBGrid; + dsData1: TDatasource; + dsLookUpData: TDatasource; + Edit1: TEdit; + Label1: TLabel; + Label2: TLabel; + rxData1ID: TLongintField; + RxDBLookupCombo1: TRxDBLookupCombo; + rxData1: TRxMemoryData; + rxLookUpData: TRxMemoryData; + rxLookUpDataCaption: TStringField; + rxLookUpDataID: TLongintField; + rxLookUpDataPrice: TCurrencyField; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + Form1: TForm1; + +implementation + +{ TForm1 } + +procedure TForm1.Button1Click(Sender: TObject); +begin + Label2.Caption:=RxDBLookupCombo1.Text; +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + RxDBLookupCombo1.Text:=Edit1.Text; +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + rxData1.Open; + rxData1.Append; + rxLookUpData.Open; + rxLookUpData.AppendRecord([1, 'Lazarus', 0]); + rxLookUpData.AppendRecord([2, 'Delphi', 1000]); + rxLookUpData.AppendRecord([3, 'MS Office', 400]); + rxLookUpData.AppendRecord([4, 'MS Windows XP', 150]); + rxLookUpData.AppendRecord([5, 'MS Windows Vista', 100]); + rxLookUpData.AppendRecord([6, 'MS Windows 7', 200]); + rxLookUpData.AppendRecord([7, 'Fedora Linux 11', 0]); + Label2.Caption:=''; +end; + +initialization + {$I unit1.lrs} + +end. + diff --git a/components/rx/version/2.1/Demos/RxMDI/project1.ico b/components/rx/version/2.1/Demos/RxMDI/project1.ico new file mode 100644 index 0000000000000000000000000000000000000000..0341321b5d952e1662a3d9444a73cf9f42a7db37 GIT binary patch literal 137040 zcmXV11ymH@_upNX?(Rmq1f;tg1O*8J5$Q%sVwXk)X#uIFK~f~8LAtwP>F%!GKi~8F z&pC5u?!1{dciz44#^=5P0Du5Az<(PMzyMf}2LP;}&!N!&(d-yNfNBB&AS?U-v^)Ud z`V$D?=l>sF`~m<-U3z|!;s0rZ=X*gQ0KxO|zy55&0KhI02=G-`TLl-33hTLRTs2ii zz5iPO+cExowW)jY^E=~9)D-33_$(a0M}^W{O+yZxcf7^ac(o(rz~2a$OqQ0TBp4g~ zYmz|S8g96H>?G_4HQgwfjB#-UO&N;=<qv@;Pd3&r*Y1H$5`O0){fFg4Ljw;_*)o*T zA8<ZW)W)d=06$W6QRH_~0H3eqQG5jRhrf)rj3#WS=;4ogsSJ2-W$$@zWQtA?5C~XB zTheTxbi>}*&M99jA|))TbitYLr2yi5gvqA6iICRYHE8veV~DP4&szzkxu%D<6`e?i zrnAMX^2@_TDtEomoflmfp^M5(_VGeQdJwda6jVJJ481|}yuHgl@KFC>RXMtot1qNl zv}d|RxDK|tbYw@}Gj{KC014f!yDXub;s4<A_a4*=NPcC27#fKW(SD2DB6_`)?wH-D z*~n~WGG{s1r_RjvUPT=eXKxi8OGcej2#enF;kMg&=6f|z_GDyJZ9_nhOKCibr5>d2 z;~e2fFvCk-IJRp&iD=F$HLB;|(|1LhC+wS_(-#4ompF~lep%6enbB>G2lxKFl7$Ta zf*%uHJ*Zvvw2*@hZQZfs2mfy5ELALb<*{gQZ;`M>f<P)kdUuqM;J8n)b`#fn^3zgD ztSwD=8~X3|K~WC0M$;@3+s2G0bKVVb7G2&V)|c<igBy=@iZ}hFSW8@T%6_`CreqO{ z+~J*6A)?0{XB2#MZqD>NfR)aNvsF=98syjB#<q>G;HFIY2{R~??Jrxnvua1s4Fpe; zk%6)-@!pTJoPrt34G7DkaqWeBQDJRZE^+N5DnNY1*rm<-Rd$uSeQE7%E*ph<C3592 zp~mGX$p-l91yuC<>mStvV}p4O;ZCUD>2_FgQzW85RId<BVN5sffk+0j9aToMnCivf zs$eEUna~g*Mua~BCOV^XEHmXlOE+b#CFzdiZ`dXY?0T3v-{$35yReqBR0M97_D>vy zK12fqz$9N@9ABer??PhzXqWlQw%19`xKCNiSm5dfprjf@4!OJ;LEvm$m4hd2{9L}$ zAP6hF^3A}!$DSuvqiY#2RZy@XX~V-@vMc$3fiv8|B?!Ep0qyYte(x5|`L0Avpu`xf zxIv&~iNS~&8WQM??eRds9KkQm7e2Zs97I4N7l{!xGW%Ad{b3e<jJjkdFJSxQ-j8PQ zdAx*BP$9g>+TBNrB(0Wzb+|8se^tbdbMk%!Rc?lvmA}c=EtPYr4mNW^$sETrrp0Pf z4=R;%)*Rcb%UCwxAnli8#(tp!P-Jlzv$>gUOkhR%gJH!nBIm3WPV$QGQ*smSjxZC{ zHX~Fliv_A0dj0aa&X&F>K$IdFT8Z*##&#Q^je#0)_%etf_jg4ofz1LijbiE5@Ao*B zYaii#a4i;;wyD)4)qfPgd?5QJX@dl1z5eS4uiS^fq+bHVb_~3T%t(Bau`bznzvSWK zpe<1kHLP#^s(c-6P;Sww11Wvm++HdkX4d_^s~qu}-iFn+6f%(nJAl)M2H$5BVZw(2 z)mLGpY4Z<{t1Rg(uyN7)d+!7QmOwmU1y4m31e0>gQ6(7;r2uy=9mz5P0%O0$1LNf* zhcKG6nL{XS)ZuQHZXK&tA!%?Wfm=3LD_QA~hN;y%)sAQT0A#<taP^kLS|n`eslaj9 zo)AqoW!3q0$w`V?oq*ZgVbv8t=WIP@{{}`JN+&`~9QZ;7EQwj1yfmOwDp~S`Re+P^ z{$aYvBOgopJ;+<GxgC2vNRboB^7bU(CL8&!es-f-P?unY-35;T^B-71)gCn;2pda; zN8~xuV<<7QujrmWNz;Ryc~2QBZzb`BsDp18*qKq4!O=KAOuOrX?QI;CdwdO2A&LYE z_agjD&z3I)fQ4XMT84Id5j<s@9{G++>UX7$am}j_hte5(<<(LQHSFPvllYL@*7~%m z?!Ib<|5;>t<dj=BWHI#lU4^}){`zE#DTo}?PhA_j+rr{w!_btuYZ;3j-1~q57G&&s zz?zfpNtD-gq>GFMgh>-<zX0A#5d7mI39?`S(bc0!R#>0<EWDP$5ENj*RXDUF(F79` z#%-LMEzv13ovJ;hQ&c=FEf9d3o$*B^m!Bu6t&u{Kr*_Fc+kP;Q|KPJl9Z5*P0Z2KK z^3s@;!ZokOOeMI&va^!Zz&|D!Q;HCc_%S~uwtg$Ei$GCWiVa>}afaZX<w?XnbRc5` ze)RxDAF`Q29dA@WD-$Gy%2LU*WC>x*$7{zh^d-tMPyl5Tp!90(Cq;`5sKIcr+Mvbx zPCGR2bApd}z4>1Wz7^S``ZUq<?FBB;DKqWH-HQk;J=^R6C?D*O)|CrU@tL07>;z~0 zCF5K7{T72#U}8aJ`6a6c9p9ln|L&W9t=>eaL08Fb#u%5Vpj<z_4sZ32AE6h5wf;nI z44nxnRe<n%5vEx5vkHa7)eH%~p#G=$U10*Nv)LS)hA#IV!#{}MnXvB8F4h=IJ`Bbu z0>%feo^;GArCGP<VmA~2{#FT1h@tCv3Qz?f=^>rNv3oFJ=%-@0y+E4{{pu0C;7X#y zFQzTHtX%IddUN39xp4=&yKgNvQL`}Gi+4iJ*f69qTa4pBZ@W>2iX!;b5rn+I@I9qX zb_WRG_e1aSz_@aoG8W@t0Yb}7?&xP3W&?_FBQXH4Kzs?o*~rBWH@S#El;SiowtAsr z|7olQK@j~YlH&M8j>$F&zCmg5EL~@4XB+h~oswK$oLLl{%lEB$jBqoWNS+wJV_34q z@9n&*4fWVy=c&?pC+*#7_DkCX2eDV?!;<&S=;rg3^(WfpHaldz_M-m!?+4KJ^dgkD z<+(d{NKSJUteGPHQCKd`<hV}rgc%M40$ppS83~2p7s1gO;>?&OiqIWA_=}~li{?EU zVNxGOAIqxINFF7ZmcMp-^PUQ%GTk=+tdv_^w&Jh|c2Rn@YO5=lBSI;pxr^I8kX>_@ z2LG1f+x&$Oqg50lQ!r)&t@EqMVJor}Sc}vVSg!#wMypB(zblFbd~H|g9K~S3abEIk z4s@-X4H-1UmxILJVSQl){d(6-p$3=HgU~fbu03IE5c^0VxtEURa|X#X`~<>a`yO2N zWQP8UwHW77Tpf;eL0>VY*lt;wk6)j9YHk_+rf3ZpyU=^<@8*t&vGN5WZpD0iFqiX% zpVE3$kg%H-WQY3NjEjK?LphZUeihcPzyfF1!w8zC1{AdbGm1%dE9BUt6=lUR-^{j4 zU~gnj$5gHzW3dFImB@TE?d*H%z9MFSY=R%Vu&4S(cKLE|d>1D2f3v|eLsUij76vy- z8%tN)^<A@}g8m@(ce~Zj$l}6~PQ07?vNDeOdiUj?2>dH_C=?_6v*K$&Az^5rSY&$a zB*u~|nj)Bn100V*6^~)xadN}x_L&G+<n#~K2}+f*6t#$=3VvN86KvXU`*er-*4G=x zZwB=XgB|~2qF!lK!4%&d=3_5W?htwT;Y95ewU<s~@a=&9;TP@Qrr!s>RSI<S@@14& zhYH$U7%F+0itP_zQ70%fC{`BigbTMVksD@gk7VdfM|(d6;uQT$pa#b-S#6u5NN!Ui zLFl`B<8SS=X*iMktMhQR%1Nx)%6DXg>mHd{FRhu`9<9wzahnaz7e96Du<o4dty1PD z-oM|GR_p*f^PQ8j=*Rg@U^FxCG7!N6BFGog>w^d9!5tQ<cchUR>t)vrFVc2>m)^%H zj<H_(rC{al+k6eyiQ%VL>5z#>kQvybw(Xa`<*ZqIHPmRRD?rDMM*B{as)|Ak1bdr} z*{U45#wAun_iYi|7il{Eeuqu+m-PCj+@`Fitc@1v4wDH)7@3O}Y&5opDIfqFUbBt3 zF4R)RqRkL)KgU?lfWY*rVY+KyRYAzadmfFT*B1whYuPbP5Llcxp+Nv@wq0+@gYB#d zHmvHiz`}zy>!m>+*^nXtjYt21!!H(`J$Sj1;Q8-U{d<Yq=nuODDcIQCa@-w7bSe#- zOxxW5hP%>HX;&DC<RXujRWXjrYvGRbcnAvu`8ED*YZ@JUiuSj3E5Q#EDkeGO#kU2y zr`Zur=(?)40<CD~s`CYLSt}O*NFhv{TPfAaSq1@ICU;^TBD>R$(?w-c=ldR*5~ls- zx~^T)L$A;5)I&xT6`i-V3+WS;3ATO_aKu6<qFS2O;6#LS5sTPPTIo4m<H4-p1i%Yo z%<*7tCpfcY2Zt)CT(51_@q;4L>P}lS_Uqfgj+r7wI@*eRU!~$>avi`Qqh7Fd<2kjM z$umcvO8!Pot*5V0IeljognuJV#Otz>mP^tQ*%rVSV}jF!s)C(a0Oz=IMiwq%*V|g~ z3m@^?AX`%!4%<$_jA)kAw5gL<)D*vE-kWVfV*c(&Nj;X;7$|8=GbbgTfDKHf+twW@ zfpG&mX93k$p7w#$<n~8OW&zi0F>^Y6H}Nc>-9tH5j^5X;fUj8Ji^uwQHX@;+t6P`? z^l}kwfO6cn-(w%*ba=kADuf^QHE1k-e?U_2v35j0V&<J9f!;UY-Ue1A;&orXwfIe{ z;C3fem4?gyXw3SUf9{dyZ@SN0esB7UZuNr->wz#i1ZRRN-U<k(PCZv7`1&W8nF&OH z!m=4E1J=&MICR1to4KX7$Cmq{$fAg)$l6iVZim8L_i8@!{>25SjPIQetgV}~O<60r zJm_)4o}IhI(!O;%7d2fi9p~)p#+^Koj*YW4i^E}WoC$1ZE3*;YY}CGx>Sh!+mB!va zOU}Ovh=)o*3xUU(+O{R;_+~ojJJfUIEVjTAzSG}RCxXNjFWan10;#@T(P1H*E7YV+ zO|#!1C@ls@KXSDW=cAMw4MyBdmAz9@UH*hClCa-uyOnaU^*u)=(m!;GJ4AG~pS?qb z1JgrWegbW&SxmMSSd@N^$X6qPQzs}IrC+jO>dwIDRY9W~PtubyglFl>YuV5yB<xg& zC^XyhVsp#JuDOos&0SGmd)`2-e0D^7nE73de?aR`mv*@r@hySZJ4=LTm@)FFxSD-X za^p12MwB-u@U!qncAz~FZwhUxn6##TO2OoUbtW}*;ComGaD@*l8TT%n#Wi-yg(s8Z zTE=B%{sxEz`8u~!v`(98FgW3Zt-8e~u{u=p_&NR4#h$p-V?UNuj=0Xgh;Vogb4LLc zHcww(b7I_I;@{0cbI}r9(KKZO*+dwM@&3%qL})?;JF1Z)=yO?<oA;4wnxjw|WQYAx z=)(>VN#HkzNAA4XH-RC*C@yPRGc&m&czPp0J*EuT^w!3`{0{A|-gk-cc%WO}q*Xq{ zKmjrKn!G!n_!14~*o<)-(Da&hilUSI7Xe!vfJG~K=M=gV9U7eb;lV>?O$N)GFXz-D z^pvLL(f-%8NE$5PU3kvX+WKH|Xd%CauVz#4qP)IuoNa0?78BVQ7N?rzs2<EJM{)E> zVD3DW3wG9~W=MqQf_ZS$+sBOu_c7UX87f}L65Wc>9gDIAL8nff*eQO<_(~6{yl8gs znB)_ED8@Ipo7Su{(uz|Vk^aU@xjy-am3F{tRVqg@<$)o5OXX!aP+oHGjjfqFSF<e0 ziYV^m*gT=dL*4e#*h~#(a1g&B`d>wi)=mYw?=0}7`v6?Bu4BX4PKY4ZvD0T0g1}ei z9X7woWbL*ztBkKSPrm~C_Ig9JUHV_p!8)X&zdu2y<Rn4wGb9xQft8V98d@M3hpj`o zN}>fbIGEAjET0Qg*X~TNt9HDv>i+6^cA}zQQ~ez-T<2`O_v76By_GEcdP_UbhBeu| z*YeRIPxoKmy5+;Vc))z>X{<E{3&D;bY0vEsE0Px$Ebz5gz&cb|OAD&;!A!^~J-jnC zNoYz9^vb7LsVg2F9s`D*nxmTHLiBF?{YFFEV4$eMBG|9k(pIH(lE8s|<~8#3+eEWK zip=ZQ*@N)d6$o+b(?0Q>*&oUg(HnKq-La4Pt=wwk^EFA|h!ho-l+--hhtp8JB4~~6 zA!ym7DUPZOO2qF3mWF~pFrxXR#O{2uy7VSQJg(cbbCz1?v`AW?I2bv%#Z7SWt^?<H zug~cle6T7$mwZ1k^6(0gSw%_~PurL9=?J(=VM&-IydHG_!N;IZWyuPpXLVd@{Sj{` z!Xhgj^c0c!k$<Nf7?$1R(h^f$NwoMVUQUHISSTy!_Tu7{Ei7B|iRF1lNLPF|6ee4Y zSf%C11|evRZ0%~r8+LM1EcP#r^vrXu;9?AW<dKRE<JOxrR-|D`Y-5C0Ir2q=F)XLV zK9aP{@$C{m#mw<wOTD%t1VhoM;FD1#2UeRL_hZdDd6IT;?!=ke8oB#D>e`O7-Jp`x zo%?;cH7Xl@Ey2R#-%5wq>`AUC%$4nzlufDuX$f++x>z7g#m2Q4mPD>z80pkM?Ps8~ z8`e(!O`>So${<mb{hLYp&9XPorln)qki7v_J|ULj@lNS&#_(up_TYhyUCS5VKe03+ zQAtT=6q(8pa_+WAl3Tm0dMRmb7T4JjzRu{hi-OiSdvP?@p#GpDMbH!^Zkq^$MRpt7 zwI@$>OXx2R5fE=@C3VB=kzvL(WxHD3!xrNpWq&Mac%TY{G>dk{ialcW%Bgj0b2qZZ z-dz7Vl+OH#J8RX+XFr+z$3+h`w`dHn+4up+uh}8;Zj=XluRKT&W&BB>O5wu%*QFaa zqM!(3G*BS;v>Xw}#56$4(92*40{)_hoox@%s6MmefpMI2FLf23k%-&+{syV*WAh@6 z9+E`WT3i&p{_KGCGgi6v9;VfGe>F%4d}M6RaznnK?PQ~Goj>r{bVq%>3nI0}8%n-+ ze-TE&N#c%b8%mi>`fV6E0X{q`AFF<{!3YhGW)EEm0*mO~C5303eNo%LnILvoSJ%Dm zCw(G}Sta{*pX48&J)eO7g4kLis~;d-`lI`Pejv89a++Pg>3VajX@KY7#%obTl`laj zy@Sh`t>@{IgZVS|k#wK%B5dv@dn(Eh8~jL<nstXEg}Wx`fS*K-F$jZhjh`hbgGTFz zer_=MlmH9ay`Eqe6XpKEqbvS_-1IKSaoVQSW!)f<C+uGF;@W*5cZ+=mvGeEjauvC> zb1}eGy0%udlKA{-D(>!tm6+hBIA|Q(*uoo>>%!qoma%!A_ITBQUUsGr>g7`>1zhgR zX1D8EkSOASVmb6z=j`P_v3-RF4X1l&&l9_1IqyS*XsUlFLu5rCLSMi?UrOPBYzv7E z!>(+2zdx8vBma_6?2gI5=_RiY!;t#duV8UqVq3c<@b%0QL2eIIiI!69cQB2H3B*r^ z>B^6gnN2a=W%rCZ`3h@InkX>S48LH*8<;-)^Yg7y+Ct^p!L7t}AY(lQ=c$WNCIG#j zTO!YVv}Hg1!J;D}B)`?FKc2>jY-8wIPX6-gzpcD;7=)(FL-1OYL|;i#v{7pXIWT^T z`&$!dYVXs8)F45;Zwh~i;_?m;4xX?oYx@(B5_K>-TE9z%77+cxLiA*_pcwUX8I;`_ zf-m(1Bq2*y3+PV>(V*Ub1#E4^(Bdsz01^d8u(caUzjAsalytV4?UN0@L2t$vlLsYe z;1ab5us^00i9YGp>h#=eWeoH2?!CqKxV7>x)>-#<JO2932%S=xPqqRoh^V4@yR(sx zuzmQ)d}E4^e7HOcl$y2Yf~uI`MiX8ZtAO;v6Lc4<Vm)cM#qsn>a}wRbb>)^v-G4<< z7m3g2cw=PR^!Tn88B{sN*&o|_m)rCX1GmrW<>qf28_qq}qzBFgDI1fsx6j<dq)dx- z?9m>MX6e_q9kjI?V^!fRy({4p6P#ZwE4&>|>#3X@uWJHjAjcJc9n~gu@%Pmppc;P< zp1zVMf}bdI&P;>{+*5=k$%K_UUesiFD6KfYCfClZ=f5{;!&nmONdgn_svn%zh0LWE zo<0$8=PbK?2p$!CvfVQLLuO{GRw*gwZeqXWd*OR}5xaWm3URYTUApmc{xY^`k`A9H zr-Qzd@drv*`pH>?A8GAQiOZ?s-)47)|&)BGA>^?U>@n%%WeB$T`6pj}4y_S_RR6 zo>Z)zaC}#rCmk+lz*jAxnj%Knvlpr!rCZmO$y7#BB9+LyH&1ZfdhzD^wIKdXrv}GH z;mLOJCG&{r7hXkX330DvbyCTPo@dX%_tjMt=cE|{e!STb=@?%T*xl$mZ4!TKKCoze zNu*kci@h;ulpCij5_k9luA*=8%4fNP_7Q0Nl1{JQx;uh_5mQwO;GJ{I_l!H|e5+K( zybIgNDfSm|x$*Wo`Lxz*#g@I~c0288hA;Ad`45BS*+4yPdjCaBkHr{1r11*B%6DV5 zr4WEml2|kxzEv*+w68UoxM6!ml>4E;^gBSt52^}{3YRn;mi;qFKW2wjV>cBwZ_);7 zrDS0WD$^jsLeeZfLBTMB-iH|Lk>mO*w5;Z37r6cXo*U<Je7}_#=?MgBKH9-G`c&K7 zTiJ5tHfJ|;obZ0N5Lc#Snf)<G*Lq-bnu^Et^VKrH4T7kDC2vZVg^dW4G<3<d)5_r` zl|qjVR^2OS3tZ)<B>c9e(@Cs-?+$#?LEdUkb@s>4t(D!s+AMBTqE(t!?X|B@ieA5; z>M$%P)7ly)?cX`8_e<%xF~7-J^X<mP?<#Bj#?n}~-E-vnRG?DmIemiJ#5+gN+r00r zwqjEu%T8yh-GQ-#4|{DjWjEJfNSr8RA=R)z?Zr-&Fi7+;UGDp}kkBR*T&)Gz0f{ul zmLQUzQ`pkiN2{1e2siF26|gMvmzclWP3B7jTq&-DZ+qnejtc4MWv-g3KkOk?G~AsA z`NVMyGY@Nv1%H;i4iCpF_)c4?t+?>Yx?(A>FR=^E*u7(CWF<Pi&2c-xhu`?l@$1EN zROO7(tbQ6M=Zmn&CjwwWfXBkQr#tc7T*aOEs7sDK!4tpcmm-~C2jQ0>`X^RsBCot7 zN=GFC;-*JZ($an_L=CqKhlU{)_t(U?59XEq_r4`bx4908DC5!fvTO;%=Lp0HC$%?Q z9P6&Q9+vHaMMOBaXaXzn;z<`LA(ao2l{xu$<)?{<+^U^5`=&sq#*hv^6~aQM$#>#^ zI=8E(VlQ1GbtL0@$3yjF!({^dEKq60@aDbmNGtrR;fw#0MNNBvPQcHrgD=}I_3a|a zr+SubOgnG3j7FSmY5p7H908!S(#{uby+VdsDjPNVPFX!FQN0K31{$sR8W90lMpoNK zDu*>sGbS#>KRMz^$K}_|Bb)gCX-RRcv9<YtNPcK-9tO5%(^HQRvpw{Y`2TeI{(ZCc zJflD}^8k0y8AA4pZFFeg^XcqwBCNtXFNq%a(66uG^{~WH{R^%h<NT*o0o2#Tuw2H9 zbOLj!U3Z1anG;3=oX=_mQEjj0XMBcsvLU>-KuWftXbm!~HX`rR*Vi^tv=FpBOhe?d z?yl$3z6*(bV8(J~(rcNvGShXK+m?~WyVP<K%?xqsioaVNUg@p7F$b*?=7EnOdtoG~ zoX3*@4>hN%fyVl{n&QVHgnRD%TZI36Z&N=>p&6(6`;8!}A2eu1nUK<{6h>Tj&Nz4z zW|-b!gq?%S3f_@cIs?tN7I1~JIIcT(F2MbAbzT6qS`N@3hzQ<@H9)RM8O52u>-_aF zG;~mDE%+eRnQw;LcD_^b*hOl?+r!5{w{yYCrWtWPgJx#3`y^5RQxt{Q?3!UWW?RmD zcJ-u%DA4RFY>FPg>#NOs^l#Tv>idIz;{Wb|on^ptbX}qLExaIVHJIBX{!r*)0(DjS zKdN;7_aqmeLcju?X6%n!4G*MYtL&l(+bfa9sGNLv)<1Xs7cOMaGv>4_%09d!`j~6P z6g;jfdemF6-?TB>Om=O0{~*_bC{Ljej$I9q+mDS15^CLo7y}EohznYi%9zDM;`GAq z#y>h!sg2Y?2}BQ_#`K!Pr?DcbqXs^Gl_BL2UioW3&1uh*^;(}{5`4;iti99eV_J}{ zT@*Bd*_6BBf+py4lkPKZUZD56=fT7D7Sk~6w`+tP^&Thy%@DRHOVuH}R#V?zo`Tfg zk7dKmT*2^`yp(2F**J|4Z75<WLapk_%_2ybT{1>;eHNukRp2N4hM7+|!OkRM_|wEe z8u{oE1QrO6{z_?n_=ghGH(-^BZ@PA&&MNnzAIy47CcPNjjF9h)9h=b*rV)Y)lEL<W zG~VGSDL?kANP`RP;lUTZ4zVFKg-3dUk{rbpGPo73Phur}%%!R$^du^%!KObLlu%Py z;n#ALb;$&$=n0g;R>Cl{(>c0C=9Klpk7+`v0%`zA*D`A7zD{Y=ibc;fM7rYfZ~nf{ zO9*b|J$8As$E(9xQbQ)7mH4Fdi1S0|9{H17d!@<MaK!2Qs!RNS-X57Btq+LCZDLE$ zT-hLAla$pQu=+-bV4Wyb6@`Jx)};j1Z?dQ2LkG-=JhLL!(YY_5BaZO(#>2gf!iO1* z(zYL+fg4`I!JTg0dl7m8B|X_#0SV<T;YKEvrK4t%=8o2wvgP9)nGkwY-VV>56O=Wa zX&?^Sj+rmLW_n}9R7$*Oq)NPgFhMCPTq8n_n1QE#=ZYmUWIclq9`tplXDci$EMC(N zn8pP4bM;Q1yB48vyQ*9vH4Jb{0I<)R=e>?{e-eCpl}|o6V)U=IOfw|ZdVd6kkMq7) z5E7hhu9`?NMSPB>zINaCsQ;f<hk_Y%44_+R7=^NiJkWcLYIgZfhw<COLH~5)SgGqd zTUMgb30`;h$Ge6_-mD!J&cMJuA$Il(i@G+kwBu6sy&ajQs>kMT$}1p7YV%};DhMCv z)-y1h+PUcwp3n1>tKqVzD98U%=vj~l7IvMv)gNZwrp99F`c&Bsdc$uXQpp$;!6enU z<~@7%&eOI+@tUGwK{)_2qKP`JL8ct>r3E;^dfWldmPC?V6jjkD-&I@Ex3-MBu0sp| z4!a_qifpz_Sv91Wd|Z%UZalj;ZcMREgv$oDRVLXuOTELtRX{ZN2UT;u4!+#NW7___ zy&YII13RIG=N#$^YZ?PQFv8zCxSgZVnbd`}_!19d6DWbjv2a%?3x2pZjoU^SE|RF0 z_T`-FUt^UcW~@5!v3$+;Nc#AGS%EFqxSm3%&3T8;G#*s4j3lqxldJ5O2g)+OML8la zcOmFk#`UGR$IaKp851B|w}!PW?{?d2^)IwCmG?L+U-l~DSE7kGMvh^wN12stE_!L# z7nsa_iL{|}%^es%lBxjdb5z}0xHmz5q->c!w(h_NQlxe)FlE^pzi5#$)fv=4=M5pL zM3mJ-u8te_4_vPdJu(CCEVHfVTts=E+QU9OxBAdW+OVU;BusBo>Qh<yDI^uFYNaKt zrp<>k+VC@cDr!(vR{Ym^ZxMsuUJY$NrmsxBE-om=iui*i$%s3H<E<_TCcyup+kZSA zX5H7We@P;_Jv;X_>lOH&5+XWvS}N^zQ?bJ`AnJF+Tv_0|?hUtRE<z-qQO;uYluMK@ z*SH;W`c^P~>z%E^=-q>UMbLY4T;9gs9k-6`lqcSz8o+>8^Hxr*K=s5mxp}}NXEXA? zYgt+tGQQ^ek7H24-Rvy&<v#On(I$g5r>wE;<PR4{3M_e{2_t5h-ai+LqSAoAE%&gA zJpxTOplNv1Lm1hry1{X2*E9s5pR$pob@Oiat0D4(^$qszpr=Z3QCHTq$4EvSAC316 zeB(YAac62<mRu)a#f2xn&-AWg^(-M1a?mqfOzWAQ!jRa%w$Ow?Mf+$yl$6v667rHH zK#NUb4tmbu;P$0zC4}vepR98W+lmTwI^wj!do0lGf6Of$JF5n7aPMABb1%mFB0Mt_ z{ZSVo4LQHBMSKn`JpKf(1h1<%Y;Je#+{oM){ed;g-DAnU{8cm@GRb#$ForLr3Vt$c zxcI5y=ih8U;V60#g)ZpsoTCjL0;uDiqjr^9r49k=d$ETX4RXl{)a_^s^_6v&?M&f3 zEYPuNO2LU-)O;mS@36QVUf-rnA>OU7!u&s}4%?|0U4ieNAYQ;OO;n%jph1}R<j=Bf z!<;uAS~n2M-B}seK}>j!$fu{jej(!-_=d<mT(!!z8I2!ae|MWYd<V0j)dL)MQbiU~ zp4+JZjF?~B)5v>*NT?hg7BG&l#mRUGCPGNh|FyC0)Mmt|r0lpjIB0w$i=zXj2AsDv zH0fpBejMQn%RQ%byef)uL{^~6bZK5w9yj>6MUw)q!n$<+qHQ1h?!wIcMz2)(&1HFm zgu2t|`T~1dUf$nJbFm)c*u1|x1$>{A!Jv}0QH1@8VBjKi7lW01UEwLo7bwqW$a^%8 z+X|sg=Ahyjfw5VSi>4^P9q7U|{*APCo*P*VbEy*nL?(5TF0!v<g)WL$>+rG~k(T`< zE?n#(-&~Ae7SFDD9_0`m=lOmmX;@o{m90n`A@sR9?_#7ly}lK_1N~UNkmj}DtF$8N z`8M7ojv2vZiZ90k5J3Ow&}!3fYH0&gCTt809!B{5t${KQt~JcF(FRBO8kQjrK7V1) zY(P)Fq?*}^`1EvEDpP`7LQlUQ72NQ#>CXOebc3Y44+@7Wp=V+F(fV&g&2M%}@fH09 zij*e>P2GB_VWV+*<uX3Ib;RvQhXL~Eoln}q1reEv@fU0nQU62*q17l-%^VgkB|w|O zZL3B8R(03u&F1aZJT$m=1fNB*CA-2E^2Jg%L&g0ck~ea4dscPliKl-uARlUG`J*4O zeNqFtD_VQ)Y=|!BGu`f(b&bWU-YiH|F7a^*g3zL{D<D9}uniUor2b6?`ZHwf7x2Bq zDrC@kRPzZmh}~ZK;%5e%tS``X6cF2sGQ8M&V2{RfUX#`GExOfw;#nYSL>k`GGfalX z>8C0s#NLk_zkZ^VeT%_t8{5$tu0&LSptvD-oqhFS(|lhkGiHnHI`8Cyqv|=5>~Io= z?eYb6Xhyz&1i9Xol4EzHkv%H05v7uoFWE983tU(408D~9HL)24VFk{(w@cR~g0kh2 z(gGZ-XKb0;JCwi3o)Mj-m~_txBlcmPsE<hT7D{#2!vXm~Wt94Rhp;G_Ab`O6OKUps z_bu5|DRGKQSKOj|ors9BV>2&V15R>u(ET!Z(?eca_UyO;dTHw;xzMyTv~Jt!$^O9L zl^wb0+T*2;3=zwZ7^+xLag=~f97QJAIuU5g+3YhbtQu2V{SGVCGBUHewa^^G_QOP( z-X|j7!cnc;S~9mZ2+M7!g-&_6!(|D<I-*M#1p}?+bWBS{HGq<1ZpWLvv$^}pp~3g0 z7TvnQ-HicehMux~HZq1kg`PXk|JZzvGFP>&UwEu?Ki*f%^$e<+y6rq1dS`i^jsrR< z`{aY0`Pz4|WiMu28d`%gtpV?9gY*Z=TXkNeoC*sGf$?P?Pv<OZpmG|P^FtfIKDm?D zJ|=vfMy~HKk6()vmLc*Hljv;pJ^K)oNduqbR+<0UV!*#LGL#7u{_LAQ`gCv};{F|Q z9>qC-WkZzRa^d~%3U!MLM+*1LnVe1M@k2&Z`~k}vIZ;Rh6C*DlbRWF1KO0h%SE6C> zdKklj`u({Onmic6{c?^fs6#!k%>TMyWIfH9+z%PE4Pq}#9exf1NO#9^V8W}M$#K^b zl403ZPF>!o+kZsV0w^V*lDj*rx3SXM-bmaCt6HBDnYo8kY>SjI73;&>Md6B2k?h8o zPQ8CNlRM`J1tw>8Q@Q%YF;p7Ya;0<ZBL9#s9LyH7p!PG2zZ7fpj5qyZ+toeG^^1fi zE>px7Bzu*;uTTDs3wf?y6vESnbNS`1z-4b#V7S{#8#KEOLN6W2{NRDO4^flg3+~c6 z&di`|KGW?dO8twHENbrc(56;D(s%Y`MlR_)%VCEXFaXarSpn1<WXC%km*MYnld`J7 z_z0}6W!XtIU!t5}A@rkg=%@hWK|f_(`JX^&%n8-GB@z2?jZ0C&%y~wh_$thxzuI`y zuDLd!*fJqv(z|&g{x|bjx7&F`Ns)yp5gD#hnrXF$v9U64J73`!qWP^uEWcPsLzqV& z^?SY}FPDp+*R~{FZyeX%e66xT3Qh!?o-xE17yGh@fz^m@T};vGY&_JRpk}1LH4~O? z^lBYJtWX#Jk#;#k+3t+Qo34Y$*mqB}`+W~G&vk0xD?rCxZx|xnWxo<Sy6Ov_2~78m zn6}7yV+ZdvS=~Q7yD|HVB3${Pw?DX9`4)GF8}i~K*WN?r3TFBYUPX}l>TE^Og-f6y z^N8$+Perz}sq`%JU*!}5+I~`^>B5CI*!lw>S9Jy)B+x4hq=>#YNYUxo!f+MPlmNC! zBxY=@DGfq!k#iiJI&=tGux+k4rnq>8Q;PVzet@4HJZ;{}d-dru3KcyA(}UbwCfR%N zz7qbFauRn>M2RP{B}^gXSszU!vFqKH2$9a21!d=04wSX5K|c!4azSfxh=%}K0Dm*S znkoMjZo=(H06~W7SRH+o(S}845K6M<e0lu}r{DUpmigL|)W2>S-wiLc((+XDK<BHS zW@Pn;`O`mKb!A8*X`dG!oDSl!=`{G^f!Ps4?s5F_sIKdU3zopA>y;|x_^j38ZFaL8 zpX0j=HRV+l9)C9TYZeczLTWWZhLJQNHyZ#G8VSW<pg1kK1!7$yG_Y~AVqard>8ldd zLQiFfpg`jGq-AY^2l;BRpSP2C$WmDT7oD*K&$8W!42ZGxm7z4wVt_Zgu~Amzfno_? zp3b4))U;;b-!AN%EIc#sCaYNkA!h-a05faa5}hSC5=G{m=r(c<gsAA=MDJwaQpHgh z2bC-f0fUU}B-*Jcb<;i2tc<^YHNse~RJ+Inzee2^mdnAH9k9-b8P~=<cS(Yrr7qKb zCzgUKa|cMhuVguC8@v2y71#dJ5p}rS@oxn?Z#J4rmWNAyZ29A+*t;jCRmLt&hG#f~ z#!v2k(7yZDa~l10)thc$!O!^f>0Q;uaYWHos{alB6rjObuG7{{*lcMW{JqfpnUxu> z5f>SHOc>@cz=oaV9RD8<MdUjHHQsEG^JSkEu5LV8kH8lPPb!_2Dr-d_=oJC(VUBYV z$bUX-EBYNLo_J5Pl%d8BP{GQ8XOwQ$=h5BPVL=kgj7K{Y>@JF6`bm<K7MBf8p%bN+ zthn?;_<^ooNq)R5E#9-A@EWqp29V*Z@~5xTN1iLm2ih)QYo+)DBHt_;$LjUvF7{EX ziUHSLMMJFtgtFPC(@+ff+{f5t$W!{yg~1WhbtKlCi;Lc2w8R1^rpzB?$pOAT@-7R> z49;%zq<1vtazgorfDav*ot&wt+5P4^mcZ?lGdHLxaD3Dhy?o;?ZEbM7NF~zImi1SF z>qIS@vWX528&BOO+}1`<*Crd#L1J6^6m*3_;E5CNpLw%wnTQNX>L+7?;t8PWqD0Ee z<N{F$b?!pNRJOy2@2#85RevCVaUj|Vjsh$8(7O?@{Lk@cue>+;p?{ntn$J={<I3HC z>yCJjrN4c+dhp<Lai$^YJTheFLo>AcFjdyPQ=i?6r3SAr%h13{HpVXE@#ASh*K!pD zZem0$HrPT5h(6aj%Im|lB^607f1R2nll8XzepjZJH!g~1iFRoyo_25EIN0CTd(p}` zhpg#5i1F3ceHkH!XqanDz<sbPZOfp)kP1HSl<HMr$uL0?X|i1FAn%xZk9T+_W-|Lk z-s*p{7A-ooSxj}}G38#Ik&&irZg|^*=d&eepTMLQ`f)r*wc*dC2?x~<c4#CZR2rxV zvRa>`o-Ggsy*-~}6++?dS;T!m1eMMMKCuGykZtq%e>vjgmYL>|LN}usGIV81#Hpu= z7qP6s-%F6YzG@_@|HInH(}Q0(`K{4r3|*vq^tL~*D#NCKjhaI}xmJ7V->km)9gs!& zsuOdPyi<NkR$yGdl+FMAK2!H$vEE3++%VPgh3gRN9<?W{A}Dm7!GM||N<ff-07HJT zuJZIDij6i%z^GHC9Cl?TguTyBWg(m{QRg^MWL)n|n+9z8<@>}6Ezn5e6mIHif$m7i z9Rg~SHPI7mLosEF5Z+#h4+=8Msb~bTDj!hofi<H_yEww4#|bv*_Z9F5ovg6c8GnA+ z7}=icdm(W_lIKDwD!Mt2z0>{9{?(VQ!v|6A33Zi(h{=j4L*v+fy%1j+KsqfHEK5x& zcTji2KyzJm3+ypD+Oa2DyHYQx#x#T!X%}H%774@JCOEQ1T(WY-#A9r|DpCPhoZG?u zj-Q_Ea-YMI;T{K-t*6s|_?_D{o@n2DNqs6;@ukPZ&uRCC1JJb=XREb^&fbN-B}{<D z!%WTx)2he~55e1#d&a()w}`}|4^KBC)EPguxuy1vi+@(zEPS8!45fI5g?Vl)>-VH% zdp)O*0h`;sOVm1epg3{(*LIYn+c%pHWO|C%wMNqWpLYDJjq!EzS!DSRAklh<ftDF= z@)WjCf7ho5*vDhRsg(MxJR`aHgcb-_L9D&zH;yW3O(<L2YRif=9&D%f&!;9$^j08h z;C1TNz(w~W0>qGd3q7Hk87icpF(SynT~?%wBPzcs=Q-KeE=*<<tpySS=8>hsy<7@z zM>F{-1V>V}%CX=o>cRVurESI?e?c6i%xrf>Y|lVMJ31ftpzX+=>}#=4`0pMcp4EAW zN%-j&SoSFTH187<^t@6$kM9d>c`wOCaQ_S&h#(h8do8|eyPQFU$zQCH{npqNKhJ*# zkA-HAo-jG@iLcTv<(T|y|EkVc0L3|Dn<ZH~itKNQG9YRMqg}Q4C$a@_VA#rW^@%@j z=P6agZ0Og8mVNWx?mWTima^p!9LOn~S=x%_%MVFD(WB@LAdGNk_(4@j%h^tnDpZ;B zsdmA-4Q0zi0<lbjgO>TM1*7Y*K*ILtTr|mfx(s_A^X|zK#6LgKVIWEQ7O4$V{r*U| zMg@hAnzhmXw6B)o)WkV&JqZ}n($#xqvLDOrV7pXDC5^Okej|b<x^`|To5c#U{w1}_ zEPIMl6&RF6uz4eYaGlHnh9&hLC7v5sDmCU~F5?EtwjbX-1h6KS%&x;)6_ZMkW|f9_ z8i_}(KJs2cserO>{q|rMSPlkMopB$5GDJs<3zoe-?ozQh;F}Od-FtZFzIml9{Gnos zUcun(q=*kKR<Pch_So<7$dShEZ`>h11Jw&{R#}QyLEAj$@<K#vL;xn~S8ZGFB!lI* z-tR?e3JpHcy^e)CKLMVYpmlY^)7FOb5?@0dW!wmLR~phRgvhI>vr7>N+yJT<)!F~} zRv%I74I=_!K&bdMujnBsdv;CJl#5KMYn@{lzM)k`zE4%^pUuyy!bopB2|9D~fBt~q z>@tcZS^#&nIwvHsQ;x3`lOQs8V*T-(94+GeBOph&xZ8sN^VG}?n%^M$ZX$pk5o;fM z-)nsFMN%hO6tmd&@fbEq*?<AaM(Pj(w1E^(B!DWX<)YIk7096aa7(SL<gcfCsIkM3 zdnX%O`j#3T8lJ{i`x*RhGeCaG>g6;lMvm+NdgQ-5R|^bG1_~6v4L*X?ngRmZoRtg9 zpbli9Bwb~WKR^g*%HD)nIS1Y+=#e3HY@>#Gq^XDhC3t%Q_2kDxm0$&jGM*{FSGyXX zZgk~JC--&eP*en;WG8jNoV9dbW}k^Pe|l6+xx6L1U3NM>PTbK5pj@_`$Oy4W2^i5j zcsXy`8H@MroE32Qyh_Ol?o_G92>2#^>Xz28m3Lpawi?sGCIfA2ZkCj^1u>voO!0sG zC6aGEXx2^)HFlBrvyrwz7O?>ORbq}-se=Q_%Mh1pwsZGV0=Hv-rY>#mkD7Nd`2+9G z6r^WddmyW~GPWg8YWst`Wcu55BSX;7@{wR&QGTL4Q@{dK*~`e%Pao9<2!0`D3{q)h z`?t=Wd>~Rk_l^QQG559J7(G;;v_5EGnUuN(^8Z5U^=w@WfX1lKVK9H;XF%dszjXUA za=`ZlxqAWnjDH^-h`4`IynHG{R=w|nO6Plx`-6$S<R?nv4h_gU{nE%=kC_UulR7qw z$=Bph7JtBOp2bXO;-r@(BbKb6@T<s2fIly^J`a~BMy7}Ws!h3~`^i%>if=i}#0f$Z z)ItP>1IjK)PKcv9S4pS7pdv(T3qgJK^@0@${|A>D07<tQUfvA)7=6QnJq%Ir0_!rv z{;i5(`J12X-)lP@i<%$M7j0OM-P3XAKhxxrx+opme1O7;)0r{+B*vk+3!gc=*pHK6 zhDMSsc<C8P*6%^LQg~G&WzX^{7pQh>o<?A-6spSdIP=7-<}*i92mz;NXG_x+lH0I* zlPdEGpp6ue{7JdWw|QjkF{p_#acHoQeOk>Ao4y363k9vwbiXfh^(_{jGj4Gry<m>3 z6#1Yj^7fM>==I;X&lcgeA~oCGLdnU3fjc<2SvXG&UOn#^lywijRtLy~;VEcc{cEY~ zZXI9-&{&?jJy%xeFF*-)oGvi6pMW7uimI+mk=m6<GsBmG<cH4aSXxh<14i!M<@Ls% zXH@}p6SovL>xsMSvnvb(-JvnQA(jnMDB+$v2&r3e(Z`T2h^*DAseP@ls6JoW5y1Qj zd`*VAt7TvW2AG%4AM@U!5VcEL(nDWXVm-$ZM%1nq=&+11w0Swfb^yJkABTrO3m=V+ zfWuh{|0lEi^@@*u@5>OIZgbVwGS3BxO3~ArhxQEf`0EV;;EqN}2}R^9^fUCF+U-&j z&@()I+<)hU586RdRR-yLoL(gnEwKS@39k@QrFm}M!-uH;B<*kb3CmF5!e&d2h~oGG zLi!4_EB>2F&Jt&bzPoRAUw)EP9uW&)>R61;jxmO6JnK85dl=UD#>?dAJjsYO(odL+ zfxz0S)1(f;7X~1y_OVb0ssL_pgp;Q4Tend!S<1OVRnE)e1(SPIPSxZ~QD9dwKPVf( zW8BKB$$bhC2hhdVeW3vrOawjNqx5=9EdQXfiO9H8RhGVexrv9kYsa)jDe@Sz`69=K zlq)KNY|B-1i*_g_MFMQ!v0tIuF5jb4-*QT-uxcn4ZP!ae>m5k2P&F{g)I<F231^sr z7_R_*H231>-OJ+*kB--}34p@j0t*@nRg|&fck}=w0dQ(yvlsHER5%1r{0I?UZ1%B_ z_7SBGY0BAh9L3>*A0p<LnHK*MI}k8K%TDwOMFFLQzsBj|r>8F&29&=Xb_c9Rx_!)f zE`v1<;c9*bU#bI0K#Es#Z8@(_Ub6s%KWj4pH2Ss6NK^a!UZLb{Ghk89qB9WVoGzHh zhGz*JL~+`5n)NQ#bv>B`-UAk>15xYq=s<K5p$eub_!CqEzr4fxJ@8R8U&=6>FHlUN z-^aJz!7=|Q{7ZC!dW?89hE0&7CHyK}3{-rFmm4pO1=JjI2rw;C9fPC0gPjdIlZQEz zf92)mFp64$U<3?A&<~}hmv`^vN8EK#K~+CS6y-R<iE>>kKr3$F7y7Sd3qjXo4GAND zo86-!dc#`j1)s-t%o?*W1I%^pE_DS0c@G2owkXqX#lv&D=9?*{jpLhQv`IK|X#(~J zDJ5EAx4K5I&jU|S1eH+~1R2P&>}oSY_az^&sgyoTtt>^g?Ht*HE~&5%;{oj8ckkX6 z%L}&OKD*`YvrxyEezFWuw?7@W1L%og*#J~1BlW;hFlO_`TqFEM3D!G0N9`qZOSH{l zc6COKqTTlPS4~wfV@gLue_m;|vnbSYb@oI;*hUbrbL=5J$tsA-NSn$8oTBVI!2WFt zPzPf@WO9J{SN3lsv`LLLSOHrg_`c4toaq$H=bL5kSe!@zJ30di7A3@q$A=mds;0~a z974^T$Fj~Nt5F3^VX7APnc_oZ4Y|?%HhSpj+4vkg8tlf5A1>lX^xwTi`9b5!Y)`x} z)Exg32kS)I4e0ZJSkJr%4@MQ!g^Zi8v%)m9nr|O-C6P4C0_@Mqi(2R~Le;-*;I?pT zb`$lR0;bk8RneBWLC<<*Uu#VKtvfoMMyc}O`gy@2aAnYiD>H;uR{8>{%OV^98Dt#} zGzdIpa2(W|#6?Z$UwRq|*-v}Gf3o<fiaq0x(9|vj(!1_US#V_~jeB71wYy~jmJ|U9 zexi1&XLtNO4jtP*?@Oc0P^78j{(^6Wd5U#F7!h5CPP7F&${X&58yH{<jx<bb6G94K z5X_pP8b=#sUtxrT3^<yJ4jg;`fh!9`Besd>pyjx?ia8j8=kwrVvpw~BI{~w){aLFM z&Mq*N<lL-5itPt@K`9t8XHrFZx??d(pk_^NORnBO;nz~oF*+Qz_HlgyU7d-aLm<Ue z;hKfx*dEe;b^sx?G4j4M1=^pF5@Oa(C>wqNFl)MDuL-GsK#3bn=J(s9<o8|qU?g=y z;q|X@`lK^9TaxiPXdR0VRTzEnn>fqB{dfDuBKG-rCKiA?>i4h^j@EdNJ07kvs!E_V zCC1J3viN-9?cW3JF*acF8_o-BKLmZ(%Wld;R7qeeR$-MQ!ylt>VAuz6yEV`{4%~-# zDN6MmoyoQ9>0<iPL#S<Id=oMtI5g4$duX=h4@wgbW9jE>1VjjKPYY{SS(<kj`04=n zCX^xcG3Ao>@yJvF(ImEs*}t{}H56TTl0~L?Rg{%g>1SN=Rj1wtXR|bkzFD7HJ9YyH zgeeufwB2z6Iu1iAh;l&t*)I(!l@81(2k8YF%bYZyvZVgD`Jy2mLA`YS#dhwI7P}tJ zpBDplsm#E<U?#}e22{R+qwK)(M%x7Ei-(-?sFs4!3Pk;HIP9_&Pi*HyA*D5T27VkL zI-W8tkGZ`XxLAjX<s(_&G~(4z)J5@0)`JF>qFU^=H$>Jqnew`LCkB6c0r-W|PHwW_ z(w&0FG+;%p%mfUn#VUJ2++j5q++U{l6Htv4K4HhuiLRq6leK8Y6;{CZNWaSyrf06+ zBNzO>X-&g+;T*-mgY0q+T__?pJc+8TTlb|W@UZ5zp$2ng)@2#jvn?=fdbHD6hz?Kk zK)N~k$)B(g2)m<}?eK0K2cM$m1RRhreUt>UZ=J#On`a>FT0e<2_mMNL;wV?@fQ_D* zNwg3-hnPwCI=(XPFA}O_S2ONax>A6j0M<m|d3=URpQo&k69WBS#jwphH4prt#)oXS ztAcz|r>lb;=PtuBv-<Dl)#F0n<%>qkV3usDe{Ry^48?u>dKa7TrEbqQ*aW4ElmGJR zWI;rS=6A}Xvx*E^8VElCYo6Zc1APK4RuQ;J0=7|3r6CE9%1pEu2@9h_fS(ka%w1Ps zT8i4h?N~u$2D%0Y2KFC+r+#Xh^v@M3Yvj5E+hbaDqMGyznLgEWlgk#oc29;bZ`tR^ zlOrw;leq=C4P^;~r6As~lHTBtwm!PCOb*Kg0$v?RM|`jQ>5N?=5cF7GQni~(J+E5M z_+ADJ8A~q%G=bcw;tFVSoqC%|`{K_%RdH3PlTXCpys&DwMgc!E?z*D3AGn3&Ie&^m z(anqYdb4;a)YKXjnk`(QXA~i@By0<cRAib#tH1L;jyq;NOROohtV$lS@CC4b`>us< z`HVw6&X+yh)1O{I%==bS#&t-NbRu5#u1Iprhntzsi&Q+4FPyE0tWNS8#pB++DLe{f z`BsfX>-O%VUr^Nw`Ds`o92Az2Fi@BWHy<Gia0kA@rHJX#y}}P#+(NHh1dfE$KgUo- z(Q~C`*Rjx9Krs`+O*G)NuD&U%J&;iLPj5q|pskPbBg_9$blve#|9|{*=j^>@oh>1x zBJ0k`Oei4{3fV;VxHHPg9@(5PS=qacGs?=|BqJHwd))l_{q_0xGajGk`}KaVcU%E* z+`C7kSx7ew@Ho?DmAwRBjcF{&9sC^bX1GxvqbMoQ=JPVAqc`!NnpPkW?)2Z}Sp2OJ zp}*-E&nMQBSpYWQAF<#hbMuXLk6g7nzPGw-R+Xd@D<bb{&1SMs^VC-n98+$ugHPH8 z0>~Mi$Tukeqg?5`n5G-)o!ajYc-HcH;?E_GLNM?bQo+LnN~9dy9^V_^kRu4LlT4al z@384O4DrnwXBDD=H)K##b`0^`mkFEf#cEzi%T^eW4RgzyN(WcXa9-{&Uxe0+`3@ED z!}I6)Hwm;;m{U3he&(+EHdY1m=4+?X*qW2Qw}9r08)nqv&+F1Zw<t7IcbOGKXQ?}P zXlrgF`^IVZKY5E8$d;?ev9iq~t{%f}!7e<hl<@31%B|Bc_V)uS#E#_N>ync`YYp#0 zfn>7)g-_Ic2Tf43Z(^%I5lflg^oQ2ccC$S;OQ91qwG`Ojhx0$>!V4W!u6M#{Rnq5? zImDaJkt$i^xgBbh9yThJr6l@*FV^R9;c1EB^M<ahJ5R~|$+#|s_%wlWhj;MDa5Y^H z!?Gu7ZVr+du+?WB6%x{Rk8S}WfXA#NV2tZt#XY}#f56c?e8bgwWs<#WbTD1UID`7u z3bKBGxZK@(CyUrQ=nEamQkTj_DTNhQ`SH6x^@$|KG#IvUBdw*uyuQF<DX7K#J{%=@ zPpoQe#nKdYf!Bz>e)Plm&Tp!bplIOmeNhUlyAKPRSFc}GC_faEXevYhh>gn$ATwb` z{ZS9KTs9Di4Kv-BcYz-{h^f{dwm)tW7EcN@$g`r8y!Z9NgA#NNOI)P-D8hLAXCg$I zbo?fmfhNM}5?@LR=`<Qm1AjDf^QqF1wPqG3Qg9*@DI&6v?wt_6BJf&QOtU-{FHIlI z$M5M6Ekh-)?5yjyJ8h>z&DBGYyF;XY2jkS8^L3Kqo4V}9dvAq?6mJIi2tGyL{}YHn zJIn=(DBE=J2HSKceU$^5Q5iBZJiH#B`WfL23(dhKwGPtj{>&!}D$m6K6cJ_%S7b%` zoWN(-1W3F+(s!&8xb!uOoAjxK{ipjD&2{``o`tLac|Hy4gkMdbGtJ~hK?VNQ-wb;d zvy0$T|LzuPN%Pc4QK_B$A@*=Da`g4%sw9#d+#v(6t;H&mF=}<;FNXjpGN#XNohl=Q zivZkM)7i&V29(98sK*2DR}`fA-Mrpvynveq#d+uqSm<Zy5z^i^p<6RyoyAu>U2VYp zDdpdUY>-Gj-H?g0Lqy$*#7&TjDRtZ1gR)GRQI_g+J1xt0@VnwuR@U~53%$;znzviz zgEAS%eO-*{Fu^lBZ7LfP;0$!=Pa;9yx#xkRJXCjLN)*^G8>vTxUNjaAP3T@j98D9q z{AVbzK>t1-Y2)~D_7Zie;}l0q)jLWeXaGnsp`O<42%EkO%*pQTG&(^g~(0cE$7b ze%5L;V<?-GVw4kFs6>XLxrJj7g!p(1DS!ju9j0q~2H2lD6N4a|5PI)_oRKWK2=_q` z*E>tQQc65LXjMyvGnNnJ_`_K=n9B!V<i2;0vMMyZRZtTkqeu3iHgcr&;S<AiDRw?u z+~G+0W-Z5o$M?4I(eN7|6SyX1c4^UFfr!?dZvxjplX$*oivN1fI>uRfy@X=M6RP99 z!D`riZe%QANaAtd9aR1Lg)Z5fyb*L||4Q+9q{($sI{=(aCcX8^TFn4%45d2MGU*sF zI@VR<uNTf2N>^2#1~(A(OF<kNA}AB_uZ%Xh*v?0qkeMJH_pc9vx}wAHNk+fE(eCqG z+ke{S>Yj+HwB_FDrjp+-U%gVkAXgsH4ug_034#yb(!sY$t*eQoVf#~rsLvu70blOd z+*nVguvR>j>@o~=SCd@Q(N`tc0H)ZuFSf6_FOq#~!!(ZOfjpw2P_g#ozeQ<F_uc3+ zPGS@&kr<K~1;`twA_CfPt?R+GNI6=1J-uuEC)vSwm&)hl2g<jC9p5!czdow1*|A~Q z4ZiXGVb}qLTlN3%q5*?V1Qwh^kRH<an41Qjh%ZZG6TcY@by6Us03DR0p=;OsE<URF z-AMBOo{u+7*9Kd~7>xE(f|&FvZsmYK{da4FMEZ$t&C6jNV7!$Shg?ylCx8}qBJ)XN zHyCq{5eKxGGxw!Hkrqwu{%S;G*X{r7hv$m=+tdS`QNXJ<{K19CHhPpfVy2SV^F!+1 zfU{G`&&_L!KKjmlMD=S3@|REQvi+ihle2U9%}EkLfRpw^cQri(?B60)>HA{jB%&d= z%6FUE`gVBR+sSd7vHCb1aH}!dokt{#NodAvqMzm$;tH%1e6A^mE>R72S{rS_)~mMP z=RWO;;nFI3T~XsHDu3BcZss{11y8`h41l(4J3hK^U7g7ztldX=k_K{fy>{g<?!5Z& z3JjV8HX%jh){+jrt>IB1eKIC`@;J@H`whan+#$a^Bvnp${)m=O1>CGyVvZHz$#B&G zEYuRmM3lIkI;m%&6iJ2{PE%WwQxX+?RRa0hf)xRKt0E}yluqNBBW=xcCc-u(H7N#S z1!x=*Q7{N^1F^m3!3(F(-<TIMYqKc2U*bdY(>HN+G1y5ZK!rK+7U%`JEO#oOR(9w! z2qsA7nj;sB@3ZOF3|u{lj*yt=2`w+>0GUY)(OaV?tT)IFg?K_0b0mi!?^vM&m^-dE zt%R@sBct}}l9%7Wbj76*F2dR2&T$QKGF~8KRe9I01Dg?0$(u$kEA#R250Au^-V^%? z^eDU(13d7zImNdZ*TTTq%I_zr3!|@Z6dB=&9pHP(0iB{P$sd!iKk|qrhL2<fuY_1U z^^P7}OI86X&k`WkK&2|}E#WLs%+N5^Zj7m$B301H%x;bZZHDw4_qokjBG;62zEudI z5%%@jq?B+ez52f*OH@F5aDmgt9~<Z$Tg`x+r$j;3B|-@=(Bi&?BmFM8$^zzaZ>*ju z`%luZo`)=vv|pulNyYT&9iMHo+FjCHS#3@AzxnsZ2Skm+4fVwSnvU2S0fj#Rg_KXM zWCLmQ|LEZk^B86vHgt7O_~pB9&x~)ID^J4mzrGr%5sOF$rz)akH&_3=%d1=drsumq zHk|Tal}$KAj<RKv&^MiL2V6TIH^}b`JW721UWqp|dHMVv)i-jxI1_jsmK5yp{l~BQ zr%Vh5reFpUNFm;R>fgJoBfqvb!BWe`t=h$$ASSAoCxzjEqNy{Xoer|dJf^S)TuTkj zW19V#<^wEAgB#a^OQ*}~6bu1msoqEX9Z$SZ^igz*2-jA17enHX#SB$keKWqT9Om5R zn%mA_nIhgSC)yHI4rQ@ufAIxkwwW6eC{&nwY4bKoc`meWE;fM?R6_yWUYt^F@9RQE zs8GVWslH<e4^h+E+`<XpneXrfGC7mpj_jrkL=M=m4FgrT;i~4q7rI>)vC>~DbgMno zEj))4agm!rFX16SjO9J&>%#*i9|C!3d#keL?wUy5FOi>1mcY;IKiT3e@c7@8Cl0l- zeST*!mQbWzRQJK!AL1`W1hPa@7;I>J=rS;Q)l|s+Em1xzLWpl+ZE*ROG=~|5$M0|6 zEON2FzDvB-(E_05;EUW_3=~^qEHwp`hA|q_A=$D-jJ5Ftb$Q4YsN(aa(Rw+!5Do;; zmPR<hn~Z_)g9v3BXIOxY^Cs8Lt$KOFxm;(4sY2;2dHZ9(qlNJs;2}s%`J3)g_C-Yp zSBc-&O9*p(p%FzP#^4;CE(}~1knRy3*s<t^nGW5`s3(`Bp@{oWC=w6IwX@*PLQHQ1 zmGTUI`Qd8S5O_8NC29jT#SR>NaXL4D>_h6UMPVQW9(ys!SN%$a3CIH3lbEu@<J9K+ zrEk~{)4|(_E5c(nHg+>3atx1h(6HU$86I_o-W2xz+h@NxjQCEhm%R>#V(yP|X{(i< z%JDt~QxssJ6rsz*Wkk0?@dkIRALilSbl~XsBI}L83Ec-hu)QFP#Cc+A<Lt!@jd9S( zOBh#yY~ssmIS`ccFk&ij#@j4ilwRPP&S#4ez5VJ7%nq{sC`dlBn%25ljSV(r>aIey z=z8{C>Gd*dj(FoDIKD{!?yr-wkL)x*eXPFHY-16a_I$dl)*BK`IGAk*)e?e=cx6Uz z4U^BhA70`uo=ty~1(bQOYvxXhGs)nmbSaW5b^)NYRt^&0^->Us=&-#b%!D$&MSYVA zDVkMN+rG8$r)F<$ptdT)Um{Y_i&N4B0zR?D+9N+5unl>F>$E`QiBJ;>7|Zlc_nDD- zcDCFG?qaD20sVdc`!Vfa+re=xvHA5Z=P;t1<Kw)Q4Pxz|d=D12QUZA!=<w)@xYzjQ zveqT{j>W5Y?oCekDSV&)LwKhaaFbE{^OJk4wE=Me14anoXF`oT(3Cz-6!hTEvkr=r zJs5-=H_Bc}+_?GIQ<~Kzywc^)mZNP8DP<?h&K#K&0P!dcuXm(Gk&OY>zk}XAuK3gn z^|~>nz^6?6C=dP0isH(%SrX&Xdyo$6!GWKXZelj45V{1)hkSoU&tO2vC*bdg8A&Tu z8bseK@|EvxO;F?GjBH<^PJmB^#6xkA3;%okDPtn?TI-yK_$l!=fKRVkcmYP^dx59d zwM)IWs*02?=5HeYiw?X4=A(u8)q(F-+=q{W>yo)7)J`_;9TI}suXVM-ZT}y0d!>5T z=c;dt_WYzQ8lhEW>e(T(ANEyqvmSrFxOU>Df5ELy5j~`7RNWIPuZ`lyr|V8j{W;-b z_-YdkJoCve?9Xy4;|83`nht)Ax*zz06#z<nlIDYCB$Ezu0x|4B#Ue;)+{+vzmYw^) zS(NFHNt$Z6KCK$nt<8cPh7@GXOxLc$D8LxSa0?=<q}HYwfq&_@QzhFupMl@tZ{_iq z8G0bpt}blVh5>MI8{XjCW7)WaC-oAoGCvpGu7g-zj8+nIFwiihXeT$4h16mBT$!+^ zTT7%q?N|V}N2-OqWFh!05!jsoPK++-ab5>By`MYu>gvj=K$$}rk_1IH2_6I?G=@)w zH~#iKTS_&h^k<zkqF%uP65@t>!ri$e@Y@}UmP~v>C&#}JfA&eK-%obvFKbvSvXk~c zN^*pq>zP6!DsS|9mwOz3Gze>T{h4$h92saShsFb!bBHl^+py6oL<uwHisBTFz$+|F zMhqRyT2A~+A%M;244rv$Nzd-E4H~-!zOA1G(Nis|OhE?vVgVRH<)M;S8jAx)kUoy} zv)!x?DT0QY_DH&6Bxx+5O|tSI2zP4j#BnR#n~Smk&~R0V6JbdSRS6Q-2<vzhl>6vs z=C>^hv+K;PExX-cZUelH+<7>My1n(So8im{0lxix|90dgl}1<z-^U(31oLe|nc%4K z7x-NL>`wh9qQl)X!p^hRc-@b$c?OMu1251lq{yU(_|};*3yC_^x_U~R2YkbT676&k zL$+rv+6Rmpl-SarMkO)=cEtI?H(_6EVg*66?qm+{hdM{xR25Uze7|NrYWnu;5-qpV z=bH~Uc!4o@O4HA#$G-G4(EMn$JrhC+U4#WFfOJ5*R<O-z=m(9J-(oG6h*1fwRF^;D z>ohE8!zs$2sDr0BJV}sThW8)nL=)3Fe!p<}27JE49I1Q)gi?XE+HFHU_nid1l!ZE? z69<%%IxM<1lg@vpFfh}xhll_23{x!n9mf;f8!paLA%C;lNyMFOD-n2ynkY*#M=~(> zlge{7bvH{9NjXC-2R>-hL5$zqOY+b&ZyeAo9w6>G&}5E^1Rm_e;5``k&zKfX+Vl29 zx6-9EWNe-we<?BbialEGZhzVJQcJ#QjGLs2-}}P<A>qf>=5>;2?k}!s`c4%2<t6Mv zxET(*UQXsNhstSsQE6gjbq*_7h9K>c7CH1ttfy@@WmksJzEAp|g^%>Lov0;^^Bzm` z4eR>_l$}XP^S*URq7+=@m~^*hn|@Uw68xlgJA^>RITK9n`fEmJ7%B2IraH{TNAE4E z7ektUKE0iy9Zc}xpO<gAgW0#JUI*3b+j^^=KcO5`&RD02>_?brFLl`KYd7jPltMMC zjp%Zwb%wT4_S-uXTZPq&%)PYt9RF_0N&T1Y77z_Y@FK5w!_gZ7`R54V*_pMIh#;U2 zR4RRwGwzd-JOebl=0_63M!s0$4-T-n+xg@^?a;$#5<=P`z#t``Bz&MZQY;bD@*Tx( z1o=R!5^#BI?mYNh-MEmk=~%~O7rNX(cO>>tl##?_MqgaXj_^K+pW@CL^d3+RU1$oT zT(y=K#+kbL5S%6=%1-DV0TybvVqRn_c&M4gy?_^~Stv7?jyKqn15vzJb$H>BWLJ6{ zr6EmX9$c)>4eEKh8{KvTel&$EzmlMWn_m;-3n-ff5Erii3+35&U_L`yA+`qJH@XVD zuoO76i{;#sAoUnjC)u5!gPz?34aCEQ=7z5NBCiu@qF{=a@D)dQIPJ<N%bAr}LZlJC zWDcg^V{=7psb#aC0_SW1f4UbnB|CS00$Zf8=+>V*v|>DA4i+4D^dGz&x^%F3;QFy} zrTcnT@t1`cn8<*o=Z=lMHEEHKAX_p9%9}=d46KxKWuSHe&eI-hcF8WNuE!QRmpU5W zDEUU^N*zO=v+{=k&m+ojUL}zANSq{;5lb=5lylA|g*U9<Jg*4DxKCbj>BaIsxd;!! zNO6&99wD9(%Rm%a%<&z^#2*|{e}#KOO}<QX(2$iq^|-+Z?0<2}@qYvPul!aQ4eCFt z!b*q>YkeZnphW55Z-vZyKvHJRVXJ0V6G_*dC^Q`M(hh@`6;lm~noWm-s(Qz#z!m|9 z?^hm-9=)E4<c$0C5zmYZo!cIDL6l=Y){H?P5Va4(uk$xrT=Gt)>O$N)M+AeKrt0bP zSG-S%M+WTo0MHUa^Z>TZP*m7V#`oLO9KHO3fv$)ETsE^lqy5CHtqfKO`$ihaD=W@u zUmNljZ0vN8#rS|K;A7mw>ow)BEme&@|E*$DX)9!G{!OLs2;WjvSpIA}o({qAS_d}& zLG5#BeV%3RQuuMW%KLcO(76_vLUwhN61a%}mfv~cViWJEik~eL*grDqt8T*>P{NA{ z^@mVlVj{+16=s1_##0h0IT%1=A{ihG=1fp3t2P9g@XXblE$2qO81?(xsw@|Bf73!; z7e{m?;p#$gb&cos4E$0^&1gH=L-}-7qbRv5MbC<D1A)?an(}J{r{}2*k@%bY26;qn zhGz%?fZk1|oKRngK~oL4OP|nFY$LwTf9)!zOPaj?yq&b5N_NKUiW)+pizbHZ`c_K6 z%gCZ?Y78F=_LM3ll6_ctZ=58yLbc6)H*lC7Ts`rWm2VQ<dqAh~k@T)6j~7)rZO|yZ zF-BR7fAbCH;HBQSLDq`(a+frGr#OFQxjFy7geWwD#bMarWBaw0H__Va)%5T|IxF_D zutU3MZD1Nbd8PFQT~BypfzOuTgjN%r(-;r@z62{%1xCam`mqLk=)?ZTATUE2u}H+H z)VSQ*R~EnqmIbR=Nt4{<L?T|4>M`WCg;4;dt}WM{4%&}wSe-~xOSidB2D=p86iSV# zQC<8R5GOV!Atu8^8`TFelOP7udto)}I~OY_T2(ep%N#`{??DM2*xXa@SbE&k+X#Wd zYJ$VER+!C8Jbg_C8Xn1PN<6q;IKqUwWXNM>eR1|P5V2Es&9BFY1F*mNl0z%nL4je2 z3pDD&s?%CS^0PceOIN|r4eczXptaf9wyY$pW_XgUVc9r*HR3nixlWoHc?>poAfve6 z^sqegVfZARD}r|wQg~8BfQhf{ygBH1p*!Wky#I&Ir=TAFW@lKffA#yAAGU!{cuNY) z*@J$dfMN=#tQHixW<r<8DaN&hZeV9`{zsr}^4Z4d$pll87+oy0g-lm>p`FF9N~+J7 z+bwsH%lTuH9Imv=bqR4pKpQ&Q5p?JII$L0uPEt$vcTezND#P+L>;7u6^FQNjy+a#Z zO1ky+JD-V|c0EK)qI4^ks)qS2Re&$Rx$ZBlhwIDBKnfEyp=K&whKx6I`5Rcbc=X`B zHg(xb3f&G_-V%IxRx%Cau(?NMgl*!eYv&N;4el=}jfBVo=o-liXVWqjn#>whvo4ue z1Bpo@aB&q%mG{K$x69>|{}z>Lfj!!A0YH~Z?UT*08c8TJQ#ayutr@8unWs6Du@P9y z3zJPW4vHae8qATHBAB(nQ+JI=)2UL_4S)Y*NIfb>x{&|l9U9EQ?jBC3G<Q}*+a<0c zIFuYuHX3p@8``1!PBDqbQna05JF4Z^2dyL!3@5M#fu?KKE8bJJAwVh=?%3`0@UEe& zGnRCnKc)|bbEkJR#=IC6CAw(M3*PZKEjdS5f8iZ#6@G&nuzgavVDlaQ+(~+!WM%JG zQ1xGGd6g`~txQ=4Q{Og2X_jO*>Guyn&*c;ED_e<ai*-AY88Rh3y2&;;;$oy@Q#}v3 z-^S+t|6MZb77s`ExFH<1`?lQ95(*CMTM*LU9}t67M?hO|)dPopOK(K@jl!BS*F(#% z3Ufqu|5dsKUU*gOd71iG=O**Y+o?UB@Ein~Odkl7WysXp^!(cY&oq|Z7-W&@VV6DH zGR7-CqUQwC2H%QfJHDwr_v#^dOeh-JK=R)3rjRjp43;d`n#~W3d0pT=$yp}#nnr;8 z?QFK8VfzWnYV-=H5vQVED%iFr)mce+bQ!Fw38@Nbz~?$(pH9*T-0m<I{`f&;qnRkN z=0ap(0zTpkUG63xuDN;wbt5p#S46xCkuqEa*h*$bvTGOiH~=q%-JZ!zfVtoI^%^$J zqdX?ShMnG@1ZtiQ*?WU@z}9rCLLigdLz&>tN92TKO^5QD<#{Tp{AQ1#f9dMdEUDd; z2;!@;>hz<sjv<OD-(K9;FsSNT-!Rnr2Mok+hp${!B94ztqvy8DY8`_saoYx&h$+%f zYQbm5=X#If=J+HaCqx7B6ye*l#2;ibK&4tgUm^I0Z>di$tfl%tWhW5z0{+9-p)xJI zZVj*#ty$kN5F8@*lsHYsGf8F~KnrF28%QRE2VKV7&bx}`Nd}#6dKH{U8eH3;WTHF{ zhey@tE8d3(-OJzo`3tXBYmhTfXxlb`taPQpI_C-TdoXzaWS0m?2HZ(BK6dc<Z#cf` z8iXPVbK6qi386cf7YTP}ACJJwaXXbK?(Q7dLYD0R$%_gjZ9WF+0y0A+yN+v5CL7Z9 zj$3y9%EfBSpnwA?6<jgSHO4YWJC(}JcT9TIyT!<pA)kxS0eq(**U#W>SKiXYc&Uof zyc*^zn%9l^uVI5%*iOQ%au;4EYB|;H(s4afK7C&=Ub%KnN^Kjqblxz7EU`PG`-1rT zqj9{H>PbrirlWQY>Q;Hv>MUrSUKqIdbOY+NLg<nwLTJ37>)VqlaMQIvDQj4L$hM{# zt@?=i@cq5XoyDeLh$OtL0l3FOEsFf=Cs0l5A=KFb6nJwit5l>wE`Rc<#&mjV0Iyj? z9)LL60*+6<7-5a+_kp$>vtN%-$`Kh}xTNredOQikxd5Y|vcx}8CK|O^4F2KQ?@*Q? zt@l3~N$FXcO%Mfp>}B}QGo16v&ye52XZQnZbrC?78r8H~N|`8y0-}*u;6w^-=9|uk zbLZy~jcJ~rcuKAB0aR4fCL<(q15})XZ>UO>8A10>$ZKBlFJuTNiF5Jl6nDl<`h+IV z3SR?CfZ^&wfo~ht!^sWW?K8@%se}tm-@FSNvb-VA8!Kdrh{4MCL6>~);lQe<dV||i z>I<cs)7JyuhX8Xt=_t%Cp3sEfK5H*oJ7JzBceu+rb2rt1zPJr}>|pV-cKW%W2YA+7 zmD;d$3f0I`<7v}a^_0Yr+8nsff*XN4vZbR2KWK$n9Zq|(g;lp3ZU5w$M*XlubLB-) z857B4Bm9b?o2P=R_CBym+$x10CYnsG;<stU1?K7J{Eu0|sKZG<2AeafslaWjQx&Qc zZ%e%6u3RI2DL!l&{tTf_u^+mD_r($>k8b!(gAco@BBGEe(rb#~L1oCK%LEu+aQ$<V zW`RG|<-+q#2b06DJ@;&=HEm=g{nMkp?+>4c-SPi++tM7jGeOezy!HS0*WS52k^GZL z#eBipy-UWnNj|fZu#P!-j5dp4CQwvkw1RTT7|u`PVfopt5X!fRG$qc`5ofD}zK_>o zOn<`j>1(KNseX2orLh6y+-Odo+?i;KIA<){DcpTb&1VI8FoHORo-|Bnq7m}NbyV}A zLW@rAN$X^#v;nupq6`>K>K1_|7V9{TD>^k#o9`S#)5uj_Qs|QBox4?6*8wPwG(OsQ zXs-MZbq_w0<IHWQH|vA_TJxDh%*P$i65b08)Iis9S~{0+4;<&ImS$XI`7-tl9uP0B zKF`;7q3E6#Ln-h2e|Vp?tZ$1=IV^m1T_JrYS`-I-J0S(+v>TG?X+K>FZc{ey<Ahy! zOy6aJKj1v2(;u%pkz|nZc~U&N;7dyu=U~c;u9N6mJ>YP$I3dMtZlqj8i4nQF>b2ar z-0BdvL67^9+vBhBG3Zauut5{7a{JL)Nd(m9tWT1Yf`ACLVsn1(lh=6ex8b#K=4I+@ z+WO0<bxrID@QLb5qUhG7AWemcCDj;4M6et&@jqw-q_o@kS3rJX%4=H4Oj}#X+7C&d zSRpjm`#bNObJYu9g_9a`!hsdhJa8{~wDQ}urEhtM-hwav1r2t$9et2b{9KGzZai7? zHNKNQ?#ym+gCbv5G0$yzYrkNfxideb1*SmwZ^P=}bA+2z5&<BR-{K0+8xwm7iK;Y- z{(So*8?s7u)<_}9eGK~wG2@phPE->J<+Dw^s7e;A33#Rrr$DV<lC+q>v%xNOmwCqY zpAb5E?68585kKz4UNoW6pltq!M!u-*mW}_}PphZs!(YTpZ7C~^#Cq?lRI~~k?%SB? z+8ry`i`StGXbyGe43F&UtCrCwv=Lr8;KKRK3k0{HSWK|)b3_BeN{Q%z^*->|Ll7)S zPmXW@q((vCvW5VKq_+MZ>so<a=#2FcTHyR4b<{R(<MG5B<I2ft5oF>uQ*T}=P5K>b zSjDY`Ht+N$tiucur>*SIkbTMlQo$PdOm_nHbbH7S9zkJx`B%cr%k=m~YrYF+-a-#y zf-e!kZ#of|E~ae{R08ofA~zpj+4U_4?hG>qVAU~&Bs3S;Lel3*3H%T8Ll2ew1BE;y zy#!t+PtL_<&Cr%SnGN}%?lwOYpAo1+>cGI+eGys}GQu2*k|F(b9%CN-Z_)(}$7o5u zrO-WLfPFHyk)5njTyH5+{x&+JdU~q$X=oaa(W{1?RA{iTITSYfTjCe3u*CuEo6B#y z(im|8yw!D+^yjTfIPJ^Ozi+@9^EFUUqSi0p{&Pg65HVIqz`*;fyRyZp)jwBs?j|nU z;=r9V1df>`xZcG^oc7UlHk#9_gv}dqh49)b`GTcCciU1~GbP=31WPwmB~p5*Hvk&s z_Ydg5<^Rr?v$DIlL~r&@ecHWh$uL*koy8oko((o4xe@k<Uix!Sj-Vk6-MrPikyjDK zb>EO@zlkG6`MpWMw`9MG!wDfK!2~&Co;hOeDRj5qQ|rw115i|NQ2a571IK+VUIcRq z*+2ia{0!?$OuVqU@S01A>baQwQJL1aOpB-CB~G1U(tWHbNMB9p7U7pZ2Ro1i_Fo}B zg&?%P8TY-t((g$W(&2o|?Hm2${`fr#0-yoeBDefpZ-wwhto^JPdO3cp{V}s<Bx-*; z;mgJXYdqw-ehP%7kiP{S{<^ION+IVCzpvHl8^w2#SD6h=wc`E`ye6L0PaojptXghT zVURtdlE>>(!TQ1ba>S}~@7Wjx_iD%O;KxclTbp30aBi^tO#b#GSSb!5KKerVSe8U+ z$lFd`{{3sY0Iz~2^NW$%yZq_?&Ue|dPd4JJVlAO2v?yOvJLm{kzm_1~AX`-1+$<M3 z^8sqW)u#sN-Xa~pA3M@|UF=~^Wnp5DSx!Cs{E*XvpXu^Rad(ssG9^S{hd$~TPbDZy zo#959jq;yH_m~eZ@yHC4S4^p?NIUd#QSEuEI37k^buWYByU@z3DFHHMZC6n2M}#GQ z$cm6Xs#186l1H0_Y3d$b!2O4jde@S`93bK~4rt&@_EdHWcq}eUNym>4o<ZjvH{Px{ z+@)-U*Po-`#>dMO43Ee+p(2<$wXRWzyID%kt<@LUll-5XSs|bXOLeovkU0hJutSou z+U&Y^8MC`qU*)!f$pB5P^f`HAM8d)sr}f?vd4bL>V3X{7+qv@uJmMZ1CB1G4a)jgb zqf3_smi)2v#CRc{k_8%Ts#3L4NN~&_{CY!N3Sk_4&V|sjBrcjR&tlU@RNmYpv>9US zEnGr)c1Az9nf75D7xJktnMJ}fIo+3^;v-?!lYB2EDrV7)BUq`F-%`tvX{bnN23thf z3Qa>fOfqAWo~|ota`)t`4g#B<;Aj@fC&D7!`P%$Q{~cYJ6i^JbZ%|1((`&Ui`-l#w z$N5?*VqQ&KM8a0QS*L|$N*P}W9O}P#%go!LOzKD(GylPJfK{H}Ei{n0i7q2z6wv_- zC2xzhyznsr|E{4Bb|Q}cy!|D6^sHWAkX}lP0$>f!WB`8QlQ*c-cps|p0iUh`+1MFW z-<7w}ijO=+cki3lVB2kvwg=BI)ar<7rG$oS3$^rhFBpC)#XjFx2;}ffo{(ocSFI4A z2COjPW|}*G=&MH!n4k7oXIQdH0zw}8{JN;NG~bJv4rx7SWjk$PB3B#bb#?FCKPjCj zhQm%E3fgY&!&kY2sGe{pfx9=t^F*mSuPB)bgk^%=*`a`9&0S7s)2ZQnVphNo2i%Ht z<a_S@aV?Rfq0a?xZr6rfqvgWB0Vz(b`HHu0(p`qv>0iFcx4Rj8gm&MB@dkHeM1abJ z4Fl)9n7{T=KH&7~XB|xk62Inw`?}U*W5W}6TIf^+dZ+IOXv3obp7*mUN(-0&mN4wH zVeN0Jx}iWI+Usnse7senGocaId5`>+rHTa$ohtR1Mq)ZuR8Bs&$SQ=15USn*^#T!= zsu8MjyuTlWrpUJz*7`ix!&qToKxs}50=we|^Ec!7+&lB<|KwTJ;pAiGUYK>NAD29R zO-!J~A&Tq^gN^XaJ91|3@%yg#v5D6lMnLi08=6GHH3QZO;_X#PBcZi{Zv%$K%%byD z4EmPqE%G*xu67yPeD=&WV8uGHczuvUh~+VOg(1SEW+7kBZ3$Wx6oUsXG6+qbkbSS+ zei^7Y9kBBVxc{J3><V<xm1;|)z;IN?8VAmkC!+=VDfH|}WJBhI$_Z=kK`-^2pgHGd zIa^~W;>k8MB)|oFA+5?jI)|P3o<ijBy!SlhD-xOvV{Sz73ne~&vwL>1jIYX~^}TyJ zzD!?^_}~ZICFC}*bMfPo&g2RX>SPc)=c)-XV}h&TTEfu!{9Ad#;#($ZYf0oxS9{=v zbfX`2oO&u*J3r`>^uA-DUEoCU+EEcc>o&*njWNE^ni<32U)<jkk?^6=&P$Tmr(^se zE*=lAST#WpJjmz%pAw4?DUZZHd3B|(EMv~{pH8+{reOD(c~vc*{!V{sI@@vhar+E? zNIPwYc#MJ#;@>IZMbL7-u7oLV0vLBA+)5N{)(EBRoPTr%4YJa|Xr5E@*ds`rJ)*?H zDB9l{>0GWpvC3R!k5f7LR*tBj&tZ7U*0*{oZW*(7IcB%~`VnZMs_*UMa|t%*?>-)2 zPNvRtvi61x>$yNL#7vtF9%NJWhNHaM_@MX2EjMrPNd^ZnZKgx&`8?E6b_1>o4mdWl zN@omwIqs<>g(W*4Tt9sLwZu%#=Pv@&n{T|<cVTd*lsAjiob5P|`F327Fc1Fgj4lX} zLY&TZ>^NRbY@B3k@)p-<<pj_CqK~wCg3QkinH1QK#CL@^Q{pbD6JR*V^Kvz*%w?g& zzK}a!>LGW!$V;%dDlyAR7DO%0Gtq&B@2FGx&*+ZZqOx-=mxHDqe^PERR995orNCKY z3b^iky*UIhfV4;{YI0k{(+ub~<Mal_cs960?O&W#A(D5ApUx<y8NVk(`Ld8YT=yGE z@+PfnGQ8keip7`V2D$&%S$cg5|Kz3>iG+MHJWXys=#Q)0OVe}}yxrNh6#iM`)eL*W z(a*fGUa9J~5$!<HdV`B&*_BbV?Ki9gqemgv<!6CbQNZW+l-vsr+_%Q`ys632iNEV< zd(f${AKx3XX>?az`^!wzP%qru{)8r93i_VS=eu4JKYd>H6jNHELwK^_)Q#Xn@-ce! zEgRJ#846{Odl$HoT*7uquTJnZdkKntOQN%7{xuT?r?)=f!laQb7R69-mq|5atbz4} zhe`VPdnNwsTmtcd22H%p{k2tmekqag3tjQyA|xQJd3T<S;#)^u*^COIetQ~*72jUS zzx-T?zN&FPzn1Z}7M!)v1Dm6+f(hLlQWJsxnOtS)vChcUNQ^;*^n6F5<_nlWa)zE4 zz2$NOOs+N1U9Nk6tQNa@>QeZFok_V#cs9SwKpuIcCN3gBH#fJ;4^Mk(#Q|P9@M4aj zxU3Y?nS;Wq)xyRg*Vmmii>usg=!Gc{|3{Y`kpXFu1Cp+fB=D|k7hdoF50rre96-sE zX7Xe|v*0#Nmp}drK9(7OzNdUiBn-ozz%G4>8v4GxdE5SwvtlPVi>Kn%!C^wU{3mi9 zr<=yX_(4ajyutpT6IM?Gl-G7sJYSNb3(sF1ejKD<sSg;vg+2!j`9Mp%dYb=vd%5j* z9jN=eXRVvI2Eul~r*xFM%<Qw5EMJFJ%+1asCljO(GnQHnijN?au)cq1)$x;lgTWc# z1~N)B1TYUv=XnZnf^eYULMN>U=d-Z-{=yILL!h|}p?{f>s-PTgl$+|PJ<<X42%IDW zV*OVNPJug6z&%NWLKSE3h^;=)FAh3f`n8=vyjnJ;CtN_s)E_+PkowP=u{p5Z`^>Hp zGd@}>o{ug6hPkSqIIGS-7xu$Q%Rc%Q#`}7c9gmGIS=J6QS>4nD`H>NGvIFZx;Kc0x zrDug&6C;5}rFg#NpOwLnHXFmG-sXg8pFM0t(7#u1h|^3o#IBwOYK)#O=`7&)<>R!1 z%3yGNwpS&n33H%n_8(|>D8+icoq#D}X6;q-wPw)WIn;hwnYaBiIAtibc!cKNU1a9~ zTg1l7JR$611d>wqQRtH|GB2L~l_Zkx%dd0h1rm2)Ulf-K^iBs_MAJCvlF7%Tl`=Z& z{T~cJBnAq7($y=@8h@7i|04@;_reR7V+XbTu|shs7Q{u|@Q+pZ7rtU9SFWD)aB)f% z?rlMj%_sBeIxY0^Ds<RrsC65jSMtE=$%<p!(|9%j$2Huwch-BDL>&^)6#JY0&^=QZ z7O-(JaCdp@Fr199@6+CeMEddfj@dKvu^$dhmw`o8u1uZP+J1@k5Xa{vltUAKd*=j< zsO%{Hb5B7f4ksoGF4t*(rl>3)aEL=A@R!1Gmqp^5HVD<t7@K0`V6xuidzZSHnOI~U zv7K^$D(+7Ok@*!^v4Q8g2i=_rFp&I!wRkWed__C`^$IhewxZP@uXmu%xa9T1`xiq# zHKBYeeUb1eE8yB)tw$W6Nx0rp@wU5-B!NQm|6W$lXwp|TV0}-(xc<}d>&NNYM@aCa z1D`C@bGZd7<kCd}sBU3Vy9?-<Clu>zdP36A4VN9)x23wZ$MBs~s79C1HIBV;xD`L$ z90dWpj#5*4Ku`l4aE<NqX-G~ZJ2fMRKJpQm)d?MT$BU8Et5cu%&a;PZg-Nn5oIzWf zFRA`etmw1mPviwhAGA8QFKo;rM`<rB|5{1+&mYN67Idr@HcwX&wUdKl7pk4Ht>d;k z0lo*yu9mi$ez>Gvl0(6C#EXCacn;j0X5FYxFP5IG1b;LA$$K4Y2f-Ur4M@E)hy&Cd z&<2WX)Zi}qDSms85ogS0?7a*1QYxS-nhHkBphrJ)z4fVj>8(4ZTzi%I!BzoOH<^VQ zHc@vrkO!;~>#CWLDwaq7H*RlRdTF@?84UWmk|dPZkIG{J`>7Kt?nAC?y{5$J@Q}Pn z$5k&DHvT=y>9BfQ^FpdQ>5p?)zD}0Z8;qFcAFTGqS@_?+BHjd<FQY*!P^fSDfzj<X z$7Rh?dD3w>#4=*caEg*%z+fe2fCWM+<iFV7j>gQWJv?KgjPk1Sx}s(Em8zBMlx+mp zo-)*ks21VDujoq0q>?|xI`YwKR%lvRXB1N9<SP`i+ovY`xqP`D9NU%eIN<&oTjur$ zbSN%5l&;sI^5s<a2s2r0p@tZE_aE5>x|-?lxu{nz>lPAGDAUqD&#f{MqxnfO8G1`O z5SO;UcU^3f?y>w@oABe6%r~Ds&YW=3?b9#u^@qFWOk3|1WNKgK-Zth+3*QogfTe}_ zDtlGI!;jwY{lYiOy?MSk6AXN>N_Z#s*7@X<Q^m{K<Rwu1yuBo<IOU_fhQqIT^7mfS zhg5N$I((j9(Zlv3E27G)RItfPm1@hd_)7=nGmHef?(1awGAa6ef9JA8w{fr<Qj?RN zuW(MV2!}O0p>2;DZwRFnY%de@bR8|VLvmM3CM3{{^TYusrFqsa_pa)gj*#LGBB%%* zLEtUy$nPy3cNj`g93?(j`n(3Cf2t7sU%`=I?1%q&%5JpS-UWTelA~(16RONo7#7+l zt*~?Qm6d*X4p1Y6NhWlM=d;EccSrqB3`i|kLdbSSN4Ov+rUP7@q5U?Z^OXJYXA-#N z#PD`O&o=AXAR_PWUxP*E`kuh;&=TT)(7-5bB3EcN9rfOW_e!@UUtxdz7dkqD=t%Tf zR%-|)CAzE3*<{0V<Gn?p=BdbK!6QUt>qViPJeLFsdSX=t36*SvCW`!|gZ;e}T-2)O zD(KhBO`bdmU&?*0%zjA{f?I=P9fUQr;5~mStWEffXu>HR;)?k1a_&t$b7nl;z94h1 zre{B+eN89Ls9|`Nq_FtZ^$w+>)`}ji3yh1u-$?*o(`~tC%NsjBu<!YhH*oWv=jaza z`B0^@o+(BmVeo7)w>U?5jO)MtB0JMhJldPj96<qVdj`T&>7$$RJqAI51~}#SFQ+<u z-jc5nOl7%*zGdlGU<vC`pI)c?E4;&Y^j$0QtAClnk5J2>H?O5>zGzuc$mX5=%r2qB z_Jd$4xF3Vib#bC8XLL&zAV9KnllwoeP^Ps@0?PNgPPc9Q#hIluxS#WMjWZJhHEJ9w z{&ZP&%D#*oVU)fChYs@^KPD^KgYRNVLGrExzd1>EiptrzavQ}%G(VVn{{5PL1v+#V z&DX{@Bw{|lds&K&-k+_egewvL?8$Kg%s}zKtjE()MTDS+FKbwxCtw6Bd0y}LZ|F?; z593aE?hwsmuTXkV-1s6%GL#dTBHWDeArJ40YFJ>_KT)3WhV3z%`8*a;YH4g_oqXs# zMtWBW>7v@e5h>Ow1jkxlLblBI#!F8o&KrWC8pyxWhTj3ADYo0clz%<C6~5%v7^<BT zDk|BR_LfeQ)wR=`Au9kZLSpwuY>?-UM<a2O|2@4uXWLEn32%$&eD=nxK`-Orz5&zH zD}l2gGn;po8a$3=wmzrM2H@hhrOH))5eC#GF|AH5XLLMVzxt6?>*>*o?N@(4?=R7R zEl=2?a4AiA8kA;xCAPPs-a`L`2$~A1yYl^a#dAM<Sj@3`z%c-q9#@Zne9}g#zP^)* zN}|XnQ3Lalj6;mmkx?DtjrixUPgYB@=EdEHdTwR>6zVdR-->A4x~3xl74FbH4ag!x zLH2{v9CPqGQ|KmpJsY-HXUmD?A+ODT>WzTu<Q|et*EeTPZOg4!5X6Un=#rdX?w~es zfMF>~$Yf>YvtY^tu@VDV+u0R2mRkJEOKg8YcoZgjnBeR7MNBf&-}2TIEBk#%t(3hl zmH1zw=^_g0H)ZYG56@*U(?*Wf4PfV&JsVo3^eZKH+QqvpwS;=Ikl^9b{hIgc5JJ@L zS1FIeZfnC8s4VZVstOAs8ThrW^WN{ZhA-{ZSIlhqlf=4rMo<-gbFvE1|M7bmd}%KO zVK9v+|2COecfw3&=L+XcNEIZ@OFOOLk%;EaxT1~^&>9&^Sz9VCY3GCCkd8mr{pl`c zML$(@b1fTP_(PjIxR&&&qw~4OL=_t4q>|v>XUu}hn3L6b2Wo}3k{I5Q`OlifbMx1y z8BYU+r%K)hNEs|kdR?mS$wjNsk1}5-ygPV|#nDinV(~50PWQI{{P*KBD+030&_+`U zcVya<p}bk0M;?On7;FCubGMXC4tm!@FB0nhDD2FXVz+jf^6(L<O~pO3FO(isZw-xE zClu%x#Rg+dR#-JqF?#~Kh823k{Ui1-AM7gcR0ibvo@GL3+cH#sDW|oyB`HePon5&x zCDfkiYrRau-0~Jezuw`Jg8kZ~Iel0_7^QyFNn}4fh7tH3LCm!m-a*SjZhxgjW)}is zjuBo}>+D*P-QbiZ#Uw-M7rbtFaGhq^!ID3K_(#YY@7gpK2HDaGJde6v#}CRNO_#nv zPWXdezfE~3w;XvanFUI}{F;`uI}4Z0hG_GXQGU;*9UxDPLW0m@LR8{HeAFp14rDox zC6dA{{v$Kt^5bNb{~hhArFb~_^1J9_ZAwep)oP@8iDPVF_38Z*C3e8n00?>c>2i?m zK>o4H>w{JwbQ<m>)8TXGjK|Zq*b=Avi?71q_4MLLvdUIgqFG8E6Wh!DX|Q3}6u9NY zj_u{y=Q{c&f>!b@QTuLausrVm{re+ImwWgJYdzPl&3t6?omT>3tPbF0VTU@>2hXE~ zJhM9|QHt!M&!<`xciZplIbTopwp_6kErm0j%&La&tc;+Nm@zLbl~OdtV(P2R?!^yu z!{3EJiwzAr%SAYB+`V=PMX)5eDJZ4C&A8>B<8z*vw7Y@0N}g*E$)#J<*~sGuJFiI@ zT|7;?1P3*ar3LBk`pz!NjldpaQwYlUez#XLBPN7z!Gg!vdso`idL8<H>gy!Xorr;8 zm3<A%=~*Fnog=<$J%lzj>)b3z5)H%-SSWkZq3za`7?8>a>R>Du%V_ym!P2jaC+a_k z+;bZ;3ntOk4^wpS9JqoZuO@*1w0cJL0-vSuO%15We4!S6wqyD9tdT26zn>1?2LV7g zMKv6vI#W5sGaJpW)_Vn;Sf2~m8*b7|ijs_u6F)9Niqi`MpFNI(lqb|MH;KEhlRi&V z_j~*~kE>Vqv9jnVch&qXS3pJZ6@c<)OfYAmRjllT>FBBe5kSg#Ue+#7LsBGMZ91|H zIqLC@u)lAx{qoM)yLI^VBrJt(sdW3-+b((o1jmQ1on<QtwzV5^C*Y9S6E)!6;<pk= z9=FxqyycN_oA6DZTosZd5n-|>6sjoX&DCHfc=#~fF?g@5=)&pK&J}q>inKNB(kVm4 z^D(o)_a9^0#-hpk7fC))+<goAk0(mRI*?Z0GCDk_(2%0QK~sP^gIinfenHQF5?>GL zjg?8X`eiOr!ax0A`a9k@3|POrVEiyBU${NfrKe*9l{I=El9jgLDgFtQNmdD1MJrcd z9~XKDlIU=NP!RP-Y+BwsfK60>d&KFHOf~M122Be}e}Qi`yn4`<KnO<hyB_@FK!eZ| zcJ1_by-R&hMqzxQyDEA&LbP}`qk-KA*$p-e@tkp*w2a^)a;{C3JgL<D0*FT>!mEZX zh3}~i&S5d64Cd|@056VanX~6N|I;Jk&?&*ER`X;T)TU<3$EL=h4}WkYVn&BUMO9pW zNXszmxb2&d0_O|bu7a@79bxKf2?qVG&8XYLE9{)wx3`1EjQWIu*%Ya~;KDz@Jo4Ti zJ|8Q2wW*jF>_XjnJ<-i7R4>beg?$Wm=9hx+EroxBP4=zJ`sbDioTUt;Z4mbCmAC>p zFXZWyF~Wh%B9~)z>JtPR%1o_^={MO(v>pnIN@J(ZpxC6s>E*?E$x2X;{h)Wg+fU;l zpvC~{DqmwqY647Vq^f*sd?Ko;%-=;n*5Ezrjt3>;%pdL?{&%xK<pGuRZ}IXbPkmB{ z{}{9UDM<RbJ@iQ^89zMHv!;r5p;P5E4;>JCw~+iS8s&5=bud|+HJVlHKgDCwWYy1e z_VcfIbbXgfE9?~IqLnhaI%K1j;){G=Ux9;oeoA##M|V;l&A)p|>$yjwO(n`F`Eix* z*A?X#>^Gf~<VPy?=Ubyr!S4|5GJbz+8%AYQX1)k@82q$wx{CbsFVc&Cg7*sdq7H2^ zx`<jnFlha~pF_c??7mX1Lb>UhsvE7t93||XksJOlwh@#FV5lbo;_%=>XTji%rq=-) zulYQE7rr$pyIPHE7w!Ck?g>TM8<t)rl{ZS2kuios<r+@qoY2m690>SI5o2p{=m5V5 z&--4b8pw(%)5iv_&hy(1%G7a=h8ZMo-A40@2Rvra1iS`S1LhkOTMLw<XE*(S%%rRF z6#jYRpH$-h)cd1Yv&DdwHl9WQ-VYN4Ny-+Rj>U3pFTXYuqNTDp(D#`F7n^-3b;yxe z!+-O)b?}NAIg{#A*1>KS$Kt<RNB^EC#FpeYHUId9e&|HFPs!l`4o;apI6ac>gvqV= z@<w_oN>DO@AQa3@Ts;rwvWD%I9Y{_Qr<@vJWE{YU)F{uy$w)?FzD|u(M%Co2qe7jF z4eJ@R3zs7U&`X#!Uwlh3Frs!kDO-GfD(s6f_5xKd{-}o2(eM?x@2ed_k6ZNA0)`4j z4wD~0TV~#R1WD)k^irVO^G7*nCqG>W6Mf6s`P|TPa=ZIIK+bd-`8(h=Zcyqxq`2gl z$)CUV$Y!3v!IkD8%DZ^0(s^sW;qwE=!@gvORI?NiR#)L%<K>;!Db7W=+2Y_!Zl#20 zAttzg$+d+B0T=pqb&s77)c4Xe10QtIr{%MZ$h^Xx1@IKvY+vm?Q!rR-V@6)lYIAgF z2|_&Rm_T<Qa+%%h0P%zFQ#zo@(SU1@DupX@X%ky0w6DVL?S8wi^j{X~ppLl7AJM2^ zT;)rxRbiSts42N}v^wO&qf|XGIAHx*?t3~hzhWw*2O(j)a<AVC@n#%t)nt*paNTVC z?%H5;zg<oIFb^DHI(>0#DTrrwv_iw4-1<o=HV+j1M?0jD*7gI%o%rQZvILIH`B$&@ zLe}PfT6pJ2;B<p=9`z6WR>tG|K8LOFEZ7V8Dq!p<T1VgQzb{!1gEIS|qR9!@a8)?& z@bc(X+?%co(Vz16c4Qm_D(7;h^2O@Rj7c2bbaW--t=%Ndhgbi3i+Xcl`vo1;xlntY zSTZH4A<u-Nu=Dlb&rfu-B9mmOcNHiqs)5Jomd4_3aSh1XV@8liAQd;z!4ST~@y?mr zCF9A4>^q(hkA3)^$(?kb{b#{gooZp+G2N7)dZxzt&&u;qOlKh}ST?wcxx0R)8B2Ef zSioTVr_@pK+V1N_t`xW@Htv3+u-EyP!HrAVFN8O}g$J694y`)dgmq2gOYTltgXBC? zmA*6Cfz9S8`E1O8UZ+7(ec&`J3J_0F?`f0RJf1H$qG4oLDdH*~lEdy$<8}CJnQ$LV zx>fuTvaP@!ap&HHY>1f#m$cB>=jLRUYEDQAhdn4%8PzAenA?2+LZtF%G}RvxjTQED zmAhdz<NTG@DHJxAS2hx^y|E;R(j_bWq?*aHD``O_#q6pwWzoXm%$4ttyiKT>sN_;} zBIro`G$%}LGn3BAxdR{LmeO!dYNLDouREn8P!=WmX~*%CqyJXIiIT-wCz-|n?6P(E ze20+|DW9x%7kfhf$KF-IMX`N<!0v9PEeyJ2iCwx|l*aBB1F&1MTTxN5Q49nX>=qR} zF`nJ+GtU2ehIr@`Tm<X?dwe|3&hE^;=brDW8*}ICxc15QChi*UmpFUo=^+Qs&f4O? zJXF2QyCEHK>{=M%C$jFcDE5PyY2#vA>IYsnKQ?HGd}?I3M<16(89u6Ju>6{*R+$cp z&go$tU7}XZ>onH<Xt9UY%EVQaU1#yWuaSJ6gedbG50ClPOTKyguaRXRT(o|31n<0* zZE|g^pT*h@tCW?8$8TG*wD|4KleACRMvz8})Y+vQO*`?n)Z1F#TIH|QA9i_c`O@`f z@4Y<y<S_ez>sGAkq)y&9UNy4|54~A$&^4W#@qSUVNo$s+F7I>M=~3TvO^z(6prHNK zW5jc<#{NFbFCTAvGS%fpzph($T&Qg}VX*Ds`n6KbR=>a8@WipZH=oKsf7fw``lIA6 z$CQtY>L2L5-1@J^$Fz*oUVjP>3a?^wNYy+p{!FKRa$P*j_uE$|(SE|@yD~N3mJru- zZJ{JLyF~Euu&8y{cc$ofUiWBHYoFWU=i`qX6&svp`+SL9mAU4puPUw$vMMog(#;R$ z67R&^F_0S{XWqB0cADH(>k@J&i??}{IxBkdj1OL=f*LMLEx&b!-jikz>c^iMX#JPV z>iZFm+F9K8ykFzEC}PJ+8MWY)s%4tr?xc6I-HFEO7K@c;JDMNpqA^6K@~H>=ryZzQ zeDHwRPCK7fJ3XZHgY;9g9-EerNJ@+TbpC3kVNulvb(k~dWuW5TH%sC^I1GI*SE+MV zMf<3YAxYbGb?PX&o8NSsU80$y?8sJQb<3F7yL<9fm4ukbgCZO|SGFjv{ItxF_X&UB zKOWn+?M$W7sZkrEFP4Ze=1?~Hv}ey!e!J$D?KDv<alxsO?q!q`%UF%9lTjl=uCaSi z_qBb?*=|a8Ql09vEh6gFnr$1^b`M$iGHw37P1m0u3EOyV+}0GeR|(sz%G#a|*|`3; z>$3yN^UqH+*4yzu!a?!n5Hn57t$OV;N*%1EmwIR16|JW;N{XT;JMU0A^w+goPxova zT_?QG+ow;PIaN$|UZHJMY_k5f!7oO-zpEs3Ym-aHhzON=#ZQ#%VC?7bKQX4l!3koG zas!uCS#$4Yuv76(jjFnKO?q&-OL26e#wZTA&IsQVd-Bp89d(y<zfuP`rS`Fn(YX^f zTjs7^<<kSzI`ugeclT7p+EcBA?CvPpoKau>X~0_a1fJa=v}JZ&>EZ)sY*y31>MFUo zb7KXA1yipat?;bI{hj?&Yq=h}r$0qTuAf%DRn_}_jCHv*T=`PkfG7LL-kI|$qMz}d z9sw)#E(ENfyk+p@-r;AoGK?Q>TRY9=UKyj9vrp<gE%sKm{Of~PM;EI+@Y9GcA1{o* zeRoh@1GDBgqx4)?p9vWlpkY&Uxth(Qq4M=dKCM#!bV<+j*(Hi^s#>K<%R1$jehd#C zqS1NHu~TuaWHznYU+<OKo5Oo$EKApGrnaiTr;KG(wUbIR^(szZvZPb!si|c$bd)#r z-*$0=cy~m%d)=CrzuQS}f0?^+@4F?cr!}(^g<Htj9=BUQWai65eQe1d$<Dm$9h>SL zbdzytl$h9RT=9i7E)G~x=j7;)NAJvysr^>Q<iUrKJL+opKiS^+d;eLRG2MN(zaNrx z&MNMG{Hy-``_~G))4K~*Tl7}^Y02<w;g)7POJggf>c?-~ShY%>6YY);DcM2x{PiYn zG%rS-sw?+*Rpr<YV`N&5&<t)F)7~_!y;AjFr^+qwc=`N1-E%ex7yXtDJLplOPW7pm zSC)D@@kLtwO4AkeTN#(WQFDmp@G`?1OgyYxZ2snnRmZGaw0gJd!PO^ay($lz_wuIR zRh?2Z4i!JGnyT2h>X7nxH-z=ro<3E5f0qNHhYsqf%kE6-x_Ru;zpG<^mObGq9*Z9K zS$c2b0lN|*lkaXH?$~8;7ulB&GkQl&9@Ri)&YaPE2JOG9U(xLRyFTj=^jWl`Nk;3C z2gW`b`x+?d$;GE!=um9lym_Dc7*){p(ELzLqukwVEjE_AUS6zseVjolpS|I63q~wF z7kglX#UgKG^WyRu%iWA-pG(G2%#i7On{BIk&wHeP(-g_*>q}n5JCxowTPAiu<vOS5 z)E^dqyy+pcvtee_%Z|5Cc^P!+xw1{n!$)uI@upqXQgyUt-#VPMt!BQc$3Fj=vtOM) zzJKZSJu;O(v}-s`_KD{E%|V)tYDBKEak#rnDaP@U#x%>h9s6F}@N9L}Yv<n;lNC+v zkIr=TZiiFy`;6B-?w@?+0s{Dr0dE6+TT}eAVAZHo-2>azJaN75g<<veROO<qPxP*J zvgC=*F<r+*MNMd8<@mmGx_ju+1&;@BQgbPD{C&dy`yB!vIHkuexV@xK?E?#Yl^t$B zB4~c(PP2~flV=~O>>piEt+aAaqfvc)m8&d_Reo{r?q+qrQ8RarJ%7=?=`6$Xz3We{ zUv*(%+I9U>d$;V}`cyVi#%I|uMNJh0&lS(-rqn*O^j*A-nwej>T2)F<d2LWk&TK%{ z<3k#Ezc%V+tV3F&+~DLBrePT>YeqYoDa*ZntTJO(X~p;Pc0>9Po?Rw&La}zTmXR-e z?A`BXOWn(yPkyQRDsg7i7;_!De$~~Edd6-y(vfSbQ+BO)hDrm;`?B#BPE;*(dTjZm zX_CteRC|uks9e`$@!iIEjgN_&z1}%nZf5i8^VGUT%=}>9Qr<{a_3nAvBJo+NnQ{mV zRNKh3zOrK6^q`V`mwPT$FJ*Fevtpfd!{5c%NqhgOgWmHQ1}{wXG$(ZJZn3`4;g+>W zo*CTg_Wp$Ko<pjo&nmI-lUbCD*lfa*4&}$X99YpOvQ{6HcN(kSAK70*w)&pl$A%gA ze_VXOD9W(ZT_ww7=0~1Yd#O6%VCT1`sw<Z?^r?Gx@yV*^t8_KDbgTVV{-9z^sM)3f z>t*VHnY`@psA@jq#GIB(j_XXkG^b+eagPE#i`Q(sdsSRn&rj}8FQs^;MLtWje;v55 zRFF-#V=~1CZk^Kpx=oXS_A(0Z55?9zK6-5jvkuc@D}B&u8W1{XUsOP=8WgihedXWL zZ+m1kl}(O)J~MWQY{cp_b0=D>ynZ-s<*W$bGauXD942%4W>jQqWm!|(`bM#ly|t>W zZT(Va$@#cub%(C55I<RF{a?3Ku8nRLd{EKAykyk6g+U{NCk-}H9`SlWm90~C;?ff0 zciIm3TNQJu^ZP3XuO>L8cveVMeR6GL>03u4`sh~gFsk+YC)-Y4`Iu6&+pQJpC(_!v zMIXI?J;bqUMCF#nw%@C&yv1r=<dnF#lC$zH%C*1PV)gxI3w9pKSTQK0YHGAfg5B;@ zpXA=UDAXz*Ke%~AIls{_%{N%f1f?h0skIyb(Ee=M5tYlA@l`gjR`p`Z@YCic73D5g z99e$w#aX-Mj&E35dDzA%=LE&M?cBO9tlTtKshZW)zc)*2p6#_qF1*T{v@4e$G<X}X z^?cd953AhEX?)awx>53QMZ!Us<!-Z&-%y-$*3$1oSU_2Y`o*`OzWSiLzkBzMm*c8! zvv+DN?=|yvle7i)BC~RX<KFjKFj^)>M!u6-qbnoqG$bV#y<5{THSoEEXglP)&}3#+ z*}=sh=^fg7VS;h>YO*m$qF3s6IF!`&^~C)$FU&hukSi{y6{H+Ja<iOL@%5Iam;Cj> zT1KLla_GeyIpv{Ej(t!(He=CW5i-@3k0i!4joCaot<l0~_Y5Yz8&FB{-k|Wq<Cpk^ zm%TKn{iN`hV<Q%pEbe^KSw-ZaVO245^P_hw-W=5&;<v4OxlU)UPI+41^3lGnJqI;= z<kWH9snkWbJ`1O)MO9ikInngVw4}*pcWACvdUkR`?`~Z_*i4phTPrp4??lC@r4<~C zU;FsDzo|~c5_L{2j*fLc-9=9}>}=V)L%R$ZxXyA@lVVTj6z^~?+A95I*-n-v$H<HA zZ7TPvZc$C{dD+tAFUyI04Z9E?5c}@><R_Q9PPp9L`R|Ohrxib_h~lpwemd^C;yamv z#_Fd=8rGRTO-cKa>**Q;79O}ztYyYMU*#+P!e=&EVO}bu)a>AElNJA3ra1aspTWgX zSe+{N^6BkRCAomq)h-9p%Vmfzfz$T&8Y-Kg&N#Kq!OSi;T3+0!*rvwC<E8|c)=HJr za-Dtna;p)gCv;4`E!(+-ym3W;%OI_oP}z{uOB!fY!JEixhfle-qSw}PLCdP74h=6e z>y!P>>ppEi1~$DJo8IA^qv|mKI(HV#d_Ly!9X;>vrf*9=b)VFE_W&6R8+-bWq-sCk z9kpsiRy+~9+<)&gA8&810k6hRf04!58~rW;Eq0H7S$W`olbF#}qa>3p^{Qm3#|)`# zIXt#z>7lwZYlbXvJ0ESm%(1xphJ#Nwh+`UzS&VmRMi1?$cxuaQg(m*96fdosJ!HhP z-Y0bq&VQ-YTrtKwJfL5(PFrJr5<iypGSgqs=fcp&R|hRyw!OqokI1xu!ONDJs`q%f z_+-hC5pgf7t!cPiq!bgXuvf#%)NJJ&#YrP3DTSAcN}F%6bN<H?cNev7Q#rL%y_uz- z$|U*8+QkL6Z(qvYc*Izl7uCaLdW^pqSnH|Exzwmdx^gz!8sZ?GV&~cim9gkpK~}YL z4?EGF`n{jeZyfZde3d5Ej19!qdZebwsF${Ih*&o0cD*xZYh|wPy*F`O_xa&6DbH@X zl(^il-T~Q&7m;zV1`Me#=`EvhO8&lSl}-b(qhIxy(VO}|fAwy#%llx1$!tE?3}R}O zFIjAT`n}?t-oBJcm?L9X(POCm{n_%}Vil|opS$ZjaZ(+R)Y&Cw7QeeAscoypHAZ+@ zy3VaW;I*n!@%hu#Gv0_D;xEm3v1QeEty5PvU+>-6O#PJq!25MhsMkN?b7pX}SCT7t zHb?I+uV!l3-}YSza~Jc#gY6s1n0gKly;Sb*vGAk^<DZ$q!Pigo?WBC-VyQaj+A*aT zIF)E#yqja>q<hDeXH_1&Koq1?@@-Am9kt6<5s#{DuJ$s?T`Vg$UoY9ayBdr;bxZvh zr>71GIy6aLW>LKwfi*gr>Yv_gd2LVXinImkuVv*@EmJz*mRoqR;;9BtTAA-2ZhLn? zC)FLYrvB@<FS(Hn4rC92gD3Il&KXpk*iJ?}xO?}>Wt7Z2UJR<7+9hVzD8*uHEJ`bu zGCJNlYGJ_P&W7@HZ`yw-eps`@CcD&jQQd82?o3x|=^Jg{b7P4Uz1<$Qc)DTv8{b3g z_bzT+JYM7dD48%Nlg1@)ML&$cR?E7xOvcz^r#5fiJUv2m`tJ#jarI+TdfZ)b6c#qE z-ZF8Ud#&QkOP?s;?dtY>EmVq^mvd5#saWE4aNkR7W;CjJRz^dnpR7q|nd29$O*HQ{ z(Ink-ctg>aSC`%$t23mX^NNrzpH$WF+-_X*^vhm)<+S{l&pX{ow=-5SPdlWl9o1c@ z?zSn<Cpk?{-zM|1%*1kX20MDHTAn|DK5BndC&{AJo7G|lPmOh~Dz1FK-LO=-b+gm% zY;UyYy3FtfrrPlfdUpPBdFh+*cFBD#i$^>yX4f@pfv#+qo3&rt`P~Uik~v@!-l(IR z>xEran%2CScK3aP_v#Y5W}WrsUFc(U?C$&*ZL3C<$yj}<*3H?F_56u$NtO1uN!_AZ zr?joS?NHlPl^)@vYL}iae{g8j-8#KuhD<i^RLkgi)B!!SYL|+8Cr{j*_R(>=vP`|y z7iL4$yU!cBQ&j52SaGkY`8%6Ec=O(H=vBD}Q+HhHcBkaSxAV)TE;`oJLZ*Fh&nM#> zr@FP&464v8vG0SK`t>WeFw8J0E!R20CH1y$>0%FFz3Q9XwPe%;UAypd_HxGEi(U2= zMSL(gpl3emV_WkBe^-uIzm!sYg+a^G8G|Rbee*!ZFsSx0jbh>r4~s2s739DETqT+G zsEZ9sX4IB3JUd$EV|-|>o8=+c0h;?0E+1IB^L1Rt4w-j`^0kWh&}_MX^neeMJ>K{2 zQ|#PJWf}b0Nu0&&EQ5wM!RILcLYDt2@~8jhKS+Tk@m=)4EVn<c?b#U1MMXu)d3kvi zGdDLcuC1+I!p_dF6h4<WG&C&3<mBX3*4o;-TsHAJf6v!2;og#bAD6*pK@d#Y<@52s zzh5r_0gr5~88gO?F$LZgO-xLx;8;T<k<=B7#quC!d~RrAVbK_$o8s6ko3hRu+t}Es z;(jH*-qh5z4$7+zs%&g*T!G8w^1slFY@PV^()i!tfaNXNcC%*9O0vy5J3Cjfva+gX zX=z!H@dI`(aITA^2}q3ZopA1nkAA@4AID&P7lvayeBYjrd=3iY-*Ie(?>s;bIJbh1 z7=yG~SMZ%O>Zk*%$~uu-ADA!Df4-sU^)LtXEE_M+@&``!fL|jVwSbE`uyV$E8+`5v z>VwY_IF12L#^)JgE2}x6c@l|up;&AcgX0o`#Nx&HK1L!IFTi#4K(j&9QSKxhN8$d# zIQGJ^9qM4+aKO1KK5MYP;aHb_4aX4Xk7Gub9{i^Zh0_IDmL=Oc`(DNz#|EJ0z`z9d z$an|ha}OMc;y4L-&IPthL90O<L0cta%k7|@pj2yXi9on+7if1D;j`r~Yl&4V6Ykjw z+5t)iZNW7gpc^Yu{u0!~x-kL7y44j&);9;}iV==YStmJOfbTLKC$e&f|MZ|>dLZD= zIU8hJiS3JJi=#1)E+F>TgCP5fz-K-v4zv;YCIc(RaF4aM)qY!R@j=ib8yl;`w$@fh z>}<pW+1ui?t@!9aWOWq3F$urhNUV-9p^U>exF6*mfZpsy`MXiiPSmjt`mh0fEC<a2 zjRy??g@7EOpZegf5vUf&h%bCX!6fm&b+v#y$5gf<V5|Vr0@;CrA<uBgcM>p&0j&ov zNo>!+XkRAQR)-lwdpq$_7i+V04=cS(KIR%XTbng|;BV68aeztVr-3F7Uj&(`yb3l} zeiLk@^cKh0K_;rN@cr`u)5cHRm^OXnhn+;c%{8yPiw!O~+lWrt3%X);)D}lUFC<on zp#%FtdsrVpTfx^F&;rmn5XT<&3kWM#Ezy?x_*jYcIah4>-$FM3*5=^u;NVcj*49=L za?=I5LT+7fL=3i?4|%Tv=G%bxE*rtVGx2tn7@zUB(6|YVp9CALybd#z|J2^70kt=h zr;aA_)X7wVI+@8+XHXZB0(CK0psp4Q)D6@XpZT1>=im7{zMk*n``e+MFhhk8tTU}m z)gF3TXkT-(7M-%Qg+5q|kHSa5Pe=}ezkT2@1%Ph>&#S;Q#|e%}?LZD7O^#ix*Z=83 zjxyx<d6o-Ek$op*<qp|(2Tg!nmqM<aShnobVc&<GB%%{u7Fro?VACOnihnak9gH)v zV?4WCDpF6eBK5Xbq`tOFG}uvvqFhvIq+3H8<I#x5dpD-ZzD;OKtEM!`rwNVsYD}Z? z{c!xw*M&PMQy&{8>LpR69w?`qg`%J%tQYN3Pg}zV6l|>Y#?Q3beRoUUEA}>4X@V{Y zF+*|?yzT|x$RETT(1t}gj>fSQe3%paGu8v>Kt+xV|HJu#9Op+IA0d-^+`q!n4YKM9 z;yi8{;_X)0`)>B_cGi~1JYahP#*Lo0HGpjkcxT#i53!PfSA>%aO$45^{M9HXv<0o~ zs6iXMY0~DNTC}CNHf`;rO^HnXv}s#E9ZKrYN1XS~{GNZ`(o0*oetj2BTHZmO76vz` z8Ew>PoL3VX2)$sP>S2|s4;{1gA=E(OLu(VYNA6Yz7onfWSQo(mA?N_dh!nIZ0r)S* zaSV=~k;mBMa|`HuZRi4zDHMlA{IBGQg3WWk9c`}(d8k1aHlU99JdSY(=7|FCw&H_s zR)*(Uwvh41Y|Pmndt1Y<v+!n&)^-NYz>aZE4%eX_gLEh*LYH<8)ulbdb!qPiJ=!-) zkM@HOjM1ZmOk*=Y?;oA{{l1Zz*YWkcqI7Y;4s9O@JsF@Q=m_gkTt{`96WEN#dN!tT zdu72#u+QmeqJUT-Pa%d%?|jW#-gOe2ozBvO>|7xg?b`%G?jjxm3c+U!5a)^2paVSS znB8y8aghJdKFG4ov+pxAGvhHf6Hox!KNPrgpL`SJ4jVe?ZmEAMz_8&<wsn?mS76>t zlIhE5v~EVLI{kw;W0V@HCt%Fj9v-JpM<?mi@hSRra+(39&orRZvkmDC(;P!OJJ*oT z%`*aJ9{HTV=WEhu8Pcg4hI9h=9iMDKM<yE3A(Xd&w7#H6tW(>eU+gnB_0*<i?bL-B zG61^3eu(o3jzwYm^5kdI^og^T$=Pf@5d48y@CWf|_Z+l)AjlVfPmf~)bfEnIQ(qv< zagKEyR2^+?&V6^ZyASfE8Ia35_LIo154fA_UJf+GJA@38yTQM9vs9w~b}Eo@Q$g07 zA#=7z#$nHJwqJcZGQoh-rU1K{jI9x!UtmO+VvOm^5@Wg+YfRTyn9z+l&`MLfxypoY zt!6T%TWdf#@^?2^X8z9CWvno!tGMqn?!UMwv%E7Xm-XU!v;iF+Zva1{PrHZe(~iM< zh$lLTGg`DLq$Q1pU+4qh#QNI7Sb@R}<f)Bulcz3L#^-I&$3(x8<HA1RkFf>uD$r!e zp$m>SkV#|Ce>pFJ-Sb%D|A#-p-*cQpJL}=7kNC%9up=OcSZj$S33A!zVqtJT&_Lxi z<KD?s5jmU^;;kyp3TRI8-C%G1bOl-O9<C3+Z9vDO84qLNZA=#y0_&wFz!_Kq&%f51 z(w+5Yba#Up-A@qF!_8*&aEpi@ZOx>|Tg~ZlqKF=E1Mv~(kFtK}>-hTn3AjJrjBcZx zzn~{Kp*tBU|MFrJy0E|m{=%3}PB(&|F@$e0K%CL1?Su4?W9ZWA&RT-L_OVqKa>owv zU+fQB8#Q_AAQq*g|8f*<KLlOa1N+|sS_B#bxp+ZFTCkDY93TH5#Dg4vk9Mh`eQ2hT z|4d<<=f1mx#QeCQanr}4uoL$4jQe1xhKR8(Xk&Mdy?T@y#s1e2vNocVjQKoMy0qAg zuB|YG?E<59B4BM!4>nr>V+-JFK~Iw{=-GA)dcMPwUhK4>mnoL?G8L44#OGJL@I8N* z`+NM(*YkZ`#*-wJmk9kpxepS|p%WtLmk7Q@MAw#?(Zv{3=z<C2g)tqTU_^UI8q&@P zedwzmt?i<XK1MV2K~&MtR7B3IKq2}HAHB@fZ`(<%j-&mY8ytX4xUayzU_9g$hI3OK z6`%*@|6m<pyD!Q94DI5vJ7*jRz~5tx#A*x1<o0=*YF-c4SNy<o=>qxmw^OCL0WB$^ zyB=`YM-FBPTQ{P#sU~!Kju~B8WJXt)i-5T~?AwCwZ?c44TLN#!%95V%6w`|oE8r;x zwpR3dx0v2A?UjJ|D5kgj@}R8Wh3oc6==B~hBeNVXkIQ|&!-}3JSwSDHgnI8KSVH$K zpbO@7C02yEV}|^}6#EXEKwpgrJC9Oge{9^>MTeq&n<0Nu#`uCF`j7GyXrTPY#oXXh zwl4tYyFnPQ7S9549|*(UHmaN}K@a}4{(&5iad50hn_8kR-Z&29+#cBPaI`c{^Ve5> z8K%$UGU%&AE)#s3K~B2Boqeeh9UNx@+|B6BJP}=9YEIWzTF_tXEa_f?7_t{*A9gW4 z+aUqw65uVNSGyTAYkI@9*M{Egvj*0g^lra3z1we70Q%?NH+#9f%yM7vwx*Z6tf32; z^*-G$f$oXncf@peqZRTAEBGW!y13XJ`YJ+<GKC%(Lk|pTYhQg@(O#Q|xi*21Q>G3k ziWG{N;A^Dz$ky624fb&uw!wKpB4iZ<8pt+-c-aJUtju{cl7T;=k0@XdzH4$ULpyjJ z6mxJ^tAT&2n@IOku%5z)c1E1jD^a9#V~TBues^C3+8Jp?2gaFF+B6Yxw*c;zbbXbW zZf}s#{ml}3lxR&)x7)xDZRka+4Y05U?zX_)78rr{WzyUIwj>bFGe6q_d+F&duFWYU zt1O}Hy>`&A%=%v8$o0QSv4I}iAWqoO!>!hIZ<96swO&jaaboC!C8f_XhaQM%?<iB` z2S&81mjTTSRHy#-s?<pYUx2vhkG#jx(&P+sp(7j*Ag}Ep*ors`<N;YW=eaMQ2m8%+ zK)@cD*8=u>;GM_pd5&hCjo5Opw^6futn(d=c??B`ruwy@gdX~oJjfVv)0B=vPN(Nu z(xs&m;4Y!t@ixHS7B*%_Pj}eC*6o42J>+grulCpjchFvYVDFGg`*6%5e7_I0|2v8A z&7oZ7qOR8hW!BGpyxa}GQtY4ycJySs9X(96g&x?_t#vkZElxrgVyx)YEK52(QAE3j znb5WYMzpT09*y!)gAFKS+(3bX_2fUgo9SdACtw{o2)SWiLA(;jksx364b*Y0_8aSf zEc<-$C}59cC@30j*<f#FcDS{k@=J{2K<AZcfL$Y65~c;8Xhf+)P3hnSb2>TG5^|Ez zwUsvXS3Kmm*`6M5vxht#=-EyOdY<Y)FLpUX){embA9}sl5qRV#C!B-!6%lb+Ih4De zEFMtz%RNp4U(Db0R7Zi|$Kd;6qCMSBu%laRZIQQF)47EbN}Fy;`^SoqBbvY$7}89C zb;LhaAs&S2$&-(v+5;O&X8!>A^O(^Z&{%x-V;x{W@EgVgS=LM7Ujw}Ix*Hzb;v9dY zqowij06oQbVZgqNxe~_M)o4v;eM%b0HjfxN)r!u{m(b;9Hgt2X9o^l;a&x4|$&Rpj zXL^?644FCuduPZvn_M9C--vcIFPXeCpU+dBpaag}--#Y2InjeHj&ysY16^Nj2j6Cc zm>{OZlPxKAn3-S$vF&s)=g<h_9ZEt@;AhbA8OB16L4JoI$6b);TF@ByR9<`1f^+KM zNC$*I9{A+-R~+woJ;r3l-pSk`Jy2KSeOp6d4?h>(N}Up*^V^3YFB)e_CuWH0!eU#x zw#tG2+TaLZ??exioMH1W^mL~yuy=(lvuKwqbO5ybHzx4+oGH~s;QJYP=XN|sdme6c zhHg92t@Vy{b%h<BTVzYeriqakm{U@?39ap_Ps3c)1pml>vbDa-D_gO}iEJH!T-gtd zf)DTpHRGJ{H|Q70G7r4=3B0ugwFXUq&yRO8(>)WYEB}$P?`Ek&v)W+1wm14jL(S>X zBr8gvYeSb}9q7hdC%Tj1LiZD0=~1#9J=x&~nYq)`6gPU7ir05#(Q_OH+J)oqN?AN+ z^UOzX2e;=j+VwEWmF{nGK|bqD8LJ)X!V-HrG1D5hU<I2nqYd4SFhALxI*XKvb)b!& z(p!5gQ9Aksf**ivSHs4J!@k_11C90d^?44F=L~+yAJ@(EcgzcT^8|0Bp|9(lO?A%% z=`{Gn*mt*5rTIaaQ|oI&yM|lP(Ww$Tv%rq7tZ<^6>s??IZuB709oTz7MjrHJrw3%_ z`NQabvO67KY(saqF*ZN0o-fOOg0?;0?hYMrhpxLp=iQ+DE_7*`BW%GIHX)&%QRbA; z(}*T`w?wSW(g7WXzmY$sL%tX{7V?2OeCD-hyv|68*BoZeA^%hz;5re5%EJB?(NDE! zo-m%d(otk^B0xv}W0(QYoj1goxDIXUXG*(ASi#@f(zzJ;zm+a@E8dOnZuX!D+dS!E zvL`*-?gjioJF_Uo3%XD^+8k|8#_BbwM&(jerc^PKlanO~DTicbWvNujVpOGKNm8g& zj<gzAB@fF6gtscty(HGf!qw0B=d_1EqkY`Yhe@8$0Z+QK$%AgJccaV8o$2&^2jm3S zv~#EhVx$Si4K*_T0LDmK>nOgpvob#k%!PgdWR3NW!WttB$i6P;-Dua(92*dFeO@0A z+ZTbK-mv{84kF{j!2Uxhu<vf!kYYk~X=^_-+C554$EMrUxy4R&ZM7TS+Tcldw|LS0 zZQj5>lOApNp+`GFd@Lj_iZG(e6-wsdoEvj#KSP*88HO!tP<T*tI<XA7Tp{_&ZXdV# zL6SFgzzaIy1wZIcS5~^gFFMlUXj{ZcE85iCl&1J<V0=u4Li7~KPgms?`q0O-bRY@G zxxl^y<gN!Bto{@8K_TXIKLprogAZOqKikg2Y)=~<#lJ(LuU*YmXnvqB>|O-yC3Jkc z1F&}i_8xR=qc^bkrhD6b>3)(gJxKP24uG~74KZHQVqDPcN|ul#)dm&G5A!-JN1F@$ z7npCf^+9qg;Gfz4dx<{K0Ux><?+G1nr!xzk>Btm&^bN$6038_brH+1qG6m~mtWdw< zb8E5HQOJ8g<j!jeqCu^JLo@h*>|Ef7`hl!@-11p5-v{+iu(1?v^V3m!gE0)`ugX|| zqeYwh!0ty{)A1Qjz}^ixz9+CpTQ|3&yIWfUe?QoNE66aLaGq2+veK>l!?6FFu5kRQ zUb!?m7&o9DGwlk%e^#5(ewG8v<Mw7>x)JXK9q^<xi(H@s4u}O}+StRCM!B`X+>tUN zry?)?CXXTW!@wVFPsM9FAH=yM$6=l`1fM^0-dOPasFR<&K)4qV2CeeeYxp<_`q{xm z8F5P!dMl#T5!UeejJ-QuT@4=>?~6A2(VeZ_-qv(Cu{GLWbQBq;`BSm~nm$x0SAv|) z6lm8RN9o!I8L%AgLMC^%_|adRS|K0srOR<%@B{92DB6K`M2cyBHxr6-ZiaayMGDkz zKyJpGHz9xS6QqEaf_lLojd{%d2gZS%z8?F1jy<S%zPpk7W#*}^k)oid8+(}1&SBQj zUne@V*n_UD@_}A++x+PEmNsZ7Xlv2Zrb#x$w)izne${uC%9kW>%xj%n?JZq<A(z{m zTf;}Trt9ll(WN*aN}umW2PZjD@?bH>%uJ}ibrXyaDN=x@{3i!<qqDF*o;&9GqUpdS z05Q24KMVJR`h;@a*MOf<MZF%N@yPY}1!y+-#60!4X^Q!76WSgrf!-pYUFb=dSNftY zXj4KP;Lq*z&!jCl77<;6tjd-y{##+6Tjy9Wb(+?o#HsfAw;8he3o^O2$)9d+Y(p9A zTGPelK6G-PJMACuK#2pbFlKImexa(63;1a(zO%Np;Cyf|@LvZS3cqXzAHeI#N`r@@ z%maimKK3uD!whxxv$hbe^V3#%%YL7ES{i0ZiG##+V3ISPn(s*$SG1yQ>)Ozb4FSME zi#7$KeML(lPECJX>~re@f38=f98KtMoWBeptDB%3@&0smO=~(I>q}{~-D%HQ2jo;1 zG{aAu+9S@g&-K=8`~+BV9M}osHAJ03x}2Ls2YAguQT_4Sz49oV*Xjm<W_sy0xgDTY zA9Ghq0#BR!S_(X#nCnUBm$jlRYy9bYJle4_5c-@&2{;xpRVZ7yejWt$)Ags3d}TTj zi=6*US!BuSMnVwmCXg~9zssxI(Ag!vbZmw@r3|;D4Lw9O+@+-u2mCb~kh8J&Rp7yM z#+!i;o|h1OvvO80SQI`$nA-vVwGs1Cg;j)uss1j1jru~rbf{Bvj9Z$6H+wod!-LK) z^`pzH{bBooz(0ttZ{W847+M@5{^{5imA(`&CP$+>8h%wa*EeR$Eh9dVuC5E9ODp~9 z^det680|*M5jI%+Y(hOTzQVrOPfOu%#DQbLh3AQu<JcQy2;w#6Md1Sk+ed!U48A`Y z57W<UrLFXm{ZAK>Dy?W|Oi4p*!J9j!FKk5@<NRU!LBKzluEhsKheLiCb#QO_$Ks!@ zM?G6<<tZPQ-?eo?kY^xWSnf|J=K0Xx@h-Hbzl3JD(M5kii2}45kcYn7Jz&pcgZv!g zWZ0<}j>^abxj$GKA0WhiwtbX`X$Y$bSA!Pm{u&K1KcPg?-deP&FXphuxl-CZUplu8 zZ%17Xe%FRTZ-eRTdK`Zsd5atU@%YQi%Fyx=_Ib+*a=fxOm@cgfqBBd|(6O1`=vzBc ze0K{P;?NwqAm)iQ>VL8m8J`9|cs^P10lZg%K@sEua>)70p)7u`J;=t~B(}9?gAZ)` zeZ@_&UQa|jhB?wv@N{NL09}X+qRVSS1pKe84aM=tQhT>Q-~QPTlrCAE(w4$+<|Qx4 z^wR1Oy09XM(igR+gHt?d+aOzt4Kv1=iwgRK4aiqp<t1>+_5qXdnb(ae!FIp9FTnAG z*L1+2h)~{O58cLB+i2DoY=2>(0c{PprTvpU=;XpSbZ&VNU0lU{hJwQA(wZMnXW~Mr zSh3%$-=FQ*3wm?{j(N(A<+&;p_7y^BV}mGdjvwtF<4PNQiD|sMCI#yVK7brebT7dN za2^ngBR@Z@3k-QLitm{t=JB4=uzMAh<6~=Kx)6TmBinw2T{DbHSyIYK7dke}4}K|_ z&aVJ}D?_0JVLz2xS^qixzx;HfQu$K(%MG%<5ElwN3!(IwKsq$dhms>5X=Mj9>SC%Y z_y8YmW%dEw7uW>ieQz9qUp?T@>qZOo$2x=idG8G!l+nXOujx6q{SbX6S{TTEeS10( zjq!<vfpm6RD4mZB1Ao7US|JvpaeqAR0H*oLkY#)hc6KH<n9}C@)1Gl2l+edo@B!Qx zfPE7BX6Jz$KXc4`8HIA*&M_SFDNr8B>-m6vU0`n~5t&B&Y1IF~x#mD?HLP95+O^T{ zbZmATN?#10v<!SL|FzT!e(+D%fp*U7-<IQwwuk|tbZSvB9iHw-$x+S}*UpqW8mkc7 zr?<AsbKuU;5%Ap5AYg9>KhAsD6{IgH%VWK`w+YG$bk|cm&bk$ZTyt(41KJYKw%>|Q z%nzc|OT*|4@ISi@eEnh?-NBsXezSRig6L$3qxv^xcm^^)6B`D*3#H?818DbnFWS)C znnt^-QvhOfYxR0$Z)SJ~_-_Mt(KveWekui7Bf`F)*Yx3D1F@w=xSvLYx2#)zEgRFC zE*7+Ngc}{16+kCrLMeSoTj;>=L-PkX5FFhf=?gl!X-Owb$UJ>X7@b%cLI<a{rlbfb zS{7!4XN{GF7~rYf_z|$@Ja7q)oj|+?QF-X1RCB{Thlsvo9rpdsMw;tbr`Y#T@x(Ll z{p@J(q*io%UND_p%zXTQ<YM|~jtlhm)t6eHrxv%PlZ(RW=$s(LVlP_XLqZX@&4|Zl z5UW38Opw<L#sm8ZjsZAIJ02*@W5<a74RKFvZ*A49Z8YjpJLG*U!psnFFef=ZfYRoN zq5ih;0fnPkee6i9Q60>UR3OfQOO+@lkYb(6<Z9ZO`1kLrqa?~Hi0}O!uASP$x?pXE z{EyEIrTvpz)0TlwG^>?fP7HwE^1Q${5RV18!2j2m^4TFdUek+vG_B1|2eekN|B-!v zgbkk0>@J~QV}0TKLx6u<N?X_tKIr>sKx<>*U0N!Pc&t3cUZX&DX*aGTRoTA-?#u(P zO)aP_(-s1M*x{iWfwW_|C;Ecs)X4~WAaXU%1A!s0519`?9)x~CV_vU|y7KJ@aGuD% zg2#N^^qVCJz8~XDvwihwbGQ@ji}r`lLGCfH9qQ)#3r2_MhLT>>df$aj#j>Sn<7gkL z>h!T}_FZ-SDt%~Bv!Yb(`cmG<Apaw?LXijhQG8EZ8t%|S=m#)v7_-4X6T-fwJ-Hvx zYXrZsR$Q3tgTB<m_0B$8O1HS2j+keNYb&DUVV=l0g6PPcwsdT6!Rf%vV5(NJOrdZo zg|X6&BYnPEzlYhMH6{=hjA!A#L#9V@&ym?-v~NlPVt@-R@G~Hu7iQdC4O`xTE%V-E zLqQf&^aFEZzr;cmf-*jG?2kmBe{DA#N*Uuv2WN!R;n{6733_n20Hjd6a-p!#w#{;- zOVYtv`Pc1Y+_*^U%C7TA9ve5PRv<ZkCUeGORu~<a7DC&HdBIN2sk4!?fIo7#XTUuP z_Kf}XB)s2Jy>H|I!dx$WMhh1sjj60d980FSYf(afC)zzR0J&c%9h%v;z+~K9zDV)# zFjLEy2M2>cqYuD-KXIIYzHRxIybsO*{=g+=Olv$xXhTE9O@LcHp&x+xdVYp@HZb)A z{wnYRdCmuMY~UDy>vhqG+{yR{qTjb9z=#ruc+j3nL9~Aw*Hti@*44g9v1eN>hJ0yH zbV#1O*y^bkd7VY&1DN+(RmxLOPlG)9FQ|<7PYtDA69Q;sUuT-^qAA!d<7aQGe*$<e z2LA1GjRk*o93Xq#2iKeWYAW93`@6!ItY~Y2*zZewCI{2r=upI(f>E`KWq$}3qeI1c z@?xj^`{2***J)IjLhZC@aX;5Qc`m42|G7Ryz-9M@Alfq6gBG<hB7dySWBl9<THFBk z*dJZo6ZmWM`ry2BK+gS*jErhxp5Gbwe&qWj;7itYv8Ej(Tf_ec)9y(j@B`9QcQ=C{ zf<4=!vti>rd70A5?uXSYjUV7KNc|@DX?ZyNP3h(Jz1QxZ6b$<hqHR&Wv^-QqoiP^3 z_@N*84A`#+4TAqS0>+i|z+YJFgFK<Go00lJzL#UjBqw!>@8v{0M*CCh_+Svmn+ia6 zt5x`6IEXcs^W}x}L}{=p>T7sC$K(#S`SMl}8A^TaxL`^i?nkRSN@x(q>KQ{G3k3GO zC;15Yb>45b8vA*)`OClTXL}Spbeqi0#J@hx@zF)@=LY)^pq*m^3q*+{{PA4Ij~j~* zv(?I%9~*6zpN>DzKP~I;kuP5bm19A!PafU|eKmU;W!qf9pK-)E0Iv%h5A1D0wb;*p z2|mt+^&YrR*;_|-3*Q%n+%Kk$A#EP$Ny)%+J9J?CDCwz#gU%0=Kg)S(U-x|Z*%akR z70Ucv9}sG-nJ-TTkzawY1wKi@KfbpMMZ2iy;O}Uv$IprIKC@2j-}87zET`}9tEG67 z@$ZD^xR(Z+(&j<llr*eOfk~xKl^=$GpryK0{4DL|MkO$Q4E_G$q*}MCR6Ko;ETz3? z+t4<&p`Sa=^VZGj1GpNhUjY77fxjDUzdro`*Y=SU=KS${6U_JCXZ-t^sM4|!a{>Rv zNIxnl@wk0a%blO6ax-XBAYLYgNYGy_dR}t3tz_|Hv@YDcKztQcp3+>uHNuZJ_V=Vk ztqdqc8+#4|N37kt1;0N7#Cx<T<gpe&me&bco13ZQo=<$=5Q|3Gvr<f(2KvzE!L15J zWBjd(9Q$e&%FwL#_66c2oA1^Ayhu~Ic9HYMI>5R95O1^Z;wziKqC7JGi~Wt!2T&C7 zM<3uZ?0**U_W{OvtqB&^dOH|tix_*R;TZQ_+0m8~26ziPuxXGFNlPY88x)zW+2&pJ z8cAJuemqVJmQX$PNs4NnQ0WrIX|%tERJ`?Y)T3q%s#BBt)kv*=b$qTtE#zxZJ8L{g zQ2^QId+k79+6Y}=8fZqn@SGsy=&Pml0@%-n?eqR|%JA`D8v_*ZcQ$BgpN;=$<dCa6 z+rgiBQ$o0Jfv9ph>E?EG`_Qj_u2!Ke&1`31pt_~yH3Bwk+Ekv{udt4Nt^WMJQ>|Tv z*7Wtvm$!wTorO9$KIB&x|1N5#K(XCj^DR%Bwr%L^MX`w6{X`7~{99=%yp{rg!T)2< z*NgGzasTo5EogNYN7~TeN6-P*18HbYZ_j+&nx7o9e-mt8w~<u!NyF2(u8Bw6`nedA ze#3fHxoqh?*O2j;f?=cjG`5Y^H+gf?ZdhPBa4gYLuJg^Z^J`ChA5U5qYDM7|*<%0= z{)XMp%=Z6z#eZJ&>8{f_ARGTlPAzG5H)q<=*Bd(ED>b#Z)-G_nvvKERt;*$Tb~^{D z>njLv(q6k3Z64D`Oe0%a(r{l3it;w6IqlgNq?3b(LE+|~m1|X@^-|XLB~R=7c+v8< z5*lLJG^-C#|0A%U4$3$G<8@!&It@Ey<3GhkgI0HSruDtCzO1j0)TD;EmK#rLKXXj> zHEu3-Jq6+EXI>j1Qva^@e<>%`+Eu?#7Vy7}f0S4)rw=HxvgG{VHNXBJ=LJ66Dm?}K zv4&u#o2G#OIst!g@FE>mg8$6j7HRr{4XRb7`5m34u0vX0e#Ld=N)_FhQ*S53g2|+h zH?8aCf#<SqXt+)D9Q<u8MC|_^d0lT_<3Ai1fPd#~{Aajo(aJ7Pw63Qotw*`iQW=bY z=f;1GpA~r;sC{)TnAdxTSZGLHwzNF_s_T|@bN{UEx#jRZpUajiQ6Sl{t*-6q4*LiG z*8kv-^*mFM1K6PdR}*&r)$w1}3*g@-8~>@U+7#ExiPrY;q_w?Ju9TG9-fLj)GyA^T zVGa~#sYw>i6iM7di6;6>a(>Ic=1)Ja?BP+Q__NN8M;;=zTwtqfy1OI)v!*CXvmE=k zva}ch{LSG5@|ypVVZHFuQg+P7f3h?1@8E#)fPYWM-&-om-IwZSr!Un#(w6-vTvt?M z3)%j{Rzp>K83L!(-Q4gzh&AT!fj{CnKf4Fq`CWsCz&Nk@Um2bk^wd%@&BlL%Gv0yP z-i}s7p9K6_2c#gzzh2b}6l|^`)%DVp`6pe&d0RGiMR8Q9UP)>>u7R&!*~OJ&gT*w+ z3i%)KZ>1ss2H1DU_>UH^?FUa^UH`-D0<fo4i){SII%?pZi?+0?s~d5-YkGJ|Ma#Q* zNOhgG<$dkCxNaUa%EyvIpksX;4C!ao`87Vi_T5lV^CHE+X2o*S%M-qORaaM98e~NS zEVJ;}RCosL!=M9d+{Xw0c|8Ll=c%vOARGTtc;;eRm<{yFjaD=EJ$-&Djcz3-wynJ8 za(FCOzItUE;9~kq`D8g&EK{n;bf7xMK&6%aYT&;TIopyz3+ipwSg?Q0=iUeQzKH*M zjr~F;gg;p;Gm|pF{|)<%A=WK0jwk{CF2Eo5-_!e-(A>68RI^gK0?D&Zl?pV*Px4Fn zWjT52s}+b}NI%c(tCTAvbvqb;&e<0SU>&$|Lm~ge{Lf|J@0icre-`{QGQ2(<&wQO_ z{QH<Ur6oa@D9;7{hjTyQpH9(%cJ!^W^ZaDzXWZha^UQKu4SDf8-~4!!_BW-PRitXe znx3e)yBDqK;6yR4%_u}S^Lb$G+p`zg^FICGd<K+rK+ONgGya{88e;9Y1^kIK@(+wF z^ltT2X;zpM6))txJ?ElhT3P>8zO&_|tMYx%xqYb@HZ4`9=AZ3!MSBOD<7<RxK{NLS z!ko@>&i(j(F(~`1xgWmI{*wd#V|o5382S_AZwC7Z{=j~HzcxRW8X)flQ-vnZ3s%A= ze>VT~JGtjMk5rI$g}aHQ;(cA;)<T?Ejx`dKJ@72B7Tz6#xjYwRtzoeJMpEtxDhvFB z8GqKFIX=b${_FbS`N9E#6d(R`sJo+Sp>fYGV}En4JbCvs)ug8NYf{~+6{#Y|u6fLj z=b)O&*CL5VBN`WIpXa^bl7~v|YK3mcn*RP$)xW-f0IliegFc%bjdIY!bAXxae{4lY z{OnKmvtQYEp6Ah5y@5XK4eQTDS6##t2f_br0R9^W2LBW)Q?f*%<(3=&hIOj{i|-Jz zp0M{`?(6dUY}QPf)_+Ia#{@VOsvVV)`$;SF_yNElaXJ=be}g2=1^i*luaNhf@LrI4 zto#0#9{7rMN&){DtUp6+)M;5;TLJ%#14AfbNZ1djh24D%C9|(#*r;xe&-m`_U|irj z%46<-Y@p+3<wzrs>gd0JjVEco>*sDMb$uJcgM@K{rNLI%52}&S_ro*Xc+b3bbBy~* zz5fgNk_G;WoC9_-!TXuf2jrYKVQ?sIifm7te=r4F>3z4n@{*~WVapu8XLt7b?)6_h z_AslHcTQQ-$fCEa#do!*R^<v(*TcB5pID7?vH8gTgR*jeJjXc?_Aj5unh%KU>wkXg z_4{)Uz~wAxBNFtAb$#>Dj<jWHryoi!m5L^BM#}`b^LYI7e!)3BTeK|Pv%wsjR)vS< zlqZcmN`FT@8y$qbo~4xa=BN$={wq7X(s(!hoZR2pP`yn-e1En!__nO8lbr)j^e_;{ zfZ6`H4C_pZBf9=js$Qx5ciBre-d`TErtvd=Yr?L+yr!V%H7ZqrEToqM^H7jFYGM3J zS~+hW-bK(8&d)ek8;F?Au^aO~&*1l)d}GWPZ2kMsRH14y#DK?K&LEVxq65}G!M|`_ z+eY>Hp;Wh8(d-j}R#AD3!+yzcUgO7neL={}Oy^%^e_2=V^Ey?f@6QhKv6H&KS^ z{JDS2<Mkb~Vn4=xckw$Kv-W)WH^|@k2KcYy9H5<HL*xK9=!5zT_$Q6-MM-0O|1eUm zSF1oc<cHbNK-YiqnR|XZzk9#+n_{hM|0+8_xvYuoguTr^UmNqaI#_4(E9cAKwvFy7 z#O1Y^cbMU8niKo6mM;=(Ix3-#uRZUHuk-)&Q?KX3F(6P!k)pkfguVs)|KzcKX#4oS zw0%OqA3~a{3PpmyQ8U%A@>f*&7cW-qtL1-7E<^mCNw0}ARYczo2>gpY%ygwM7dRx1 z=|!6&+7ZY8!M2*&<38{3+#kOe^1I&+3;QntdcZNDzgQjPz%D}mpFFlN?U*=#c1#NY zA!M&#`1O;O%a^0%318>0sPJd(HjjZU3L%Gbr9Yo1WZpK9=`DSkz#(Z&Pa!tP!uPi` z%Ix=H&3_WF^^msDpO+_q517U=AjCiw@AI`L?qjn5**SS2rA!(8LukpMj{mZWuh~gn z-?0q2jJ)_Os`WWsPhNFM`+bQoo(pNzpiY6xWZmQV&vOowy^M2wzn8XZ5b*!nb3S=N z{nhXNTGrFejsauc41{q2u5V}bAWEGU`NJqL-<TKXxxZJeT_az<*l*{){(C=jpRTYn z_;P=Qu^s)SFLP>y;3v3`$ZLN3id$y+{`!xctu1R5*7hM6;SVt&ont^3?5Vc`YqWXH zgYAFU^eEarW7rQN8$FHh#>h`%k}prCzN0S=LHvuKT2(6LThF&-lQ4F`XJxifkuOkr ztb3emaKCJRpqPU7cn^52_tI3DQxvwJ1-}epfPeN_&}45@p&yVut}pGHF_iYq9swFz z<g{vJpU-6THTmcD-I|eo^W<l0udwef_sjYM?Je@GM;e(-=o*y6OG)$#lBPr!pu7=+ zpWyx_uR$A(y`{3|d;fOVZPK);Y@c-i_RnJhSJ(%1w`eZ-8XgB={o6ZtH0_%==7&(- z>IGj%$v!zhe(KjO{Cphi0mqPCb4KM`SAKl(Z(Alukg0|m`h+EDSi4qIm$i597(q`s z26NuO2z~QV1FZFd?fYrSFD*>Y&v<|B5BRrdAHY6lS}SwG=Wq;Q{P!;y|3k<`qu_h^ zswp+dlb6_Gy>sjhZ7kGhkyi6O>-kag$SHUJIN(2mlE?KC)@4LG>So*i2jqRt^Vr|( zYp_cF9q{Kl!M}J;xThsQ7wRF5Pwk#Hoc1rAKnG(c6*(EUEci2&9X#yw<U_An(d-FZ z684%neR!Vr{0LcOmw8~(L_zP^_i`S#ILwa1vif|O>s^hw&(HScwZ2zsyuWrK@bAe! zhJC<fACce#QlbY7{2W{yO^23Dp+ifHj!a==;6rLss#lx#EuQ>U9{BsB829Bq-;9A> zzFJ37w*9MRLB0pk4vrn1fAO5`U^{JLd=9?(qmQPd){nxT^#S;oL_O!(2Xr)TO3OOA zQsT&Nw0HI>0sF(T)9LWCq9cic*1xcq!~82_@TFd~Y^0oT-BbH_{?|QUmLbh~TX(yB z>nY0i|EsLnY4ACdg?<;u{aFFX`Sn$^;(q=4MVa$K7GM2?4v4e+0#VKeLSJC#<Uw?B z(Ih&uY$hFDF{{YPS!DPx%=!iU2<68N?@yt?!pFv(;>HgCW}Q=t0Dl`Jop07tl<oh# zteJw|?VmSJ7=K&c&5ODt4zn!+j|bjb$~6Gk5Apk7Dgtz1CC7nK!$veO*p{|LbrSMX zw*O-*=hE?&^NNJLZ9ZQ&QKES9?=E-tkY4}NCA3Sb?|8hhUohTzR7CCio^p<@m@W8N zj{Dr-ALogA9zA8j_FHQ-X#2CUXI%jP^`LVvxWC!MN?llUz8&%Cz`}_F{%NZhP}-V> zg{Fv(|MZU;tD03S7phG4#s%LKx=g836gwuOQ1upC7LX_Vg1vLb2=lKo*c+vtag*%z zod^1~4fwA4J;w5T|DXdsg*X5m9Oi0B8wOxs;Hi;xBz6X!Si6W$u3ubeI<R8SXZG2$ zkxHS<R8v*@tW2~&&vWJab!p$SIfbsXP_kGTLu^k6W1=zV+Fy9Cq?cGDyTA8$8!dUw z@5Qh%_W^%ljUbN+aU7T)AQ9rgK8#HqUp0?T#V@7wjj^C*g`)Ch|Cu9ovM?!BS=qd7 zoH?GvhPuSIofrPzc2-4FS9YD>cZ{Wz@k<2T-!*-xU}HmJYl7d$SWIh;`h5z6VPWru z4%C1T5XJ;Liki_<^aqkKcgebX5_)@j(+WDXd1axfW#h~}w3;_mp@XXy6{@T+c^TiY z`&aRAi8%4)wLkm(^rkpL|Je5T%^NG&)^zNb!M4UW2iYe8zn_xt<)<g$Lj)c8z-vVM zVDIBKn1|dsX`s*-VEaF_brqdWT=U%&*{wYd>WFs?7ov>3?p1_;N83K5idZ*r60*<h zo}cyonJp_}`-_GCeiGLAEN<^Y9Zc1-^Zgq>E$UXw50{_$8+2d@_XpT74R%7G5YHiS zo_cK6T)~dcZCgv{lh^-Nl)PltXSlN-@Yuqp`BQ&6pDeHRgylkik7NFdu3pp)d3M(P z&U?(s8~;pvzf~9TmjelF1$jJTn41Z09281>W{nVXL2l259UFfuYT4x9Yrvzrcl`A{ zZr>pI%wutLh{sk}_41?M*dI1~JwN7R+kXp>U-3Ke$8+QLwrA&qW4uL}n`%#-4{{E3 zJ~^H)rEUgop-a2A{!&^vZun=m&*O>1dw2b%Jh5CZrfed%m9#bUY1gzUTGuat`rGUM z)6ZA07x62wm9|dcUmkQs&;g^yG_jQx@pB10W_4;qEM3^SkuL8}q$_*2(UrYPzl?gd z4a~v6IL4G>CXM=Kya;lDJlG~UM)Fv}?&-sXXKe=|mS(T%fLy0bi^H$H4t#Q-;6k<z zjPtd`JXHtUH-9Yh*;qlxuk1~xtNXXpwf#GO332@;u}+|DnbNd<#iC!rLw4I)4y*$g z;P-jlgxA!p!*jd?8T+iUeaLhb=v&Y2|4P_Ds~fy3LI<v8>%a)ltXP0~E7pNayEY3l z&p4Dyzluf;=taj8<9}KG-0o`!Q|RixWFhBZyXTyFb>BAB&rUD5-Saz``F$OK)E{`R z106V-oexC0nbHO!Cmbo{1Dp$R`>!9_O*fA2{okS^d+7S%U4jo}yXW};&h_GYwxV7( z+PUNXBFOP;dv*R1x&YoQK?ioR4uoKRQaF6tD(H9WRE(#uo-gP<>%fg;`{?HJ{d6ns z!2f&VcCx;+-{)M9=Xm*fibdEfq#MR{bLMo^>y7;*K>h}k(1FsR_1WVC+{T3+-Gw%D z+s`GfqiY9t(#>Q0>8}%q=&zH9>914&4+-tMm39c&??b###@J{a*3C?yt;4#|<NzCL zZ`Lex9fxKEe)mq#Z;17e`Wfxv^`j%81D|-DklQ+;wKbku>m>9Icx;^e1UDg@+b56E z?bFBT>X-KPde;-A+FSy*?zwx=SgWbMm~k{evh1aWNEqrL1}U$B>iD9|dj!m_^&H z5fAQjTe-~xosB52cWXRLFo<}5`$F;tx_)Sv-~;ZSNu#@GPtv_}r~XK~d+sFoKOyKa z+db#|XSS>o=0^B=J@$b;Bw9j_&+!p*IRyDA6hNGR<fUk1-RzuzV_ip!mNdy9@0h|k z!QMHeg?U3BBj9+zKH%Q@bh>}xG~K^==FcGJ6+E-vvfbZ6u6J=~f-on_^W$s!1<_Cs z5w$gGn(gm-E@v{R#2*RhcQB2%ay*EH9=zo-ZT1Dd(dSv%*)wbYa5A0Qv{L9BaZbQ~ zfboBD=^Q=0%yj-Yq;mp)tgGz1Sbup;hsQp7-NxpjU1&;>19h>~$Zhj?Acz0A{{CC4 zfwrqc2et{hA@-SRhxx524>MZct2Nd-^rJ(IrwH>$*Y@oYV#2-ir!sZm$_09K^%6b4 zcKMeQ^YG~EMS2K+9$Y*t`1@PO576aZiGm;Fd0T!~avpqrU+jY~#ChJ6QM17Zv^^Tc z`!W8{|3MC3(1TkX2RSCRH)~Fj?jnlq=_lyH!9~%+d>F?CmM{AQ_633tT)#q3u3ych z8`tQ`k0#Xh7<E3*xGZ4LxO1Em{5;0*dEEogc_fbLPIEf|cLxJ%i?v#u_p+X&o%_&U z_5XR$zYqXq!gB|sAfM-)9|r5H2>pb?$d6;X;JvCNdkE{y(^kzF#>q1drqb<GM}%0* z@qqDQ?4RDePET)T(zCyA(C2g$=ij2w@5wIf>CFs5$Jpm^4C46CdEHg?<#>(5(d9FR z@w<e`j(A_83-y7$GwwWZmzCdLL;He2zkJQc7oz{IP9dKvAkGbhy@%KzaIVw~`N1UY z!?~(|FrInsFRV4?@$&OY>jeyWT;=YW6YvXX1-s0x53B>vZ{NzKJAcvhya?B1>c<U1 zkJztpIqcs#|G0y`9FN_wA3D2rwJ>hSIqNp;hqI(-YZ~P%rY=^Rf}dx5_ty~e`U_dO z|FPqEzd}JEvkD;IgYF*N56hFs5Icxkpx<arGs0YH)qr4OFPhymhZC<o=QW2shsOA@ zf8g;%_RaS%q-W-hSHH*`fGykeqicxc*RtX`;tJ;(x6_Xb;}JYIbt!eLFjmL<#%tR+ zkKa17JH_^HgT9MBbW>l*U3jjJ^Vuvve+vBjg8rC!n_q$Rx9Wuacn=y^=)qdZ^_`F- zz^C#$IL;G#+UnsQjS`yE5$`9!o_xF)N=oz)A?H54WU4UE%;QUJuk0&$yq)`Fmr}3} zf!88n9^>1Yzuf$76Zj73&c{$G}+cnKe>a&$boud_~_tn%>rxB0bEhEBfx7uZHM1 z6m&Do$3FnC(?Gi4YS(|i7hD36YgJH3=)wW$!l!J%z;+jA*hJ8W?s)g;5H~X#*V=|= zv~#1F?tX%wh#%5{Hbr%T-S!arnEbo~_c8c6I^NH0>xgc&5zn!#8{C%S&_`d`)rY2r zI19QJ?qp0|;n#WGlJ$;b65Dwe=5JXy!Iul@f2I##aP*4y4#>JX$Q!bs1G>yUm+@d+ zIOpQIbH<8uFt$_n6&=l6QYZAk*>-!{>QWzjed=kWE5z(hcn2ZJ7RH$KjWDAo!u_mU zTps770^aDmp*|j~8wIig@g6(>{rzGI00#w7AZQ%$i3gnly%l0H_q($712{64tS32? zg>4qTnejWbul5XO904suxsf1e5bvk=-`^h~0bs@JQk6gw5Wm+v7}OOM4nkkE!9*N~ zf%<_uf%x6mZXi=otv{fN|FQU=1pbr2e-ijl0{=<iyCguFe^D}7A2JUa*fBWQ7oWIj z(LY~2<?~YioJaBbKP3p4=epso@Uu*%>>DyN&vR;s$~@05AnW#=0zPE@ETfQFfKWSs zm&HLw_U~B*MrEJNW?r9tDkBrgU*r^@RY6YiGMN=*am#lJ9OqP*Rbj?I<p~w0{&Ox= z81>J&(4t(Y%s{T{1%^I57ZK%RM_?!yI|4(w*bx}|@;oDVePA#(zjH7gmHYQE&(VO~ zKQqRkpGSViJ{t7Jx#-LD&zc7WzBpI-^8B;rLjd18|4bYZ(6`PrK5tK{FV2e<_B>VQ zv%g~BIG6q6_uuXOU;Jl$);yU)%j;WsedG6U>c^M*^QFFh<NROx{H1<>aUS`ly?k;0 zh5f<4qH+uLOMAq5YVO~^V&56Le}{+s>>Lj5GXdiKGl3|4asH)0g8%wVK=g$_!+Guo zg5A#=B>2mye;5=Tc<Mjrg1^o9=UjpB&&9BCo{M1-|DKDXNIw4u0ipU_3<=feV(82G zAyl8MLIo}^mqa3k(|;<+Jk2REtN0v<vWm|sP$B#JERG|y&of1qb9)wMS={hN!VUji zF4T}yI$!WfCabM{QlP&kkhVD}3M4C|i2r}9KUv<-j`y=<!n+JgWbJME|7{Lc7JGM< z#Cw`5;ay!d`8~Z^?`%@RyL;66{cRv~yu(o!zc<0V{1o_oevnOVezy<5*YQW}`S>F> zf%#>=nSX98+GdEh1>$q0L@b^v7F#WnNW`mfTo2j^O2GLB&|0yTRV=QV1sRONeceH} zphlot{C@i%xd&olWy0;|_pqX!%D~y0`A1u3ayzZ9t&(kQtoGPhTOD*1o1Ad5G&<*Q zp?Af{LgR*~h4wX9OT&v!Vw2PMV)Ns6HsXV}HsXDdM+)xUgmRXm%qWmI>kRCrM%H^@ zehXXSb_3sXz)S_a`hxEn5{YGkjkQ&Zla<K{A5qI&VWtgVcN8go=p@2k<01v>W}$#* zpOroibZq#szm3Yr?v_fQx|%CcXES-~WTx=3y_w3p)@IEfxLO)qw3S#Lv6fivLAi;L z!E#Vf$X5rtP(4c@3Jcx$-Y?5~&Nhp7y8`RU*4C0O&Xz{$exeq4xDDLafexx4XZowr zvJNe2O;-)t)LV;^2I$a^K{}KgsY^Qt>rgVzxAfJf^*uCcMJIKdAJUA5yEppO-BOV{ znkjt@G;8|U!(8vGwZ!rWbYdrD5Q{oHgIc<}x)%Cf5Cs(gV~)D3q3xF7Wel)MaI`Qy z8D!e%MQ5}*(z(&6xk1e-zNaRoMCj7Nar%@t#eh!DFr+hc4C%rGBf1o0Ojni|)8!>b zbYY<pottMw>9Y*!#8d-1GSPr`57ncs{d8z)yOuQ8tI4OHR?45+nJE43DbmTX5nCR% zva;Ncx)*|lATu*FrSE+gQbF6!I)^&zq5ZAF!!k#)=@EaECXYLrDbi^7CZFPaXw$AJ zeL6he5bfdinb6HuW^^}RME5s|=+PDtJ=tbX&yvmQ`F0E8_;i~EJ>F_g4>p<8y^SLJ zYpoewU1mz>=9|#5Xd~J?(tx%N(52Y{EvP%>5N4wC#?3<iGW6{r_+TF~#KOWt9kHei z+Vi9Qf-J{s)YS-b?;%0Gz9!A@b~IJ`6y?(7)2c4ow0oElotkMzmzRp@=4uPH*OHzl zi|P4JF}>U+q1U^`^k$EQ-tLpoJEr}a$G3YW!uPN7+bdl2B1KG3w_DM}tyXk<oh4mc zW)4}1=-^mm*ohuZZQY!@nk#(@GHUqJ!NNElJnaBQ0~a&42iDJm;`)v21zQL9I;dx) zt=K#@&`|YdFG<5su^qH2CDNFVPZiOnrB-xzqcuI=W<$?**rLt0^m>mSz1a)eXAi=0 zza72JCY<Md#&^Q+d=0LD4SKcP7P7OYC&{+-V2cf9#EB_=js@)<g=a2%>eEQKrk~mx zDSmVo>0g9j*aO~T;EP?^H=;d7CIiMD<!Yn+DUO!LN5hPi{~qkv<kP0!hIDwc1)X1H zO}EzB(ZfUsdY0lyFLpW6%iW+oPV{Ooh>r!Otoyi}7og{<PV_j*k?tng)8%E>bYi9z z?Tj>`X{}pQ2NOl|Fx9*TKXd@P83#S^;{2m1Y=P|^ZEu2@Gs;z@d%CTW(x<Ur%|9g# zGzAY5%2@44_cpuG<78KQn&JvR-RSwQY{GfY=j`vk|M(1LKiT0*_Y+;{)_Ny8x5$om zk1(g0Fm38AQvT#?r1sESY;_1Y#lj!haL!a18SuWdkR`{relDik>FtaZXr{jw?ToUZ z^m%r4W4#;Q-{wJ&wtLd!ou2e0#VcQWu)~7}hczc>v-+f?R*g(GYm$#df%*rk(c1B* z`QDpTHtKo2!;2m!d(iC!ce=2|k@k-h)2c28*t1gglb=E3r(#RXec*Wxa5Dma-#d@b zc}-2U|NqMS4!9_eFJMdTv3G={_s-GF9Y-(H%TW$Eszg*o6h&0*-57g~8hZf?_FkhV zMorNa6BDB`CMN%Aj3$c5z3;t+J+JJ+fhNE2_kH{Oy_?(JnOA0JXJ=<#$&V0vozL+! zl9TM`W(32{b<uElZzBA9RE&HeoJeUBa%0Rfwt%L8V{9M#Ok{v!#`Nme0Yt6?U}ljE z+}a(l9WT;-cuWlU4<x~@EwS*?!Z4^V_Qg4rsXW2Q{sGE=7GVKC5B3EG1<lr9!Fqce z%SMKX{Ps&dj9$)3u!l3#g5k>#;!t)mJUE<+@~6YE$I`J6q%{hIeGL>cva;%$cI?m= zVsTD!<%4Jq8bte-!)fqSO)7l5EfMP=5;hI-#8_EI5aZ|iJ@S77>tH;#;UJ`^^Lvr{ zJ&qq{LH_<rB<`lqD#C5#M=Q{8;QR6L<DN9Qe^3HHAI{JT<_`C4vFz$~G@wss7?<S) zcMqnk(nfyn?MsJmwj{%a*%7cJ!xeQZjpUL3USFd8dvGj>aBy(wg7|bgu<d(bIZ3j+ z<xe9-7V?_WBDlID9&T4j;O_n``00S|(6g&{UyR61i|U5__J(=!;7(13f|q;yGvUsj z47j;L45y}q!JI_&tL17W3keX?csL*Xf(g=V(w}O>cyAZs=dnlX%7ZOKeBknXaq!Jn z3H-2E3P0{6$kqvN?aFMCe7e?4mrm_4PDfG$FH*RJe0_&BKV2<`BNZX|on<ah^tAaE zWv4k}N<+-ZM*9Hf>y0op)y?$LqzF6t>FH5$b7KbL&4%06x$yn&9GzixdEmb)Kh;zB zF74q~l~lpg?dlx(W?L3~yf_ioW_w{D;K@V%{jOmhtibOCYieI@6+q8DJ}b6^eOyoE zxEtY|)*r5|OoMN>=fJnS@>&FXeco)$W3IkYEat25c56p2-1s01j#m!G*kRUkvAfkD z*rtaN(s3@Q)i#O7{NR9qgmk{))0r`jaAsy4+}M}{Uv0~SueY}hF0Ph9ySLi>tNp-u zV0R7vzTBDzA1_IT5Ayv`FU$ZUgx;T`{Bv*~r>Cv`@qYgpFUMU{zM*{g$RN0~JOgfQ z%7>eqUk|Eh#AA$##^3#1?W*gwem%Qz@K^w!twTNf$uUq)eZbZ1PkayVz~{hO%QHap z9V^UtzarQgPR~q)>+k2n=Nk$dg_WZtAU)U)BE8I@BEuIhEX(4|zrH-`U+V)VdObO5 zezqYWE-lW0wOKx>`=>7t2@st?8B?O8qiJ5Oa^UqYA^v`e5=Z^I6%sGFyd(>*ug%vA zHM7KEHmE13Owky(g{$np)d$9;cyZFZ{(e4uvML7-jE#hB90#L(_+MlDPp8<?D#GIl z_Wj<`UJmOsU3l`nqc9f6@?5yGDj%Uh12&D1!&n`Szq<|kb=N4@t@E3o3%u2~jRqYR zo>%6>shKHI9%wC3cC&bd@^7JjuD(Wq^Syx>SNTS%zlHqR<RrMXG!HIwz{SOR7<;@u zXS-uHs$8F25UhfudzUvSKTc-BLccdGDhgAf!Nv2r1(~o|>`s2A<v70AU|W0PyH3UT zRD?)mh`O{d=Evgq-7E=QSeVNR0((Oh8P#Q0J}3T^@eJ(sdhfzEIELC7_JyJ-ceD@6 zQo*fENB#e~1v#*@D1>Y@<%50QuAuy3I2Y=Sys}5@NWQH<>W0DwsQ^yR&Vti(q#AH? zmbA%!j|dg@!|U5!1xGgeQC7a+od4~xpKmEkP{GH=Bj>f*Qm845gF+9Zx;Rg}@9-H& zZde;&<fnO0ysIVY$ij}o5I8<91CCG6)POMwKF#94LM%|hadc`X^zPQVSvaVU$dBi` z;usZNT>Le5?O;VRjPf;sMEs_~_h25r1A8#S;}1OxiEfq?vs`#}yNbf$@WeDYJV_HA zjC6}%Ph(?(mo+Dj>T$_ni2Z`((iL(7oj7rE@u=<E!STs3UStj_u4ezk_AjCFo|PZ# zqGOV)`LY5xLs`}ENH|cQ!U^rwVj6St-@9ukST#gD4i<Msf-l$_^o0(M;G}jRf_6V_ z8A|761Tp10wtou<dUWXsVs9I$8Jnz<Pq_^J-(Q{#(?V<^op1aMWiQ8hFvZnj4r>1t zzR8vm-X?WbBV%CSSg{6Fk4b8@y=Xj+b+^<g$AwG%+Pa}pAoj5ZOTFG;(!VE|5A209 z*}}Gx1QmS#w%W&Dnp-Txm~ra373XEiFfYmp(w%v=*#0Ax+n=6)j4gYpOkfUG#c{A_ zv{(ZsCJ434uh+9HEYFS9D8q%PrPuNTHDiWh<Eik}3H!qijG4+sV|Qs1EJ|=k+g*J* zt`Dj_|I`UEzUH1XKXZ(K7z?{cC2PQ7mwLa_j)whVV!Qy1`t|_hem!Acday=buJW&Y zO=zRN?Un1n-E<HqKh-6PD8C2Uz{v3%S7rQX<ag#RAK_yr+kt(tsw7DRmgR(lzl{;> z<haL`|4m;Dbu?9JYh{_0{}1T#wg&IS%dX-Cm>bOpiHqS2?Ej&(cS~}!M~buYgdrZL zwcCb-W87V|IekqzW8JL4dQcx2)T=AFnd-sF2+!BTxp8QWPV&<;z{UH{;qfpn+yT;E zP5#9BuLq5Jtn8GgIvY!K+>Bms&JAVa4p)y7V;sWf1C0}%&<8J~)BqZ*SLQ{v2ruzs zHlXRa!Sp@A#rMwPaWEm!2I%`1$36?>Pi22B#m!ih>0&6~m=lcUlW`15Z8lWIX&)om z`smiF15~#FH}Nw)rRnvwzTLWL@Vy($?i?NqqlH%TBsYsI_`V;2{HPo$P6Lckepo9J zVeCH%>?@Zx8@hDV?Yn3;+Sar9J<NGbf9Z<#(xXc!(CgI==4C}H?z8#WwAb6O;s&7r z8hy;y+E}CPUW{9@qbL@J`dZZCJZHP|+*i30aGmJk>=;+{(VfY}U#3`$y29ci2^zd` z@kiI@<;0-vvK0DYTWQOaA#&xUT@vH3wG7QWw~W^0y=Ht4Y|IOTEL_)$cel>fvi^hd z-walb5?af4m!`oX^x;Ucz;%T*k(*Y&lx1v(@wN9?4uvs^!A<6`NWr-{2M>L^bALyA zTbpp^-#;N2=Er-{*#F$$-(4U1;XF|OV5ystZ0kEQ3?A}1pesm%blc}CjtgXPrue%z zDgWE}OmNX(IxLN|?2ZXTH1Z#vS;9OIqXTT^Vi)6cjj#W<dMlI9d-k5#kMVDHa=|#z z6-J9AIC;W~R$RB@=_&9D9jz4CmGh|oKaRHiTs%}w9u8TdzCiPCDr0Y=&zbMooKhx^ zVYa(TU80-WP@3yveyxWDeX^GY*~uur0mWe_pT@etF^rAG@`A`UWTQPR%ERLFbI?tG zHovx%rM0bcgaS94_w=HPOia;b=_1H<HmnWtcIc;7@P-=_2mLU51~y~NFNy<Calmzj zL4CEqpN$6gRl(z7Qy>3}<)15k8~yk<M*9@{)TeSz=0=?P$nQFh-zEOGGK`^p0Q0K6 z^YNVXz;A?06=5zi^6_?I)l4SF0mV6J3PL@#ukVP1{S@U-ubjad>lm3)={K{AG8JXC z(e8n9t#;2X*UX1L`A;vJ04uUW$R55f(Z$%FQ&^6R7<beS{qo2^D2!#|(Nk<{iUZyh zjKdhd>N3zdeaG*bi?M_oa8wpZIP)o&wKnD{^0Vc*(p42BIP+axJC})3GE872OLOL} zN8I>$>V9N84XPd!?D&Fwx>Edeih<k|Y??k!A(vj?-e89@DecXTVeO<+m9qY>j*5K9 zk;ebG@Ev(<#axv#P0?1lkFh$>ubd8xB|-Gg|0kZ$(^&6sswUFxc_y@fz6QVR$<HPE zvM1l}jlmW4^~=h0cKsr)d4s)N75UiwY}y_B^P%N)w3cm*KHZ}jmDFA}6AMr;%&HdG zyr(oJtG4?Y&IVHpye(>XjmcE_p`v&<jRB4GgZlMtG!K;z_w$7I?cP$U2TNl^xVC3w zlV!EiNB>47KgAXsAMPr{`Rw-@j{SAk`{1aD)|t)*2a84aFAkv}9rBY!ew4^Bo;IMk zp6h2<YQ3*qZr-?8aT?8ycsi9)F0cNd{6SI7`q_y>xzyR{uOwT2GY*-Wbt%cV@7ozJ zyj$ZV-CmM^F!JwCF|Wwq6c-drQC~pIJ@xB@2J~avzf;E!7@KgH&gInc&^Z%xVAB#< znHz<EZH#0o4ub-kC1@j=GaULGXYq~xoR#b^C*P+;i+tdcKepEaiqX`yOBeXCdh=`G zIn4O|BEMc+My8_PlNtG7Eo?-b7Trp9))!{+jbC8Q8`)Wm<HW=_pg2bu=c1)>Y5y+x z3VqPEv^?v>j>i6VMG5HF$owVxCS1}Y0d**pW<QXh#pgX78}3$nbZ!|_2NdV!9>w|i zkD=aQ<6*eGej&V<6(*<oy~LSUu7en_l|{lg9EjuU^$`IMFZN7&hZzqk<_i<w0R4iK zZ}5K=K1ctB<bxXH4V+yz4ednyUgBKspEM`E|IFXC)X1nK&XITIdt25n%^u9m55B|k zfMR@*k45s6{-%Na#gorR^8ZNh`R!%dFe=#j1<q}MPPNl_c&$clVPSkX7NV}u|3-)$ zUyxrpdJZZ6Q@y`Z@?(7KwSj!#lI%ZSyUfHH*f(tiOpNlbrT&idlQl`s0~GsMEfnLm zis8GV3-U1ueX0FDI>hb8)-h6Mu5|nSv3ftg=wFq5t&*Qz#)mKY@ofUgKP&m-C4cKQ zzI?uSGaN>LelwCpGW7i>M;(<KiG!ZyYcc+Y3sXDL*emrgc{vp4OUP^8j`0OJ7hTM} z+h|N6-@@cao@ArG!T2aeU*puq55K+1wDW_T*BF_}-}J%RW6-z!U?>fBeL+6&aDVz@ zhJ(Jx8)p5DqQf~?FNwpT%q(Z#{#*~U=Y>MMmz8loFPG*;!=}+$uxH8$IJR&S#>iQ~ z#6Krr@TZqehyAn0z_#*y#^2{`aiAPyXw=KhH@tzdQ72?L7}&j0M*jn3NnZM$u%AX} zIvKn#bv3$@>u&mUu7~*x@<B+x3*Qmi%NW0e=*uwA%c3sF!|Z?AZpL3?-5roP>J3Y= z(=+%F*!<5)NS%y&q&p9=$-p@(jvcP_PEAT`S~vSYXY~IAg6LG>dA&yh^si7!E(Xvq z1LK3>46c~aIaLBCjIRP=gVzMZ2ImKu5wkH)g(g#q1(;OfPo}cLYeQv&Zv<gOYS`fI zfla$Nc!OZm4tEe69v$xB4;~%v;13?GpAz+y^{1jpCo|bwwbnH~(~!T3R6+MneSX$2 zN{5DXMXDwb>%WAR*HEoK6!p|lU-i|ls894Eai$d>Sl@Rj#TH`-U^_4siS5D^tOTYY z({5)P+7UBiHYNilSi%s0*n|8;I3Y+8TDLO7-+%w0HF)y*Kzq<+TS)px1oWS-HQb|h z`ev=!{fnG4{wf;y?1B0N&Zt8ch5N`^Xy`u*^+~3L1O?5&^D=~7ydRI?i~H>TNY9Yu zLEdy)dw#<*FgCly2l5phBoa+Po8@Y>r#}}S8h9}>Sold?koOmffv&d_g51B33G)36 zeGq&^{s+kB9&Jj==6)XP%qL-L(x5Z(U&zs#?74|=tmkaxV^2h|=wf1k+pTPY)#G9Q z#<G%N<GS()Guf1Q3)$Qh>$;hVR&^7j&1GXkO=V~!U03L5`aDhG@N-O{&lf1mMZ|F& zaiRQy77cRzTYamIudi=Uq$5Uq)SWQ_USH(-Sv)NXHmRGFY+bh*{Qw**CtGPZxH!ul zuFS8ujla6k13sGL0T-sbGkyW~jdF&SS+??u!R9iw?R=Rou>UnYSab#b3{abtAPt_j zecYDzA;O1sWQsHvM+W#_&Gxf=QXXl6`=MwHGT9xjE=1e?^}cX-hX8&?8}(oI3eaYq zY})<d_k(EPUL$}9dj#;)E&<wX`@$E?z2VYqPdHTOhHKGwbw&OrGO^J4UT8@0C9I!a zLZQ%)o~f4dt6Yx84y+f?;J|>L=>oflr6Fdr4f#%JJMRNuuk%M6e6mLmM7!)Dct*D9 z=R?ru906_5pMMy_*rYS(=R(j<Js6&z35Gw8p#AyYK=@&+2(B;jgF|CIU~aN)U7^6V zHd^HM70Pf7`A=`qCunhhqB_85EIKq$crwSw{MkIQecdUvDZjBQ0Pa<Vz@uZ~@Z@v^ z+LK2j-;u~O3xn~$I@I6$8}mFnAAz>m5okjmfwG6e?JdFZ@w@(LC+dcN1k7ZKLjI2^ z!&%e^D@PuBDA%X1|LHl!diRg?_q{m8*Q9oJwu}7of&ln_JJLKH&DbkHIYV~PvB*pF zfyxp5iMG{$9FK<kdk4dp>q6mhxet^_Sj*D=?0&~F4gG@z7vp%*thH`>525@H5kj9+ zL;Or-+loBk>XI<HTOA9(9V0tqv}rztHq9JxdSwvW>GlT!+As&X4?ufFJ%|?>z~WL@ z_~{VZX>*kM1F!w>cq06AC;{!3qu}(E0GJ+cUzhG>^%(2$H1Z;D#`Dk`?b!^_W@Sg7 zmuc;mcRb<K6@%gK?j-p2NGkG=aGV=_o%(ClV<#OFY<t|BXahFJJzy;QoVa&T{0bN1 zeTeYjU<%yY9LLy0S47yzlKdQhM*fdsI|xw*tu}USzoPddzK_Ocd6_?5p6M$8WN9?o z)~3SGXv_NGuy!bnx6#Tw@vROd4}pzwPuM&);1%veXgj*U-e&gbgg~^Fw3I~)+`dH_ zHX;AyKSAq3wj-FwPV8xOZ+fg_-GzBk@ZHXI#y0jI+Q&8qq@RX}TLdIWhxTouW<i94 z#*ce5;fr-iu)9Qv>%S(lP?6vYj^P<J9%>VSo|7<v_wsyiQ`xaeVesW<3EEF)!w-9M z8if-}b=PrfOh(!dCfm?@dStUIg-@2Fer~FpJk^u2RYadjA@uF5F{aWpi{lkP&BOBd zr4o0zzB&zV?bOXa^NTG~?AL8uRQKxgkS&U`P3Tu!rEqde6cqZI$-)Fa*YP<h<Z1)D z7U}CYrx0~*PfU$LyS;k*O0u!k1-4I(X7<z7`Dw}d<uw_vXrjI3)m0g=O6m>i?q+}C zbFi69PmX+CrMa2kU!IPBdX{6~+nC>Mcz1YEqq;J>$U@J;qLCpgv_D^;2Pdb+LxGp6 zEZpDcW3+Q~P`2};|3N~bYX+YuJBap(*Vg2rjbnidTwPND2|_ETj<NGGcAI3kwPSLE zO1>U%cYLjWM7WPFkf`7!d%cgAN?}%vlRVzb{w_Yp`O1BWzKvo$9TyY}EMK0Tmkw7} zpnV?Nw<$w^v;`&H>UBuZ+^SK76?yH9>-Qej^XYO<_>BhiP~cLg|MBuX*fKN_Bz)t4 z@SV0IDk@50XGQO}G<WlB?<Tsz`FFG7;-Xv?5c}J4^3L*PKB%`Me-g&?V6W?v63<iz zgZgxZGO>>Wk2()@eq>?-;Ch`bL?k$jJim?jnS;I?a4-0;twVy~%v>p)nU}4AQ**ML zd@jjeg)K8BBcM@Pk)T38;yupCT2Yq8p)EZzJsrmQTguSh^9J%vesGwB#(mtgsNG#0 z3CE^MRG=)u8~J}l6ALKl(|_V2!P{C<=ExKYSn2oCNrpI#;iFEk(etV4sH<)dabEVf zk!NG1kK|jmisJM8;2QYL>XFfKpaN}_l)#>+y+4yqMqaS9N`AI%jJpNUeQmObI+-fU z)gZmXFg_$<Jq(X@Q(R|pDW~&dF`tL^1AK;E=$%FUCpuf$<+>TY*gYx^?UlqT&{0hn z1hX@BOZEesM`-3(FaIv;d4(abeY$prfoKEaWvLIt!rc@!ib7qP{z-CDTN04X(D*oC zMIL3G%fw!Q<NP1^4BN9~Xe!?*V5q0*^J=t9Qn#^TaAG|Y-vp%Rn;YPwkx#vxF6Y&w zwA)@$+pWwWtU+f@x&S1uCQtGC)kl7q{*&Tl%pc-m@^@8nyo!y?)?x9`0p|tNl0~ql zAPR~x?%V6y>nN9Bl{Z*XFKqoNr@od3D)g$+_GCq>A7r?jKf-ykA}&pgv*o}X)aTkh zG#c%+&_<^jFdJhSCVALErk^7e1-rq{W|Sp5WPhs6v+{pqw1raTB@q_JdqAqY)sM>K zC#{2Jp$_)8!og^xB1TBj3A`<M^?jE5Zo{+sR+~03LmZ@2d7=~SV5XISUZ3u&ct$3} z%t#kV_O!m#uvUcPGDmCFe|WUHAOiM`%|OU(5(+~+7~Zk82K^5B%(FNu5(6N`#}P7w zE>M{qq`1!B-%^swIYv=^6d(;YACsc}Mn#Z)U4om{>V~z)2KHOE%I5PfFG~{w>BR4! znBOGy?yB8Jfu23W5$t5C)IRlc#(O(z;C3+9)2IXDf1es3WPdWm)9j_#!-jMkm}i$2 zAl=DeSb32Bi-VKj;nek4w-?~5clMgez&;EP_FO#;aI{pRu><1}62Hp%Oi`~{o#wV- zainvLwg#`}4p@dcQk{8vXlM1bW_&Kjs2k11siRnR+JL?@u%HIeIKFezP}n#1l@6VH zKGGvq$2&AS0J@;Q8Jl<INU2I5(szANEX1+L^sIW{VFbV*sjJ~P8-_%qes~4y7*A{z zdUxZt)$p(}W6EuwP{i4<i9eEE8-BXa>)%J?KGo?+fz^vt7t<t`U-gvq!^Q;IK0Sr{ z_@pP>7>M|Gin=121oW;u{O$y%+}xrJt^9ZD&|WKU>PH(U4p+HP@lLmm6w}=EG0t@q z^JaDa{ry|LCFS$(Zyu4v=zU*WzW}tsIBAkbpY7GHt0KRV9=A<9^{;uwxr%)1_%kB| zHSUqV{ip!@7ZPWqB6XhC&(Y2xVT8cyuXCuw^zoLZs5`Ta6L!p<P+#X*Up;Uv>fgI3 z?3y=8k+&_!dx_e|#sq!FX~D^Lopgpb4NoF{>3i658nqE&Wx=uZ=BoTC`6t^}!1bzi zoNyK6T4R3jb#~yq-={}+mG=YjE_8L`%&UzC=|fT77x`K~O>;09%<|V%n&~*mBFD}6 z@$L%r6|{FF>b7p<g!b*)!TuHVIqy-KAt~{SXN3N1!^3s`i~U=H;<;8vc|4c88186_ zXZ8E(j(Q<OyiK2+T2u*N9;sq<b4fo}8HzGeRL+&}(f?rIdfP35JHOF<>g6aV@#m;> zy(BA4hGXLANw^lS&Yv#l7_V+LJ~vM;zCRysVXXPv=Z`iE>@3Z}%f+c#Wk_$A^rtr# ziviz9zn~shleR&P$$~m7bB776pB!H}0d8M72BZ^7x?BGSkd7VcVK2*$l%c-N&lxTQ ztsCP_*L&%X`jR{^vp=gQ6vFo(9%pp!7`@KVuGH&yzGh1Lk#|4&kkO-`7Vq;cn{RkM zm9N+6TC=Xav-wCr4D00gIpTolA8lF+_diFS%m%$P(miVtH0WMZzub*>cf$oXPo&NU zn+odpwOP_{EX}d((^cwXFh9@J?9Ua2@h`vFzm1WhUT^MO_~XahO#{aNX5zb}ULEPn zo>)8?#)i2(!M^@2=^ec>W*b42;%uOY?}+UM-eyl`CJO)FKf4U$Rae1px4vZfe{}Z; z6}?D0XJgZoe)A>NjayfoE*}+S|0u`R<QLR?lpr~k`EVoT-`Fjwt<iuCM_xgmyXl9y zo~D151v@>SpBD1Z+Tp3Nt8zFTSy%}*DBI?-d9XAuRyH-x=dWSDR*!PrO&;R=Wks63 zf#ClZ{Vvj1O>;B|Mcbx=Y**u{dG5wr^E^z?<$0JK%5^tcj_?0c9FJ2|9eK8ItOEZZ zK!l1%^?__yH8IpXG9)FUI}K_^XBaIoM*mBpHdgscEs4>05~`_>v1&}1BAQp~O{}_; zddjMoHI*vDExl4ln@srG>y4B@L)q{?lPb}_L)TgLD>hZ)pHagye5H=X%B!rFMQU`U zABX4}0!)P>Vno9fG^CWRUpRwQULB;TWrX05(3<&&f8OlD#B{**)_&}I<(oyXijBUF zgV9HMP*A`O)Xg~<7AU+rSmbjvBEauPNTB~Gs5^5MuP?&&#{}X@wRFqRa6hFR#wRI8 zTA$_z+y6E$((3PN@z%BT#5OONW!cFVNo-}alWl4z$637?6>j}h66A6ZeF$I2{jizH z3$NvrTeTt`k0_DXwc-%#XG=2dWydGFqK=Fg+}Y-XaSr_8;eG+ee<1xCKe)XKV?QkP zggv8N(8j~2Hb2nr59H%2@=@H}_QAS-D>PU%Auqu8(YxsmvWs&tCPfv+R|rPk5Y%@$ zABu4ZLgB@wFpS9%hB_sos3Q}KF&IKnZzKrgIfzi-!V@OO*wl(euB0=vl60JOtc%v@ ze|PDyAe(1<#(2taZw-fshtQut>4Kb#!59Gqv7A8n2_Bz{L0|8K;l`Q}Seof9lZqT3 zA`iQ`)>qVd!aba_;Q`kFoSZ6xJ5{mhuRRI%I>hL&K3M?;apusoTYKo)wLN}gwg)@Y z9<XMDr{ew}CowOU`SnN=e6uMEHV^ZZX9;X+ZF~v4Hm**W&QT}OFJEZ$*Wrm6!(x{h zeU+2Ha)}BEoCk8QAJF;$`OWRuvlEO=v4dN?l9_TpA3~jl&55uw+e4O&F%OW394^|# zSDLT=SDT9b<lk&X-Gmw`>L+AtfUdrI+oJD!JJa4w`5*UXp^xcAm=fdsGEC@m7282$ z4jbX`n_d=T_u|^BRQRqc2O(Dju5QRcpZMC>l~FFmcP0I&Z(|3uz6_pQJG0@`^k~TS zvwnhoVZ3@BNW83W?JEn#{q<b<a%;X;D3f?H>rCpjw4IaBZ5H2W>$72As=F*w;BifP ztxV|S)qA+e_MeZIX2NId^A)hTI0XIscY?k>Izx=Fh2pw4KeAjrbm`bmQSQ@q`EYbH zt~GjDKgN9~ceV~<J?%^0OY@d}gnO|cuc(JHVsB=ji^WNGX^(rrbU!W7UZtMdJjyAp z2em_AeM6%73Y=8-!$ndU=5O;Hb+C$A`k5YP=XQ;Zgmd$=6~N^?kk-E`&%FF#jWsG| z+FjA#>eyso+;e?}kHvi!%g;&lkVX2ruVd+FyPJNuZ%iB<os!N#WvW2q8KbppPs>4y zJhr^PD)qzCC))cbrYiEWIF-|tnF5IQc0R?@&-F09x2H4#YR2InAA%j?X7N!<^*AQR zTXCPwH!jv2tk4Hw=ML={(C^(9wvS4HO(SApV9&RK>aZvJ(8>vLR4KbII{=cs>^^7d z7kHT5t1eAc?1^<pzq?)0Hxtn%pNraj<Z0WBBbv(m)4J^JG~A<T@Dun!UMQq{T7ALN z&v!SuwQEE?RF@<(FgrC+@t?g$X=$VvjEVAw^|+R-d|my&o5>&*`ov3^qnV=2s>~or z^|U#`(#Jj4D?5wgV0URMCv3)bzAm^nOJgiE&f*wUnJD7SOE@Mci8T5~gtLVr|B@6T zBzW4*XX)p;@>Xpe5(PCCxtt)f*W8ODUr^%`0+=?YcIx$ZXV^I=OHp3gr&?Rw``TKX zp}03K)>D?iHxsb*aebRVC(-X8@?XLQ-Oxs#>W~Gh14*C<bnC3z&UDU}A14l1)Il%g zmAy`TABEl)j5PvFpVAS&=C@AHAIJERAwM$8U}vnapiMl`Iyv2^l+Ib8dQdL6eq26t zZ~o9U#q~Yqxq#o9XR(aRfo-s2Td72TVf8GGk)R4CsnH4=Bzsv#Je)(HEbY)99g!%Y zGwze9mo*tQK;_!Bc;Dxl&ic+O#PI~%pj)xP>JF{xeY|P03hYE*C`6}Y`}RP7Lg@a& z(S<5wU>j`Xg{4DO%2B@4YvwAh9iBA`^4yFxWM_HF<MS%k4o!GYwuI_H_^;xcHG6%> z{3+0-QzvGeq<y35#rWRhD92vAioQO|L;1g<oF*(it`yth;QpDT<m59z8HQ)3sGQTi z8Kp%`y{w%%QRAL+Sz1F`m>K?84&Ok^MN|12^4GDz-RSDcrPJiJrq>u$mK4Fvu_cY> zAv@>w#p(ZG-Rf*-k34kG<@3(&onG?%r)!tsr%yj>5zxBof{gJ0<?;=tD9fnJf8?PJ zmRmk6CFsGYXixjww_oWDzkK-_oLn}eu0&+}UABwCYuTAof5~^{9epo1=C||f-jmb% z>XQfeHQ>*m@4|OykHCQi6JCywbia%B{VtZ(x+kVf9Vq8PT>995Du%f6E{+Rxxiu#v z;{MuE(%)AMPkT5$IpAK2(E4V9EALR2v%VPfHcPKunU1dikw!ZN9zs6^oSwDp0GSZi z7I0+&#}_%qVW(vp9GuCnuEQOKGxaufWXDFfak>EIWue0z#L<Ay5OI?|UnS9EXd-P| zr|5xTgwWh|3eq<X4-D{#@^c+OSl~Vm<2Cr;w*{eV^dKEcv5(!Z5rJ0E7D;Vu4_3O= z?HTV}H&0?yTPU=68tcbjukBkg(#yp;&&Tq&({nuJ6p!%br4V>|xdHG$*@9G;^XnvD z*7t)2J}%0P2wdzsj0m*+<A+^n=Wsd+9-m2q&C|TWpWh!MeDq*azCB!cKbX09V|@f< z`&vCv)`v{@usVExQM6n+o|3QQKxPa?I!sD2!@TSVz|~FY*LYHJU7WYmcH#m1Nauxl z{?EVNJq*6B9tP_tMZ>jC=<6)iL!~_7p}G6Yagi7&rwH}E-2SHZ1N4I$Rx>k8esjk- zNDZm?tvuM*7A~(F$@tY~>G$g18AhfGf$|Z&KRW(pl%I!drn}kdvn$5I{`X25KSqQ4 z_QY@IT)4JnI!rB0z}Rk<;O%G*JLe3C1tsaQb;eNUUd^mw<b%Ef=V;r`ubu&$rk22} z@k8MZ?!#YNKNtOZ%!Q9O%u~Q>yhrb71KjKX@cr3v5d8tBxS3DD=Q4Tk^igtlU;4<B zsbH!<5PdK8hHW#-pt2whs^*NxGV_4;xXG{7@#QmM?dY7BVrL^Kde%0KFZ!GI?+8{; zsrTJwG-x2KoLq+ArENig`>=Fx>4Z{<4-zu}=NE|o!m@3s4MvB%fA;l>8fM?^CZ=YF zJeXEG0!j;{OdI5<CMovhJ~^-xuGehE_-wX^s4N|b$8hbqcOH|U1A+rvK48*A+crXY zpa||>|A;xKd*l~jW>(CvSVp0bN;q&_%*Xxk$B*vbQH-IF@847Wr?K_7+h4<~F@?Y5 z*e#?o>W9Q>kj*qn_*XYhAC^73e;4X%Wl;B`7JkP)lur&+)s{#3TtK@0)ypZL<NdY> z0({3z8x!t&3VlW$&T%m)!)va}`Pl!@4XZ?VI#h|yw5<|NZe0(pT2+a-fW1$7smx<6 G`+orYGy**U literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxMDI/project1.lpi b/components/rx/version/2.1/Demos/RxMDI/project1.lpi new file mode 100644 index 000000000..25e9b31ab --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/project1.lpi @@ -0,0 +1,117 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <General> + <SessionStorage Value="InProjectDir"/> + <MainUnit Value="0"/> + <AutoCreateForms Value="False"/> + <Title Value="project1"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + </General> + <i18n> + <EnableI18N LFM="False"/> + </i18n> + <VersionInfo> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + </local> + </RunParams> + <RequiredPackages Count="2"> + <Item1> + <PackageName Value="rxnew"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + </RequiredPackages> + <Units Count="5"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + </Unit1> + <Unit2> + <Filename Value="unit2.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form2"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit2"/> + </Unit2> + <Unit3> + <Filename Value="unit3.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form3"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit3"/> + </Unit3> + <Unit4> + <Filename Value="unit4.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form4"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit4"/> + </Unit4> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <Target> + <Filename Value="project1"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/RxMDI/project1.lpr b/components/rx/version/2.1/Demos/RxMDI/project1.lpr new file mode 100644 index 000000000..fd216e9ac --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/project1.lpr @@ -0,0 +1,20 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, Unit1, rxnew, Unit2, Unit3, Unit4; + +{$R *.res} + +begin + RequireDerivedFormResource := True; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/RxMDI/project1.lps b/components/rx/version/2.1/Demos/RxMDI/project1.lps new file mode 100644 index 000000000..61753a883 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/project1.lps @@ -0,0 +1,223 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectSession> + <Version Value="9"/> + <BuildModes Active="Default"/> + <Units Count="6"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + <UsageCount Value="22"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + <EditorIndex Value="0"/> + <WindowIndex Value="0"/> + <TopLine Value="56"/> + <CursorPos X="34" Y="67"/> + <UsageCount Value="22"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit1> + <Unit2> + <Filename Value="unit2.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form2"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit2"/> + <EditorIndex Value="3"/> + <WindowIndex Value="0"/> + <TopLine Value="7"/> + <CursorPos X="6" Y="11"/> + <UsageCount Value="22"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit2> + <Unit3> + <Filename Value="unit3.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form3"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit3"/> + <EditorIndex Value="2"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="19"/> + <UsageCount Value="22"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit3> + <Unit4> + <Filename Value="unit4.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form4"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit4"/> + <EditorIndex Value="4"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="32" Y="8"/> + <UsageCount Value="22"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit4> + <Unit5> + <Filename Value="../../rxmdi.pas"/> + <UnitName Value="RxMDI"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="1"/> + <WindowIndex Value="0"/> + <TopLine Value="295"/> + <CursorPos X="10" Y="303"/> + <UsageCount Value="11"/> + <Loaded Value="True"/> + </Unit5> + </Units> + <General> + <ActiveWindowIndexAtStart Value="0"/> + </General> + <JumpHistory Count="30" HistoryIndex="29"> + <Position1> + <Filename Value="unit4.pas"/> + <Caret Line="22" Column="21" TopLine="4"/> + </Position1> + <Position2> + <Filename Value="unit1.pas"/> + <Caret Line="73" Column="26" TopLine="43"/> + </Position2> + <Position3> + <Filename Value="unit1.pas"/> + <Caret Line="74" Column="26" TopLine="44"/> + </Position3> + <Position4> + <Filename Value="unit4.pas"/> + <Caret Line="41" Column="26" TopLine="12"/> + </Position4> + <Position5> + <Filename Value="unit4.pas"/> + <Caret Line="43" Column="26" TopLine="13"/> + </Position5> + <Position6> + <Filename Value="unit4.pas"/> + <Caret Line="44" Column="26" TopLine="13"/> + </Position6> + <Position7> + <Filename Value="unit2.pas"/> + <Caret Line="10" Column="6" TopLine="7"/> + </Position7> + <Position8> + <Filename Value="unit2.pas"/> + <Caret Line="11" Column="6" TopLine="7"/> + </Position8> + <Position9> + <Filename Value="unit3.pas"/> + <Caret Line="38" Column="14" TopLine="9"/> + </Position9> + <Position10> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="52" Column="1" TopLine="30"/> + </Position10> + <Position11> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="612" Column="5" TopLine="599"/> + </Position11> + <Position12> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="101" Column="14" TopLine="80"/> + </Position12> + <Position13> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="712" Column="3" TopLine="594"/> + </Position13> + <Position14> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="608" Column="1" TopLine="594"/> + </Position14> + <Position15> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="609" Column="1" TopLine="594"/> + </Position15> + <Position16> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="610" Column="1" TopLine="594"/> + </Position16> + <Position17> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="611" Column="1" TopLine="594"/> + </Position17> + <Position18> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="613" Column="1" TopLine="594"/> + </Position18> + <Position19> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="608" Column="1" TopLine="594"/> + </Position19> + <Position20> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="609" Column="1" TopLine="594"/> + </Position20> + <Position21> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="610" Column="1" TopLine="594"/> + </Position21> + <Position22> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="611" Column="1" TopLine="594"/> + </Position22> + <Position23> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="613" Column="1" TopLine="594"/> + </Position23> + <Position24> + <Filename Value="unit4.pas"/> + <Caret Line="45" Column="26" TopLine="13"/> + </Position24> + <Position25> + <Filename Value="unit4.pas"/> + <Caret Line="46" Column="26" TopLine="13"/> + </Position25> + <Position26> + <Filename Value="unit4.pas"/> + <Caret Line="45" Column="26" TopLine="13"/> + </Position26> + <Position27> + <Filename Value="unit1.pas"/> + <Caret Line="75" Column="26" TopLine="45"/> + </Position27> + <Position28> + <Filename Value="unit1.pas"/> + <Caret Line="82" Column="26" TopLine="47"/> + </Position28> + <Position29> + <Filename Value="unit1.pas"/> + <Caret Line="67" Column="34" TopLine="56"/> + </Position29> + <Position30> + <Filename Value="../../rxmdi.pas"/> + <Caret Line="739" Column="1" TopLine="705"/> + </Position30> + </JumpHistory> + </ProjectSession> + <Debugging> + <BreakPoints Count="1"> + <Item1> + <Kind Value="bpkSource"/> + <WatchScope Value="wpsLocal"/> + <WatchKind Value="wpkWrite"/> + <Source Value="../../rxmdi.pas"/> + <Line Value="711"/> + </Item1> + </BreakPoints> + </Debugging> + <EditorMacros Count="0"/> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/RxMDI/project1.res b/components/rx/version/2.1/Demos/RxMDI/project1.res new file mode 100644 index 0000000000000000000000000000000000000000..7c6cf3e4be6fa881cb2f2caa9bda693328155c28 GIT binary patch literal 138128 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 S)M$%T8;H+2FPFK8vi}DltTdMZ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxMDI/unit1.lfm b/components/rx/version/2.1/Demos/RxMDI/unit1.lfm new file mode 100644 index 000000000..6cf0270b4 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/unit1.lfm @@ -0,0 +1,135 @@ +object Form1: TForm1 + Left = 527 + Height = 423 + Top = 222 + Width = 581 + Caption = 'MainForm' + ClientHeight = 400 + ClientWidth = 581 + Menu = MainMenu1 + Position = poScreenCenter + LCLVersion = '1.1' + WindowState = wsMaximized + object ToolPanel1: TToolPanel + Left = 0 + Height = 31 + Top = 0 + Width = 581 + Items = <> + Options = [] + Align = alTop + BorderWidth = 4 + ClientHeight = 31 + ClientWidth = 581 + TabOrder = 0 + object RxMDICloseButton1: TRxMDICloseButton + AnchorSideTop.Control = ToolPanel1 + AnchorSideTop.Side = asrCenter + AnchorSideRight.Control = ToolPanel1 + AnchorSideRight.Side = asrBottom + Left = 553 + Height = 22 + Top = 4 + Width = 23 + Anchors = [akTop, akRight] + Glyph.Data = { + 1A020000424D1A0200000000000036000000280000000B0000000B0000000100 + 200000000000E401000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000FF0000 + 00FF00000000000000000000000000000000000000FF000000FF000000000000 + 00000000000000000000000000FF000000FF0000000000000000000000FF0000 + 00FF000000000000000000000000000000000000000000000000000000FF0000 + 00FF000000FF000000FF00000000000000000000000000000000000000000000 + 00000000000000000000000000FF000000FF0000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000000000000000000000000000000000000000000000000000FF0000 + 00FF0000000000000000000000FF000000FF0000000000000000000000000000 + 0000000000FF000000FF00000000000000000000000000000000000000FF0000 + 00FF000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000 + } + end + end + object RxMDITasks1: TRxMDITasks + Left = 0 + Height = 25 + Top = 356 + Width = 581 + Align = alBottom + end + object StatusBar1: TStatusBar + Left = 0 + Height = 19 + Top = 381 + Width = 581 + Panels = <> + end + object RxMDIPanel1: TRxMDIPanel + Left = 0 + Height = 325 + Top = 31 + Width = 581 + CloseButton = RxMDICloseButton1 + TaskPanel = RxMDITasks1 + Align = alClient + BevelOuter = bvLowered + end + object ActionList1: TActionList + left = 440 + top = 72 + object sysClose: TAction + Category = 'System' + Caption = 'Close' + OnExecute = sysCloseExecute + end + object Action1: TAction + Category = 'MDI forms' + Caption = 'Form # 1' + OnExecute = Action1Execute + end + object Action2: TAction + Category = 'MDI forms' + Caption = 'Form # 2' + OnExecute = Action2Execute + end + object Action3: TAction + Category = 'MDI forms' + Caption = 'New single MDI form' + OnExecute = Action3Execute + end + end + object MainMenu1: TMainMenu + left = 408 + top = 72 + object MenuItem1: TMenuItem + Caption = 'System' + object MenuItem2: TMenuItem + Action = sysClose + end + end + object MenuItem3: TMenuItem + Caption = 'MDI forms' + object MenuItem4: TMenuItem + Action = Action1 + end + object MenuItem5: TMenuItem + Action = Action2 + end + object MenuItem7: TMenuItem + Caption = '-' + end + object MenuItem6: TMenuItem + Action = Action3 + end + end + end + object Timer1: TTimer + Interval = 500 + OnTimer = Timer1Timer + left = 451 + top = 117 + end +end diff --git a/components/rx/version/2.1/Demos/RxMDI/unit1.pas b/components/rx/version/2.1/Demos/RxMDI/unit1.pas new file mode 100644 index 000000000..8e4f225b3 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/unit1.pas @@ -0,0 +1,90 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, rxtoolbar, RxMDI, Forms, Controls, Graphics, + Dialogs, ActnList, Menus, ComCtrls, ExtCtrls; + +type + + { TForm1 } + + TForm1 = class(TForm) + Action1: TAction; + Action2: TAction; + Action3: TAction; + MenuItem1: TMenuItem; + MenuItem2: TMenuItem; + MenuItem3: TMenuItem; + MenuItem4: TMenuItem; + MenuItem5: TMenuItem; + MenuItem6: TMenuItem; + MenuItem7: TMenuItem; + sysClose: TAction; + ActionList1: TActionList; + MainMenu1: TMainMenu; + RxMDICloseButton1: TRxMDICloseButton; + RxMDIPanel1: TRxMDIPanel; + RxMDITasks1: TRxMDITasks; + StatusBar1: TStatusBar; + Timer1: TTimer; + ToolPanel1: TToolPanel; + procedure Action1Execute(Sender: TObject); + procedure Action2Execute(Sender: TObject); + procedure Action3Execute(Sender: TObject); + procedure sysCloseExecute(Sender: TObject); + procedure Timer1Timer(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + Form1: TForm1; + +implementation + +uses Unit2, Unit3, Unit4; + +{$R *.lfm} + +{ TForm1 } + +procedure TForm1.sysCloseExecute(Sender: TObject); +begin + Close; +end; + +procedure TForm1.Timer1Timer(Sender: TObject); +begin + if Assigned(ActiveControl) then + StatusBar1.SimpleText:=ActiveControl.Caption + else + StatusBar1.SimpleText:='<NONE>' + ; +end; + +procedure TForm1.Action1Execute(Sender: TObject); +begin + RxMDIPanel1.ChildWindowsCreate(Form2, TForm2); +end; + +procedure TForm1.Action2Execute(Sender: TObject); +begin + RxMDIPanel1.ChildWindowsCreate(Form3, TForm3); +end; + +procedure TForm1.Action3Execute(Sender: TObject); +var + Form4: TForm4; +begin + Form4:=TForm4.Create(Application); + RxMDIPanel1.ChildWindowsAdd(Form4); +end; + +end. + diff --git a/components/rx/version/2.1/Demos/RxMDI/unit2.lfm b/components/rx/version/2.1/Demos/RxMDI/unit2.lfm new file mode 100644 index 000000000..1e7cf2907 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/unit2.lfm @@ -0,0 +1,83 @@ +object Form2: TForm2 + Left = 502 + Height = 414 + Top = 245 + Width = 478 + Caption = 'MDI form 1' + ClientHeight = 414 + ClientWidth = 478 + Icon.Data = { + 7E04000000000100010010100000010020006804000016000000280000001000 + 0000200000000100200000000000000400006400000064000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BE7A45FFBE7A + 45FFBE7A45FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000BE7A45FFBE7A45FF78553958BE7A45FFE3CD + BCFFBE7A45FF78553958BE7A45FFBE7A45FF0000000000000000000000000000 + 00000000000000000000BE7A45FFE3CDBCFFD2A786FFBE7A45FFC79064FFDAB8 + 9DFFC79064FFBE7A45FFD2A786FFE3CDBCFFBE7A45FF00000000000000000000 + 00000000000000000000BE7A45FFD2A786FFDAB89DFFDAB89DFFDAB89DFFDAB8 + 9DFFDAB89DFFDAB89DFFDAB89DFFD2A786FFBE7A45FF00000000000000000000 + 0000000000000000000078553958BE7A45FFE3CDBCFFCFA17CFFBD7F4CF8C386 + 56FFBA7A46F4D5AE8FFFDAB89DFFBE7A45FF7855395800000000000000000000 + 000000000000BE7A45FFBE7A45FFC79064FFDAB89DFFBD7F4CF8B78256CD7855 + 3959A56F43C0BA7A46F4DAB89DFFC79064FFBE7A45FFBE7A45FF000000000000 + 000000000000BE7A45FFE3CDBCFFDAB89DFFDAB89DFFC38656FF785539590000 + 000078553959C38656FFDAB89DFFDAB89DFFE3CDBCFFBE7A45FF000000000000 + 000000000000BE7A45FFBE7A45FFC79064FFDAB89DFFBA7A46F49C6B42AE7855 + 39598F633F97BA7C49EEDAB89DFFC79064FFBE7A45FFBE7A45FF000000000000 + 0000000000000000000078553958BE7A45FFDAB89DFFCFA17CFFBA7A46F4C386 + 56FFBA7A46F4D1A582FFDAB89DFFBE7A45FF7855395800000000000000000000 + 00000000000000000000BE7A45FFD2A786FFDAB89DFFDAB89DFFDAB89DFFDAB8 + 9DFFDAB89DFFDAB89DFFDAB89DFFD2A786FFBE7A45FF00000000000000000000 + 00000000000000000000BE7A45FFE3CDBCFFD2A786FFBE7A45FFC79064FFDAB8 + 9DFFC79064FFBE7A45FFD2A786FFE3CDBCFFBE7A45FF00000000000000000000 + 0000000000000000000078553958BE7A45FFBE7A45FF78553958BE7A45FFE3CD + BCFFBE7A45FF78553958BE7A45FFBE7A45FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BE7A45FFBE7A + 45FFBE7A45FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000 + } + OnClose = FormClose + LCLVersion = '1.1' + object Panel1: TPanel + Left = 0 + Height = 50 + Top = 0 + Width = 478 + Align = alTop + Caption = 'MDI form # 1' + TabOrder = 0 + end + object Edit1: TEdit + Left = 21 + Height = 25 + Top = 106 + Width = 80 + TabOrder = 1 + Text = 'Edit1' + end + object Edit2: TEdit + Left = 118 + Height = 25 + Top = 105 + Width = 80 + TabOrder = 2 + Text = 'Edit2' + end + object Edit3: TEdit + Left = 223 + Height = 25 + Top = 103 + Width = 80 + TabOrder = 3 + Text = 'Edit3' + end +end diff --git a/components/rx/version/2.1/Demos/RxMDI/unit2.pas b/components/rx/version/2.1/Demos/RxMDI/unit2.pas new file mode 100644 index 000000000..44b1c5ad5 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/unit2.pas @@ -0,0 +1,43 @@ +unit Unit2; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, + StdCtrls; + +type + + { TForm2 } + + TForm2 = class(TForm) + Edit1: TEdit; + Edit2: TEdit; + Edit3: TEdit; + Panel1: TPanel; + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); + private + { private declarations } + public + { public declarations } + end; + +var + Form2: TForm2 = nil; + +implementation + +{$R *.lfm} + +{ TForm2 } + +procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction); +begin + CloseAction:=caFree; + Form2:=nil; +end; + +end. + diff --git a/components/rx/version/2.1/Demos/RxMDI/unit3.lfm b/components/rx/version/2.1/Demos/RxMDI/unit3.lfm new file mode 100644 index 000000000..f46270b90 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/unit3.lfm @@ -0,0 +1,70 @@ +object Form3: TForm3 + Left = 604 + Height = 442 + Top = 239 + Width = 640 + Caption = 'MDI form # 2' + ClientHeight = 442 + ClientWidth = 640 + Icon.Data = { + 7E04000000000100010010100000010020006804000016000000280000001000 + 0000200000000100200000000000000400006400000064000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000E2C0AAFFE2C0AAFF000000000000 + 00000000000000000000E2C0AAFFE2C0AAFF0000000000000000000000000000 + 0000000000000000000000000000C8865BFFBE713FFFC58053FF000000000000 + 00000000000000000000CE946EFFBE703EFFC17746FF00000000000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 00000000000000000000D6A586FFC2794AFFCA8A61FF00000000000000000000 + 0000000000000000000000000000D39E7CFFC2794AFFCC9068FF000000000000 + 00000000000000000000C9885EFFC07443FFC27849FF00000000000000000000 + 0000000000000000000000000000C9885EFFC2794AFFC9885EFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000BD6E3BFFBD6E3BFFE2C0AAFF000000000000 + 0000000000000000000000000000D4A17FFFBD6F3CFFBE703DFF000000000000 + 00000000000000000000C68155FFBF7241FFCC8D66FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000 + } + OnClose = FormClose + LCLVersion = '1.1' + object Panel1: TPanel + Left = 0 + Height = 50 + Top = 0 + Width = 640 + Align = alTop + Caption = 'MDI form # 2' + TabOrder = 0 + end + object Memo1: TMemo + Left = 0 + Height = 392 + Top = 50 + Width = 640 + Align = alClient + Lines.Strings = ( + 'Memo1' + ) + TabOrder = 1 + end +end diff --git a/components/rx/version/2.1/Demos/RxMDI/unit3.pas b/components/rx/version/2.1/Demos/RxMDI/unit3.pas new file mode 100644 index 000000000..2214c5c02 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/unit3.pas @@ -0,0 +1,41 @@ +unit Unit3; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, + StdCtrls; + +type + + { TForm3 } + + TForm3 = class(TForm) + Memo1: TMemo; + Panel1: TPanel; + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); + private + { private declarations } + public + { public declarations } + end; + +var + Form3: TForm3 = nil; + +implementation + +{$R *.lfm} + +{ TForm3 } + +procedure TForm3.FormClose(Sender: TObject; var CloseAction: TCloseAction); +begin + CloseAction:=caFree; + Form3:=nil; +end; + +end. + diff --git a/components/rx/version/2.1/Demos/RxMDI/unit4.lfm b/components/rx/version/2.1/Demos/RxMDI/unit4.lfm new file mode 100644 index 000000000..5ccc0ac69 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/unit4.lfm @@ -0,0 +1,84 @@ +object Form4: TForm4 + Left = 477 + Height = 446 + Top = 196 + Width = 620 + Caption = 'Form4' + ClientHeight = 446 + ClientWidth = 620 + Icon.Data = { + 7E04000000000100010010100000010020006804000016000000280000001000 + 0000200000000100200000000000000400006400000064000000000000000000 + 0000874A2056874A20FF874A20FF874A20FF874A204400000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000874A20FFBEA592FFB89C86FFB89C86FF874A20FF874A2044000000000000 + 0000000000000000000000000000858A8881858A88D3858A8881000000000000 + 0000874A20FFCCBBADFFA7917DFFB5957AFFAE8B72FF874A20FF874A20440000 + 00000000000000000000858A884C858A88FF9EA1A0FF858A88FF000000000000 + 0000874A20FFCCBBADFFA48D78FFA28A74FFB4957AFFB3937CFF874A20FF0000 + 000000000000858A884C858A88FFD2D3D4FFC2C3C4FF858A88FF000000000000 + 0000874A2030874A20FFD4C8BDFFA48D78FFA48D78FFBEA592FF874A20FF0000 + 0000858A884C858A88FFE2E3E4FFC2C4C6FF858A88FF858A8881000000000000 + 000000000000874A2019874A20FFCCBBADFFCCBBADFFB3937CFF874A20FF858A + 8881858A88FFD3D3D4FFBDBEBFFF858A88FF858A884C00000002000000000000 + 00000000000000000000874A2019874A20FF874A20FF874A20FF85837DFFAAAD + ADFFC8C9CAFFBDBEBFFF858A88FF858A884C0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000B5B7B8FF858A + 88FFB7B8B9FF858A88FF858A884C000000020000000000000000000000000000 + 000000000000858A884C858A88FF858A88FF858A88FF858A88FFD0D1D2FFA3A4 + A4FF858A88FF858A888100000000000000000000000000000000000000000000 + 0000858A884C858A88FFF3F3F3FEEFF0F0FFEDEEEEFEEAECECFEB6B9BAFF858A + 88FF858A884C858A88FF858A884C000000000000000000000000000000000000 + 0000858A88FFF5F6F6FEA9ACABFF858A88FFF7F7F7FFE2E3E5FFAAADADFFECEE + EE8100000000858A884C858A88FF858A884C0000000000000000000000000000 + 0000858A884C858A88FF00000000858A884C858A88FFFAFAFAFF858A88FF0000 + 00000000000000000000858A884C858A88FF878C8AFF0000004C000000000000 + 000000000000000000000000000000000000858A88FFEEF0F0FF858A88FF0000 + 0000000000000000000000000000858A88FFF0F0F0FF858A88FF0000004C0000 + 0000000000000000000000000000858A88FFE9EBECFF858A88FF858A884C0000 + 00000000000000000000000000000000004C858A88FFEEEFEFFC858A88FF0000 + 0000000000000000000000000000858A884C858A88FF858A884C000000000000 + 0000000000000000000000000000000000000000004C858A88FF858A884C0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000 + } + OnClose = FormClose + OnCreate = FormCreate + LCLVersion = '1.1' + object Panel1: TPanel + Left = 0 + Height = 50 + Top = 0 + Width = 620 + Align = alTop + Caption = 'MDI form # ...' + TabOrder = 0 + end + object Edit1: TEdit + Left = 47 + Height = 25 + Top = 84 + Width = 80 + TabOrder = 1 + Text = 'Edit1' + end + object Edit2: TEdit + Left = 43 + Height = 25 + Top = 154 + Width = 80 + TabOrder = 2 + Text = 'Edit2' + end + object Edit3: TEdit + Left = 45 + Height = 25 + Top = 215 + Width = 80 + TabOrder = 3 + Text = 'Edit3' + end +end diff --git a/components/rx/version/2.1/Demos/RxMDI/unit4.pas b/components/rx/version/2.1/Demos/RxMDI/unit4.pas new file mode 100644 index 000000000..31d3c6017 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxMDI/unit4.pas @@ -0,0 +1,49 @@ +unit Unit4; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, + ExtCtrls, StdCtrls; + +type + + { TForm4 } + + TForm4 = class(TForm) + Edit1: TEdit; + Edit2: TEdit; + Edit3: TEdit; + Panel1: TPanel; + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); + procedure FormCreate(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + CntMM:integer = 0; +implementation + +{$R *.lfm} + +{ TForm4 } + +procedure TForm4.FormClose(Sender: TObject; var CloseAction: TCloseAction); +begin + CloseAction:=caFree; +end; + +procedure TForm4.FormCreate(Sender: TObject); +begin + Inc(CntMM); + Panel1.Caption:=Panel1.Caption + IntToStr(CntMM); + Caption:=Panel1.Caption; +end; + +end. + diff --git a/components/rx/version/2.1/Demos/RxViewsPanel/project1.ico b/components/rx/version/2.1/Demos/RxViewsPanel/project1.ico new file mode 100644 index 0000000000000000000000000000000000000000..0341321b5d952e1662a3d9444a73cf9f42a7db37 GIT binary patch literal 137040 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 G`+orYGy**U literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxViewsPanel/project1.lpi b/components/rx/version/2.1/Demos/RxViewsPanel/project1.lpi new file mode 100644 index 000000000..33339124f --- /dev/null +++ b/components/rx/version/2.1/Demos/RxViewsPanel/project1.lpi @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <General> + <MainUnit Value="0"/> + <Title Value="RxViewsPanel demo"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + <ActiveWindowIndexAtStart Value="0"/> + </General> + <i18n> + <EnableI18N LFM="False"/> + </i18n> + <VersionInfo> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + </local> + </RunParams> + <RequiredPackages Count="3"> + <Item1> + <PackageName Value="LazControls"/> + <MinVersion Valid="True"/> + </Item1> + <Item2> + <PackageName Value="rxnew"/> + <MinVersion Major="2" Minor="1" Release="2" Build="105" Valid="True"/> + </Item2> + <Item3> + <PackageName Value="LCL"/> + </Item3> + </RequiredPackages> + <Units Count="15"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + <EditorIndex Value="2"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="15"/> + <UsageCount Value="23"/> + <Loaded Value="True"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="0"/> + <WindowIndex Value="0"/> + <TopLine Value="16"/> + <CursorPos X="7" Y="34"/> + <UsageCount Value="23"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit1> + <Unit2> + <Filename Value="/usr/local/share/lazarus/components/rxnew/rxviewspanel.pas"/> + <UnitName Value="RxViewsPanel"/> + <EditorIndex Value="1"/> + <WindowIndex Value="0"/> + <TopLine Value="167"/> + <CursorPos X="36" Y="201"/> + <UsageCount Value="11"/> + <Bookmarks Count="2"> + <Item0 X="1" Y="295" ID="1"/> + <Item1 X="3" Y="330" ID="2"/> + </Bookmarks> + <Loaded Value="True"/> + </Unit2> + <Unit3> + <Filename Value="/usr/local/share/lazarus/components/rxnew/registerrx.pas"/> + <UnitName Value="registerrx"/> + <WindowIndex Value="0"/> + <TopLine Value="40"/> + <CursorPos X="30" Y="50"/> + <UsageCount Value="11"/> + </Unit3> + <Unit4> + <Filename Value="/usr/local/share/lazarus/components/rxnew/rxtoolbar.pas"/> + <UnitName Value="rxtoolbar"/> + <WindowIndex Value="0"/> + <TopLine Value="1113"/> + <CursorPos X="45" Y="1143"/> + <UsageCount Value="11"/> + </Unit4> + <Unit5> + <Filename Value="/usr/local/share/lazarus/components/rxnew/rxaboutdialog.pas"/> + <UnitName Value="RxAboutDialog"/> + <WindowIndex Value="0"/> + <TopLine Value="27"/> + <CursorPos X="3" Y="46"/> + <UsageCount Value="10"/> + </Unit5> + <Unit6> + <Filename Value="/usr/local/share/lazarus/lcl/extctrls.pp"/> + <UnitName Value="ExtCtrls"/> + <WindowIndex Value="0"/> + <TopLine Value="1147"/> + <CursorPos X="13" Y="1179"/> + <UsageCount Value="10"/> + </Unit6> + <Unit7> + <Filename Value="/usr/local/share/lazarus/lcl/buttons.pp"/> + <UnitName Value="Buttons"/> + <WindowIndex Value="0"/> + <TopLine Value="331"/> + <CursorPos X="17" Y="350"/> + <UsageCount Value="10"/> + </Unit7> + <Unit8> + <Filename Value="/usr/local/share/lazarus/lcl/stdctrls.pp"/> + <UnitName Value="StdCtrls"/> + <WindowIndex Value="0"/> + <TopLine Value="1420"/> + <CursorPos X="3" Y="1439"/> + <UsageCount Value="11"/> + </Unit8> + <Unit9> + <Filename Value="../../../install/fpcsrc/rtl/objpas/classes/classesh.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="411"/> + <CursorPos X="24" Y="435"/> + <UsageCount Value="10"/> + </Unit9> + <Unit10> + <Filename Value="../../../install/fpcsrc/rtl/objpas/classes/collect.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="18"/> + <CursorPos X="3" Y="21"/> + <UsageCount Value="10"/> + </Unit10> + <Unit11> + <Filename Value="/usr/local/share/lazarus/lcl/controls.pp"/> + <UnitName Value="Controls"/> + <WindowIndex Value="0"/> + <TopLine Value="1265"/> + <CursorPos X="15" Y="1280"/> + <UsageCount Value="10"/> + </Unit11> + <Unit12> + <Filename Value="/usr/local/share/lazarus/lcl/include/control.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="3131"/> + <CursorPos X="1" Y="3151"/> + <UsageCount Value="10"/> + </Unit12> + <Unit13> + <Filename Value="/usr/local/share/lazarus/components/rxnew/Demos/RxViewsPanel/unit1.pas"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + <WindowIndex Value="0"/> + <TopLine Value="32"/> + <CursorPos X="1" Y="58"/> + <UsageCount Value="10"/> + </Unit13> + <Unit14> + <Filename Value="/usr/local/share/lazarus/lcl/include/untabbednotebook.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="176"/> + <CursorPos X="17" Y="204"/> + <UsageCount Value="10"/> + </Unit14> + </Units> + <JumpHistory Count="30" HistoryIndex="29"> + <Position1> + <Filename Value="unit1.pas"/> + <Caret Line="18" Column="29" TopLine="1"/> + </Position1> + <Position2> + <Filename Value="/usr/local/share/lazarus/components/rxnew/rxviewspanel.pas"/> + <Caret Line="121" Column="98" TopLine="99"/> + </Position2> + <Position3> + <Filename Value="unit1.pas"/> + <Caret Line="18" Column="29" TopLine="1"/> + </Position3> + <Position4> + <Filename Value="unit1.pas"/> + <Caret Line="40" Column="3" TopLine="15"/> + </Position4> + <Position5> + <Filename Value="unit1.pas"/> + <Caret Line="41" Column="3" TopLine="15"/> + </Position5> + <Position6> + <Filename Value="unit1.pas"/> + <Caret Line="42" Column="3" TopLine="15"/> + </Position6> + <Position7> + <Filename Value="unit1.pas"/> + <Caret Line="43" Column="3" TopLine="15"/> + </Position7> + <Position8> + <Filename Value="unit1.pas"/> + <Caret Line="42" Column="3" TopLine="15"/> + </Position8> + <Position9> + <Filename Value="unit1.pas"/> + <Caret Line="36" Column="3" TopLine="7"/> + </Position9> + <Position10> + <Filename Value="unit1.pas"/> + <Caret Line="42" Column="41" TopLine="17"/> + </Position10> + <Position11> + <Filename Value="unit1.pas"/> + <Caret Line="43" Column="41" TopLine="17"/> + </Position11> + <Position12> + <Filename Value="unit1.pas"/> + <Caret Line="44" Column="41" TopLine="17"/> + </Position12> + <Position13> + <Filename Value="unit1.pas"/> + <Caret Line="45" Column="41" TopLine="17"/> + </Position13> + <Position14> + <Filename Value="unit1.pas"/> + <Caret Line="46" Column="41" TopLine="17"/> + </Position14> + <Position15> + <Filename Value="unit1.pas"/> + <Caret Line="47" Column="41" TopLine="18"/> + </Position15> + <Position16> + <Filename Value="unit1.pas"/> + <Caret Line="48" Column="41" TopLine="19"/> + </Position16> + <Position17> + <Filename Value="unit1.pas"/> + <Caret Line="49" Column="41" TopLine="20"/> + </Position17> + <Position18> + <Filename Value="unit1.pas"/> + <Caret Line="50" Column="41" TopLine="21"/> + </Position18> + <Position19> + <Filename Value="unit1.pas"/> + <Caret Line="51" Column="41" TopLine="22"/> + </Position19> + <Position20> + <Filename Value="unit1.pas"/> + <Caret Line="52" Column="41" TopLine="27"/> + </Position20> + <Position21> + <Filename Value="/usr/local/share/lazarus/components/rxnew/rxviewspanel.pas"/> + <Caret Line="156" Column="25" TopLine="151"/> + </Position21> + <Position22> + <Filename Value="unit1.pas"/> + <Caret Line="58" Column="29" TopLine="33"/> + </Position22> + <Position23> + <Filename Value="/usr/local/share/lazarus/components/rxnew/rxviewspanel.pas"/> + <Caret Line="201" Column="36" TopLine="194"/> + </Position23> + <Position24> + <Filename Value="unit1.pas"/> + <Caret Line="58" Column="29" TopLine="9"/> + </Position24> + <Position25> + <Filename Value="unit1.pas"/> + <Caret Line="53" Column="3" TopLine="50"/> + </Position25> + <Position26> + <Filename Value="unit1.pas"/> + <Caret Line="54" Column="3" TopLine="51"/> + </Position26> + <Position27> + <Filename Value="unit1.pas"/> + <Caret Line="55" Column="3" TopLine="13"/> + </Position27> + <Position28> + <Filename Value="unit1.pas"/> + <Caret Line="56" Column="3" TopLine="24"/> + </Position28> + <Position29> + <Filename Value="unit1.pas"/> + <Caret Line="57" Column="3" TopLine="25"/> + </Position29> + <Position30> + <Filename Value="unit1.pas"/> + <Caret Line="33" Column="7" TopLine="16"/> + </Position30> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <Target> + <Filename Value="project1"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerMessages> + <UseMsgFile Value="True"/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/RxViewsPanel/project1.lpr b/components/rx/version/2.1/Demos/RxViewsPanel/project1.lpr new file mode 100644 index 000000000..737eb0153 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxViewsPanel/project1.lpr @@ -0,0 +1,21 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, lazcontrols, Unit1 + { you can add units after this }; + +{$R *.res} + +begin + Application.Title:='RxViewsPanel demo'; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/RxViewsPanel/project1.res b/components/rx/version/2.1/Demos/RxViewsPanel/project1.res new file mode 100644 index 0000000000000000000000000000000000000000..7c6cf3e4be6fa881cb2f2caa9bda693328155c28 GIT binary patch literal 138128 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 S)M$%T8;H+2FPFK8vi}DltTdMZ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/RxViewsPanel/unit1.lfm b/components/rx/version/2.1/Demos/RxViewsPanel/unit1.lfm new file mode 100644 index 000000000..c922e92c6 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxViewsPanel/unit1.lfm @@ -0,0 +1,1605 @@ +object Form1: TForm1 + Left = 292 + Height = 667 + Top = 120 + Width = 935 + ActiveControl = ToolPanel1 + Caption = 'RxViewsPanel demo' + ClientHeight = 667 + ClientWidth = 935 + OnCreate = FormCreate + LCLVersion = '1.1' + object RxViewsPanel1: TRxViewsPanel + Left = 0 + Height = 617 + Top = 31 + Width = 128 + Align = alLeft + ButtonHeght = 50 + Color = clMoneyGreen + Items = < + item + Visible = True + Caption = 'Диаграмма Ганта' + ImageIndex = 0 + end + item + Visible = True + Caption = 'Задачи' + ImageIndex = 2 + end + item + Visible = True + Caption = 'РеÑурÑÑ‹' + Tag = 3 + ImageIndex = 3 + end + item + Visible = True + Caption = 'ИÑпользование реÑурÑов' + Tag = 4 + ImageIndex = 4 + end> + ImageList = ImageList2 + OnSelectViewEvent = RxViewsPanel1SelectViewEvent + ItemIndex = 0 + BevelOuter = bvLowered + ClientHeight = 617 + ClientWidth = 128 + ParentColor = False + TabOrder = 0 + end + object Splitter1: TSplitter + Left = 128 + Height = 617 + Top = 31 + Width = 5 + end + object ExtendedNotebook1: TExtendedNotebook + Left = 133 + Height = 617 + Top = 31 + Width = 802 + ActivePage = TabSheet4 + Align = alClient + ShowTabs = False + TabIndex = 3 + TabOrder = 2 + object TabSheet1: TTabSheet + Caption = 'TabSheet1' + ClientHeight = 611 + ClientWidth = 796 + object StringGrid1: TStringGrid + Left = 19 + Height = 302 + Top = 13 + Width = 510 + TabOrder = 0 + end + end + object TabSheet2: TTabSheet + Caption = 'TabSheet2' + ClientHeight = 611 + ClientWidth = 796 + object StringGrid2: TStringGrid + Left = 151 + Height = 341 + Top = 10 + Width = 509 + TabOrder = 0 + end + end + object TabSheet3: TTabSheet + Caption = 'TabSheet3' + ClientHeight = 611 + ClientWidth = 796 + object StringGrid3: TStringGrid + Left = 109 + Height = 325 + Top = 146 + Width = 607 + TabOrder = 0 + end + end + object TabSheet4: TTabSheet + Caption = 'TabSheet4' + ClientHeight = 611 + ClientWidth = 796 + object StringGrid4: TStringGrid + Left = 0 + Height = 177 + Top = 0 + Width = 796 + Align = alTop + TabOrder = 0 + end + object Splitter2: TSplitter + Cursor = crVSplit + Left = 0 + Height = 5 + Top = 177 + Width = 796 + Align = alTop + ResizeAnchor = akTop + end + object Memo1: TMemo + Left = 0 + Height = 429 + Top = 182 + Width = 796 + Align = alClient + Lines.Strings = ( + 'Memo1' + ) + TabOrder = 2 + end + end + end + object StatusBar1: TStatusBar + Left = 0 + Height = 19 + Top = 648 + Width = 935 + Panels = <> + end + object ToolPanel1: TToolPanel + Left = 0 + Height = 31 + Top = 0 + Width = 935 + Items = <> + Options = [] + Align = alTop + BorderWidth = 4 + TabOrder = 4 + end + object ImageList2: TImageList + Height = 48 + Width = 48 + left = 336 + top = 384 + Bitmap = { + 4C69050000003000000030000000000000000000000000000000000000000000 + 0001000000010000000200000002000000020000000200000002000000020000 + 0002000000020000000200000002000000020000000200000002000000020000 + 0002000000020000000200000002000000020000000200000002000000020000 + 0002000000020000000200000002000000020000000200000002000000020000 + 0002000000020000000200000002000000020000000100000001000000000000 + 0000000000000000000000000000000000000000000000000001000000020000 + 0003000000050000000600000007000000070000000700000008000000080000 + 0008000000080000000800000008000000080000000800000008000000080000 + 0008000000080000000800000008000000080000000800000008000000080000 + 0008000000080000000800000008000000080000000800000008000000080000 + 0008000000070000000700000007000000060000000500000003000000020000 + 0001000000000000000000000000000000000000000100000002000000050000 + 00090000000D0000001000000012000000130000001300000014000000140000 + 0014000000140000001400000014000000140000001400000014000000140000 + 0014000000140000001400000014000000140000001400000014000000140000 + 0014000000140000001400000014000000140000001400000014000000140000 + 0014000000130000001300000012000000100000000D00000009000000050000 + 0002000000010000000000000000000000000000000200000005000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000200000001A000000120000000A0000 + 0005000000020000000000000000000000010000000300000008000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000330000002A0000001D000000110000 + 000800000003000000010000000000000002000000050000000C000000FF0000 + 00FF00000038000000430000004A0000004B0000004A0000004A000000490000 + 0049000000490000004900000049000000490000004900000049000000490000 + 0049000000490000004900000049000000490000004900000049000000490000 + 0049000000490000004900000049000000490000004900000049000000490000 + 004A0000004A000000FF000000FF000000430000003800000028000000180000 + 000C00000005000000020000000000000002000000060000000E000000FF0000 + 002E0000003F0000004A0000004F0000004E0000004C0000004A000000490000 + 0049000000490000004900000049000000490000004900000049000000490000 + 0049000000490000004900000049000000490000004900000049000000490000 + 0049000000490000004900000049000000490000004900000049000000490000 + 004A0000004C0000004E000000FF0000004A0000003F0000002E0000001C0000 + 000E00000006000000020000000000000002000000060000000E000000FF0000 + 002D0000003D000000460000004700000044000000400000003E0000003C0000 + 003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C0000 + 003C0000003C0000003C0000003C0000003B0000003B0000003B0000003B0000 + 003B0000003B0000003B0000003B0000003B0000003B0000003B0000003B0000 + 003D0000003F00000043000000FF000000450000003C0000002D0000001C0000 + 000E00000006000000020000000000000002000000050000000D000000190000 + 0027000000320000003800000037000000330000002E0000002B0000002A0000 + 002A0000002A0000002A0000002A0000002A0000002A0000002A0000002A0000 + 002A0000002A0000002A0000002A000000290000002900000029000000290000 + 0029000000290000002800000027000000260000002600000026000000260000 + 00280000002B0000003000000035000000360000003100000026000000180000 + 000D00000005000000020000000000000002000000040000000A000000140000 + 001F000000280000002B0000002A00000025000000210000001E0000001D0000 + 001D0000001D0000001D0000001D0000001D0000001D0000001D0000001D0000 + 001D0000001D0000001D0000001D0000001C0000001C0000001C0000001C0000 + 001B0000001A0000001900000017000000160000001500000014000000140000 + 0016000000180000001C0000002200000024000000220000001B000000120000 + 000A000000040000000100000000000000010000000300000009000000110000 + 001A0000002200000026000000260000002400000022000000200000001F0000 + 001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000 + 001F0000001F0000001F0000001F0000001E0000001E0000001E0000001E0000 + 001C0000001A00000016000000110000000D0000000A00000009000000080000 + 00090000000A0000000E000000120000001500000015000000110000000B0000 + 0006000000020000000100000000000000010000000300000009000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000260000001E000000160000000E0000000700000004000000030000 + 00030000000400000006000000080000000A0000000A00000009000000060000 + 000300000001000000000000000000000001000000040000000A000000FFE5CB + 9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB + 9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB + 9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFCEB68CFF0000 + 00FF0000003F0000003100000022000000130000000900000003000000010000 + 0000000000010000000200000003000000040000000500000004000000020000 + 000200000000000000000000000000000002000000060000000E000000FFE5CB + 9CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFAA9774FF0000 + 00FF0000005C00000047000000310000001C0000000E00000005000000020000 + 0000000000000000000000000001000000010000000200000001000000010000 + 0000000000000000000000000000000000020000000600000012000000FFE5CB + 9CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFAA9774FF0000 + 00FF000000760000005C0000003E000000240000001200000006000000020000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000020000000800000014000000FFE5CB + 9CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFAA9774FF0000 + 00FF000000870000006A000000470000002A0000001400000008000000020000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000020000000800000015000000FFCEB6 + 8CFFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA97 + 74FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA97 + 74FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FF0000 + 00FF0000008D0000006E0000004A0000002B0000001500000008000000020000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000020000000800000014000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000880000006A000000480000002A0000001400000008000000020000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000020000000600000012000000240000 + 003E0000005C000000760000008900000094000000990000009A0000009A0000 + 009B0000009B0000009B0000009B0000009B0000009B0000009B0000009B0000 + 009B0000009B0000009C0000009C0000009D0000009C0000009A000000960000 + 008B000000790000005E00000041000000260000001400000009000000040000 + 0002000000020000000200000002000000020000000100000001000000000000 + 000000000000000000000000000000000002000000050000000E0000001C0000 + 0031000000470000005C0000006A000000730000007600000078000000780000 + 0079000000790000007900000079000000790000007900000079000000790000 + 007A0000007A0000007C0000007E0000008000000081000000800000007C0000 + 007400000066000000510000003A00000025000000160000000E0000000A0000 + 0009000000080000000800000007000000060000000500000003000000020000 + 0001000000000000000000000000000000010000000300000009000000130000 + 0021000000310000003E000000490000004E0000005100000052000000520000 + 0052000000520000005200000052000000520000005200000052000000530000 + 0055000000570000005B00000060000000640000006600000067000000650000 + 00600000005600000048000000380000002A000000200000001A000000180000 + 0017000000160000001600000014000000120000000E00000009000000050000 + 00020000000100000000000000000000000000000002000000050000000A0000 + 00120000001C000000240000002A0000002D0000002E0000002E0000002E0000 + 002F0000002F0000002F0000002F0000002F0000002F0000002F000000310000 + 0034000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000240000001C000000120000000A0000 + 0005000000020000000000000000000000000000000100000002000000050000 + 00090000000E0000001200000014000000160000001600000016000000160000 + 00170000001700000017000000170000001700000017000000180000001A0000 + 0020000000FFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB + 9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB + 9CFFE5CB9CFFCEB68CFF000000FF0000003E0000003100000021000000130000 + 0009000000030000000100000000000000000000000000000001000000020000 + 0003000000050000000600000007000000080000000800000008000000080000 + 000900000009000000090000000900000009000000090000000A0000000E0000 + 0016000000FFE5CB9CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFAA9774FF000000FF0000005C00000047000000310000001C0000 + 000E000000050000000200000000000000000000000000000000000000000000 + 0001000000010000000200000002000000020000000200000002000000020000 + 0002000000020000000200000002000000020000000200000004000000090000 + 0014000000FFE5CB9CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFAA9774FF000000FF000000760000005C0000003E000000240000 + 0012000000060000000200000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000002000000080000 + 0014000000FFE5CB9CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFAA9774FF000000FF000000870000006A000000470000002A0000 + 0014000000080000000200000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000002000000080000 + 0015000000FFCEB68CFFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA97 + 74FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA97 + 74FFAA9774FFAA9774FF000000FF0000008D0000006E0000004A0000002B0000 + 0015000000080000000200000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000002000000080000 + 0014000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000870000006A000000470000002A0000 + 0014000000080000000200000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000010000 + 0001000000020000000200000002000000020000000200000004000000090000 + 001400000026000000410000005E000000790000008B000000950000009A0000 + 009A0000009B0000009B0000009B0000009B0000009B0000009B0000009A0000 + 009A000000990000009400000089000000760000005C0000003E000000240000 + 0012000000060000000200000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000100000002000000030000 + 000500000006000000070000000800000008000000090000000A0000000E0000 + 0016000000250000003A000000500000006400000072000000790000007A0000 + 007A0000007A0000007900000079000000790000007900000079000000780000 + 007800000076000000730000006A0000005C00000047000000310000001C0000 + 000E000000050000000200000000000000000000000000000000000000000000 + 0000000000000000000000000000000000010000000200000005000000090000 + 000E0000001200000014000000160000001600000017000000180000001A0000 + 00200000002A0000003800000046000000530000005A0000005C0000005A0000 + 0057000000550000005300000052000000520000005200000052000000520000 + 0052000000510000004E000000490000003E0000003100000021000000130000 + 0009000000030000000100000000000000000000000000000000000000000000 + 00000000000000000000000000000000000200000005000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF0000004E00000049000000420000 + 003A00000034000000310000002F0000002F0000002F0000002F0000002E0000 + 002E0000002E0000002D0000002A000000240000001C000000120000000A0000 + 0005000000020000000000000000000000000000000000000000000000000000 + 00000000000000000000000000010000000300000009000000FFE5CB9CFFE5CB + 9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB9CFFE5CB + 9CFFE5CB9CFFE5CB9CFFCEB68CFF000000FF0000005300000046000000380000 + 002A000000200000001A00000018000000170000001700000017000000160000 + 0016000000160000001600000014000000120000000E00000009000000050000 + 0002000000010000000000000000000000000000000000000000000000000000 + 0000000000000000000000000002000000050000000E000000FFE5CB9CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFAA9774FF000000FF00000064000000500000003A0000 + 0025000000160000000E0000000A000000090000000900000009000000080000 + 0008000000080000000800000007000000060000000500000003000000020000 + 0001000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000020000000600000012000000FFE5CB9CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFAA9774FF000000FF000000790000005E000000410000 + 0026000000140000000900000004000000020000000200000002000000020000 + 0002000000020000000200000002000000020000000100000001000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000020000000800000014000000FFE5CB9CFFCEB6 + 8CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB68CFFCEB6 + 8CFFCEB68CFFCEB68CFFAA9774FF000000FF000000880000006A000000480000 + 002A000000140000000800000002000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000020000000800000015000000FFCEB68CFFAA97 + 74FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA9774FFAA97 + 74FFAA9774FFAA9774FFAA9774FF000000FF0000008D0000006E0000004A0000 + 002B000000150000000800000002000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000020000000800000014000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000870000006A000000470000 + 002A000000140000000800000002000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000020000000600000012000000240000003E0000 + 005C000000760000008900000094000000990000009A0000009A0000009B0000 + 009A0000009A000000990000009400000089000000760000005C0000003E0000 + 0024000000120000000600000002000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000002000000050000000E0000001C000000310000 + 00470000005C0000006A00000073000000760000007800000078000000790000 + 00780000007800000076000000730000006A0000005C00000047000000310000 + 001C0000000E0000000500000002000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000001000000030000000900000013000000210000 + 00310000003E000000490000004E000000510000005200000052000000520000 + 005200000052000000510000004E000000490000003E00000031000000210000 + 0013000000090000000300000001000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000002000000050000000A000000120000 + 001C00000024282828320A0A0A2F0A0A0A300A0A0A300000002E0000002F0000 + 002E0000002E0000002E0000002D0000002A000000240000001C000000127878 + 7813000000050000000200000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000010000000200000005000000090000 + 000E000000120000001400000016000000160000001600000016000000170000 + 001600000016000000160000001600000014000000120000000E000000090000 + 0005000000020000000100000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000100000002000000030000 + 0005000000060000000700000008000000080000000800000008000000090000 + 0008000000080000000800000008000000070000000600000005000000030000 + 0002000000010000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000010000 + 0001000000020000000200000002000000020000000200000002000000020000 + 0002000000020000000200000002000000020000000200000001000000010000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009696966B9696 + 96F6959595FF949494FF949494FF939393FF919191FF909090FF8E8E8EFF8D8D + 8DFF8B8B8BFF898989FF878787FF858585FF838383FF818181FF7F7F7FFF7D7D + 7DFF7B7B7BFF797979FF777777FF757575FF737373FF707070FF6E6E6EFF6C6C + 6CFF6A6A6AFF686868FF666666FF636363FF616161FF5F5F5FFF5D5D5DFF5B5B + 5BFF595959FF565656FF545454FF525252FF505050FF4E4E4EFF505050F65353 + 536BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00989898F6F7F7 + F7FFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFDFD + FDFFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFCFCFCFFFCFC + FCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFBFBFBFFFBFBFBFFFBFBFBFFFBFB + FBFFFBFBFBFFFBFBFBFFFAFAFAFFFAFAFAFFFAFAFAFFFAFAFAFFFAFAFAFFF9F9 + F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF8F8F8FFF2F2F2FF5050 + 50F6FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00999999FFFEFE + FEFFDCDCDCFFDDDDDDFFDDDDDDFFDEDEDEFFDFDFDFFFDFDFDFFFE0E0E0FFE0E0 + E0FFE1E1E1FFE1E1E1FFE1E1E1FFE2E2E2FFE2E2E2FFE3E3E3FFE3E3E3FFE3E3 + E3FFE4E4E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6 + E6FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 + E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B9BFFFEFE + FEFFDDDDDDFFDDDDDDFFDEDEDEFFDFDFDFFFDFDFDFFFE0E0E0FFE0E0E0FFE1E1 + E1FFE1E1E1FFE1E1E1FFE2E2E2FFE2E2E2FFE3E3E3FFE3E3E3FFE4E4E4FFE4E4 + E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7 + E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE8E8E8FFE8E8E8FFE8E8 + E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE7E7E7FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009D9D9DFFFEFE + FEFFDDDDDDFFDEDEDEFFDEDEDEFFDFDFDFFFE0E0E0FFE0E0E0FFE1E1E1FFE1E1 + E1FFE2E2E2FFE2E2E2FFE3E3E3FFE3E3E3FFE3E3E3FFE4E4E4FFE4E4E4FFE5E5 + E5FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E7FFE7E7E7FFE7E7 + E7FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8 + E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009F9F9FFFFEFE + FEFFDEDEDEFFDEDEDEFFDFDFDFFFE0E0E0FFE0E0E0FFE1E1E1FFE1E1E1FFE2E2 + E2FFE2E2E2FFE3E3E3FFE3E3E3FFE4E4E4FFE4E4E4FFE4E4E4FFE5E5E5FFE5E5 + E5FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E7FFE7E7E7FFE7E7E7FFE8E8E8FFE8E8 + E8FFE8E8E8FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9 + E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009F9F9FFFFEFE + FEFFDEDEDEFFDFDFDFFFDCDCDCFF343434FF343434FF343434FF353535FF3535 + 35FF353535FF353535FF353535FF353535FF353535FF353535FF353535FF3535 + 35FF353535FF353535FF353535FF353535FF353535FF353535FF353535FF3636 + 36FF363636FF363636FF363636FF363636FF363636FF363636FF363636FF3636 + 36FF363636FF363636FF363636FFD5D5D5FFEAEAEAFFEAEAEAFFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E9EFFFEFE + FEFFDFDFDFFFDFDFDFFFDFDFDFFF161616FF212121FF4E4E4EFF6C6C6CFF7D7D + 7DFF808080FF848484FF878787FF8B8B8BFF8F8F8FFF929292FF969696FF9A9A + 9AFF9C9C9CFFA0A0A0FFA4A4A4FFA5A5A5FFA2A2A2FF9F9F9FFF9C9C9CFF9898 + 98FF959595FF939393FF8F8F8FFF8B8B8BFF898989FF858585FF828282FF7272 + 72FF545454FF262626FF151515FFD7D7D7FFEAEAEAFFEAEAEAFFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009D9D9DFFFEFE + FEFFDFDFDFFFE0E0E0FFE0E0E0FF747474FFD2D2D2FFE2E2E2FFE3E3E3FFE3E3 + E3FFE4E4E4FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6E6FFE7E7E7FFE7E7 + E7FFE8E8E8FFE8E8E8FFE8E8E8FFE9E9E9FFE9E9E9FFE9E9E9FFEAEAEAFFEAEA + EAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEB + EBFFEBEBEBFFE1E1E1FF767676FFE9E9E9FFEBEBEBFFEBEBEBFFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009A9A9AFFFDFD + FDFFE0E0E0FFE0E0E0FFE1E1E1FFE1E1E1FFE2E2E2FFE2E2E2FFE3E3E3FFE4E4 + E4FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6E6FFE7E7E7FFE7E7E7FFE8E8 + E8FFE8E8E8FFE9E9E9FFE9E9E9FFE9E9E9FFEAEAEAFFEAEAEAFFEAEAEAFFEBEB + EBFFEBEBEBFFEBEBEBFFECECECFFECECECFFECECECFFECECECFFECECECFFECEC + ECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00989898FFFDFD + FDFFE0E0E0FFE1E1E1FFE1E1E1FFE2E2E2FFE2E2E2FFE3E3E3FFE3E3E3FFE4E4 + E4FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6E6FFE7E7E7FFE7E7E7FFE8E8E8FFE8E8 + E8FFE9E9E9FFE9E9E9FFEAEAEAFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEB + EBFFECECECFFECECECFFECECECFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDED + EDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696FFFDFD + FDFFE0E0E0FFE1E1E1FFE1E1E1FF818788FF576163FF576163FF586163FF5861 + 63FF586264FF596264FF596264FF596265FF596265FF5A6365FF5A6365FF5A63 + 65FF5A6365FF5A6365FF5A6365FF5B6466FF5A6365FF707779FFECECECFFECEC + ECFFECECECFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEEEE + EEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEDEDEDFFEDEDEDFFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00949494FFFDFD + FDFFE1E1E1FFE1E1E1FFE2E2E2FF47575CFF74CFD9FF7CCEE1FF7CCEE1FF7CCE + E1FF7CCEE1FF7CCEE1FF7CCEE1FF7CCEE1FF7CCEE1FF7CCEE1FF7CCEE1FF7CCE + E1FF7CCEE1FF7CCEE1FF7CCEE1FF7CCEE1FF5FBCC4FF334F4FFFECECECFFEDED + EDFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEE + EEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00919191FFFDFD + FDFFE1E1E1FFE2E2E2FFE2E2E2FF47585CFF74D3DCFF77C9DFFF77C9DFFF77C9 + DFFF78CAE0FF78CAE0FF78CAE0FF79CBE1FF79CBE1FF7ACCE2FF7ACCE2FF7ACC + E2FF7ACCE2FF7BCDE3FF7BCDE3FF7BCDE3FF5BBCC3FF33504FFFEDEDEDFFEDED + EDFFEEEEEEFFEEEEEEFFEEEEEEFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEF + EFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008F8F8FFFFDFD + FDFFE1E1E1FFE2E2E2FFE2E2E2FF47585CFF74D3DCFF77C9DFFF77C9DFFF78CA + E0FF78CAE0FF78CAE0FF78CAE0FF79CBE1FF7ACCE2FF7ACCE2FF7ACCE2FF7ACC + E2FF7BCDE3FF7BCDE3FF7BCDE3FF7BCDE3FF5ABCC2FF33504FFFEEEEEEFFEEEE + EEFFEEEEEEFFEFEFEFFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFF0F0F0FFF0F0 + F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFEFEFEFFFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008D8D8DFFFDFD + FDFFE1E1E1FFE2E2E2FFE3E3E3FF3B494CFF396F7BFF386D7AFF386D7AFF386D + 7AFF386E7AFF386E7AFF386E7AFF386E7AFF386E7AFF386E7AFF386E7AFF396F + 7BFF396F7BFF396F7BFF396F7BFF396F7BFF337175FF253738FFEEEEEEFFEFEF + EFFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFF0F0F0FFF1F1F1FFF1F1F1FFF1F1 + F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF0F0F0FFF0F0F0FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008A8A8AFFFCFC + FCFFE2E2E2FFE2E2E2FFE3E3E3FFC0C0C0FFABABABFFACACACFFACACACFFACAC + ACFFADADADFFAEAEAEFFAEAEAEFFAFAFAFFFAFAFAFFFAFAFAFFFB0B0B0FFB0B0 + B0FFB1B1B1FFB1B1B1FFB2B2B2FFB2B2B2FFB2B2B2FFBFBFBFFFEFEFEFFFEFEF + EFFFF0F0F0FFF0F0F0FFF0F0F0FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1 + F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00888888FFFCFC + FCFFE2E2E2FFE3E3E3FFE3E3E3FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE7E7 + E7FFE7E7E7FFE8E8E8FFE9E9E9FFE9E9E9FFEAEAEAFFEAEAEAFFEBEBEBFFECEC + ECFFECECECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0 + F0FFF0F0F0FFF1F1F1FFF1F1F1FFF1F1F1FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2 + F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF1F1F1FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00858585FFFCFC + FCFFE2E2E2FFE3E3E3FFE4E4E4FFE4E4E4FFE5E5E5FFE6E6E6FFE6E6E6FFE7E7 + E7FFE8E8E8FFE8E8E8FFE9E9E9FFE9E9E9FFEAEAEAFFEBEBEBFFEBEBEBFFECEC + ECFFEDEDEDFFEDEDEDFFA6AAACFF626B6EFF626C6FFF626C6FFF636D6FFF636D + 6FFF636D70FF636D70FF636D70FF636D70FF636D70FF646E70FF646E70FF646E + 70FF636D70FFBABEBFFFF3F3F3FFF3F3F3FFF2F2F2FFF2F2F2FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00838383FFFCFC + FCFFE2E2E2FFE3E3E3FFE4E4E4FFE4E4E4FFE5E5E5FFE6E6E6FFE6E6E6FFE7E7 + E7FFE8E8E8FFE8E8E8FFE9E9E9FFEAEAEAFFEAEAEAFFEBEBEBFFECECECFFECEC + ECFFEDEDEDFFEDEDEDFF5F6B6FFF77D6DFFF80D5E8FF80D5E8FF80D5E8FF80D5 + E8FF80D5E8FF80D6E8FF80D6E8FF80D6E8FF80D6E8FF80D6E8FF80D6E8FF80D6 + E8FF53ACB5FF727C7FFFF4F4F4FFF3F3F3FFF3F3F3FFF3F3F3FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00818181FFFCFC + FCFFE3E3E3FFE3E3E3FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE7E7E7FFE7E7 + E7FFE8E8E8FFE9E9E9FFE9E9E9FFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFEDED + EDFFEDEDEDFFEEEEEEFF5F6B6FFF75D4DDFF7DCFE5FF7DCFE5FF7ED0E6FF7ED0 + E6FF7ED0E6FF7ED0E6FF7FD1E7FF7FD1E7FF7FD1E7FF7FD1E7FF7FD1E7FF7FD1 + E7FF52A9B3FF727C7FFFF4F4F4FFF4F4F4FFF4F4F4FFF3F3F3FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007E7E7EFFFBFB + FBFFE3E3E3FFE3E3E3FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE7E7E7FFE8E8 + E8FFE8E8E8FFE9E9E9FFEAEAEAFFEAEAEAFFEBEBEBFFECECECFFECECECFFEDED + EDFFEDEDEDFFEEEEEEFF606C6FFF75D4DDFF7DCFE5FF7ED0E6FF7ED0E6FF7ED0 + E6FF7ED0E6FF7FD1E7FF7FD1E7FF7FD1E7FF7FD1E7FF80D2E8FF80D2E8FF80D2 + E8FF51A8B2FF727C7FFFF5F5F5FFF5F5F5FFF5F5F5FFF4F4F4FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007C7C7CFFFBFB + FBFFE3E3E3FFE4E4E4FFE4E4E4FFE5E5E5FFE6E6E6FFE6E6E6FFE7E7E7FFE8E8 + E8FFE8E8E8FFE9E9E9FFEAEAEAFFEAEAEAFFEBEBEBFFECECECFFECECECFFEDED + EDFFEEEEEEFFEEEEEEFF5C676AFF3D7782FF3D7582FF3D7582FF3D7582FF3D76 + 82FF3D7682FF3D7682FF3D7682FF3D7682FF3E7783FF3E7783FF3E7783FF3E77 + 83FF346F75FF747D80FFF6F6F6FFF5F5F5FFF5F5F5FFF5F5F5FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007A7A7AFFFBFB + FBFFE3E3E3FFE4E4E4FFE4E4E4FFE5E5E5FFE6E6E6FFE6E6E6FFE7E7E7FFE8E8 + E8FFE9E9E9FFE9E9E9FFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFEDEDEDFFEDED + EDFFEEEEEEFFEFEFEFFFD9D9D9FFBBBBBBFFBCBCBCFFBCBCBCFFBDBDBDFFBEBE + BEFFBEBEBEFFBEBEBEFFBEBEBEFFBFBFBFFFC0C0C0FFC0C0C0FFC0C0C0FFC1C1 + C1FFC1C1C1FFE6E6E6FFF6F6F6FFF6F6F6FFF6F6F6FFF5F5F5FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00777777FFFBFB + FBFFE3E3E3FFE4E4E4FFE4E4E4FFE5E5E5FFE6E6E6FFE7E7E7FFE7E7E7FFE8E8 + E8FFE9E9E9FFE9E9E9FFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFEDEDEDFFEDED + EDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF1F1F1FFF2F2F2FFF2F2F2FFF3F3 + F3FFF4F4F4FFF4F4F4FFF5F5F5FFF5F5F5FFF6F6F6FFF7F7F7FFF7F7F7FFF7F7 + F7FFF8F8F8FFF7F7F7FFF7F7F7FFF7F7F7FFF6F6F6FFF6F6F6FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00757575FFFBFB + FBFFE3E3E3FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE7E7E7FFE7E7E7FFE8E8 + E8FFE9E9E9FFBDBFC0FF6D787BFF6D787BFF6D787BFF6E797BFF6E797CFF6F7A + 7CFF6F7A7CFF6F7A7DFF707B7DFF707B7DFF707B7EFFA2A8A9FFF2F2F2FFF3F3 + F3FFF4F4F4FFF4F4F4FFF5F5F5FFF6F6F6FFF6F6F6FFF7F7F7FFF8F8F8FFF8F8 + F8FFF8F8F8FFF8F8F8FFF8F8F8FFF7F7F7FFF7F7F7FFF6F6F6FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00737373FFFBFB + FBFFE3E3E3FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE7E7E7FFE7E7E7FFE8E8 + E8FFE9E9E9FF808889FF70C8D1FF7ED4E6FF7ED5E6FF7ED5E6FF7ED5E6FF7ED5 + E6FF7ED5E6FF7ED5E6FF7ED5E6FF7ED5E6FF6AC8D2FF566F6EFFF2F2F2FFF3F3 + F3FFF4F4F4FFF5F5F5FFF5F5F5FFF6F6F6FFF7F7F7FFF7F7F7FFF8F8F8FFF9F9 + F9FFF9F9F9FFF9F9F9FFF8F8F8FFF7F7F7FFF7F7F7FFF6F6F6FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00707070FFFAFA + FAFFE3E3E3FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE7E7E7FFE7E7E7FFE8E8 + E8FFE9E9E9FF808889FF6EC6CFFF7BCDE3FF7BCDE3FF7BCDE3FF7CCEE4FF7CCE + E4FF7CCEE4FF7DCFE5FF7DCFE5FF7DCFE5FF67C3CFFF546D6CFFF2F2F2FFF3F3 + F3FFF4F4F4FFF5F5F5FFF5F5F5FFF6F6F6FFF7F7F7FFF7F7F7FFF8F8F8FFF9F9 + F9FFF9F9F9FFF9F9F9FFF8F8F8FFF8F8F8FFF7F7F7FFF6F6F6FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006E6E6EFFFAFA + FAFFE3E3E3FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE7E7E7FFE7E7E7FFE8E8 + E8FFE9E9E9FF808889FF6FC6D0FF7BCDE3FF7BCDE3FF7BCDE3FF7CCEE4FF7CCE + E4FF7CCEE4FF7DCFE5FF7DCFE5FF7DCFE5FF66C2CEFF546D6CFFF2F2F2FFF3F3 + F3FFF4F4F4FFF4F4F4FFF5F5F5FFF6F6F6FFF6F6F6FFF7F7F7FFF8F8F8FFF8F8 + F8FFF8F8F8FFF8F8F8FFF8F8F8FFF7F7F7FFF7F7F7FFF6F6F6FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006B6B6BFFFAFA + FAFFE3E3E3FFE4E4E4FFE4E4E4FFE5E5E5FFE6E6E6FFE7E7E7FFE7E7E7FFE8E8 + E8FFE9E9E9FF81898AFF3D7782FF407C88FF407C88FF417D89FF417D89FF417D + 89FF417D89FF417D8AFF417D8AFF417D8AFF3C7D85FF4D6262FFF2F2F2FFF3F3 + F3FFF4F4F4FFF4F4F4FFF5F5F5FFF6F6F6FFF6F6F6FFF7F7F7FFF7F7F7FFF8F8 + F8FFF8F8F8FFF8F8F8FFF7F7F7FFF7F7F7FFF6F6F6FFF6F6F6FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00696969FFFAFA + FAFFE3E3E3FFE4E4E4FFE4E4E4FFE5E5E5FFE6E6E6FFE6E6E6FFE7E7E7FFE8E8 + E8FFE9E9E9FFDEDEDEFFBEBEBEFFBFBFBFFFBFBFBFFFC0C0C0FFC0C0C0FFC0C0 + C0FFC1C1C1FFC2C2C2FFC2C2C2FFC3C3C3FFC4C4C4FFD9D9D9FFF2F2F2FFF3F3 + F3FFF3F3F3FFF4F4F4FFF5F5F5FFF5F5F5FFF6F6F6FFF6F6F6FFF7F7F7FFF7F7 + F7FFF7F7F7FFF7F7F7FFF7F7F7FFF6F6F6FFF6F6F6FFF5F5F5FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00676767FFFAFA + FAFFE3E3E3FFE4E4E4FFE4E4E4FFE5E5E5FFE6E6E6FFE6E6E6FFE7E7E7FFE8E8 + E8FFE8E8E8FFE9E9E9FFEAEAEAFFEAEAEAFFEBEBEBFFECECECFFECECECFFEDED + EDFFEEEEEEFFEEEEEEFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1F1FFF2F2F2FFF2F2 + F2FFF3F3F3FFF4F4F4FFF4F4F4FFF5F5F5FFF5F5F5FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF5F5F5FFF5F5F5FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00646464FFF9F9 + F9FFE3E3E3FFE3E3E3FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE7E7E7FFE8E8 + E8FFE8E8E8FFE9E9E9FFEAEAEAFFEAEAEAFFEBEBEBFFECECECFFECECECFFEDED + EDFFEEEEEEFFEEEEEEFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1F1FFF1F1F1FFF2F2 + F2FFF3F3F3FFF3F3F3FFF4F4F4FFF4F4F4FFF5F5F5FFF5F5F5FFF5F5F5FFF5F5 + F5FFF5F5F5FFF5F5F5FFF5F5F5FFF5F5F5FFF5F5F5FFF4F4F4FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00626262FFF9F9 + F9FFE3E3E3FFE3E3E3FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE7E7E7FFE7E7 + E7FFE8E8E8FFE9E9E9FFE9E9E9FFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFEDED + EDFFEDEDEDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1F1FFF2F2 + F2FFF2F2F2FFF3F3F3FFF3F3F3FFF4F4F4FFF4F4F4FFF4F4F4FFF5F5F5FFF5F5 + F5FFF5F5F5FFF5F5F5FFF5F5F5FFF4F4F4FFF4F4F4FFF4F4F4FFF8F8F8FF4C4C + 4CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00646464F6F3F3 + F3FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9 + F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF9F9 + F9FFF9F9F9FFF9F9F9FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8 + F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8 + F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF4F4F4FF5050 + 50F6FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006262626B6060 + 60F65D5D5DFF5D5D5DFF5D5D5DFF5D5D5DFF5D5D5DFF5C5C5CFF5C5C5CFF5B5B + 5BFF5B5B5BFF5A5A5AFF595959FF595959FF585858FF575757FF565656FF5555 + 55FF545454FF535353FF525252FF515151FF4F4F4FFF4E4E4EFF4D4D4DFF4C4C + 4CFF4C4C4CFF4C4C4CFF4C4C4CFF4C4C4CFF4C4C4CFF4C4C4CFF4C4C4CFF4C4C + 4CFF4C4C4CFF4C4C4CFF4C4C4CFF4C4C4CFF4C4C4CFF4C4C4CFF505050F65353 + 536BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000010000000A000000110000001900000021000000280000 + 00300000003800000040000000470000004E000000560000005D000000640000 + 006B00000071000000770000007B0000007C0000007B00000077000000720000 + 006B000000650000005E000000560000004F0000004800000040000000380000 + 003100000029000000210000001A0000001100000006FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000001000000060000000F000000190000 + 0020000000260000002C00000033000000380000003D00000043000000470000 + 004B0000004E00000051000000520000005200000052000000510000004E0000 + 004B00000047000000430000003E00000038000000330000002D000000270000 + 0020000000160000000B00000003FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000100000003000000060000000B0000001000000014000000180000001C0000 + 001F000000230000002600000028000000280000002700000024000000220000 + 001E0000001B00000017000000130000000D000000090000000500000002FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006262626B6B6B + 6BF6616161FF5F5F5FFF5F5F5FFF5D5D5DFF5A5A5AFF595959FF565656FF5454 + 54FF515151FF4E4E4EFF4B4B4BFF484848FF454545FF434343FF404040FF3D3D + 3DFF3A3A3AFF373737FF343434FF313131FF2E2E2EFF2A2A2AFF272727FF2424 + 24FF212121FF1E1E1EFF1B1B1BFF161616FF131313FF101010FF0D0D0DFF0A0A + 0AFF080808FF030303FF000000FF000000FF000000FF000000FF090909F60000 + 006BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006E6E6EF6FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0909 + 09F6FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00676767FFFFFF + FFFFCECECEFFD5D5D5FFD5D5D5FFD6D6D6FFD7D7D7FFD7D7D7FFD9D9D9FFD8D8 + D8FFDADADAFFDADADAFFDADADAFFDBDBDBFFDBDBDBFFDDDDDDFFDDDDDDFFDCDC + DCFFDEDEDEFFDEDEDEFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFE1E1E1FFE1E1 + E1FFE1E1E1FFE1E1E1FFE1E1E1FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2 + E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE0E0E0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00696969FFFFFF + FFFFDBDBDBFFEAEAEAFFF1F1F1FFF3F3F3FFF3F3F3FFF5F5F5FFF5F5F5FFF7F7 + F7FFF6F6F6FFF6F6F6FFF7F7F7FFF7F7F7FFF8F8F8FFF8F8F8FFFAFAFAFFFAFA + FAFFF9F9F9FFFBFBFBFFFAFAFAFFFAFAFAFFFCFCFCFFFCFCFCFFFBFBFBFFFDFD + FDFFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFCFCFCFFFEFEFEFFFEFEFEFFFEFE + FEFFFEFEFEFFFEFEFEFFFEFEFEFFFAFAFAFFF4F4F4FFE6E6E6FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006C6C6CFFFFFF + FFFFDFDFDFFF7C7C7CFF6B6B6BFF7D7D7DFF7F7F7FFF616161FF6F6F6FFF8282 + 82FF626262FF6F6F6FFF848484FF626262FF707070FF858585FF636363FF7171 + 71FF848484FF636363FF717171FF848484FF646464FF727272FF858585FF6565 + 65FF737373FF868686FF666666FF737373FF868686FF666666FF727272FF8585 + 85FF666666FF727272FF858585FF606060FFAFAFAFFFEAEAEAFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00707070FFFFFF + FFFFE5E5E5FFA2A2A2FFA7A7A7FFBBBBBBFFBDBDBDFF9B9B9BFFAAAAAAFFC2C2 + C2FF9C9C9CFFADADADFFC3C3C3FF9E9E9EFFAEAEAEFFC4C4C4FF9E9E9EFFADAD + ADFFC6C6C6FF9F9F9FFFAFAFAFFFC7C7C7FFA0A0A0FFAFAFAFFFC8C8C8FFA1A1 + A1FFB1B1B1FFC9C9C9FFA2A2A2FFB2B2B2FFC9C9C9FFA2A2A2FFB2B2B2FFC9C9 + C9FFA2A2A2FFB2B2B2FFC9C9C9FF9A9A9AFFCFCFCFFFEEEEEEFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00707070FFFFFF + FFFFE3E3E3FF9E9E9EFFA1A1A1FFB4B4B4FFB8B8B8FF949494FFA5A5A5FFBCBC + BCFF979797FFA6A6A6FFBEBEBEFF979797FFA7A7A7FFBEBEBEFF979797FFA8A8 + A8FFBFBFBFFF9A9A9AFFA9A9A9FFBFBFBFFF9A9A9AFFAAAAAAFFC0C0C0FF9B9B + 9BFFABABABFFC2C2C2FF9B9B9BFFABABABFFC2C2C2FF9B9B9BFFABABABFFC1C1 + C1FF9B9B9BFFABABABFFC1C1C1FF939393FFCDCDCDFFEFEFEFFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006E6E6EFFFFFF + FFFFE5E5E5FF9E9E9EFFA1A1A1FFB4B4B4FFB7B7B7FF959595FFA5A5A5FFBDBD + BDFF969696FFA7A7A7FFBEBEBEFF979797FFA7A7A7FFBFBFBFFF989898FFA9A9 + A9FFC0C0C0FF999999FFAAAAAAFFC1C1C1FF9C9C9CFFABABABFFC2C2C2FF9B9B + 9BFFABABABFFC1C1C1FF9B9B9BFFABABABFFC1C1C1FF9B9B9BFFACACACFFC3C3 + C3FF9B9B9BFFACACACFFC3C3C3FF939393FFCFCFCFFFEEEEEEFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006D6D6DFFFFFF + FFFFE6E6E6FFA3A3A3FFA6A6A6FFBCBCBCFFBEBEBEFF9C9C9CFFACACACFFC2C2 + C2FF9D9D9DFFACACACFFC3C3C3FF9C9C9CFFAEAEAEFFC4C4C4FF9F9F9FFFAEAE + AEFFC6C6C6FFA0A0A0FFAFAFAFFFC7C7C7FFA0A0A0FFB0B0B0FFC7C7C7FFA0A0 + A0FFB0B0B0FFC8C8C8FFA0A0A0FFB1B1B1FFC8C8C8FF9F9F9FFFB1B1B1FFC8C8 + C8FF9F9F9FFFB0B0B0FFC7C7C7FF969696FFD2D2D2FFF0F0F0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00686868FFFFFF + FFFFE7E7E7FF878787FF787878FF8B8B8BFF8E8E8EFF6E6E6EFF7C7C7CFF9292 + 92FF6D6D6DFF7E7E7EFF919191FF6F6F6FFF7D7D7DFF929292FF707070FF8080 + 80FF949494FF727272FF808080FF979797FF747474FF838383FF969696FF7373 + 73FF838383FF989898FF767676FF848484FF999999FF777777FF858585FF9A9A + 9AFF777777FF878787FF9C9C9CFF727272FFC2C2C2FFF0F0F0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00656565FFFFFF + FFFFE7E7E7FFA4A4A4FFA6A6A6FFBDBDBDFFBFBFBFFF989898FFCFCFCFFFFFFF + FFFFD0D0D0FFE4E4E4FFFFFFFFFFD1D1D1FFE7E7E7FFFFFFFFFFD3D3D3FFE7E7 + E7FFFFFFFFFFD4D4D4FFE8E8E8FFFFFFFFFFD4D4D4FFE9E9E9FFFFFFFFFFD4D4 + D4FFEBEBEBFFFFFFFFFFD5D5D5FFEBEBEBFFFFFFFFFFD6D6D6FFEBEBEBFFFFFF + FFFFD6D6D6FFEBEBEBFFFFFFFFFFD2D2D2FFE1E1E1FFF0F0F0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00626262FFFFFF + FFFFE5E5E5FFA1A1A1FFA0A0A0FFB6B6B6FFBABABAFF8F8F8FFFC4C4C4FFF3F3 + F3FFBFBFBFFFD5D5D5FFF1F1F1FFC1C1C1FFD6D6D6FFF3F3F3FFC2C2C2FFD8D8 + D8FFF4F4F4FFC4C4C4FFD7D7D7FFF7F7F7FFC4C4C4FFD9D9D9FFF8F8F8FFC5C5 + C5FFDADADAFFF9F9F9FFC6C6C6FFDBDBDBFFF8F8F8FFC7C7C7FFDCDCDCFFFAFA + FAFFC7C7C7FFDCDCDCFFFAFAFAFFC7C7C7FFDADADAFFEEEEEEFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005F5F5FFFFFFF + FFFFE7E7E7FFA0A0A0FFA1A1A1FFB6B6B6FFBABABAFF919191FFC4C4C4FFF4F4 + F4FFBFBFBFFFD5D5D5FFF2F2F2FFC1C1C1FFD7D7D7FFF3F3F3FFC3C3C3FFD8D8 + D8FFF5F5F5FFC4C4C4FFD9D9D9FFF6F6F6FFC5C5C5FFDADADAFFF7F7F7FFC6C6 + C6FFDBDBDBFFF8F8F8FFC7C7C7FFDCDCDCFFFAFAFAFFC7C7C7FFDCDCDCFFF9F9 + F9FFC7C7C7FFDCDCDCFFF9F9F9FFC7C7C7FFDCDCDCFFF0F0F0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005A5A5AFFFFFF + FFFFE8E8E8FFA4A4A4FFA5A5A5FFBCBCBCFFBEBEBEFF959595FFCACACAFFF9F9 + F9FFC5C5C5FFDADADAFFF8F8F8FFC8C8C8FFDDDDDDFFFAFAFAFFC9C9C9FFDDDD + DDFFFBFBFBFFCACACAFFDEDEDEFFFDFDFDFFCACACAFFE1E1E1FFFEFEFEFFCBCB + CBFFE2E2E2FFFFFFFFFFCCCCCCFFE3E3E3FFFFFFFFFFCECECEFFE3E3E3FFFFFF + FFFFCECECEFFE3E3E3FFFFFFFFFFCCCCCCFFE0E0E0FFF2F2F2FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00575757FFFFFF + FFFFE8E8E8FF929292FF898989FF9F9F9FFFA2A2A2FF7B7B7BFFA9A9A9FFD5D5 + D5FFA3A3A3FFB8B8B8FFD0D0D0FFA6A6A6FFBABABAFFD2D2D2FFA8A8A8FFB9B9 + B9FFD5D5D5FFA7A7A7FFBCBCBCFFD6D6D6FFAAAAAAFFBDBDBDFFD8D8D8FFABAB + ABFFBCBCBCFFD9D9D9FFACACACFFBDBDBDFFDBDBDBFFABABABFFBEBEBEFFDBDB + DBFFABABABFFBEBEBEFFDBDBDBFFA9A9A9FFD2D2D2FFF2F2F2FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00555555FFFFFF + FFFFE8E8E8FF9B9B9BFF999999FFACACACFFB0B0B0FF888888FFB9B9B9FFE7E7 + E7FFB7B7B7FFC9C9C9FFE5E5E5FFB7B7B7FFCCCCCCFFE7E7E7FFBABABAFFCCCC + CCFFE8E8E8FFBABABAFFCDCDCDFFEBEBEBFFBBBBBBFFD0D0D0FFEBEBEBFFBCBC + BCFFD1D1D1FFECECECFFBDBDBDFFD1D1D1FFEDEDEDFFBEBEBEFFD3D3D3FFEFEF + EFFFBEBEBEFFD3D3D3FFEFEFEFFFBCBCBCFFDBDBDBFFF3F3F3FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00505050FFFFFF + FFFFE9E9E9FFA3A3A3FFA4A4A4FFBBBBBBFFBDBDBDFF939393FFC9C9C9FFF8F8 + F8FFC4C4C4FFDADADAFFF6F6F6FFC6C6C6FFDBDBDBFFF8F8F8FFC7C7C7FFDCDC + DCFFFBFBFBFFC8C8C8FFDEDEDEFFFBFBFBFFCACACAFFDFDFDFFFFEFEFEFFCBCB + CBFFE1E1E1FFFEFEFEFFCCCCCCFFE2E2E2FFFFFFFFFFCDCDCDFFE2E2E2FFFFFF + FFFFCDCDCDFFE2E2E2FFFFFFFFFFCCCCCCFFE0E0E0FFF4F4F4FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004D4D4DFFFFFF + FFFFE9E9E9FFA3A3A3FFA2A2A2FFB8B8B8FFBABABAFF909090FFC6C6C6FFF7F7 + F7FFC1C1C1FFD7D7D7FFF4F4F4FFC3C3C3FFD7D7D7FFF5F5F5FFC4C4C4FFDADA + DAFFF7F7F7FFC6C6C6FFDADADAFFFAFAFAFFC7C7C7FFDDDDDDFFFAFAFAFFC9C9 + C9FFDDDDDDFFFDFDFDFFCACACAFFDFDFDFFFFEFEFEFFCBCBCBFFE0E0E0FFFEFE + FEFFCBCBCBFFE0E0E0FFFEFEFEFFCBCBCBFFE0E0E0FFF3F3F3FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00494949FFFFFF + FFFFE9E9E9FFA4A4A4FFA5A5A5FFBBBBBBFFBDBDBDFF949494FFC9C9C9FFF9F9 + F9FFC5C5C5FFDADADAFFF7F7F7FFC6C6C6FFDADADAFFFAFAFAFFC6C6C6FFDDDD + DDFFFCFCFCFFC9C9C9FFDFDFDFFFFCFCFCFFCBCBCBFFE0E0E0FFFFFFFFFFCCCC + CCFFE2E2E2FFFFFFFFFFCECECEFFE3E3E3FFFFFFFFFFCECECEFFE4E4E4FFFFFF + FFFFCDCDCDFFE4E4E4FFFFFFFFFFCDCDCDFFE1E1E1FFF5F5F5FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00464646FFFFFF + FFFFEAEAEAFF9B9B9BFF999999FFADADADFFAFAFAFFF898989FFBABABAFFE8E8 + E8FFB8B8B8FFCACACAFFE6E6E6FFBABABAFFCBCBCBFFE8E8E8FFBABABAFFCDCD + CDFFEAEAEAFFBBBBBBFFCFCFCFFFEDEDEDFFBBBBBBFFD2D2D2FFEDEDEDFFBEBE + BEFFD2D2D2FFF0F0F0FFBFBFBFFFD5D5D5FFF1F1F1FFBEBEBEFFD6D6D6FFF2F2 + F2FFBFBFBFFFD6D6D6FFF2F2F2FFBCBCBCFFDEDEDEFFF7F7F7FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00434343FFFFFF + FFFFECECECFF939393FF8B8B8BFF9F9F9FFFA1A1A1FF7C7C7CFFACACACFFD4D4 + D4FFA6A6A6FFBABABAFFD2D2D2FFA8A8A8FFBBBBBBFFD5D5D5FFA9A9A9FFBDBD + BDFFD7D7D7FFABABABFFBCBCBCFFD9D9D9FFABABABFFBEBEBEFFDADADAFFACAC + ACFFC1C1C1FFDBDBDBFFADADADFFC1C1C1FFDDDDDDFFAEAEAEFFC3C3C3FFDDDD + DDFFAFAFAFFFC4C4C4FFDDDDDDFFACACACFFD6D6D6FFF7F7F7FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003E3E3EFFFFFF + FFFFEBEBEBFFA5A5A5FFA7A7A7FFBCBCBCFFBEBEBEFF969696FFCCCCCCFFFDFD + FDFFC7C7C7FFDEDEDEFFFBFBFBFFCACACAFFDEDEDEFFFDFDFDFFCACACAFFE0E0 + E0FFFEFEFEFFCCCCCCFFE3E3E3FFFFFFFFFFCFCFCFFFE5E5E5FFFFFFFFFFD1D1 + D1FFE5E5E5FFFFFFFFFFD2D2D2FFE8E8E8FFFFFFFFFFD2D2D2FFE9E9E9FFFFFF + FFFFD2D2D2FFE9E9E9FFFFFFFFFFD1D1D1FFE6E6E6FFF8F8F8FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003C3C3CFFFFFF + FFFFEAEAEAFFA2A2A2FFA3A3A3FFB8B8B8FFBCBCBCFF919191FFC7C7C7FFF7F7 + F7FFC1C1C1FFD8D8D8FFF5F5F5FFC4C4C4FFD9D9D9FFF8F8F8FFC4C4C4FFDBDB + DBFFFAFAFAFFC6C6C6FFDDDDDDFFFCFCFCFFC9C9C9FFDFDFDFFFFEFEFEFFCBCB + CBFFE1E1E1FFFEFEFEFFCBCBCBFFE3E3E3FFFFFFFFFFCCCCCCFFE4E4E4FFFFFF + FFFFCDCDCDFFE4E4E4FFFFFFFFFFCCCCCCFFE3E3E3FFF9F9F9FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00393939FFFFFF + FFFFEAEAEAFFA2A2A2FFA3A3A3FFB8B8B8FFBCBCBCFF919191FFC7C7C7FFF7F7 + F7FFC3C3C3FFD8D8D8FFF5F5F5FFC4C4C4FFD9D9D9FFF8F8F8FFC6C6C6FFDADA + DAFFF9F9F9FFC8C8C8FFDDDDDDFFFCFCFCFFCACACAFFDFDFDFFFFEFEFEFFCBCB + CBFFE1E1E1FFFFFFFFFFCBCBCBFFE3E3E3FFFFFFFFFFCDCDCDFFE4E4E4FFFFFF + FFFFCECECEFFE5E5E5FFFFFFFFFFCDCDCDFFE4E4E4FFF8F8F8FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00343434FFFFFF + FFFFECECECFFA6A6A6FFA9A9A9FFBFBFBFFFC2C2C2FF9A9A9AFFCECECEFFFFFF + FFFFCCCCCCFFE0E0E0FFFEFEFEFFCDCDCDFFE1E1E1FFFFFFFFFFCFCFCFFFE3E3 + E3FFFFFFFFFFD1D1D1FFE5E5E5FFFFFFFFFFD3D3D3FFE9E9E9FFFFFFFFFFD3D3 + D3FFEBEBEBFFFFFFFFFFD5D5D5FFECECECFFFFFFFFFFD8D8D8FFEEEEEEFFFFFF + FFFFD9D9D9FFEEEEEEFFFFFFFFFFD6D6D6FFE8E8E8FFFBFBFBFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00313131FFFFFF + FFFFECECECFF888888FF7C7C7CFF8E8E8EFF909090FF6E6E6EFF989898FFC0C0 + C0FF939393FFA5A5A5FFBDBDBDFF959595FFA6A6A6FFBFBFBFFF959595FFA7A7 + A7FFC1C1C1FF979797FFAAAAAAFFC2C2C2FF999999FFACACACFFC4C4C4FF9A9A + 9AFFACACACFFC6C6C6FF9A9A9AFFAEAEAEFFC6C6C6FF9C9C9CFFAFAFAFFFC9C9 + C9FF9D9D9DFFAFAFAFFFC9C9C9FF9A9A9AFFD1D1D1FFFBFBFBFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002E2E2EFFFFFF + FFFFECECECFFA6A6A6FFA9A9A9FFBFBFBFFFC2C2C2FF9A9A9AFFCECECEFFFFFF + FFFFCCCCCCFFE0E0E0FFFEFEFEFFCCCCCCFFE3E3E3FFFFFFFFFFCFCFCFFFE5E5 + E5FFFFFFFFFFD0D0D0FFE7E7E7FFFFFFFFFFD3D3D3FFE9E9E9FFFFFFFFFFD3D3 + D3FFEBEBEBFFFFFFFFFFD5D5D5FFEDEDEDFFFFFFFFFFD7D7D7FFEEEEEEFFFFFF + FFFFDADADAFFEFEFEFFFFFFFFFFFD5D5D5FFE9E9E9FFFBFBFBFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002A2A2AFFFFFF + FFFFEAEAEAFFA2A2A2FFA3A3A3FFB8B8B8FFBCBCBCFF939393FFC7C7C7FFF7F7 + F7FFC3C3C3FFD8D8D8FFF5F5F5FFC4C4C4FFDADADAFFF7F7F7FFC6C6C6FFDCDC + DCFFF9F9F9FFC8C8C8FFDEDEDEFFFBFBFBFFCACACAFFE0E0E0FFFEFEFEFFCBCB + CBFFE2E2E2FFFFFFFFFFCCCCCCFFE4E4E4FFFFFFFFFFCECECEFFE5E5E5FFFFFF + FFFFD1D1D1FFE6E6E6FFFFFFFFFFD0D0D0FFE5E5E5FFFAFAFAFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00272727FFFFFF + FFFFEAEAEAFFA2A2A2FFA3A3A3FFB8B8B8FFBCBCBCFF939393FFC7C7C7FFF7F7 + F7FFC3C3C3FFD8D8D8FFF5F5F5FFC4C4C4FFD9D9D9FFF7F7F7FFC6C6C6FFDCDC + DCFFF9F9F9FFC8C8C8FFDEDEDEFFFBFBFBFFCACACAFFE0E0E0FFFEFEFEFFCBCB + CBFFE2E2E2FFFFFFFFFFCCCCCCFFE4E4E4FFFFFFFFFFCECECEFFE5E5E5FFFFFF + FFFFCFCFCFFFE5E5E5FFFFFFFFFFCECECEFFE5E5E5FFFAFAFAFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00222222FFFFFF + FFFFEAEAEAFFA2A2A2FFA3A3A3FFB8B8B8FFBCBCBCFF939393FFC7C7C7FFF7F7 + F7FFC3C3C3FFD8D8D8FFF5F5F5FFC4C4C4FFD9D9D9FFF8F8F8FFC6C6C6FFDADA + DAFFF9F9F9FFC8C8C8FFDEDEDEFFFBFBFBFFCACACAFFE0E0E0FFFEFEFEFFCBCB + CBFFE2E2E2FFFFFFFFFFCCCCCCFFE4E4E4FFFFFFFFFFCFCFCFFFE5E5E5FFFFFF + FFFFD0D0D0FFE5E5E5FFFFFFFFFFCECECEFFE4E4E4FFFAFAFAFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F1FFFFFFF + FFFFECECECFFA6A6A6FFA9A9A9FFBFBFBFFFC2C2C2FF989898FFCFCFCFFFFFFF + FFFFCCCCCCFFE0E0E0FFFEFEFEFFCDCDCDFFE1E1E1FFFFFFFFFFCFCFCFFFE3E3 + E3FFFFFFFFFFD1D1D1FFE5E5E5FFFFFFFFFFD3D3D3FFE7E7E7FFFFFFFFFFD3D3 + D3FFEAEAEAFFFFFFFFFFD5D5D5FFECECECFFFFFFFFFFD6D6D6FFEEEEEEFFFFFF + FFFFD8D8D8FFEEEEEEFFFFFFFFFFD4D4D4FFE8E8E8FFF9F9F9FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001C1C1CFFFFFF + FFFFE8E8E8FF7F7F7FFF6E6E6EFF818181FF828282FF606060FF909090FFBBBB + BBFF8E8E8EFFA1A1A1FFB9B9B9FF919191FFA2A2A2FFBCBCBCFF919191FFA2A2 + A2FFBEBEBEFF919191FFA4A4A4FFBEBEBEFF949494FFA7A7A7FFC0C0C0FF9696 + 96FFA9A9A9FFC2C2C2FF959595FFA9A9A9FFC3C3C3FF979797FFAAAAAAFFC3C3 + C3FF979797FFAAAAAAFFC3C3C3FF959595FFCCCCCCFFF8F8F8FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00181818FFFFFF + FFFFE3E3E3FFF0F0F0FFF7F7F7FFF9F9F9FFF9F9F9FFFAFAFAFFF7F7F7FFF6F6 + F6FFF4F4F4FFF5F5F5FFF7F7F7FFF6F6F6FFF7F7F7FFF9F9F9FFF8F8F8FFFAFA + FAFFFBFBFBFFFAFAFAFFFCFCFCFFFDFDFDFFFDFDFDFFFEFEFEFFFDFDFDFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFF5F5F5FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00151515FFFFFF + FFFFDADADAFFDDDDDDFFDFDFDFFFE0E0E0FFE0E0E0FFE1E1E1FFE3E3E3FFE2E2 + E2FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE8E8E8FFE7E7E7FFE9E9E9FFEAEA + EAFFEAEAEAFFEBEBEBFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFF1F1 + F1FFF0F0F0FFF2F2F2FFF2F2F2FFF3F3F3FFF3F3F3FFF3F3F3FFF5F5F5FFF5F5 + F5FFF5F5F5FFF5F5F5FFF5F5F5FFF3F3F3FFF3F3F3FFF3F3F3FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00262626F6FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0909 + 09F6FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001414146B1F1F + 1FF6232323FF383838FF4D4D4DFF4D4D4DFF4D4D4DFF4C4C4CFF4C4C4CFF4A4A + 4AFF4A4A4AFF494949FF474747FF474747FF464646FF444444FF434343FF4141 + 41FF404040FF3E3E3EFF3D3D3DFF3C3C3CFF393939FF373737FF363636FF3434 + 34FF343434FF343434FF343434FF343434FF343434FF343434FF343434FF3434 + 34FF343434FF343434FF343434FF343434FF1F1F1FFF0A0A0AFF090909F60000 + 006BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000010000000A000000110000001900000021000000280000 + 00300000003800000040000000470000004E000000560000005D000000640000 + 006B00000071000000770000007B0000007C0000007B00000077000000720000 + 006B000000650000005E000000560000004F0000004800000040000000380000 + 003100000029000000210000001A0000001100000006FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000001000000060000000F000000190000 + 0020000000260000002C00000033000000380000003D00000043000000470000 + 004B0000004E00000051000000520000005200000052000000510000004E0000 + 004B00000047000000430000003E00000038000000330000002D000000270000 + 0020000000160000000B00000003FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000100000003000000060000000B0000001000000014000000180000001C0000 + 001F000000230000002600000028000000280000002700000024000000220000 + 001E0000001B00000017000000130000000D000000090000000500000002FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006262626B6B6B + 6BF6616161FF5F5F5FFF5F5F5FFF5D5D5DFF5A5A5AFF595959FF565656FF5454 + 54FF515151FF4E4E4EFF4B4B4BFF484848FF454545FF434343FF404040FF3D3D + 3DFF3A3A3AFF373737FF343434FF313131FF2E2E2EFF2A2A2AFF272727FF2424 + 24FF212121FF1E1E1EFF1B1B1BFF161616FF131313FF101010FF0D0D0DFF0A0A + 0AFF080808FF030303FF000000FF000000FF000000FF000000FF090909F60000 + 006BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006E6E6EF6FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0909 + 09F6FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00676767FFFFFF + FFFFCECECEFFD5D5D5FFD5D5D5FFD6D6D6FFD7D7D7FFD7D7D7FFD9D9D9FFD8D8 + D8FFDADADAFFDADADAFFDADADAFFDBDBDBFFDBDBDBFFDDDDDDFFDDDDDDFFDCDC + DCFFDEDEDEFFDEDEDEFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFE1E1E1FFE1E1 + E1FFE1E1E1FFE1E1E1FFE1E1E1FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2 + E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE0E0E0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00696969FFFFFF + FFFFDBDBDBFFEAEAEAFFF1F1F1FFF3F3F3FFF3F3F3FFF5F5F5FFF5F5F5FFF7F7 + F7FFF6F6F6FFF6F6F6FFF7F7F7FFF7F7F7FFF8F8F8FFF8F8F8FFFAFAFAFFFAFA + FAFFF9F9F9FFFBFBFBFFFAFAFAFFFAFAFAFFFCFCFCFFFCFCFCFFFBFBFBFFFDFD + FDFFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFCFCFCFFFEFEFEFFFEFEFEFFFEFE + FEFFFEFEFEFFFEFEFEFFFEFEFEFFFAFAFAFFF4F4F4FFE6E6E6FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006C6C6CFFFFFF + FFFFDFDFDFFF7C7C7CFF6B6B6BFF7D7D7DFF7F7F7FFF616161FF6F6F6FFF8282 + 82FF626262FF6F6F6FFF848484FF626262FF707070FF858585FF636363FF7171 + 71FF848484FF636363FF717171FF848484FF646464FF727272FF858585FF6565 + 65FF737373FF868686FF666666FF737373FF868686FF666666FF727272FF8585 + 85FF666666FF727272FF858585FF606060FFAFAFAFFFEAEAEAFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00707070FFFFFF + FFFFE5E5E5FFA2A2A2FFA7A7A7FFBBBBBBFFBDBDBDFF9B9B9BFFAAAAAAFFC2C2 + C2FF9C9C9CFFADADADFFC3C3C3FF9E9E9EFFAEAEAEFFC4C4C4FF9E9E9EFFADAD + ADFFC6C6C6FF9F9F9FFFAFAFAFFFC7C7C7FFA0A0A0FFAFAFAFFFC8C8C8FFA1A1 + A1FFB1B1B1FFC9C9C9FFA2A2A2FFB2B2B2FFC9C9C9FFA2A2A2FFB2B2B2FFC9C9 + C9FFA2A2A2FFB2B2B2FFC9C9C9FF9A9A9AFFCFCFCFFFEEEEEEFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00707070FFFFFF + FFFFE3E3E3FF9E9E9EFFA1A1A1FFB4B4B4FFB8B8B8FF949494FFA5A5A5FFBCBC + BCFF979797FFA6A6A6FFBEBEBEFF979797FFA7A7A7FFBEBEBEFF979797FFA8A8 + A8FFBFBFBFFF9A9A9AFFA9A9A9FFBFBFBFFF9A9A9AFFAAAAAAFFC0C0C0FF9B9B + 9BFFABABABFFC2C2C2FF9B9B9BFFABABABFFC2C2C2FF9B9B9BFFABABABFFC1C1 + C1FF9B9B9BFFABABABFFC1C1C1FF939393FFCDCDCDFFEFEFEFFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006E6E6EFFFFFF + FFFFE5E5E5FF9E9E9EFFA1A1A1FFB4B4B4FFB7B7B7FF959595FFA5A5A5FFBDBD + BDFF969696FFA7A7A7FFBEBEBEFF979797FFA7A7A7FFBFBFBFFF989898FFA9A9 + A9FFC0C0C0FF999999FFAAAAAAFFC1C1C1FF9C9C9CFFABABABFFC2C2C2FF9B9B + 9BFFABABABFFC1C1C1FF9B9B9BFFABABABFFC1C1C1FF9B9B9BFFACACACFFC3C3 + C3FF9B9B9BFFACACACFFC3C3C3FF939393FFCFCFCFFFEEEEEEFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006D6D6DFFFFFF + FFFFE6E6E6FFA3A3A3FFA6A6A6FFBCBCBCFFBEBEBEFF9C9C9CFFACACACFFC2C2 + C2FF9D9D9DFFACACACFFC3C3C3FF9C9C9CFFAEAEAEFFC4C4C4FF9F9F9FFFAEAE + AEFFC6C6C6FFA0A0A0FFAFAFAFFFC7C7C7FFA0A0A0FFB0B0B0FFC7C7C7FFA0A0 + A0FFB0B0B0FFC8C8C8FFA0A0A0FFB1B1B1FFC8C8C8FF9F9F9FFFB1B1B1FFC8C8 + C8FF9F9F9FFFB0B0B0FFC7C7C7FF969696FFD2D2D2FFF0F0F0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00686868FFFFFF + FFFFE7E7E7FF878787FF787878FF8B8B8BFF8E8E8EFF6E6E6EFF7C7C7CFF9292 + 92FF6D6D6DFF7E7E7EFF919191FF6F6F6FFF7D7D7DFF929292FF707070FF8080 + 80FF949494FF727272FF808080FF979797FF747474FF838383FF969696FF7373 + 73FF838383FF989898FF767676FF848484FF999999FF777777FF858585FF9A9A + 9AFF777777FF878787FF9C9C9CFF727272FFC2C2C2FFF0F0F0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00656565FFFFFF + FFFFE7E7E7FFA4A4A4FFA6A6A6FFBDBDBDFFBFBFBFFF989898FFCFCFCFFFFFFF + FFFFD0D0D0FFE4E4E4FFFFFFFFFFD1D1D1FFE7E7E7FFFFFFFFFFD3D3D3FFE7E7 + E7FFFFFFFFFFD4D4D4FFE8E8E8FFFFFFFFFFD4D4D4FFE9E9E9FFFFFFFFFFD4D4 + D4FFEBEBEBFFFFFFFFFFD5D5D5FFEBEBEBFFFFFFFFFFD6D6D6FFEBEBEBFFFFFF + FFFFD6D6D6FFEBEBEBFFFFFFFFFFD2D2D2FFE1E1E1FFF0F0F0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00626262FFFFFF + FFFFE5E5E5FFA1A1A1FFA0A0A0FFB6B6B6FFBABABAFF8F8F8FFFC4C4C4FFF3F3 + F3FFBFBFBFFFD5D5D5FFF1F1F1FFC1C1C1FFD6D6D6FFF3F3F3FFC2C2C2FFD8D8 + D8FFF4F4F4FFC4C4C4FFD7D7D7FFF7F7F7FFC4C4C4FFD9D9D9FFF8F8F8FFC5C5 + C5FFDADADAFFF9F9F9FFC6C6C6FFDBDBDBFFF8F8F8FFC7C7C7FFDCDCDCFFFAFA + FAFFC7C7C7FFDCDCDCFFFAFAFAFFC7C7C7FFDADADAFFEEEEEEFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005F5F5FFFFFFF + FFFFE7E7E7FFA0A0A0FFA1A1A1FFB6B6B6FFBABABAFF919191FFC4C4C4FFF4F4 + F4FFBFBFBFFFD5D5D5FFF2F2F2FFC1C1C1FFD7D7D7FFF3F3F3FFC3C3C3FFD8D8 + D8FFF5F5F5FFC4C4C4FFD9D9D9FFF6F6F6FFC5C5C5FFDADADAFFF7F7F7FFC6C6 + C6FFDBDBDBFFF8F8F8FFC7C7C7FFDCDCDCFFFAFAFAFFC7C7C7FFDCDCDCFFF9F9 + F9FFC7C7C7FFDCDCDCFFF9F9F9FFC7C7C7FFDCDCDCFFF0F0F0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005A5A5AFFFFFF + FFFFE8E8E8FFA4A4A4FFA5A5A5FFBCBCBCFFBEBEBEFF959595FFCACACAFFF9F9 + F9FFC5C5C5FFDADADAFFF8F8F8FFC8C8C8FFDDDDDDFFFAFAFAFFC9C9C9FFDDDD + DDFFFBFBFBFFCACACAFFDEDEDEFFFDFDFDFFCACACAFFE2E2E2FFFFFFFFFFD8D4 + D1FFEFEBE8FFFFFFFFFFCFCECEFFE3E3E3FFFFFFFFFFCECECEFFE3E3E3FFFFFF + FFFFCECECEFFE3E3E3FFFFFFFFFFCCCCCCFFE0E0E0FFF2F2F2FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00575757FFFFFF + FFFFE8E8E8FF929292FF898989FF9F9F9FFFA2A2A2FF7B7B7BFFA9A9A9FFD5D5 + D5FFA3A3A3FFB8B8B8FFD0D0D0FFA6A6A6FFBABABAFFD2D2D2FFA8A8A8FFB9B9 + B9FFD5D5D5FFA7A7A7FFBCBCBCFFD8D8D7FFB9B4B1FFDCD2CBFFE3DDD9FF7A8B + 93FF748A98FFD1D1D1FFCEC2BAFFCFC9C5FFE0DEDDFFABABABFFBEBEBEFFDBDB + DBFFABABABFFBEBEBEFFDBDBDBFFA9A9A9FFD2D2D2FFF2F2F2FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00555555FFFFFF + FFFFE8E8E8FF9B9B9BFF999999FFACACACFFB0B0B0FF888888FFB9B9B9FFE7E7 + E7FFB7B7B7FFC9C9C9FFE5E5E5FFB7B7B7FFCCCCCCFFE7E7E7FFBABABAFFCCCC + CCFFE8E8E8FFBABABAFFD2D0D0FFFFF8F4FFBBBAB8FF0D4B70FF10547EFF0E58 + 8AFF0E5B8DFF125481FF004069FFA2ADB7FFFFFFFCFFC8C5C4FFD3D3D3FFEFEF + EFFFBEBEBEFFD3D3D3FFEFEFEFFFBCBCBCFFDBDBDBFFF3F3F3FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00505050FFFFFF + FFFFE9E9E9FFA3A3A3FFA4A4A4FFBBBBBBFFBDBDBDFF939393FFC9C9C9FFF8F8 + F8FFC4C4C4FFDADADAFFF6F6F6FFC6C6C6FFDBDBDBFFF8F8F8FFC7C7C7FFDCDC + DCFFFBFBFBFFC8C8C8FFF3EDE9FFCFDADDFF00406CFF2B79ACFF3081B4FF2A7D + B4FF2779AEFF2777AAFF2371A4FF0D527EFF6F94ABFFEBE2DCFFE5E4E3FFFFFF + FFFFCDCDCDFFE2E2E2FFFFFFFFFFCCCCCCFFE0E0E0FFF4F4F4FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004D4D4DFFFFFF + FFFFE9E9E9FFA3A3A3FFA2A2A2FFB8B8B8FFBABABAFF909090FFC6C6C6FFF7F7 + F7FFC1C1C1FFD7D7D7FFF4F4F4FFC3C3C3FFD7D7D7FFF5F5F5FFC4C4C4FFDADA + DAFFF7F7F7FFCFCDCBFFF9F0E9FF04436CFF2F7DAEFF2D80B5FF3888BEFF3C8C + C1FF3889BFFF2E7FB3FF2071A6FF1C699BFF10537CFFBDC1C3FFF1EBE8FFFEFE + FEFFCBCBCBFFE0E0E0FFFEFEFEFFCBCBCBFFE0E0E0FFF3F3F3FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00494949FFFFFF + FFFFE9E9E9FFA4A4A4FFA5A5A5FFBBBBBBFFBDBDBDFF949494FFC9C9C9FFF9F9 + F9FFC5C5C5FFDADADAFFF7F7F7FFC6C6C6FFDADADAFFFAFAFAFFC6C6C6FFDDDD + DDFFFCFCFCFFDFD8D4FF6A8B9FFF135E92FF2C7FB3FF398BC0FF4898CFFF4DA0 + D6FF4898CFFF3B8CBFFF2B7BB0FF16689BFF1F6DA0FF0F486CFFFFFFF4FFFFFF + FFFFF2DED0FFFFF3E7FFFFFFFFFFD9D3CFFFE3E2E1FFF5F5F5FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00464646FFFFFF + FFFFEAEAEAFF9B9B9BFF999999FFADADADFFAFAFAFFF898989FFBABABAFFE8E8 + E8FFB8B8B8FFCACACAFFE6E6E6FFBABABAFFCBCBCBFFE8E8E8FFBABABAFFCDCD + CDFFEAEAEAFFDCD1CBFF1B5276FF2D7BACFF2D80B5FF4192C7FF53A5DCFF63B6 + EFFF51A3DBFF4091C7FF3080B4FF1C6CA0FF236D9CFF134665FF97BDD5FF2788 + C8FF0776B9FF1379BDFF55A0CFFFC1BDBAFFF4E7DEFFFFFBF8FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00434343FFFFFF + FFFFECECECFF939393FF8B8B8BFF9F9F9FFFA1A1A1FF7C7C7CFFACACACFFD4D4 + D4FFA6A6A6FFBABABAFFD2D2D2FFA8A8A8FFBBBBBBFFD5D5D5FFA9A9A9FFBDBD + BDFFD7D7D7FFD1C5BDFF0A476DFF2F7AAEFF2C7CB3FF3F90C5FF4FA1D7FF5AAC + E3FF4D9FD7FF3F90C5FF2F7FB3FF1C699BFF156496FF0374B9FF3FA1E0FF55B1 + EAFF53AFEBFF4FAEEAFF36A2E4FF0A7AC1FF68A1C5FFFFFFFBFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003E3E3EFFFFFF + FFFFEBEBEBFFA5A5A5FFA7A7A7FFBCBCBCFFBEBEBEFF969696FFCCCCCCFFFDFD + FDFFC7C7C7FFDEDEDEFFFBFBFBFFCACACAFFDEDEDEFFFDFDFDFFCACACAFFE0E0 + E0FFFEFEFEFFF0E5DDFF1B5479FF2777A6FF2676ACFF3688BBFF4192C9FF4598 + CDFF4192C7FF3686BCFF2A77A9FF125F90FF0F7DC3FF64BBEFFF55B0E9FF57B0 + E8FF58AFE7FF4FABE5FF3BA2E4FF3BA4E8FF1C8ACFFF91BFDBFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003C3C3CFFFFFF + FFFFEAEAEAFFA2A2A2FFA3A3A3FFB8B8B8FFBCBCBCFF919191FFC7C7C7FFF7F7 + F7FFC1C1C1FFD8D8D8FFF5F5F5FFC4C4C4FFD9D9D9FFF8F8F8FFC4C4C4FFDBDB + DBFFFAFAFAFFDED7D2FF61859CFF0F5C8BFF1E6FA4FF297AADFF3282B8FF3586 + BBFF3282B6FF2B7AAEFF1F699AFF0570B2FF57AFE9FF55AFE8FF6AB8EAFF7BBF + ECFF7CC0ECFF6EBAE9FF57AFE6FF37A1E2FF35A0E6FF0A7AC0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00393939FFFFFF + FFFFEAEAEAFFA2A2A2FFA3A3A3FFB8B8B8FFBCBCBCFF919191FFC7C7C7FFF7F7 + F7FFC3C3C3FFD8D8D8FFF5F5F5FFC4C4C4FFD9D9D9FFF8F8F8FFC6C6C6FFDADA + DAFFF9F9F9FFDAD5D3FFFFFCF6FF074470FF2E75A9FF186A9DFF2171A5FF2574 + A8FF2372A6FF1B689CFF0D5687FF1A83C8FF5FB6EEFF5FB3E7FF80C2EDFF9ACE + F0FF9DCFF0FF84C3EDFF67B5E9FF47A7E4FF1F94DFFF2594DAFFC1ECFFFF0B00 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00343434FFFFFF + FFFFECECECFFA6A6A6FFA9A9A9FFBFBFBFFFC2C2C2FF9A9A9AFFCECECEFFFFFF + FFFFCCCCCCFFE0E0E0FFFEFEFEFFCDCDCDFFE1E1E1FFFFFFFFFFCFCFCFFFE3E3 + E3FFFFFFFFFFEEE2E3FF96ABA4FF034448FF16517EFF3378AAFF18669AFF0F5F + 93FF0F6093FF166597FF23709FFF3095D4FF52AFEBFF64B6E8FF87C6EEFFADD6 + F3FFB3D9F3FF8CC7EEFF6BB7EAFF4CA9E4FF2395DFFF3AA3E4FF65BDF5FF1706 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00313131FFFFFF + FFFFECECECFF888888FF7C7C7CFF8E8E8EFF909090FF6E6E6EFF989898FFC0C0 + C0FF939393FFA5A5A5FFBDBDBDFF959595FFA6A6A6FFBFBFBFFF959595FFAFAD + ADFFE0D4D5FF25524EFF125C54FF288A79FF004F4DFF0B466FFF24608FFF3071 + A4FF3276A9FF296495FF0A4E78FF2F95D9FF49AAE9FF5DB1E7FF7BBEEBFF92CA + EFFF93CAEFFF7EC1EBFF64B4E9FF47A7E3FF1B92DEFF3CA4E6FF53B5F0FF1807 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002E2E2EFFFFFF + FFFFECECECFFA6A6A6FFA9A9A9FFBFBFBFFFC2C2C2FF9A9A9AFFCECECEFFFFFF + FFFFCCCCCCFFE0E0E0FFFEFEFEFFCCCCCCFFE3E3E3FFFFFFFFFFCFCFCFFFFDF6 + F6FFA6BDBAFF0D5D55FF22857AFF037366FF056A5CFF055948FF196F64FF0643 + 52FF00394EFF094948FF15674BFF1E86C9FF49AAECFF4BAAE5FF65B4E8FF73BC + EBFF74BCEBFF67B5E8FF52ACE5FF369FE0FF1993E0FF2F99DEFFA8E1FFFF0F02 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002A2A2AFFFFFF + FFFFEAEAEAFFA2A2A2FFA3A3A3FFB8B8B8FFBCBCBCFF939393FFC7C7C7FFF7F7 + F7FFC3C3C3FFD8D8D8FFF5F5F5FFC4C4C4FFDADADAFFF7F7F7FFCFCCCCFFFFF2 + F4FF00443FFF2B877DFF006C62FF077267FF09796EFF057062FF198172FF055D + 4EFF055749FF0A6052FF0E745AFF067CBEFF4AAFF5FF319FE3FF48A6E4FF55AD + E5FF54ADE5FF4CA9E4FF39A1E2FF1C92DEFF34A2E8FF127EC4FFFFFFFFFF0100 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00272727FFFFFF + FFFFEAEAEAFFA2A2A2FFA3A3A3FFB8B8B8FFBCBCBCFF939393FFC7C7C7FFF7F7 + F7FFC3C3C3FFD8D8D8FFF5F5F5FFC4C4C4FFD9D9D9FFF7F7F7FFDCD5D6FF7291 + 8EFF156962FF076E63FF056E63FF0A7267FF09756AFF08776CFF087C71FF087A + 6DFF09796EFF05796FFF00786BFF0F6152FF1B83C7FF3EACF2FF2298E2FF2E9B + E0FF2F9BE0FF2597DFFF1993DFFF2EA0E7FF39A8EBFF2E79AAFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00222222FFFFFF + FFFFEAEAEAFFA2A2A2FFA3A3A3FFB8B8B8FFBCBCBCFF939393FFC7C7C7FFF7F7 + F7FFC3C3C3FFD8D8D8FFF5F5F5FFC4C4C4FFD9D9D9FFF8F8F8FFE9DEDFFF205A + 52FF2B8178FF00695CFF086459FF087167FF0A7366FF097368FF097669FF0976 + 6BFF05766CFF007770FF255E4AFFBA5F29FF6E7478FF1284CDFF42AEF5FF3DA8 + EDFF2EA0E7FF3AA7EAFF48B3F6FF2E99DEFF0F70ACFF7B3401FFFFEFDFFF0005 + 0BFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F1FFFFFFF + FFFFECECECFFA6A6A6FFA9A9A9FFBFBFBFFFC2C2C2FF989898FFCFCFCFFFFFFF + FFFFCCCCCCFFE0E0E0FFFEFEFEFFCDCDCDFFE1E1E1FFFFFFFFFFF5E8E9FF104F + 4BFF2E837BFF00655BFF07574FFF087064FF086E63FF087065FF087167FF0772 + 67FF00736DFF365A43FFA6663EFFCB824EFFB56120FFA37B57FF0F6DABFF0E7F + C6FF1481C7FF107FC6FF0975BDFF4B646BFF9E612DFFB7743EFFA76B3EFF321E + 10FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001C1C1CFFFFFF + FFFFE8E8E8FF7F7F7FFF6E6E6EFF818181FF828282FF606060FF909090FFBBBB + BBFF8E8E8EFFA1A1A1FFB9B9B9FF919191FFA2A2A2FFBCBCBCFFB5AAABFF013F + 37FF2D8379FF00574CFF086157FF086B61FF086B60FF086C61FF086C62FF006F + 66FF006964FF95542AFFC47F51FFAF6731FFB36A2FFFC28752FF9E561DFFC7B5 + A9FFA59E9BFFB8ABA4FF8E5931FFA6784CFFA7642FFFA4622CFFB78055FF7941 + 1CFF5C040019FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00181818FFFFFF + FFFFE3E3E3FFF0F0F0FFF7F7F7FFF9F9F9FFF9F9F9FFFAFAFAFFF7F7F7FFF6F6 + F6FFF4F4F4FFF5F5F5FFF7F7F7FFF6F6F6FFF7F7F7FFF9F9F9FFFFFFFFFF6889 + 84FF176D64FF054A43FF046358FF08665CFF08675DFF08685EFF08685EFF006C + 65FF6A4825FFC8865AFFAA6731FFAD6A34FFB26C35FFBB743CFFB06325FFCAAD + 97FFDBE3EAFFE5F0F9FF964D14FFB5733DFFA96631FFA56431FFA0602EFFB385 + 5EFF702600B8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00151515FFFFFF + FFFFDADADAFFDDDDDDFFDFDFDFFFE0E0E0FFE0E0E0FFE1E1E1FFE3E3E3FFE2E2 + E2FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE8E8E8FFE7E7E7FFF7F4F4FFEAE0 + E1FF003A32FF24645DFF0B6D62FF006156FF006055FF005F55FF005F55FF0062 + 5EFF965127FFB87A4AFFA86430FFAA6933FFB06D36FFB36D37FFB4692DFFBF7E + 4BFFFFFFFFFFF3EBE5FFA65616FFAC6834FFA76634FF9C6132FF9F602DFFA975 + 49FF8A4F25E65A070015FFFFFF00FFFFFF00FFFFFF00FFFFFF00262626F6FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFDCE4E3FF0C524DFF2A7B72FF35877DFF3A8D83FF3B8F85FF388F86FF2C84 + 7BFFAB6B42FFAC6D3BFFA4632FFFA46633FFAC6935FFAD6C36FFAD6933FFA14E + 0DFFF0FFFFFFC8AA92FFA1581EFFA76834FFA56533FFA36533FF8B562AFF9D62 + 32FFA67551F96517004DFFFFFF00FFFFFF00FFFFFF00FFFFFF001414146B1F1F + 1FF6232323FF383838FF4D4D4DFF4D4D4DFF4D4D4DFF4C4C4CFF4C4C4CFF4A4A + 4AFF4A4A4AFF494949FF474747FF474747FF464646FF444444FF444444FF4948 + 48FF544E4EFF534A4BFF3B4645FF224644FF0E4643FF0C4742FF074642FF123E + 35FFAD7046FFA86837FF92592BFFA66634FFA76635FFA86734FFA96834FFA155 + 19FFD4D3D0FFB58862FFA15D26FFA36433FFA06332FFA16433FF7B4C25FF9559 + 29FFAF805AFF6726008CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000010000000A000000110000001900000021000000280000 + 00300000003800000040000000470000004E000000560000005D000000640000 + 006B00000071000000780000008400000090000000960000009A0000009B0000 + 009EA25F35F5AC7247FF8E5529FFA16333FFA16332FFA26432FFA36433FF9E59 + 21FFBCA99BFFA56B3BFF9F5F2CFF9E6231FF9C6030FF9C6232FF865127FF7245 + 22FFB17E56FD652A037200000007FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000001000000060000000F000000190000 + 0020000000260000002C00000033000000380000003D00000043000000470000 + 004B0000004E0000005100000052000000520000005500000058000000590000 + 0061944F1FDBAB7E5BFF975A28FF995C2CFF9B5E2DFF9D6030FF9C6030FF9B5A + 27FFA9805EFF995826FF9A5F2DFF985E2FFF965B2DFF945A2AFF8B5125FF6E52 + 3AFF9F5E32ED311A054100000008FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000100000003000000060000000B0000001000000014000000180000001C0000 + 001F000000230000002600000028000000280000002700000024000000220000 + 00211B02004D99592FEDB3835EFFA37147FF9C673AFF995F31FF9A6030FF995E + 2DFF9A5D2EFF985D2EFF985D31FF955E2FFF996137FFA06D46FFAD825CFF9361 + 3CF7904D1FA80000002400000001FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000C3E150045A05827D3A36438E7AA6C44F1AE7850F8AC784FF9AD77 + 50FAAC7750FAAA774EFBAC7650FAAC7650FAAA7149F6A15F34EF9C5621E37C42 + 1C910000002900000007FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000800000020000000321B0C00574020097B3A1D0686361A + 058D3318059133180591361A058E3A1C0589381908780000004B000000370000 + 001E00000003FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000060000001700000028000000320000 + 00390000003D0000003D0000003A00000034000000260000001200000003FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006262626B6B6B + 6BF6616161FF5F5F5FFF5F5F5FFF5D5D5DFF5A5A5AFF595959FF565656FF5454 + 54FF515151FF4E4E4EFF4B4B4BFF484848FF454545FF434343FF404040FF3D3D + 3DFF3A3A3AFF373737FF343434FF313131FF2E2E2EFF2A2A2AFF272727FF2424 + 24FF212121FF1E1E1EFF1B1B1BFF161616FF131313FF101010FF0D0D0DFF0A0A + 0AFF080808FF030303FF000000FF000000FF000000FF000000FF090909F60000 + 006BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006E6E6EF6FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0909 + 09F6FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00676767FFFFFF + FFFFCFCFCFFFD5D5D5FFD5D5D5FFD6D6D6FFD7D7D7FFD7D7D7FFD9D9D9FFD8D8 + D8FFDADADAFFDADADAFFDADADAFFDBDBDBFFDBDBDBFFDDDDDDFFDDDDDDFFDCDC + DCFFDEDEDEFFDEDEDEFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFE1E1E1FFE1E1 + E1FFE1E1E1FFE1E1E1FFE1E1E1FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2 + E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE0E0E0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00696969FFFFFF + FFFFD9D9D9FFE5E5E5FFEAE9EAFFEAE9EAFFEBEAEBFFEDECEDFFEDECEDFFEEEE + EFFFEEEDEEFFEEEDEEFFEFEEEFFFEFEEEFFFF0F0F0FFF0F0F0FFF2F2F1FFF2F2 + F1FFF2F2F1FFF3F3F2FFF3F3F2FFF2F2F2FFF4F4F3FFF4F4F3FFF4F4F3FFF5F5 + F5FFF5F4F5FFF5F4F5FFF5F4F5FFF4F4F4FFF4F4F4FFF6F5F6FFF6F5F6FFF6F5 + F6FFF6F5F6FFF6F5F6FFF5F5F5FFF3F3F3FFF0F0F0FFE5E5E5FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006C6C6CFFFFFF + FFFFDBDBDBFF9C999DFF9D989EFFB6B0B8FFB9B2BBFF938C97FFA69EA8FFBCB6 + BFFF968E98FFA59FA9FFBFB7C1FF978F99FFA7A0A9FFC1BCBEFF999593FFAAAB + A3FFC5C7B9FF9D9E8FFFAEAFA2FFC7C8BAFF9E9F90FFB0B1A2FFC5C3BEFF9896 + 95FFABA4ADFFC4BCC6FF9A949CFFACA3AFFFC4BCC6FF9A939CFFABA3AFFFC4BC + C6FF9A939CFFABA3AFFFC0BAC1FF938D93FFC1C0C1FFE8E8E8FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00707070FFFFFF + FFFFDFDFDFFFC6C0C7FF9AC38DFF91CF7EFF96D383FF78AA68FF86BC74FF99D6 + 86FF78AA68FF85BC74FF99D686FF77AA68FF85BB74FF98DC7DFF7E7CADFF5851 + B7FF6D65CFFF534DA5FF5E57B6FF6D65CFFF534DA5FF5D57B6FF675AD3FF89A9 + 86FF83BC6FFF98D585FF76A967FF85BB73FF98D585FF76A967FF85BB73FF98D5 + 85FF76A967FF85BB73FF90D27CFFADBEA8FFDFDCE0FFEBEBEBFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00707070FFFFFF + FFFFDDDDDDFFC4BDC7FF9CBE91FF97CB87FF9ECF8EFF7FA773FF8DB97FFFA1D3 + 91FF7FA773FF8DB97FFFA1D391FF7FA773FF8DB97FFFA0DC84FF8982B1FF665F + B5FF7D77CDFF635EA3FF6E69B5FF7D77CDFF635EA3FF6E69B5FF7466D4FF95B0 + 8CFF8BBB79FFA1D391FF7FA773FF8DB97FFFA1D391FF7FA773FF8DB97FFFA1D3 + 91FF7FA773FF8DB97FFF95CF84FFAEBAABFFDFDBE0FFEBEBEBFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006E6E6EFFFFFF + FFFFDEDEDEFFC4BCC7FF9CBE91FF97CB87FF9ECF8EFF7FA773FF8DB97FFFA1D3 + 91FF7FA773FF8DB97FFFA1D391FF7FA773FF8DB97FFFA0DC84FF8984B1FF665F + B5FF7D77CDFF635EA3FF6E69B5FF7D77CDFF635EA3FF6E69B5FF7466D4FF95B0 + 8CFF8BBB79FFA1D391FF7FA773FF8DB97FFFA1D391FF7FA773FF8DB97FFFA1D3 + 91FF7FA773FF8DB97FFF95CE84FFB0BCABFFDEDAE0FFEBEBEBFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006D6D6DFFFFFF + FFFFE0E0E0FFC6C1C8FF99C28CFF90CE7CFF95D282FF76AA67FF84BB73FF98D5 + 84FF76A966FF84BB72FF97D584FF76A966FF84BB72FF97DB7CFF7D7CAEFF5850 + B6FF6D65CEFF534CA4FF5D57B6FF6D65CEFF524CA4FF5D57B5FF6659D2FF8AA9 + 85FF82BB6DFF96D483FF75A865FF83B971FF96D483FF75A865FF83B971FF96D4 + 83FF75A865FF83B971FF8ED07AFFAEBFA7FFE1DEE2FFEDEDEDFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00686868FFFFFF + FFFFE1E1E1FFA19EA2FFA69FA8FFBEB4C2FFC4B9C8FF9D92A1FFB0A5B4FFCABF + CEFFA095A4FFB1A6B5FFCBC0CFFFA398A6FFB2A7B6FFCDC5CCFF9F9B9CFFB2B2 + A6FFCBCCC1FFA4A698FFB5B7A8FFCCCDC0FFA4A598FFB7B8A9FFCAC9C3FFA49E + A1FFB7ADB9FFD1C6D5FFA79CABFFB9ADBCFFD1C6D4FFA79CAAFFB8ADBCFFD1C6 + D4FFA79CAAFFB8ADBCFFCDC4D0FF9B969DFFC9C8CAFFEEEEEEFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00656565FFFFFF + FFFFE1E1E1FFC0C0C0FFD7D7D7FFEFEFEFFFF1F1F1FFC6C6C6FFD9D9D9FFF8F8 + F8FFC8C8C8FFDBDBDBFFFAFAFAFFC9C9C9FFDDDDDDFFFBFBFBFFCACACAFFE0E0 + DFFFFFFFFEFFCCCCCBFFE2E2E1FFFFFFFFFFCDCDCCFFE3E3E2FFFFFFFFFFCDCD + CDFFE3E3E3FFFFFFFFFFCDCDCDFFE4E4E4FFFFFFFFFFCFCFCFFFE4E4E4FFFFFF + FFFFCFCFCFFFE4E4E4FFFFFFFFFFCDCDCDFFDFDFDFFFF0F0F0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00626262FFFFFF + FFFFDFDFDFFFBBBBBBFFD0D0D0FFE6E6E6FFEAEAEAFFBDBDBDFFD2D2D2FFEFEF + EFFFBFBFBFFFD4D4D4FFF1F1F1FFC0C0C0FFD4D4D4FFF4F4F4FFC1C1C1FFD7D7 + D7FFF4F4F4FFC3C3C3FFD7D7D7FFF7F7F7FFC4C4C4FFD9D9D9FFF8F8F8FFC5C5 + C5FFDADADAFFF9F9F9FFC6C6C6FFDBDBDBFFF8F8F8FFC7C7C7FFDCDCDCFFFAFA + FAFFC7C7C7FFDCDCDCFFFAFAFAFFC7C7C7FFDADADAFFEEEEEEFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005F5F5FFFFFFF + FFFFE1E1E1FFBBBBBBFFD1D1D1FFE6E6E6FFEAEAEAFFBFBFBFFFD1D1D1FFF0F0 + F0FFBFBFBFFFD4D4D4FFF3F3F3FFC0C0C0FFD6D6D6FFF3F3F3FFC2C2C2FFD7D7 + D7FFF6F6F6FFC3C3C3FFD9D9D9FFF6F6F6FFC5C5C5FFDADADAFFF7F7F7FFC6C6 + C6FFDBDBDBFFF8F8F8FFC7C7C7FFDCDCDCFFFAFAFAFFC7C7C7FFDCDCDCFFFAFA + FAFFC7C7C7FFDCDCDCFFFAFAFAFFC7C7C7FFDCDCDCFFF0F0F0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005A5A5AFFFFFF + FFFFE2E2E2FFBFBFBFFFD6D6D6FFEDEDEDFFF0F0F0FFC4C4C4FFD8D8D8FFF6F6 + F6FFC6C6C6FFD9D9D9FFF8F8F8FFC7C7C7FFDBDBDBFFFAFAFAFFC7C7C7FFDEDE + DEFFFBFBFBFFCACACAFFDEDEDEFFFDFDFDFFCACACAFFE3E2E2FFFFFFFFFFD8D4 + D1FFEFEBE8FFFFFFFFFFCFCECEFFE3E3E3FFFFFFFFFFCCCCCCFFE3E3E3FFFFFF + FFFFCCCCCCFFE3E3E3FFFFFFFFFFCBCBCBFFE0E0E0FFF2F2F2FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00575757FFFFFF + FFFFE2E2E2FFADADABFFBBBCB5FFD5D6CBFFDCDDD0FFB3B4A7FFC6C7BAFFE1E2 + D6FFB3B2ABFFC4C1C2FFDDD7DFFFB1AAB3FFC4BDC6FFDFD8E2FFB4ACB6FFC5BD + C7FFE2DBE5FFB3ABB5FFC7C0CAFFE3DBE4FFC0B6BAFFDFD2CFFFE2DBD8FF7A8B + 93FF748A99FFD0D0D1FFCDC2BCFFD4D0D0FFE4E6EAFFB0B4BAFFC5C9CFFFDFE3 + E9FFB0B4BAFFC5C9CFFFDEE1E6FFABADB0FFD3D4D5FFF2F2F2FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00555555FFFFFF + FFFFE2E2E2FFBDBDB7FF9894B7FF837FC0FF8B86C4FF6E6B9FFF7C77AEFF8F8A + C8FF6960A3FF9BB095FFA8CE99FF84A17AFF94B68AFFAACE9DFF86A27AFF93B5 + 89FFAACE9DFF87A37BFF97B98BFFB8D99EFF80A072FF0B4A6DFF0F537DFF0E58 + 88FF0E5C8CFF0F507AFF00395FFF888679FFE9C8A0FFAC987DFFB6A58BFFD0BC + 9FFFA4947CFFB6A58BFFCDB797FFB3ADA6FFDBDCDEFFF4F4F4FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00505050FFFFFF + FFFFE3E3E3FFCBCCC1FF908BC0FF6B64C5FF756ECAFF5D58A4FF6863B6FF7770 + CEFF5447ABFFA2C792FF9BD588FF7CA86FFF8AB97BFF9DD48CFF7CA86FFF8AB9 + 7BFF9DD38CFF7CA86FFF97C57DFF7FB67EFF00406EFF307BB2FF3081B5FF2B7D + B4FF2779AFFF2878ACFF2574AAFF0E5482FF5B7176FFC09B70FFBCA07AFFD3B6 + 8CFFA78F6EFFB99F7AFFCEAE80FFC0B8AEFFE2E4E7FFF4F4F4FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004D4D4DFFFFFF + FFFFE2E2E2FFCCCDC2FF928DBFFF6F69C4FF7B75CAFF635EA3FF6E69B5FF7D77 + CDFF584BABFFA5C893FF9ED48BFF7FA773FF8DB97FFFA1D391FF7FA773FF8DB9 + 7FFFA1D391FF85AC74FF9FC87DFF06446FFF3680B7FF2D80B5FF3888BEFF3C8C + C1FF3889BFFF2E7FB3FF2071A6FF1E6DA1FF11567FFF9C8A70FFC6A780FFD3B8 + 91FFA79173FFB9A17FFFCDAF83FFBFB8AFFFE2E4E7FFF4F4F4FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00494949FFFFFF + FFFFE3E3E3FFCCCDC3FF918CC2FF6A63C5FF746ECAFF5C57A4FF6762B5FF776F + CEFF5346ABFFA1C691FF9BD587FF7BA86EFF89B97AFF9DD38CFF7BA76EFF89B9 + 7AFF9DD38CFF8AB370FF427A70FF1E639FFF2D7FB4FF398BC0FF4898CFFF4DA0 + D6FF4898CFFF3B8CBFFF2B7BB0FF16699CFF2373A9FF0D4568FFE2AF77FFEEBC + 83FFC79764FFD6A670FFE3B37AFFCCBCADFFE5E5E7FFF5F5F5FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00464646FFFFFF + FFFFE4E4E4FFBCBCB6FF9997B8FF8783C1FF908CC6FF746FA0FF807DB1FF938E + C9FF6E66A5FF9DB39AFFACCF9FFF88A27EFF96B58EFFAFCFA3FF88A380FF98B7 + 8EFFAECFA2FFA2B787FF134E6DFF317DB1FF2D80B5FF4192C7FF53A5DCFF63B6 + EFFF51A3DBFF4091C7FF3080B4FF1C6CA0FF246E9EFF134666FF87A3B0FF2586 + C6FF0E7CC4FF147CC3FF4A91B8FFB7B2A9FFF2E6DFFFFFFBF9FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00434343FFFFFF + FFFFE6E6E6FFAEAEACFFBCBCB5FFD7D8CDFFDBDCD0FFB4B5A9FFC7C8BCFFE1E2 + D6FFB3B3ACFFC5C1C2FFDED8E0FFB3ACB5FFC5BFC8FFE1DAE4FFB3ACB6FFC8C1 + CAFFE2DBE4FFD9C8C6FF0F4973FF307BAFFF2C7CB3FF3F90C5FF4FA1D7FF5AAC + E3FF4D9FD7FF3F90C5FF2F7FB3FF1C699BFF156497FF0577BCFF41A4E5FF57B5 + EFFF54B2EFFF50B1EEFF39A5E9FF0C7CC5FF69A2C7FFFFFFFBFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003E3E3EFFFFFF + FFFFE5E5E5FFC0C0C0FFD6D6D6FFEFEFEFFFF1F1F1FFC6C6C6FFDADADAFFF9F9 + F9FFC6C6C6FFDDDDDDFFFBFBFBFFC8C8C8FFDEDEDEFFFEFEFEFFCACACAFFE1E1 + E1FFFEFEFEFFF0E5DDFF1B5479FF2777A6FF2676ACFF3688BBFF4192C9FF4598 + CDFF4192C7FF3686BCFF2A77A9FF125F90FF0F7DC3FF64BBEFFF55B0E9FF57B0 + E8FF58AFE7FF4FABE5FF3BA2E4FF3BA4E8FF1C8ACFFF91BFDBFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003C3C3CFFFFFF + FFFFE4E4E4FFBFBFBFFFD1D1D1FFE9E9E9FFEDEDEDFFC0C0C0FFD4D4D4FFF4F4 + F4FFC0C0C0FFD7D7D7FFF6F6F6FFC3C3C3FFD9D9D9FFF8F8F8FFC4C4C4FFDBDB + DBFFFAFAFAFFDED7D3FF61859CFF0F5C8BFF1E6FA4FF297AADFF3282B8FF3586 + BBFF3282B6FF2B7AAEFF1F699AFF0570B2FF57AFE9FF55AFE8FF6AB8EAFF7BBF + ECFF7CC0ECFF6EBAE9FF57AFE6FF37A1E2FF35A0E6FF0A7AC0FFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00393939FFFFFF + FFFFE4E4E4FFBFBFBFFFD1D1D1FFE9E9E9FFEDEDEDFFC0C0C0FFD4D4D4FFF3F3 + F3FFC2C2C2FFD7D7D7FFF6F6F6FFC4C4C4FFD9D9D9FFF8F8F8FFC6C6C6FFDADA + DAFFFAFAFAFFD8D3D1FFFFFCF6FF074470FF2E75A9FF186A9DFF2171A5FF2574 + A8FF2372A6FF1B689CFF0D5687FF1A83C8FF5FB6EEFF5FB3E7FF80C2EDFF9ACE + F0FF9DCFF0FF84C3EDFF67B5E9FF47A7E4FF1F94DFFF2594DAFFC1ECFFFF0B00 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00343434FFFFFF + FFFFE6E6E6FFC3C3C3FFD9D9D9FFF2F2F2FFF6F6F6FFC9C9C9FFDDDDDDFFFCFC + FCFFCBCBCBFFDFDFDFFFFEFEFEFFCDCDCDFFE2E2E2FFFFFFFFFFCFCFCFFFE3E3 + E3FFFFFFFFFFEDE1E2FF96ACA4FF034448FF16517EFF3378AAFF18669AFF0F5F + 93FF0F6093FF166597FF23709FFF3095D4FF52AFEBFF64B6E8FF87C6EEFFADD6 + F3FFB3D9F3FF8CC7EEFF6BB7EAFF4CA9E4FF2395DFFF3AA3E4FF65BDF5FF1706 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00313131FFFFFF + FFFFE6E6E6FFA1A3A4FFA4A7ACFFB9BEC7FFBCC2CBFF979DA6FFA9AFB7FFC3C9 + D1FF9AA0A9FFABB1BAFFC8CDD0FFA4A7A1FFBDBEADFFD9DBC7FFB1B29EFFC7C6 + B5FFEEE3D9FF2A584FFF135D54FF288A79FF004F4DFF0B466FFF24608FFF3071 + A4FF3276A9FF296495FF0A4E78FF2F95D9FF49AAE9FF5DB1E7FF7BBEEBFF92CA + EFFF93CAEFFF7EC1EBFF64B4E9FF47A7E3FF1B92DEFF3CA4E6FF53B5F0FF1807 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002E2E2EFFFFFF + FFFFE6E6E6FFC5C8CCFFC6B296FFCDAA7AFFD1B081FFA98D66FFBA9C72FFD4B3 + 83FFA88C66FFBA9C72FFDAB67BFF7C76ADFF554FB5FF6B63CDFF504AA3FF6658 + C1FF3D4E94FF0C5C56FF22857AFF037366FF056A5CFF055948FF196F64FF0643 + 52FF00394EFF094948FF15674BFF1E86C9FF49AAECFF4BAAE5FF65B4E8FF73BC + EBFF74BCEBFF67B5E8FF52ACE5FF369FE0FF1993E0FF2F99DEFFA8E1FFFF0F02 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002A2A2AFFFFFF + FFFFE4E4E4FFC2C6CCFFC2B29AFFCAAD85FFCFB48EFFA79173FFB9A17FFFD3B8 + 91FFA79173FFB9A17FFFDCBD84FF8481B2FF6560B5FF7D77CDFF6760A8FF7D6A + C5FF024841FF338F80FF006C62FF077267FF09796EFF057062FF198172FF055D + 4EFF055749FF0A6052FF0E745AFF067CBEFF4AAFF5FF319FE3FF48A6E4FF55AD + E5FF54ADE5FF4CA9E4FF39A1E2FF1C92DEFF34A2E8FF127EC4FFFFFFFFFF0100 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00272727FFFFFF + FFFFE4E4E4FFC2C6CCFFC2B29AFFCAAD85FFCFB48EFFA79173FFB9A17FFFD3B8 + 91FFA79173FFB9A17FFFDCBD84FF8481B2FF6560B5FF7D77CDFF6E61AFFF3753 + 79FF257A68FF086F64FF056E63FF0A7267FF09756AFF08776CFF087C71FF087A + 6DFF09796EFF05796FFF00786BFF0F6152FF1B83C7FF3EACF2FF2298E2FF2E9B + E0FF2F9BE0FF2597DFFF1993DFFF2EA0E7FF39A8EBFF2E79AAFFFFFFFFFF0000 + 00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00222222FFFFFF + FFFFE4E4E4FFC3C6CCFFC0B099FFCAAD85FFCFB48EFFA79173FFB9A17FFFD3B8 + 91FFA79173FFB9A17FFFDCBC84FF8481B2FF6460B5FF7D76CDFF7463B6FF0D45 + 4BFF348B7CFF00695CFF086459FF087167FF0A7366FF097368FF097669FF0976 + 6BFF05766CFF007770FF255E4AFFBA5F29FF6E7478FF1284CDFF42AEF5FF3DA8 + EDFF2EA0E7FF3AA7EAFF48B3F6FF2E99DEFF0F70ACFF7B3401FFFFEFDFFF0005 + 0BFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F1FFFFFFF + FFFFE6E6E6FFC6C8CCFFC4B194FFCDAB7AFFD1B081FFA98D66FFBA9C72FFD5B3 + 84FFA98C66FFBA9C72FFDAB67BFF8179ADFF5A52B6FF6F67CFFF6E58BAFF003D + 45FF32877CFF00655BFF07574FFF087064FF086E63FF087065FF087167FF0772 + 67FF00736DFF365A43FFA6663EFFCB824EFFB56120FFA37B57FF0F6DABFF0E7F + C6FF1481C7FF107FC6FF0975BDFF4B646BFF9E612DFFB7743EFFA76B3EFF321E + 10FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001C1C1CFFFFFF + FFFFE4E4E4FF9E9FA1FF9FA2A7FFB8BDC5FFBAC0C9FF949AA2FFA5ABB4FFBFC5 + CEFF959BA3FFA8AEB6FFC4C9CCFF9EA29BFFB8BAA9FFD5D7C3FFC8BDB0FF0C4A + 3BFF2F8579FF00574CFF086157FF086B61FF086B60FF086C61FF086C62FF006F + 66FF006964FF95542AFFC47F51FFAF6731FFB36A2FFFC28752FF9E561DFFC7B5 + A9FFA59E9BFFB8ABA4FF8E5931FFA6784CFFA7642FFFA4622CFFB78055FF7941 + 1CFF5C040019FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00181818FFFFFF + FFFFE1E1E1FFEBEBEBFFEFEFEFFFEFEFEFFFF0F0F0FFF2F2F2FFF4F4F4FFF5F5 + F5FFF4F4F4FFF6F6F6FFF7F7F7FFF6F6F6FFF8F8F8FFF9F9F9FFFFFFFFFF6889 + 84FF176D64FF054A43FF046358FF08665CFF08675DFF08685EFF08685EFF006C + 65FF6A4825FFC8865AFFAA6731FFAD6A34FFB26C35FFBB743CFFB06325FFCAAD + 97FFDBE3EAFFE5F0F9FF964D14FFB5733DFFA96631FFA56431FFA0602EFFB385 + 5EFF702600B8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00151515FFFFFF + FFFFDADADAFFDDDDDDFFDFDFDFFFE0E0E0FFE0E0E0FFE1E1E1FFE3E3E3FFE2E2 + E2FFE4E4E4FFE5E5E5FFE5E5E5FFE6E6E6FFE8E8E8FFE7E7E7FFF7F4F4FFEAE0 + E1FF003A32FF24645DFF0B6D62FF006156FF006055FF005F55FF005F55FF0062 + 5EFF965127FFB87A4AFFA86430FFAA6933FFB06D36FFB36D37FFB4692DFFBF7E + 4BFFFFFFFFFFF3EBE5FFA65616FFAC6834FFA76634FF9C6132FF9F602DFFA975 + 49FF8A4F25E65A070015FFFFFF00FFFFFF00FFFFFF00FFFFFF00262626F6FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFDCE4E3FF0C524DFF2A7B72FF35877DFF3A8D83FF3B8F85FF388F86FF2C84 + 7BFFAB6B42FFAC6D3BFFA4632FFFA46633FFAC6935FFAD6C36FFAD6933FFA14E + 0DFFF0FFFFFFC8AA92FFA1581EFFA76834FFA56533FFA36533FF8B562AFF9D62 + 32FFA67551F96517004DFFFFFF00FFFFFF00FFFFFF00FFFFFF001414146B1F1F + 1FF6232323FF383838FF4D4D4DFF4D4D4DFF4D4D4DFF4C4C4CFF4C4C4CFF4A4A + 4AFF4A4A4AFF494949FF474747FF474747FF464646FF444444FF444444FF4948 + 48FF544E4EFF534A4BFF3B4645FF224644FF0E4643FF0C4742FF074642FF123E + 35FFAD7046FFA86837FF92592BFFA66634FFA76635FFA86734FFA96834FFA155 + 19FFD4D3D0FFB58862FFA15D26FFA36433FFA06332FFA16433FF7B4C25FF9559 + 29FFAF805AFF6726008CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000010000000A000000110000001900000021000000280000 + 00300000003800000040000000470000004E000000560000005D000000640000 + 006B00000071000000780000008400000090000000960000009A0000009B0000 + 009EA25F35F5AC7247FF8E5529FFA16333FFA16332FFA26432FFA36433FF9E59 + 21FFBCA99BFFA56B3BFF9F5F2CFF9E6231FF9C6030FF9C6232FF865127FF7245 + 22FFB17E56FD652A037200000007FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000001000000060000000F000000190000 + 0020000000260000002C00000033000000380000003D00000043000000470000 + 004B0000004E0000005100000052000000520000005500000058000000590000 + 0061944F1FDBAB7E5BFF975A28FF995C2CFF9B5E2DFF9D6030FF9C6030FF9B5A + 27FFA9805EFF995826FF9A5F2DFF985E2FFF965B2DFF945A2AFF8B5125FF6E52 + 3AFF9F5E32ED311A054100000008FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 000100000003000000060000000B0000001000000014000000180000001C0000 + 001F000000230000002600000028000000280000002700000024000000220000 + 00211B02004D99592FEDB3835EFFA37147FF9C673AFF995F31FF9A6030FF995E + 2DFF9A5D2EFF985D2EFF985D31FF955E2FFF996137FFA06D46FFAD825CFF9361 + 3CF7904D1FA80000002400000001FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000C3E150045A05827D3A36438E7AA6C44F1AE7850F8AC784FF9AD77 + 50FAAC7750FAAA774EFBAC7650FAAC7650FAAA7149F6A15F34EF9C5621E37C42 + 1C910000002900000007FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000800000020000000321B0C00574020097B3A1D0686361A + 058D3318059133180591361A058E3A1C0589381908780000004B000000370000 + 001E00000003FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000060000001700000028000000320000 + 00390000003D0000003D0000003A00000034000000260000001200000003FFFF + FF00FFFFFF00FFFFFF00FFFFFF00 + } + end +end diff --git a/components/rx/version/2.1/Demos/RxViewsPanel/unit1.pas b/components/rx/version/2.1/Demos/RxViewsPanel/unit1.pas new file mode 100644 index 000000000..f57dcb691 --- /dev/null +++ b/components/rx/version/2.1/Demos/RxViewsPanel/unit1.pas @@ -0,0 +1,67 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, + Buttons, StdCtrls, Grids, ComCtrls, rxtoolbar, RxViewsPanel, ExtendedNotebook; + +type + + { TForm1 } + + TForm1 = class(TForm) + ExtendedNotebook1: TExtendedNotebook; + ImageList2: TImageList; + Memo1: TMemo; + Page1: TPage; + Page2: TPage; + Page3: TPage; + Page4: TPage; + PaintBox1: TPaintBox; + RxViewsPanel1: TRxViewsPanel; + Splitter1: TSplitter; + Splitter2: TSplitter; + StatusBar1: TStatusBar; + StringGrid1: TStringGrid; + StringGrid2: TStringGrid; + StringGrid3: TStringGrid; + StringGrid4: TStringGrid; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + TabSheet3: TTabSheet; + TabSheet4: TTabSheet; + ToolPanel1: TToolPanel; + procedure FormCreate(Sender: TObject); + procedure RxViewsPanel1SelectViewEvent(Sender: TObject; ItemIndex: integer; + const Item: TRxViewsPanelItem); + private + // + public + { public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.lfm} + +{ TForm1 } + +procedure TForm1.FormCreate(Sender: TObject); +begin + RxViewsPanel1.ItemIndex:=1; +end; + +procedure TForm1.RxViewsPanel1SelectViewEvent(Sender: TObject; + ItemIndex: integer; const Item: TRxViewsPanelItem); +begin + ExtendedNotebook1.PageIndex:=ItemIndex +end; + +end. + diff --git a/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_case_1.pas b/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_case_1.pas new file mode 100644 index 000000000..7e925b083 --- /dev/null +++ b/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_case_1.pas @@ -0,0 +1,182 @@ +unit rx_ext_test_case_1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, fpcunit, testutils, testregistry, rxmemds, Dialogs; + +type + + { TTCRxMemDataLifecycle } + + TTCRxMemDataLifecycle= class(TTestCase) + protected + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestHookUp; + procedure TestSave; + end; + +implementation + +uses + db, ex_rx_datapacket; + +procedure TTCRxMemDataLifecycle.TestHookUp; +var + ads : TRxMemoryData; + aField : TField; + i : integer; +begin + ads := TRxMemoryData.Create(nil); + + aField := TIntegerField.Create(nil); + aField.FieldName:= 'IntegerField1'; + aField.Name := 'adsIntegerField1'; + aField.DataSet := ads; + + aField := TStringField.Create(nil); + aField.FieldName:= 'StringField1'; + aField.Name := 'adsStringField1'; + aField.Size := 20; + aField.DataSet := ads; + + aField := TFloatField.Create(nil); + aField.FieldName:= 'FloatField1'; + aField.Name := 'adsFloatField1'; + aField.DataSet := ads; + + ads.Open; + + for i := 0 to 500 do + begin + ads.AppendRecord([i,'Name '+ IntToStr(i), 200 + (i*0.1)]); + end; + + ads.First; + + i:= 0; + while not ads.EOF do + begin + AssertTrue('Integer is incorrect ' + IntToStr(i), ads.FieldByName('IntegerField1').AsInteger = i); + AssertTrue('Float is incorrect ' + IntToStr(i), ads.FieldByName('FloatField1').AsFloat - (200 + (i*0.1)) < 0.01); + AssertTrue('String is incorrect ' + IntToStr(i), ads.FieldByName('StringField1').AsString = 'Name '+ IntToStr(i)); + inc(i); + ads.Next; + end; + + +end; + +procedure TTCRxMemDataLifecycle.TestSave; +var + ads1,ads2 : TRxMemoryData; + aField : TField; + i : integer; + sMemoTest : String; +begin + ads1 := TRxMemoryData.Create(nil); + ads2 := TRxMemoryData.Create(nil); + + aField := TIntegerField.Create(nil); + aField.FieldName:= 'IntegerField1'; + aField.Name := 'adsIntegerField1'; + aField.DataSet := ads1; + + aField := TStringField.Create(nil); + aField.FieldName:= 'StringField1'; + aField.Name := 'adsStringField1'; + aField.Size := 20; + aField.DataSet := ads1; + + aField := TFloatField.Create(nil); + aField.FieldName:= 'FloatField1'; + aField.Name := 'adsFloatField1'; + aField.DataSet := ads1; + + // TBooleanField + + aField := TBooleanField.Create(nil); + aField.FieldName:= 'BooleanField1'; + aField.Name := 'adsBooleanField1'; + aField.DataSet := ads1; + + // TDateTimeField + + aField := TDateTimeField.Create(nil); + aField.FieldName:= 'DateTimeField1'; + aField.Name := 'adsDateTimeField1'; + aField.DataSet := ads1; + + + // TMemoField + + aField := TMemoField.Create(nil); + aField.FieldName:= 'MemoField1'; + aField.Name := 'adsMemoField1'; + aField.Size:= 600; + aField.DataSet := ads1; + + // TCurrencyField + + aField := TCurrencyField.Create(nil); + aField.FieldName:= 'CurrencyField1'; + aField.Name := 'adsCurrencyField1'; + aField.DataSet := ads1; + + ads1.Open; + ads2.Open; + + sMemoTest := 'memo1'; + for i := 0 to 500 do + begin + ads1.AppendRecord([i,'Name '+ IntToStr(i), 200 + (i*0.1),(i div 2) = 1, EncodeDate(2011,10,03) + i, sMemoTest, 1000 + (i*0.1)]); + sMemoTest := sMemoTest + 'a'; + end; + + ads1.SaveToFile('/tmp/testfile.xml',dfXML); + ads2.LoadFromFile('/tmp/testfile.xml',dfXML); + + ads2.First; + + sMemoTest := 'memo1'; + i:= 0; + while not ads2.EOF do + begin + AssertTrue('Integer is incorrect ' + IntToStr(i), ads2.FieldByName('IntegerField1').AsInteger = i); + AssertTrue('Float is incorrect ' + IntToStr(i), ads2.FieldByName('FloatField1').AsFloat - (200 + (i*0.1)) < 0.01); + AssertTrue('String is incorrect ' + IntToStr(i), ads2.FieldByName('StringField1').AsString = 'Name '+ IntToStr(i)); + + AssertTrue('Currency is incorrect ' + IntToStr(i), ads2.FieldByName('CurrencyField1').AsFloat - (1000 + (i*0.1)) < 0.01); + AssertTrue('DateTime is incorrect ' + IntToStr(i), ads2.FieldByName('DateTimeField1').AsDateTime = EncodeDate(2011,10,03) + i); + AssertTrue('Memo is incorrect ' + IntToStr(i) + ads2.FieldByName('MemoField1').AsString, StrComp(Pchar(ads2.FieldByName('MemoField1').asString),Pchar(sMemoTest)) = 0); + + sMemoTest := sMemoTest + 'a'; + inc(i); + ads2.Next; + end; + + ads1.Free; + ads2.Free; + + +end; + +procedure TTCRxMemDataLifecycle.SetUp; +begin + +end; + +procedure TTCRxMemDataLifecycle.TearDown; +begin + +end; + +initialization + + RegisterTest(TTCRxMemDataLifecycle); +end. + diff --git a/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.lpi b/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.lpi new file mode 100644 index 000000000..5ef0da83b --- /dev/null +++ b/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.lpi @@ -0,0 +1,309 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <General> + <MainUnit Value="0"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <ActiveWindowIndexAtStart Value="0"/> + </General> + <i18n> + <EnableI18N LFM="False"/> + </i18n> + <VersionInfo> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1" Active="Default"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="4"> + <Item1> + <PackageName Value="rxnew"/> + </Item1> + <Item2> + <PackageName Value="FPCUnitTestRunner"/> + </Item2> + <Item3> + <PackageName Value="LCL"/> + </Item3> + <Item4> + <PackageName Value="FCL"/> + </Item4> + </RequiredPackages> + <Units Count="19"> + <Unit0> + <Filename Value="rx_ext_test_harness.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="rx_ext_test_harness"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="35" Y="9"/> + <UsageCount Value="27"/> + </Unit0> + <Unit1> + <Filename Value="rx_ext_test_case_1.pas"/> + <IsPartOfProject Value="True"/> + <UnitName Value="rx_ext_test_case_1"/> + <EditorIndex Value="0"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="33" Y="120"/> + <UsageCount Value="27"/> + <Loaded Value="True"/> + </Unit1> + <Unit2> + <Filename Value="/usr/local/src/fpc-2.4.2/packages/fcl-fpcunit/src/testregistry.pp"/> + <UnitName Value="testregistry"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="12"/> + </Unit2> + <Unit3> + <Filename Value="../../../lazarus/components/rxnew/rx/rxmemds.pas"/> + <UnitName Value="rxmemds"/> + <WindowIndex Value="0"/> + <TopLine Value="18"/> + <CursorPos X="14" Y="41"/> + <UsageCount Value="13"/> + </Unit3> + <Unit4> + <Filename Value="../../../lazarus/components/fpcunit/guitestrunner.pas"/> + <UnitName Value="GuiTestRunner"/> + <EditorIndex Value="2"/> + <WindowIndex Value="0"/> + <TopLine Value="207"/> + <CursorPos X="1" Y="247"/> + <UsageCount Value="13"/> + <Loaded Value="True"/> + </Unit4> + <Unit5> + <Filename Value="/usr/local/src/fpc-2.4.2/packages/fcl-fpcunit/src/fpcunit.pp"/> + <UnitName Value="fpcunit"/> + <WindowIndex Value="0"/> + <TopLine Value="1226"/> + <CursorPos X="10" Y="908"/> + <UsageCount Value="12"/> + </Unit5> + <Unit6> + <Filename Value="../../../lazarus/components/rxnew/rx/ex_rx_datapacket.pas"/> + <UnitName Value="ex_rx_datapacket"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="11"/> + </Unit6> + <Unit7> + <Filename Value="../../../lazarus/components/rxnew/rx/ex_rx_xml_datapacket.pas"/> + <UnitName Value="ex_rx_xml_datapacket"/> + <WindowIndex Value="0"/> + <TopLine Value="329"/> + <CursorPos X="30" Y="342"/> + <UsageCount Value="11"/> + </Unit7> + <Unit8> + <Filename Value="/usr/local/src/fpc-2.4.2/packages/fcl-db/src/base/db.pas"/> + <UnitName Value="db"/> + <WindowIndex Value="0"/> + <TopLine Value="238"/> + <CursorPos X="17" Y="255"/> + <UsageCount Value="11"/> + </Unit8> + <Unit9> + <Filename Value="/usr/local/src/fpc-2.4.2/rtl/objpas/sysutils/datih.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="100"/> + <CursorPos X="10" Y="109"/> + <UsageCount Value="11"/> + </Unit9> + <Unit10> + <Filename Value="/usr/local/src/fpc-2.4.2/rtl/objpas/sysutils/dati.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="1101"/> + <CursorPos X="3" Y="1108"/> + <UsageCount Value="11"/> + </Unit10> + <Unit11> + <Filename Value="/usr/local/src/fpc-2.4.2/rtl/objpas/sysutils/syspchh.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="12"/> + <CursorPos X="10" Y="29"/> + <UsageCount Value="11"/> + </Unit11> + <Unit12> + <Filename Value="/usr/local/src/fpc-2.4.2/rtl/inc/genstr.inc"/> + <WindowIndex Value="0"/> + <TopLine Value="243"/> + <CursorPos X="9" Y="248"/> + <UsageCount Value="11"/> + </Unit12> + <Unit13> + <Filename Value="/usr/local/share/lazarus/components/rxnew/rxmemds.pas"/> + <UnitName Value="rxmemds"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="1"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="45" Y="40"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit13> + <Unit14> + <Filename Value="/usr/local/share/lazarus/components/rxnew/ex_rx_bin_datapacket.pas"/> + <UnitName Value="ex_rx_bin_datapacket"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="10"/> + </Unit14> + <Unit15> + <Filename Value="/usr/local/share/lazarus/components/rxnew/ex_rx_datapacket.pas"/> + <UnitName Value="ex_rx_datapacket"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="1" Y="1"/> + <UsageCount Value="10"/> + </Unit15> + <Unit16> + <Filename Value="/usr/local/share/lazarus/components/rxnew/ex_rx_xml_datapacket.pas"/> + <UnitName Value="ex_rx_xml_datapacket"/> + <WindowIndex Value="0"/> + <TopLine Value="323"/> + <CursorPos X="80" Y="343"/> + <UsageCount Value="10"/> + </Unit16> + <Unit17> + <Filename Value="../rx/rxmemds.pas"/> + <UnitName Value="rxmemds"/> + <WindowIndex Value="0"/> + <TopLine Value="3"/> + <CursorPos X="3" Y="41"/> + <UsageCount Value="10"/> + </Unit17> + <Unit18> + <Filename Value="../../../../install/fpcsrc/packages/fcl-db/src/base/db.pas"/> + <UnitName Value="db"/> + <WindowIndex Value="0"/> + <TopLine Value="1367"/> + <CursorPos X="3" Y="1339"/> + <UsageCount Value="10"/> + </Unit18> + </Units> + <JumpHistory Count="20" HistoryIndex="19"> + <Position1> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="134" Column="1" TopLine="111"/> + </Position1> + <Position2> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="135" Column="1" TopLine="111"/> + </Position2> + <Position3> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="94" Column="18" TopLine="71"/> + </Position3> + <Position4> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="101" Column="1" TopLine="81"/> + </Position4> + <Position5> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="123" Column="1" TopLine="93"/> + </Position5> + <Position6> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="116" Column="1" TopLine="93"/> + </Position6> + <Position7> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="108" Column="2" TopLine="93"/> + </Position7> + <Position8> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="150" Column="119" TopLine="122"/> + </Position8> + <Position9> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="133" Column="81" TopLine="122"/> + </Position9> + <Position10> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="120" Column="39" TopLine="91"/> + </Position10> + <Position11> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="151" Column="164" TopLine="134"/> + </Position11> + <Position12> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="137" Column="15" TopLine="115"/> + </Position12> + <Position13> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="154" Column="164" TopLine="136"/> + </Position13> + <Position14> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="137" Column="41" TopLine="130"/> + </Position14> + <Position15> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="157" Column="7" TopLine="140"/> + </Position15> + <Position16> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="137" Column="16" TopLine="127"/> + </Position16> + <Position17> + <Filename Value="rx_ext_test_case_1.pas"/> + <Caret Line="120" Column="33" TopLine="1"/> + </Position17> + <Position18> + <Filename Value="/usr/local/share/lazarus/components/rxnew/rxmemds.pas"/> + <Caret Line="207" Column="5" TopLine="268"/> + </Position18> + <Position19> + <Filename Value="/usr/local/share/lazarus/components/rxnew/rxmemds.pas"/> + <Caret Line="1689" Column="1" TopLine="1690"/> + </Position19> + <Position20> + <Filename Value="/usr/local/share/lazarus/components/rxnew/rxmemds.pas"/> + <Caret Line="73" Column="42" TopLine="53"/> + </Position20> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + </SearchPaths> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.lpr b/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.lpr new file mode 100644 index 000000000..cb6f1ec6f --- /dev/null +++ b/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.lpr @@ -0,0 +1,15 @@ +program rx_ext_test_harness; + +{$mode objfpc}{$H+} + +uses + Interfaces, Forms, GuiTestRunner, rxnew, rx_ext_test_case_1; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TGuiTestRunner, TestRunner); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.res b/components/rx/version/2.1/Demos/TestRXMemDSLoad/rx_ext_test_harness.res new file mode 100644 index 0000000000000000000000000000000000000000..e66ecf85feb5a99d4bc85c4973bd1bb2e918b668 GIT binary patch literal 855 zcma)4OKaOe5O(RUP{^%0E_*CkiWA4QL2@vm1=9yPq%A$JS0j7rzPhvPM87^ANq#6L zlnPeN&dkny-#0TFjYf>l<70oweDb|{xsRVx&WkQ~a&k;5t{;qMTL`F}E%_un;|#2H zm9p!Sf4loQe#aR`VJo4Xg_1Xb{CfWSRUr_;taQVufW?xhV6RYazz7^0C4)m($FX$g zN}$QM6V8mVss@bThux?YJJecMV55r76F}Kn3(5y40nvp;kQ)_2#uNz7Th6R7WZXF8 zg>AmlCA$r-N-}o#PnW{Nd(L9xDeYd_i*ufLT`NEtl#j%G-lj3(y;f4R4mJp~4Ft%F zeBj!>_h1RJY}zX;D(LTVv6H5AKf`VaWe5MuUa{<lvX#5Xj0hQL$2ZQ#;5721CbL$N ze{15?ikN(Y=Fa^Bn(OTH{pD&lolK`v)|0B{ObfeCV%<sD$-!EJ&k#7ed!9uM3FFe% z?ms7g!FzcSWC}Fgohku-Ct3!mZiCt?4Qs$Y!iq!a!vno($MG4qpqXy}B^S7~TjCWs lOKKt8wJ3QlG(taE8by96@mKXCAHpc|0~zXF<olhT{{cli6tn;U literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/Text90/project1.lpi b/components/rx/version/2.1/Demos/Text90/project1.lpi new file mode 100644 index 000000000..1afc647c0 --- /dev/null +++ b/components/rx/version/2.1/Demos/Text90/project1.lpi @@ -0,0 +1,301 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <PathDelim Value="\"/> + <General> + <Flags> + <LRSInOutputDirectory Value="False"/> + </Flags> + <MainUnit Value="0"/> + <ActiveWindowIndexAtStart Value="0"/> + </General> + <BuildModes Count="1"> + <Item1 Name="default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="3"> + <Item1> + <PackageName Value="rxnew"/> + <MinVersion Major="1" Release="11" Build="35" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + <Item3> + <PackageName Value="FCL"/> + <MinVersion Major="1" Valid="True"/> + </Item3> + </RequiredPackages> + <Units Count="27"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + <UsageCount Value="26"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + <EditorIndex Value="0"/> + <WindowIndex Value="0"/> + <TopLine Value="51"/> + <CursorPos X="52" Y="71"/> + <UsageCount Value="26"/> + <Loaded Value="True"/> + <LoadedDesigner Value="True"/> + </Unit1> + <Unit2> + <Filename Value="C:\lazarus\lcl\extctrls.pp"/> + <UnitName Value="ExtCtrls"/> + <TopLine Value="451"/> + <CursorPos X="83" Y="456"/> + <UsageCount Value="10"/> + </Unit2> + <Unit3> + <Filename Value="C:\lazarus\lcl\controls.pp"/> + <UnitName Value="Controls"/> + <TopLine Value="224"/> + <CursorPos X="26" Y="228"/> + <UsageCount Value="10"/> + </Unit3> + <Unit4> + <Filename Value="C:\lazarus\lcl\graphics.pp"/> + <UnitName Value="Graphics"/> + <TopLine Value="586"/> + <CursorPos X="102" Y="589"/> + <UsageCount Value="10"/> + </Unit4> + <Unit5> + <Filename Value="C:\lazarus\lcl\lclproc.pas"/> + <UnitName Value="LCLProc"/> + <TopLine Value="577"/> + <CursorPos X="70" Y="578"/> + <UsageCount Value="10"/> + </Unit5> + <Unit6> + <Filename Value="C:\lazarus\lcl\include\canvas.inc"/> + <TopLine Value="771"/> + <CursorPos X="58" Y="776"/> + <UsageCount Value="10"/> + </Unit6> + <Unit7> + <Filename Value="C:\lazarus\lcl\include\paintbox.inc"/> + <TopLine Value="16"/> + <CursorPos X="81" Y="18"/> + <UsageCount Value="10"/> + </Unit7> + <Unit8> + <Filename Value="C:\lazarus\lcl\include\graphiccontrol.inc"/> + <TopLine Value="21"/> + <CursorPos X="101" Y="26"/> + <UsageCount Value="10"/> + </Unit8> + <Unit9> + <Filename Value="C:\lazarus\lcl\include\controlcanvas.inc"/> + <TopLine Value="36"/> + <CursorPos X="59" Y="43"/> + <UsageCount Value="10"/> + </Unit9> + <Unit10> + <Filename Value="C:\lazarus\lcl\include\bitmap.inc"/> + <TopLine Value="138"/> + <CursorPos X="29" Y="141"/> + <UsageCount Value="10"/> + </Unit10> + <Unit11> + <Filename Value="C:\lazarus\fpcsrc\rtl\objpas\classes\classes.inc"/> + <TopLine Value="238"/> + <CursorPos X="69" Y="241"/> + <UsageCount Value="10"/> + </Unit11> + <Unit12> + <Filename Value="C:\lazarus\lcl\include\brush.inc"/> + <TopLine Value="178"/> + <CursorPos X="56" Y="181"/> + <UsageCount Value="10"/> + </Unit12> + <Unit13> + <Filename Value="C:\lazarus\lcl\include\winapi.inc"/> + <TopLine Value="226"/> + <CursorPos X="52" Y="228"/> + <UsageCount Value="10"/> + </Unit13> + <Unit14> + <Filename Value="C:\lazarus\lcl\interfaces\win32\win32winapi.inc"/> + <TopLine Value="1316"/> + <CursorPos X="67" Y="1319"/> + <UsageCount Value="10"/> + </Unit14> + <Unit15> + <Filename Value="C:\lazarus\fpcsrc\fcl\image\fpcanvas.pp"/> + <UnitName Value="FPCanvas"/> + <TopLine Value="117"/> + <CursorPos X="101" Y="117"/> + <UsageCount Value="10"/> + </Unit15> + <Unit16> + <Filename Value="C:\lazarus\components\lazreport\source\LR_BarC.pas"/> + <ComponentName Value="frBarCodeForm"/> + <HasResources Value="True"/> + <UnitName Value="LR_BarC"/> + <TopLine Value="400"/> + <CursorPos X="57" Y="405"/> + <UsageCount Value="10"/> + </Unit16> + <Unit17> + <Filename Value="C:\lazarus\components\lazreport\source\Barcode.pas"/> + <UnitName Value="Barcode"/> + <TopLine Value="149"/> + <CursorPos X="38" Y="150"/> + <UsageCount Value="10"/> + </Unit17> + <Unit18> + <Filename Value="C:\lazarus\components\lazreport\source\LR_Class.pas"/> + <UnitName Value="LR_Class"/> + <TopLine Value="210"/> + <CursorPos X="1" Y="228"/> + <UsageCount Value="10"/> + </Unit18> + <Unit19> + <Filename Value="C:\lazarus\components\rxnew\rxdbgrid.pas"/> + <UnitName Value="rxdbgrid"/> + <TopLine Value="931"/> + <CursorPos X="46" Y="954"/> + <UsageCount Value="11"/> + </Unit19> + <Unit20> + <Filename Value="C:\lazarus\components\rxnew\vclutils.pas"/> + <UnitName Value="vclutils"/> + <TopLine Value="1"/> + <CursorPos X="22" Y="27"/> + <UsageCount Value="11"/> + </Unit20> + <Unit21> + <Filename Value="C:\lazarus\lcl\dbgrids.pas"/> + <UnitName Value="DBGrids"/> + <TopLine Value="151"/> + <CursorPos X="23" Y="152"/> + <UsageCount Value="11"/> + </Unit21> + <Unit22> + <Filename Value="C:\lazarus\lcl\grids.pas"/> + <UnitName Value="Grids"/> + <TopLine Value="3715"/> + <CursorPos X="3" Y="3719"/> + <UsageCount Value="11"/> + </Unit22> + <Unit23> + <Filename Value="..\..\vclutils.pas"/> + <UnitName Value="vclutils"/> + <WindowIndex Value="0"/> + <TopLine Value="228"/> + <CursorPos X="1" Y="258"/> + <UsageCount Value="10"/> + </Unit23> + <Unit24> + <Filename Value="..\..\rxdbgrid.pas"/> + <UnitName Value="rxdbgrid"/> + <TopLine Value="1105"/> + <CursorPos X="75" Y="1122"/> + <UsageCount Value="10"/> + </Unit24> + <Unit25> + <Filename Value="..\..\..\..\..\..\..\..\usr\local\share\lazarus\components\rxnew\vclutils.pas"/> + <UnitName Value="vclutils"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="1"/> + <WindowIndex Value="0"/> + <TopLine Value="633"/> + <CursorPos X="5" Y="34"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit25> + <Unit26> + <Filename Value="..\..\..\..\..\..\..\..\usr\local\share\lazarus\components\rxnew\rx.inc"/> + <EditorIndex Value="2"/> + <WindowIndex Value="0"/> + <TopLine Value="25"/> + <CursorPos X="1" Y="52"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit26> + </Units> + <JumpHistory Count="7" HistoryIndex="6"> + <Position1> + <Filename Value="unit1.pas"/> + <Caret Line="46" Column="47" TopLine="27"/> + </Position1> + <Position2> + <Filename Value="unit1.pas"/> + <Caret Line="56" Column="12" TopLine="39"/> + </Position2> + <Position3> + <Filename Value="unit1.pas"/> + <Caret Line="71" Column="52" TopLine="51"/> + </Position3> + <Position4> + <Filename Value="..\..\..\..\..\..\..\..\usr\local\share\lazarus\components\rxnew\vclutils.pas"/> + <Caret Line="332" Column="3" TopLine="302"/> + </Position4> + <Position5> + <Filename Value="..\..\..\..\..\..\..\..\usr\local\share\lazarus\components\rxnew\vclutils.pas"/> + <Caret Line="232" Column="9" TopLine="222"/> + </Position5> + <Position6> + <Filename Value="..\..\..\..\..\..\..\..\usr\local\share\lazarus\components\rxnew\rx.inc"/> + <Caret Line="17" Column="1" TopLine="17"/> + </Position6> + <Position7> + <Filename Value="..\..\..\..\..\..\..\..\usr\local\share\lazarus\components\rxnew\rx.inc"/> + <Caret Line="1" Column="1" TopLine="1"/> + </Position7> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <SearchPaths> + <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <UseAnsiStrings Value="False"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="2"> + <Item1> + <Name Value="ECodetoolError"/> + </Item1> + <Item2> + <Name Value="EFOpenError"/> + </Item2> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/Text90/project1.lpr b/components/rx/version/2.1/Demos/Text90/project1.lpr new file mode 100644 index 000000000..adaa17eb3 --- /dev/null +++ b/components/rx/version/2.1/Demos/Text90/project1.lpr @@ -0,0 +1,15 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + Interfaces, // this includes the LCL widgetset + Forms + { add your units here }, Unit1, rxnew; + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/Text90/unit1.lfm b/components/rx/version/2.1/Demos/Text90/unit1.lfm new file mode 100644 index 000000000..e66d39608 --- /dev/null +++ b/components/rx/version/2.1/Demos/Text90/unit1.lfm @@ -0,0 +1,134 @@ +object Form1: TForm1 + Left = 369 + Height = 500 + Top = 228 + Width = 536 + ActiveControl = RadioGroup1.RadioButton4 + Caption = 'Form1' + ClientHeight = 500 + ClientWidth = 536 + OnCreate = FormCreate + SessionProperties = 'Edit1.Text' + LCLVersion = '0.9.27' + object PaintBox1: TPaintBox + Left = 16 + Height = 129 + Top = 16 + Width = 184 + OnPaint = PaintBox1Paint + end + object Edit1: TEdit + Left = 8 + Height = 27 + Top = 152 + Width = 192 + AutoSize = True + OnChange = Edit1Change + TabOrder = 0 + Text = 'Edit1' + end + object RadioGroup1: TRadioGroup + Left = 208 + Height = 136 + Top = 8 + Width = 79 + AutoFill = True + AutoSize = True + Caption = 'Direction' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 117 + ClientWidth = 75 + ItemIndex = 4 + Items.Strings = ( + '0 %' + '90 %' + '180 %' + '270 %' + '360 %' + ) + OnClick = CheckBox1Change + TabOrder = 1 + end + object RxDBGrid1: TRxDBGrid + Left = 0 + Height = 308 + Top = 192 + Width = 536 + TitleButtons = False + AutoSort = False + Columns = < + item + Title.Alignment = taCenter + Title.Orientation = toHorizontal + FieldName = 'DEMO_1' + Filter.DropDownRows = 0 + Filter.ItemIndex = -1 + end> + OptionsRx = [] + Align = alBottom + Anchors = [akTop, akLeft, akRight, akBottom] + FocusColor = clRed + SelectedColor = clHighlight + GridLineStyle = psSolid + DataSource = Datasource1 + ParentColor = False + TabOrder = 2 + TitleStyle = tsNative + end + object RxMemoryData1: TRxMemoryData + AutoCalcFields = False + FieldDefs = < + item + Name = 'DEMO_1' + DataType = ftInteger + Precision = -1 + Size = 0 + end + item + Name = 'Demo2' + DataType = ftString + Precision = -1 + Size = 40 + end> + left = 312 + top = 64 + object RxMemoryData1DEMO_11: TLongintField + DisplayWidth = 10 + FieldKind = fkData + FieldName = 'DEMO_1' + Index = 0 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + end + object RxMemoryData1Demo21: TStringField + DisplayWidth = 40 + FieldKind = fkData + FieldName = 'Demo2' + Index = 1 + LookupCache = False + ProviderFlags = [pfInUpdate, pfInWhere] + ReadOnly = False + Required = False + Size = 40 + end + end + object Datasource1: TDatasource + DataSet = RxMemoryData1 + left = 312 + top = 32 + end + object IniPropStorage1: TIniPropStorage + StoredValues = <> + left = 447 + top = 19 + end +end diff --git a/components/rx/version/2.1/Demos/Text90/unit1.lrs b/components/rx/version/2.1/Demos/Text90/unit1.lrs new file mode 100644 index 000000000..e74450711 --- /dev/null +++ b/components/rx/version/2.1/Demos/Text90/unit1.lrs @@ -0,0 +1,42 @@ +{ Ýòî - ôàéë ðåñóðñîâ, àâòîìàòè÷åñêè ñîçäàííûé lazarus } + +LazarusResources.Add('TForm1','FORMDATA',[ + 'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'q'#1#6'Height'#3#244#1#3'Top'#3#228#0#5'W' + +'idth'#3#24#2#13'ActiveControl'#7#24'RadioGroup1.RadioButton4'#7'Caption'#6#5 + +'Form1'#12'ClientHeight'#3#244#1#11'ClientWidth'#3#24#2#8'OnCreate'#7#10'For' + +'mCreate'#17'SessionProperties'#6#10'Edit1.Text'#10'LCLVersion'#6#6'0.9.27'#0 + +#9'TPaintBox'#9'PaintBox1'#4'Left'#2#16#6'Height'#3#129#0#3'Top'#2#16#5'Widt' + +'h'#3#184#0#7'OnPaint'#7#14'PaintBox1Paint'#0#0#5'TEdit'#5'Edit1'#4'Left'#2#8 + +#6'Height'#2#27#3'Top'#3#152#0#5'Width'#3#192#0#8'AutoSize'#9#8'OnChange'#7 + +#11'Edit1Change'#8'TabOrder'#2#0#4'Text'#6#5'Edit1'#0#0#11'TRadioGroup'#11'R' + +'adioGroup1'#4'Left'#3#208#0#6'Height'#3#136#0#3'Top'#2#8#5'Width'#2'O'#8'Au' + +'toFill'#9#8'AutoSize'#9#7'Caption'#6#9'Direction'#28'ChildSizing.LeftRightS' + +'pacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHori' + +'zontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24 + +'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChi' + +'lds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Lay' + +'out'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1 + +#12'ClientHeight'#2'u'#11'ClientWidth'#2'K'#9'ItemIndex'#2#4#13'Items.String' + +'s'#1#6#3'0 %'#6#4'90 %'#6#5'180 %'#6#5'270 %'#6#5'360 %'#0#7'OnClick'#7#15 + +'CheckBox1Change'#8'TabOrder'#2#1#0#0#9'TRxDBGrid'#9'RxDBGrid1'#4'Left'#2#0#6 + +'Height'#3'4'#1#3'Top'#3#192#0#5'Width'#3#24#2#12'TitleButtons'#8#8'AutoSort' + +#8#7'Columns'#14#1#15'Title.Alignment'#7#8'taCenter'#17'Title.Orientation'#7 + +#12'toHorizontal'#9'FieldName'#6#6'DEMO_1'#19'Filter.DropDownRows'#2#0#16'Fi' + +'lter.ItemIndex'#2#255#0#0#9'OptionsRx'#11#0#5'Align'#7#8'alBottom'#7'Anchor' + +'s'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#10'FocusColor'#7#5'clRed' + +#13'SelectedColor'#7#11'clHighlight'#13'GridLineStyle'#7#7'psSolid'#10'DataS' + +'ource'#7#11'Datasource1'#11'ParentColor'#8#8'TabOrder'#2#2#10'TitleStyle'#7 + +#8'tsNative'#0#0#13'TRxMemoryData'#13'RxMemoryData1'#14'AutoCalcFields'#8#9 + +'FieldDefs'#14#1#4'Name'#6#6'DEMO_1'#8'DataType'#7#9'ftInteger'#9'Precision' + +#2#255#4'Size'#2#0#0#1#4'Name'#6#5'Demo2'#8'DataType'#7#8'ftString'#9'Precis' + +'ion'#2#255#4'Size'#2'('#0#0#4'left'#3'8'#1#3'top'#2'@'#0#13'TLongintField' + +#20'RxMemoryData1DEMO_11'#12'DisplayWidth'#2#10#9'FieldKind'#7#6'fkData'#9'F' + +'ieldName'#6#6'DEMO_1'#5'Index'#2#0#11'LookupCache'#8#13'ProviderFlags'#11#10 + +'pfInUpdate'#9'pfInWhere'#0#8'ReadOnly'#8#8'Required'#8#0#0#12'TStringField' + +#19'RxMemoryData1Demo21'#12'DisplayWidth'#2'('#9'FieldKind'#7#6'fkData'#9'Fi' + +'eldName'#6#5'Demo2'#5'Index'#2#1#11'LookupCache'#8#13'ProviderFlags'#11#10 + +'pfInUpdate'#9'pfInWhere'#0#8'ReadOnly'#8#8'Required'#8#4'Size'#2'('#0#0#0#11 + +'TDatasource'#11'Datasource1'#7'DataSet'#7#13'RxMemoryData1'#4'left'#3'8'#1#3 + +'top'#2' '#0#0#15'TIniPropStorage'#15'IniPropStorage1'#12'StoredValues'#14#0 + +#4'left'#3#191#1#3'top'#2#19#0#0#0 +]); diff --git a/components/rx/version/2.1/Demos/Text90/unit1.pas b/components/rx/version/2.1/Demos/Text90/unit1.pas new file mode 100644 index 000000000..60e2e66c9 --- /dev/null +++ b/components/rx/version/2.1/Demos/Text90/unit1.pas @@ -0,0 +1,89 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, + Buttons, StdCtrls, rxdbgrid, vclutils, rxmemds, db, IniPropStorage; + +type + + { TForm1 } + + TForm1 = class(TForm) + Datasource1: TDatasource; + Edit1: TEdit; + IniPropStorage1: TIniPropStorage; + PaintBox1: TPaintBox; + RadioGroup1: TRadioGroup; + RxDBGrid1: TRxDBGrid; + RxMemoryData1: TRxMemoryData; + RxMemoryData1Demo21: TStringField; + RxMemoryData1DEMO_11: TLongintField; + procedure CheckBox1Change(Sender: TObject); + procedure Edit1Change(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure PaintBox1Paint(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + Form1: TForm1; + +implementation + +{ TForm1 } + +procedure TForm1.PaintBox1Paint(Sender: TObject); +var + FOri:TTextOrientation; +begin + + PaintBox1.Canvas.TextOut(1,1, 'Text for test'); + case RadioGroup1.ItemIndex of + 0:FOri:=toHorizontal; + 1:FOri:=toVertical90; + 2:FOri:=toHorizontal180; + 3:FOri:=toVertical270; + 4:FOri:=toHorizontal360; + end; + + OutTextXY90(PaintBox1.Canvas, 1, 20, Edit1.Text, FOri); +end; + +procedure TForm1.CheckBox1Change(Sender: TObject); +var + FOri:TTextOrientation; +begin + PaintBox1.Invalidate; + case RadioGroup1.ItemIndex of + 0:FOri:=toHorizontal; + 1:FOri:=toVertical90; + 2:FOri:=toHorizontal180; + 3:FOri:=toVertical270; + 4:FOri:=toHorizontal360; + end; + (RxDBGrid1.Columns[0].Title as TRxColumnTitle).Orientation:=FOri; +end; + +procedure TForm1.Edit1Change(Sender: TObject); +begin + PaintBox1.Invalidate; + (RxDBGrid1.Columns[0].Title as TRxColumnTitle).Caption:=Edit1.Text; +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + RxMemoryData1.Open; +end; + +initialization + {$I unit1.lrs} + +end. + diff --git a/components/rx/version/2.1/Demos/ToolPanel/aboutunit.lfm b/components/rx/version/2.1/Demos/ToolPanel/aboutunit.lfm new file mode 100644 index 000000000..581efe482 --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/aboutunit.lfm @@ -0,0 +1,25 @@ +object AboutForm: TAboutForm + Left = 441 + Height = 300 + Top = 321 + Width = 400 + ActiveControl = BitBtn1 + Caption = 'About...' + ClientHeight = 300 + ClientWidth = 400 + LCLVersion = '0.9.27' + object BitBtn1: TBitBtn + Left = 170 + Height = 36 + Top = 258 + Width = 58 + Anchors = [akBottom] + AutoSize = True + BorderSpacing.InnerBorder = 2 + Caption = '&' + Default = True + Kind = bkOK + ModalResult = 1 + TabOrder = 0 + end +end diff --git a/components/rx/version/2.1/Demos/ToolPanel/aboutunit.lrs b/components/rx/version/2.1/Demos/ToolPanel/aboutunit.lrs new file mode 100644 index 000000000..8a378fc5a --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/aboutunit.lrs @@ -0,0 +1,11 @@ +{ Ýòî - ôàéë ðåñóðñîâ, àâòîìàòè÷åñêè ñîçäàííûé lazarus } + +LazarusResources.Add('TAboutForm','FORMDATA',[ + 'TPF0'#10'TAboutForm'#9'AboutForm'#4'Left'#3#185#1#6'Height'#3','#1#3'Top'#3 + +'A'#1#5'Width'#3#144#1#13'ActiveControl'#7#7'BitBtn1'#7'Caption'#6#8'About..' + +'.'#12'ClientHeight'#3','#1#11'ClientWidth'#3#144#1#10'LCLVersion'#6#6'0.9.2' + +'7'#0#7'TBitBtn'#7'BitBtn1'#4'Left'#3#170#0#6'Height'#2'$'#3'Top'#3#2#1#5'Wi' + +'dth'#2':'#7'Anchors'#11#8'akBottom'#0#8'AutoSize'#9#25'BorderSpacing.InnerB' + +'order'#2#2#7'Caption'#6#5'&'#208#158#208#154#7'Default'#9#4'Kind'#7#4'bkOK' + +#11'ModalResult'#2#1#8'TabOrder'#2#0#0#0#0 +]); diff --git a/components/rx/version/2.1/Demos/ToolPanel/aboutunit.pas b/components/rx/version/2.1/Demos/ToolPanel/aboutunit.pas new file mode 100644 index 000000000..111c241c2 --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/aboutunit.pas @@ -0,0 +1,31 @@ +unit AboutUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons; + +type + + { TAboutForm } + + TAboutForm = class(TForm) + BitBtn1: TBitBtn; + private + { private declarations } + public + { public declarations } + end; + +var + AboutForm: TAboutForm; + +implementation + +initialization + {$I aboutunit.lrs} + +end. + diff --git a/components/rx/version/2.1/Demos/ToolPanel/ico/main.ICO b/components/rx/version/2.1/Demos/ToolPanel/ico/main.ICO new file mode 100644 index 0000000000000000000000000000000000000000..8969d0f1104874ba521d56ad607346eedeaddc7a GIT binary patch literal 2238 zcmaLXF-Rj>9LMqB?j5(<xCg?q%Cc@Va-=i8?v^oC8cm-zXmROM<v6fRNI*;3;y8{; zl}2J0Tu5LGt7#$@$3!$;g3T2RzWu&8lQq$qo#8+8GXKwe|H*$QkzTOBe=m+p`gckC zP15fKm-Laa*X>sO*`1=pi@C9CB>7ycMJJ97)$8@tyY6ZF<sSu8qfTg44~)uvqg>a> z^NnPqbuCrTrP7I%uSnT~f)RdzZ{r*I3ciTlBX;rI_$|DLU&FI*r-QHK%lI7L!|H*+ z3opFzDrkfs;M@2HzJf2}_hht--^Op@J^UJeiVyJtzK`$XeY}rv;j8!(K9A4h4c_1l z-rx=1;2+qp+0WTe*emP>=co7(AK?4=F5a&0qg&`Ix`fW7v#dYD5Abb#17E=x@q74P z{5F0I@8Q?*tlR0}>-aK0hxbytBbgC?fN$d)_zJ%0$?Vb1UAnnVH@E1fM>p5-Q+$XI z@O^w2@8f-Z3tz>T@OgX|Z}0|h@CI-2hWp`hUGuokd0Zzvt_qK<P>`nh5Fg<C_%7bZ zr@THI;RpCOzJagci};k+hjjyW@O69{pTm3jv<3xcgdgDB_y(R%n<8H<xj})M;zN9Z z@8i38nv>F?!0<j3b)rn<2#-i>(Ea_rZf|dOb#<l7%S&BcT<GlVOup~y^z>A%R!c`m zN2*q<Iy^j7sZ`Sb{=V}0ymoeWl+9+fxw)zJ^>wYRtZ4ex=<iRT_#M~yy-?Twl&J4c z9PO<bdwASdABRb!)!`4p>Ts9@Ch=y|0Q+fS@yVUt#xDH_;O_28J`8WhHcisT>a+aK z<7@|>%%7!QeFqlnhc~m@-%HGcN%&Yh2}~AdyCMs1a`U6RAF{6P!Tj=?gtmYKIzB!Y zEpmA~wj22f4ApF^d91O^FS9vd^A2da83CJLZq5MtgM$M~xO`L5stfsO1@cs&z_a-_ zPl<SesQ<Rua(sUWwgM$YO@;CEvEw-J=CeY`=Wv#HNe=G*W8qHEp6`5;acVwZDJh>B zkHcA^#C&Ev8OL=J^Byb2;Ax&0I^%g>=KG5sJ-^xa<LuIz%-ogvVaBEBuRIx(Pn#Rb z)TL(&{b;(Gm<KZ;{xbY?ZzRNPuDv4cdE=e*Zbf?gi}dED^eZKne&X{huD>R~LGY)N S9RGbV=1=}~J`;Du|HL=zl^1vb literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/ToolPanel/project1.ico b/components/rx/version/2.1/Demos/ToolPanel/project1.ico new file mode 100644 index 0000000000000000000000000000000000000000..703e3aed1beeaee6cec4fc48326ce55f33a5aee9 GIT binary patch literal 766 zcmZuvyH3L}6g>eHdkYd0YdbRX2O#kynLJkB%!YxXp5kB1r*x`1RUI>+nsaR@1;llZ z?>)IMzkr5gy}p6S;R?8?ejwJwGtr><K;Qr30e<klD9$tqk8vF7NclrbVi6qjOQs^q z+1V8B081>Q+TN-qf=q^;f2h__`X!?;ysa5zo8xiMh*Hm*%^`$gZ&Ynzbf63dIiWTE zBs}a{k{RT2=2E~KJ>`I*7BD(SuS)^?4a-e{aHA@Z>cS!IYP{6TJg^1p)qZTp7MK3y zF$&M|C1K)vtC(IYwk6#;?w5gO&Jpu@z&Yr!g{F@&9(luIIcQ!2Z5>>dS8Qbi>|Vq} z|K?UJ<#gaZW|<Hre7V#vozPwGIIrdJl+LS^PIoEonv{I=#^k3nu==7VI-aCD6?D|s oJ3-^A1yDczv{#ZlGWP>`VXt=r%maOo#I2X-%o==r+fT0g8}IbP@Bjb+ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/Demos/ToolPanel/project1.lpi b/components/rx/version/2.1/Demos/ToolPanel/project1.lpi new file mode 100644 index 000000000..518bab6eb --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/project1.lpi @@ -0,0 +1,93 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <Version Value="9"/> + <PathDelim Value="\"/> + <General> + <Flags> + <LRSInOutputDirectory Value="False"/> + </Flags> + <SessionStorage Value="InProjectDir"/> + <MainUnit Value="0"/> + <AutoCreateForms Value="False"/> + <Title Value="Rx Toolbar test"/> + <UseAppBundle Value="False"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + </General> + <VersionInfo> + <UseVersionInfo Value="True"/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="3"> + <Item1> + <PackageName Value="RxNew"/> + <MinVersion Major="1" Release="5" Build="11" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + <Item3> + <PackageName Value="IDEIntf"/> + <MinVersion Major="1" Valid="True"/> + </Item3> + </RequiredPackages> + <Units Count="3"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="MainForm"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + </Unit1> + <Unit2> + <Filename Value="aboutunit.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="AboutForm"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="AboutUnit"/> + </Unit2> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <SearchPaths> + <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <UseAnsiStrings Value="False"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/ToolPanel/project1.lpr b/components/rx/version/2.1/Demos/ToolPanel/project1.lpr new file mode 100644 index 000000000..058118f96 --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/project1.lpr @@ -0,0 +1,21 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + Interfaces, // this includes the LCL widgetset + Forms, + Unit1, + AboutUnit, + LResources; + +{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF} + +begin + {$I project1.lrs} + Application.Title:='Rx Toolbar test'; + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. + diff --git a/components/rx/version/2.1/Demos/ToolPanel/project1.lrs b/components/rx/version/2.1/Demos/ToolPanel/project1.lrs new file mode 100644 index 000000000..b8ddd6a05 --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/project1.lrs @@ -0,0 +1,29 @@ +LazarusResources.Add('MAINICON','ICO',[ + #0#0#1#0#1#0' '#4#0#0#0#0#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0 + +#4#0#0#0#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128 + +#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192 + +#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255 + +#255#0#0#0#0#0#0#0#0#7'wp'#0#0#0#0#0#0#0#0#0#0#0#0'w'#0#0'pw'#0#0#0#0#0#0#0#0 + +#0#0#0#7#6'`p'#7'p'#0#0#0#0#0#0#0#0#7#6'`'#6'`'#6'`pp'#0#0#0#0#0#0#0#7#6'fff' + +'f`pw'#0#0#0#0#0#0#0'`'#6'ffff`'#6#7'p'#0#0#0#0#0#6'ffn'#238#238#230'ff`'#0#0 + +#0#0#0#0'pfn'#232#136#136#142#230'f'#7'w'#0#0#0#0#0#0'f'#8#136#136#136#136 + +#142'f'#0#7'p'#0#0#0#6'f`'#248#136#136#136#136#136#230'f`p'#0#0#0#6'f`'#143 + +#136#136#136#136#136#230'f`'#0#0#0#0'pf'#8#248#248#136#136#136#136#142'f'#7 + +'w'#0#0#0#0'f'#8#143#143#128#8#136#136#142'f'#0#7#0#0#0'ff'#8#136#248#0#0#136 + +#136#142'ff'#7#0#0#0'ff'#8#136#143#7#0#136#136#142'ff'#7#0#0#0#0'f'#8#136#136 + +#128#8#136#136#142'f'#0#0#0#0#0#0'f'#8#136#136#136#143#136#136#142'f'#7'p'#0 + +#0#0#6'f`'#136#136#136#248#248#136#230'f`p'#0#0#0#6'f`'#136#136#136#143#143 + +#136#230'f`'#0#0#0#0#0#0'f'#8#136#136#136#248#142'f'#0#0#0#0#0#0#0#0'f`'#8 + +#136#136#128#6'f'#7'p'#0#0#0'ww'#6'ff`'#0#0#6'ff`'#0#0#0#0#0#0#0'`'#6'ffff`' + +#6#0'ww'#0#8#136#135#0#8#6'ffff`'#128#0#0#7'p'#0#0#136'w'#0#0#0#0#0#0#0#0#7 + +'wpw'#0#0#8#136'wwwwwwwwx'#0#135#7#0#0#0#136#136#136#136#136#136#136#136#136 + +#128#0#8#7#0#0#0#136#136#136#136#136#136#136#136#136#128'p'#8#7#7'w'#8#136 + +#255#255#255#255#255#255#255#255#248#0#143#0#0#0#136#255#0#0#0#0#0#0#0#0#15 + +#255#240#0#15#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#255#254#31#255#255#240#19#255#255#224#1#255#255#128#1''#255#0#0'?'#254#0 + +#0#31#252#0#0'?'#252#0#0#15#248#0#0#7#240#0#0#7#240#0#0#15#240#0#0#3#224#0#0 + +#3#224#1#128#3#224#0#128#3#224#0#0#7#248#0#0#7#240#0#0#7#240#0#0#15#248#0#0 + +#31#254#0#0#31#192#0#0'?'#130#0#0'C'#0#0#0#129#0#0#0#0#240#0#0#0#248#0#0'0' + +#248#0#0#16#128#0#0#1#0#0#0#3#0#255#255#135#131#255#255#255 +]); + diff --git a/components/rx/version/2.1/Demos/ToolPanel/project1.manifest b/components/rx/version/2.1/Demos/ToolPanel/project1.manifest new file mode 100644 index 000000000..515fedeef --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/project1.manifest @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/> + <description>Your application description here.</description> + <dependency> + <dependentAssembly> + <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> + </dependentAssembly> + </dependency> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> + <security> + <requestedPrivileges> + <requestedExecutionLevel level="asInvoker" uiAccess="false"/> + </requestedPrivileges> + </security> + </trustInfo> +</assembly> \ No newline at end of file diff --git a/components/rx/version/2.1/Demos/ToolPanel/project1.rc b/components/rx/version/2.1/Demos/ToolPanel/project1.rc new file mode 100644 index 000000000..21ffe8db4 --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/project1.rc @@ -0,0 +1,33 @@ +1 VERSIONINFO +FILEVERSION 0,0,0,0 +PRODUCTVERSION 1,0,0,0 +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "Comments", "\000" + VALUE "CompanyName", "\000" + VALUE "FileDescription", "\000" + VALUE "FileVersion", "0.0.0.0\000" + VALUE "InternalName", "\000" + VALUE "LegalCopyright", "\000" + VALUE "LegalTrademarks", "\000" + VALUE "OriginalFilename", "\000" + VALUE "ProductName", "\000" + VALUE "ProductVersion", "1.0.0.0\000" + } + } + BLOCK "VarFileInfo" + { + VALUE "Translation", 0x0409, 0x04E4 + } +} + +#define RT_MANIFEST 24 +#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 +#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2 +#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3 + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "project1.manifest" +MAINICON ICON "project1.ico" diff --git a/components/rx/version/2.1/Demos/ToolPanel/toolbardemo.cfg b/components/rx/version/2.1/Demos/ToolPanel/toolbardemo.cfg new file mode 100644 index 000000000..68652c01f --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/toolbardemo.cfg @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<CONFIG> + <TApplication> + <Form1 Form1_Top="255" Form1_Left="310" Form1_Width="592" Form1_Height="289" Form1.ToolPanel1.Count="7" Form1.ToolPanel1.Options="tpFlatBtns,tpCustomizable,tpGlyphPopup,tpCaptionPopup" Form1.ToolPanel1.Version="1" Form1.ToolPanel1.ShowHint="1" Form1.ToolPanel1.Item0.Top="4" Form1.ToolPanel1.Item1.Top="4" Form1.ToolPanel1.Item2.Top="4" Form1.ToolPanel1.Item3.Top="4" Form1.ToolPanel1.Item4.Top="4" Form1.ToolPanel1.Item5.Top="4" Form1.ToolPanel1.Item6.Top="4" Form1.ToolPanel1.Item0.Left="8" Form1.ToolPanel1.Item1.Left="328" Form1.ToolPanel1.Item2.Left="152" Form1.ToolPanel1.Item3.Left="96" Form1.ToolPanel1.Item4.Left="504" Form1.ToolPanel1.Item5.Left="216" Form1.ToolPanel1.Item6.Left="328" Form1.ToolPanel1.Item0.Width="49" Form1.ToolPanel1.Item1.Width="64" Form1.ToolPanel1.Item2.Width="24" Form1.ToolPanel1.Item3.Width="50" Form1.ToolPanel1.Item4.Width="46" Form1.ToolPanel1.Item5.Width="85" Form1.ToolPanel1.Item6.Width="64" Form1.ToolPanel1.Item0.Action="actNew" Form1.ToolPanel1.Item1.Action="actCustom" Form1.ToolPanel1.Item2.Action="actNext" Form1.ToolPanel1.Item3.Action="actPrior" Form1.ToolPanel1.Item4.Action="actExit" Form1.ToolPanel1.Item5.Action="actDemo" Form1.ToolPanel1.Item6.Action="actCustom" Form1.ToolPanel1.ToolBarStyle="tbsStandart" Form1.ToolPanel1.Item0.Visible="1" Form1.ToolPanel1.Item1.Visible="1" Form1.ToolPanel1.Item2.Visible="1" Form1.ToolPanel1.Item3.Visible="1" Form1.ToolPanel1.Item4.Visible="1" Form1.ToolPanel1.Item5.Visible="1" Form1.ToolPanel1.Item6.Visible="1" Form1.ToolPanel1.Item0.ShowCaption="1" Form1.ToolPanel1.Item1.ShowCaption="1" Form1.ToolPanel1.Item2.ShowCaption="0" Form1.ToolPanel1.Item3.ShowCaption="1" Form1.ToolPanel1.Item4.ShowCaption="1" Form1.ToolPanel1.Item5.ShowCaption="1" Form1.ToolPanel1.Item6.ShowCaption="1"/> + <MainForm MainForm_Top="411" MainForm_Left="417" MainForm_Width="766" MainForm_Height="77" MainForm.ToolPanel1.Count="7" MainForm.ToolPanel1.Options="tpFlatBtns,tpCustomizable,tpGlyphPopup,tpCaptionPopup" MainForm.ToolPanel1.Version="4" MainForm.ToolPanel1.ShowHint="1" MainForm.ToolPanel1.Item0.Top="5" MainForm.ToolPanel1.Item1.Top="5" MainForm.ToolPanel1.Item2.Top="5" MainForm.ToolPanel1.Item3.Top="5" MainForm.ToolPanel1.Item4.Top="5" MainForm.ToolPanel1.Item5.Top="5" MainForm.ToolPanel1.Item6.Top="5" MainForm.ToolPanel1.Item0.Left="5" MainForm.ToolPanel1.Item1.Left="62" MainForm.ToolPanel1.Item2.Left="140" MainForm.ToolPanel1.Item3.Left="179" MainForm.ToolPanel1.Item4.Left="237" MainForm.ToolPanel1.Item5.Left="290" MainForm.ToolPanel1.Item6.Left="367" MainForm.ToolPanel1.Item0.Width="57" MainForm.ToolPanel1.Item1.Width="78" MainForm.ToolPanel1.Item2.Width="39" MainForm.ToolPanel1.Item3.Width="58" MainForm.ToolPanel1.Item4.Width="53" MainForm.ToolPanel1.Item5.Width="77" MainForm.ToolPanel1.Item6.Width="66" MainForm.ToolPanel1.ButtonAllign="tbaLeft" MainForm.ToolPanel1.Item0.Action="actNew" MainForm.ToolPanel1.Item1.Action="actCustom" MainForm.ToolPanel1.Item2.Action="actNext" MainForm.ToolPanel1.Item3.Action="actPrior" MainForm.ToolPanel1.Item4.Action="actExit" MainForm.ToolPanel1.Item5.Action="actSysMenu" MainForm.ToolPanel1.Item6.Action="sysAbout" MainForm.ToolPanel1.ToolBarStyle="tbsWindowsXP" MainForm.ToolPanel1.Item0.Visible="1" MainForm.ToolPanel1.Item1.Visible="1" MainForm.ToolPanel1.Item2.Visible="1" MainForm.ToolPanel1.Item3.Visible="1" MainForm.ToolPanel1.Item4.Visible="1" MainForm.ToolPanel1.Item5.Visible="1" MainForm.ToolPanel1.Item6.Visible="1" MainForm.ToolPanel1.Item0.ShowCaption="1" MainForm.ToolPanel1.Item1.ShowCaption="1" MainForm.ToolPanel1.Item2.ShowCaption="0" MainForm.ToolPanel1.Item3.ShowCaption="1" MainForm.ToolPanel1.Item4.ShowCaption="1" MainForm.ToolPanel1.Item5.ShowCaption="1" MainForm.ToolPanel1.Item6.ShowCaption="1"/> + </TApplication> +</CONFIG> diff --git a/components/rx/version/2.1/Demos/ToolPanel/unit1.lfm b/components/rx/version/2.1/Demos/ToolPanel/unit1.lfm new file mode 100644 index 000000000..2955c3419 --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/unit1.lfm @@ -0,0 +1,443 @@ +object MainForm: TMainForm + Left = 283 + Height = 289 + Top = 258 + Width = 650 + ActiveControl = ToolPanel1 + Caption = 'ToolPanel demo' + ClientHeight = 289 + ClientWidth = 650 + Position = poDesktopCenter + SessionProperties = 'Width;Height;Left;Top' + ShowHint = True + LCLVersion = '0.9.27' + object ToolPanel1: TToolPanel + Left = 0 + Height = 32 + Top = 0 + Width = 650 + Items = < + item + Action = actNew + Visible = True + Left = 5 + Height = 25 + Top = 4 + Width = 55 + DropDownMenu = PopupMenu1 + ShowCaption = True + ButtonStyle = tbrDropDown + end + item + Action = actCustom + Visible = True + Left = 137 + Height = 25 + Top = 4 + Width = 78 + ShowCaption = True + end + item + Action = actNext + Visible = True + Left = 272 + Height = 24 + Top = 4 + Width = 39 + DropDownMenu = PopupMenu2 + ShowCaption = False + ButtonStyle = tbrDropDownExtra + end + item + Action = actPrior + Visible = True + Left = 215 + Height = 25 + Top = 4 + Width = 57 + DropDownMenu = PopupMenu2 + ShowCaption = True + end + item + Action = actExit + Visible = True + Left = 311 + Height = 25 + Top = 4 + Width = 51 + ShowCaption = True + end + item + Action = actSysMenu + Visible = True + Left = 60 + Height = 25 + Top = 4 + Width = 77 + DropDownMenu = PopupMenu1 + ShowCaption = True + ButtonStyle = tbrDropDown + end + item + Action = sysAbout + Visible = True + Left = 362 + Height = 25 + Top = 4 + Width = 66 + ShowCaption = True + end> + ImageList = ImageList1 + PropertyStorage = XMLPropStorage1 + BtnWidth = 23 + BtnHeight = 24 + ToolBarStyle = tbsWindowsXP + Options = [tpFlatBtns, tpCustomizable, tpGlyphPopup, tpCaptionPopup] + Version = 4 + ButtonAllign = tbaLeft + Align = alTop + AutoSize = True + BorderWidth = 4 + ClientHeight = 32 + ClientWidth = 650 + FullRepaint = False + TabOrder = 0 + end + object ImageList1: TImageList + left = 168 + top = 88 + Bitmap = { + 4C69070000001000000010000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000FF000000FF000000FF000000FF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000FF000000FF008080FF008080FF000000FF0000 + 00FF000000FF0000000000000000000000000000000000000000000000FF0000 + 00FF000000FF000000000000000000000000000000FF000000FF008080FF0080 + 80FF008080FF000000FF00000000000000000000000000000000000000000000 + 00FF000000FF00000000000000000000000000000000000000FF008080FF0080 + 80FF008080FF000000FF0000000000000000000000FF00000000000000000000 + 00FF000000FF00000000000000000000000000000000000000FF000000FF0080 + 80FF008080FF000000FF000000FF00000000000000FF000000FF000000FF0000 + 00FF000000FF000000000000000000000000000000FF000080FF000000FF0000 + 00FF000000FF008080FF008080FF00000000000000FF000000FF000000FF0000 + 00FFC0C0C0FF000000FF00000000000000FF000080FF000000FF000000000000 + 0000000000FF008080FF000000FF000000000000000000000000000000000000 + 0000000000FFC0C0C0FF000000FF000080FF000000FF00000000000000000000 + 000000000000000000FF00000000000000000000000000000000000000000000 + 000000000000000000FFC0C0C0FF000000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000FF000080FF000000FFC0C0C0FF000000FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00FF000080FF000000FF00000000000000FFC0C0C0FF000000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000FF0000 + 80FF000000FF000000000000000000000000000000FFC0C0C0FF000000FF0000 + 00000000000000000000000000000000000000000000000000FF000080FF0000 + 00FF0000000000000000000000000000000000000000000000FFC0C0C0FF0000 + 00FF0000000000000000000000000000000000000000000000FF000000FF0000 + 0000000000000000000000000000000000000000000000000000000000FF0000 + 00FF000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000FF00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000FF000000FF00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00FFFFFFFFFF000000FF00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF0000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 00FFFFFFFFFF000000FF00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000FF000000FF00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000FF00000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FFFFFFFFFF000000FF0000 + 00000000000000000000000000000000000000000000000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFFFFFFFFFFFFFFFFF0000 + 00FF0000000000000000000000000000000000000000000000FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF00000000000000000000000000000000000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FFFFFFFFFFFFFFFFFF0000 + 00FF000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FFFFFFFFFF000000FF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF0000 + 0000000000000000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF0000 + 00FF000000000000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF0000 + 00FF000000FF0000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF0000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF0000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF0000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF0000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF0000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF0000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF0000000000000000000000000000000000000000000000FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF000000FF0000000000000000000000000000000000000000000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000FF000000FF000000FF000000FF0000 + 00FF000000FF00000000800000FF000000000000000000000000000000000000 + 00000000000000000000000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 + C0FFC0C0C0FF000000FF800000FF000000000000000000000000000000000000 + 000000000000000000FFC0C0C0FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 + C0FFC0C0C0FFC0C0C0FF800000FF00000000000000FF000000FF000000FF0000 + 00FF000000FFC0C0C0FF000000FFC0C0C0FF000000FFC0C0C0FFC0C0C0FFC0C0 + C0FFC0C0C0FFC0C0C0FF800000FF00000000000000FFFFFFFFFFFFFFFFFF0000 + 00FFC0C0C0FF000000FFC0C0C0FF000000FFC0C0C0FF000000FFC0C0C0FFC0C0 + C0FFC0C0C0FF000000FF800000FF00000000000000FFFFFFFFFF000000FFC0C0 + C0FF000000FFFFFFFFFF000000FFC0C0C0FF000000FFC0C0C0FF000000FF0000 + 00FF000000FF00000000800000FF00000000000000FFFFFFFFFF000000FF0000 + 00FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFC0C0C0FF000000FFFFFFFFFF0000 + 00FF00000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF0000 + 00FF00000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 + 00FF00000000000000000000000000000000000000FFFFFFFFFF800000FF8000 + 00FFFFFFFFFF800000FF800000FF800000FF800000FF800000FFFFFFFFFF0000 + 00FF00000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 + 00FF00000000000000000000000000000000000000FFFFFFFFFF800000FF8000 + 00FFFFFFFFFF800000FF800000FF800000FF800000FF800000FFFFFFFFFF0000 + 00FF00000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 + 00FF00000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000FF000000FF000000FF000000FF000000FF000000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000FF008000FF008000FF008000FF008000FF000000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000FF000000FF000000FF000000FF000000FF000000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000800000FF8000 + 00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000 + 00FF000000000000000000000000000000000000000000000000800000FFFF00 + 00FF800000FFFF0000FF000000FFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF8000 + 00FF000000000000000000000000000000000000000000000000800000FF8000 + 00FFFF0000FF800000FF000000FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF8000 + 00FF000000000000000000000000000000000000000000000000800000FFFF00 + 00FF800000FFFF0000FF000000FFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF8000 + 00FF000000000000000000000000000000000000000000000000800000FF8000 + 00FFFF0000FF800000FF000000FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF8000 + 00FF000000000000000000000000000000000000000000000000800000FFFF00 + 00FF800000FFFF0000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 + 00FF000000000000000000000000000000000000000000000000800000FF8000 + 00FFFF0000FF800000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 + 00FF000000000000000000000000000000000000000000000000800000FFFF00 + 00FF800000FF000000FF000000FF808080FFFFFFFFFFFFFFFFFFFFFFFFFF8000 + 00FF000000000000000000000000800000FF800000FF800000FF800000FF0000 + 00FF000000FF808080FF808080FF808080FFFFFFFFFFFFFFFFFFFFFFFFFF8000 + 00FF800000FF800000FF800000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FFFFFFFFFF8080 + 80FFFFFFFFFF808080FF808080FF808000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FFFFFFFFFFC0C0C0FF8080 + 80FFC0C0C0FFFFFFFFFF808080FF000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000FF000000FF000000FF000000FF000000FF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000FF000000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF + FFFF00FFFFFF000000FF00000000000000000000000000000000000000FF00FF + FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF + FFFF00FFFFFF00FFFFFF000000FF000000000000000000000000000000FF00FF + FFFF00FFFFFF000000FF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF0000 + 00FF00FFFFFF00FFFFFF000000FF0000000000000000000000FF00FFFFFF00FF + FFFF00FFFFFF000000FF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF0000 + 00FF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000FF00FFFFFF00FF + FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF + FFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000FF00FFFFFF00FF + FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF + FFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000FF00FFFFFF00FF + FFFF000000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF + FFFF000000FF00FFFFFF00FFFFFF0000000000000000000000FF00FFFFFF00FF + FFFF00FFFFFF000000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000 + 00FF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000FF00FF + FFFF00FFFFFF00FFFFFF000000FF000000FF000000FF000000FF000000FF00FF + FFFF00FFFFFF00FFFFFF000000FF000000000000000000000000000000FF00FF + FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF + FFFF00FFFFFF00FFFFFF000000FF000000000000000000000000000000000000 + 00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF + FFFF00FFFFFF000000FF00000000000000000000000000000000000000000000 + 0000000000FF000000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000 + 00FF000000FF0000000000000000 + } + end + object ActionList1: TActionList + Images = ImageList1 + left = 216 + top = 40 + object actNew: TAction + Caption = 'New' + Hint = 'Action N 1' + ImageIndex = 3 + end + object actNext: TAction + Caption = 'Next' + Hint = 'Action N 2' + ImageIndex = 2 + OnExecute = Action1Execute + end + object actPrior: TAction + Caption = 'Prior' + Hint = 'Prior action' + ImageIndex = 1 + OnExecute = Action1Execute + end + object actCustom: TAction + Caption = 'Custom' + Hint = 'Customize toolbar' + ImageIndex = 0 + OnExecute = actCustomExecute + end + object actExit: TAction + Caption = 'Exit' + Hint = 'exit from demo application' + ImageIndex = 5 + OnExecute = actExitExecute + ShortCut = 32856 + end + object actSysMenu: TAction + Tag = 4 + Caption = 'System' + ImageIndex = 4 + end + object sysAbout: TAction + Category = 'System' + Caption = 'About' + ImageIndex = 6 + OnExecute = sysAboutExecute + end + end + object XMLPropStorage1: TXMLPropStorage + StoredValues = <> + FileName = 'toolbardemo.cfg' + left = 216 + top = 88 + end + object PopupMenu1: TPopupMenu + Images = ImageList1 + left = 16 + top = 40 + object MenuItem1: TMenuItem + Action = actNew + end + object MenuItem2: TMenuItem + Caption = '-' + end + object MenuItem4: TMenuItem + Action = actNext + OnClick = Action1Execute + end + object MenuItem3: TMenuItem + Action = actPrior + OnClick = Action1Execute + end + object MenuItem8: TMenuItem + Caption = '-' + end + object MenuItem9: TMenuItem + Action = actCustom + OnClick = actCustomExecute + end + object MenuItem7: TMenuItem + Action = sysAbout + OnClick = sysAboutExecute + end + object MenuItem6: TMenuItem + Caption = '-' + end + object MenuItem5: TMenuItem + Action = actExit + OnClick = actExitExecute + end + end + object PopupMenu2: TPopupMenu + Images = ImageList1 + left = 168 + top = 40 + object MenuItem10: TMenuItem + Caption = 'Item 1' + end + object MenuItem11: TMenuItem + Caption = 'Item 2' + end + object MenuItem12: TMenuItem + Caption = 'Item 3' + end + object MenuItem13: TMenuItem + Caption = 'Item 4' + end + end +end diff --git a/components/rx/version/2.1/Demos/ToolPanel/unit1.lrs b/components/rx/version/2.1/Demos/ToolPanel/unit1.lrs new file mode 100644 index 000000000..b2460a60f --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/unit1.lrs @@ -0,0 +1,303 @@ +{ Ýòî - ôàéë ðåñóðñîâ, àâòîìàòè÷åñêè ñîçäàííûé lazarus } + +LazarusResources.Add('TMainForm','FORMDATA',[ + 'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#27#1#6'Height'#3'!'#1#3'Top'#3#2#1#5 + +'Width'#3#138#2#13'ActiveControl'#7#10'ToolPanel1'#7'Caption'#6#14'ToolPanel' + +' demo'#12'ClientHeight'#3'!'#1#11'ClientWidth'#3#138#2#8'Position'#7#15'poD' + +'esktopCenter'#17'SessionProperties'#6#21'Width;Height;Left;Top'#8'ShowHint' + +#9#10'LCLVersion'#6#6'0.9.27'#0#10'TToolPanel'#10'ToolPanel1'#4'Left'#2#0#6 + +'Height'#2' '#3'Top'#2#0#5'Width'#3#138#2#5'Items'#14#1#6'Action'#7#6'actNew' + +#7'Visible'#9#4'Left'#2#5#6'Height'#2#25#3'Top'#2#4#5'Width'#2'7'#12'DropDow' + +'nMenu'#7#10'PopupMenu1'#11'ShowCaption'#9#11'ButtonStyle'#7#11'tbrDropDown' + +#0#1#6'Action'#7#9'actCustom'#7'Visible'#9#4'Left'#3#137#0#6'Height'#2#25#3 + +'Top'#2#4#5'Width'#2'N'#11'ShowCaption'#9#0#1#6'Action'#7#7'actNext'#7'Visib' + +'le'#9#4'Left'#3#16#1#6'Height'#2#24#3'Top'#2#4#5'Width'#2''''#12'DropDownMe' + +'nu'#7#10'PopupMenu2'#11'ShowCaption'#8#11'ButtonStyle'#7#16'tbrDropDownExtr' + +'a'#0#1#6'Action'#7#8'actPrior'#7'Visible'#9#4'Left'#3#215#0#6'Height'#2#25#3 + +'Top'#2#4#5'Width'#2'9'#12'DropDownMenu'#7#10'PopupMenu2'#11'ShowCaption'#9#0 + +#1#6'Action'#7#7'actExit'#7'Visible'#9#4'Left'#3'7'#1#6'Height'#2#25#3'Top'#2 + +#4#5'Width'#2'3'#11'ShowCaption'#9#0#1#6'Action'#7#10'actSysMenu'#7'Visible' + +#9#4'Left'#2'<'#6'Height'#2#25#3'Top'#2#4#5'Width'#2'M'#12'DropDownMenu'#7#10 + +'PopupMenu1'#11'ShowCaption'#9#11'ButtonStyle'#7#11'tbrDropDown'#0#1#6'Actio' + +'n'#7#8'sysAbout'#7'Visible'#9#4'Left'#3'j'#1#6'Height'#2#25#3'Top'#2#4#5'Wi' + +'dth'#2'B'#11'ShowCaption'#9#0#0#9'ImageList'#7#10'ImageList1'#15'PropertySt' + +'orage'#7#15'XMLPropStorage1'#8'BtnWidth'#2#23#9'BtnHeight'#2#24#12'ToolBarS' + +'tyle'#7#12'tbsWindowsXP'#7'Options'#11#10'tpFlatBtns'#14'tpCustomizable'#12 + +'tpGlyphPopup'#14'tpCaptionPopup'#0#7'Version'#2#4#12'ButtonAllign'#7#7'tbaL' + +'eft'#5'Align'#7#5'alTop'#8'AutoSize'#9#11'BorderWidth'#2#4#12'ClientHeight' + +#2' '#11'ClientWidth'#3#138#2#11'FullRepaint'#8#8'TabOrder'#2#0#0#0#10'TImag' + +'eList'#10'ImageList1'#4'left'#3#168#0#3'top'#2'X'#6'Bitmap'#10#14#28#0#0'Li' + +#7#0#0#0#16#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#128#128#255#0#128#128#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#128#128#255#0 + +#128#128#255#0#128#128#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#128#128#255 + +#0#128#128#255#0#128#128#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#0#0#0 + +#0#0#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255 + +#0#128#128#255#0#128#128#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#128#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#128#128#255#0#128#128#255#0#0#0#0#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#192#192#192#255#0#0#0#255#0#0#0#0#0#0#0#255#0 + +#0#128#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#255#0#128#128#255#0#0#0#255#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#192#192#192#255#0#0#0#255#0#0 + +#128#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#192#192#192#255#0#0#0#255 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#128#255#0#0#0#255#192#192#192#255#0#0#0 + +#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#255#0#0#128#255#0#0#0#255#0#0#0#0#0#0#0#255#192#192#192#255#0 + +#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#255#0#0#128#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#192#192#192 + +#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0 + +#128#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#192#192 + +#192#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0 + +#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0 + +#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255 + +#255#255#255#255#255#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#255#255#255#255#255#255#0#0 + +#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#0#0#0#255#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#0#0#0 + ,#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#0#0#0 + +#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#128#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#192#192#192#255#192#192#192#255#192 + +#192#192#255#192#192#192#255#192#192#192#255#192#192#192#255#0#0#0#255#128#0 + +#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#192#192#192 + +#255#0#0#0#255#192#192#192#255#192#192#192#255#192#192#192#255#192#192#192 + +#255#192#192#192#255#192#192#192#255#128#0#0#255#0#0#0#0#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#192#192#192#255#0#0#0#255#192#192#192#255#0#0 + +#0#255#192#192#192#255#192#192#192#255#192#192#192#255#192#192#192#255#192 + +#192#192#255#128#0#0#255#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#0 + +#0#0#255#192#192#192#255#0#0#0#255#192#192#192#255#0#0#0#255#192#192#192#255 + +#0#0#0#255#192#192#192#255#192#192#192#255#192#192#192#255#0#0#0#255#128#0#0 + +#255#0#0#0#0#0#0#0#255#255#255#255#255#0#0#0#255#192#192#192#255#0#0#0#255 + +#255#255#255#255#0#0#0#255#192#192#192#255#0#0#0#255#192#192#192#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#0#128#0#0#255#0#0#0#0#0#0#0#255#255#255#255 + +#255#0#0#0#255#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#0#0 + +#0#255#192#192#192#255#0#0#0#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#0#0#0#255#255 + +#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255 + +#255#128#0#0#255#128#0#0#255#255#255#255#255#128#0#0#255#128#0#0#255#128#0#0 + +#255#128#0#0#255#128#0#0#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#255#255#255#255#255#128#0#0#255#128#0#0#255#255#255#255#255#128#0#0#255#128 + +#0#0#255#128#0#0#255#128#0#0#255#128#0#0#255#255#255#255#255#0#0#0#255#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + ,#255#255#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#255#0#128#0#255#0#128#0#255#0#128#0#255#0#128#0#255#0#0#0#255 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#255#128#0#0#255#128#0#0#255#128#0#0#255 + +#128#0#0#255#128#0#0#255#128#0#0#255#128#0#0#255#128#0#0#255#128#0#0#255#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#255#255#0#0#255#128#0#0 + +#255#255#0#0#255#0#0#0#255#255#255#0#255#255#255#255#255#255#255#0#255#255 + +#255#255#255#128#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128 + +#0#0#255#128#0#0#255#255#0#0#255#128#0#0#255#0#0#0#255#255#255#255#255#255 + +#255#0#255#255#255#255#255#255#255#0#255#128#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#255#255#0#0#255#128#0#0#255#255#0#0#255#0#0 + +#0#255#255#255#0#255#255#255#255#255#255#255#0#255#255#255#255#255#128#0#0 + +#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#255#128#0#0#255 + +#255#0#0#255#128#0#0#255#0#0#0#255#255#255#255#255#255#255#0#255#255#255#255 + +#255#255#255#0#255#128#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#128#0#0#255#255#0#0#255#128#0#0#255#255#0#0#255#0#0#0#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#128#0#0#255#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#255#128#0#0#255#255#0#0#255#128#0#0 + +#255#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#128#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#255 + +#255#0#0#255#128#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#128#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 + +#255#128#0#0#255#128#0#0#255#128#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#128#0#0#255#128#0#0#255#128#0#0#255#128#0#0#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#255#255#255#255#128#128#128#255#255#255#255#255#128#128#128#255#128#128#128 + +#255#128#128#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#255#255#255#255#192#192#192#255#128#128#128#255#192#192#192#255 + +#255#255#255#255#128#128#128#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#255#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#255#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#255#0#255#255#255#0#255#255#255#0#0#0#255#0#0#0#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#255#0#0#0#255#0#255#255#255 + +#0#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#0#0#255#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#0#0#255#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#0#0 + +#0#0#0#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#0#0#0#0#0#0#0#0#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#0#0#0#0#0#0#0#0#0#0#255#0#255#255#255#0 + ,#255#255#255#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#255#0#255#255#255#0#255 + +#255#255#0#0#0#0#0#0#0#0#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0 + +#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#0 + +#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#11'TActionList'#11'ActionList1'#6'Images' + +#7#10'ImageList1'#4'left'#3#216#0#3'top'#2'('#0#7'TAction'#6'actNew'#7'Capti' + +'on'#6#3'New'#4'Hint'#6#10'Action N 1'#10'ImageIndex'#2#3#0#0#7'TAction'#7'a' + +'ctNext'#7'Caption'#6#4'Next'#4'Hint'#6#10'Action N 2'#10'ImageIndex'#2#2#9 + +'OnExecute'#7#14'Action1Execute'#0#0#7'TAction'#8'actPrior'#7'Caption'#6#5'P' + +'rior'#4'Hint'#6#12'Prior action'#10'ImageIndex'#2#1#9'OnExecute'#7#14'Actio' + +'n1Execute'#0#0#7'TAction'#9'actCustom'#7'Caption'#6#6'Custom'#4'Hint'#6#17 + +'Customize toolbar'#10'ImageIndex'#2#0#9'OnExecute'#7#16'actCustomExecute'#0 + +#0#7'TAction'#7'actExit'#7'Caption'#6#4'Exit'#4'Hint'#6#26'exit from demo ap' + +'plication'#10'ImageIndex'#2#5#9'OnExecute'#7#14'actExitExecute'#8'ShortCut' + +#4'X'#128#0#0#0#0#7'TAction'#10'actSysMenu'#3'Tag'#2#4#7'Caption'#6#6'System' + +#10'ImageIndex'#2#4#0#0#7'TAction'#8'sysAbout'#8'Category'#6#6'System'#7'Cap' + +'tion'#6#5'About'#10'ImageIndex'#2#6#9'OnExecute'#7#15'sysAboutExecute'#0#0#0 + +#15'TXMLPropStorage'#15'XMLPropStorage1'#12'StoredValues'#14#0#8'FileName'#6 + +#15'toolbardemo.cfg'#4'left'#3#216#0#3'top'#2'X'#0#0#10'TPopupMenu'#10'Popup' + +'Menu1'#6'Images'#7#10'ImageList1'#4'left'#2#16#3'top'#2'('#0#9'TMenuItem'#9 + +'MenuItem1'#6'Action'#7#6'actNew'#0#0#9'TMenuItem'#9'MenuItem2'#7'Caption'#6 + +#1'-'#0#0#9'TMenuItem'#9'MenuItem4'#6'Action'#7#7'actNext'#7'OnClick'#7#14'A' + +'ction1Execute'#0#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#8'actPrior'#7'OnCl' + +'ick'#7#14'Action1Execute'#0#0#9'TMenuItem'#9'MenuItem8'#7'Caption'#6#1'-'#0 + +#0#9'TMenuItem'#9'MenuItem9'#6'Action'#7#9'actCustom'#7'OnClick'#7#16'actCus' + +'tomExecute'#0#0#9'TMenuItem'#9'MenuItem7'#6'Action'#7#8'sysAbout'#7'OnClick' + +#7#15'sysAboutExecute'#0#0#9'TMenuItem'#9'MenuItem6'#7'Caption'#6#1'-'#0#0#9 + +'TMenuItem'#9'MenuItem5'#6'Action'#7#7'actExit'#7'OnClick'#7#14'actExitExecu' + +'te'#0#0#0#10'TPopupMenu'#10'PopupMenu2'#6'Images'#7#10'ImageList1'#4'left'#3 + +#168#0#3'top'#2'('#0#9'TMenuItem'#10'MenuItem10'#7'Caption'#6#6'Item 1'#0#0#9 + +'TMenuItem'#10'MenuItem11'#7'Caption'#6#6'Item 2'#0#0#9'TMenuItem'#10'MenuIt' + +'em12'#7'Caption'#6#6'Item 3'#0#0#9'TMenuItem'#10'MenuItem13'#7'Caption'#6#6 + +'Item 4'#0#0#0#0 +]); diff --git a/components/rx/version/2.1/Demos/ToolPanel/unit1.pas b/components/rx/version/2.1/Demos/ToolPanel/unit1.pas new file mode 100644 index 000000000..c4e49042e --- /dev/null +++ b/components/rx/version/2.1/Demos/ToolPanel/unit1.pas @@ -0,0 +1,89 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, + Buttons, StdCtrls, rxtoolbar, ActnList, XMLPropStorage, Menus; + + +type + { TMainForm } + + TMainForm = class(TForm) + actExit: TAction; + actSysMenu: TAction; + MenuItem10: TMenuItem; + MenuItem11: TMenuItem; + MenuItem12: TMenuItem; + MenuItem13: TMenuItem; + MenuItem6: TMenuItem; + MenuItem7: TMenuItem; + PopupMenu2: TPopupMenu; + sysAbout: TAction; + actNew: TAction; + actNext: TAction; + actPrior: TAction; + actCustom: TAction; + ActionList1: TActionList; + ImageList1: TImageList; + MenuItem1: TMenuItem; + MenuItem2: TMenuItem; + MenuItem3: TMenuItem; + MenuItem4: TMenuItem; + MenuItem5: TMenuItem; + MenuItem8: TMenuItem; + MenuItem9: TMenuItem; + PopupMenu1: TPopupMenu; + SpeedButton2: TSpeedButton; + ToolPanel1: TToolPanel; + XMLPropStorage1: TXMLPropStorage; + procedure Action1Execute(Sender: TObject); + procedure actCustomExecute(Sender: TObject); + procedure actExitExecute(Sender: TObject); + procedure sysAboutExecute(Sender: TObject); + private + // + public + { public declarations } + end; + +var + MainForm: TMainForm; + + +implementation +uses AboutUnit; + +{ TMainForm } + +procedure TMainForm.Action1Execute(Sender: TObject); +begin + ShowMessage('Hi'); +end; + +procedure TMainForm.actCustomExecute(Sender: TObject); +begin + ToolPanel1.Customize(0); +end; + + +procedure TMainForm.actExitExecute(Sender: TObject); +begin + Close; +end; + +procedure TMainForm.sysAboutExecute(Sender: TObject); +begin + AboutForm:=TAboutForm.Create(Application); + AboutForm.ShowModal; + AboutForm.Free; +end; + +initialization + {$I unit1.lrs} + +end. + diff --git a/components/rx/version/2.1/RxMDICloseIcon.lrs b/components/rx/version/2.1/RxMDICloseIcon.lrs new file mode 100644 index 000000000..2370b4d98 --- /dev/null +++ b/components/rx/version/2.1/RxMDICloseIcon.lrs @@ -0,0 +1,7 @@ +LazarusResources.Add('RxMDICloseIcon','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#11#0#0#0#11#1#3#0#0#0#147'b'#229'e' + +#0#0#0#3'sBIT'#8#8#8#219#225'O'#224#0#0#0#6'PLTE'#0#0#0#0#0#0#165'g'#185#207 + +#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149'+' + +#14#27#0#0#0' IDAT'#8#153'c`'#16'g'#0#2#131#3#12#146#13#12#252'l'#12'l'#12#12 + +#252#12' 6P'#4#12#0'7r'#3'T'#179'3'#141'G'#0#0#0#0'IEND'#174'B`'#130 +]); diff --git a/components/rx/version/2.1/WinXP.manifest b/components/rx/version/2.1/WinXP.manifest new file mode 100644 index 000000000..11b1be573 --- /dev/null +++ b/components/rx/version/2.1/WinXP.manifest @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> + +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <assemblyIdentity + type="win32" + name="DelphiApplication" + version="1.0.0.0" + processorArchitecture="*"/> + <dependency> + <dependentAssembly> + <assemblyIdentity + type="win32" + name="Microsoft.Windows.Common-Controls" + version="6.0.0.0" + publicKeyToken="6595b64144ccf1df" + language="*" + processorArchitecture="*"/> + </dependentAssembly> + </dependency> +</assembly> diff --git a/components/rx/version/2.1/WindowsXP.RES b/components/rx/version/2.1/WindowsXP.RES new file mode 100644 index 0000000000000000000000000000000000000000..909fc7de1206e9c70c6a6ba8cf0ac2def293d04a GIT binary patch literal 744 zcmaiyUu(iJ6vex-C&BmaE#z@vwVM_vts=r;j6LbL=a@zfYZ6J~pMIcyPIptAuCj*( z0&UK@C-?qH5Cj2&eL9^td|s^YYp>se=c?3t!QG8FC6lAb(Vl6;l}vFI_Ap|Ss*KBZ zir*K{ogqfX5}A=)NtWV*89W)cTM03SiDh22TL?jhG%4O`IWly^1Th`Ksa8g<Y=<f_ zB1VM!2s^JJlCPMtAI&?PfiD@8mfJEIAxQ+>I^#smA?!dj3*ApR->^InXG&T^ttpcc z+G<6aF-lK0-EhmO-D#*k4&%yD4>|~8R2bHEgpe(^U^{U6_<*~vmy8*z`PKrI@h6v= zIv7;mm~@*`>D)329n%8pTo%-xPwccJR0*Z%sa+1~B)6J<oYT(d9>bf58dgmK03np@ zI1XCno`bKd$Bo^v^|)UC7gufEEptv^S+P)G44z3mcp5C@e$?+%x{9(@h0)t{BG)^z b2Bh~5#esDWhwv|<-_w$0()FaE3LfhZkX_N^ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/WindowsXP.rc b/components/rx/version/2.1/WindowsXP.rc new file mode 100644 index 000000000..c3847ff82 --- /dev/null +++ b/components/rx/version/2.1/WindowsXP.rc @@ -0,0 +1 @@ +1 24 "WinXP.manifest" diff --git a/components/rx/version/2.1/autopanel.pas b/components/rx/version/2.1/autopanel.pas new file mode 100644 index 000000000..70aa174f0 --- /dev/null +++ b/components/rx/version/2.1/autopanel.pas @@ -0,0 +1,213 @@ +{ AutoPanel unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit AutoPanel; + +{$mode objfpc}{$H+} + +interface + +uses + SysUtils, Classes, LCLType, ExtCtrls; +type + + TPlacement = packed record + Left, Top, Width, Height: Integer; + end; + + PIntArray = ^TRectArray; + TRectArray = array[0..4096] of TPlacement; + + TAutoPanel = class(TPanel) + private + { Private declarations } + protected + { Protected declarations } + pWidth :Integer; + pHeight:Integer; + FAutoChildPosLeft : Boolean; + FAutoChildPosTop : Boolean; + FAutoChildWidth : Boolean; + FAutoChildHeight : Boolean; + PCtrlsCoordArr:PIntArray; + public + { Public declarations } + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Loaded; override; + procedure Resize; override; + published + { Published declarations } + property AutoChildPosLeft : Boolean read FAutoChildPosLeft write FAutoChildPosLeft default False; + property AutoChildPosTop : Boolean read FAutoChildPosTop write FAutoChildPosTop default False; + property AutoChildWidth : Boolean read FAutoChildWidth write FAutoChildWidth default False; + property AutoChildHeight : Boolean read FAutoChildHeight write FAutoChildHeight default False; + + property Align; + property Alignment; + property BevelInner; + property BevelOuter; + property BevelWidth; + property BorderWidth; + property BorderStyle; + property DragCursor; + property DragMode; + property Enabled; + property Caption; + property Color; + property Font; + //property Locked; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnResize; + property OnStartDrag; + + property Anchors; + property AutoSize; + //property BiDiMode; + property Constraints; + property UseDockManager default True; + property DockSite; + property DragKind; + property FullRepaint; + //property ParentBiDiMode; + + //property OnCanResize; + property OnConstrainedResize; + property OnDockDrop; + property OnDockOver; + property OnEndDock; + property OnGetSiteInfo; + property OnStartDock; + property OnUnDock; + end; + +//procedure Register; + +implementation + +//-------------------------------------- +constructor TAutoPanel.Create(AOwner: TComponent); +begin + inherited; + FAutoChildPosLeft := False; + FAutoChildPosTop := False; + FAutoChildWidth := False; + FAutoChildHeight := False; + pWidth := -1; + pHeight := -1; + PCtrlsCoordArr := nil; +end; + + +destructor TAutoPanel.Destroy; +begin + inherited; + FreeMem(PCtrlsCoordArr); +end; + +procedure TAutoPanel.Loaded; +var i:Integer; +begin + inherited Loaded; + if (csDesigning in ComponentState) then Exit; + + if (pWidth = -1) and (pHeight = -1) then begin + GetMem(PCtrlsCoordArr, ControlCount * sizeof(TRect)); + for i := 0 to ControlCount - 1 do begin + PCtrlsCoordArr^[i].Left := Controls[i].Left; + PCtrlsCoordArr^[i].Top := Controls[i].Top; + PCtrlsCoordArr^[i].Width := Controls[i].Width; + PCtrlsCoordArr^[i].Height := Controls[i].Height; + end; + pWidth := Width; + pHeight := Height; + end; +end; + +procedure TAutoPanel.Resize; +var I:Integer; +begin + inherited; + if (csDesigning in ComponentState) then Exit; + if not (AutoChildPosLeft or AutoChildWidth or AutoChildPosTop or AutoChildHeight) then Exit; + try + for i := 0 to ControlCount - 1 do + begin + if(AutoChildPosLeft = true) then + if (AutoChildWidth = true) then + begin + Controls[i].Left := MulDiv (PCtrlsCoordArr^[i].Left,Width,pWidth); + Controls[i].Width := MulDiv (PCtrlsCoordArr^[i].Width,Width,pWidth); + end + else + Controls[i].Left := Round( + PCtrlsCoordArr^[i].Left * Width / pWidth + + ((PCtrlsCoordArr^[i].Width) * Width / pWidth - + (PCtrlsCoordArr^[i].Width))/2 + ); + + if(AutoChildPosTop = true) then + if (AutoChildHeight = true) then + begin + Controls[i].Top := MulDiv (PCtrlsCoordArr^[i].Top,Height,pHeight); + Controls[i].Height := MulDiv (PCtrlsCoordArr^[i].Height,Height,pHeight); + end + else + Controls[i].Top := Round( + PCtrlsCoordArr^[i].Top * Height / pHeight + + ((PCtrlsCoordArr^[i].Height) * Height / pHeight - + (PCtrlsCoordArr^[i].Height))/2 + ); + end; + finally + end; +end; +//-------------------------------------- + +end. diff --git a/components/rx/version/2.1/boxprocs.pas b/components/rx/version/2.1/boxprocs.pas new file mode 100644 index 000000000..dc7f50b67 --- /dev/null +++ b/components/rx/version/2.1/boxprocs.pas @@ -0,0 +1,326 @@ +{ boxprocs unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit boxprocs; + +{$I rx.inc} + +interface + +uses Classes, Controls, StdCtrls; +const + LB_ERR = -1; + +procedure BoxMoveSelectedItems(SrcList, DstList: TWinControl); +procedure BoxMoveAllItems(SrcList, DstList: TWinControl); +procedure BoxDragOver(List: TWinControl; Source: TObject; + X, Y: Integer; State: TDragState; var Accept: Boolean; Sorted: Boolean); +procedure BoxMoveFocusedItem(List: TWinControl; DstIndex: Integer); + +procedure BoxMoveSelected(List: TWinControl; Items: TStrings); +procedure BoxSetItem(List: TWinControl; Index: Integer); +function BoxGetFirstSelection(List: TWinControl): Integer; +function BoxCanDropItem(List: TWinControl; X, Y: Integer; + var DragIndex: Integer): Boolean; + +implementation + +uses LCLIntf, Graphics; + +function BoxItems(List: TWinControl): TStrings; +begin + if List is TCustomListBox then + Result := TCustomListBox(List).Items +{ else if List is TRxCustomListBox then + Result := TRxCustomListBox(List).Items} + else Result := nil; +end; + +function BoxGetSelected(List: TWinControl; Index: Integer): Boolean; +begin + if List is TCustomListBox then + begin + if TCustomListBox(List).MultiSelect then + Result := TCustomListBox(List).Selected[Index] + else + Result := TCustomListBox(List).ItemIndex = Index + end +{ else if List is TRxCustomListBox then + Result := TRxCustomListBox(List).Selected[Index]} + else Result := False; +end; + +procedure BoxSetSelected(List: TWinControl; Index: Integer; Value: Boolean); +begin + if List is TCustomListBox then + TCustomListBox(List).Selected[Index] := Value +{ else if List is TRxCustomListBox then + TRxCustomListBox(List).Selected[Index] := Value;} +end; + +function BoxGetItemIndex(List: TWinControl): Integer; +begin + if List is TCustomListBox then + Result := TCustomListBox(List).ItemIndex +{ else if List is TRxCustomListBox then + Result := TRxCustomListBox(List).ItemIndex} + else Result := -1; +end; + +{$IFNDEF WIN32} +{function BoxGetCanvas(List: TWinControl): TCanvas; +begin + if List is TCustomListBox then + Result := TCustomListBox(List).Canvas + else if List is TRxCustomListBox then + Result := TRxCustomListBox(List).Canvas + else Result := nil; +end; +} +{$ENDIF} + +procedure BoxSetItemIndex(List: TWinControl; Index: Integer); +begin + if List is TCustomListBox then + TCustomListBox(List).ItemIndex := Index +{ else if List is TRxCustomListBox then + TRxCustomListBox(List).ItemIndex := Index;} +end; + +function BoxMultiSelect(List: TWinControl): Boolean; +begin + if List is TCustomListBox then + Result := TListBox(List).MultiSelect +{ else if List is TRxCustomListBox then + Result := TRxCheckListBox(List).MultiSelect} + else Result := False; +end; + +function BoxSelCount(List: TWinControl): Integer; +begin + if List is TCustomListBox then + Result := TCustomListBox(List).SelCount +{ else if List is TRxCustomListBox then + Result := TRxCustomListBox(List).SelCount} + else Result := 0; +end; + +function BoxItemAtPos(List: TWinControl; Pos: TPoint; + Existing: Boolean): Integer; +begin + if List is TCustomListBox then + Result := TCustomListBox(List).ItemAtPos(Pos, Existing) +{ else if List is TRxCustomListBox then + Result := TRxCustomListBox(List).ItemAtPos(Pos, Existing)} + else Result := LB_ERR; +end; + +function BoxItemRect(List: TWinControl; Index: Integer): TRect; +begin + if List is TCustomListBox then + Result := TCustomListBox(List).ItemRect(Index) +{ else if List is TRxCustomListBox then + Result := TRxCustomListBox(List).ItemRect(Index)} + else FillChar(Result, SizeOf(Result), 0); +end; + +procedure BoxMoveSelected(List: TWinControl; Items: TStrings); +var + I: Integer; +begin + if BoxItems(List) = nil then Exit; + I := 0; + while I < BoxItems(List).Count do begin + if BoxGetSelected(List, I) then begin + Items.AddObject(BoxItems(List).Strings[I], BoxItems(List).Objects[I]); + BoxItems(List).Delete(I); + end + else Inc(I); + end; +end; + +function BoxGetFirstSelection(List: TWinControl): Integer; +var + I: Integer; +begin + Result := LB_ERR; + if BoxItems(List) = nil then Exit; + for I := 0 to BoxItems(List).Count - 1 do begin + if BoxGetSelected(List, I) then begin + Result := I; + Exit; + end; + end; + Result := LB_ERR; +end; + +procedure BoxSetItem(List: TWinControl; Index: Integer); +var + MaxIndex: Integer; +begin + if BoxItems(List) = nil then Exit; + with List do begin + if CanFocus then SetFocus; + MaxIndex := BoxItems(List).Count - 1; + if Index = LB_ERR then Index := 0 + else if Index > MaxIndex then Index := MaxIndex; + if Index >= 0 then begin + if BoxMultiSelect(List) then BoxSetSelected(List, Index, True) + else BoxSetItemIndex(List, Index); + end; + end; +end; + +procedure BoxMoveSelectedItems(SrcList, DstList: TWinControl); +var + Index, I, NewIndex: Integer; +begin + Index := BoxGetFirstSelection(SrcList); + if Index <> LB_ERR then + begin + BoxItems(SrcList).BeginUpdate; + BoxItems(DstList).BeginUpdate; + try + I := 0; + while I < BoxItems(SrcList).Count do + begin + if BoxGetSelected(SrcList, I) then + begin + NewIndex := BoxItems(DstList).AddObject(BoxItems(SrcList).Strings[I], + BoxItems(SrcList).Objects[I]); +{ if (SrcList is TRxCheckListBox) and (DstList is TRxCheckListBox) then + begin + TRxCheckListBox(DstList).State[NewIndex] := + TRxCheckListBox(SrcList).State[I]; + end;} + BoxItems(SrcList).Delete(I); + end + else Inc(I); + end; + BoxSetItem(SrcList, Index); + finally + BoxItems(SrcList).EndUpdate; + BoxItems(DstList).EndUpdate; + end; + end; +end; + +procedure BoxMoveAllItems(SrcList, DstList: TWinControl); +var + I, NewIndex: Integer; +begin + for I := 0 to BoxItems(SrcList).Count - 1 do begin + NewIndex := BoxItems(DstList).AddObject(BoxItems(SrcList)[I], + BoxItems(SrcList).Objects[I]); +{ if (SrcList is TRxCheckListBox) and (DstList is TRxCheckListBox) then + begin + TRxCheckListBox(DstList).State[NewIndex] := + TRxCheckListBox(SrcList).State[I]; + end;} + end; + BoxItems(SrcList).Clear; + BoxSetItem(SrcList, 0); +end; + +function BoxCanDropItem(List: TWinControl; X, Y: Integer; + var DragIndex: Integer): Boolean; +var + Focused: Integer; +begin + Result := False; +{ if (BoxSelCount(List) = 1) or (not BoxMultiSelect(List)) then begin + Focused := BoxGetItemIndex(List); + if Focused <> LB_ERR then begin + DragIndex := BoxItemAtPos(List, Point(X, Y), True); + if (DragIndex >= 0) and (DragIndex <> Focused) then begin + Result := True; + end; + end; + end;} +end; + +procedure BoxDragOver(List: TWinControl; Source: TObject; + X, Y: Integer; State: TDragState; var Accept: Boolean; Sorted: Boolean); +var + DragIndex: Integer; + R: TRect; +(* + procedure DrawItemFocusRect(Idx: Integer); +{$IFDEF WIN32} + var + P: TPoint; + DC: HDC; +{$ENDIF} + begin + R := BoxItemRect(List, Idx); +{$IFDEF WIN32} + P := List.ClientToScreen(R.TopLeft); + R := Bounds(P.X, P.Y, R.Right - R.Left, R.Bottom - R.Top); + DC := GetDC(0); + DrawFocusRect(DC, R); + ReleaseDC(0, DC); +{$ELSE} + BoxGetCanvas(List).DrawFocusRect(R); +{$ENDIF} + end; +*) +begin +{ if Source <> List then + Accept := (Source is TWinControl) or (Source is TRxCustomListBox) + else begin + if Sorted then Accept := False + else begin + Accept := BoxCanDropItem(List, X, Y, DragIndex); + if ((List.Tag - 1) = DragIndex) and (DragIndex >= 0) then begin + if State = dsDragLeave then begin + DrawItemFocusRect(List.Tag - 1); + List.Tag := 0; + end; + end + else begin + if List.Tag > 0 then DrawItemFocusRect(List.Tag - 1); + if DragIndex >= 0 then DrawItemFocusRect(DragIndex); + List.Tag := DragIndex + 1; + end; + end; + end;} +end; + +procedure BoxMoveFocusedItem(List: TWinControl; DstIndex: Integer); +begin + if (DstIndex >= 0) and (DstIndex < BoxItems(List).Count) then + if (DstIndex <> BoxGetItemIndex(List)) then begin + BoxItems(List).Move(BoxGetItemIndex(List), DstIndex); + BoxSetItem(List, DstIndex); + end; +end; + +end. diff --git a/components/rx/version/2.1/curredit.pas b/components/rx/version/2.1/curredit.pas new file mode 100644 index 000000000..50980260f --- /dev/null +++ b/components/rx/version/2.1/curredit.pas @@ -0,0 +1,725 @@ +{ curredit unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit curredit; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, {StdCtrls,} + LMessages, MaskEdit; + +type + + { TCustomNumEdit } + + TCustomNumEdit = class(TCustomMaskEdit) + private + FCanvas: TControlCanvas; + FAlignment: TAlignment; + FBeepOnError: Boolean; + FCheckOnExit: Boolean; + FDecimalPlaces: Cardinal; + FDisplayFormat: string; + FFormatOnEditing: Boolean; + FFormatting: Boolean; + FMaxValue: Extended; + FMinValue: Extended; + FValue: Extended; + FFocused: Boolean; + FZeroEmpty: Boolean; + function GetAsInteger: Longint; + function GetText: string; + function GetValue: Extended; + function IsFormatStored: boolean; + procedure SetAlignment(const AValue: TAlignment); + procedure SetAsInteger(const AValue: Longint); + procedure SetBeepOnError(const AValue: Boolean); + procedure SetDecimalPlaces(const AValue: Cardinal); + procedure SetDisplayFormat(const AValue: string); + procedure SetFormatOnEditing(const AValue: Boolean); + procedure SetMaxValue(const AValue: Extended); + procedure SetMinValue(const AValue: Extended); + procedure SetText(const AValue: string); + procedure SetValue(const AValue: Extended); + procedure SetZeroEmpty(const AValue: Boolean); + function TextToValText(const AValue: string): string; + function CheckValue(NewValue: Extended; RaiseOnError: Boolean): Extended; + procedure SetFocused(Value: Boolean); + protected + //messages + procedure CMEnabledChanged(var Message: TLMessage); message CM_ENABLEDCHANGED; + procedure CMEnter(var Message: TLMEnter); message LM_ENTER; + procedure WMExit(var Message: TLMExit); message LM_EXIT; + procedure CMFontChanged(var Message: TLMessage); message CM_FONTCHANGED; + procedure WMPaint(var Message: TLMPaint); message LM_PAINT; + procedure WMPaste(var Message: TLMessage); message LM_PASTE; + procedure GetSel(var ASelStart: Integer; var SelStop: Integer); + procedure DoEnter; override; + procedure DoExit; override; +// procedure AcceptValue(const Value: Variant); override; + + procedure Change; override; + procedure ReformatEditText; dynamic; + procedure DataChanged; virtual; + function DefaultDisplayFormat: string; virtual; + procedure KeyPress(var Key: Char); override; + function IsValidChar(Key: Char): Boolean; virtual; + function FormatDisplayText(Value: Extended): string; + function GetDisplayText: string; virtual; + procedure Reset; override; + procedure CheckRange; + procedure UpdateData; + property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; + property Formatting: Boolean read FFormatting; + property BeepOnError: Boolean read FBeepOnError write SetBeepOnError + default True; + property CheckOnExit: Boolean read FCheckOnExit write FCheckOnExit default False; + property DecimalPlaces: Cardinal read FDecimalPlaces write SetDecimalPlaces + default 2; + property DisplayFormat: string read FDisplayFormat write SetDisplayFormat stored IsFormatStored; + property MaxValue: Extended read FMaxValue write SetMaxValue; + property MinValue: Extended read FMinValue write SetMinValue; + property FormatOnEditing: Boolean read FFormatOnEditing + write SetFormatOnEditing default False; + property Text: string read GetText write SetText stored False; + property MaxLength default 0; + property ZeroEmpty: Boolean read FZeroEmpty write SetZeroEmpty default True; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Clear; + property AsInteger: Longint read GetAsInteger write SetAsInteger; + property DisplayText: string read GetDisplayText; + property Value: Extended read GetValue write SetValue; + published + { Published declarations } + end; + + { TCurrencyEdit } + + TCurrencyEdit = class(TCustomNumEdit) + protected + function DefaultDisplayFormat: string; override; + public + constructor Create(AOwner: TComponent); override; + published + property Alignment; + property AutoSelect; + property AutoSize; + property BeepOnError; + property BorderStyle; + property BorderSpacing; + property CheckOnExit; + property Color; + property DecimalPlaces; + property DisplayFormat; + property DragCursor; + property DragMode; + property Enabled; + property Font; + property FormatOnEditing; + property HideSelection; + property Anchors; + property BiDiMode; + property Constraints; + property DragKind; + property ParentBiDiMode; +{$IFDEF WIN32} + {$IFNDEF VER90} +// property ImeMode; +// property ImeName; + {$ENDIF} +{$ENDIF} + property MaxLength; + property MaxValue; + property MinValue; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ReadOnly; + property ShowHint; + property TabOrder; + property TabStop; + property Text; + property Value; + property Visible; + property ZeroEmpty; + property OnChange; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + + property OnContextPopup; + property OnStartDrag; + property OnEndDock; + property OnStartDock; + end; + +implementation +uses {rxstrutils, } strutils, Math, tooledit, rxconst; + +function IsValidFloat(const Value: string; var RetValue: Extended): Boolean; +var + I: Integer; + Buffer: array[0..63] of Char; +begin + Result := False; + for I := 1 to Length(Value) do + if not (Value[I] in [DefaultFormatSettings.DecimalSeparator, '-', '+', '0'..'9', 'e', 'E']) then + Exit; + Result := TextToFloat(StrPLCopy(Buffer, Value, + SizeOf(Buffer) - 1), RetValue, fvExtended); +end; + +function FormatFloatStr(const S: string; Thousands: Boolean): string; +var + I, MaxSym, MinSym, Group: Integer; + IsSign: Boolean; +begin + Result := ''; + MaxSym := Length(S); + IsSign := (MaxSym > 0) and (S[1] in ['-', '+']); + if IsSign then MinSym := 2 + else MinSym := 1; + I := Pos(DefaultFormatSettings.DecimalSeparator, S); + if I > 0 then MaxSym := I - 1; + I := Pos('E', AnsiUpperCase(S)); + if I > 0 then MaxSym := Min(I - 1, MaxSym); + Result := Copy(S, MaxSym + 1, MaxInt); + Group := 0; + for I := MaxSym downto MinSym do begin + Result := S[I] + Result; + Inc(Group); + if (Group = 3) and Thousands and (I > MinSym) then begin + Group := 0; + Result := DefaultFormatSettings.ThousandSeparator + Result; + end; + end; + if IsSign then Result := S[1] + Result; +end; + +{ TCustomNumEdit } + +function TCustomNumEdit.GetAsInteger: Longint; +begin + Result := Trunc(Value); +end; + +function TCustomNumEdit.GetDisplayText: string; +begin + Result := FormatDisplayText(FValue); +end; + +procedure TCustomNumEdit.Reset; +begin + DataChanged; + SelectAll; +end; + +procedure TCustomNumEdit.CheckRange; +begin + if not (csDesigning in ComponentState) and CheckOnExit then + CheckValue(StrToFloat(TextToValText(EditText)), True); +end; + +procedure TCustomNumEdit.UpdateData; +begin + ValidateEdit; + FValue := CheckValue(StrToFloat(TextToValText(EditText)), False); +end; + +constructor TCustomNumEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + ControlStyle := ControlStyle - [csSetCaption]; + MaxLength := 0; + FBeepOnError := True; + FAlignment := taRightJustify; + FDisplayFormat := DefaultDisplayFormat; + FDecimalPlaces := 2; + FZeroEmpty := True; + inherited Text := ''; + inherited Alignment := taLeftJustify; +// FDefNumGlyphs := 2; + { forces update } + DataChanged; + ControlState := ControlState + [csCreating]; +end; + +destructor TCustomNumEdit.Destroy; +begin + FCanvas.Free; +{ if FPopup <> nil then begin + TPopupWindow(FPopup).OnCloseUp := nil; + FPopup.Free; + FPopup := nil; + end;} + inherited Destroy; +end; + +function TCustomNumEdit.GetText: string; +begin + Result := inherited Text; +end; + +function TCustomNumEdit.GetValue: Extended; +begin + if not (csDesigning in ComponentState) then + try + UpdateData; + except + FValue := FMinValue; + end; + Result := FValue; +end; + +function TCustomNumEdit.IsFormatStored: boolean; +begin + Result := (DisplayFormat <> DefaultDisplayFormat); +end; + +procedure TCustomNumEdit.SetAlignment(const AValue: TAlignment); +begin + if FAlignment=AValue then exit; + FAlignment:=AValue; + Invalidate; +end; + +procedure TCustomNumEdit.SetAsInteger(const AValue: Longint); +begin + SetValue(AValue); +end; + +procedure TCustomNumEdit.SetBeepOnError(const AValue: Boolean); +begin + if FBeepOnError=AValue then exit; + FBeepOnError:=AValue; +end; + +procedure TCustomNumEdit.SetDecimalPlaces(const AValue: Cardinal); +begin + if FDecimalPlaces=AValue then exit; + FDecimalPlaces:=AValue; + DataChanged; + Invalidate; +end; + +procedure TCustomNumEdit.SetDisplayFormat(const AValue: string); +begin + if FDisplayFormat=AValue then exit; + FDisplayFormat:=AValue; + Invalidate; + DataChanged; +end; + +procedure TCustomNumEdit.SetFormatOnEditing(const AValue: Boolean); +begin + if FFormatOnEditing=AValue then exit; + FFormatOnEditing:=AValue; + if FFormatOnEditing then +// FAlignment := AValue + else + FAlignment := taLeftJustify; + if FFormatOnEditing and FFocused then + ReformatEditText + else + if FFocused then + begin + UpdateData; + DataChanged; + end; +end; + +procedure TCustomNumEdit.SetMaxValue(const AValue: Extended); +begin + if FMaxValue=AValue then exit; + FMaxValue:=AValue; + if Value > AValue then + Value:=AValue; +end; + +procedure TCustomNumEdit.SetMinValue(const AValue: Extended); +begin + if FMinValue=AValue then exit; + FMinValue:=AValue; + if Value < AValue then + Value:=AValue; +end; + +procedure TCustomNumEdit.SetText(const AValue: string); +begin + if not (csReading in ComponentState) then + begin + FValue := CheckValue(StrToFloat(TextToValText(AValue)), False); + DataChanged; + Invalidate; + end; +end; + +procedure TCustomNumEdit.SetValue(const AValue: Extended); +begin + FValue := CheckValue(AValue, False); + DataChanged; + Invalidate; +end; + +procedure TCustomNumEdit.SetZeroEmpty(const AValue: Boolean); +begin + if FZeroEmpty=AValue then exit; + FZeroEmpty:=AValue; + DataChanged; +end; + +function TCustomNumEdit.TextToValText(const AValue: string): string; +begin + Result := Trim(AValue); + if DefaultFormatSettings.DecimalSeparator <> DefaultFormatSettings.ThousandSeparator then begin + Result := DelChars(Result, ThousandSeparator); + end; + if (DefaultFormatSettings.DecimalSeparator <> '.') and (DefaultFormatSettings.ThousandSeparator <> '.') then + Result := StringReplace(Result, '.', DefaultFormatSettings.DecimalSeparator, [rfReplaceAll]); + if (DefaultFormatSettings.DecimalSeparator <> ',') and (DefaultFormatSettings.ThousandSeparator <> ',') then + Result := StringReplace(Result, ',', DefaultFormatSettings.DecimalSeparator, [rfReplaceAll]); + if Result = '' then Result := '0' + else if Result = '-' then Result := '-0'; +end; + +function TCustomNumEdit.CheckValue(NewValue: Extended; RaiseOnError: Boolean + ): Extended; +begin + Result := NewValue; + if (FMaxValue <> FMinValue) then begin + if (FMaxValue > FMinValue) then begin + if NewValue < FMinValue then Result := FMinValue + else if NewValue > FMaxValue then Result := FMaxValue; + end + else begin + if FMaxValue = 0 then begin + if NewValue < FMinValue then Result := FMinValue; + end + else if FMinValue = 0 then begin + if NewValue > FMaxValue then Result := FMaxValue; + end; + end; + if RaiseOnError and (Result <> NewValue) then + raise ERangeError.CreateFmt(StringReplace(SOutOfRange, '%d', '%.*f', [rfReplaceAll]), + [DecimalPlaces, FMinValue, DecimalPlaces, FMaxValue]); + end; +end; + +procedure TCustomNumEdit.SetFocused(Value: Boolean); +begin + if FFocused <> Value then + begin + FFocused := Value; + Invalidate; + FFormatting := True; + try + DataChanged; + finally + FFormatting := False; + end; + end; +end; + +procedure TCustomNumEdit.CMEnabledChanged(var Message: TLMessage); +begin + inherited; + if NewStyleControls and not FFocused then Invalidate; +end; + +procedure TCustomNumEdit.CMEnter(var Message: TLMEnter); +begin + SetFocused(True); + if FFormatOnEditing then ReformatEditText; + inherited; +end; + +procedure TCustomNumEdit.WMExit(var Message: TLMExit); +begin + inherited; + try + CheckRange; + UpdateData; + except + SelectAll; + if CanFocus then SetFocus; + raise; + end; + SetFocused(False); + Cursor:=0; + DoExit; +end; + +procedure TCustomNumEdit.CMFontChanged(var Message: TLMessage); +begin + inherited; + Invalidate; +end; + +procedure TCustomNumEdit.WMPaint(var Message: TLMPaint); +var + S: string; +begin + S := GetDisplayText; +// if not FFocused then +// else + if not PaintComboEdit(Self, S, FAlignment, FFocused {and not PopupVisible}, FCanvas, Message) then + inherited WMPaint(Message); +end; + +procedure TCustomNumEdit.WMPaste(var Message: TLMessage); +var + S: string; +begin + S := EditText; + try + inherited; + UpdateData; + except + EditText := S; + SelectAll; + if CanFocus then SetFocus; +// if BeepOnError then MessageBeep(0); + end; +end; + +procedure TCustomNumEdit.GetSel(var ASelStart: Integer; var SelStop: Integer); +begin + ASelStart:=SelStart; + SelStop:=SelStart + SelLength; +end; + +procedure TCustomNumEdit.DoEnter; +begin + SetFocused(True); + if FFormatOnEditing then ReformatEditText; + inherited DoEnter; +end; + +procedure TCustomNumEdit.DoExit; +begin + try + CheckRange; + UpdateData; + except + SelectAll; + if CanFocus then SetFocus; + raise; + end; + SetFocused(False); + Cursor:=0; + + inherited DoExit; + Invalidate; +end; + +{procedure TCustomNumEdit.AcceptValue(const Value: Variant); +begin + inherited AcceptValue(Value); +end;} + +procedure TCustomNumEdit.Change; +begin + if not FFormatting then + begin + if FFormatOnEditing and FFocused then ReformatEditText; + inherited Change; + end; +end; + +procedure TCustomNumEdit.ReformatEditText; +var + S: string; + IsEmpty: Boolean; + OldLen, ASelStart, SelStop: Integer; +begin + FFormatting := True; + try + S := inherited Text; + OldLen := Length(S); + IsEmpty := (OldLen = 0) or (S = '-'); + if HandleAllocated then GetSel(ASelStart, SelStop); + if not IsEmpty then S := TextToValText(S); + S := FormatFloatStr(S, Pos(',', DisplayFormat) > 0); + inherited Text := S; +{ if HandleAllocated and (GetFocus = Handle) and not + (csDesigning in ComponentState) then + begin + Inc(ASelStart, Length(S) - OldLen); + SetCursor(ASelStart); + end;} + finally + FFormatting := False; + end; +end; + +procedure TCustomNumEdit.DataChanged; +var + EditFormat: string; +begin + EditFormat := '0'; + if FDecimalPlaces > 0 then + EditFormat := EditFormat + '.' + DupeString('#', FDecimalPlaces); + if (FValue = 0.0) and FZeroEmpty then + EditText := '' + else + EditText := FormatFloat(EditFormat, FValue); +end; + +function TCustomNumEdit.DefaultDisplayFormat: string; +begin + Result := ',0.##'; +end; + +procedure TCustomNumEdit.KeyPress(var Key: Char); +begin +{ if PopupVisible and (UpCase(Key) in ['0'..'9', DecimalSeparator, '.', ',', + '+', '-', '*', '/', '_', '=', 'C', 'R', 'Q', '%', #8, #13] - + [ThousandSeparator]) then + begin + THack(FPopup).KeyPress(Key); + Key := #0; + end;} + if Key in ['.', ','] - [DefaultFormatSettings.ThousandSeparator] then + Key := DefaultFormatSettings.DecimalSeparator; + inherited KeyPress(Key); + if (Key in [#32..#255]) and not IsValidChar(Key) then + begin +// if BeepOnError then MessageBeep(0); + Key := #0; + end + else + if Key = #27 then begin + Reset; + Key := #0; + end; +end; + +function TCustomNumEdit.IsValidChar(Key: Char): Boolean; +var + S: string; + ASelStart, SelStop, DecPos: Integer; + RetValue: Extended; +begin + Result := False; + S := EditText; + GetSel(ASelStart, SelStop); + System.Delete(S, ASelStart + 1, SelStop - ASelStart); + System.Insert(Key, S, ASelStart + 1); + S := TextToValText(S); + DecPos := Pos(DefaultFormatSettings.DecimalSeparator, S); + if (DecPos > 0) then + begin + ASelStart := Pos('E', UpperCase(S)); + if (ASelStart > DecPos) then + DecPos := ASelStart - DecPos + else + DecPos := Length(S) - DecPos; + if DecPos > Integer(FDecimalPlaces) then + Exit; + + if S[1] = DefaultFormatSettings.DecimalSeparator then + s := '0' + s; + end; + Result := IsValidFloat(S, RetValue); + if Result and (FMinValue >= 0) and (FMaxValue > 0) and (RetValue < 0) then + Result := False; +end; + +function TCustomNumEdit.FormatDisplayText(Value: Extended): string; +begin + if DisplayFormat <> '' then + Result := FormatFloat(DisplayFormat, Value) + else + Result := FloatToStr(Value); +end; + +procedure TCustomNumEdit.Clear; +begin + +end; + +{ TCurrencyEdit } + +function TCurrencyEdit.DefaultDisplayFormat: string; +var + CurrStr: string; + I: Integer; + C: Char; +begin + Result := ',0.' + DupeString('0', DefaultFormatSettings.CurrencyDecimals); + CurrStr := ''; + for I := 1 to Length(DefaultFormatSettings.CurrencyString) do + begin + C := DefaultFormatSettings.CurrencyString[I]; + if C in [',', '.'] then + begin + CurrStr := CurrStr + '''' + C + '''' + end + else CurrStr := CurrStr + C; + end; + if Length(CurrStr) > 0 then + case DefaultFormatSettings.CurrencyFormat of + 0: Result := CurrStr + Result; { '$1' } + 1: Result := Result + CurrStr; { '1$' } + 2: Result := CurrStr + ' ' + Result; { '$ 1' } + 3: Result := Result + ' ' + CurrStr; { '1 $' } + end; + Result := Format('%s;-%s', [Result, Result]); +end; + +constructor TCurrencyEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + ControlState := ControlState + [csCreating]; + try +// ButtonWidth := 0; + finally + ControlState := ControlState - [csCreating]; + end; +end; + +end. diff --git a/components/rx/version/2.1/dateutil.pas b/components/rx/version/2.1/dateutil.pas new file mode 100644 index 000000000..1c0633027 --- /dev/null +++ b/components/rx/version/2.1/dateutil.pas @@ -0,0 +1,649 @@ +{ DateUtil unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit dateutil; + +{$I rx.inc} + +interface + +function CurrentYear: Word; +function IsLeapYear(AYear: Integer): Boolean; +function DaysPerMonth(AYear, AMonth: Integer): Integer; +function FirstDayOfPrevMonth: TDateTime; +function LastDayOfPrevMonth: TDateTime; +function FirstDayOfNextMonth: TDateTime; +function ExtractDay(ADate: TDateTime): Word; +function ExtractMonth(ADate: TDateTime): Word; +function ExtractYear(ADate: TDateTime): Word; +function IncDate(ADate: TDateTime; Days, Months, Years: Integer): TDateTime; +function IncDay(ADate: TDateTime; Delta: Integer): TDateTime; +function IncMonth(ADate: TDateTime; Delta: Integer): TDateTime; +function IncYear(ADate: TDateTime; Delta: Integer): TDateTime; +function ValidDate(ADate: TDateTime): Boolean; +procedure DateDiff(Date1, Date2: TDateTime; var Days, Months, Years: Word); +function MonthsBetween(Date1, Date2: TDateTime): Double; +function DaysInPeriod(Date1, Date2: TDateTime): Longint; + { Count days between Date1 and Date2 + 1, so if Date1 = Date2 result = 1 } +function DaysBetween(Date1, Date2: TDateTime): Longint; + { The same as previous but if Date2 < Date1 result = 0 } + +function IncTime(ATime: TDateTime; Hours, Minutes, Seconds, MSecs: Integer): TDateTime; +function IncHour(ATime: TDateTime; Delta: Integer): TDateTime; +function IncMinute(ATime: TDateTime; Delta: Integer): TDateTime; +function IncSecond(ATime: TDateTime; Delta: Integer): TDateTime; +function IncMSec(ATime: TDateTime; Delta: Integer): TDateTime; +function CutTime(ADate: TDateTime): TDateTime; { Set time to 00:00:00:00 } + +type + TDateOrder = (doMDY, doDMY, doYMD); + TDayOfWeekName = (Sun, Mon, Tue, Wed, Thu, Fri, Sat); + TDaysOfWeek = set of TDayOfWeekName; + +{ String to date conversions } +function GetDateOrder(const DateFormat: string): TDateOrder; +function MonthFromName(const S: string; MaxLen: Byte): Byte; +function StrToDateDef(const S: string; Default: TDateTime): TDateTime; +function StrToDateFmt(const DateFormat, S: string): TDateTime; +function StrToDateFmtDef(const DateFormat, S: string; Default: TDateTime): TDateTime; +function DefDateFormat(FourDigitYear: Boolean): string; +function DefDateMask(BlanksChar: Char; FourDigitYear: Boolean): string; +function NvlDate(DateValue, DefaultValue: TDateTime): TDateTime; + +{$IFDEF WIN32} +function FormatLongDate(Value: TDateTime): string; +function FormatLongDateTime(Value: TDateTime): string; +{$ENDIF} + +const + DefaultDateOrder = doDMY; + +{$IFDEF USE_FOUR_DIGIT_YEAR} +var + FourDigitYear: Boolean; +{$ELSE} +function FourDigitYear: Boolean; +{$ENDIF USE_FOUR_DIGIT_YEAR} + +const + CenturyOffset: Byte = 60; + NullDate: TDateTime = 0; + +implementation + +uses SysUtils, RXStrUtils, rxdconst{, DBConsts }{$IFDEF WIN32}, Windows{$ENDIF}; + + +function NvlDate(DateValue, DefaultValue: TDateTime): TDateTime; +begin + if DateValue = NullDate then Result := DefaultValue + else Result := DateValue; +end; + +function IsLeapYear(AYear: Integer): Boolean; +begin + Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or (AYear mod 400 = 0)); +end; + +function DaysPerMonth(AYear, AMonth: Integer): Integer; +const + DaysInMonth: array[1..12] of Integer = + (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); +begin + Result := DaysInMonth[AMonth]; + if (AMonth = 2) and IsLeapYear(AYear) then Inc(Result); { leap-year Feb is special } +end; + +function FirstDayOfNextMonth: TDateTime; +var + Year, Month, Day: Word; +begin + DecodeDate(Date, Year, Month, Day); + Day := 1; + if Month < 12 then Inc(Month) + else begin + Inc(Year); + Month := 1; + end; + Result := EncodeDate(Year, Month, Day); +end; + +function FirstDayOfPrevMonth: TDateTime; +var + Year, Month, Day: Word; +begin + DecodeDate(Date, Year, Month, Day); + Day := 1; + if Month > 1 then Dec(Month) + else begin + Dec(Year); + Month := 12; + end; + Result := EncodeDate(Year, Month, Day); +end; + +function LastDayOfPrevMonth: TDateTime; +var + D: TDateTime; + Year, Month, Day: Word; +begin + D := FirstDayOfPrevMonth; + DecodeDate(D, Year, Month, Day); + Day := DaysPerMonth(Year, Month); + Result := EncodeDate(Year, Month, Day); +end; + +function ExtractDay(ADate: TDateTime): Word; +var + M, Y: Word; +begin + DecodeDate(ADate, Y, M, Result); +end; + +function ExtractMonth(ADate: TDateTime): Word; +var + D, Y: Word; +begin + DecodeDate(ADate, Y, Result, D); +end; + +function ExtractYear(ADate: TDateTime): Word; +var + D, M: Word; +begin + DecodeDate(ADate, Result, M, D); +end; + +function IncDate(ADate: TDateTime; Days, Months, Years: Integer): TDateTime; +var + D, M, Y: Word; + Day, Month, Year: Longint; +begin + DecodeDate(ADate, Y, M, D); + Year := Y; Month := M; Day := D; + Inc(Year, Years); + Inc(Year, Months div 12); + Inc(Month, Months mod 12); + if Month < 1 then begin + Inc(Month, 12); + Dec(Year); + end + else if Month > 12 then begin + Dec(Month, 12); + Inc(Year); + end; + if Day > DaysPerMonth(Year, Month) then Day := DaysPerMonth(Year, Month); + Result := EncodeDate(Year, Month, Day) + Days + Frac(ADate); +end; + +procedure DateDiff(Date1, Date2: TDateTime; var Days, Months, Years: Word); +{ Corrected by Anatoly A. Sanko (2:450/73) } +var + DtSwap: TDateTime; + Day1, Day2, Month1, Month2, Year1, Year2: Word; +begin + if Date1 > Date2 then begin + DtSwap := Date1; + Date1 := Date2; + Date2 := DtSwap; + end; + DecodeDate(Date1, Year1, Month1, Day1); + DecodeDate(Date2, Year2, Month2, Day2); + Years := Year2 - Year1; + Months := 0; + Days := 0; + if Month2 < Month1 then begin + Inc(Months, 12); + Dec(Years); + end; + Inc(Months, Month2 - Month1); + if Day2 < Day1 then begin + Inc(Days, DaysPerMonth(Year1, Month1)); + if Months = 0 then begin + Dec(Years); + Months := 11; + end + else Dec(Months); + end; + Inc(Days, Day2 - Day1); +end; + +function IncDay(ADate: TDateTime; Delta: Integer): TDateTime; +begin + Result := ADate + Delta; +end; + +function IncMonth(ADate: TDateTime; Delta: Integer): TDateTime; +begin + Result := IncDate(ADate, 0, Delta, 0); +end; + +function IncYear(ADate: TDateTime; Delta: Integer): TDateTime; +begin + Result := IncDate(ADate, 0, 0, Delta); +end; + +function MonthsBetween(Date1, Date2: TDateTime): Double; +var + D, M, Y: Word; +begin + DateDiff(Date1, Date2, D, M, Y); + Result := 12 * Y + M; + if (D > 1) and (D < 7) then Result := Result + 0.25 + else if (D >= 7) and (D < 15) then Result := Result + 0.5 + else if (D >= 15) and (D < 21) then Result := Result + 0.75 + else if (D >= 21) then Result := Result + 1; +end; + +function IsValidDate(Y, M, D: Word): Boolean; +begin + Result := (Y >= 1) and (Y <= 9999) and (M >= 1) and (M <= 12) and + (D >= 1) and (D <= DaysPerMonth(Y, M)); +end; + +function ValidDate(ADate: TDateTime): Boolean; +var + Year, Month, Day: Word; +begin + try + DecodeDate(ADate, Year, Month, Day); + Result := IsValidDate(Year, Month, Day); + except + Result := False; + end; +end; + +function DaysInPeriod(Date1, Date2: TDateTime): Longint; +begin + if ValidDate(Date1) and ValidDate(Date2) then + Result := Abs(Trunc(Date2) - Trunc(Date1)) + 1 + else Result := 0; +end; + +function DaysBetween(Date1, Date2: TDateTime): Longint; +begin + Result := Trunc(Date2) - Trunc(Date1) + 1; + if Result < 0 then Result := 0; +end; + +function IncTime(ATime: TDateTime; Hours, Minutes, Seconds, + MSecs: Integer): TDateTime; +begin + Result := ATime + (Hours div 24) + (((Hours mod 24) * 3600000 + + Minutes * 60000 + Seconds * 1000 + MSecs) / MSecsPerDay); + if Result < 0 then Result := Result + 1; +end; + +function IncHour(ATime: TDateTime; Delta: Integer): TDateTime; +begin + Result := IncTime(ATime, Delta, 0, 0, 0); +end; + +function IncMinute(ATime: TDateTime; Delta: Integer): TDateTime; +begin + Result := IncTime(ATime, 0, Delta, 0, 0); +end; + +function IncSecond(ATime: TDateTime; Delta: Integer): TDateTime; +begin + Result := IncTime(ATime, 0, 0, Delta, 0); +end; + +function IncMSec(ATime: TDateTime; Delta: Integer): TDateTime; +begin + Result := IncTime(ATime, 0, 0, 0, Delta); +end; + +function CutTime(ADate: TDateTime): TDateTime; +begin + Result := Trunc(ADate); +end; + +function CurrentYear: Word; +var + SystemTime: TSystemTime; +begin + GetLocalTime(SystemTime); + Result := SystemTime.Year; +end; + +{ String to date conversions. Copied from SYSUTILS.PAS unit. } + +procedure ScanBlanks(const S: string; var Pos: Integer); +var + I: Integer; +begin + I := Pos; + while (I <= Length(S)) and (S[I] = ' ') do Inc(I); + Pos := I; +end; + +function ScanNumber(const S: string; MaxLength: Integer; var Pos: Integer; + var Number: Longint): Boolean; +var + I: Integer; + N: Word; +begin + Result := False; + ScanBlanks(S, Pos); + I := Pos; + N := 0; + while (I <= Length(S)) and (Longint(I - Pos) < MaxLength) and + (S[I] in ['0'..'9']) and (N < 1000) do + begin + N := N * 10 + (Ord(S[I]) - Ord('0')); + Inc(I); + end; + if I > Pos then begin + Pos := I; + Number := N; + Result := True; + end; +end; + +function ScanChar(const S: string; var Pos: Integer; Ch: Char): Boolean; +begin + Result := False; + ScanBlanks(S, Pos); + if (Pos <= Length(S)) and (S[Pos] = Ch) then begin + Inc(Pos); + Result := True; + end; +end; + +{$IFDEF RX_D3} +procedure ScanToNumber(const S: string; var Pos: Integer); +begin + while (Pos <= Length(S)) and not (S[Pos] in ['0'..'9']) do begin + if S[Pos] in LeadBytes then Inc(Pos); + Inc(Pos); + end; +end; +{$ENDIF} + +function GetDateOrder(const DateFormat: string): TDateOrder; +var + I: Integer; +begin + Result := DefaultDateOrder; + I := 1; + while I <= Length(DateFormat) do begin + case Chr(Ord(DateFormat[I]) and $DF) of +{$IFDEF RX_D3} + 'E': Result := doYMD; +{$ENDIF} + 'Y': Result := doYMD; + 'M': Result := doMDY; + 'D': Result := doDMY; + else + Inc(I); + Continue; + end; + Exit; + end; + Result := DefaultDateOrder; { default } +end; + +function ExpandYear(Year: Integer): Integer; +var + N: Longint; +begin + Result := Year; + if Result < 100 then begin + N := CurrentYear - CenturyOffset; + Inc(Result, N div 100 * 100); + if (CenturyOffset > 0) and (Result < N) then + Inc(Result, 100); + end; +end; + +function ScanDate(const S, DateFormat: string; var Pos: Integer; + var Y, M, D: Integer): Boolean; +var + DateOrder: TDateOrder; + N1, N2, N3: Longint; +begin + Result := False; + Y := 0; M := 0; D := 0; + DateOrder := GetDateOrder(DateFormat); + if DefaultFormatSettings.ShortDateFormat[1] = 'g' then { skip over prefix text } + ScanToNumber(S, Pos); + if not (ScanNumber(S, MaxInt, Pos, N1) and ScanChar(S, Pos, DateSeparator) and + ScanNumber(S, MaxInt, Pos, N2)) then Exit; + if ScanChar(S, Pos, DateSeparator) then begin + if not ScanNumber(S, MaxInt, Pos, N3) then Exit; + case DateOrder of + doMDY: begin Y := N3; M := N1; D := N2; end; + doDMY: begin Y := N3; M := N2; D := N1; end; + doYMD: begin Y := N1; M := N2; D := N3; end; + end; + Y := ExpandYear(Y); + end + else begin + Y := CurrentYear; + if DateOrder = doDMY then begin + D := N1; M := N2; + end + else begin + M := N1; D := N2; + end; + end; + ScanChar(S, Pos, DateSeparator); + ScanBlanks(S, Pos); +(* +{$IFDEF RX_D3} + if SysLocale.FarEast and (System.Pos('ddd', ShortDateFormat) <> 0) then + begin { ignore trailing text } + if ShortTimeFormat[1] in ['0'..'9'] then { stop at time digit } + ScanToNumber(S, Pos) + else { stop at time prefix } + repeat + while (Pos <= Length(S)) and (S[Pos] <> ' ') do Inc(Pos); + ScanBlanks(S, Pos); + until (Pos > Length(S)) or + (AnsiCompareText(TimeAMString, Copy(S, Pos, Length(TimeAMString))) = 0) or + (AnsiCompareText(TimePMString, Copy(S, Pos, Length(TimePMString))) = 0); + end; +{$ENDIF RX_D3} +*) + Result := IsValidDate(Y, M, D) and (Pos > Length(S)); +end; + +function MonthFromName(const S: string; MaxLen: Byte): Byte; +begin + if Length(S) > 0 then + for Result := 1 to 12 do begin + if (Length(LongMonthNames[Result]) > 0) and + (AnsiCompareText(Copy(S, 1, MaxLen), + Copy(LongMonthNames[Result], 1, MaxLen)) = 0) then Exit; + end; + Result := 0; +end; + +procedure ExtractMask(const Format, S: string; Ch: Char; Cnt: Integer; + var I: Integer; Blank, Default: Integer); +var + Tmp: string[20]; + J, L: Integer; +begin + I := Default; + Ch := UpCase(Ch); + L := Length(Format); + if Length(S) < L then L := Length(S) + else if Length(S) > L then Exit; + J := Pos(MakeStr(Ch, Cnt), AnsiUpperCase(Format)); + if J <= 0 then Exit; + Tmp := ''; + while (UpCase(Format[J]) = Ch) and (J <= L) do begin + if S[J] <> ' ' then Tmp := Tmp + S[J]; + Inc(J); + end; + if Tmp = '' then I := Blank + else if Cnt > 1 then begin + I := MonthFromName(Tmp, Length(Tmp)); + if I = 0 then I := -1; + end + else I := StrToIntDef(Tmp, -1); +end; + +function ScanDateStr(const Format, S: string; var D, M, Y: Integer): Boolean; +var + Pos: Integer; +begin + ExtractMask(Format, S, 'm', 3, M, -1, 0); { short month name? } + if M = 0 then ExtractMask(Format, S, 'm', 1, M, -1, 0); + ExtractMask(Format, S, 'd', 1, D, -1, 1); + ExtractMask(Format, S, 'y', 1, Y, -1, CurrentYear); + Y := ExpandYear(Y); + Result := IsValidDate(Y, M, D); + if not Result then begin + Pos := 1; + Result := ScanDate(S, Format, Pos, Y, M, D); + end; +end; + +function InternalStrToDate(const DateFormat, S: string; + var Date: TDateTime): Boolean; +var + D, M, Y: Integer; +begin + if S = '' then begin + Date := NullDate; + Result := True; + end + else begin + Result := ScanDateStr(DateFormat, S, D, M, Y); + if Result then + try + Date := EncodeDate(Y, M, D); + except + Result := False; + end; + end; +end; + +function StrToDateFmt(const DateFormat, S: string): TDateTime; +begin + if not InternalStrToDate(DateFormat, S, Result) then + raise EConvertError.CreateFmt({$IFDEF RX_D3} SInvalidDate {$ELSE} + LoadStr(SInvalidDate) {$ENDIF}, [S]); +end; + +function StrToDateDef(const S: string; Default: TDateTime): TDateTime; +begin + if not InternalStrToDate(ShortDateFormat, S, Result) then + Result := Trunc(Default); +end; + +function StrToDateFmtDef(const DateFormat, S: string; Default: TDateTime): TDateTime; +begin + if not InternalStrToDate(DateFormat, S, Result) then + Result := Trunc(Default); +end; + +function DefDateFormat(FourDigitYear: Boolean): string; +begin + if FourDigitYear then begin + case GetDateOrder(ShortDateFormat) of + doMDY: Result := 'MM/DD/YYYY'; + doDMY: Result := 'DD/MM/YYYY'; + doYMD: Result := 'YYYY/MM/DD'; + end; + end + else begin + case GetDateOrder(ShortDateFormat) of + doMDY: Result := 'MM/DD/YY'; + doDMY: Result := 'DD/MM/YY'; + doYMD: Result := 'YY/MM/DD'; + end; + end; +end; + +function DefDateMask(BlanksChar: Char; FourDigitYear: Boolean): string; +begin + if FourDigitYear then begin + case GetDateOrder(ShortDateFormat) of + doMDY, doDMY: Result := '!99/99/9999;1;'; + doYMD: Result := '!9999/99/99;1;'; + end; + end + else begin + case GetDateOrder(ShortDateFormat) of + doMDY, doDMY: Result := '!99/99/99;1;'; + doYMD: Result := '!99/99/99;1;'; + end; + end; + if Result <> '' then Result := Result + BlanksChar; +end; + + +{$IFDEF WIN32} + +function FormatLongDate(Value: TDateTime): string; +var + Buffer: array[0..1023] of Char; + SystemTime: TSystemTime; +begin +{$IFDEF RX_D3} + DateTimeToSystemTime(Value, SystemTime); +{$ELSE} + with SystemTime do + begin + DecodeDate(Value, wYear, wMonth, wDay); + DecodeTime(Value, wHour, wMinute, wSecond, wMilliseconds); + end; +{$ENDIF} + SetString(Result, Buffer, GetDateFormat(GetThreadLocale, DATE_LONGDATE, + @SystemTime, nil, Buffer, SizeOf(Buffer) - 1)); + Result := TrimRight(Result); +end; + +function FormatLongDateTime(Value: TDateTime): string; +begin + if Value <> NullDate then + Result := FormatLongDate(Value) + FormatDateTime(' tt', Value) + else Result := ''; +end; + +{$ENDIF WIN32} + +{$IFNDEF USE_FOUR_DIGIT_YEAR} +function FourDigitYear: Boolean; +begin + Result := Pos('YYYY', AnsiUpperCase(ShortDateFormat)) > 0; +end; +{$ENDIF} + +{$IFDEF USE_FOUR_DIGIT_YEAR} +initialization + FourDigitYear := Pos('YYYY', AnsiUpperCase(ShortDateFormat)) > 0; +{$ENDIF} +end. diff --git a/components/rx/version/2.1/dbcurredit.pas b/components/rx/version/2.1/dbcurredit.pas new file mode 100644 index 000000000..b1f82d716 --- /dev/null +++ b/components/rx/version/2.1/dbcurredit.pas @@ -0,0 +1,250 @@ +{ dbcurredit unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + First version By Daniel Simões de Almeida +} + +unit dbcurredit ; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, LMessages, LCLType, Controls, Graphics, + DB, DbCtrls, curredit ; + +type + + { TRxDBCurrEdit } + + TRxDBCurrEdit = class(TCurrencyEdit) + private + FDataLink: TFieldDataLink; + procedure DoCheckEnable; + function GetDataField: string; + function GetDataSource: TDataSource; + function GetReadOnly: Boolean; + procedure SetDataField(const AValue: string); + procedure SetDataSource(const AValue: TDataSource); + procedure SetReadOnly(const AValue: Boolean); + protected + procedure ActiveChange(Sender:TObject); + procedure DataChange(Sender:TObject); + procedure EditingChange(Sender: TObject); + procedure UpdateData(Sender:TObject); + procedure CMExit(var Message:TLMessage); message CM_EXIT; + procedure LMCut(var Message: TLMessage); message LM_CUT; + procedure LMPaste(var Message: TLMessage); message LM_PASTE; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure Change; override; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure EditingDone; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False; + end; + +implementation + +Uses math ; + +{ TRxDBCurrEdit } + +procedure TRxDBCurrEdit.DoCheckEnable; +begin + Enabled:=FDataLink.Active and (FDataLink.Field<>nil) and (not FDataLink.Field.ReadOnly); +end; + +function TRxDBCurrEdit.GetDataField: string; +begin + Result:=FDataLink.FieldName; +end; + +function TRxDBCurrEdit.GetDataSource: TDataSource; +begin + Result:=FDataLink.DataSource; +end; + +function TRxDBCurrEdit.GetReadOnly: Boolean; +begin + Result:=FDataLink.ReadOnly; +end; + +procedure TRxDBCurrEdit.SetDataField(const AValue: string); +begin + try + FDataLink.FieldName:=AValue; + finally + DoCheckEnable; + end; +end; + +procedure TRxDBCurrEdit.SetDataSource(const AValue: TDataSource); +begin + FDataLink.DataSource:=AValue; + DoCheckEnable; +end; + +procedure TRxDBCurrEdit.SetReadOnly(const AValue: Boolean); +begin + FDataLink.ReadOnly:=AValue; +end; + +procedure TRxDBCurrEdit.ActiveChange(Sender: TObject); +begin + DoCheckEnable; +end; + +procedure TRxDBCurrEdit.DataChange(Sender: TObject); +begin + if Assigned(FDataLink.Field) and + (FDataLink.Field is TNumericField) then + begin + if FDataLink.Field.IsNull then + Text:='' + else + Self.Value := SimpleRoundTo( FDataLink.Field.AsFloat, -DecimalPlaces) ; + end + else Text:=''; +end; + +procedure TRxDBCurrEdit.EditingChange(Sender: TObject); +begin + inherited ReadOnly := not FDataLink.Editing; +{ if FDataLink.Editing and DefaultToday and (FDataLink.Field <> nil) and + (FDataLink.Field.AsDateTime = NullDate) then + FDataLink.Field.AsDateTime := SysUtils.Now;} +end; + +procedure TRxDBCurrEdit.UpdateData(Sender: TObject); +begin + if Assigned(FDataLink.Field) then + begin + if Self.Text<>'' then + FDataLink.Field.AsFloat := SimpleRoundTo( Self.Value, -Self.DecimalPlaces) + else + FDataLink.Field.Clear; + end; +end; + +procedure TRxDBCurrEdit.CMExit(var Message: TLMessage); +begin + try + FDataLink.UpdateRecord; + except + SetFocus; + SelectAll; + raise; + end; + inherited; +end; + +procedure TRxDBCurrEdit.LMCut(var Message: TLMessage); +begin + FDataLink.Edit; + inherited; +end; + +procedure TRxDBCurrEdit.LMPaste(var Message: TLMessage); +begin + FDataLink.Edit; + inherited; +end; + +procedure TRxDBCurrEdit.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + if Key=VK_ESCAPE then + begin + //cancel out of editing by reset on esc + FDataLink.Reset; + SelectAll; + Key := VK_UNKNOWN; + end + else + if (Key<>VK_UNKNOWN) then + begin + //make sure we call edit to ensure the datset is in edit, + //this is for where the datasource is in autoedit, so we aren't + //read only even though the dataset isn't realy in edit + FDataLink.Edit; + end; +end; + +procedure TRxDBCurrEdit.Change; +begin + FDataLink.Modified; + inherited Change; +end; + +procedure TRxDBCurrEdit.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + // if the datasource is being removed then we need to make sure + // we are updated or we can get AV/Seg's *cough* as I foolishly + // discovered firsthand.... + if (Operation=opRemove) then + begin + if (FDataLink<>nil) and (AComponent=DataSource) then + DataSource:=nil; + end; +end; + +procedure TRxDBCurrEdit.EditingDone; +begin + inherited EditingDone; + if FDataLink.CanModify then + FDataLink.UpdateRecord; +end; + +constructor TRxDBCurrEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDataLink:=TFieldDataLink.Create; + FDataLink.Control:=Self; + FDataLink.OnActiveChange:=@ActiveChange; + FDataLink.OnDataChange:=@DataChange; + FDataLink.OnUpdateData:=@UpdateData; +end; + +destructor TRxDBCurrEdit.Destroy; +begin + FreeAndNil(FDataLink); + inherited Destroy; +end; + +end. + diff --git a/components/rx/version/2.1/dbdateedit.pas b/components/rx/version/2.1/dbdateedit.pas new file mode 100644 index 000000000..89b7b872f --- /dev/null +++ b/components/rx/version/2.1/dbdateedit.pas @@ -0,0 +1,482 @@ +{ dbdateedit unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit dbdateedit; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, LMessages, LCLType, Controls, Graphics, + DB, DbCtrls, EditBtn, tooledit; + +type + + { TDBDateEdit } +{$IFDEF DBDateEdit_OLD} + TDBDateEdit = class(TDateEdit) +{$ELSE} + TDBDateEdit = class(TRxDateEdit) +{$ENDIF} + private + FDataLink:TFieldDataLink; + FDefaultToday: Boolean; + procedure DoCheckEnable; + function GetDataField: string; + function GetDataSource: TDataSource; + function GetReadOnly: Boolean; + procedure SetDataField(const AValue: string); + procedure SetDataSource(const AValue: TDataSource); + procedure SetReadOnly(const AValue: Boolean); + protected + procedure ActiveChange(Sender:TObject); + procedure DataChange(Sender:TObject); + procedure EditingChange(Sender: TObject); + procedure UpdateData(Sender:TObject); + procedure CMExit(var Message:TLMessage); message CM_EXIT; + procedure LMCut(var Message: TLMessage); message LM_CUT; + procedure LMPaste(var Message: TLMessage); message LM_PASTE; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure Change; override; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure EditingDone; override; + Procedure RunDialog; virtual; + procedure DoButtonClick (Sender: TObject); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False; + property DefaultToday: Boolean read FDefaultToday write FDefaultToday + default False; + end; + + + { TRxDBCalcEdit } + + TRxDBCalcEdit = class(TCalcEdit) + private + FDataLink: TFieldDataLink; + procedure DoCheckEnable; + function GetDataField: string; + function GetDataSource: TDataSource; + function GetReadOnly: Boolean; + procedure SetDataField(const AValue: string); + procedure SetDataSource(const AValue: TDataSource); + procedure SetReadOnly(const AValue: Boolean); + protected + procedure ActiveChange(Sender:TObject); + procedure DataChange(Sender:TObject); + procedure EditingChange(Sender: TObject); + procedure UpdateData(Sender:TObject); + procedure CMExit(var Message:TLMessage); message CM_EXIT; + procedure LMCut(var Message: TLMessage); message LM_CUT; + procedure LMPaste(var Message: TLMessage); message LM_PASTE; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure Change; override; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure EditingDone; override; + Procedure RunDialog; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False; + end; + +implementation +uses DateUtil; + +{ TDBDateEdit } + +procedure TDBDateEdit.DoCheckEnable; +begin + Enabled:=FDataLink.Active and (FDataLink.Field<>nil) and (not FDataLink.Field.ReadOnly); +end; + +function TDBDateEdit.GetDataField: string; +begin + Result:=FDataLink.FieldName; +end; + +function TDBDateEdit.GetDataSource: TDataSource; +begin + Result:=FDataLink.DataSource; +end; + +function TDBDateEdit.GetReadOnly: Boolean; +begin + Result:=FDataLink.ReadOnly; +end; + +procedure TDBDateEdit.SetDataField(const AValue: string); +begin + try + FDataLink.FieldName:=AValue; + finally + DoCheckEnable; + end; +end; + +procedure TDBDateEdit.SetDataSource(const AValue: TDataSource); +begin + FDataLink.DataSource:=AValue; + DoCheckEnable; +end; + +procedure TDBDateEdit.SetReadOnly(const AValue: Boolean); +begin + inherited SetReadOnly(AValue); + FDataLink.ReadOnly:=AValue; +end; + +procedure TDBDateEdit.CMExit(var Message: TLMessage); +begin + try + FDataLink.UpdateRecord; + except + SetFocus; + SelectAll; + raise; + end; + inherited; +end; + +procedure TDBDateEdit.LMCut(var Message: TLMessage); +begin + FDataLink.Edit; + inherited; +end; + +procedure TDBDateEdit.LMPaste(var Message: TLMessage); +begin + FDataLink.Edit; + inherited; +end; + +procedure TDBDateEdit.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + if Key=VK_ESCAPE then + begin + //cancel out of editing by reset on esc + FDataLink.Reset; + SelectAll; + Key := VK_UNKNOWN; + end + else + if (Key<>VK_UNKNOWN) then + begin + //make sure we call edit to ensure the datset is in edit, + //this is for where the datasource is in autoedit, so we aren't + //read only even though the dataset isn't realy in edit + FDataLink.Edit; + end; +end; + +procedure TDBDateEdit.Change; +begin + if Assigned(FDataLink) then + FDataLink.Modified; + inherited Change; +end; + +procedure TDBDateEdit.Notification(AComponent: TComponent; Operation: TOperation + ); +begin + inherited Notification(AComponent, Operation); + // if the datasource is being removed then we need to make sure + // we are updated or we can get AV/Seg's *cough* as I foolishly + // discovered firsthand.... + if (Operation=opRemove) then + begin + if (FDataLink<>nil) and (AComponent=DataSource) then + DataSource:=nil; + end; +end; + +procedure TDBDateEdit.EditingDone; +begin + inherited EditingDone; + if FDataLink.CanModify then + FDataLink.UpdateRecord; +end; + +procedure TDBDateEdit.RunDialog; +begin + if FDataLink.CanModify then + FDataLink.UpdateRecord; +end; + +procedure TDBDateEdit.DoButtonClick(Sender: TObject); +begin + inherited DoButtonClick(Sender); + RunDialog; +end; + +procedure TDBDateEdit.ActiveChange(Sender: TObject); +begin + DoCheckEnable; +end; + +procedure TDBDateEdit.DataChange(Sender: TObject); +begin + if Assigned(FDataLink.Field) and + (FDataLink.Field is TDateTimeField) then + begin + if FDataLink.Field.IsNull then + Text:='' + else + Date:=FDataLink.Field.AsDateTime + end + else Text:=''; +end; + +procedure TDBDateEdit.EditingChange(Sender: TObject); +begin + inherited ReadOnly := not FDataLink.Editing; + if FDataLink.Editing and DefaultToday and (FDataLink.Field <> nil) and + (FDataLink.Field.AsDateTime = NullDate) then + FDataLink.Field.AsDateTime := SysUtils.Now; +end; + +procedure TDBDateEdit.UpdateData(Sender: TObject); +var + D: TDateTime; +begin + if Assigned(FDataLink.Field) then + begin + D := Self.Date; + if (D <> NullDate) then + FDataLink.Field.AsDateTime := D + Frac(FDataLink.Field.AsDateTime) + else + FDataLink.Field.Clear; + end; +end; + +constructor TDBDateEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDataLink:=TFieldDataLink.Create; + FDataLink.Control:=Self; + FDataLink.OnActiveChange:=@ActiveChange; + FDataLink.OnDataChange:=@DataChange; + FDataLink.OnUpdateData:=@UpdateData; + Text:=''; + //UpdateMask; +end; + +destructor TDBDateEdit.Destroy; +begin + FreeAndNil(FDataLink); + inherited Destroy; +end; + + +{ TRxDBCalcEdit } + +procedure TRxDBCalcEdit.DoCheckEnable; +begin + Enabled:=FDataLink.Active and (FDataLink.Field<>nil) and (not FDataLink.Field.ReadOnly); +end; + +function TRxDBCalcEdit.GetDataField: string; +begin + Result:=FDataLink.FieldName; +end; + +function TRxDBCalcEdit.GetDataSource: TDataSource; +begin + Result:=FDataLink.DataSource; +end; + +function TRxDBCalcEdit.GetReadOnly: Boolean; +begin + Result:=FDataLink.ReadOnly; +end; + +procedure TRxDBCalcEdit.SetDataField(const AValue: string); +begin + try + FDataLink.FieldName:=AValue; + finally + DoCheckEnable; + end; +end; + +procedure TRxDBCalcEdit.SetDataSource(const AValue: TDataSource); +begin + FDataLink.DataSource:=AValue; + DoCheckEnable; +end; + +procedure TRxDBCalcEdit.SetReadOnly(const AValue: Boolean); +begin + FDataLink.ReadOnly:=AValue; +end; + +procedure TRxDBCalcEdit.ActiveChange(Sender: TObject); +begin + DoCheckEnable; +end; + +procedure TRxDBCalcEdit.DataChange(Sender: TObject); +begin + if Assigned(FDataLink.Field) and + (FDataLink.Field is TNumericField) then + begin + if FDataLink.Field.IsNull then + Text:='' + else + Self.AsFloat:=FDataLink.Field.AsFloat; + end + else Text:=''; +end; + +procedure TRxDBCalcEdit.EditingChange(Sender: TObject); +begin + inherited ReadOnly := not FDataLink.Editing; +{ if FDataLink.Editing and DefaultToday and (FDataLink.Field <> nil) and + (FDataLink.Field.AsDateTime = NullDate) then + FDataLink.Field.AsDateTime := SysUtils.Now;} +end; + +procedure TRxDBCalcEdit.UpdateData(Sender: TObject); +begin + if Assigned(FDataLink.Field) then + begin + if Self.Text<>'' then + FDataLink.Field.AsFloat := Self.AsFloat + else + FDataLink.Field.Clear; + end; +end; + +procedure TRxDBCalcEdit.CMExit(var Message: TLMessage); +begin + try + FDataLink.UpdateRecord; + except + SetFocus; + SelectAll; + raise; + end; + inherited; +end; + +procedure TRxDBCalcEdit.LMCut(var Message: TLMessage); +begin + FDataLink.Edit; + inherited; +end; + +procedure TRxDBCalcEdit.LMPaste(var Message: TLMessage); +begin + FDataLink.Edit; + inherited; +end; + +procedure TRxDBCalcEdit.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + if Key=VK_ESCAPE then + begin + //cancel out of editing by reset on esc + FDataLink.Reset; + SelectAll; + Key := VK_UNKNOWN; + end + else + if (Key<>VK_UNKNOWN) then + begin + //make sure we call edit to ensure the datset is in edit, + //this is for where the datasource is in autoedit, so we aren't + //read only even though the dataset isn't realy in edit + FDataLink.Edit; + end; +end; + +procedure TRxDBCalcEdit.Change; +begin + FDataLink.Modified; + inherited Change; +end; + +procedure TRxDBCalcEdit.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + // if the datasource is being removed then we need to make sure + // we are updated or we can get AV/Seg's *cough* as I foolishly + // discovered firsthand.... + if (Operation=opRemove) then + begin + if (FDataLink<>nil) and (AComponent=DataSource) then + DataSource:=nil; + end; +end; + +procedure TRxDBCalcEdit.EditingDone; +begin + inherited EditingDone; + if FDataLink.CanModify then + FDataLink.UpdateRecord; +end; + +procedure TRxDBCalcEdit.RunDialog; +begin + inherited RunDialog; + if FDataLink.CanModify then + FDataLink.UpdateRecord; +end; + +constructor TRxDBCalcEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDataLink:=TFieldDataLink.Create; + FDataLink.Control:=Self; + FDataLink.OnActiveChange:=@ActiveChange; + FDataLink.OnDataChange:=@DataChange; + FDataLink.OnUpdateData:=@UpdateData; +end; + +destructor TRxDBCalcEdit.Destroy; +begin + FreeAndNil(FDataLink); + inherited Destroy; +end; + +end. diff --git a/components/rx/version/2.1/dbutils.pas b/components/rx/version/2.1/dbutils.pas new file mode 100644 index 000000000..3393d7a9a --- /dev/null +++ b/components/rx/version/2.1/dbutils.pas @@ -0,0 +1,1026 @@ +{ dbutils unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit dbutils; + +{$I rx.inc} + +interface + +uses + LCLType, LCLProc, LCLIntf, Registry, Classes, SysUtils, DB, IniFiles; + +const + IntegerDataTypes = [ftSmallint, ftInteger, ftWord, ftLargeint]; + + NumericDataTypes = IntegerDataTypes + [ftFloat, ftCurrency, ftBCD]; + + DataTimeTypes = [ftTime, ftDateTime, ftTimeStamp]; + + StringTypes = [ftString, {ftMemo,} ftFixedChar, ftWideString, ftFixedWideChar, ftWideMemo]; + + +type + TRxSearchDirection = (rsdAll, rsdForward, rsdBackward); + +type + +{ TLocateObject } + + TLocateObject = class(TObject) + private + FDataSet: TDataSet; + FLookupField: TField; + FLookupValue: string; + FLookupExact, FCaseSensitive: Boolean; + FBookmark: TBookmark; + FIndexSwitch: Boolean; + procedure SetDataSet(Value: TDataSet); + protected + function MatchesLookup(Field: TField): Boolean; + procedure CheckFieldType(Field: TField); virtual; + procedure ActiveChanged; virtual; + function LocateFilter: Boolean; virtual; + function LocateKey: Boolean; virtual; + function LocateFull: Boolean; virtual; + function UseKey: Boolean; virtual; + function FilterApplicable: Boolean; virtual; + property LookupField: TField read FLookupField; + property LookupValue: string read FLookupValue; + property LookupExact: Boolean read FLookupExact; + property CaseSensitive: Boolean read FCaseSensitive; + property Bookmark: TBookmark read FBookmark write FBookmark; + public + function Locate(const KeyField, KeyValue: string; Exact, + ACaseSensitive: Boolean): Boolean; + property DataSet: TDataSet read FDataSet write SetDataSet; + property IndexSwitch: Boolean read FIndexSwitch write FIndexSwitch; + end; + +type + TCreateLocateObject = function: TLocateObject; +const + CreateLocateObject: TCreateLocateObject = nil; +function CreateLocate(DataSet: TDataSet): TLocateObject; + +{ Utility routines } + +function IsDataSetEmpty(DataSet: TDataSet): Boolean; +procedure RefreshQuery(Query: TDataSet); +function DataSetSortedSearch(DataSet: TDataSet; const Value, + FieldName: string; CaseInsensitive: Boolean): Boolean; +function DataSetSectionName(DataSet: TDataSet): string; + +procedure InternalSaveFields(DataSet: TDataSet; IniFile: TObject; + const Section: string); +procedure InternalRestoreFields(DataSet: TDataSet; IniFile: TObject; + const Section: string; RestoreVisible: Boolean); + +{procedure InternalSaveFields(DataSet: TDataSet; IniFile: TIniFile; + const Section: string); +procedure InternalRestoreFields(DataSet: TDataSet; IniFile: TObject; + const Section: string; RestoreVisible: Boolean);} + +function DataSetLocateThrough(DataSet: TDataSet; const KeyFields: string; + const KeyValues: Variant; Options: TLocateOptions; SearchOrigin:TRxSearchDirection = rsdAll): Boolean; + +procedure SaveFieldsReg(DataSet: TDataSet; IniFile: TRegIniFile); +procedure RestoreFieldsReg(DataSet: TDataSet; IniFile: TRegIniFile; + RestoreVisible: Boolean); +procedure SaveFields(DataSet: TDataSet; IniFile: TIniFile); +procedure RestoreFields(DataSet: TDataSet; IniFile: TIniFile; + RestoreVisible: Boolean); +procedure AssignRecord(Source, Dest: TDataSet; ByName: Boolean); +function ConfirmDelete: Boolean; +procedure ConfirmDataSetCancel(DataSet: TDataSet); +procedure CheckRequiredField(Field: TField); +procedure CheckRequiredFields(const Fields: array of TField); +function ExtractFieldName(const Fields: string; var Pos: Integer): string; +procedure FillValueForField(const Field: TField; Value:Variant); +procedure CloneRecord(DataSet: TDataSet; IgnoreFields: array of const); + +{ SQL expressions } + +function DateToSQL(Value: TDateTime): string; +function FormatSQLDateRange(Date1, Date2: TDateTime; + const FieldName: string): string; +function FormatSQLDateRangeEx(Date1, Date2: TDateTime; + const FieldName: string): string; +function FormatSQLNumericRange(const FieldName: string; + LowValue, HighValue, LowEmpty, HighEmpty: Double; Inclusive: Boolean): string; +function StrMaskSQL(const Value: string): string; +function FormatSQLCondition(const FieldName, AOperator, Value: string; + FieldType: TFieldType; Exact: Boolean): string; +function FormatAnsiSQLCondition(const FieldName, AOperator, Value: string; + FieldType: TFieldType; Exact: Boolean): string; + +const + TrueExpr = '0=0'; + +const + { Server Date formats} + sdfStandard16 = '''"''mm''/''dd''/''yyyy''"'''; {"mm/dd/yyyy"} + sdfStandard32 = '''''''dd/mm/yyyy'''''''; {'dd/mm/yyyy'} + sdfOracle = '"TO_DATE(''"dd/mm/yyyy"'', ''DD/MM/YYYY'')"'; + sdfInterbase = '"CAST(''"mm"/"dd"/"yyyy"'' AS DATE)"'; + sdfMSSQL = '"CONVERT(datetime, ''"mm"/"dd"/"yyyy"'', 103)"'; + +const + ServerDateFmt: string[50] = sdfStandard16; + +{const + ftBlobTypes = [Low(TBlobType)..High(TBlobType)];} + +procedure _DBError(const Msg: string); + +implementation + +uses Forms, Controls, Dialogs, RXDConst, VCLUtils, FileUtil, + AppUtils, RxAppUtils, RxStrUtils, Math, DateUtil; + +{ Utility routines } + +procedure _DBError(const Msg: string); +begin + DatabaseError(Msg); +end; + +function ConfirmDelete: Boolean; +begin + Screen.Cursor := crDefault; + Result := MessageDlg(SDeleteRecordQuestion, mtConfirmation, + [mbYes, mbNo], 0) = mrYes; +end; + +procedure ConfirmDataSetCancel(DataSet: TDataSet); +begin + if DataSet.State in [dsEdit, dsInsert] then begin + DataSet.UpdateRecord; + if DataSet.Modified then begin + case MessageDlg(SConfirmSave, mtConfirmation, mbYesNoCancel, 0) of + mrYes: DataSet.Post; + mrNo: DataSet.Cancel; + else SysUtils.Abort; + end; + end + else DataSet.Cancel; + end; +end; + +function SetToBookmark(ADataSet: TDataSet; ABookmark: TBookmark): Boolean; +begin + Result := False; + with ADataSet do + if Active and (ABookmark <> nil) and not (Bof and Eof) and + BookmarkValid(ABookmark) then + try + ADataSet.GotoBookmark(ABookmark); + Result := True; + except + end; +end; + +{ Refresh Query procedure } + +procedure RefreshQuery(Query: TDataSet); +var + BookMk: TBookmark; +begin + with Query do + begin + DisableControls; + try + if Active then + BookMk := GetBookmark + else + BookMk := nil; + try + Close; + Open; + SetToBookmark(Query, BookMk); + finally + if BookMk <> nil then + FreeBookmark(BookMk); + end; + finally + EnableControls; + end; + end; +end; + +{ TLocateObject } + +procedure TLocateObject.SetDataSet(Value: TDataSet); +begin + ActiveChanged; + FDataSet := Value; +end; + +function TLocateObject.LocateFull: Boolean; +begin + Result := False; + with DataSet do + begin + First; + while not EOF do + begin + if MatchesLookup(FLookupField) then + begin + Result := True; + Break; + end; + Next; + end; + end; +end; + +function TLocateObject.LocateKey: Boolean; +begin + Result := False; +end; + +function TLocateObject.FilterApplicable: Boolean; +begin + Result := FLookupField.FieldKind in [fkData, fkInternalCalc]; +end; + +function TLocateObject.LocateFilter: Boolean; +var + SaveCursor: TCursor; + Options: TLocateOptions; + Value: Variant; +begin + +// SaveCursor := Screen.Cursor; +// Screen.Cursor := crHourGlass; + try + Options := []; + if not FCaseSensitive then Include(Options, loCaseInsensitive); + if not FLookupExact then Include(Options, loPartialKey); + if (FLookupValue = '') then + Value:=null //VarClear(Value) + else + Value := FLookupValue; + Result := DataSet.Locate(FLookupField.FieldName, Value, Options); + finally +// Screen.Cursor := SaveCursor; + end; +end; + +procedure TLocateObject.CheckFieldType(Field: TField); +begin +end; + +function TLocateObject.Locate(const KeyField, KeyValue: string; + Exact, ACaseSensitive: Boolean): Boolean; +var + LookupKey: TField; +begin + if DataSet = nil then + begin + Result := False; + Exit; + end; + DataSet.CheckBrowseMode; + LookupKey := DataSet.FieldByName(KeyField); + DataSet.CursorPosChanged; + FLookupField := LookupKey; + FLookupValue := KeyValue; + FLookupExact := Exact; + FCaseSensitive := ACaseSensitive; + if FLookupField.DataType <> ftString then + begin + FCaseSensitive := True; + try + CheckFieldType(FLookupField); + except + Result := False; + Exit; + end; + end; + FBookmark := DataSet.GetBookmark; + try + DataSet.DisableControls; + try + Result := MatchesLookup(FLookupField); + if not Result then + begin + if UseKey then + Result := LocateKey + else + begin +{ if FilterApplicable then Result := LocateFilter + else} Result := LocateFull; + end; + if not Result then SetToBookmark(DataSet, FBookmark); + end; + finally + DataSet.EnableControls; + end; + finally + FLookupValue := EmptyStr; + FLookupField := nil; + DataSet.FreeBookmark(FBookmark); + FBookmark := nil; + end; +end; + +function TLocateObject.UseKey: Boolean; +begin + Result := False; +end; + +procedure TLocateObject.ActiveChanged; +begin +end; + +function TLocateObject.MatchesLookup(Field: TField): Boolean; +var + Temp: string; +begin + Temp := Field.AsString; + if not FLookupExact then + SetLength(Temp, Min(Length(FLookupValue), Length(Temp))); + if FCaseSensitive then Result := AnsiCompareStr(Temp, FLookupValue) = 0 + else Result := AnsiCompareText(Temp, FLookupValue) = 0; +end; + +function CreateLocate(DataSet: TDataSet): TLocateObject; +begin + if Assigned(CreateLocateObject) then Result := CreateLocateObject() + else Result := TLocateObject.Create; + if (Result <> nil) and (DataSet <> nil) then + Result.DataSet := DataSet; +end; + +{ DataSet locate routines } +function DataSetLocateThrough(DataSet: TDataSet; const KeyFields: string; + const KeyValues: Variant; Options: TLocateOptions; SearchOrigin:TRxSearchDirection = rsdAll): Boolean; +var + FieldCount: Integer; + Fields: TList; + + function CompareField(Field: TField; Value: Variant): Boolean; + var + S,S1: string; + + begin + if Field.DataType = ftString then + begin + S := Field.AsString; + S1:=Value; + if (loPartialKey in Options) then + Delete(S, Length(S1) + 1, MaxInt); + + if (loCaseInsensitive in Options) then + Result := UTF8CompareText(S, S1) = 0 + else + Result := UTF8CompareStr(S, S1) = 0; + end +// else Result := false //(Field.Value = Value); + else Result := (Field.Value = Value); + end; + + function CompareRecord: Boolean; + var + I: Integer; + begin + if FieldCount = 1 then + Result := CompareField(TField(Fields.First), KeyValues) + else begin + Result := True; + for I := 0 to FieldCount - 1 do + Result := Result and CompareField(TField(Fields[I]), KeyValues[I]); + end; + end; + +var + Bookmark: TBookmark; +begin + Result := False; + with DataSet do begin + CheckBrowseMode; + if BOF and EOF then Exit; + end; + Fields := TList.Create; + try + DataSet.GetFieldList(Fields, KeyFields); + FieldCount := Fields.Count; + + if SearchOrigin = rsdAll then + begin + Result := CompareRecord; + if Result then Exit; + end; + + DataSet.DisableControls; + try + Bookmark := DataSet.GetBookmark; + try + if SearchOrigin in [rsdAll, rsdForward] then + begin + if SearchOrigin = rsdAll then + DataSet.First; + while not DataSet.EOF do + begin + Result := CompareRecord; + if Result then Break; + DataSet.Next; + end; + end + else + if SearchOrigin = rsdBackward then + begin + //DataSet.Last; + while not DataSet.BOF do + begin + Result := CompareRecord; + if Result then Break; + DataSet.Prior; + end; + end; + + finally +{$IFDEF NoAutomatedBookmark} + if not Result and DataSet.BookmarkValid(PChar(Bookmark)) then +{$ELSE} + if not Result and DataSet.BookmarkValid(Bookmark) then +{$ENDIF} + DataSet.GotoBookmark(Bookmark); + end; + finally + DataSet.FreeBookmark(Bookmark); + DataSet.EnableControls; + end; + finally + Fields.Free; + end; +end; + +procedure SaveFields(DataSet: TDataSet; IniFile: TIniFile); +begin + InternalSaveFields(DataSet, IniFile, DataSetSectionName(DataSet)); +end; + +procedure RestoreFields(DataSet: TDataSet; IniFile: TIniFile; + RestoreVisible: Boolean); +begin + InternalRestoreFields(DataSet, IniFile, DataSetSectionName(DataSet), + RestoreVisible); +end; + +procedure SaveFieldsReg(DataSet: TDataSet; IniFile: TRegIniFile); +begin + InternalSaveFields(DataSet, IniFile, DataSetSectionName(DataSet)); +end; + +procedure RestoreFieldsReg(DataSet: TDataSet; IniFile: TRegIniFile; + RestoreVisible: Boolean); +begin + InternalRestoreFields(DataSet, IniFile, DataSetSectionName(DataSet), + RestoreVisible); +end; + +{ DataSetSortedSearch. Navigate on sorted DataSet routine. } + +function DataSetSortedSearch(DataSet: TDataSet; const Value, + FieldName: string; CaseInsensitive: Boolean): Boolean; +var + L, H, I: Longint; + CurrentPos: Longint; + CurrentValue: string; + BookMk: TBookmark; + Field: TField; + + function UpStr(const Value: string): string; + begin + if CaseInsensitive then Result := AnsiUpperCase(Value) + else Result := Value; + end; + + function GetCurrentStr: string; + begin + Result := Field.AsString; + if Length(Result) > Length(Value) then + SetLength(Result, Length(Value)); + Result := UpStr(Result); + end; + +begin + Result := False; + if DataSet = nil then Exit; + Field := DataSet.FindField(FieldName); + if Field = nil then Exit; + if Field.DataType = ftString then begin + DataSet.DisableControls; + BookMk := DataSet.GetBookmark; + try + L := 0; + DataSet.First; + CurrentPos := 0; + H := DataSet.RecordCount - 1; + if Value <> '' then begin + while L <= H do begin + I := (L + H) shr 1; + if I <> CurrentPos then DataSet.MoveBy(I - CurrentPos); + CurrentPos := I; + CurrentValue := GetCurrentStr; + if (UpStr(Value) > CurrentValue) then + L := I + 1 + else begin + H := I - 1; + if (UpStr(Value) = CurrentValue) then Result := True; + end; + end; { while } + if Result then begin + if (L <> CurrentPos) then DataSet.MoveBy(L - CurrentPos); + while (L < DataSet.RecordCount) and + (UpStr(Value) <> GetCurrentStr) do + begin + Inc(L); + DataSet.MoveBy(1); + end; + end; + end + else Result := True; + if not Result then SetToBookmark(DataSet, BookMk); + finally + DataSet.FreeBookmark(BookMk); + DataSet.EnableControls; + end; + end + else + DatabaseErrorFmt(SFieldTypeMismatch, [Field.DisplayName]); +end; + +{ Save and restore DataSet Fields layout } + +function DataSetSectionName(DataSet: TDataSet): string; +begin + with DataSet do + if (Owner <> nil) and (Owner is TCustomForm) then + Result := GetDefaultSection(Owner as TCustomForm) + else Result := Name; +end; + +function CheckSection(DataSet: TDataSet; const Section: string): string; +begin + Result := Section; + if Result = '' then Result := DataSetSectionName(DataSet); +end; + +procedure InternalSaveFields(DataSet: TDataSet; IniFile: TObject; + const Section: string); +var + I: Integer; +begin + with DataSet do begin + for I := 0 to FieldCount - 1 do begin + IniWriteString(IniFile, CheckSection(DataSet, Section), + Name + Fields[I].FieldName, + Format('%d,%d,%d', [Fields[I].Index, Fields[I].DisplayWidth, + Integer(Fields[I].Visible)])); + end; + end; +end; + +procedure InternalRestoreFields(DataSet: TDataSet; IniFile: TObject; + const Section: string; RestoreVisible: Boolean); +type + TFieldInfo = packed record + Field: TField; + EndIndex: Integer; + end; + PFieldArray = ^TFieldArray; + TFieldArray = array[0..(65528 div SizeOf(TFieldInfo)) - 1] of TFieldInfo; +const + Delims = [' ',',']; +var + I, J: Integer; + S: string; + FieldArray: PFieldArray; +begin +{ with DataSet do begin + FieldArray := AllocMem(FieldCount * SizeOf(TFieldInfo)); + try + for I := 0 to FieldCount - 1 do begin + S := IniReadString(IniFile, CheckSection(DataSet, Section), + Name + Fields[I].FieldName, ''); + FieldArray^[I].Field := Fields[I]; + FieldArray^[I].EndIndex := Fields[I].Index; + if S <> '' then begin + FieldArray^[I].EndIndex := StrToIntDef(ExtractWord(1, S, Delims), + FieldArray^[I].EndIndex); + Fields[I].DisplayWidth := StrToIntDef(ExtractWord(2, S, Delims), + Fields[I].DisplayWidth); + if RestoreVisible then + Fields[I].Visible := Boolean(StrToIntDef(ExtractWord(3, S, Delims), + Integer(Fields[I].Visible))); + end; + end; + for I := 0 to FieldCount - 1 do begin + for J := 0 to FieldCount - 1 do begin + if FieldArray^[J].EndIndex = I then begin + FieldArray^[J].Field.Index := FieldArray^[J].EndIndex; + Break; + end; + end; + end; + finally + FreeMemo(Pointer(FieldArray)); + end; + end;} +end; + +(* +procedure InternalSaveFields(DataSet: TDataSet; IniFile: TIniFile; + const Section: string); +var + I: Integer; +begin + with DataSet do + begin + for I := 0 to FieldCount - 1 do + begin + IniWriteString(IniFile, CheckSection(DataSet, Section), + Name + Fields[I].FieldName, + Format('%d,%d,%d', [Fields[I].Index, Fields[I].DisplayWidth, + Integer(Fields[I].Visible)])); + end; + end; +end; + +procedure InternalRestoreFields(DataSet: TDataSet; IniFile: TObject; + const Section: string; RestoreVisible: Boolean); +type + TFieldInfo = packed record + Field: TField; + EndIndex: Integer; + end; + PFieldArray = ^TFieldArray; + TFieldArray = array[0..(65528 div SizeOf(TFieldInfo)) - 1] of TFieldInfo; +const + Delims = [' ',',']; +var + I, J: Integer; + S: string; + FieldArray: PFieldArray; +begin +{ with DataSet do + begin + FieldArray := AllocMemo(FieldCount * SizeOf(TFieldInfo)); + try + for I := 0 to FieldCount - 1 do begin + S := IniReadString(IniFile, CheckSection(DataSet, Section), + Name + Fields[I].FieldName, ''); + FieldArray^[I].Field := Fields[I]; + FieldArray^[I].EndIndex := Fields[I].Index; + if S <> '' then begin + FieldArray^[I].EndIndex := StrToIntDef(ExtractWord(1, S, Delims), + FieldArray^[I].EndIndex); + Fields[I].DisplayWidth := StrToIntDef(ExtractWord(2, S, Delims), + Fields[I].DisplayWidth); + if RestoreVisible then + Fields[I].Visible := Boolean(StrToIntDef(ExtractWord(3, S, Delims), + Integer(Fields[I].Visible))); + end; + end; + for I := 0 to FieldCount - 1 do begin + for J := 0 to FieldCount - 1 do begin + if FieldArray^[J].EndIndex = I then begin + FieldArray^[J].Field.Index := FieldArray^[J].EndIndex; + Break; + end; + end; + end; + finally + FreeMemo(Pointer(FieldArray)); + end; + end; +} +end; +*) + +{ +procedure SaveFields(DataSet: TDataSet; IniFile: TIniFile); +begin + InternalSaveFields(DataSet, IniFile, DataSetSectionName(DataSet)); +end; + +procedure RestoreFields(DataSet: TDataSet; IniFile: TIniFile; + RestoreVisible: Boolean); +begin + InternalRestoreFields(DataSet, IniFile, DataSetSectionName(DataSet), + RestoreVisible); +end; +} +function IsDataSetEmpty(DataSet: TDataSet): Boolean; +begin + with DataSet do Result := (not Active) or (Eof and Bof); +end; + +{ SQL expressions } + +function DateToSQL(Value: TDateTime): string; +begin + Result := IntToStr(Trunc(Value)); +end; + +function FormatSQLDateRange(Date1, Date2: TDateTime; + const FieldName: string): string; +begin + Result := TrueExpr; + if (Date1 = Date2) and (Date1 <> NullDate) then + begin + Result := Format('%s = %s', [FieldName, FormatDateTime(ServerDateFmt, + Date1)]); + end + else + if (Date1 <> NullDate) or (Date2 <> NullDate) then + begin + if Date1 = NullDate then + Result := Format('%s < %s', [FieldName, + FormatDateTime(ServerDateFmt, IncDay(Date2, 1))]) + else if Date2 = NullDate then + Result := Format('%s > %s', [FieldName, + FormatDateTime(ServerDateFmt, IncDay(Date1, -1))]) + else + Result := Format('(%s < %s) AND (%s > %s)', + [FieldName, FormatDateTime(ServerDateFmt, IncDay(Date2, 1)), + FieldName, FormatDateTime(ServerDateFmt, IncDay(Date1, -1))]); + end; +end; + +function FormatSQLDateRangeEx(Date1, Date2: TDateTime; + const FieldName: string): string; +begin + Result := TrueExpr; + if (Date1 <> NullDate) or (Date2 <> NullDate) then begin + if Date1 = NullDate then + Result := Format('%s < %s', [FieldName, + FormatDateTime(ServerDateFmt, IncDay(Date2, 1))]) + else if Date2 = NullDate then + Result := Format('%s >= %s', [FieldName, + FormatDateTime(ServerDateFmt, Date1)]) + else + Result := Format('(%s < %s) AND (%s >= %s)', + [FieldName, FormatDateTime(ServerDateFmt, IncDay(Date2, 1)), + FieldName, FormatDateTime(ServerDateFmt, Date1)]); + end; +end; + +function FormatSQLNumericRange(const FieldName: string; + LowValue, HighValue, LowEmpty, HighEmpty: Double; Inclusive: Boolean): string; +const + Operators: array[Boolean, 1..2] of string[2] = (('>', '<'), ('>=', '<=')); +begin + Result := TrueExpr; + if (LowValue = HighValue) and (LowValue <> LowEmpty) then begin + Result := Format('%s = %g', [FieldName, LowValue]); + end + else if (LowValue <> LowEmpty) or (HighValue <> HighEmpty) then begin + if LowValue = LowEmpty then + Result := Format('%s %s %g', [FieldName, Operators[Inclusive, 2], HighValue]) + else if HighValue = HighEmpty then + Result := Format('%s %s %g', [FieldName, Operators[Inclusive, 1], LowValue]) + else begin + Result := Format('(%s %s %g) AND (%s %s %g)', + [FieldName, Operators[Inclusive, 2], HighValue, + FieldName, Operators[Inclusive, 1], LowValue]); + end; + end; +end; + +function StrMaskSQL(const Value: string): string; +begin + if (Pos('*', Value) = 0) and (Pos('?', Value) = 0) and (Value <> '') then + Result := '*' + Value + '*' + else Result := Value; +end; + +function FormatSQLCondition(const FieldName, AOperator, Value: string; + FieldType: TFieldType; Exact: Boolean): string; +var + EmptyValue: Boolean; + FieldValue: string; + DateValue: TDateTime; + LogicOperator: string; +begin + FieldValue := ''; + DateValue := NullDate; + Exact := Exact or not (FieldType in + [ftString, ftDate, ftTime, ftDateTime]); + if FieldType in [ftDate, ftTime, ftDateTime] then + begin + DateValue := StrToDateDef(Value, NullDate); + EmptyValue := (DateValue = NullDate); + FieldValue := FormatDateTime(ServerDateFmt, DateValue); + end + else begin + FieldValue := Value; + EmptyValue := FieldValue = ''; + if not (Exact or EmptyValue) then + FieldValue := ReplaceStr(ReplaceStr(StrMaskSQL(FieldValue), + '*', '%'), '?', '_'); + if FieldType = ftString then FieldValue := '''' + FieldValue + ''''; + end; + LogicOperator := AOperator; + if LogicOperator = '' then begin + if Exact then LogicOperator := '=' + else begin + if FieldType = ftString then LogicOperator := 'LIKE' + else LogicOperator := '>='; + end; + end; + if EmptyValue then Result := TrueExpr + else if (FieldType = ftDateTime) and Exact then begin + DateValue := IncDay(DateValue, 1); + Result := Format('(%s >= %s) and (%s < %s)', [FieldName, FieldValue, + FieldName, FormatDateTime(ServerDateFmt, DateValue)]); + end + else Result := Format('%s %s %s', [FieldName, LogicOperator, FieldValue]); +end; + +function FormatAnsiSQLCondition(const FieldName, AOperator, Value: string; + FieldType: TFieldType; Exact: Boolean): string; +var + S, Esc: string; +begin + Esc := ''; + if not Exact and (FieldType = ftString) then begin + S := ReplaceStr(ReplaceStr(ReplaceStr(Value, '/', '//'), + '_', '/_'), '%', '/%'); + if S <> Value then Esc := ' ESCAPE''/'''; + end + else S := Value; + Result := FormatSQLCondition(FieldName, AOperator, S, FieldType, Exact) + Esc; +end; + +procedure CheckRequiredField(Field: TField); +begin + with Field do + if not ReadOnly and not Calculated and IsNull then + begin + FocusControl; + DatabaseErrorFmt(SFieldRequired, [DisplayName]); + end; +end; + +procedure CheckRequiredFields(const Fields: array of TField); +var + I: Integer; +begin + for I := Low(Fields) to High(Fields) do + CheckRequiredField(Fields[I]); +end; + +procedure AssignRecord(Source, Dest: TDataSet; ByName: Boolean); +var + I: Integer; + F, FSrc: TField; +begin + if not (Dest.State in dsEditModes) then _DBError(SNotEditing); + if ByName then begin + for I := 0 to Source.FieldCount - 1 do begin + F := Dest.FindField(Source.Fields[I].FieldName); + if F <> nil then begin + if (F.DataType = Source.Fields[I].DataType) and + (F.DataSize = Source.Fields[I].DataSize) then + F.Assign(Source.Fields[I]) + else F.AsString := Source.Fields[I].AsString; + end; + end; + end + else begin + for I := 0 to Min(Source.FieldDefs.Count - 1, Dest.FieldDefs.Count - 1) do + begin + F := Dest.FindField(Dest.FieldDefs[I].Name); + FSrc := Source.FindField(Source.FieldDefs[I].Name); + if (F <> nil) and (FSrc <> nil) then begin + if F.DataType = FSrc.DataType then F.Assign(FSrc) + else F.AsString := FSrc.AsString; + end; + end; + end; +end; + +function ExtractFieldName(const Fields: string; var Pos: Integer): string; +var + I: Integer; +begin + I := Pos; + while (I <= Length(Fields)) and (Fields[I] <> ';') do Inc(I); + Result := Trim(Copy(Fields, Pos, I - Pos)); + if (I <= Length(Fields)) and (Fields[I] = ';') then Inc(I); + Pos := I; +end; + +procedure FillValueForField(const Field: TField; Value: Variant); +var + DS:TDataSet; + P:TBookmark; +begin + DS:=Field.DataSet; + DS.DisableControls; + P:=DS.GetBookmark; + try + DS.First; + while not DS.EOF do + begin + DS.Edit; + Field.Value:=Value; + DS.Post; + DS.Next; + end; + finally + DS.GotoBookmark(P); + DS.FreeBookmark(P); + DS.EnableControls; + end; +end; + +function FieldInArray(Field: TField; Arr: array of const): boolean; +var + i: integer; + CI: boolean; +begin + Result := False; + for i := Low(Arr) to High(Arr) do + begin + with Arr[i] do + begin + case VType of + vtInteger: Result := Field.Index = VInteger; + vtPChar: + Result := + AnsiUpperCase(Field.FieldName) = AnsiUpperCase(vPChar); + vtString, + vtAnsiString: + Result :=UpperCase(Field.FieldName) = UpperCase(string(VAnsiString)); + end + end; + if Result then + exit; + end; +end; + +procedure CloneRecord(DataSet: TDataSet; IgnoreFields: array of const); +var + Rec:Array of variant; + i:integer; +begin + if not DataSet.Active then exit; + i:=DataSet.FieldCount; + SetLength(Rec, DataSet.FieldCount); + + for i:=0 to DataSet.FieldCount-1 do + begin + if (DataSet.Fields[i].FieldKind in [fkData]) and (not DataSet.Fields[i].IsBlob) + and (not FieldInArray(DataSet.Fields[i], IgnoreFields)) then + begin + Rec[i] := DataSet.Fields[i].Value; + end; + end; + + DataSet.Append; + + for i:=0 to DataSet.FieldCount-1 do + begin + if (DataSet.Fields[i].FieldKind in [fkData]) and (not DataSet.Fields[i].IsBlob) and (not DataSet.Fields[i].ReadOnly) + and (not FieldInArray(DataSet.Fields[i], IgnoreFields)) then + begin + DataSet.Fields[i].Value:=Rec[i]; + Rec[i]:=Null; + end; + end; +end; + +end. diff --git a/components/rx/version/2.1/dcl_rx_ctrl.lpk b/components/rx/version/2.1/dcl_rx_ctrl.lpk new file mode 100644 index 000000000..7a9f3f8d8 --- /dev/null +++ b/components/rx/version/2.1/dcl_rx_ctrl.lpk @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<CONFIG> + <Package Version="3"> + <Name Value="dcl_rx_ctrl"/> + <AddToProjectUsesSection Value="False"/> + <Author Value="Lagunov A.A."/> + <CompilerOptions> + <Version Value="8"/> + <SearchPaths> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)/"/> + </SearchPaths> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Description Value="Design time packet for rx lib"/> + <Version Major="1"/> + <Files Count="1"> + <Item1> + <Filename Value="register_rxctrl.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="register_rxctrl"/> + </Item1> + </Files> + <Type Value="DesignTime"/> + <RequiredPkgs Count="2"> + <Item1> + <PackageName Value="rxnew"/> + <MinVersion Major="1" Minor="2" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="FCL"/> + <MinVersion Major="1" Valid="True"/> + </Item2> + </RequiredPkgs> + <UsageOptions> + <UnitPath Value="$(PkgOutDir)/"/> + </UsageOptions> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + </PublishOptions> + </Package> +</CONFIG> diff --git a/components/rx/version/2.1/dcl_rx_ctrl.pas b/components/rx/version/2.1/dcl_rx_ctrl.pas new file mode 100644 index 000000000..d39f51f9a --- /dev/null +++ b/components/rx/version/2.1/dcl_rx_ctrl.pas @@ -0,0 +1,23 @@ +{ Этот файл был автоматичеÑки Ñоздан Lazarus. ÐÐ + µ редактировать! + ИÑходный код иÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð + ¸Ð»Ñции и уÑтановки пакета. + } + +unit dcl_rx_ctrl; + +interface + +uses + register_rxctrl, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('register_rxctrl', @register_rxctrl.Register); +end; + +initialization + RegisterPackage('dcl_rx_ctrl', @Register); +end. diff --git a/components/rx/version/2.1/docs/WhatsNew.eng.txt b/components/rx/version/2.1/docs/WhatsNew.eng.txt new file mode 100644 index 000000000..c2934ebcd --- /dev/null +++ b/components/rx/version/2.1/docs/WhatsNew.eng.txt @@ -0,0 +1,88 @@ + + Keys PgUp/PgDn correctly go through previous/next month in TRxCalendarGrid and TRxDateEdit + + if try edit closed TRxMemoryData in error message display TRxMemoryData.Name + + fix create resource from XPM image + + draw shadow on button image in TToolPanel + - Fix error in TDBComboBox.EditingDone if DataSet = nil + - new code for align button on TToolPanel + + property OnUTF8KeyPress now published + + New value for ToolPanel.ToolBarStyle - tbsNative - for draw buttons used standart theme from OS + + fix options dialog for TToolPanel + + In TRxDateEdit add new property - ValidDate. Check valid input. + + add 2 component from original RX: TRxSpinButton É TRxSpinEdit (Edward Ivanov) + - fix images for TRxClock, TRxDateEdit, TAutoPanel (Edward Ivanov) + - fix error in TRxDatePicker (Edward Ivanov) + + Add new components: TRxDBSpinEdit, TRxTimeEdit, TRxDBTimeEdit + + TRxLoginDialo now work. + + Rewrite code for draw vertical text in titles RXDBGrid. Code from TAChart + + published BorderSpacing in TRxLabel + + add demo application for AutoSort in RxDBGrid + - fix sort order in TRxMemDataSet + - fix draw buttons in ToolPanel with use system themes + - fix error in TRxDBComboBox + + New mode - Quick search data in grid (code from Aleksey Kozlov with minor fix) + - fix error in sort data for Postgres (grigoreo) + +22.05.2008 - version 2.0.0.136 (svn revision 100) + + In TRxCustomDBLookupCombo add check for CircularDataLink + + in TRxCustomDBLookupCombo accelerated drawing data + - In TRxCustomDBLookupCombo fix select first record if DataField is emty + + In RxDBGrid are published missing events from DBGrid + + New component TRxCalendarGrid - simple calendar without heading. + - fix error compile module rxappicon.pas in Windows for GTK2 (thx ViruZ) + + add new module rxiconv.pas (original module iconv.pas from A.Voito) + + minor fix in drawing button caption in setup form TToolbar + + fix draw disables state for TRxCustomDBLookupCombo + - fix compile rxctrls in fpc 2.2 + + TPopUpColumnTitle used define NEW_STYLE_TITLE_ALIGNMENT_RXDBGRID + + in RxDBGrid images of markers moved to rxdbgrids.lrs (Petr Smolik) + + add module for autosort in RxDBGrid exsortzeos.pas for ZeosDB (Petr Smolik) + - In TCurrencyEdit property BorderSpacing now published + + New procedure StrToStrings in module rxstrutils - fill List:TStrings + procedure StrToStrings(const S:string; const List:TStrings; const Delims:Char); + + New editor for TField object with Lookup source in TRxDBGrid - base on class TRxDBLookupCombo + + In TRxDBLookupCombo work property AutoSize + + After change property Font in TRxDBLookupCombo dropdown list used this font + + In RxDBGrid create lookup editor for TField + - Fix error in TRxLookupEdit + + In RxDBGrid published new property from DBGrid + + Cosmetic fix in paint TRxCustomDBLookupCombo + + Dropdown list in TRxCustomDBLookupCombo show after clikc on component + + minor fix in RxDBGrid paint sort marker and column title + + New component - TRxDateEdit + + In RxDBGrid create editor for field with type ftDate, ftDateTime - based on TRxDateEdit + (see Demos/RxDBGrid) + - minor fix in filter combobox in RxDBGrid for GTK and GTK2 + + TRxSpeedButton and TRxClock + + new procedure in module dbutils - FillValueForField + + editor for property TRxColumnFooter.FieldName + + TDBDateEdit inherited from TRxDateEdit, for old style use DBDateEdit_OLD compiller directive + (see rx.inc). + + In RxDBGrid property FixedHotColor now published + - fix error with empty sring in TRxDateEdit. + + In property TRxDBLookupCombo.PopUpFormOptions add field AutoFillColumns. Used in dropdown list. + - Cleanup code in TRxDBLookupCombo.Paint + + In TRxDBLookupCombo property DropDownCount now work + - fix error in TRxDBLookupCombo after set value for DataField and LookupSourse.Active=false + + In PopUpFormOptions add editor for property Collumns[x].FieldName +29.08.2007 - version 1.1.5.98 (svn revision 39) + + In RxDBgrid - after close dataset list of SelectedRows is cleared + + fix resaizing find form for RxDbGrd + + compile in latest Lazarus + + in TToolbarButton stile tbrSeparator and tbrDivider as Delphi + tbrSeparator - separator with line + tbrDivider - empty separator + + in TToolbarButton new style tbrDropDownExtra - button with dropdown menu. +12.08.2007 - version 1.1.4.93 + + in TRxDBComboBox publishe any property + + in TRxDBLookupCombo add event OnGetGridCellProps + + in rx.inc new define + RXDBGRID_OPTIONS_WO_CANCEL_ON_EXIT + - in RxDBGrid fix error lose focuse after close filte list + + in demo for RxDBGrid add demos ¤for visual filtring data + + add new component - TAutoPanel ( Dmitry V. Bolshakov) - + doc ifn folder auto_panel_doc + + in property OptionsRX add new flag - rdgMrOkOnDblClik + + + Lagunov Aleksey (alexs) + ALEXS75-at-YANDEX-dot-RU diff --git a/components/rx/version/2.1/docs/WhatsNew.rus.txt b/components/rx/version/2.1/docs/WhatsNew.rus.txt new file mode 100644 index 000000000..4fcacaf7a --- /dev/null +++ b/components/rx/version/2.1/docs/WhatsNew.rus.txt @@ -0,0 +1,446 @@ + + Клавиши PgUp/PgDn корректно пролиÑтывают предыдущий/Ñледующий меÑÑц в TRxCalendarGrid и TRxDateEdit + + При попытке Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¾Ð³Ð¾ набора данных TRxMemoryData в Ñообщении об ошибке выдаётÑÑ Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ðµ набора данных + + ИÑправлено Ñоздание реÑурÑов из XPM файлов + + Доработана отриÑовка тени у кнопки на TToolPanel + - ИÑправлена ошибка в TDBComboBox.EditingDone; еÑли не приÑвоен DataSet + - Переработан код Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº на TToolPanel + + Опубликовано ÑвойÑтво OnUTF8KeyPress; + + СвойÑтво ToolPanel.ToolBarStyle теперь может принимать значение tbsNative - Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки кнопок иÑпользуетÑÑ + Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ Ñ‚ÐµÐ¼Ð° + + Доработано окно наÑтройки панели инÑтрументов + + У компоненты TRxDateEdit добавлено ÑвойÑтвой - ValidDate. ОпределÑет коректноÑть введённой даты. + + Добавлена два иÑходных компонента: TRxSpinButton и TRxSpinEdit (автор порта - Edward Ivanov) + - иÑправлены глифы у TRxClock, TRxDateEdit, TAutoPanel (Edward Ivanov) + - ИÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² TRxDatePicker (Edward Ivanov) + + Добавлены компоненты TRxDBSpinEdit, TRxTimeEdit, TRxDBTimeEdit + + TRxLoginDialo теперь работает. По Ñравнению Ñ Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼ функционал Ñильно раÑширен. + Изменён дизайн формы + + Улучшена отриÑовка вертикальных заголовков в гриде. Код из TAChart + + Опубликова BorderSpacing в TRxLabel + + Добавлен пример Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкой Ñортировки в RxDBGrid + - ИÑправлена Ñортировка при иÑпользовании TRxMemDataSet + - ИÑправлена отриÑова кнопки в ToolPanel при отриÑовке Ñ Ð¸Ñпользованием текущей темы + + Реализована возможноÑть Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñчеек в заголовке таблицы + (Ñмотрите в демке на RxDBGrid) + - ИÑправлена ошибка уÑтановки Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ TRxDBComboBox + + Реализовн режим быÑтрого поиÑка (код от ÐлекÑÐµÑ ÐšÐ¾Ð·Ð»Ð¾Ð²Ð° Ñ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ¸Ð¼Ð¸ доработками) - подробнее Ñмотри пункт 6 в + файле readmy.txt + - ИÑправлена ошибка при работе Ñортировки Ñ Ñ€ÑƒÑкими полÑми под Postgres (grigoreo) + + Ð’ опциÑÑ… FBDataSet добавлен флаг poNotSetDefaultParams - не уÑтанавливать форматы полей при открытии БД + - ИÑправлена ошибка Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑÑ‚Ð¸Ð»Ñ RxDateEdit Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð° на popup + + Улучшена отриÑовка текÑта кнопки в ToolBar + + СвойÑтво TCustomRxDateEdit.YearDigits теперь работает + + Большой патч от Rene Herranz Daniel (rhdaniel74.(at).gmail.com) - доработки по Ñортировке данных, + меню правого верхнего угла, Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… + + Ðачато напиÑание документации в формета LazDoc + - ИÑправлено изменение цвета конца недели в RxDateEdit + + Добавлена демка Ð´Ð»Ñ RxDBLookup + + У объекта TRxDBLookupCombo опубликовано ÑвойÑтво Text - уÑтановка Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ вызывает поиÑк по лукап-лиÑту + + Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð² RxDBGrid-е иÑпользует Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Field.DisplayText, а не Field.AsString + + Ð’ форме наÑтроек колонок RxDBGrid работает перемещение Ñтолбцов + + При Ñохранении ÑоÑтоÑÐ½Ð¸Ñ RxDBGrid ÑохранÑетÑÑ Ñ‚Ð°ÐºÐ¶Ðµ положение Ñтолбцов + - ИÑправлена ошибка в RxDBGrid при Ñохранении ÑоÑтоÑÐ½Ð¸Ñ Visible колонок + + Ð’ RxDBGrid в функции поиÑка колонки по её наименованию TRxDBGrid.ColumnByCaption + не учитываетÑÑ Ñ€ÐµÐ³Ð¸Ñтр Ñимволов + + Ð’ RxDBGrid ÑохранÑетÑÑ Ð¼ÐµÐ¶Ð´Ñƒ ÑеанÑами порÑдок Ñортировки + + Ð’ RxDBGrid при автоматичеÑком подборе ширины колонки учитываетÑÑ ÑˆÐ¸Ñ€Ð¸Ð½Ð° заголовка + + модуль + + Ð’ объекте TRxMemoryData переключил фильтрацию на Ñтандартный механизм из Ð¼Ð¾Ð´ÑƒÐ»Ñ DB - раньше был код + Ð´Ð»Ñ Ð¾Ð±Ñ…Ð¾Ð´Ð° ошибок. Ð’ дальнейшем Ñобытие OnFilterRecordEx будет полноÑтью иÑключено из компонента + + Ðовый модуль rxFileUtils - набор дополнительных функций Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸: + GetFileOwnerUser - возвращает Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ-владельца файла (пока только windows) + GetFileOwnerData - возвращает информацию о владельце файла (пока только windows) + NormalizeDirectoryName - приводит вÑе разделитили каталогов в имени файла к тому виду, как принÑтов данной ОС. + + У TRxColumnFooter доÑтупно ÑвойÑтво NumericValue - Ñодержит чиÑловое предÑтавление Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + итогов по Ñтолбцу. Имеет ÑмыÑл только Ð´Ð»Ñ ValueType = fvtSum, fvtAvg, fvtMax, fvtMin + + ÐÐ¾Ð²Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð° TRxVersionInfo - обёртка над вызовами Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ€ÐµÑурÑов файла + - ИÑправлено риÑование изображение в колонках RxDBGrid-а еÑли выключен индикатор или заголовок + - ИÑправлено риÑование колонок Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ заголовками + - Введдена обработка Ñитуации воÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ RxDBGrid-а, еÑли количеÑтво колонок во Ð²Ñ€ÐµÐ¼Ñ Ð²Ð¾ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÐµÐ½ÑŒÑˆÐµ, + чем было в момент ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ + + ÐÐ¾Ð²Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð° TRxAboutDialog - окно Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о программе (пример Ñмотреть в демке по RxDBGrid-у) + + Добавлена поддержка компилÑции под WinCE + - ИÑправлена ошибка автоподбора ширины колонки при двойном щелчке по заголвку колонки + + При подÑчёте итоговой Ñтроки не вызываютÑÑ Ð»Ð¸ÑˆÐ½Ð¸Ðµ проÑчёты по данным (еÑли нет агрегатных функций) + + Ð”Ð»Ñ RXDbGrid-а реализована ÑиÑтема Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ñ‹Ñ… клавиш на вызов функций (Ñортировка, Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¸ Ñ‚.д.) + добавлено новое ÑвойÑтво KeyStrokes + + Добавлен новый компонент RxCurredit + + Добавлен новый компонент- TRxViewsPanel + + у компоненты TRxMemoryData убрана завиÑимоÑть от Ð¼Ð¾Ð´ÑƒÐ»Ñ Forms + + Улучшено отображение редактора полей типа TDateTime/TDate в RxDBGrid + + У TRxCollumn компоненты TRxDBGrid Ð´Ð»Ñ ÑÑ‚Ð¸Ð»Ñ cbsPickList добавлено ÑвойÑтво DirectInput. + ЕÑли оно уÑтановлено в false - Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ñ Ð¼Ð¾Ð¶Ð½Ð¾ выбрать только из выпадающего ÑпиÑка + + Добавлены 2 комопненты - TRxRadioGroup и TRxDBRadioGroup. Ð’ отличии от Ñтнадартных позволÑÑŽÑ‚ выборочно запрещать некоторые RadioButton-Ñ‹ на + компоненте через ÑвойÑтво ItemEnabled. + + + ÐÐ¾Ð²Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð° - TRxCloseFormValidator. Предназначена Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð½Ð° диалоговых модальных окнах, при закрытии такого окна + проверÑет на обÑзательную заполненноÑть ÑпиÑка полей ввода, перечиÑленных в ÑвойÑтве Items. + + Ð’ модуле rxStrUtils Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°Ñть Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ð¾Ð¼ÐµÑ‡ÐµÐ½Ð° как уÑÑ‚Ð°Ñ€ÐµÐ²ÑˆÐ°Ñ - они дублируют функционал из Ð¼Ð¾Ð´ÑƒÐ»Ñ StrUtils. Ð’ дальнешем они + будут удалены в целÑÑ… ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ ÐºÐ¾Ð»-ва кода. + + У RxDBGrid-а при вводе даты подÑтавлÑетÑÑ Ð¼Ð°Ñка ввода +22.05.2008 - верÑÐ¸Ñ 2.0.0.136 (svn revision 100) + + У объекта TRxCustomDBLookupCombo введён контроль на CircularDataLink + + У объекта TRxCustomDBLookupCombo уÑкорена отриÑовка данных + - У объекта TRxCustomDBLookupCombo иÑправлен выбор первой запиÑи из Ñправочника при + пуÑтом значени в DataField + + Ð’ RxDBGrid опубликованы недоÑтающие обработчики из DBGrid + + Реализован новый компонент TRxCalendarGrid - проÑтой календарь без заголовка. + - ИÑправлена ошибка компилÑции Ð¼Ð¾Ð´ÑƒÐ»Ñ rxappicon.pas под Windows при иÑпользовании + интерфейÑа GTK2 (ÑпаÑибо ViruZ - Вадим ВитомÑкий) + + Добавлен модуль rxiconv.pas (оригинальный модуль iconv.pas от A.Voito) + + Ðебольшое улучшение отриÑовки заголовка кнопки в форме наÑтройки TToolbar + + ИÑправлена отриÑовка запрещённого ÑоÑтоÑÐ½Ð¸Ñ Ñƒ TRxCustomDBLookupCombo + - ИÑправлена компилÑÑ†Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ rxctrls в fpc 2.2 + + Ð’ TPopUpColumnTitle введена поддержка дерективы + NEW_STYLE_TITLE_ALIGNMENT_RXDBGRID + + Ð’ RxDBGrid Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð°Ñ€ÐºÐµÑ€Ð¾Ð² вынеÑены в реÑурÑÑ‹ (Petr Smolik) + + Добавлен модуль автоматичеÑкой Ñортировки в RxDBGrid exsortzeos.pas Ð´Ð»Ñ ZeosDB (Petr Smolik) + - Ð’ TCurrencyEdit опубликовано ÑвойÑтво BorderSpacing + + Ð’ модуль rxstrutils добавлена процедура StrToStrings - заполнÑет клаÑÑ TStrings Ñтроками + ÑодержащимиÑÑ Ð² Ñтроке S и разделёнными Ñимовлом Delims + + Реализован редактор ÑвойÑтв Ð´Ð»Ñ Ð¿Ð¾Ð»ÐµÐ¹ LookupField и LookupDisplay у компонент + TRxLookupEdit и TRxDBLookupCombo + + TRxDBLookupCombo реализована поддержка ÑвойÑтва AutoSize + + При уÑтановке ÑвойÑтва Font у TRxDBLookupCombo выпадающий ÑпиÑок иÑпользует Ñтот же шрифт + + ЕÑли у объекта TField уÑтановленый лукапные иÑточники то при редактировании в RxDBGrid + такого Ð¿Ð¾Ð»Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÑ‚ÑÑ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€ на оÑнове TRxDBLookupCombo + - ИÑправлена ошибка в компоненте TRxLookupEdit - не правильно закрывалÑÑ Ð²Ñ‹Ð¿Ð°Ð´Ð°ÑŽÑ‰Ð¸Ð¹ ÑпиÑок + + Ð’ RxDBGrid опубликованны недоÑтающие Ð¿Ð¾Ð»Ñ + + КоÑметичеÑкие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки TRxCustomDBLookupCombo + + Выпадающий ÑпиÑок в TRxCustomDBLookupCombo отображатеÑÑ Ð¿Ñ€Ð¾Ñто по клику на компоненте + + Ð’ RxDBGrid доработана отриÑовка маркера Ñортировки и заголовка колонки + + ПеренеÑён и допиÑан компонент TRxDateEdit + + Ð’ RxDBGrid реализован редактор Ð´Ð»Ñ Ð¿Ð¾Ð»ÐµÐ¹ типа ftDate, ftDateTime на оÑновае TRxDateEdit + (Ñм. Demos/RxDBGrid) + + Доработки фильтрации в RxDBGrid Ð´Ð»Ñ GTK и GTK2 + + ПеренеÑены компоненты TRxSpeedButton и TRxClock + + Ð½Ð¾Ð²Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð² модуле dbutils - FillValueForField + + Реализован редактор Ð´Ð»Ñ RxColumnFooter.FieldName + + TDBDateEdit теперь наÑледуетÑÑ Ð¾Ñ‚ TRxDateEdit, чтобы оÑтавить как было необходимо + включить директиву DBDateEdit_OLD. Ð”Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð¾ÑпоÑобноÑти программ необходимо переоткрыть вÑе формы + в дизайнере. + + Ð’ RxDBGrid опубликованы недоÑтающие Ð¿Ð¾Ð»Ñ + - ИÑправлена ошибка в обработке пуÑтой даты в редакторе дат. + + Ð’ ÑвойÑтве PopUpFormOptions компоненты TRxDBLookupCombo добавлено поле AutoFillColumns - аналог одноимённого Ð¿Ð¾Ð»Ñ + из TDBGrid - иÑпользуетÑÑ Ð² выпадающем ÑпиÑке + - Улучшен код в отриÑовке компоненты TRxDBLookupCombo + + Ð’ TRxDBLookupCombo работает ÑвойÑтво DropDownCount + - ИÑправлена ошибка TRxDBLookupCombo при LookupSourse.Active=false и уÑтановке Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ DataField + + Ð’ ÑвойÑтве PopUpFormOptions компоненты TRxDBLookupCombo Ð´Ð»Ñ Ñлемента из ÑпиÑка Collumns добавлен редктор на FieldName + +29.08.2007 - верÑÐ¸Ñ 1.1.5.98 (svn revision 39) + + Ð’ RxDBGrid ПоÑле Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° данных ÑпиÑок помеченных Ñтрок (SelectedRows) + очищаетÑÑ + + Улучшено маÑштабирование формы поиÑка по RxDbGrd + + КомпилÑÑ†Ð¸Ñ Ð² поÑледнем Lazarus + + TToolbarButton различает теперь Ñтили tbrSeparator и tbrDivider + tbrSeparator - разделитьль Ñ Ñ‡ÐµÑ€Ñ‚Ð¾Ð¹ + tbrDivider - пуÑтой разделитель + + TToolbarButton новый Ñтиль tbrDropDownExtra - кнопка Ñ Ð²Ñ‹Ð¿Ð°Ð´Ð°ÑŽÑ‰Ð¸Ð¼ меню. + Ð’ отличии от tbrDropDown Ñто работает как кнопка + еÑли нажата ÐºÑ€Ð°Ð¹Ð½Ñ Ð¿Ñ€Ð°Ð²Ð°Ñ Ð¾Ð±Ð»Ð°Ñть - то + тогда поÑвлÑетÑÑ Ð¼ÐµÐ½ÑŽ. (Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐµÑ‰Ñ‘ корÑв - надо будет доработать в дальнейшем) +12.08.2007 - верÑÐ¸Ñ 1.1.4.93 + + Ð’ TRxDBComboBox опубликованы недоÑтающие Ð¿Ð¾Ð»Ñ + + Ð’ TRxDBLookupCombo добавлено обработчик OnGetGridCellProps + - позволÑет задавать при отриÑовке фон в выпадающем ÑпиÑке + + Ð’ rx.inc ввёл новую дерективу компилÑции + RXDBGRID_OPTIONS_WO_CANCEL_ON_EXIT + еÑли она определени - то в ÑвойÑтве TRxDbGrid.Options выключаетÑÑ Ñ„Ð»Ð°Ð³ + dgCancelOnExit (Ñм. пункт 5 из readmy.txt) + - Ð’ RxDBGrid иÑправлена ошибка потери фокуÑа поÑле Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ ÑпиÑка фильтра + + Ð’ примере на RxDBGrid добавлен промер на визуальную фильтрацию данных + + Добавлен компонент TAutoPanel (автор Dmitry V. Bolshakov) - + Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð² папке auto_panel_doc + + Ð’ ÑвойÑтве OptionsRX добавлен новый флаг - rdgMrOkOnDblClik + при его уÑтановке при двойном нажатии на RxDbGrid форме, которой принадлежит + RxDbGrid приÑиваиваетÑÑ ModalResult:=mrOk; +25.06.2007 - верÑÐ¸Ñ 1.1.3.86 + - ИÑправлена ошибка в методе TRxMemoryData.SortOnFields + + Добавлена поддержка Ñортировок из RxDBGrid на TRxMemoryData + - доÑтаточно проÑто подключить в проект модуль rxsortmemds + + Ð’ RxDBGrid добавлен метод UpdateTitleHight - принудительный переÑчёт выÑоты заголовок колонок + - Ð’ RxDBGrid иÑпралено определение Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° поÑледнйи Ñтолбец + + Ð’ RxDBGrid в заголовке введена ÑÐ¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° Ñимвола | - Ñто + ÑчитаетÑÑ Ð±ÐµÐ·ÑƒÑловный разделитель Ñтрок + + Ð’ RxDBGrid.OptionsRx добавлен флаг rdgMultiTitleLines - + при наличии в заголовке Ñимвола | между Ñтроками риÑуетÑÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ + Ð»Ð¸Ð½Ð¸Ñ + + Ð’ rx.inc ввёл новую дерективу компилÑции + NEW_STYLE_TITLE_ALIGNMENT_RXDBGRID + еÑли она определна, то при Ñоздании новых колонок в RxDBGrid заголовок центрируетÑÑ, + еÑли Ñта деректива не определена - то поведение заголовка Ñтандартное - выравниваетÑÑ + по левому краю + + Ð’ TRxDBLookupCombo еÑли в ÑвойÑтве PopUpFormOptions заданы колонки то при отриÑовке данных + в Ñтроке иÑпользуетÑÑ ÑˆÐ¸Ñ€Ð¸Ð½Ð°, ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð² колонках + + Ð’ TRxDBLookupCombo поÑле Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ ÑпиÑка запоминаетÑÑ ÑˆÐ¸Ñ€Ð¸Ð½Ð° колонок, уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ + оператором +31.05.2007 - верÑÐ¸Ñ 1.1.2.77 + - ИÑправлена компилÑÑ†Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ rxtoolbar.pas Ñ Ð¿Ð¾Ñледними верÑиÑми LCL + (поÑле Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ‚ÐµÐ¼) - Ñам TToolPanel ещё не работает Ñ Ñ‚ÐµÐ¼Ð°Ð¼Ð¸ + - ИÑправил компилÑцию Ð¼Ð¾Ð´ÑƒÐ»Ñ rxlogin.pas - была ошибка на SetCursor +15.05.2007 - верÑÐ¸Ñ 1.1.1.75 + + Ð’ RxDBGrid добавлен метод OptimizeColumnsWidth(AColList:String) - подбирает + ширину колонки (колонок - перечиÑление через ";") по Ñодержимому + + Ð’ RxDBGrid добавлен метод OptimizeColumnsWidthAll - ÑоотвеÑтвенно производит автободбор + ширины Ð´Ð»Ñ Ð²Ñех колонок + + TRxColumn добавлен метод OptimizeWidth - подбор ширины указанной колонки + Ð”Ð»Ñ Ð²Ñех методов подбора ширины производитÑÑ Ñ‚Ð°ÐºÐ¶Ðµ выфетчивание вÑех запиÑей + + ÐžÐ¿Ñ†Ð¸Ñ rdgDblClickOptimizeColWidth в ÑвойÑтве RxDBGrid.OptionsRx работает + - иÑправлен глюк раÑчёта выÑоты заголовка колонки Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¾Ñтрочного заголовка + - ИÑправлен глюк Ð¾Ñ‚ÐµÑ€Ñ‹Ñ‚Ð¸Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð° на RxDBGrid + + Ð’ примере на RxDBGrid добавлен примера на оптимизацию ширины +28.03.2007 - верÑÐ¸Ñ 1.1.0.68 + - Ð’ RxDBGrid иÑправлена отриÑовка итоговой Ñтроки при изменении размера колонок + + Ð’ RxDBGrid в ÑвойÑтве OptionsRx добавлено ÑоÑтоÑние rdgXORColSizing + - при включённом прориÑовка маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ проиÑходит линией + (контуром), Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾Ñ€Ð¸Ñовка колонки проиÑходит поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ + размера Ñтолбца - Ñтандартное поведение в Delphi + - Изменён метод отриÑовки итоговой Ñтроки (код от Yogrik) + + Ðебольшие доработки Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼ кнопок в ToolBar-е + + Ð’ TRxDBLookupCombo улучшена отриÑовка выпадающего ÑпиÑка + + Ð’ TRxColumnTitle добавлены ÑвойÑтва Hint и ShowHint - подÑказка, вÑÐ¿Ð»Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ð¿Ñ€Ð¸ + наведении курÑора на заголовок колонки в TRxDBGrid + + Реализована поддержка фильтрации днных в TRxDBGrid (код от Yogrik) +01.11.2006 - верÑÐ¸Ñ 1.0.19.61 + + Ð’ выпадающем ÑпиÑке компонента TRxDBLookupCombo реализован быÑтрый поиÑк + по Ñтолбцу, заданному ÑвойÑтвом LookupDisplayIndex. + Из-за ограничений LCL поиÑк оÑущеÑтвлÑетÑÑ Ð¿Ð¾ÐºÐ° только по вводу чиÑел + + Ð’ RxDBGrid добавлено отображение Ñтроки итогов (Footer row), ÑоответÑвенно введены + необходимые ÑвойÑтва в колонках. + Внимание: из-за ошибок в TDataSet не работает коректно пока агрегатные функции + (SUM, MAX, MIN, AVG) + + Ð’ TRxMemoryData реализовал ÑвойÑтво AppendRecord - пока не будет напиÑано аналогичное + в TDataSet + + Ðовый Демо - RxDBGrid - демонÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñтей RxDBGrid + - Ð’ RxDBGrid иÑправлен вызов OnDrawColumnCell +08.09.2006 - верÑÐ¸Ñ 1.0.18.56 + + У объекта TToolPanel ввёл параметр ButtonAllign = (tbaNone, tbaLeft, tbaRignt) + выравнивание по умолчанию кнопок, tbaNone - Ñто Ñтарое поведение + + У объекта TToolbarItem (кнопка панели инÑтрументов) введена поддержка типа + tbrSeparator - разделитель между кнопками + + При закрытии ÑпиÑка у TRxDBLookupCombo проиÑходит перериÑовка + владельца (parent) компонента - обхожу глюк LCL в Win32 +19.08.2006 - верÑÐ¸Ñ 1.0.17.53 + + изменил по умолчанию рамку popup окна у TRxDBLookupCombo на Ñтиль bsNone + (так привычнее) + + Одиночный клик мышки в ÑпиÑке popup окна у TRxDBLookupCombo также закрывает + его + - иÑправлена поведении в обработке клавиши ESC у компоненты TRxDBLookupCombo - + еÑли поле набора данных не пуÑтое - то проиÑходит уÑтановка Ð¿Ð¾Ð»Ñ Ð² null и обнуление + Ñканкода клавишы, при пуÑтом поле (повторное нажатие) - клавиша не брабатываетÑÑ + + У RxDBLookupCombo не Ñрабатывало Ñобытие OnChange +15.05.2006 - верÑÐ¸Ñ 1.0.16.49 + + ПолноÑтью перепиÑан выпадающий ÑпиÑок Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° TRxDBLookupCombo + + У объекта TRxDBLookupCombo введено новое ÑвойÑтво PopUpFormOptions - в нём + Ñобраны вÑе параметры выпадающего ÑпиÑка + еÑли заполнен ÑпиÑок PopUpFormOptions.Columns то ÑпиÑок отоборажаемых + полей в гриде берётÑÑ Ð¸Ð· Ñтого ÑвойÑтва, иначе возьмётÑÑ Ñтрока + LookupDisplay - здеÑÑŒ перечиÑлÑетÑÑ ÑпиÑок полей через точку Ñ Ð·Ð°Ð¿Ñтой (";") + +11.05.2006 - верÑÐ¸Ñ 1.0.15.47 + + Ð’ RxDBGrid добавлено ÑвойÑтво Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼Ð¸ параметрами, работают пока два + отображение окна поиÑка в ÑпиÑке и окна выбора колонок к отображению + + при включённой опции в ÑвойÑтве OptionsRx нажатие ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ñˆ Ctrl+F + отображает окно поиÑка по ÑпиÑку + + при включённой опции в ÑвойÑтве OptionsRx нажатие ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ñˆ Ctrl+W + отображает окно выбора колонок + + изменён Ñлучай вызлва Ð´Ð»Ñ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ TRxDbGrid.OnGetCellProps - Ð´Ð»Ñ Ñчеки, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ + в данный момент ÑфокуÑирована - Ñобытие не вызваетÑÑ + + Ð’ TRxDBGrid добавлено ÑвойÑтво: + function TRxDBGrid.ColumnByFieldName(AFieldName: string): TRxColumn + возвращает указатель на требуемый Ñтолбец по имени Ð¿Ð¾Ð»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° данных + в Ñлучае отÑутÑÐ²Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ñтолбца - вернёт nil +11.04.2006 - верÑÐ¸Ñ 1.0.14.41 + - небольшое иÑправление в отображение CurrencyEdit +14.02.2006 - верÑÐ¸Ñ 1.0.13.40 + - иÑправлена отриÑовка RxDbGrid Ñ Ð½Ðµ подключённым набором данных + - иÑправлена в RxDbGrid отриÑовка заголовка колонки Ñ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ полей по умолчанию + + Ð’ TToolPanel добавлена поддержка выделенного ÑпиÑка изображений (Selected image list) + (при наличии в нём изображений кнопки риÑуютÑÑ Ð¸Ð· него при наведённых на него курÑоре) + - иÑправлена ошибка ÑÐ¶Ð°Ñ‚Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ в RxDbGrid (деление на 0) + - ИÑправлена куÑÑ‚Ð¾Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ TToolPanel во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐµÑлине у вÑех Items + уÑтановлено ÑвойÑтво Action +12.01.2006 - верÑÐ¸Ñ 1.0.12.38 + + в RxDbGrid в заголовке колонки добавлено ÑвойÑтво Orientation - отвечает за + направление отриÑовки текÑта в заголовке Ñтолбца + + добавлена демка Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ð½ÑтрацииотриÑовки текÑта вертикально (под углом 90 + градуÑов) +21.12.2005 + + в RxDbGrid добавлено ÑвойÑтво AllowedOperation - Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€ÐµÑ‚Ð° Ð²Ñ‹Ð¿Ð»Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… + операций + + в RxDbGrid доработан обработчик ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ OnGetCellProps + + в TRxMemoryData введено ÑвойÑтво OnFilterRecordEx - временно, пока в TDataSet + не реализуют работу ÑвойÑтва OnFilterRecord +16.12.2005 - верÑÐ¸Ñ 1.0.11.35 + + доработано поведение TToolbarButton Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ работы + в поÑледних Ñборках Lazarus + + иÑправлен региÑтр в названиÑÑ… некоторых модулей + + Ð¿Ñ€Ð¾Ð±Ð½Ð°Ñ Ñборка под Linux +27.11.2005 - верÑÐ¸Ñ 1.0.11.34 + - TToolPanel - иÑправлена ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÑвойÑтв панели при + редактировании её в runtime +22.10.2005 - верÑÐ¸Ñ 1.0.10.33 + + TRxLabel - перенеÑён компонент + + TSecretPanel - перенеÑён компонент + - TRxMemoryData - внеÑён код, обходÑщий ошибку воÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑвойÑтва FieldDefs + в модуле DB - работает вроде теперь вÑÑ‘ правильно + + TRxLoginDialog - начат перенеÑён + - TRxDBComboBox - небольшой Ð±Ð°Ð³Ñ„Ð¸ÐºÑ +15.10.2005 - верÑÐ¸Ñ 1.0.9.30 + + TRxCustomDBLookupCombo - Улучшена отриÑовка + (Ñтарый Ñтиль отриÑовки будет при включённом Flat) + + TRxCustomDBLookupCombo - При нажатии клавишы ESC поле очищаетÑÑ (метод DataField.Clear) + - TRxCustomDBLookupCombo - ИÑправлена ошибка отриÑовки пуÑтого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ DataField в режиме + DisplayAllFields - отображаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ ÑвойÑтва EmptyValue + - TRxCustomDBLookupCombo - ИÑправлена ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ ÑпиÑка допуÑтимых значений при + пуÑтом DataField (ÑпиÑок ÑтоÑл на поÑледней запиÑи) + - TRxCustomDBLookupCombo - иÑправлен раÑчёт выÑоты выпадающего ÑпиÑка в завиÑимоÑти + от Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтва DropDownCount + - TRxCustomDBLookupCombo - иÑправлен выбор Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² выпадающем ÑпÑике нажатием + клавишы Enter + + TRxMemoryData - Введён код Ð´Ð»Ñ Ð¾Ð±Ñ…Ð¾Ð´Ð° глюка Lazarus Ñ Ð½Ðµ корректным Ñозданием полей + по данным FieldDefs, которые были Ñозданы в Design-time + + TRxMemoryData - реализован редактор компоненты - ÐºÐ¾Ð¿Ð¸Ñ Ñтрутктуры из другого + DataSet-а + + TRxDBGrid - подключен редактор ÑвойÑтва FieldName у колонки + + TRxDBGrid - реализована возможноÑть подÑтановки значений Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ + через ÑвойÑтва KeyList и PickList (аналогично TRxDBComboBox) +10.10.2005 + - ИÑправлена ошибка при риÑовании Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² RxDbGrid из ImageList, + также Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ уÑкорена + - иÑправлена ошибка при изменении ширины колонки (деление на 0) + + начата работа над Ñохранением ÑоÑтоÑÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº RxDbGrid через FormStorage + - Ðебольшой Ð±Ð°Ð³Ð¾Ñ„Ð¸ÐºÑ Ð¿Ñ€Ð¸ работе Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñми в TToolPanel + + Добавил компонент TPageManager + + ÐапиÑал новый компонент TRxAppIcon - Ñто Ð´Ð»Ñ Ñ‚ÐµÑ… кто не хочет возитьÑÑ Ñ + реÑурÑами - в момент запуÑка приложению будет ÑопоÑтавлена ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¸ÐºÐ¾Ð½ÐºÐ°. + Ñ‚.к. она хранитÑÑ Ð½Ðµ в Ñтандартном виндовом реÑурÑе - поÑтому проводник + будет показывать на приложении обычную иконку - но в момент запуÑка + поÑвитÑÑ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ. Работает только под Windows - еÑли кто знает как Ñто + делаетÑÑ Ð² других ÑиÑтемах - допишите. + Когда в лазаре доделают нормальную работу Ñ Ð¸ÐºÐ¾Ð½ÐºÐ°Ð¼Ð¸ - компоненту надо + перепиÑать - а может лазарь научитÑÑ Ñоздавать Ñтандартный реÑÑƒÑ€Ñ Ð²Ð¸Ð½Ð´Ð¾Ð²Ñ‹Ð¹ + Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ - тогда в Ñтой компоненте надобноÑть вобще отпадёт + +08.10.2005 + + Окно наÑтройки теперь вегда Ñверху + + Ð”Ð»Ñ Ð±Ð¾Ð»ÐµÐµ тонкой наÑтройки Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº добави в опциÑÑ… тулбара + два дополнительных флага - tpGlyphPopup, tpCaptionPopup + - небольшие багофикÑÑ‹ + + реализована работа Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñми в RxDbGrid через ImageList (Ñм. readmy.txt) + + Добавлен компонент TRXXPManifest - работает только под Windows - + поддержка XP манифеÑта +05.10.2005 + + убрал ÑвойÑтов Flat, TransparentBtn + + Добавил ÑвойÑтво Options, включающее tpFlatBtns, tpTransparentBtns + + Добавил включение окна наÑтройки подвойному клику на панели + правой кнопкой мышки Ñ Ð·Ð°Ð¶Ð°Ñ‚Ñ‹Ð¼ Ctrl + - иÑправл баг множеÑтвенного Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¾ÐºÐ½Ð° наÑтройки панели + + у TToolbarItem добавил ÑвойÑтво Tag + +04.10.2005 + + в TToolPanel пофикÑил баг не верного начального размера кнопки + + Добавлена возможноÑть прориÑовки кнопок в Ñтиле WindowsXP + + При в Ñтиле Flat и WindowsXP при наведении курÑора на кнопку + она приподнимаетÑÑ Ð´Ð»Ñ Ð»ÑƒÑ‡ÑˆÐµÐ³Ð¾ визуализации + - Ñ‚.к. TImageList.Draw не умеет риÑовать запроещённое ÑоÑтоÑние + Ð¸Ð·Ð¾Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ задиÑабливании Action не диÑаблитÑÑ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° + также из-за Ñтого нет возможноÑти Ñделать изображение Ñ Ñ‚ÐµÐ½ÑŒÑŽ + - вылазиет баг в лазаре еÑли в дизайнере удалить напрÑмую Ñ Ð¿Ð°Ð½ÐµÐ»Ð¸ + кнопку (не через Items) - ещё не знаю как в лазаре в дизайнере + Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ñлементов запретить удаление + + Добавил демку Ð´Ð»Ñ TToolPanel + +03.10.2005 + + перевёл вÑе имена файлов к нижнему региÑтру + + в TToolPanel пофикÑил некторые баги + + работает окно наÑтройки панели + + ПоддерживаетÑÑ DropDownMenu в Ñтиле полного Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ + + Ñкрытие не нужных кнопок (наÑтройка в run-time) + + +02.10.2005 (beta) + + Ðачата Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ (полноÑтью ÑвоÑ) TToolPanel - аналог RxToolbar + по функциональноÑти похоже на Ñтандартный ToolBar - точно + также работает через Actions (Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº иÑпользовать метод Items) + полноÑтью Ð¼Ð¾Ñ Ð¿ÐµÑ€ÐµÑ€Ð¸Ñовка кнопок - нормальный внешний вид. + работает: + + куÑÑ‚Ð¾Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ€Ð°ÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº и внешнего вида в run-time + + Ñохранение во внешний конфигурационный файл через propstorage + будут реализованы: + - DropDownMenu - в завиÑимоÑти от ÑÑ‚Ð¸Ð»Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ либо выпадает + при нажатии на кнопку, либо будет Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð½Ð°Ñ Ð¾Ð±Ð»ÑÑть кнопки (Ñуб.кнопка) Ð´Ð»Ñ + вызова меню + - Ñкрытие ненужных кнопок (наÑтройка в run-time) + - Ñтили Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (ÑÐµÐ¹Ñ‡Ð°Ñ Ñтандарт Win9x, Flat) - добавлÑÑŽ как в WinXP + - маÑтер ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°Ð½ÐµÐ»Ð¸ в DesignTime в лазаре + змеченые глюки + - не вÑегда коректно воÑтанавливаетÑÑ Ð¿Ñ€Ð¸ ширина кнопок + + принимаю заÑвки на функциональноÑть и ошибки + +30.10.2005 + + Ð¿ÐµÑ€ÐµÐ½Ñ‘Ñ + + Ð¿ÐµÑ€ÐµÐ½Ñ‘Ñ RxDice, RxSwith, TRxDBComboBox + + Разбил на 2 закладки - RX и RX DBAware + - иÑправил баг Ñ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¼ размером у TRxDBLookupCombo + + +28.10.2005 + + практичеÑки работает Currency edit (не проверил под линухом) + - из-за ошибки в функиции FormatFloat из FCL Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в Ñтроке + Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ñ‹Ðµ или двойные кавычки - повеÑитÑÑ +19.10.2005 + + TRxMemoryData - работает почти полноÑтью - нет поддержки blob - надо разбирать + + начал Ð¿ÐµÑ€ÐµÐ½Ð¾Ñ Currency edit + + правил ошибки + - ещё не вÑÑ‘ проверил в линукÑе - теоретичеÑки должно ÑобратьÑÑ Ð¸ работать +05.10.2005 + + Добавлен TRxDBGrid - напиÑан по "мотивам оригинального, ещё еÑть что переноÑить + Ñамое главное, почему его начал переноÑить - захотелоÑÑŒ Ñделать Ñортировку + наборов данных как в DBGridEh из EhLib. Я вышел Ñ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼ на + Jesus Reyes (автор DBGrid-а о добавлении функциональноÑти) - он Ñказал, что нефиг + превращать Ñтандартный компонент в новогоднюю ёлку. ПоÑтому Ñтал Ñам доделывать + наÑледника. + Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÐµÑ‚ многоÑтрочные заголовки, подерживаетÑÑ Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ðµ на заголовок + как на кнопку Ñ Ð¾Ð¿Ñ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼ отображением Ñимвола Ñортировки (ÑоответÑвующее Ñобытие) + + также добавил механизм автоÑортировки Ñм. файл exSortFB.pas - тут наиболее лаконично + вÑÑ‘. Кратко - Ð´Ð»Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹Ñ… типов иÑточноков данных + пишетÑÑ Ð¾Ð±Ñ‘Ñ€Ñ‚ÐºÐ° (наÑледник от TExDBGridSortEngine) который умеет в Ñтом + иÑточнике данных переупорÑдочивать запиÑи. Мой TFBDataSet (работаю Ñ FireBird) + умеет Ñам в локальном кÑше Ñортировать Ð·Ð°Ð¿Ð¸Ñ - поÑтому там вÑÑ‘ проÑто. + exsortmds.pas - Ñтот модуль Ð´Ð»Ñ Ñортировки данных в Ñтандартном MemDS + немного кривовато напиÑано - практичеÑки нет механизмов добратьÑÑ Ð´Ð¾ внутреннего + буфера данных (кÑтати в MemDS еÑть баг Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÑƒÑ€Ñора на 1-ÑŽ запиÑÑŒ) + + - TRxMemoryData - вроде вÑÑ‘ ÑкомпилировалоÑÑŒ практичеÑки без правки - но чтото при + добавлении запиÑи - ошибка (подозреваю не ÑовмеÑтимоÑть DataSet-а из дельфей и ЛазарÑ) + надо разобратьÑÑ. Стандартный MemDS ограничен - нет блоб и прочего. +31.09.2005 + + Add component TFolderLister - Ñто Ð¼Ð¾Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° - на оÑнове неё добавлю + ещё компонент Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¼ÐµÐ½ÑŽ, Ñодержащее отчёты Ð´Ð»Ñ LazReport-a + (аналог у Ð¼ÐµÐ½Ñ Ð² дельфÑÑ… моей также разработки) +07.01.2005 + i'm port next RX components: + TDBDateEdit - не даёт вводить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€ÑƒÐºÐ°Ð¼Ð¸ - наÑледÑтво от оригинального + TDateEdit + TRxDBCalcEdit + TRXLookupEdit, + TRxDBLookupCombo - тут баг - при кидании на форму не коректно уÑтанавливаютÑÑ + размеры, приходитÑÑ Ñ€ÑƒÐºÐ°Ð¼Ð¸ реÑайзить - когда нить доделаю - или кто Ñможет - + помогайте. + + + and next modules: + DateUtil.pas + DbUtils.pas + rxdconst.pas + RXStrutils.pas + VCLUtils.pas + +жду замечаний и предложений + Лагунов ÐлекÑей (alexs) + + ALEXS75-на-YANDEX-точка-RU + diff --git a/components/rx/version/2.1/docs/auto_panel_doc/autopnl.txt b/components/rx/version/2.1/docs/auto_panel_doc/autopnl.txt new file mode 100644 index 000000000..6ee921320 --- /dev/null +++ b/components/rx/version/2.1/docs/auto_panel_doc/autopnl.txt @@ -0,0 +1,36 @@ +TAutoPanel 1.0. TPanel with some extension. + +Tested under Delphi 3,4. + +Allow to change size and position of child components when changing a size +of AutoPanel + + +Programmer: Dmitry V. Bolshakov +(4232)41-19-82 (voice in Russia) +Home page: tax25.marine.su/dmitryb +E-mail: dmitryb@tax25.marine.su +FidoNet 2:5045/41.63 +QCI # 10785451 + + + +Added 4 property + +property AutoChildPosLeft : Boolean; +// Indicates whether the left position of child components will be +// changed when changing a size of panel +property AutoChildPosTop : Boolean; +// Indicates whether the top position of child components will be +// changed when changing a size of panel +property AutoChildWidth : Boolean; // Indicates whether the width of +// child components will be changed when changing a size of panel +property AutoChildHeight : Boolean; // Indicates whether the height of +// child components will be changed when changing a size of panel + +Warning: Don't insert the child component in AutoPanel at RunTime. + +INSTALLATION +Open menu "Component\Install Component...". In "Unit file name" browse +AutoPanel.pas. In "Package file name" browse LIB\dclusr30.dpk (dclusr40.dpk +in Delphi 4) . Click Ok. \ No newline at end of file diff --git a/components/rx/version/2.1/docs/error.txt b/components/rx/version/2.1/docs/error.txt new file mode 100644 index 000000000..5fa8b1273 --- /dev/null +++ b/components/rx/version/2.1/docs/error.txt @@ -0,0 +1,2 @@ +Замеченные проблемы: + diff --git a/components/rx/version/2.1/docs/faq.txt b/components/rx/version/2.1/docs/faq.txt new file mode 100644 index 000000000..e48d22046 --- /dev/null +++ b/components/rx/version/2.1/docs/faq.txt @@ -0,0 +1,10 @@ +1. + Q. Почему в выподающем ÑпиÑке TRxCustomDBLookupCombo клавишы + HOME и END не позиционируют в начало/конец ÑпиÑка + A. Ð”Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑпиÑка иÑпользуетÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚ TRxDBGrid + (прÑмой наÑледник TDBGrid) - в нём Ð´Ð»Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² + начало/конец ÑпиÑка клавиши Ctrl+Home/Ctrl+End + +2. Ð’ RxDBGrid режим быÑтрого поиÑка работает при RxDBGrid.ReadOnly = true + подробнее Ñмотри пункт 6 в файле readmy.txt + diff --git a/components/rx/version/2.1/docs/makehtml.sh b/components/rx/version/2.1/docs/makehtml.sh new file mode 100755 index 000000000..02e756f7d --- /dev/null +++ b/components/rx/version/2.1/docs/makehtml.sh @@ -0,0 +1,33 @@ +#!/bin/bash +#надо Ñкопировать rx.inc в текущий каталог, иначе не Ñоберём (глюк fpdoc) +cp ../rx.inc rx.inc +fpdoc --package=rxfpc --format=html --index-colcount=4 --hide-protected \ + --input=../curredit.pas --descr=rxfpc.xml \ + --input=../dbdateedit.pas --descr=rxfpc.xml \ + --input=../duallist.pas --descr=rxfpc.xml \ + --input=../folderlister.pas --descr=rxfpc.xml \ + --input=../rxctrls.pas --descr=rxfpc.xml \ + --input=../rxdice.pas --descr=rxfpc.xml \ + --input=../rxlookup.pas --descr=rxfpc.xml \ + --input=../rxlogin.pas --descr=rxfpc.xml \ + --input=../rxtoolbar.pas --descr=rxfpc.xml \ + --input=../rxspin.pas --descr=rxfpc.xml \ + --input=../rxclock.pas --descr=rxfpc.xml \ + --input=../rxmemds.pas --descr=rxfpc.xml \ + --input=../rxswitch.pas --descr=rxfpc.xml \ + --input=../tooledit.pas --descr=rxfpc.xml \ + --input=../pickdate.pas --descr=rxfpc.xml \ + --input=../rxversinfo.pas --descr=rxfpc.xml \ + --input=../rxtimeedit.pas --descr=rxfpc.xml \ + --input=../rxdbcomb.pas --descr=rxfpc.xml \ + --input=../rxdbtimeedit.pas --descr=rxfpc.xml \ + --input=../rxdbgrid.pas --descr=rxfpc.xml \ + --input=../rxdbgrid_columsunit.pas --descr=rxfpc.xml \ + --input=../rxdbgrid_findunit.pas --descr=rxfpc.xml \ + --input=../rxdbctrls.pas --descr=rxfpc.xml \ + --input=../rxdbspinedit.pas --descr=rxfpc.xml \ + --input=../rxaboutformunit.pas --descr=rxfpc.xml \ + --input=../rxaboutdialog.pas --descr=rxfpc.xml \ + --input=../dateutil.pas --descr=rxfpc.xml \ + --input=../rxfileutils.pas --descr=rxfpc.xml + diff --git a/components/rx/version/2.1/docs/readmy.txt b/components/rx/version/2.1/docs/readmy.txt new file mode 100644 index 000000000..fc96e4f7f --- /dev/null +++ b/components/rx/version/2.1/docs/readmy.txt @@ -0,0 +1,66 @@ +1. Ð”Ð»Ñ Ð¸Ñпользовании в RxDbGrid ÑпиÑка изображений ImageList + необходимо указать в ÑвойÑтве KeyList правило выбора Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ + в формате "Значение полÑ"="Код изображениÑ" + Ñ‚.е. еÑли поле принимает Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ 1,2,3 а Ð´Ð»Ñ Ñтих значений необходимы + риÑунки Ñ Ð½Ð¾Ð¼ÐµÑ€Ð°Ð¼Ð¸ 2,5,1 то ÑпиÑок необходимо заполнить Ñледующим + образом: + 1=2 + 2=5 + 3=1 + +2. TPageManager предназначен Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¼Ð°Ñтеров + умеет отображать в заголовке формы (еÑли уÑтановлена ÑоответÑÐ²ÑƒÑŽÑ‰Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ) + текÑÑ‚, который Ñформатирует из Ñтрок Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸Ñ (пропуÑкаетÑÑ Ñ‡ÐµÑ€ÐµÐ· функцию Format) + Ñтрока информации может Ñодержать в Ñебе два целочиÑленных параметра (%d) + первый - текущий шаг + второй - вÑего шагов + пример: + 'МаÑтер приёма. Шаг %d из %d.' + + StatusControl - еÑли уÑтановлен то в заголовке также отображаетÑÑ Ñта же + информациÑ. + + Ñобытие OnCheckPageEnabled Ñлужит Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ, что ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð°Ñ Ñтраница + запрещена при нажатии на кнопки Next и Prior Ñта Ñтраница пропуÑкаетÑÑ + +3. RxAppIcon - Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° иконки Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² режиме разработки нажмите + правой кнопкой мышки по компоненте и выберите "Load Icon" + + Ð’ ран-тайме тот-же Ñффект доÑтигаетÑÑ ÐºÐ¾Ð´Ð¾Ð¼: + + RxAppIcon1.LoadFromFile('full-2.ico'); + RxAppIcon1.ApplyIcon; + ^^^^^^^^^^^ - путь к иконке + +4. Ð”Ð»Ñ Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð¹ работы иÑпользуйте поÑледнюю верÑию Lazarus + Ñборкой не ниже 0.9.19 (10151) - поÑвилаÑÑŒ в SVN 01.11.2006 + +5. Замечание о RXDBGRID_OPTIONS_WO_CANCEL_ON_EXIT и флаге dgCancelOnExit в + TRxDbGrid.Options + в Ñлучае иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñледующей Ñхемы под линукÑом: + Ð’ форму ложим ÑпиÑок TRxDbGrid Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ набором данных и отдельную кнопку (TSpeedButton) на + добавление новой запиÑи в набор данных Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð¾Ð¼ другой модальной формы Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + добовлÑемых значение + при открытии формы Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€ данных, ÑвÑзанный Ñ TRxDbGrid переходит в ÑоÑтоÑние + Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + Ñто поведени наблюдаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ по Linux + + объÑÑнение заключаетÑÑ Ð² том что при потере фокуÑа TDbGrid и его наÑледниеи вызывают + метод Cancel + +6. +ÐовшеÑтво: Добавлен в RxDBGrid UTF8-быÑтрый поиÑк. +ВключаетÑÑ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ rdgAllowQuickUTF8Search (добавил её в rxoptions, Ñто нормально? или было +лучше включить в ÑоÑтав других опций?) +УправлÑетÑÑ ÑвойÑтвом QuickUTF8Search +Ðе реагирует на ÑпиÑок "управлÑющих" клавиш однобайтовых: CBadQuickUTF8SearchSymbols +По управлÑющим однобайтовым клавишам ÑбраÑывает подÑтроку поиÑка: CCancelQuickUTF8SearchKeys +Ð”Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ñобытий поиÑка добавлен тип TRxQuickUTF8SearchNotifyEvent +Перед началом попытки поиÑка вызывает Ñобытие BeforeQuickUTF8Search, в качеÑтве AValue +передаётÑÑ Ð¿Ð¾Ð´Ñтрока-кандидат на поиÑк, еÑли её ÑброÑить в текущее значение QuickUTF8Search +поиÑк производитÑÑ Ð½Ðµ будет +ПоÑле уÑпешного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¸Ñка вызываетÑÑ Ñобытие AfterQuickUTF8Search, куда передаётÑÑ Ð² +качеÑтве AValue Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð¿Ð¾Ð´Ñтрока поиÑка. ПоÑледнее Ñобытие удобно иÑпользовать Ð´Ð»Ñ +Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð³Ð´Ðµ ни будь на общей форме текущий подÑтроки поиÑка. + +7. ВопроÑÑ‹ задавать мылом или на форуме FreePascal.ru (предпочтительней) diff --git a/components/rx/version/2.1/docs/rxfpc.xml b/components/rx/version/2.1/docs/rxfpc.xml new file mode 100644 index 000000000..c1ab0077b --- /dev/null +++ b/components/rx/version/2.1/docs/rxfpc.xml @@ -0,0 +1,2900 @@ +<?xml version="1.0" encoding="utf-8"?> +<fpdoc-descriptions> + <package name="dcl_rx_fpc"> + <short>Пакет времени разработки</short> + <descr> + <p>Данный пакет Ñодержит в Ñебе вÑпомогательные клаÑÑÑ‹ и утилиты, которые необходимы во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ программы.</p> + <p>Ð’Ñе Ñти данные не иÑпользуютÑÑ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ готовой программы, поÑтому Ñтот код не включаетÑÑ Ð² финальные верÑии программ.</p> + </descr> + </package> + <package name="rxfpc"> + <module name="rxdbgrid"> + <element name="TRxDBGridSortEngine"> + <short>ÐбÑтрактный клаÑÑ Ñортировки данных</short> + <descr>ÐбÑтрактный клаÑÑ Ñортировки данных в RXDBGrid. +От Ñтого клаÑÑа необходимо Ñоздавать наÑледников, которые будут предоÑтавлÑть функционал по Ñортировке данных в наборе данных, который подключен к RXDBGrid.</descr> + </element> + <element name="TRxDBGridSortEngine.Sort"> + <short>ÐбÑтрактный метод Ñортировки по Ñтолбцу</short> + <descr>Этот метод необходимо перекрывать в наÑледнике Ð´Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ñортировки данных при щелчке по Ñтолбцу в RxDBGrid-е</descr> + </element> + <element name="TRxDBGridSortEngine.SortList"> + <short>ÐбÑтрактный метод Ñортировки по неÑкольким Ñтолбцам</short> + <descr>Ð’ RXDBGrid-е еÑть возможноÑть Ñортировки по неÑкольким Ñтолбцам одновременно. +ЕÑли набор данных имеет такую возможноÑть, то данный метод необходимо переопределить и впиÑать в нём вызов Ñортировки по неÑкольким Ñтолбцам.</descr> + </element> + <element name="TRxColumnTitle"> + <short>Этот клаÑÑ Ð¿Ñ€ÐµÐ´ÑтавлÑет Ñобой заголовок Ñтолбца в RXDbGrid</short> + <descr> + <b>TRxColumnTitle = class(TColumnTitle)</b> +Этот клаÑÑ Ð½Ð°Ñледует вÑе оÑновные ÑвойÑтва заголовка из DBGrid и добавÑлет инÑтрументы по отображению многоÑтрочных заголовков</descr> + </element> + <element name="TRxColumnTitle.Create"/> + <element name="TRxColumnTitle.Destroy"/> + <element name="TRxColumnTitle.CaptionLinesCount"/> + <element name="TRxColumnTitle.CaptionLine"/> + <element name="TRxColumnTitle.Orientation"/> + <element name="TRxColumnTitle.Hint"/> + <element name="TRxColumnTitle.ShowHint"/> + <element name="TRxColumnFooter"/> + <element name="TRxColumnFooter.Create"/> + <element name="TRxColumnFooter.Owner"/> + <element name="TRxColumnFooter.Alignment"/> + <element name="TRxColumnFooter.Layout"/> + <element name="TRxColumnFooter.DisplayFormat"/> + <element name="TRxColumnFooter.FieldName"/> + <element name="TRxColumnFooter.Value"> + <short>ТекÑÑ‚, выводимый в поÑледней Ñтроке ÑпиÑка</short> + <descr>При уÑтановленном занчении ÑвойÑтва +<link id="TRxColumnFooter.ValueType">ValueType</link> равным <link id="TFooterValueType">fvtStaticText</link>, в поÑледней Ñтроки ÑпиÑка оторажаетÑÑ Ð²Ð²ÐµÐ´Ñ‘Ð½Ð½Ð¾Ðµ здеÑÑŒ значение</descr> + </element> + <element name="TRxColumnFooter.ValueType"> + <short>ОпределÑем тип занчениÑ, автоматичеÑки раÑчитываемого в итоговой Ñтроке</short> + <descr> + <link id="TFooterValueType">ОпределÑем тип занчениÑ</link>, автоматичеÑки раÑчитываемого в итоговой Ñтроке</descr> + </element> + <element name="TRxColumnFilter"/> + <element name="TRxColumnFilter.Create"/> + <element name="TRxColumnFilter.Destroy"/> + <element name="TRxColumnFilter.Value"/> + <element name="TRxColumnFilter.Font"/> + <element name="TRxColumnFilter.Alignment"/> + <element name="TRxColumnFilter.DropDownRows"/> + <element name="TRxColumnFilter.Color"/> + <element name="TRxColumnFilter.ValueList"/> + <element name="TRxColumnFilter.EmptyValue"/> + <element name="TRxColumnFilter.EmptyFont"/> + <element name="TRxColumnFilter.ItemIndex"/> + <element name="TRxDBGrid"> + <short>ÐаÑледник от Ñтандартного TDBGrid Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼Ð¸ возможноÑÑ‚Ñми</short> + <descr> + <p>Компонента TRxDBGrid предназначена, как и ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð° TDBGrid, Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… таблиц БД или результатов запроÑов в табличной форме. ЯвлÑÑÑÑŒ наÑледником TDBGrid, компонента TRxDBGrid имеет вÑе те же ÑвойÑтва и методы, и, кроме того, некоторые ÑвойÑтва, находÑщиеÑÑ Ñƒ TDBGrid в Ñекции protected, вынеÑены в Ñекцию public. Это такие ÑвойÑтва, как Col, Row, LeftCol, Canvas. </p> + <p>Другие Ð¾Ñ‚Ð»Ð¸Ñ‡Ð¸Ñ Ð¾Ñ‚ TDBGrid: </p> + <p>- BLOB-Ð¿Ð¾Ð»Ñ Ð±Ð°Ð·Ñ‹ данных, такие как графичеÑкие изображениÑ, текÑтовые мемо-полÑ, другие BLOB'Ñ‹ могут отображатьÑÑ Ð² таблице в виде пиктограмм при уÑтановленном в True значении ÑвойÑтва ShowGlyphs; </p> + <p>- вы можете изменить цвет шрифта и фона любой Ñчейки таблицы (либо любой ее Ñтроки или Ñтолбца) в завиÑимоÑти от Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ñ Ð¸Ð»Ð¸ имени Ð¿Ð¾Ð»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° данных, определив обработчик ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ OnGetCellParams; </p> + <p>- имеютÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ñ‹ SaveLayout и RestoreLayout Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¸ воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñ€Ñдка и ширин Ñтолбцов компоненты TRxDBGrid в INI или XML-файле. Ð’Ñ‹ можете также автоматичеÑки ÑохранÑть и воÑÑтанавливать Ñти параметры, приÑвоив значение ÑвойÑтву IniStorage. </p> + <p>- заголовки колонок Grid-а могут быть Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑвойÑтва TitleButtons иÑпользованы как кнопки, например, Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñ€Ñдка Ñортировки отображаемых данных. </p> + <p>- вы можете зафикÑировать неÑколько первых колонок в Grid-е Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑвойÑтва FixedCols. </p> + </descr> + </element> + <element name="TRxDBGrid.FilterRec"/> + <element name="TRxDBGrid.Create"/> + <element name="TRxDBGrid.Destroy"/> + <element name="TRxDBGrid.EditorByStyle"/> + <element name="TRxDBGrid.LayoutChanged"/> + <element name="TRxDBGrid.ShowFindDialog"/> + <element name="TRxDBGrid.ShowColumnsDialog"/> + <element name="TRxDBGrid.ColumnByFieldName"/> + <element name="TRxDBGrid.Canvas"/> + <element name="TRxDBGrid.DefaultTextStyle"/> + <element name="TRxDBGrid.EditorBorderStyle"/> + <element name="TRxDBGrid.EditorMode"/> + <element name="TRxDBGrid.ExtendedColSizing"/> + <element name="TRxDBGrid.FastEditing"/> + <element name="TRxDBGrid.FocusRectVisible"/> + <element name="TRxDBGrid.SelectedRows"/> + <element name="TRxDBGrid.CalcStatTotals"/> + <element name="TRxDBGrid.OptimizeColumnsWidth"/> + <element name="TRxDBGrid.OptimizeColumnsWidthAll"/> + <element name="TRxDBGrid.UpdateTitleHight"/> + <element name="TRxDBGrid.QuickUTF8Search"/> + <element name="TRxDBGrid.GetOnCreateLookup"/> + <element name="TRxDBGrid.GetOnDisplayLookup"/> + <element name="TRxDBGrid.AfterQuickSearch"> + <short>Событие, возникающее до Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ быÑтрого поиÑка данных в Ñпике</short> + <descr>Событие, возникающее до Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ быÑтрого поиÑка данных в Ñпике</descr> + <seealso> + <link id="TRxQuickSearchNotifyEvent"/> + </seealso> + </element> + <element name="TRxDBGrid.BeforeQuickSearch"> + <short>Событие, возникающее поÑле Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ быÑтрого поиÑка данных в Ñпике</short> + <descr>Событие, возникающее поÑле Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ быÑтрого поиÑка данных в Ñпике</descr> + <seealso> + <link id="TRxQuickSearchNotifyEvent"/> + </seealso> + </element> + <element name="TRxDBGrid.OnGetBtnParams"> + <short>Данный тип опиÑывает Ñобытие при отображении в ÑпиÑке заголовка колонки</short> + <descr>Данный <link id="TGetBtnParamsEvent">тип опиÑывает Ñобытие</link> при отображении в ÑпиÑке заголовка колонки</descr> + </element> + <element name="TRxDBGrid.TitleButtons"> + <short>property TitleButtons: Boolean;</short> + <descr>СвойÑтво определÑет, могут ли заголовки колонок в Grid-е быть иÑпользованы как кнопки. По умолчанию - False. +При уÑтановке ÑвойÑтва в значение True Ð’Ñ‹ можете обработать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ OnTitleBtnClick Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° такую кнопку и OnCheckButton, OnGetBtnParams Ð´Ð»Ñ ÑƒÑтановки ÑвойÑтв кнопок в заголовке.</descr> + </element> + <element name="TRxDBGrid.AutoSort"/> + <element name="TRxDBGrid.OnGetCellProps"> + <short>Событие Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² Ñчейки в RxDBGrid-е</short> + <descr> + <p>Событие Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² Ñчейки в <link id="TRxDBGrid">RxDBGrid</link>-е</p> + </descr> + <seealso> + <link id="TGetCellPropsEvent"/> + </seealso> + </element> + <element name="TRxDBGrid.Columns"/> + <element name="TRxDBGrid.PropertyStorage"> + <short>property IniStorage: TFormPlacement;</short> + <descr> + <p>СвойÑтво позволÑет автоматичеÑки ÑохранÑть ÑпецифичеÑкие уÑтановки компоненты в INI-файле или (Ð´Ð»Ñ 32-разрÑдной верÑии) в ÑиÑтемном региÑтре при помощи компонент TFormPlacement или TFormStorage. </p> + <p>При задании Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтву IniStorage (и непуÑтом имени компоненты), некоторые ее наÑтройки, которые не ÑвлÑÑŽÑ‚ÑÑ published-ÑвойÑтвами и не могут быть заданы Ð´Ð»Ñ TFormStorage напрÑмую, будут ÑохранÑтьÑÑ Ð¸ воÑÑтанавливатьÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¸ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ значениÑми, заданными Ð´Ð»Ñ ÑоответÑтвующей компоненты TFormPlacement (TFormStorage). </p> + <p>Ð”Ð»Ñ TSpeedbar - Ñто раÑположение кнопок на панели и положение Ñамой панели, Ð´Ð»Ñ TMRUManager - ÑпиÑок Ñтрок, Ð´Ð»Ñ TRxDBGrid - ширины и положение полей в таблице и Ñ‚.д. Ð’Ñе компоненты, имеющие ÑвойÑтво IniStorage, имеют также методы Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¸ воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ñ… наÑтроек вручную, такие как Save/RestoreLayout и Ñ‚.д.</p> + </descr> + </element> + <element name="TRxDBGrid.Version"/> + <element name="TRxDBGrid.AllowedOperations"> + <short>Ðабор флагов, определÑющие поведение при редактировании/добавлении или удалении данных в RxDBGrid</short> + <descr>Ðабор <link id="TRxDBGridAllowedOperation">флагов</link>флагов, определÑющие поведение при редактировании/добавлении или удалении данных в RxDBGrid</descr> + </element> + <element name="TRxDBGrid.OptionsRx"> + <short>Ðабор флагов, управлÑющих поведением RxDBGrid</short> + <descr> + <p> + <link id="TOptionRx">Ðабор флагов</link>, управлюÑщих поведением + + + + + + + + + + + + + + <link id="TRxDBGrid">RxDBGrid</link>-а.</p> + </descr> + </element> + <element name="TRxDBGrid.FooterColor"/> + <element name="TRxDBGrid.FooterRowCount"/> + <element name="TRxDBGrid.OnFiltred"/> + <element name="TRxDBGrid.Align"/> + <element name="TRxDBGrid.AlternateColor"/> + <element name="TRxDBGrid.Anchors"/> + <element name="TRxDBGrid.AutoAdvance"/> + <element name="TRxDBGrid.AutoFillColumns"/> + <element name="TRxDBGrid.AutoEdit"/> + <element name="TRxDBGrid.BiDiMode"/> + <element name="TRxDBGrid.BorderSpacing"/> + <element name="TRxDBGrid.BorderStyle"/> + <element name="TRxDBGrid.Color"/> + <element name="TRxDBGrid.BorderColor"/> + <element name="TRxDBGrid.FocusColor"/> + <element name="TRxDBGrid.FixedHotColor"/> + <element name="TRxDBGrid.SelectedColor"/> + <element name="TRxDBGrid.GridLineColor"/> + <element name="TRxDBGrid.GridLineStyle"/> + <element name="TRxDBGrid.Constraints"/> + <element name="TRxDBGrid.DataSource"/> + <element name="TRxDBGrid.DefaultDrawing"/> + <element name="TRxDBGrid.DefaultRowHeight"/> + <element name="TRxDBGrid.DragCursor"/> + <element name="TRxDBGrid.DragKind"/> + <element name="TRxDBGrid.DragMode"/> + <element name="TRxDBGrid.Enabled"/> + <element name="TRxDBGrid.FixedColor"/> + <element name="TRxDBGrid.FixedCols"/> + <element name="TRxDBGrid.Flat"/> + <element name="TRxDBGrid.Font"/> + <element name="TRxDBGrid.HeaderHotZones"/> + <element name="TRxDBGrid.HeaderPushZones"/> + <element name="TRxDBGrid.Options"/> + <element name="TRxDBGrid.OptionsExtra"/> + <element name="TRxDBGrid.ParentBiDiMode"/> + <element name="TRxDBGrid.ParentColor"/> + <element name="TRxDBGrid.ParentFont"/> + <element name="TRxDBGrid.ParentShowHint"/> + <element name="TRxDBGrid.PopupMenu"/> + <element name="TRxDBGrid.ReadOnly"/> + <element name="TRxDBGrid.Scrollbars"/> + <element name="TRxDBGrid.ShowHint"/> + <element name="TRxDBGrid.TabOrder"/> + <element name="TRxDBGrid.TabStop"/> + <element name="TRxDBGrid.TitleFont"/> + <element name="TRxDBGrid.TitleStyle"/> + <element name="TRxDBGrid.Visible"/> + <element name="TRxDBGrid.OnCellClick"/> + <element name="TRxDBGrid.OnColEnter"/> + <element name="TRxDBGrid.OnColExit"/> + <element name="TRxDBGrid.OnColumnMoved"/> + <element name="TRxDBGrid.OnColumnSized"/> + <element name="TRxDBGrid.OnDragDrop"/> + <element name="TRxDBGrid.OnDragOver"/> + <element name="TRxDBGrid.OnDrawColumnCell"/> + <element name="TRxDBGrid.OnDblClick"/> + <element name="TRxDBGrid.OnEditButtonClick"/> + <element name="TRxDBGrid.OnEndDock"/> + <element name="TRxDBGrid.OnEndDrag"/> + <element name="TRxDBGrid.OnEnter"/> + <element name="TRxDBGrid.OnExit"/> + <element name="TRxDBGrid.OnFieldEditMask"/> + <element name="TRxDBGrid.OnKeyDown"/> + <element name="TRxDBGrid.OnKeyPress"/> + <element name="TRxDBGrid.OnKeyUp"/> + <element name="TRxDBGrid.OnMouseDown"/> + <element name="TRxDBGrid.OnMouseMove"/> + <element name="TRxDBGrid.OnMouseUp"/> + <element name="TRxDBGrid.OnPrepareCanvas"/> + <element name="TRxDBGrid.OnSelectEditor"/> + <element name="TRxDBGrid.OnStartDock"/> + <element name="TRxDBGrid.OnStartDrag"/> + <element name="TRxDBGrid.OnTitleClick"> + <descr>Событие проиÑходит при нажатии пользователем на кнопку в заголовке колонки компоненты TRxDBGrid при уÑтановленном в True значении ÑвойÑтва TitleButtons. Ð’ обработчик ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð² качеÑтве параметров передаютÑÑ Ð½Ð¾Ð¼ÐµÑ€ колонки ACol и поле Field, ÑоответÑтвующее данной колонке.</descr> + </element> + <element name="TRxDBGrid.OnUserCheckboxBitmap"/> + <element name="TRxDBGrid.OnUTF8KeyPress"/> + <element name="TRxDBGrid.OnCreateLookup"/> + <element name="TRxDBGrid.OnDisplayLookup"/> + <element name="TRxColumn"> + <short>Этот ÐºÐ»Ð°Ñ Ð¿Ñ€ÐµÐ´ÑтавлÑет Ñобой колонку в RxDBGrid</short> + </element> + <element name="TRxColumn.Create"> + <short>КонÑтруктор constructor TRxColumn.Create(ACollection: TCollection);</short> + <descr>КонÑтруктор constructor <b>TRxColumn.Create(ACollection: TCollection);</b> +Создаёт клаÑÑ Ñтолбца и заполнÑет начальные значениÑ</descr> + </element> + <element name="TRxColumn.Destroy"/> + <element name="TRxColumn.aOptimizeWidth"/> + <element name="TRxColumn.aFooter"/> + <element name="TRxColumn.aImageList"/> + <element name="TRxColumn.aKeyList"/> + <element name="TRxColumn.NotInKeyListIndex"/> + <element name="TRxColumn.aFilter"/> + <element name="TRxQuickSearchNotifyEvent"> + <short>Тип опиÑывает Ñобытие, возникающее во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ быÑтрого поиÑка данных в Ñпике</short> + <descr>Тип опиÑывает Ñобытие, возникающее во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ быÑтрого поиÑка данных в Ñпике</descr> + <seealso> + <link id="TRxDBGrid.AfterQuickSearch"/> + <link id="TRxDBGrid.BeforeQuickSearch"/> + </seealso> + </element> + <element name="TSortMarker"> + <short>Маркер Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñортировки</short> + <descr> + <p>Маркер Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñортировки.</p> + <p>ОпределÑет отображение маркера Ñортировки в заголовке Ñтолбца RxDBGrid-а.</p> + <table> + <th> + <td>Параметр</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>smNone</td> + <td>Ðе отображать маркер</td> + </tr> + <tr> + <td>smDown</td> + <td>Отображать маркер "Вниз" - прÑÐ¼Ð°Ñ Ñортировка</td> + </tr> + <tr> + <td>smUp</td> + <td>Отображать маркер "Вверх" - Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñортировка</td> + </tr> + </table> + </descr> + <seealso> + <link id="TGetBtnParamsEvent"/> + <link id="TRxDBGrid.OnGetBtnParams"/> + </seealso> + </element> + <element name="TGetBtnParamsEvent"> + <short>Данный тип опиÑывает Ñобытие при отображении в ÑпиÑке заголовка колонки</short> + <descr> + <p>Данный тип опиÑывает Ñобытие при отображении в ÑпиÑке заголовка колонки</p> + <table> + <th> + <td>Параметр</td> + <td>Тип</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>Sender: TObject</td> + <td>Ð’Ñ….</td> + <td>Указывает на ÑкземплÑÑ€ объекта <link id="TRxDBGrid">RxDBGrid</link> + </td> + </tr> + <tr> + <td>Field: TField</td> + <td>Ð’Ñ….</td> + <td>ОпределÑет колонку, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ необходимо определить параметры</td> + </tr> + <tr> + <td>AFont: TFont</td> + <td>Ð’Ñ….</td> + <td>С помощью данного объекта можно указать параметры шрифта заголовка</td> + </tr> + <tr> + <td>Background: TColor</td> + <td>Вых.</td> + <td>Можно указать цвет фона заголовка колонки</td> + </tr> + <tr> + <td>SortMarker: TSortMarker</td> + <td>Вых.</td> + <td>Можно указать <link id="TSortMarker">тип маркера Ñортировки</link> + </td> + </tr> + <tr> + <td>IsDown: Boolean</td> + <td>Ð’Ñ….</td> + <td>ОпределÑет, был ли клик мышкой по данному заголовку</td> + </tr> + </table> + </descr> + </element> + <element name="TGetCellPropsEvent"> + <short>Данный тип опиÑывает Ñобытие Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² Ñчейки в RxDBGrid-е</short> + <descr> + <p>Данный тип опиÑывает Ñобытие Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² Ñчейки в <link id="TRxDBGrid">RxDBGrid</link>-е</p> + <table> + <th> + <td>Параметр</td> + <td>Тип параметра</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>Sender: TObject</td> + <td>вх.</td> + <td>Указывает на ÑкземплÑÑ€ объекта <link id="TRxDBGrid">RxDBGrid</link> + </td> + </tr> + <tr> + <td>Field: TField</td> + <td>вх.</td> + <td>ОпределÑет колонку, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ произошло Ñобытие</td> + </tr> + <tr> + <td>AFont: TFont</td> + <td>вх.</td> + <td>С помощью данного объекта можно указать параметры шрифта Ñчейки</td> + </tr> + <tr> + <td>Background: TColor</td> + <td>вых.</td> + <td>Можно указать цвет фона Ñчейки</td> + </tr> + </table> + </descr> + <seealso> + <link id="TRxDBGrid.OnGetCellProps"/> + </seealso> + </element> + <element name="TRxDBGridAllowedOperation"> + <short>Параметры Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в RxDBGrid</short> + <descr> + <p>Флаги, определÑющие параметры Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в <link id="TRxDBGrid">RxDBGrid</link> + </p> + <table> + <th> + <td>Параметр</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>aoInsert</td> + <td>ДоÑтупна вÑтавка Ñтроки данных в <link id="TRxDBGrid">RxDBGrid</link> + </td> + </tr> + <tr> + <td>aoUpdate</td> + <td>ДоÑтупна изменение данных в Ñтроке <link id="TRxDBGrid">RxDBGrid</link> + </td> + </tr> + <tr> + <td>aoDelete</td> + <td>ДоÑтупно удаление Ñтроки данных из <link id="TRxDBGrid">RxDBGrid</link> + </td> + </tr> + <tr> + <td>aoAppend</td> + <td>ДоÑтупно добавление Ñтроки данных в конец ÑпиÑка в <link id="TRxDBGrid">RxDBGrid</link> + </td> + </tr> + </table> + </descr> + </element> + <element name="TRxDBGridAllowedOperations"> + <short>Ðабор флагов, определÑющие поведение при редактировании/добавлении или удалении данных в RxDBGrid</short> + <descr> + <p>Ðабор <link id="TRxDBGridAllowedOperation">флагов</link>, определÑющие поведение при редактировании/добавлении или удалении данных в +<link id="TRxDBGrid">RxDBGrid</link> + </p> + </descr> + </element> + <element name="TFooterValueType"> + <short>ОпределÑем тип занчениÑ, автоматичеÑки раÑчитываемого в итоговой Ñтроке</short> + <descr> + <p>ОпределÑем тип занчениÑ, автоматичеÑки раÑчитываемого в итоговой Ñтроке</p> + <table> + <th> + <td>Параметр</td> + <td>Значение</td> + </th> + <tr> + <td>fvtNon</td> + <td>По умолчанию, ничего не отображаем</td> + </tr> + <tr> + <td>fvtSum</td> + <td>ОтображаетÑÑ Ñумма по указанной колонке</td> + </tr> + <tr> + <td>fvtAvg</td> + <td>РаÑчитываетÑÑ Ñреднее значение по указанной колонке</td> + </tr> + <tr> + <td>fvtCount</td> + <td>ОтображаетÑÑ Ð¾Ð±Ñ‰ÐµÐµ количеÑтво Ñтрок в ÑпиÑке</td> + </tr> + <tr> + <td>fvtFieldValue</td> + <td>ОтображаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ указанной колонки</td> + </tr> + <tr> + <td>fvtStaticText</td> + <td>ОтображаетÑÑ Ñ‚ÐµÐºÑÑ‚ из Ð¿Ð¾Ð»Ñ <link id="TRxColumnFooter.Value">Value</link> + </td> + </tr> + <tr> + <td>fvtMin</td> + <td>ОтображаетÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ðµ значние указанного в ÑвойÑтве <link id="TRxColumnFooter.FieldName">FieldName</link>полÑ</td> + </tr> + <tr> + <td>fvtMax</td> + <td>ОтображаетÑÑ Ð¼Ð°ÐºÑимальное значние указанного в ÑвойÑтве <link id="TRxColumnFooter.FieldName">FieldName</link>полÑ</td> + </tr> + <tr> + <td>fvtRecNo</td> + <td>ОтображаетÑÑ Ð½Ð¾Ð¼ÐµÑ€ текущей запиÑи из ÑпиÑка</td> + </tr> + </table> + </descr> + <seealso> + <link id="TRxColumnFooter.ValueType"/> + <link id="TRxColumnFooter.FieldName"/> + </seealso> + </element> + <element name="TOptionRx"> + <short>Ðабор флагов, управлÑющих поведением RxDBGrid</short> + <descr> + <p>Ðабор флагов, управлÑющих поведением <link id="TRxDBGrid">RxDBGrid</link> + </p> + <table> + <th> + <td>Параметр</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>rdgAllowColumnsForm</td> + <td>Разрешает вызов формы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ и порÑдком раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº в <link id="TRxDBGrid">RxDBGrid</link>-е</td> + </tr> + <tr> + <td>rdgAllowDialogFind</td> + <td>Разрешает вызов формы поиÑка данных в <link id="TRxDBGrid">RxDBGrid</link>-е</td> + </tr> + <tr> + <td>rdgHighlightFocusCol</td> + <td>ПодÑвечивать текущую колонку</td> + </tr> + <tr> + <td>rdgHighlightFocusRow</td> + <td>ПодÑвечивать текущую Ñтроку</td> + </tr> + <tr> + <td>rdgDblClickOptimizeColWidth</td> + <td>При двойном щелчке по разделителю между колонками в <link id="TRxDBGrid">RxDBGrid</link>-е автоматичеÑки подбирать размер колонки по ширине отображаемых данных</td> + </tr> + <tr> + <td>rdgFooterRows</td> + <td>Отображать итоговую Ñтроку (подвал) Ñпика</td> + </tr> + <tr> + <td>rdgXORColSizing</td> + <td>При изменении размера колонки отображать только будущую границу колонки, Ñаму колонку при Ñтом не менÑть. Ð’ противном Ñлучае при изменении размера ширина колонки менÑетÑÑ Ñразу. Параметр полезен Ð´Ð»Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñ‹Ñ… компьютеров или терминального режима</td> + </tr> + <tr> + <td>rdgFilter</td> + <td>Разрешить локальную фильтрацию данных</td> + </tr> + <tr> + <td>rdgMultiTitleLines</td> + <td>Разрешить объединение заголовков колонок</td> + </tr> + <tr> + <td>rdgMrOkOnDblClik</td> + <td>При двойном щелчке мышки генерировать Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ñ‹-владельца грида Ñобытие mrOk - полезно при Ñоздании формы выбора из ÑпиÑка</td> + </tr> + <tr> + <td>rdgAllowQuickSearch</td> + <td>Разрешить быÑтрыый поиÑк в гриде - в Ñтом режиме нажатие клавиш включет механизм вÑтроенного поиÑка по текущей колонке, прÑмое редактирование в ÑпиÑке будет запрещено. </td> + </tr> + <tr> + <td>rdgAllowQuickFilter</td> + <td>Разрешить быÑтрую фильтрацию в колонках - в заголовке ÑпиÑка будет доÑтупна по нажатию клавиши <b>Ctrl+E</b> Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñтрока, ÑÐ¾Ð´ÐµÑ€Ð¶Ð°Ñ‰Ð°Ñ ComboBox-Ñ‹ Ñо значениÑми колонок. Ðналогично Ñортировки в Ñлектронных таблицах.</td> + </tr> + <tr> + <td>rdgAllowFilterForm</td> + <td>Разрешает к иÑпользованию форму фильтрации в <link id="TRxDBGrid">RxDBGrid</link>-е</td> + </tr> + <tr> + <td>rdgAllowSortForm</td> + <td>Разрешает к иÑпользованию формы Ñортировки данных в <link id="TRxDBGrid">RxDBGrid</link>-е</td> + </tr> + <tr> + <td>rdgAllowToolMenu</td> + <td>Включает отображение меню инÑтрументов в <link id="TRxDBGrid">RxDBGrid</link>-е. При активации данного параметра в верхнем левом углу грида отриÑовываетÑÑ Ñпециальный значок и при его нажатии мышкой выдаётÑÑ Ð¼ÐµÐ½ÑŽ иÑнтрументов</td> + </tr> + <tr> + <td>rdgCaseInsensitiveSort</td> + <td>Параметр включает режим Ñортировки без учёта региÑтра Ñимволов в Ñтолбце <link id="TRxDBGrid">RxDBGrid</link>-а</td> + </tr> + </table> + </descr> + </element> + <element name="TOptionsRx"> + <short>Ðабор флагов, управлюÑщих поведением RxDBGrid-а</short> + <descr> + <p> + <link id="TOptionRx">Ðабор флагов</link>, управлюÑщих поведением + + + + + + + + + + + + + <link id="TRxDBGrid">RxDBGrid</link>-а.</p> + </descr> + <seealso> + <link id="TOptionRx"/> + <link id="TRxDBGrid.OptionsRx"/> + </seealso> + </element> + <element name="TRxSortEngineOption"> + <short>Параметры Ñортировки данных</short> + <descr> + <p>Параметры Ñортировки данных</p> + <table> + <th> + <td>Параметр</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>seoCaseInsensitiveSort</td> + <td>При Ñортировке данных не учитывать региÑтр</td> + </tr> + </table> + </descr> + <seealso> + <link id="TRxSortEngineOptions"/> + <link id="TRxDBGridSortEngine.Sort"/> + </seealso> + </element> + <element name="TRxSortEngineOptions"> + <short>Парамерты Ñортировки</short> + <descr>Парамерты Ñортировки, набор <link id="TRxSortEngineOption">флагов</link>.</descr> + <seealso> + <link id="TRxDBGridSortEngine.Sort"/> + </seealso> + </element> + <element name="TRxDBGridSortEngineClass"> + <short>Мета-клаÑÑ Ñортировщика данных</short> + <descr>Мета-клаÑÑ Ñортировщика данных, иÑпользуетÑÑ Ð½ÐµÐ¿Ð¾ÑредÑтвенно при региÑтрации ÑкземплÑра клаÑÑа (наÑледника от <link id="TRxDBGridSortEngine">TRxDBGridSortEngine</link>) Ñортировщика данных.</descr> + <seealso> + <link id="RegisterRxDBGridSortEngine"/> + <link id="TRxDBGridSortEngine"/> + </seealso> + </element> + <element name="TMLCaptionItem"> + <short>Элемент многоÑтрочного заголовка</short> + <descr>Элемент многоÑтрочного заголовка</descr> + </element> + <element name="TRxDbGridColumns"/> + <element name="TRxDbGridColumns.Add"/> + <element name="TFilterListCellEditor"/> + <element name="TFilterListCellEditor.Show"/> + <element name="TFilterListCellEditor.Grid"/> + <element name="TFilterListCellEditor.Col"/> + <element name="TFilterListCellEditor.MouseFlag"/> + <element name="RegisterRxDBGridSortEngine"> + <short>РегиÑтрируем клаÑÑ Ñортировщика в наборе данных</short> + <descr> + <p>RxDBGridSortEngineClass:TRxDBGridSortEngineClass - клаÑÑ Ñортировщика</p> + <p>DataSetClass:TDataSetClass -</p> + </descr> + </element> + <element name="TCreateLookup"> + <short>Тип опиÑывает Ñобытие, возникающее в момент Ð¿Ð¾Ð»Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в лукпный редактор Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñчейки</short> + <descr>Тип опиÑывает Ñобытие, возникающее в момент Ð¿Ð¾Ð»Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в лукпный редактор Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñчейки</descr> + </element> + <element name="TDisplayLookup"> + <short>Тип опиÑывает Ñобытие, возникающее в момент показа выпадающего ÑпиÑка лукапного редактора Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñчейки</short> + <descr>Тип опиÑывает Ñобытие, возникающее в момент показа выпадающего ÑпиÑка лукапного редактора Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñчейки</descr> + </element> + <element name="TRxDBGrid.KeyStrokes"> + <short>ОпределÑет ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° фукнций RxDBGrid</short> + <descr>ОпределÑет ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° фукнций RxDBGrid</descr> + </element> + <element name="TRxDBGridKeyStrokes"> + <short>СпиÑок назначенных клавиш на команды в TRxDBGrid</short> + </element> + <element name="TRxDBGridKeyStrokes.Create"/> + <element name="TRxDBGridKeyStrokes.Add"/> + <element name="TRxDBGridKeyStrokes.AddE"/> + <element name="TRxDBGridKeyStrokes.ResetDefaults"/> + <element name="TRxDBGridKeyStrokes.FindRxCommand"/> + <element name="TRxDBGridKeyStrokes.FindRxKeyStrokes"/> + <element name="TRxDBGridKeyStrokes.Items"> + <short>СпиÑок назначенных команд на ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÑŒ</short> + </element> + <element name="TRxDBGridKeyStroke"/> + <element name="TRxDBGridKeyStroke.Command"> + <short>ОпределÑем команду</short> + </element> + <element name="TRxDBGridKeyStroke.ShortCut"> + <short>ОпределÑÑ‚ Ñочетание клавишь</short> + </element> + <element name="TRxDBGridKeyStroke.Enabled"> + <short>Признак запрета данного ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÑŒ</short> + </element> + </module> + <module name="rxctrls"> + <element name="TRxLabel"> + <descr> + <p>Компонента TRxLabel аналогична Ñтандартной компоненте VCL TLabel, однако дополнительно позволÑет придать текÑту ÑтатичеÑкого Ñлемента ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (Label) 3-мерный вид, либо отобразить "тень" текÑта. </p> + <p>С помощью ÑвойÑÑ‚ ShadowPos, ShadowColor и ShadowSize вы можете задать раÑположение, цвет и толщину "тени" букв текÑта. ЗначениÑ, заданные Ð´Ð»Ñ Ñтих ÑвойÑтв по умолчанию, Ñоздают "трехмерный" Ñффект Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑта. </p> + </descr> + </element> + <element name="TRxLabel.Align"/> + <element name="TRxLabel.Alignment"/> + <element name="TRxLabel.Alignment"/> + <element name="TRxLabel.Alignment"/> + <element name="TRxLabel.Color"/> + <element name="TRxLabel.DragCursor"/> + <element name="TRxLabel.DragMode"/> + <element name="TRxLabel.Enabled"/> + <element name="TRxLabel.Constraints"/> + <element name="TRxLabel.DragKind"/> + <element name="TRxLabel.BiDiMode"/> + <element name="TRxLabel.ParentBiDiMode"/> + <element name="TRxLabel.BorderSpacing"/> + <element name="TRxLabel.Layout"/> + <element name="TRxLabel.ParentColor"/> + <element name="TRxLabel.ParentFont"/> + <element name="TRxLabel.ParentShowHint"/> + <element name="TRxLabel.PopupMenu"/> + <element name="TRxLabel.ShadowColor"> + <descr>СвойÑтво задает цвет "тени" букв текÑта ÑтатичеÑкого Ñлемента ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ TRxLabel.</descr> + </element> + <element name="TRxLabel.ShadowSize"> + <descr>СвойÑтво задает толщину "тени" букв текÑта ÑтатичеÑкого Ñлемента ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ TrxLabel.</descr> + </element> + <element name="TRxLabel.ShadowPos"> + <descr>СвойÑтво задает раÑположение "тени" букв текÑта ÑтатичеÑкого Ñлемента ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ TrxLabel.</descr> + </element> + <element name="TRxLabel.ShowAccelChar"/> + <element name="TRxLabel.ShowFocus"/> + <element name="TRxLabel.ShowHint"/> + <element name="TRxLabel.Transparent"/> + <element name="TRxLabel.Visible"/> + <element name="TRxLabel.WordWrap"/> + <element name="TRxLabel.OnClick"/> + <element name="TRxLabel.OnDblClick"/> + <element name="TRxLabel.OnDragDrop"/> + <element name="TRxLabel.OnDragOver"/> + <element name="TRxLabel.OnEndDrag"/> + <element name="TRxLabel.OnMouseDown"/> + <element name="TRxLabel.OnMouseMove"/> + <element name="TRxLabel.OnMouseUp"/> + <element name="TRxLabel.OnMouseEnter"> + <descr>Событие проиÑходит, когда пользователь перемещает курÑор мыши в облаÑть, находÑщуюÑÑ Ð½Ð°Ð´ Ñлементом управлениÑ.</descr> + </element> + <element name="TRxLabel.OnMouseLeave"> + <descr>Событие проиÑходит, когда пользователь уводит курÑор мыши из облаÑти, находÑщейÑÑ Ð½Ð°Ð´ Ñлементом управлениÑ.</descr> + </element> + <element name="TRxLabel.OnStartDrag"/> + <element name="TRxLabel.OnContextPopup"/> + <element name="TRxLabel.OnEndDock"/> + <element name="TRxLabel.OnStartDock"/> + <element name="TSecretPanel"> + <short>Компонента TSecretPanel предназначена, как и компонента TPanel, Ð´Ð»Ñ Ð¿Ð¾Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² форму "панелей", на которых могут быть размещены другие Ñлементы управлениÑ.</short> + <descr> + <p>Компонента TSecretPanel предназначена, как и компонента TPanel, Ð´Ð»Ñ Ð¿Ð¾Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² форму "панелей", на которых могут быть размещены другие Ñлементы управлениÑ. </p> + <p>Ð’ дополнение к ÑвойÑтвам и методам компоненты TPanel, TSecretPanel имеет возможноÑть Ñ€Ð°Ð·Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ "Ñкрытого" текÑта и изображениÑ, доÑтупных Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ уÑтановленном в True значении ÑвойÑтва <link id="TSecretPanel.Active">Active</link>. СвойÑтво Lines<link id="TSecretPanel.Lines">Lines</link> задает ÑпиÑок Ñтрок текÑта, который будет "прокручиватьÑÑ" в направлении Ñнизу вверх или Ñправа налево (в завиÑимоÑти от Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтва <link id="TSecretPanel.ScrollDirection">ScrollDirection</link>) в клиентÑкой облаÑти компоненты TSecretPanel при уÑтановке <link id="TSecretPanel.Active">Active</link> = True. ЕÑли ÑвойÑтво <link id="TSecretPanel.Glyph">Glyph</link> аÑÑоциировано Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким изображением, то одновременно Ñто изображение будет показано в облаÑти TSecretPanel, заданной ÑвойÑтвом <link id="TSecretPanel.GlyphLayout">GlyphLayout</link>. По окончании прокрутки текÑта, еÑли ÑвойÑтво <link id="TSecretPanel.Cycled">Cycled</link> = False, ÑвойÑтво <link id="TSecretPanel.Active">Active</link> автоматичеÑки уÑтановитÑÑ Ð² значение False, еÑли же <link id="TSecretPanel.Cycled">Cycled</link> = True, прокрутка текÑта возобновитÑÑ Ñначала. Ð’Ñ‹ можете также прервать прокрутку, вручную уÑтановив ÑвойÑтво <link id="TSecretPanel.Active">Active</link> в значение False. </p> + <p>Событие <link id="TSecretPanel.OnPaintClient">OnPaintClient</link> позволÑет вам доÑтигать вÑевозможных Ñффектов при отриÑовке клиентÑкой облаÑти панели как в активном ÑоÑтоÑнии (при прокрутке текÑта), так и в неактивном. </p> + </descr> + </element> + <element name="TSecretPanel.Create"/> + <element name="TSecretPanel.Destroy"/> + <element name="TSecretPanel.Play"/> + <element name="TSecretPanel.Stop"/> + <element name="TSecretPanel.Canvas"/> + <element name="TSecretPanel.AsyncDrawing"> + <descr> + <p>СвойÑтво определÑет, как будет оÑущеÑтвлÑтьÑÑ Ð¿ÐµÑ€ÐµÑ€Ð¸Ñовка компоненты при "прокрутке" текÑта, Ñ‚.е. когда ÑвойÑтво Active = True. </p> + <p>ЕÑли AsyncDrawing = False, то перериÑовка ÑинхронизируетÑÑ Ñ Ð¾Ñновным потоком приложениÑ. ЕÑли AsyncDrawing = True (по умолчанию), то прокрутка текÑта и перериÑовка оÑущеÑтвлÑетÑÑ Ð°Ñинхронно, в отдельном потоке. </p> + </descr> + </element> + <element name="TSecretPanel.Active"> + <descr> + <p>СвойÑтво определÑет ÑоÑтоÑние компоненты TSecretPanel. При уÑтановке Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñтого ÑвойÑтва в True, вÑе компоненты, размещенные на TSecretPanel (у которых ÑвойÑтво Parent указывает на Ñтот объект), ÑкрываютÑÑ, отображаетÑÑ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ, заданное ÑвойÑтвом Glyph, и начинаетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑÐºÐ°Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ° текÑта, определенного ÑвойÑтвом Lines. +</p> + <p>ЕÑли ÑвойÑтво Cycled = False, то при прокрутке вÑего текÑта ÑвойÑтво Active автоматичеÑки уÑтанавливаетÑÑ Ð² значение False. Ð’Ñ‹ можете также прервать прокрутку ранее, приÑвоив ÑвойÑтву Active значение False. </p> + </descr> + </element> + <element name="TSecretPanel.Alignment"/> + <element name="TSecretPanel.Cycled"> + <descr> + <p>СвойÑтво Cycled определÑет поведение компоненты поÑле прокрутки вÑего текÑта, заданного ÑвойÑтвом Lines. ЕÑли Cycled = True, то прокрутка текÑта будет продолжена Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°, еÑли же Cycled = False (по умолчанию), то поÑле прокрутки вÑего текÑта ÑвойÑтво Active будет уÑтановлено в значение False. </p> + </descr> + </element> + <element name="TSecretPanel.Glyph"/> + <element name="TSecretPanel.GlyphLayout"/> + <element name="TSecretPanel.Interval"> + <descr>СвойÑтво определÑет временной интервал (в милиÑекундах), Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ проиÑходит Ñмена изображений в компоненте. +Ð”Ð»Ñ TSecretPanel ÑвойÑтво определÑет ÑкороÑть "прокрутки" текÑта при значении ÑвойÑтва Active = True.</descr> + </element> + <element name="TSecretPanel.Lines"> + <descr>СвойÑтво задает набор текÑтовых Ñтрок, которые не отображаютÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð¾Ð¹ TSecretPanel в нормальном ее ÑоÑтоÑнии, но могут быть "прокручены" (одновременно Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ битового изображениÑ, заданного ÑвойÑтвом Glyph) при уÑтановке в True Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтва Active.</descr> + </element> + <element name="TSecretPanel.ScrollDirection"> + <descr>СвойÑтво определÑет направление прокрутки Ñрок текÑта при значении Active=True. +Возможные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтва ScrollDirection: +• sdVertical - текÑÑ‚ прокручиваетÑÑ Ñнизу вверх. +• sdHorizontal - прокрутка текÑта оÑущеÑтвлÑетÑÑ Ð² направлении Ñправа налево.</descr> + </element> + <element name="TSecretPanel.TextStyle"> + <descr>СвойÑтво задает Ñтиль Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑта при его прокрутке в компоненте TSecretPanel. При значении Ñтого ÑвойÑтва, отличном от bvNone, текÑÑ‚ выглÑдит либо "продавленным" (bvLowered), либо "выпуклым" (bvRaised).</descr> + </element> + <element name="TSecretPanel.Anchors"/> + <element name="TSecretPanel.Constraints"/> + <element name="TSecretPanel.DragKind"/> + <element name="TSecretPanel.BiDiMode"/> + <element name="TSecretPanel.ParentBiDiMode"/> + <element name="TSecretPanel.Align"/> + <element name="TSecretPanel.BevelInner"/> + <element name="TSecretPanel.BevelOuter"/> + <element name="TSecretPanel.BevelWidth"/> + <element name="TSecretPanel.BorderWidth"/> + <element name="TSecretPanel.BorderStyle"/> + <element name="TSecretPanel.DragCursor"/> + <element name="TSecretPanel.DragMode"/> + <element name="TSecretPanel.Color"/> + <element name="TSecretPanel.Font"/> + <element name="TSecretPanel.ParentColor"/> + <element name="TSecretPanel.ParentFont"/> + <element name="TSecretPanel.ParentShowHint"/> + <element name="TSecretPanel.PopupMenu"/> + <element name="TSecretPanel.ShowHint"/> + <element name="TSecretPanel.TabOrder"/> + <element name="TSecretPanel.TabStop"/> + <element name="TSecretPanel.Visible"/> + <element name="TSecretPanel.OnPaintClient"> + <descr> + <p>Событие возникает при перериÑовке панели как в активном ÑоÑтоÑнии (Active=True) при прокрутке текÑта, так и в неактивном. +Ð’Ñ‹ можете иÑпользовать Ñто Ñобытие Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñевозможных Ñффектов при отриÑовке панели. </p> + <remark>Имейте в виду, что при наличии обработчика ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ OnPaintClient компонента TSecretPanel не отриÑовывает облаÑть, заданную параметром Rect, Ñледовательно, при напиÑании обработчика Ñтого ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð²Ñ‹ должны как минимум заполнить указанную облаÑть, например вызовом метода FillRect. </remark> + </descr> + </element> + <element name="TSecretPanel.OnStartPlay"/> + <element name="TSecretPanel.OnStopPlay"/> + <element name="TSecretPanel.OnClick"/> + <element name="TSecretPanel.OnDblClick"/> + <element name="TSecretPanel.OnDragDrop"/> + <element name="TSecretPanel.OnDragOver"/> + <element name="TSecretPanel.OnEndDrag"/> + <element name="TSecretPanel.OnEnter"/> + <element name="TSecretPanel.OnExit"/> + <element name="TSecretPanel.OnMouseDown"/> + <element name="TSecretPanel.OnMouseMove"/> + <element name="TSecretPanel.OnMouseUp"/> + <element name="TSecretPanel.OnStartDrag"/> + <element name="TSecretPanel.OnContextPopup"/> + <element name="TSecretPanel.OnEndDock"/> + <element name="TSecretPanel.OnStartDock"/> + <element name="TSecretPanel.OnResize"/> + <element name="TRxSpeedButton"> + <descr>Компонента аналогична Ñтандартной компоненте TSpeedButton, но имеет некоторые дополнительные возможноÑти. +Она может быть прозрачной (ÑвойÑтво Transparent) и "вÑплывающей" (ÑвойÑтво Flat), что позволÑет Ñоздавать кнопки, аналогичные иÑпользуемым в панели инÑтрументов Microsoft Internet Explorer 3.x. При уÑтановленном значении ÑвойÑтв GrayedInactive и Flat битовое изображение "неактивной" кнопки будет изменÑтьÑÑ Ð¿Ð¾ Ñравнению Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ вариантом. + +При уÑтановке ÑвойÑтва AllowTimer в значение True, кнопка будет генерировать повторÑющиеÑÑ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ OnClick при нажатии на кнопку до тех пор, пока кнопка находитÑÑ Ð² нажатом ÑоÑтоÑнии. Ð’Ñ‹ можете регулировать интервал между ÑобытиÑми OnClick Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑвойÑтв InitPause и RepeatInterval. +Кроме того, Ð’Ñ‹ можете задать выпадающее меню (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑвойÑтва DropDownMenu), которое будет поÑвлÑтьÑÑ Ð¿Ñ€Ð¸ нажатии на кнопку. + +ОÑтальные ÑвойÑтва и методы компоненты TRxSpeedButton те же, что и у TSpeedButton.</descr> + </element> + <element name="TRxSpeedButton.Create"/> + <element name="TRxSpeedButton.Destroy"/> + <element name="TRxSpeedButton.AllowTimer"> + <descr>Когда ÑвойÑтво AllowTimer уÑтановлено в значение True, кнопка будет генерировать повторÑющиеÑÑ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ OnClick при нажатии на кнопку до тех пор, пока кнопка находитÑÑ Ð² нажатом ÑоÑтоÑнии. Ð’Ñ‹ можете регулировать интервал между ÑобытиÑми OnClick Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑвойÑтв InitRepeatPause и RepeatPause.</descr> + </element> + <element name="TRxSpeedButton.InitPause"> + <descr>СвойÑтво позволÑет задать интервал (в миллиÑекундах) перед первым Ñобытием OnClick, вызывающемÑÑ Ð¿Ñ€Ð¸ нажатии кнопки, еÑли ÑвойÑтво AllowTimer уÑтановлено в значение True.</descr> + </element> + <element name="TRxSpeedButton.RepeatInterval"> + <descr>СвойÑтво позволÑет задать интервал (в миллиÑекундах) между повторÑющимиÑÑ Ð²Ñ‹Ð·Ð¾Ð²Ð°Ð¼Ð¸ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ OnClick, еÑли кнопка нажата и ÑвойÑтво AllowTimer = True.</descr> + </element> + <element name="TScrollDirection"> + <descr>Тип определÑет возможные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтва ScrollDirection компоненты <link id="TSecretPanel">TSecretPanel</link> + </descr> + </element> + <element name="TPanelDrawEvent"> + <descr>Тип определÑет метод - обработчик ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ OnPaintClient компоненты TSecretPanel.</descr> + </element> + <element name="TGlyphLayout"> + <descr>Тип TGlyphLayout задает возможные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтва GlyphLayout компоненты <link id="TSecretPanel">TSecretPanel</link>.</descr> + </element> + <element name="TShadowPosition"> + <descr>Тип TShadowPosition задает возможные допуÑтимые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑвойÑтва ShadowPos компоненты <link id="TRxLabel">TRxLabel</link>, задающего положение "тени" ÑтатичеÑкого Ñлемента управлениÑ.</descr> + </element> + </module> + <module name="curredit"> + <element name="TCurrencyEdit"> + <short>TCurrencyEdit Component</short> + <descr> + <p>Компонента Ñлужит Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° и Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‡Ð¸Ñел и денежных Ñумм. TCurrencyEdit имеет те же ÑвойÑтва, что и ее предок TEdit, но позволÑет дополнительно указать формат Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ‡Ð¸Ñла и Ñимволы Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð° валюты Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑвойÑтва <link id="TCurrencyEdit.DisplayFormat">DisplayFormat</link>, а также макÑимальное чиÑло Ñимволов поÑле деÑÑтичной точки (при вводе данных) Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑвойÑтва <link id="TCurrencyEdit.DecimalPlaces">DecimalPlaces</link>. СвойÑтво Value позволÑет получить или уÑтановить чиÑленную величину отображаемого в компоненте значениÑ.</p> + <p>ЕÑли ÑвойÑтво BeepOnError уÑтановлено в True, то при вводе в Ñтроку недопуÑтимых Ñимволов раздаетÑÑ Ð·Ð²ÑƒÐºÐ¾Ð²Ð¾Ð¹ Ñигнал.</p> + </descr> + </element> + <element name="TCurrencyEdit.Create"/> + <element name="TCurrencyEdit.Destroy"/> + <element name="TCurrencyEdit.Clear"/> + <element name="TCurrencyEdit.AsInteger"> + <descr> + <p>СвойÑтво позволÑет обратитьÑÑ Ðº значению <link id="TCurrencyEdit.Value">Value</link>, Ñохраненному в компоненте - редакторе Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° чиÑел, как к целому чиÑлу. </p> + </descr> + </element> + <element name="TCurrencyEdit.DisplayText"> + <descr>СвойÑтво Ñлужит Ð´Ð»Ñ Ð´Ð¾Ñтупа на чтение к форматированному в ÑоответÑтвии Ñо значением <link id="TCurrencyEdit.DisplayFormat">DisplayFormat</link> предÑтавлению Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ <link id="TCurrencyEdit.Value">Value</link>Value (Ñовпадает Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÐ¼Ð¾Ð¹ Ñтрокой в компоненте, когда Ñлемент Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ имеет фокуÑа ввода). Ð’ отличие от Ñтого ÑвойÑтва, ÑвойÑтво Text вÑегда возвращает неформатированную Ñтроку.</descr> + </element> + <element name="TCurrencyEdit.Value"> + <descr>СвойÑтво позволÑет уÑтановить (или получить) чиÑленную величину значениÑ, отображаемого в Ñтроке ввода. Ð’ Ñлучае пуÑтой Ñтроки возвращаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ 0.</descr> + </element> + <element name="TCurrencyEdit.Alignment"/> + <element name="TCurrencyEdit.AutoSelect"> + <descr>ОпределÑет факт автоматичеÑкого Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ñего текÑта при попадании фокуÑа клавиатурного ввода в компонент</descr> + </element> + <element name="TCurrencyEdit.AutoSize"> + <descr>СвойÑтво определÑет, будет ли размер автоматичеÑки изменÑтьÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ шрифта</descr> + </element> + <element name="TCurrencyEdit.BeepOnError"> + <descr>ЕÑли значение Ñтого ÑвойÑтва уÑтановлено в True (по умолчанию False), то при ошибках ввода Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹ (недопуÑтимых Ñимволов и Ñ‚.д.) раздаетÑÑ Ð·Ð²ÑƒÐºÐ¾Ð²Ð¾Ð¹ Ñигнал.</descr> + </element> + <element name="TCurrencyEdit.BorderStyle"/> + <element name="TCurrencyEdit.BorderSpacing"/> + <element name="TCurrencyEdit.CheckOnExit"> + <descr> + <p>СвойÑтво определÑет, будет ли проверÑтьÑÑ Ð´Ð¾Ð¿ÑƒÑтимый диапазон чиÑла в компонентах TCurrencyEdit при потере фокуÑа Ñтрокой редактированиÑ. </p> + <p>ЕÑли CheckOnExit = True, то в Ñлучае ввода недопуÑтимого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ñходит иÑключение (exception). </p> + </descr> + </element> + <element name="TCurrencyEdit.Color"/> + <element name="TCurrencyEdit.DecimalPlaces"> + <descr>СвойÑтво определÑет макÑимально допуÑтимое чиÑло деÑÑтичных знаков при вводе и изменении данных в Ñтроке Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ñ‹ TCurrencyEdit. ИÑпользуетÑÑ, когда Ñтрока имеет Ñ„Ð¾ÐºÑƒÑ Ð²Ð²Ð¾Ð´Ð°. При отображении Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² неÑфокуÑированной Ñтроке Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑтво не иÑпользуетÑÑ - применÑетÑÑ Ð¼Ð°Ñка, Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ ÑвойÑтвом <link id="TCurrencyEdit.DisplayFormat">DisplayFormat.</link> + </descr> + </element> + <element name="TCurrencyEdit.DisplayFormat"> + <descr>СвойÑтво задает формат Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в компоненте TCurrencyEdit. При получении компонентой фокуÑа ввода форматирование данных отменÑетÑÑ Ð¸ ввод проиÑходит как в обычную Ñтроку ввода TEdit. При потере фокуÑа ввода данные форматируютÑÑ ÑоглаÑно заданному формату.</descr> + </element> + <element name="TCurrencyEdit.DragCursor"/> + <element name="TCurrencyEdit.DragMode"/> + <element name="TCurrencyEdit.Enabled"/> + <element name="TCurrencyEdit.Font"/> + <element name="TCurrencyEdit.FormatOnEditing"> + <descr>СвойÑтво определÑет, будет ли автоматичеÑки форматироватьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ в Ñтроке редактора непоÑредÑтвенно при редактировании. +Формат ввода определÑетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¼Ð¸ DecimalSeparator и ThousandSeparator из Ð¼Ð¾Ð´ÑƒÐ»Ñ SysUtils.pas и ÑвойÑтвом <link id="TCurrencyEdit.DecimalPlaces">DecimalPlaces</link> + </descr> + </element> + <element name="TCurrencyEdit.HideSelection"/> + <element name="TCurrencyEdit.Anchors"/> + <element name="TCurrencyEdit.BiDiMode"/> + <element name="TCurrencyEdit.Constraints"/> + <element name="TCurrencyEdit.DragKind"/> + <element name="TCurrencyEdit.MaxLength"/> + <element name="TCurrencyEdit.MaxValue"> + <descr>МакÑимально допуÑтимое значение ÑвойÑтва <link id="TCurrencyEdit.Value">Value</link>. Значение MaxValue ограничивает макÑимальную величину чиÑла, которое можно ввеÑти в Ñтроку ввода.</descr> + </element> + <element name="TCurrencyEdit.MinValue"> + <descr>Минимально допуÑтимое значение ÑвойÑтва <link id="TCurrencyEdit.Value">Value</link>. Значение MinValue ограничивает минимальную величину чиÑла, которое можно ввеÑти в Ñтроку ввода.</descr> + </element> + <element name="TCurrencyEdit.ParentColor"/> + <element name="TCurrencyEdit.ParentFont"/> + <element name="TCurrencyEdit.ParentShowHint"/> + <element name="TCurrencyEdit.PopupMenu"/> + <element name="TCurrencyEdit.ReadOnly"/> + <element name="TCurrencyEdit.ShowHint"/> + <element name="TCurrencyEdit.TabOrder"/> + <element name="TCurrencyEdit.TabStop"/> + <element name="TCurrencyEdit.Text"/> + <element name="TCurrencyEdit.Value"/> + <element name="TCurrencyEdit.Visible"/> + <element name="TCurrencyEdit.ZeroEmpty"> + <descr>ЕÑли значение Ñтого ÑвойÑтва равно True, то когда редактор имеет Ñ„Ð¾ÐºÑƒÑ Ð²Ð²Ð¾Ð´Ð° и значение <link id="TCurrencyEdit.Value">Value</link>Value = 0, в нем Ñ ÐºÐ°Ñ‡ÐµÑтве текÑта отображаетÑÑ Ð¿ÑƒÑÑ‚Ð°Ñ Ñтрока. ЕÑли ZeroEmpty = False, то в Ñтом Ñлучае текÑÑ‚ '0'.</descr> + </element> + <element name="TCurrencyEdit.OnChange"/> + <element name="TCurrencyEdit.OnClick"/> + <element name="TCurrencyEdit.OnDblClick"/> + <element name="TCurrencyEdit.OnDragDrop"/> + <element name="TCurrencyEdit.OnDragOver"/> + <element name="TCurrencyEdit.OnEndDrag"/> + <element name="TCurrencyEdit.OnEnter"/> + <element name="TCurrencyEdit.OnExit"/> + <element name="TCurrencyEdit.OnKeyDown"/> + <element name="TCurrencyEdit.OnKeyPress"/> + <element name="TCurrencyEdit.OnKeyUp"/> + <element name="TCurrencyEdit.OnMouseDown"/> + <element name="TCurrencyEdit.OnMouseMove"/> + <element name="TCurrencyEdit.OnMouseUp"/> + <element name="TCurrencyEdit.OnContextPopup"/> + <element name="TCurrencyEdit.OnStartDrag"/> + <element name="TCurrencyEdit.OnEndDock"/> + <element name="TCurrencyEdit.OnStartDock"/> + <short>CurrEdit Unit</short> + <descr> + <p>The <b>CurrEdit unit</b> contains the declarations for the certain components on the <b>RX Controls</b> page of the Component palette and their associated objects, types, and constants. +When you add a component declared in this unit to a form, the unit is automatically added to the uses clause of that form's unit.</p> + <p>The following items are declared in the CurrEdit unit:</p> + <p> + <b>Components and objects</b> + </p> + <p> + <link id="TCurrencyEdit">TCurrencyEdit</link> + </p> + <p>To see a listing of items declared in this unit including their declarations, use the ObjectBrower.</p> + </descr> + </module> + <module name="rxlookup"> + <element name="TRxLookupEdit"> + <short>TRxLookupEdit Component</short> + <descr> + <p>Компонента TRxLookupEdit предÑтавлÑет Ñобой редактор Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñтью как прÑмого ввода текÑта пользователем в Ñтроке редактированиÑ, так и выбора текÑта из выпадающего ÑпиÑка, заполнÑемого значениÑми из базы данных. При открытом ÑпиÑке набор пользователем Ñимволов Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹ приводит к позиционированию ÑпиÑка на ближайшую запиÑÑŒ, Ñовпадающую Ñ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ‹Ð¼ текÑтом. </p> + <p>Ð”Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð¿Ð°Ð´Ð°ÑŽÑ‰ÐµÐ³Ð¾ ÑпиÑка иÑпользуютÑÑ ÑвойÑтва LookupSource, LookupField, LookupDisplay и LookupDisplayIndex, аналогично ÑпиÑку компоненты TRxDBLookupCombo. </p> + <p>Введенное пользователем или выбранное из ÑпиÑка значение доÑтупно через ÑвойÑтво Text. +СвойÑтво LookupValue (read-only) позволÑет получить значение ключевого Ð¿Ð¾Ð»Ñ Ð¸Ð· lookup-набора данных (заданного ÑвойÑтвом LookupField), еÑли пользвателем был Ñделан выбор из ÑпиÑка.</p> + </descr> + </element> + <element name="TRxLookupEdit.Create"/> + <element name="TRxLookupEdit.Destroy"/> + <element name="TRxLookupEdit.DropDownCount"/> + <element name="TRxLookupEdit.DropDownWidth"/> + <element name="TRxLookupEdit.LookupDisplay"/> + <element name="TRxLookupEdit.LookupDisplayIndex"> + <descr>Ð’ Ñлучае, еÑли ÑвойÑтво <link id="TRxLookupEdit.LookupDisplay">LookupDisplay</link> задает более одного Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑпиÑке, значение ÑвойÑтва LookupDisplayIndex определÑет номер полÑ, значение которого возвращаетÑÑ ÑвойÑтвом DisplayValue.</descr> + </element> + <element name="TRxLookupEdit.LookupField"/> + <element name="TRxLookupEdit.LookupSource"/> + <element name="TRxLookupEdit.PopUpFormOptions"/> + <element name="TRxDBLookupCombo"> + <short>TRxDBLookupCombo Component</short> + <descr>Unit +RxLookup +Description +Компонента TRxDBLookupCombo почти полноÑтью аналогична Ñтандартной компоненте из VCL TDBLookupCombo и имеет те же Ñамые ÑвойÑтва, методы и ÑобытиÑ. Однако по Ñравнению Ñ TDBLookupCombo у Ñтой компоненты еÑть некоторые дополнительные возможноÑти и ÑвойÑтва. +TRxDBLookupCombo позволÑет иÑпользовать в качеÑтве LookupSource любой иÑточник данных - как TTable, так и TQuery, при Ñтом ÑвойÑтво LookupField не обÑзательно должно быть индекÑированным полем. +Компонента TRxDBLookupCombo также позволÑет производить поиÑк нужного термина при наборе первых букв Ñтого термина. +Ðапример, у Ð²Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° или результат запроÑа, Ñедержащий Ð¿Ð¾Ð»Ñ CustNo и CustName. Тогда вы можете указать поле CustName как значение ÑвойÑтва LookupDisplay. ЕÑли пользователь вашего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð±ÐµÑ€ÐµÑ‚ первые буквы нужной ему фамилии (находÑщейÑÑ Ð² поле CustName), то еÑли компонента TRxDBLookupCombo имеет Ñ„Ð¾ÐºÑƒÑ Ð²Ð²Ð¾Ð´Ð°, автоматичеÑки выпадет ÑпиÑок доÑтупных значений и выделенный Ñлемент в ÑпиÑке уÑтановитÑÑ Ð² значение, первые буквы которого Ñовпадают Ñ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ‹Ð¼Ð¸ пользователем. +ЕÑли ÑвойÑтво IgnoreCase уÑтановлено в True, то при наборе пользователем первых букв термина региÑтр Ñимволов не учитываетÑÑ. Ðадо иметь в виду, что при работе Ñ Ñ€ÑƒÑÑкоÑзычными значениÑми в полÑÑ… БД не вÑе драйвера поддерживают преобразование региÑтра Ñимволов. +СвойÑтво IndexSwitch определÑет, будет ли при необходимоÑти производитьÑÑ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ индекÑов таблицы (еÑли иÑточником данных Ñлужит таблица, а не результат запроÑа). Ð’ Ñлучае иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñ… SQL-таблиц переключение индекÑов может занÑть длительное времÑ, поÑтому в таких ÑлучаÑÑ… ÑвойÑтво желательно уÑтанавливать в значение False. +СвойтÑво DisplayEmpty позволÑет задать текÑтовую Ñтроку Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² Ñтроке TRxDBLookupCombo, когда не Ñделано никакого выбора. Вызов метода ResetField приводит к очиÑтке Ñодержимого компоненты, уÑтоновке Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Value в пуÑтую Ñтроку, и отображению Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ DisplayEmpty. +Ð’ дополнение к Ñобытию OnDropDown, имеющемуÑÑ Ñƒ TDBLookupCombo, компонента имеет Ñобытие OnCloseUp, вызываемое при закрытии выпадающего ÑпиÑка. Метод IsDropDown позволÑет определить текущее ÑоÑтоÑние выпадающего ÑпиÑка выбора. Событие OnChange проиÑходит при Ñмене Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ cвойÑтва Value. +Компонента также позволÑет задать Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² левой чаÑти каждой Ñтроки ÑпиÑка, в завиÑимоÑти от Ñодержимого полей БД, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ OnGetImage. +Ð’ оÑтальном компонента TRxDBLookupCombo полноÑтью аналогична компоненте TDBLookupCombo. + +Ð’ÐИМÐÐИЕ +При приÑвоении значений ÑвойÑтву Value или DisplayValue компонент TRxDBLookupCombo или TRxDBLookupList безошибочное позиционирование на ÑоответÑтвующую запиÑÑŒ в ÑпиÑке произойдет только в том Ñлучае, еÑли ÑоответÑтвующее поле в подмножеÑтве запиÑей, заданном иÑточником данных DataSource, имеет только уникальные неповторÑющиеÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ. Ð’ противном Ñлучае Ð’Ñ‹ получите неÑколько "выбранных" Ñлементов в ÑпиÑке (причем реально будет выбран только один Ñамый первый), Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹ в которых равны заданному. Избегайте таких Ñитуаций! + +При работе Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ SQL-Ñерверами БД уÑтановка ÑвойÑтв IndexSwitch или IgnoreCase в значение True может приводить к неожиданному поведению компоненты. Ð’ Ñтом Ñлучае поÑтарайтеÑÑŒ добитьÑÑ "правильного" Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð° Ñчет ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð·Ð½Ñ‹Ñ… значений ÑвойÑтв IgnoreCase и IndexSwitch.</descr> + </element> + <element name="TRxDBLookupCombo.PopupVisible"/> + <element name="TRxDBLookupCombo.Value"/> + <element name="TRxDBLookupCombo.KeyValue"/> + <element name="TRxDBLookupCombo.AutoSize"/> + <element name="TRxDBLookupCombo.Align"/> + <element name="TRxDBLookupCombo.Anchors"/> + <element name="TRxDBLookupCombo.BorderSpacing"/> + <element name="TRxDBLookupCombo.ButtonOnlyWhenFocused"/> + <element name="TRxDBLookupCombo.ButtonWidth"/> + <element name="TRxDBLookupCombo.Color"/> + <element name="TRxDBLookupCombo.DataField"/> + <element name="TRxDBLookupCombo.DataSource"/> + <element name="TRxDBLookupCombo.DirectInput"/> + <element name="TRxDBLookupCombo.DragCursor"/> + <element name="TRxDBLookupCombo.DragMode"/> + <element name="TRxDBLookupCombo.Enabled"/> + <element name="TRxDBLookupCombo.PopUpFormOptions"/> + <element name="TRxDBLookupCombo.Flat"/> + <element name="TRxDBLookupCombo.Font"/> + <element name="TRxDBLookupCombo.Glyph"/> + <element name="TRxDBLookupCombo.EmptyValue"> + <short>property EmptyValue: string;</short> + <descr>СвойÑтво задает значение, приÑвоение которого ÑвойÑтву Value будет воÑприниматьÑÑ ÐºÐ°Ðº приÑвоение "пуÑтого" Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸ приведет к очиÑтке DataField. По умолчанию значение ÑвойÑтва еÑть пуÑÑ‚Ð°Ñ Ñтрока.</descr> + </element> + <element name="TRxDBLookupCombo.EmptyItemColor"> + <short>property EmptyItemColor: TColor;</short> + <descr>СвойÑтво задает значение цвета, которым будет риÑоватьÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ неÑкролируемый Ñлемент ÑпиÑка Ð´Ð»Ñ "пуÑтого" Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ (Ñ‚.е. которое Ñовпадает Ñ DisplayEmpty).</descr> + </element> + <element name="TRxDBLookupCombo.NumGlyphs"/> + <element name="TRxDBLookupCombo.OnButtonClick"/> + <element name="TRxDBLookupCombo.OnChange"/> + <element name="TRxDBLookupCombo.OnClick"/> + <element name="TRxDBLookupCombo.OnDblClick"/> + <element name="TRxDBLookupCombo.OnDragDrop"/> + <element name="TRxDBLookupCombo.OnDragOver"/> + <element name="TRxDBLookupCombo.OnEndDrag"/> + <element name="TRxDBLookupCombo.OnEnter"/> + <element name="TRxDBLookupCombo.OnExit"/> + <element name="TRxDBLookupCombo.OnKeyDown"/> + <element name="TRxDBLookupCombo.OnKeyPress"/> + <element name="TRxDBLookupCombo.OnKeyUp"/> + <element name="TRxDBLookupCombo.OnMouseDown"/> + <element name="TRxDBLookupCombo.OnMouseMove"/> + <element name="TRxDBLookupCombo.OnMouseUp"/> + <element name="TRxDBLookupCombo.OnStartDrag"/> + <element name="TRxDBLookupCombo.OnGetGridCellProps"/> + <element name="TRxDBLookupCombo.OnSelect"/> + <element name="TRxDBLookupCombo.ParentColor"/> + <element name="TRxDBLookupCombo.ParentFont"/> + <element name="TRxDBLookupCombo.ParentShowHint"/> + <element name="TRxDBLookupCombo.PopupMenu"/> + <element name="TRxDBLookupCombo.ReadOnly"/> + <element name="TRxDBLookupCombo.ShowHint"/> + <element name="TRxDBLookupCombo.TabOrder"/> + <element name="TRxDBLookupCombo.TabStop"/> + <element name="TRxDBLookupCombo.Visible"/> + <element name="TRxDBLookupCombo.DisplayAllFields"/> + <element name="TRxDBLookupCombo.DropDownCount"/> + <element name="TRxDBLookupCombo.DropDownWidth"/> + <element name="TRxDBLookupCombo.LookupDisplay"/> + <element name="TRxDBLookupCombo.LookupDisplayIndex"/> + <element name="TRxDBLookupCombo.LookupField"/> + <element name="TRxDBLookupCombo.LookupSource"/> + <element name="TRxDBLookupCombo.UnfindedValue"/> + <descr> + <p>The RxLookup unit contains the declarations for the certain components on the RX DBAware page of the Component palette and their associated objects, types, and constants. +When you add a component declared in this unit to a form, the unit is automatically added to the uses clause of that form's unit.</p> + </descr> + <element name="TRxLookupEdit.OnClosePopup"> + <descr>Событие возникает при закрытии PopUp окна выбора данных.</descr> + </element> + <element name="TRxDBLookupCombo.OnClosePopup"> + <descr>Событие возникает при закрытии PopUp окна выбора данных.</descr> + </element> + </module> + <module name="dbdateedit"> + <element name="TDBDateEdit"> + <descr>Компонента TDBDateEdit - Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð½Ð° работу Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ данных компонента Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ñ‚Ñ‹. УÑтановленное значение ÑвойÑтва Date ÑтановитÑÑ Ð½Ð¾Ð²Ñ‹Ð¼ значением Ð¿Ð¾Ð»Ñ Ð² БД, еÑли значение ÑвойÑтва ReadOnly компоненты TDBDateEdit - False. +TDBDateEdit ÑвлÑетÑÑ Ð½Ð°Ñледником TDateEdit и имеет вÑе те же ÑвойÑтва и методы, и дополнительно имеет ÑвойÑтва, необходимые Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð¿Ð¾Ð»Ñми базы данных. + +Компонента TDBDateEdit может быть применена к тем полÑм наборов данных, которые позволÑÑŽÑ‚ чтение и приÑвоение значений через ÑвойÑтво AsDateTime.</descr> + </element> + <element name="TDBDateEdit.Create"/> + <element name="TDBDateEdit.Destroy"/> + <element name="TDBDateEdit.DataField"/> + <element name="TDBDateEdit.DataSource"/> + <element name="TDBDateEdit.ReadOnly"/> + <element name="TDBDateEdit.DefaultToday"> + <descr>СвойÑтво DialogTitle задает заголовок диалогового окна, поÑвлÑющегоÑÑ Ð¿Ñ€Ð¸ нажатии на кнопку компоненты TFilenameEdit (TOpenDialog) или TDateEdit, TDBDateEdit (диалог выбора даты).</descr> + </element> + <element name="TRxDBCalcEdit"> + <descr>Компонента TRxDBCalcEdit - Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð½Ð° работу Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ данных компонента Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‡Ð¸Ñел Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñтью Ð¸Ð¼Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ‹Ð¿Ð°Ð´Ð°ÑŽÑ‰ÐµÐ³Ð¾ калькулÑтора. УÑтановленное значение ÑвойÑтва Value ÑтановитÑÑ Ð½Ð¾Ð²Ñ‹Ð¼ значением Ð¿Ð¾Ð»Ñ Ð² БД, еÑли значение ÑвойÑтва ReadOnly - False. +TRxDBCalcEdit ÑвлÑетÑÑ Ð½Ð°Ñледником TDBCalcEdit и имеет вÑе те же ÑвойÑтва и методы, и дополнительно имеет ÑвойÑтва, необходимые Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð¿Ð¾Ð»Ñми базы данных. +Компонента TRxDBCalcEdit может быть применена к тем полÑм данных, которые позволÑÑŽÑ‚ чтение и приÑвоение значений через ÑвойÑтва AsFloat, AsInteger.</descr> + </element> + <element name="TRxDBCalcEdit.Create"/> + <element name="TRxDBCalcEdit.Destroy"/> + <element name="TRxDBCalcEdit.DataField"/> + <element name="TRxDBCalcEdit.DataSource"/> + <element name="TRxDBCalcEdit.ReadOnly"/> + </module> + <module name="folderlister"> + <element name="TFolderLister"> + <short>КлаÑÑ Ð¿Ð¾ управлению ÑпиÑком файлов</short> + <descr>Даный клаÑÑ Ð¿Ñ€ÐµÐ´Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½ Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÑпиÑка файлов из указанного каталога и Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ Ñтому ÑпиÑку меню. +Папка, Ð´Ð»Ñ ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÑетÑÑ ÑвойÑтвом FileFolder +Пункт меню, куда в качеÑтве подменю будут добавлен ÑпиÑок файлов - MenuItem</descr> + </element> + <element name="TFolderLister.Execute"> + <short>Метод запуÑкает процеÑÑ ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¿ÐºÐ¸ Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸</short> + </element> + <element name="TFolderLister.Create"/> + <element name="TFolderLister.Destroy"/> + <element name="TFolderLister.Files"> + <short>СвойÑтво Ñодержит в Ñебе имена вÑех фалов, которые были обнаружены в указанной папке</short> + <descr> + <p>СвойÑтво - маÑÑив, Ñодержит в Ñебе ÑпиÑок вÑех файлов и каталогов, которые были обнаружены в указанной папке.</p> +Кол-во Ñлементов данного маÑÑива находитÑÑ Ð² ÑвойÑтве + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <b>Count</b> + </descr> + <seealso> + <link id="TFolderLister.FileFolder"/> + <link id="TFolderLister.Count"/> + </seealso> + </element> + <element name="TFolderLister.Count"> + <short>КоличеÑтво прочитанных файлов/каталогов</short> + <descr> + <p>СвойÑтво Ñодержит в Ñебе кол-во прочитанных файлов</p> + </descr> + <seealso> + <link id="TFolderLister.Files"/> + </seealso> + </element> + <element name="TFolderLister.DefaultExt"/> + <element name="TFolderLister.FileFolder"> + <short>СвойÑтво FileFolder</short> + <descr> + <b>property FileFolder:string</b> + <p>СвойÑтво FileFolder определÑет каталог Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, который будет ÑканироватьÑÑ Ð¿Ñ€Ð¸ вызове метода <link id="TFolderLister.Execute">Execute</link> и по Ñодержимому которого будет произведено заполнение маÑÑива Files</p> + </descr> + <seealso> + <link id="TFolderLister.Execute"/> + </seealso> + </element> + <element name="TFolderLister.OnExecuteItem"> + <short>СвойÑтво OnExecuteItem</short> + <descr> + <b>property OnExecuteItem:TNotifyEvent</b> + <p>СвойÑтво OnExecuteItem вызываетÑÑ Ð¿Ñ€Ð¸ выборе пункта меню, которые было Ñформировано по Ñлементам маÑÑива <link id="TFolderLister.Files">Files</link> + </p> + </descr> + </element> + <element name="TFolderLister.MenuItem"> + <short>СвойÑтво MenuItem</short> + <descr> + <b>property MenuItem:TMenuItem;</b> + <p>Данное ÑвойÑтво определÑет меÑто в меню, где будет добавлено в виде подменю Ñодержимое каталога <link id="TFolderLister.FileFolder">FileFolder</link> + </p> + </descr> + <seealso> + <link id="TFolderLister.Execute"/> + </seealso> + </element> + </module> + <module name="rxmemds"> + <element name="TRxMemoryData"/> + <element name="TRxMemoryData.Create"/> + <element name="TRxMemoryData.Destroy"/> + <element name="TRxMemoryData.BookmarkValid"/> + <element name="TRxMemoryData.CompareBookmarks"/> + <element name="TRxMemoryData.CreateBlobStream"/> + <element name="TRxMemoryData.GetFieldData"/> + <element name="TRxMemoryData.GetCurrentRecord"/> + <element name="TRxMemoryData.IsSequenced"/> + <element name="TRxMemoryData.Locate"/> + <element name="TRxMemoryData.SortOnFields"/> + <element name="TRxMemoryData.EmptyTable"/> + <element name="TRxMemoryData.CloseOpen"/> + <element name="TRxMemoryData.CopyStructure"/> + <element name="TRxMemoryData.LoadFromDataSet"/> + <element name="TRxMemoryData.SaveToDataSet"/> + <element name="TRxMemoryData.AppendRecord"/> + <element name="TRxMemoryData.Capacity"/> + <element name="TRxMemoryData.Active"/> + <element name="TRxMemoryData.AutoCalcFields"/> + <element name="TRxMemoryData.Filtered"/> + <element name="TRxMemoryData.FieldDefs"/> + <element name="TRxMemoryData.BeforeOpen"/> + <element name="TRxMemoryData.AfterOpen"/> + <element name="TRxMemoryData.BeforeClose"/> + <element name="TRxMemoryData.AfterClose"/> + <element name="TRxMemoryData.BeforeInsert"/> + <element name="TRxMemoryData.AfterInsert"/> + <element name="TRxMemoryData.BeforeEdit"/> + <element name="TRxMemoryData.AfterEdit"/> + <element name="TRxMemoryData.BeforePost"/> + <element name="TRxMemoryData.AfterPost"/> + <element name="TRxMemoryData.BeforeCancel"/> + <element name="TRxMemoryData.AfterCancel"/> + <element name="TRxMemoryData.BeforeDelete"/> + <element name="TRxMemoryData.AfterDelete"/> + <element name="TRxMemoryData.BeforeScroll"/> + <element name="TRxMemoryData.AfterScroll"/> + <element name="TRxMemoryData.OnCalcFields"/> + <element name="TRxMemoryData.OnDeleteError"/> + <element name="TRxMemoryData.OnEditError"/> + <element name="TRxMemoryData.OnFilterRecord"/> + <element name="TRxMemoryData.OnFilterRecordEx"/> + <element name="TRxMemoryData.OnNewRecord"/> + <element name="TRxMemoryData.OnPostError"/> + <element name="TMemBlobStream"/> + <element name="TMemBlobStream.Create"/> + <element name="TMemBlobStream.Destroy"/> + <element name="TMemBlobStream.Read"/> + <element name="TMemBlobStream.Write"/> + <element name="TMemBlobStream.Seek"/> + <element name="TMemBlobStream.Truncate"/> + <element name="TMemoryRecord"/> + <element name="TMemoryRecord.Create"/> + <element name="TMemoryRecord.CreateEx"/> + <element name="TMemoryRecord.Destroy"/> + <element name="TMemoryRecord.MemoryData"/> + <element name="TMemoryRecord.ID"/> + <element name="TMemoryRecord.Index"/> + <element name="TMemoryRecord.Data"/> + </module> + <module name="tooledit"> + <element name="TRxDateEdit"/> + <element name="TRxDateEdit.Create"/> + <element name="TRxDateEdit.Destroy"/> + <element name="TRxDateEdit.CheckValidDate"/> + <element name="TRxDateEdit.GetDateMask"/> + <element name="TRxDateEdit.UpdateMask"/> + <element name="TRxDateEdit.Date"/> + <element name="TRxDateEdit.Formatting"/> + <element name="TRxDateEdit.ValidDate"/> + <element name="TRxDateEdit.PopupVisible"/> + <element name="TRxDateEdit.Action"/> + <element name="TRxDateEdit.Align"/> + <element name="TRxDateEdit.Anchors"/> + <element name="TRxDateEdit.AutoSelect"/> + <element name="TRxDateEdit.AutoSize"/> + <element name="TRxDateEdit.BlanksChar"/> + <element name="TRxDateEdit.BorderSpacing"/> + <element name="TRxDateEdit.ButtonOnlyWhenFocused"/> + <element name="TRxDateEdit.ButtonWidth"/> + <element name="TRxDateEdit.CalendarStyle"/> + <element name="TRxDateEdit.CancelCaption"/> + <element name="TRxDateEdit.CharCase"/> + <element name="TRxDateEdit.Color"/> + <element name="TRxDateEdit.Constraints"/> + <element name="TRxDateEdit.DefaultToday"/> + <element name="TRxDateEdit.DialogTitle"/> + <element name="TRxDateEdit.DirectInput"/> + <element name="TRxDateEdit.DragMode"/> + <element name="TRxDateEdit.EchoMode"/> + <element name="TRxDateEdit.Enabled"/> + <element name="TRxDateEdit.Font"/> + <element name="TRxDateEdit.Glyph"/> + <element name="TRxDateEdit.MaxLength"/> + <element name="TRxDateEdit.NotInThisMonthColor"/> + <element name="TRxDateEdit.NumGlyphs"/> + <element name="TRxDateEdit.OKCaption"/> + <element name="TRxDateEdit.ParentFont"/> + <element name="TRxDateEdit.ParentShowHint"/> + <element name="TRxDateEdit.PasswordChar"/> + <element name="TRxDateEdit.PopupAlign"/> + <element name="TRxDateEdit.PopupColor"/> + <element name="TRxDateEdit.PopupMenu"/> + <element name="TRxDateEdit.ReadOnly"/> + <element name="TRxDateEdit.ShowHint"/> + <element name="TRxDateEdit.StartOfWeek"/> + <element name="TRxDateEdit.TabOrder"/> + <element name="TRxDateEdit.TabStop"/> + <element name="TRxDateEdit.Text"/> + <element name="TRxDateEdit.Visible"/> + <element name="TRxDateEdit.WeekendColor"/> + <element name="TRxDateEdit.Weekends"/> + <element name="TRxDateEdit.YearDigits"/> + <element name="TRxDateEdit.OnAcceptDate"/> + <element name="TRxDateEdit.OnChange"/> + <element name="TRxDateEdit.OnChangeBounds"/> + <element name="TRxDateEdit.OnClick"/> + <element name="TRxDateEdit.OnEditingDone"/> + <element name="TRxDateEdit.OnEnter"/> + <element name="TRxDateEdit.OnExit"/> + <element name="TRxDateEdit.OnKeyDown"/> + <element name="TRxDateEdit.OnKeyPress"/> + <element name="TRxDateEdit.OnKeyUp"/> + <element name="TRxDateEdit.OnMouseDown"/> + <element name="TRxDateEdit.OnMouseMove"/> + <element name="TRxDateEdit.OnMouseUp"/> + <element name="TRxDateEdit.OnResize"/> + </module> + <module name="duallist"> + <element name="TDualListDialog"> + <short>TDualListDialog Component</short> + <descr>Unit +DualList +Description +Компонента делает доÑтупным вашему приложению диалог Ñ Ð´Ð²ÑƒÐ¼Ñ ÑпиÑками, где Ñлементы можно перемещать из одного ÑпиÑка в другой, а также менÑть порÑдок ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ñлементов внутри ÑпиÑка. +По Ñравнению Ñ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÐµÐ½Ð½Ð¾Ð¹ формой из Delphi Gallery, кроме Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Ð² виде компоненты, добавлены возможноÑть Drag Drop, Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ€Ñдка внутри ÑпиÑка, интерфейÑные улучшениÑ. +Задайте иÑходное ÑоÑтоÑние ÑпиÑков в ÑвойÑтвах List1 и List2, вызовите диалог функцией Execute и Ñчитайте новый ÑоÑтав ÑпиÑков.</descr> + </element> + <element name="TDualListDialog.Create"/> + <element name="TDualListDialog.Destroy"/> + <element name="TDualListDialog.Execute"> + <short>function Execute: Boolean;</short> + <descr>Вызов диалога Ñ Ð´Ð²ÑƒÐ¼Ñ ÑпиÑками, где можно поменÑть Ñлементы меÑтами внутри ÑпиÑка или перенеÑти Ñлементы из одного ÑпиÑка в другой.</descr> + </element> + <element name="TDualListDialog.Ctl3D"/> + <element name="TDualListDialog.Sorted"/> + <element name="TDualListDialog.Title"/> + <element name="TDualListDialog.Label1Caption"/> + <element name="TDualListDialog.Label2Caption"/> + <element name="TDualListDialog.OkBtnCaption"/> + <element name="TDualListDialog.CancelBtnCaption"/> + <element name="TDualListDialog.HelpBtnCaption"/> + <element name="TDualListDialog.HelpContext"/> + <element name="TDualListDialog.List1"> + <short>property List1: TStrings;</short> + <descr>СпиÑок Ñлева.</descr> + </element> + <element name="TDualListDialog.List2"> + <short>property List2: TStrings;</short> + <descr>СпиÑок Ñправа.</descr> + </element> + <element name="TDualListDialog.ShowHelp"/> + </module> + <module name="rxswitch"> + <element name="TRxSwitch"/> + <element name="TRxSwitch.Create"/> + <element name="TRxSwitch.Destroy"/> + <element name="TRxSwitch.ToggleSwitch"/> + <element name="TRxSwitch.Align"/> + <element name="TRxSwitch.BorderStyle"/> + <element name="TRxSwitch.Caption"/> + <element name="TRxSwitch.Color"/> + <element name="TRxSwitch.Cursor"/> + <element name="TRxSwitch.DragMode"/> + <element name="TRxSwitch.DragCursor"/> + <element name="TRxSwitch.Enabled"/> + <element name="TRxSwitch.Font"/> + <element name="TRxSwitch.GlyphOff"/> + <element name="TRxSwitch.GlyphOn"/> + <element name="TRxSwitch.ParentColor"/> + <element name="TRxSwitch.ParentFont"/> + <element name="TRxSwitch.ParentShowHint"/> + <element name="TRxSwitch.PopupMenu"/> + <element name="TRxSwitch.ShowFocus"/> + <element name="TRxSwitch.ToggleKey"/> + <element name="TRxSwitch.ShowHint"/> + <element name="TRxSwitch.StateOn"/> + <element name="TRxSwitch.TabOrder"/> + <element name="TRxSwitch.TabStop"/> + <element name="TRxSwitch.TextPosition"/> + <element name="TRxSwitch.Anchors"/> + <element name="TRxSwitch.Constraints"/> + <element name="TRxSwitch.DragKind"/> + <element name="TRxSwitch.Visible"/> + <element name="TRxSwitch.OnClick"/> + <element name="TRxSwitch.OnDblClick"/> + <element name="TRxSwitch.OnEnter"/> + <element name="TRxSwitch.OnExit"/> + <element name="TRxSwitch.OnMouseMove"/> + <element name="TRxSwitch.OnMouseDown"/> + <element name="TRxSwitch.OnMouseUp"/> + <element name="TRxSwitch.OnKeyDown"/> + <element name="TRxSwitch.OnKeyUp"/> + <element name="TRxSwitch.OnKeyPress"/> + <element name="TRxSwitch.OnDragOver"/> + <element name="TRxSwitch.OnDragDrop"/> + <element name="TRxSwitch.OnEndDrag"/> + <element name="TRxSwitch.OnStartDrag"/> + <element name="TRxSwitch.OnContextPopup"/> + <element name="TRxSwitch.OnEndDock"/> + <element name="TRxSwitch.OnStartDock"/> + <element name="TRxSwitch.OnOn"/> + <element name="TRxSwitch.OnOff"/> + </module> + <module name="rxdice"> + <element name="TRxDice"> + <short>Компонента позволÑÑŽÑ‰Ð°Ñ Ð²Ð°Ð¼ иÑпользовать в формах Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð³Ñ€Ð°Ð»ÑŒÐ½Ñ‹Ñ… коÑтей в различных положениÑÑ….</short> + <descr> + <p>Компонента из чиÑла "безделушек", позволÑÑŽÑ‰Ð°Ñ Ð²Ð°Ð¼ иÑпользовать в формах Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð³Ñ€Ð°Ð»ÑŒÐ½Ñ‹Ñ… коÑтей в различных положениÑÑ…. </p> + <p>Текущее ÑоÑтоÑние компоненты (положение игральной коÑти) задаетÑÑ ÑвойÑтвом <link id="TRxDice.Value">Value</link>, которое может изменÑтьÑÑ Ð¾Ñ‚ 1 до 6. Ð’Ñ‹ можете уÑтановить ÑвойÑтво <link id="TRxDice.Value">Value</link> в Ñлучайное значение, вызвав метод <link id="TRxDice.RandomValue">RandomValue</link>. ЕÑли вы уÑтановите ÑвойÑтво <link id="TRxDice.Rotate">Rotate</link> в значение True, изображение игральной коÑти начнет Ñлучайным образом "вращатьÑÑ", изменÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ <link id="TRxDice.Value">Value</link>, Ñ Ñ‡Ð°Ñтотой, задаваемой ÑвойÑтвом <link id="TRxDice.Interval">Interval</link>. ОÑтановить вращение можно, приÑвоив значение False ÑвойÑтву <printshort id="TRxDice.Rotate"/>. ЕÑли ÑвойÑтво <link id="TRxDice.AutoStopInterval">AutoStopInterval</link> отлично от 0, то по прошеÑтвии Ñтого времени вращение будет оÑтановлено автоматичеÑки. </p> + <p>При изменении Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Value проиÑходит Ñобытие OnChange.</p> + </descr> + </element> + <element name="TRxDice.Create"/> + <element name="TRxDice.Destroy"/> + <element name="TRxDice.RandomValue"> + <short>procedure RandomValue;</short> + <descr>Вызов метода RandomValue позволÑет уÑтановить значение ÑвойÑтва Value компоненты TrxDice Ñлучайным образом (в диапазоне целых чиÑел от 1 до 6).</descr> + </element> + <element name="TRxDice.Align"/> + <element name="TRxDice.AutoSize"/> + <element name="TRxDice.AutoStopInterval"> + <short>СвойÑтво задает интервал (в мÑек), по прошеÑтвии которого поÑле уÑтановки ÑвойÑтва Rotate в значение True вращение игральной коÑти будет оÑтановлено</short> + <descr> + <p>СвойÑтво задает интервал (в мÑек), по прошеÑтвии которого поÑле уÑтановки ÑвойÑтва <link id="TRxDice.Rotate">Rotate</link> в значение True вращение игральной коÑти будет оÑтановлено. </p> + <p>ЕÑли значение AutoStopInterval = 0, то вращение автоматичеÑки не оÑтанавливаетÑÑ Ð¸ может быть прекращено приÑваиванием <link id="TRxDice.Rotate">Rotate</link> = False.</p> + </descr> + </element> + <element name="TRxDice.Color"/> + <element name="TRxDice.Cursor"/> + <element name="TRxDice.DragMode"/> + <element name="TRxDice.DragCursor"/> + <element name="TRxDice.Enabled"/> + <element name="TRxDice.Interval"> + <short>СвойÑтво определÑет временной интервал (в милиÑекундах), Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ проиÑходит Ñмена изображений в компоненте.</short> + <descr> + <p>СвойÑтво определÑет временной интервал (в милиÑекундах), Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ проиÑходит Ñмена изображений в компоненте. </p> + <p>при <link id="TRxDice.Rotate">Rotate</link> = True Ñто чаÑтота Ñмены битовых изображений.</p> + </descr> + <seealso> + <link id="TRxDice.Rotate"/> + </seealso> + </element> + <element name="TRxDice.ParentColor"/> + <element name="TRxDice.ParentShowHint"/> + <element name="TRxDice.PopupMenu"/> + <element name="TRxDice.Rotate"> + <short>property Rotate: Boolean;</short> + <descr>ЕÑли вы уÑтановите ÑвойÑтво Rotate в значение True, изображение игральной коÑти начнет Ñлучайным образом "вращатьÑÑ", изменÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Value, Ñ Ñ‡Ð°Ñтотой, задаваемой ÑвойÑтвом Interval. ОÑтановить вращение можно, приÑвоив ÑвойÑтву Rotate значение False.</descr> + </element> + <element name="TRxDice.ShowFocus"/> + <element name="TRxDice.ShowHint"/> + <element name="TRxDice.Anchors"/> + <element name="TRxDice.Constraints"/> + <element name="TRxDice.DragKind"/> + <element name="TRxDice.TabOrder"/> + <element name="TRxDice.TabStop"/> + <element name="TRxDice.Value"> + <short>property Value: TrxDiceValue;</short> + <descr>СвойÑтво задает текущее ÑоÑтоÑние (положение игральной коÑти) Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ñ‹ TRxDice.</descr> + </element> + <element name="TRxDice.Visible"/> + <element name="TRxDice.OnClick"/> + <element name="TRxDice.OnDblClick"/> + <element name="TRxDice.OnEnter"/> + <element name="TRxDice.OnExit"/> + <element name="TRxDice.OnMouseMove"/> + <element name="TRxDice.OnMouseDown"/> + <element name="TRxDice.OnMouseUp"/> + <element name="TRxDice.OnKeyDown"/> + <element name="TRxDice.OnKeyUp"/> + <element name="TRxDice.OnKeyPress"/> + <element name="TRxDice.OnDragOver"/> + <element name="TRxDice.OnDragDrop"/> + <element name="TRxDice.OnEndDrag"/> + <element name="TRxDice.OnStartDrag"/> + <element name="TRxDice.OnContextPopup"/> + <element name="TRxDice.OnChange"/> + <element name="TRxDice.OnStart"/> + <element name="TRxDice.OnStop"/> + <element name="TRxDice.OnEndDock"/> + <element name="TRxDice.OnStartDock"/> + </module> + <module name="rxdbcomb"> + <element name="TRxDBComboBox"/> + <element name="TRxDBComboBox.Create"/> + <element name="TRxDBComboBox.Destroy"/> + <element name="TRxDBComboBox.ExecuteAction"/> + <element name="TRxDBComboBox.UpdateAction"/> + <element name="TRxDBComboBox.UseRightToLeftAlignment"/> + <element name="TRxDBComboBox.Field"/> + <element name="TRxDBComboBox.Items"/> + <element name="TRxDBComboBox.Text"/> + <element name="TRxDBComboBox.Anchors"/> + <element name="TRxDBComboBox.ArrowKeysTraverseList"/> + <element name="TRxDBComboBox.AutoDropDown"/> + <element name="TRxDBComboBox.AutoSize"/> + <element name="TRxDBComboBox.BorderSpacing"/> + <element name="TRxDBComboBox.Style"/> + <element name="TRxDBComboBox.Color"/> + <element name="TRxDBComboBox.DataField"/> + <element name="TRxDBComboBox.DataSource"/> + <element name="TRxDBComboBox.DragMode"/> + <element name="TRxDBComboBox.DragCursor"/> + <element name="TRxDBComboBox.DropDownCount"/> + <element name="TRxDBComboBox.Enabled"/> + <element name="TRxDBComboBox.EnableValues"/> + <element name="TRxDBComboBox.Font"/> + <element name="TRxDBComboBox.Constraints"/> + <element name="TRxDBComboBox.DragKind"/> + <element name="TRxDBComboBox.ItemHeight"/> + <element name="TRxDBComboBox.Items"/> + <element name="TRxDBComboBox.ItemWidth"/> + <element name="TRxDBComboBox.MaxLength"/> + <element name="TRxDBComboBox.ParentColor"/> + <element name="TRxDBComboBox.ParentFont"/> + <element name="TRxDBComboBox.ParentShowHint"/> + <element name="TRxDBComboBox.PopupMenu"/> + <element name="TRxDBComboBox.ReadOnly"/> + <element name="TRxDBComboBox.ShowHint"/> + <element name="TRxDBComboBox.Sorted"/> + <element name="TRxDBComboBox.TabOrder"/> + <element name="TRxDBComboBox.TabStop"/> + <element name="TRxDBComboBox.Values"/> + <element name="TRxDBComboBox.Visible"/> + <element name="TRxDBComboBox.OnChange"/> + <element name="TRxDBComboBox.OnClick"/> + <element name="TRxDBComboBox.OnDblClick"/> + <element name="TRxDBComboBox.OnDragDrop"/> + <element name="TRxDBComboBox.OnDragOver"/> + <element name="TRxDBComboBox.OnDrawItem"/> + <element name="TRxDBComboBox.OnDropDown"/> + <element name="TRxDBComboBox.OnEndDrag"/> + <element name="TRxDBComboBox.OnEnter"/> + <element name="TRxDBComboBox.OnExit"/> + <element name="TRxDBComboBox.OnKeyDown"/> + <element name="TRxDBComboBox.OnKeyPress"/> + <element name="TRxDBComboBox.OnKeyUp"/> + <element name="TRxDBComboBox.OnMeasureItem"/> + <element name="TRxDBComboBox.OnStartDrag"/> + <element name="TRxDBComboBox.OnContextPopup"/> + <element name="TRxDBComboBox.OnEndDock"/> + <element name="TRxDBComboBox.OnStartDock"/> + </module> + <module name="rxtoolbar"> + <element name="TToolbarItem"/> + <element name="TToolbarItem.Create"/> + <element name="TToolbarItem.Destroy"/> + <element name="TToolbarItem.Action"/> + <element name="TToolbarItem.AutoSize"/> + <element name="TToolbarItem.Visible"/> + <element name="TToolbarItem.Left"/> + <element name="TToolbarItem.Height"/> + <element name="TToolbarItem.Top"/> + <element name="TToolbarItem.Width"/> + <element name="TToolbarItem.DropDownMenu"/> + <element name="TToolbarItem.ShowCaption"> + <short>Отображать заголовок кнопки</short> + <descr>Отображать заголовок кнопки</descr> + </element> + <element name="TToolbarItem.GroupIndex"/> + <element name="TToolbarItem.Layout"/> + <element name="TToolbarItem.ButtonStyle"/> + <element name="TToolbarItem.Tag"/> + <element name="TToolPanel"/> + <element name="TToolPanel.Create"/> + <element name="TToolPanel.Destroy"/> + <element name="TToolPanel.Customize"/> + <element name="TToolPanel.Items"/> + <element name="TToolPanel.ImageList"/> + <element name="TToolPanel.ImageListSelected"/> + <element name="TToolPanel.PropertyStorage"> + <descr> + <p>СвойÑтво позволÑет автоматичеÑки ÑохранÑть ÑпецифичеÑкие уÑтановки компоненты в INI-файле или (Ð´Ð»Ñ 32-разрÑдной верÑии) в ÑиÑтемном региÑтре при помощи компонент TFormPlacement или TFormStorage. </p> + <p>При задании Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтву IniStorage (и непуÑтом имени компоненты), некоторые ее наÑтройки, которые не ÑвлÑÑŽÑ‚ÑÑ published-ÑвойÑтвами и не могут быть заданы Ð´Ð»Ñ TFormStorage напрÑмую, будут ÑохранÑтьÑÑ Ð¸ воÑÑтанавливатьÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¸ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ значениÑми, заданными Ð´Ð»Ñ ÑоответÑтвующей компоненты TFormPlacement (TFormStorage). </p> + <p>Ð”Ð»Ñ TSpeedbar - Ñто раÑположение кнопок на панели и положение Ñамой панели, Ð´Ð»Ñ TMRUManager - ÑпиÑок Ñтрок, Ð´Ð»Ñ TRxDBGrid - ширины и положение полей в таблице и Ñ‚.д. Ð’Ñе компоненты, имеющие ÑвойÑтво IniStorage, имеют также методы Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¸ воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ñ… наÑтроек вручную, такие как Save/RestoreLayout и Ñ‚.д.</p> + </descr> + </element> + <element name="TToolPanel.BtnWidth"/> + <element name="TToolPanel.BtnHeight"/> + <element name="TToolPanel.ToolBarStyle"/> + <element name="TToolPanel.Options"> + <descr>СвойÑтво определÑет поведение панели инÑтрументов ÑоглаÑно типа +<link id="TToolPanelOption">TToolPanelOption</link>.</descr> + </element> + <element name="TToolPanel.Version"/> + <element name="TToolPanel.ButtonAllign"> + <short>Выравнивание кнопок на панели инÑтрументов</short> + <descr>ОпределÑет выравнивание кнопок на панели инÑтрументов</descr> + <seealso> + <link id="TToolButtonAllign"/> + </seealso> + </element> + <element name="TToolPanel.Align"/> + <element name="TToolPanel.Alignment"/> + <element name="TToolPanel.Anchors"/> + <element name="TToolPanel.AutoSize"/> + <element name="TToolPanel.BorderSpacing"/> + <element name="TToolPanel.BevelInner"/> + <element name="TToolPanel.BevelOuter"/> + <element name="TToolPanel.BevelWidth"/> + <element name="TToolPanel.BorderWidth"/> + <element name="TToolPanel.BorderStyle"/> + <element name="TToolPanel.ChildSizing"/> + <element name="TToolPanel.ClientHeight"/> + <element name="TToolPanel.ClientWidth"/> + <element name="TToolPanel.Color"/> + <element name="TToolPanel.Constraints"/> + <element name="TToolPanel.DragMode"/> + <element name="TToolPanel.Enabled"/> + <element name="TToolPanel.Font"/> + <element name="TToolPanel.FullRepaint"/> + <element name="TToolPanel.ParentColor"/> + <element name="TToolPanel.ParentFont"/> + <element name="TToolPanel.ParentShowHint"/> + <element name="TToolPanel.PopupMenu"/> + <element name="TToolPanel.ShowHint"/> + <element name="TToolPanel.TabOrder"/> + <element name="TToolPanel.TabStop"/> + <element name="TToolPanel.Visible"/> + <element name="TToolPanel.OnClick"/> + <element name="TToolPanel.OnDblClick"/> + <element name="TToolPanel.OnDragDrop"/> + <element name="TToolPanel.OnDragOver"/> + <element name="TToolPanel.OnEndDrag"/> + <element name="TToolPanel.OnEnter"/> + <element name="TToolPanel.OnExit"/> + <element name="TToolPanel.OnMouseDown"/> + <element name="TToolPanel.OnMouseMove"/> + <element name="TToolPanel.OnMouseUp"/> + <element name="TToolPanel.OnResize"/> + <element name="TToolPanel.OnStartDrag"/> + <element name="TToolbarButtonStyle"> + <short>Стиль Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ на панели инÑтрументов</short> + <descr>Стиль Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ на панели инÑтрументов +<table> + <th> + <td>Стиль</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>tbrButton</td> + <td>Кнопка</td> + </tr> + <tr> + <td>tbrCheck</td> + <td>Чек-бокÑ</td> + </tr> + <tr> + <td>tbrDropDown</td> + <td>Выпадающее меню</td> + </tr> + <tr> + <td>tbrSeparator</td> + <td>Разделитель</td> + </tr> + <tr> + <td>tbrDivider</td> + <td>Разделитель Ñ Ð»Ð¸Ð½Ð¸ÐµÐ¹</td> + </tr> + <tr> + <td>tbrDropDownExtra</td> + <td>Кнопка Ñ Ð²Ñ‹Ð¿Ð°Ð´Ð°ÑŽÑ‰Ð¸Ð¼ меню</td> + </tr> + </table> + </descr> + </element> + <element name="TToolBarStyle"> + <short>Стиль Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° панели инÑтрументов</short> + <descr> + <p>Стиль Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° панели инÑтрументов</p> + <table> + <th> + <td>Сталь</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>tbsStandart</td> + <td>Отображение кнопок обёмными и квадратными (как было в Windows 95-2000)</td> + </tr> + <tr> + <td>tbsWindowsXP</td> + <td>Отображение "плоÑких" голубых кнопок (как в Windows XP)</td> + </tr> + <tr> + <td>tbsNative</td> + <td>При отображении кнопок иÑпользуетÑÑ Ð²Ð½ÐµÑˆÐ½Ð¸Ð¹ вид ÑоглаÑно текущей ÑиÑтемной темы отриÑовки Ñлементов интерфейÑа</td> + </tr> + </table> + </descr> + </element> + <element name="TToolButtonAllign"> + <short>Выравнивание кнопок на панели инÑтрументов</short> + <descr> + <p>Выравнивание кнопок на панели инÑтрументов</p> + <table> + <th> + <td>Выравнивание</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>tbaNone</td> + <td>Ðет автоматичеÑкого Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº</td> + </tr> + <tr> + <td>tbaLeft</td> + <td>Выравнивани по левому краю</td> + </tr> + <tr> + <td>tbaRignt</td> + <td>Выравнивание по правому краю</td> + </tr> + </table> + </descr> + <seealso> + <link id="TToolPanel.ButtonAllign"/> + </seealso> + </element> + <element name="TToolPanelOption"> + <descr>Параметры Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð°Ð½ÐµÐ»Ð¸ инÑтрументов + +<table> + <th> + <td>Элемент</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>tpFlatBtns</td> + <td>Ð’Ñплывающие кнопки</td> + </tr> + <tr> + <td>tpTransparentBtns</td> + <td>Прозрачные кнопки, актуально еÑли Ñама панель инÑтрументов отриÑовыветÑÑ Ð½Ðµ Ñтандартно, например Ñ Ñ„Ð¾Ð½Ð¾Ð²Ñ‹Ð¼ риÑунком</td> + </tr> + <tr> + <td>tpStretchBitmap</td> + <td>РаÑÑ‚Ñгивать изображениÑ</td> + </tr> + <tr> + <td>tpCustomizable</td> + <td>ДоÑтупно во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть наÑтройки панели (Ñкрывать или отображать кнопки)</td> + </tr> + <tr> + <td>tpGlyphPopup</td> + <td>При наведении ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð¼Ñ‹ÑˆÐºÐ¸ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° кнопках будут "приподниматьÑÑ"</td> + </tr> + <tr> + <td>tpCaptionPopup</td> + <td>При наведении ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð¼Ñ‹ÑˆÐºÐ¸ текÑÑ‚ на кнопках будет "приподниматьÑÑ"</td> + </tr> + </table> + </descr> + </element> + <element name="TToolPanelOptions"> + <descr>КомплекÑное тип, Ñодержащий в Ñебе множеÑтво Ñлементов типа <link id="TToolPanelOption">TToolPanelOption</link>.</descr> + </element> + <element name="DefButtonWidth"> + <short>Ширина кнопки по умолчанию</short> + <descr>Ширина кнопки по умолчанию</descr> + <seealso> + <link id="TToolbarItem.Width"/> + <link id="TToolPanel.BtnWidth"/> + </seealso> + </element> + <element name="DefButtonHeight"> + <short>Ð’Ñ‹Ñота кнопки по умолчанию</short> + <descr>Ð’Ñ‹Ñота кнопки по умолчанию</descr> + <seealso> + <link id="TToolbarItem"/> + <link id="TToolPanel.BtnHeight"/> + </seealso> + </element> + <element name="DropDownExtraBtnWidth"> + <short>Ширина вÑпомогательной кнопки по умолчанию</short> + <descr>Ширина вÑпомогательной кнопки по умолчанию</descr> + <seealso> + <link id="TToolbarItem.ButtonStyle"/> + </seealso> + </element> + </module> + <module name="rxlogin"> + <element name="TRxLoginDialog"/> + <element name="TRxLoginDialog.Create"/> + <element name="TRxLoginDialog.Destroy"/> + <element name="TRxLoginDialog.Login"/> + <element name="TRxLoginDialog.TerminateApplication"/> + <element name="TRxLoginDialog.Lock"/> + <element name="TRxLoginDialog.LoggedUser"/> + <element name="TRxLoginDialog.Active"/> + <element name="TRxLoginDialog.AttemptNumber"/> + <element name="TRxLoginDialog.IniFileName"/> + <element name="TRxLoginDialog.DetailItems"/> + <element name="TRxLoginDialog.DetailItem"/> + <element name="TRxLoginDialog.MaxPasswordLen"/> + <element name="TRxLoginDialog.UpdateCaption"/> + <element name="TRxLoginDialog.UseRegistry"/> + <element name="TRxLoginDialog.ShowDetails"/> + <element name="TRxLoginDialog.LoginOptions"/> + <element name="TRxLoginDialog.StorageParams"/> + <element name="TRxLoginDialog.OnCheckUser"/> + <element name="TRxLoginDialog.AfterLogin"/> + <element name="TRxLoginDialog.BeforeLogin"/> + <element name="TRxLoginDialog.OnUnlockApp"/> + <element name="TRxLoginDialog.OnIconDblClick"/> + </module> + <module name="pickdate"> + <element name="TRxCalendarGrid"/> + <element name="TRxCalendarGrid.Create"/> + <element name="TRxCalendarGrid.Destroy"/> + <element name="TRxCalendarGrid.NextMonth"/> + <element name="TRxCalendarGrid.NextYear"/> + <element name="TRxCalendarGrid.PrevMonth"/> + <element name="TRxCalendarGrid.PrevYear"/> + <element name="TRxCalendarGrid.UpdateCalendar"/> + <element name="TRxCalendarGrid.ShortDaysOfWeek"/> + <element name="TRxCalendarGrid.Align"/> + <element name="TRxCalendarGrid.Anchors"/> + <element name="TRxCalendarGrid.BorderColor"/> + <element name="TRxCalendarGrid.BorderSpacing"/> + <element name="TRxCalendarGrid.CalendarDate"/> + <element name="TRxCalendarGrid.Constraints"/> + <element name="TRxCalendarGrid.Day"/> + <element name="TRxCalendarGrid.Font"/> + <element name="TRxCalendarGrid.Hint"/> + <element name="TRxCalendarGrid.Month"/> + <element name="TRxCalendarGrid.NotInThisMonthColor"/> + <element name="TRxCalendarGrid.PopupMenu"/> + <element name="TRxCalendarGrid.ReadOnly"/> + <element name="TRxCalendarGrid.SelectedColor"/> + <element name="TRxCalendarGrid.ShortDaysOfWeek"/> + <element name="TRxCalendarGrid.StartOfWeek"/> + <element name="TRxCalendarGrid.TabStop"/> + <element name="TRxCalendarGrid.UseCurrentDate"/> + <element name="TRxCalendarGrid.Visible"/> + <element name="TRxCalendarGrid.WeekendColor"/> + <element name="TRxCalendarGrid.Weekends"/> + <element name="TRxCalendarGrid.Year"/> + <element name="TRxCalendarGrid.OnChange"/> + <element name="TRxCalendarGrid.OnClick"/> + <element name="TRxCalendarGrid.OnEnter"/> + <element name="TRxCalendarGrid.OnExit"/> + <element name="TRxCalendarGrid.OnKeyDown"/> + <element name="TRxCalendarGrid.OnKeyPress"/> + <element name="TRxCalendarGrid.OnKeyUp"/> + <element name="TRxCalendarGrid.OnMouseDown"/> + <element name="TRxCalendarGrid.OnMouseEnter"/> + <element name="TRxCalendarGrid.OnMouseLeave"/> + <element name="TRxCalendarGrid.OnMouseMove"/> + <element name="TRxCalendarGrid.OnMouseUp"/> + <element name="TRxCalendarGrid.OnResize"/> + <element name="TRxCalendarGrid.OnPrepareCanvas"/> + </module> + <module name="rxclock"> + <element name="TRxClock"> + <descr>Компонента позволÑет отображать Ð²Ñ€ÐµÐ¼Ñ Ñуток в цифровом или аналоговом виде (вид Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°ÐµÑ‚ÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑвойÑтва ShowMode). +При цифровом отображении формат времени задаетÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸ÐµÐ¹ значений ÑвойÑтв LeadingZero, TwelveHour и ShowSeconds. +Дополнительно имеетÑÑ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð±ÑƒÐ´Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ°. При уÑтановке Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ AlarmEnabled в True, при наÑтуплении времени Ñуток, заданного ÑвойÑтвами AlarmHour, AlarmMinute и AlarmSecond, проиÑходит Ñобытие OnAlarm, в обработчике которого вы можете произвеÑти необходимые дейÑтвиÑ.</descr> + </element> + <element name="TRxClock.Create"/> + <element name="TRxClock.Destroy"/> + <element name="TRxClock.SetAlarmTime"/> + <element name="TRxClock.UpdateClock"/> + <element name="TRxClock.AlarmEnabled"> + <short>property AlarmEnabled: Boolean;</short> + <descr>При уÑтановке Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ AlarmEnabled в True, при наÑтуплении времени Ñуток, заданного ÑвойÑтвами AlarmHour, AlarmMinute и AlarmSecond, проиÑходит Ñобытие OnAlarm, в обработчике которого вы можете произвеÑти необходимые дейÑтвиÑ.</descr> + </element> + <element name="TRxClock.AlarmHour"> + <short>property AlarmHour: Byte;</short> + <descr>СвойÑтво задает (ÑовмеÑтно Ñо значениÑми AlarmMinute и AlarmSecond) Ð²Ñ€ÐµÐ¼Ñ ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ "будильника", Ñ‚.е. времÑ, в которое произойдет Ñобытие OnAlarm при уÑтановке в True ÑвойÑтва AlarmEnabled.</descr> + </element> + <element name="TRxClock.AlarmMinute"> + <short>property AlarmMinute: Byte;</short> + <descr>СвойÑтво задает (ÑовмеÑтно Ñо значениÑми AlarmHour и AlarmSecond) Ð²Ñ€ÐµÐ¼Ñ ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ "будильника", Ñ‚.е. времÑ, в которое произойдет Ñобытие OnAlarm при уÑтановке в True ÑвойÑтва AlarmEnabled.</descr> + </element> + <element name="TRxClock.AlarmSecond"> + <short>property AlarmSecond: Byte;</short> + <descr>СвойÑтво задает (ÑовмеÑтно Ñо значениÑми AlarmHour и AlarmMinute) Ð²Ñ€ÐµÐ¼Ñ ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ "будильника", Ñ‚.е. времÑ, в которое произойдет Ñобытие OnAlarm при уÑтановке в True ÑвойÑтва AlarmEnabled.</descr> + </element> + <element name="TRxClock.AutoSize"> + <short>AutoSize Property</short> + <descr>СвойÑтво определÑет, будет ли размер автоматичеÑки изменÑтьÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ шрифта, которым отображаетÑÑ Ð²Ñ€ÐµÐ¼Ñ Ð² цифровом виде (значение ShowMode равно scDigital), при изменении размера Ñлемента ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ TRxClock.</descr> + </element> + <element name="TRxClock.BevelInner"/> + <element name="TRxClock.BevelOuter"/> + <element name="TRxClock.DotsColor"/> + <element name="TRxClock.ShowMode"> + <short>property ShowMode: TShowClock;</short> + <descr>СвойÑтво управлÑет режимом Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ в компоненте TRxClock. Значение scDigital задает цифровое отображение времени шрифтом, заданным ÑвойÑтвом Font, значение scAnalog задает аналоговый вид чаÑов. +При цифровом отображении времени формат времени задаетÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸ÐµÐ¹ значений ÑвойÑтв LeadingZero, TwelveHour и ShowSeconds. +При аналоговом отображении ÑвойÑтво ShowSeconds определÑет, будет ли показыватьÑÑ ÑÐµÐºÑƒÐ½Ð´Ð½Ð°Ñ Ñтрелка, ÑвойÑтво DotsColor - цвет Ð´Ð»Ñ Ñ‚Ð¾Ñ‡ÐµÐº, обозначающих чаÑÑ‹.</descr> + </element> + <element name="TRxClock.ShowSeconds"> + <short>property ShowSeconds: Boolean;</short> + <descr>СвойÑтво задает, будут ли отображатьÑÑ Ñекунды при цифровом изображении чаÑов (при значении ÑвойÑтва ShowMode = scDigital) или ÑÐµÐºÑƒÐ½Ð´Ð½Ð°Ñ Ñтрелка - при аналоговом.</descr> + </element> + <element name="TRxClock.TwelveHour"> + <short>property TwelveHour: Boolean;</short> + <descr>СвойÑтво определÑет, как будет форматироватьÑÑ Ð²Ñ€ÐµÐ¼Ñ, еÑли задано цифровое отображение чаÑов (ÑвойÑтво ShowMode = scDigital). При значении TwelveHour = False (по умолчанию) диапазон значений чаÑов 0..23; при значении True чаÑÑ‹ принимают Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ 1..12 и при форматировании времени иÑпользуютÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… переменных Ð¼Ð¾Ð´ÑƒÐ»Ñ SysUtils TimeAMString и TimePMString.</descr> + </element> + <element name="TRxClock.LeadingZero"> + <short>property LeadingZero: Boolean;</short> + <descr>СвойÑтво определÑет, будут ли добавлÑтьÑÑ Ð»Ð¸Ð´Ð¸Ñ€ÑƒÑŽÑ‰Ð¸Ðµ нули при форматировании времени (только Ð´Ð»Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ‡Ð°Ñов), еÑли задано цифровое отображение чаÑов (ÑвойÑтво ShowMode = scDigital).</descr> + </element> + <element name="TRxClock.Align"/> + <element name="TRxClock.BevelWidth"/> + <element name="TRxClock.BorderWidth"/> + <element name="TRxClock.BorderStyle"/> + <element name="TRxClock.Anchors"/> + <element name="TRxClock.Constraints"/> + <element name="TRxClock.UseDockManager"/> + <element name="TRxClock.DockSite"/> + <element name="TRxClock.DragKind"/> + <element name="TRxClock.FullRepaint"/> + <element name="TRxClock.Color"/> + <element name="TRxClock.Cursor"/> + <element name="TRxClock.DragMode"/> + <element name="TRxClock.DragCursor"/> + <element name="TRxClock.Enabled"/> + <element name="TRxClock.Font"/> + <element name="TRxClock.ParentColor"/> + <element name="TRxClock.ParentFont"/> + <element name="TRxClock.ParentShowHint"/> + <element name="TRxClock.PopupMenu"/> + <element name="TRxClock.ShowHint"/> + <element name="TRxClock.Visible"/> + <element name="TRxClock.OnAlarm"> + <short>property OnAlarm: TNotifyEvent;</short> + <descr>Событие OnAlarm проиÑходит при наÑтуплении времени Ñуток, заданного ÑвойÑтвами AlarmHour, AlarmMinute и AlarmSecond, еÑли ÑвойÑтво AlarmEnabled уÑтановлено в значение True.</descr> + </element> + <element name="TRxClock.OnGetTime"/> + <element name="TRxClock.OnClick"/> + <element name="TRxClock.OnDblClick"/> + <element name="TRxClock.OnMouseMove"/> + <element name="TRxClock.OnMouseDown"/> + <element name="TRxClock.OnMouseUp"/> + <element name="TRxClock.OnDragOver"/> + <element name="TRxClock.OnDragDrop"/> + <element name="TRxClock.OnEndDrag"/> + <element name="TRxClock.OnResize"/> + <element name="TRxClock.OnContextPopup"/> + <element name="TRxClock.OnStartDrag"/> + <element name="TRxClock.OnConstrainedResize"/> + <element name="TRxClock.OnDockDrop"/> + <element name="TRxClock.OnDockOver"/> + <element name="TRxClock.OnEndDock"/> + </module> + <module name="rxspin"> + <element name="TRxSpinButton"/> + <element name="TRxSpinButton.Create"/> + <element name="TRxSpinButton.Destroy"/> + <element name="TRxSpinButton.Down"/> + <element name="TRxSpinButton.DragCursor"/> + <element name="TRxSpinButton.DragMode"/> + <element name="TRxSpinButton.Enabled"/> + <element name="TRxSpinButton.Visible"/> + <element name="TRxSpinButton.DownGlyph"/> + <element name="TRxSpinButton.UpGlyph"/> + <element name="TRxSpinButton.FocusControl"/> + <element name="TRxSpinButton.ShowHint"/> + <element name="TRxSpinButton.ParentShowHint"/> + <element name="TRxSpinButton.Anchors"/> + <element name="TRxSpinButton.Constraints"/> + <element name="TRxSpinButton.DragKind"/> + <element name="TRxSpinButton.OnBottomClick"/> + <element name="TRxSpinButton.OnTopClick"/> + <element name="TRxSpinButton.OnDragDrop"/> + <element name="TRxSpinButton.OnDragOver"/> + <element name="TRxSpinButton.OnEndDrag"/> + <element name="TRxSpinButton.OnEndDock"/> + <element name="TRxSpinButton.OnStartDock"/> + <element name="TRxSpinEdit"/> + <element name="TRxSpinEdit.Create"/> + <element name="TRxSpinEdit.Destroy"/> + <element name="TRxSpinEdit.AsInteger"/> + <element name="TRxSpinEdit.Text"/> + <element name="TRxSpinEdit.Alignment"/> + <element name="TRxSpinEdit.ArrowKeys"/> + <element name="TRxSpinEdit.Decimal"/> + <element name="TRxSpinEdit.EditorEnabled"/> + <element name="TRxSpinEdit.Increment"/> + <element name="TRxSpinEdit.MaxValue"/> + <element name="TRxSpinEdit.MinValue"/> + <element name="TRxSpinEdit.ValueType"/> + <element name="TRxSpinEdit.Value"/> + <element name="TRxSpinEdit.AutoSelect"/> + <element name="TRxSpinEdit.AutoSize"/> + <element name="TRxSpinEdit.BorderStyle"/> + <element name="TRxSpinEdit.Color"/> + <element name="TRxSpinEdit.DragCursor"/> + <element name="TRxSpinEdit.DragMode"/> + <element name="TRxSpinEdit.Enabled"/> + <element name="TRxSpinEdit.Font"/> + <element name="TRxSpinEdit.Anchors"/> + <element name="TRxSpinEdit.BiDiMode"/> + <element name="TRxSpinEdit.Constraints"/> + <element name="TRxSpinEdit.DragKind"/> + <element name="TRxSpinEdit.ParentBiDiMode"/> + <element name="TRxSpinEdit.MaxLength"/> + <element name="TRxSpinEdit.ParentColor"/> + <element name="TRxSpinEdit.ParentFont"/> + <element name="TRxSpinEdit.ParentShowHint"/> + <element name="TRxSpinEdit.PopupMenu"/> + <element name="TRxSpinEdit.ReadOnly"/> + <element name="TRxSpinEdit.ShowHint"/> + <element name="TRxSpinEdit.TabOrder"/> + <element name="TRxSpinEdit.TabStop"/> + <element name="TRxSpinEdit.Visible"/> + <element name="TRxSpinEdit.OnBottomClick"/> + <element name="TRxSpinEdit.OnTopClick"/> + <element name="TRxSpinEdit.OnChange"/> + <element name="TRxSpinEdit.OnClick"/> + <element name="TRxSpinEdit.OnDblClick"/> + <element name="TRxSpinEdit.OnDragDrop"/> + <element name="TRxSpinEdit.OnDragOver"/> + <element name="TRxSpinEdit.OnEndDrag"/> + <element name="TRxSpinEdit.OnEnter"/> + <element name="TRxSpinEdit.OnExit"/> + <element name="TRxSpinEdit.OnKeyDown"/> + <element name="TRxSpinEdit.OnKeyPress"/> + <element name="TRxSpinEdit.OnKeyUp"/> + <element name="TRxSpinEdit.OnMouseDown"/> + <element name="TRxSpinEdit.OnMouseMove"/> + <element name="TRxSpinEdit.OnMouseUp"/> + <element name="TRxSpinEdit.OnContextPopup"/> + <element name="TRxSpinEdit.OnMouseWheelDown"/> + <element name="TRxSpinEdit.OnMouseWheelUp"/> + <element name="TRxSpinEdit.OnEndDock"/> + <element name="TRxSpinEdit.OnStartDock"/> + </module> + <module name="RxDBSpinEdit"> + <element name="TRxDBSpinEdit"/> + <element name="TRxDBSpinEdit.Field"/> + <element name="TRxDBSpinEdit.DataField"/> + <element name="TRxDBSpinEdit.DataSource"/> + <element name="TRxDBSpinEdit.ReadOnly"/> + <element name="TRxDBSpinEdit.Align"/> + <element name="TRxDBSpinEdit.Anchors"/> + <element name="TRxDBSpinEdit.AutoSelect"/> + <element name="TRxDBSpinEdit.AutoSize"/> + <element name="TRxDBSpinEdit.BorderSpacing"/> + <element name="TRxDBSpinEdit.Constraints"/> + <element name="TRxDBSpinEdit.DecimalPlaces"/> + <element name="TRxDBSpinEdit.Enabled"/> + <element name="TRxDBSpinEdit.Font"/> + <element name="TRxDBSpinEdit.Increment"/> + <element name="TRxDBSpinEdit.MaxValue"/> + <element name="TRxDBSpinEdit.MinValue"/> + <element name="TRxDBSpinEdit.OnChange"/> + <element name="TRxDBSpinEdit.OnChangeBounds"/> + <element name="TRxDBSpinEdit.OnClick"/> + <element name="TRxDBSpinEdit.OnEditingDone"/> + <element name="TRxDBSpinEdit.OnEnter"/> + <element name="TRxDBSpinEdit.OnExit"/> + <element name="TRxDBSpinEdit.OnKeyDown"/> + <element name="TRxDBSpinEdit.OnKeyPress"/> + <element name="TRxDBSpinEdit.OnKeyUp"/> + <element name="TRxDBSpinEdit.OnMouseDown"/> + <element name="TRxDBSpinEdit.OnMouseMove"/> + <element name="TRxDBSpinEdit.OnMouseUp"/> + <element name="TRxDBSpinEdit.OnResize"/> + <element name="TRxDBSpinEdit.OnUTF8KeyPress"/> + <element name="TRxDBSpinEdit.ParentFont"/> + <element name="TRxDBSpinEdit.ParentShowHint"/> + <element name="TRxDBSpinEdit.PopupMenu"/> + <element name="TRxDBSpinEdit.ShowHint"/> + <element name="TRxDBSpinEdit.TabStop"/> + <element name="TRxDBSpinEdit.TabOrder"/> + <element name="TRxDBSpinEdit.Value"/> + <element name="TRxDBSpinEdit.Visible"/> + </module> + <module name="RxTimeEdit"> + <element name="TRxTimeEdit"> + <short>Визуальный объект предназначен Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸</short> + <descr>Визуальный объект предназначен Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸</descr> + </element> + <element name="TRxTimeEdit.Create"/> + <element name="TRxTimeEdit.Destroy"/> + <element name="TRxTimeEdit.Time"> + <short>СвойÑтво Ñодержит времÑ, введённое в поле</short> + <descr>СвойÑтво Ñодержит времÑ, введённое в поле</descr> + </element> + <element name="TRxTimeEdit.AutoSize"/> + <element name="TRxTimeEdit.AutoSelect"/> + <element name="TRxTimeEdit.Align"/> + <element name="TRxTimeEdit.Anchors"/> + <element name="TRxTimeEdit.BorderSpacing"/> + <element name="TRxTimeEdit.ButtonOnlyWhenFocused"/> + <element name="TRxTimeEdit.ButtonHint"/> + <element name="TRxTimeEdit.CharCase"/> + <element name="TRxTimeEdit.Color"/> + <element name="TRxTimeEdit.DragCursor"/> + <element name="TRxTimeEdit.DragMode"/> + <element name="TRxTimeEdit.EchoMode"/> + <element name="TRxTimeEdit.Enabled"/> + <element name="TRxTimeEdit.Font"/> + <element name="TRxTimeEdit.MaxLength"/> + <element name="TRxTimeEdit.OnButtonClick"/> + <element name="TRxTimeEdit.OnChange"/> + <element name="TRxTimeEdit.OnClick"/> + <element name="TRxTimeEdit.OnDblClick"/> + <element name="TRxTimeEdit.OnDragDrop"/> + <element name="TRxTimeEdit.OnDragOver"/> + <element name="TRxTimeEdit.OnEditingDone"/> + <element name="TRxTimeEdit.OnEndDrag"/> + <element name="TRxTimeEdit.OnEnter"/> + <element name="TRxTimeEdit.OnExit"/> + <element name="TRxTimeEdit.OnKeyDown"/> + <element name="TRxTimeEdit.OnKeyPress"/> + <element name="TRxTimeEdit.OnKeyUp"/> + <element name="TRxTimeEdit.OnMouseDown"/> + <element name="TRxTimeEdit.OnMouseMove"/> + <element name="TRxTimeEdit.OnMouseUp"/> + <element name="TRxTimeEdit.OnStartDrag"/> + <element name="TRxTimeEdit.OnUTF8KeyPress"/> + <element name="TRxTimeEdit.ParentColor"/> + <element name="TRxTimeEdit.ParentFont"/> + <element name="TRxTimeEdit.ParentShowHint"/> + <element name="TRxTimeEdit.PasswordChar"/> + <element name="TRxTimeEdit.PopupMenu"/> + <element name="TRxTimeEdit.ReadOnly"/> + <element name="TRxTimeEdit.ShowHint"/> + <element name="TRxTimeEdit.TabOrder"/> + <element name="TRxTimeEdit.TabStop"/> + <element name="TRxTimeEdit.Text"> + <short>ТекÑтовое предÑтавление введённого времени</short> + </element> + <element name="TRxTimeEdit.Visible"/> + </module> + <module name="RxDBTimeEdit"> + <element name="TRxDBTimeEdit"/> + <element name="TRxDBTimeEdit.Create"/> + <element name="TRxDBTimeEdit.Destroy"/> + <element name="TRxDBTimeEdit.Field"/> + <element name="TRxDBTimeEdit.DataField"/> + <element name="TRxDBTimeEdit.DataSource"/> + <element name="TRxDBTimeEdit.ReadOnly"/> + <element name="TRxDBTimeEdit.AutoSize"/> + <element name="TRxDBTimeEdit.AutoSelect"/> + <element name="TRxDBTimeEdit.Align"/> + <element name="TRxDBTimeEdit.Anchors"/> + <element name="TRxDBTimeEdit.BorderSpacing"/> + <element name="TRxDBTimeEdit.ButtonOnlyWhenFocused"/> + <element name="TRxDBTimeEdit.ButtonHint"/> + <element name="TRxDBTimeEdit.CharCase"/> + <element name="TRxDBTimeEdit.Color"/> + <element name="TRxDBTimeEdit.DragCursor"/> + <element name="TRxDBTimeEdit.DragMode"/> + <element name="TRxDBTimeEdit.EchoMode"/> + <element name="TRxDBTimeEdit.Enabled"/> + <element name="TRxDBTimeEdit.Font"/> + <element name="TRxDBTimeEdit.MaxLength"/> + <element name="TRxDBTimeEdit.OnButtonClick"/> + <element name="TRxDBTimeEdit.OnChange"/> + <element name="TRxDBTimeEdit.OnClick"/> + <element name="TRxDBTimeEdit.OnDblClick"/> + <element name="TRxDBTimeEdit.OnDragDrop"/> + <element name="TRxDBTimeEdit.OnDragOver"/> + <element name="TRxDBTimeEdit.OnEditingDone"/> + <element name="TRxDBTimeEdit.OnEndDrag"/> + <element name="TRxDBTimeEdit.OnEnter"/> + <element name="TRxDBTimeEdit.OnExit"/> + <element name="TRxDBTimeEdit.OnKeyDown"/> + <element name="TRxDBTimeEdit.OnKeyPress"/> + <element name="TRxDBTimeEdit.OnKeyUp"/> + <element name="TRxDBTimeEdit.OnMouseDown"/> + <element name="TRxDBTimeEdit.OnMouseMove"/> + <element name="TRxDBTimeEdit.OnMouseUp"/> + <element name="TRxDBTimeEdit.OnStartDrag"/> + <element name="TRxDBTimeEdit.OnUTF8KeyPress"/> + <element name="TRxDBTimeEdit.ParentColor"/> + <element name="TRxDBTimeEdit.ParentFont"/> + <element name="TRxDBTimeEdit.ParentShowHint"/> + <element name="TRxDBTimeEdit.PasswordChar"/> + <element name="TRxDBTimeEdit.PopupMenu"/> + <element name="TRxDBTimeEdit.ShowHint"/> + <element name="TRxDBTimeEdit.TabOrder"/> + <element name="TRxDBTimeEdit.TabStop"/> + <element name="TRxDBTimeEdit.Visible"/> + </module> + <module name="RxDBCtrls"> + <element name="TRxDBProgressBar"/> + <element name="TRxDBProgressBar.Create"/> + <element name="TRxDBProgressBar.Destroy"/> + <element name="TRxDBProgressBar.Field"/> + <element name="TRxDBProgressBar.DataField"/> + <element name="TRxDBProgressBar.DataSource"/> + <element name="TRxDBProgressBar.Align"/> + <element name="TRxDBProgressBar.Anchors"/> + <element name="TRxDBProgressBar.BorderSpacing"/> + <element name="TRxDBProgressBar.BorderWidth"/> + <element name="TRxDBProgressBar.Constraints"/> + <element name="TRxDBProgressBar.DragCursor"/> + <element name="TRxDBProgressBar.DragKind"/> + <element name="TRxDBProgressBar.DragMode"/> + <element name="TRxDBProgressBar.Enabled"/> + <element name="TRxDBProgressBar.Hint"/> + <element name="TRxDBProgressBar.Max"/> + <element name="TRxDBProgressBar.Min"/> + <element name="TRxDBProgressBar.OnContextPopup"/> + <element name="TRxDBProgressBar.OnDragDrop"/> + <element name="TRxDBProgressBar.OnDragOver"/> + <element name="TRxDBProgressBar.OnEndDrag"/> + <element name="TRxDBProgressBar.OnEnter"/> + <element name="TRxDBProgressBar.OnExit"/> + <element name="TRxDBProgressBar.OnMouseDown"/> + <element name="TRxDBProgressBar.OnMouseMove"/> + <element name="TRxDBProgressBar.OnMouseUp"/> + <element name="TRxDBProgressBar.OnStartDock"/> + <element name="TRxDBProgressBar.OnStartDrag"/> + <element name="TRxDBProgressBar.Orientation"/> + <element name="TRxDBProgressBar.ParentShowHint"/> + <element name="TRxDBProgressBar.PopupMenu"/> + <element name="TRxDBProgressBar.ShowHint"/> + <element name="TRxDBProgressBar.Smooth"/> + <element name="TRxDBProgressBar.Step"/> + <element name="TRxDBProgressBar.TabOrder"/> + <element name="TRxDBProgressBar.TabStop"/> + <element name="TRxDBProgressBar.Visible"/> + <element name="TRxDBProgressBar.BarShowText"/> + <element name="TRxDBTrackBar"/> + <element name="TRxDBTrackBar.Create"/> + <element name="TRxDBTrackBar.Destroy"/> + <element name="TRxDBTrackBar.Field"/> + <element name="TRxDBTrackBar.DataField"/> + <element name="TRxDBTrackBar.DataSource"/> + <element name="TRxDBTrackBar.ReadOnly"/> + <element name="TRxDBTrackBar.Align"/> + <element name="TRxDBTrackBar.Anchors"/> + <element name="TRxDBTrackBar.BorderSpacing"/> + <element name="TRxDBTrackBar.Constraints"/> + <element name="TRxDBTrackBar.DragCursor"/> + <element name="TRxDBTrackBar.DragMode"/> + <element name="TRxDBTrackBar.Enabled"/> + <element name="TRxDBTrackBar.Frequency"/> + <element name="TRxDBTrackBar.Hint"/> + <element name="TRxDBTrackBar.LineSize"/> + <element name="TRxDBTrackBar.Max"/> + <element name="TRxDBTrackBar.Min"/> + <element name="TRxDBTrackBar.OnChange"/> + <element name="TRxDBTrackBar.OnChangeBounds"/> + <element name="TRxDBTrackBar.OnClick"/> + <element name="TRxDBTrackBar.OnContextPopup"/> + <element name="TRxDBTrackBar.OnDragDrop"/> + <element name="TRxDBTrackBar.OnDragOver"/> + <element name="TRxDBTrackBar.OnEndDrag"/> + <element name="TRxDBTrackBar.OnEnter"/> + <element name="TRxDBTrackBar.OnExit"/> + <element name="TRxDBTrackBar.OnMouseDown"/> + <element name="TRxDBTrackBar.OnMouseEnter"/> + <element name="TRxDBTrackBar.OnMouseLeave"/> + <element name="TRxDBTrackBar.OnMouseMove"/> + <element name="TRxDBTrackBar.OnMouseUp"/> + <element name="TRxDBTrackBar.OnMouseWheel"/> + <element name="TRxDBTrackBar.OnMouseWheelDown"/> + <element name="TRxDBTrackBar.OnMouseWheelUp"/> + <element name="TRxDBTrackBar.OnKeyDown"/> + <element name="TRxDBTrackBar.OnKeyPress"/> + <element name="TRxDBTrackBar.OnKeyUp"/> + <element name="TRxDBTrackBar.OnResize"/> + <element name="TRxDBTrackBar.OnStartDrag"/> + <element name="TRxDBTrackBar.OnUTF8KeyPress"/> + <element name="TRxDBTrackBar.Orientation"/> + <element name="TRxDBTrackBar.PageSize"/> + <element name="TRxDBTrackBar.ParentShowHint"/> + <element name="TRxDBTrackBar.PopupMenu"/> + <element name="TRxDBTrackBar.ScalePos"/> + <element name="TRxDBTrackBar.ShowHint"/> + <element name="TRxDBTrackBar.TabOrder"/> + <element name="TRxDBTrackBar.TabStop"/> + <element name="TRxDBTrackBar.TickMarks"/> + <element name="TRxDBTrackBar.TickStyle"/> + <element name="TRxDBTrackBar.Visible"/> + </module> + <module name="dateutil"> + <element name="CurrentYear"> + <short>Возвращает текущий год</short> + </element> + <element name="IsLeapYear"> + <short>Возвращает True еÑли год виÑокоÑный</short> + </element> + <element name="DaysPerMonth"> + <short>Возвращает кол-во дней в меÑÑце</short> + </element> + <element name="FirstDayOfPrevMonth"> + <short>Возвращает первый день преведущего меÑÑца</short> + </element> + <element name="LastDayOfPrevMonth"> + <short>Возвращает поÑледний день преведущего меÑÑца</short> + </element> + <element name="ExtractDay"> + <short>Возвращает день из даты</short> + </element> + <element name="ExtractMonth"> + <short>Возвращает меÑÑц из даты</short> + </element> + <element name="ExtractYear"> + <short>Возвращает год из даты</short> + </element> + <element name="IncDate"> + <short>ДобавлÑет к дате заданное чиÑло дней\меÑÑцев\лет</short> + </element> + <element name="IncDay"> + <short>ДобавлÑет к дате заданное чиÑло дней</short> + </element> + <element name="IncMonth"> + <short>ДобавлÑет к дате заданное чиÑло меÑÑцев</short> + </element> + <element name="IncYear"> + <short>ДобавлÑет к дате заданное чиÑло лет</short> + </element> + <element name="ValidDate"> + <short>ПроверÑет дату на правильноÑть.</short> + </element> + <element name="DateDiff"> + <short>Возвращает разницу между датами</short> + </element> + <element name="MonthsBetween"> + <short>Возвращает разницу между датами в меÑÑцах</short> + </element> + <element name="DaysInPeriod"> + <short>Возвращает разницу между датами в меÑÑцах</short> + </element> + <element name="DaysBetween"> + <short>Возвращает разницу между датами в меÑÑцах</short> + </element> + <element name="IncTime"> + <short>ДобавлÑет к дате заданное чиÑло чаÑов\минут\Ñекунд</short> + </element> + <element name="IncHour"> + <short>ДобавлÑет к дате заданное чиÑло чаÑов</short> + </element> + <element name="IncMinute"> + <short>ДобавлÑет к дате заданное чиÑло минут</short> + </element> + <element name="IncSecond"> + <short>ДобавлÑет к дате заданное чиÑло Ñекунд</short> + </element> + <element name="IncMSec"> + <short>ДобавлÑет к дате заданное чиÑло милиÑекунд</short> + </element> + <element name="CutTime"> + <short>ОкруглÑет дату Ð¾Ñ‚Ñ€ÐµÐ·Ð°Ñ Ð²Ñ€ÐµÐ¼Ñ</short> + </element> + <element name="TDateOrder"> + <short>ПорÑдок ÑоÑтавление даты</short> + </element> + <element name="TDayOfWeekName"> + <short>Дни недели</short> + </element> + <element name="NvlDate"> + <short>ПроверÑет дату на нулевую </short> + </element> + <element name="DefDateMask"> + <short>Возвращает маÑку даты по умолчанию</short> + </element> + <element name="GetDateOrder"> + <short>Получить TDateOrder из заданного формата</short> + </element> + <element name="MonthFromName"> + <short>Возвращает номер меÑÑца по имени</short> + </element> + <element name="StrToDateDef"> + <short>Переводит Ñтроку в дату, в Ñлучае ошибке возврощает заданую дату</short> + </element> + <element name="StrToDateFmt"> + <short>Переводит Ñтроку в дату по заданному формату</short> + </element> + <element name="StrToDateFmtDef"> + <short>Переводит Ñтроку в дату по формату, в Ñлучае ошибке возвращает заданную дату</short> + </element> + <element name="DefDateFormat"> + <short>Возвращает формат даты по умолчанию</short> + </element> + </module> + <module name="rxFileUtils"> + <element name="GetFileOwnerUser"> + <short>Возвращает Ð¸Ð¼Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð° файла</short> + <descr> + <p>function <b>GetFileOwnerUser</b>(const SearchDomain, FileName:<b>String</b>):<b>String</b>; +</p> + <p>Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÐµÑ‚ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð¹ ÑиÑтемы владельца указанного файла. </p> + <p> + <b>Входные параметры:</b> + </p> + <p>SearchDomain - Домен, в котором будет производитÑÑ Ð¿Ð¾Ð¸Ñк оператора (пуÑтой Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ домена оператора).</p> + <p>FileName - Полное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°.</p> + <remark>Ð’ данный момент Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð° только Ð´Ð»Ñ windows.</remark> + </descr> + <seealso> + <link id="GetFileOwnerData"/> + </seealso> + </element> + <element name="GetFileOwnerData"> + <short>Возвращает данные владельца файла</short> + <descr> + <p> + <b>procedure</b> GetFileOwnerData( + + + + + + + + + + + + + + + + + + + + + + + + <b>const</b> SearchDomain, FileName: + + + + + + + + + + + + + + + + + + + + + + + + <b>String</b>; + + + + + + + + + + + + + + + + + + + + + + + + <b>out</b> UserName, DomainName: + + + + + + + + + + + + + + + + + + + + + + + + <b>String</b>); +</p> + <p>Процедура возвращает Ð¸Ð¼Ñ Ð¸ домен Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð¹ ÑиÑтемы владельца указанного файла. </p> + <p> + <b>Входные параметры:</b> + </p> + <p>- SearchDomain - Домен, в котором будет производитÑÑ Ð¿Ð¾Ð¸Ñк оператора (пуÑтой Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ домена оператора).</p> + <p>- FileName - Полное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°.</p> + <p> + <b>Выходные параметры:</b> + </p> + <p>- UserName - Ð˜Ð¼Ñ Ð¿Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ.</p> + <p>- DomainName - Домен, в котором найден данный пользователь.</p> + <remark>Ð’ данный момент Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð° только Ð´Ð»Ñ windows.</remark> + </descr> + <seealso> + <link id="GetFileOwnerData"/> + </seealso> + </element> + <element name="NormalizeDirectoryName"> + <short>Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¾Ð´Ð¸Ñ‚ к принÑтому в данной ОС виду вÑе разделители каталогов.</short> + <descr> + <p> + <b>function</b> NormalizeDirectoryName( + + + + + + + + + + + + + + + + + + <b>const</b> DirName: + + + + + + + + + + + + + + + + + + <b>string</b>): + + + + + + + + + + + + + + + + + + <b>string</b>;</p> + <p>Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ñет вÑе разделители каталогов в указанном имени файла/каталога и, еÑли нужно, менÑет их на значение конÑтанты<b>DirectorySeparator</b>.</p> + </descr> + </element> + <short>Содержит дополнительные утилиты работы Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ и ОС</short> + <element name="GetUserName"> + <short>Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ <b>GetUserName</b> возвращает Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð°, залогиненго в ÑиÑтеме</short> + <descr> + <p> + <b>function</b> GetUserName: + + + + + + + + + + + + + + + + + + + + + + + <b>string</b>;</p> + <p>Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ <b>GetUserName</b> возвращает Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð°, залогиненго в ÑиÑтеме</p> + </descr> + </element> + </module> + <module name="RxVersInfo"> + <element name="TRxVersionInfo"> + <short>КлаÑÑ TRxVersionInfo предоÑтавлÑет доÑтуп к информации о верÑии программы</short> + <descr> + <p>КлаÑÑ TRxVersionInfo предоÑтавлÑет доÑтуп к информации о верÑии программы. </p> + <p>ПоÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° Ñтого клаÑÑа вы можете получить доÑтуп к информации из реÑурÑа VERSIONINFO через ÑвойÑтва (только-длÑ-чтениÑ) объекта, еÑли чтение реÑурÑа из Ñпецифицированного файла окончилоÑÑŒ уÑпешно. Ð’Ñ‹ можете проверить результат Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ из файла по значению ÑвойÑтва <link id="TRxVersionInfo.Valid">Valid</link> - значение True ÑоответÑтвует уÑпешному чтению данных. При изменении ÑвойÑтва, задающего Ð¸Ð¼Ñ Ð¸ÑполнÑемого файла Ñ Ñ€ÐµÑурÑом VERSIONINFO, проиÑходит обновление данных объекта. УÑпешноÑть Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ также проверить по значению ÑвойÑтва <link id="TRxVersionInfo.Valid">Valid</link>. +</p> + <p>Данный клаÑÑ Ð¿Ñ€ÐµÐ´Ð¾ÑтавлÑет информацию о наиболее чаÑто иÑпользуемых ÑвойÑтвах Ñкомпилируемого иÑполнÑемого модулÑ. ФактичеÑки ÑвлÑетÑÑ Ð½Ð°Ð´Ñтройкой над пакетом fpc <b>fcl-res</b> + </p> + </descr> + </element> + <short>Модуль RxVersInfo Ñодержит инÑтрументы доÑтупа к информации о верÑии программы</short> + <descr>Модуль RxVersInfo Ñодержит инÑтрументы доÑтупа к информации о верÑии программы</descr> + <element name="TRxVersionInfo.LoadFromFile"> + <short>procedure LoadFromFile(const AFileName:string);</short> + <descr>Процедура загружает данные о верÑии указанного иÑполнÑемого модулÑ</descr> + </element> + <element name="TRxVersionInfo.FileName"> + <short>property FileName: string</short> + <descr>СвойÑтво указываеет</descr> + </element> + <element name="TRxVersionInfo.Create"> + <descr>Создаёт объект и загружает данные о верÑии программы вызовом метода <link id="TRxVersionInfo.LoadFromFile">LoadFromFile</link> + </descr> + </element> + <element name="TRxVersionInfo.Destroy"/> + <element name="TRxVersionInfo.Valid"> + <short> + <b>property</b> Valid: Boolean;</short> + <descr>СвойÑтво Valid (только-длÑ-чтениÑ) позволÑет вам определить результат Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о верÑии из Ñпецифицированного иÑполнÑемого файла. Значение True говорит о том, что чтение данных прошло уÑпешно, в противном Ñлучае Valid = False.</descr> + </element> + <element name="TRxVersionInfo.FileLongVersion"> + <descr>СвойÑтво задает Ð¸Ð¼Ñ Ð¸ÑполнÑемого файла (EXE или DLL), из которого ÑчитываетÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ верÑии. При изменении Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтва FileName проиÑходит чтение реÑурÑа VERSIONINFO из указанного файла. ЕÑли чтение данных окончилоÑÑŒ уÑпешно, ÑвойÑтво <link id="TRxVersionInfo.Valid">Valid</link> (только чтение) уÑтанавливаетÑÑ Ð² значение True, иначе - в False.</descr> + </element> + <element name="TRxVersionInfo.ProductLongVersion"/> + <element name="TRxVersionInfo.Translation"> + <descr>Значение ÑвойÑтва предÑтавлÑет Ñобой указатель на маÑÑив идентификаторов Ñзыка (language) и набора Ñимволов (character-set), иÑпользуемых при чтении данных из реÑурÑа Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о верÑии.</descr> + </element> + <element name="TRxVersionInfo.VersionLanguage"> + <descr>Идентификатор Ñзыка (language), иÑпользуемого при чтении информации из реÑурÑа.</descr> + </element> + <element name="TRxVersionInfo.VersionCharSet"> + <descr>Идентификатор набора Ñимволов (character-set), иÑпользуемого при чтении информации из реÑурÑа</descr> + </element> + <element name="TRxVersionInfo.VersionNum"> + <descr>СвойÑтво определÑет номер верÑии файла как длинное целое.</descr> + </element> + <element name="TRxVersionInfo.Comments"> + <descr>СвойÑтво позволÑет получить Ñтроку из информации о верÑии, обозначенную как комментарий.</descr> + </element> + <element name="TRxVersionInfo.CompanyName"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñтроке из иформации о верÑии, Ñпецифицирующей Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸-производителÑ.</descr> + </element> + <element name="TRxVersionInfo.FileDescription"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к опиÑанию иÑполнимого файла из информации о верÑии.</descr> + </element> + <element name="TRxVersionInfo.FileVersion"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñтроке, Ñодержащей номер верÑии файла, полученной из реÑурÑа типа VERSIONINFO.</descr> + </element> + <element name="TRxVersionInfo.InternalName"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñтроке, Ñодержашей "внутреннее" Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°, еÑли оно приÑутÑтвует в информации о верÑии. Это, например, может быть Ð¸Ð¼Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ, еÑли файл ÑвлÑетÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑки загружаемой библиотекой (DLL).</descr> + </element> + <element name="TRxVersionInfo.LegalCopyright"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñтроке из иформации о верÑии, Ñпецифицирующей авторÑкие права.</descr> + </element> + <element name="TRxVersionInfo.LegalTrademarks"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñтроке из иформации о верÑии, Ñпецифицирующей товарные знаки и зарегиÑтрированные товарные знаки, применимые к файлу.</descr> + </element> + <element name="TRxVersionInfo.OriginalFilename"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñтроке из иформации о верÑии, Ñпецифицирующей оригинальное (первоначальное) Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° (не Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¿ÑƒÑ‚ÑŒ). Эта Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ понадобитьÑÑ, еÑли файл переименован пользователем.</descr> + </element> + <element name="TRxVersionInfo.ProductVersion"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñтроке, Ñодержащей номер верÑии продукта, полученной из реÑурÑа типа VERSIONINFO, например "3.10" или "5.00.RC2".</descr> + </element> + <element name="TRxVersionInfo.ProductName"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к имени продукта из информации о верÑии. РаÑпроÑтранение продукта обычно производитÑÑ Ñ Ñтим именем.</descr> + </element> + <element name="TRxVersionInfo.SpecialBuild"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñтроке из иформации о верÑии, Ñодержащей чаÑтную (конфиденциальную) информацию о предварительной верÑии продукта. Как правило, в окончательных верÑиÑÑ… иÑполнÑемых файлов Ñ‚Ð°ÐºÐ°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ÑутÑтвует.</descr> + </element> + <element name="TRxVersionInfo.PrivateBuild"> + <descr>СвойÑтво Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñтроке из иформации о верÑии, Ñодержащей чаÑтную (конфиденциальную) информацию о предварительной верÑии продукта. Как правило, в окончательных верÑиÑÑ… иÑполнÑемых файлов Ñ‚Ð°ÐºÐ°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ÑутÑтвует.</descr> + </element> + <element name="TRxVersionInfo.Values"> + <short>Values Property</short> + <descr>СвойÑтво предоÑтавлÑет доÑтуп к любой текÑтовой информации из реÑурÑа VERSIONINFO. Ð¡Ñ‡Ð¸Ñ‚Ñ‹Ð²Ð°ÐµÐ¼Ð°Ñ Ñтрока задаетÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ Name.</descr> + </element> + <element name="TRxVersionInfo.VerFileDate"/> + </module> + <module name="RxAboutDialog"> + <element name="TRxAboutDialogOption"> + <short>Параметры отображени окна информации о программе</short> + <descr> + <p>Параметры отображени окна информации о программе</p> + <table> + <th> + <td>Значение</td> + <td>ОпиÑание</td> + </th> + <tr> + <td>radHelpButton</td> + <td>Отображать кнопку "Помощь"</td> + </tr> + <tr> + <td>radLicenseTab</td> + <td>Отображать закладку лицензии</td> + </tr> + <tr> + <td>radShowImageLogo</td> + <td>Отображать логотип на первой закладке</td> + </tr> + </table> + </descr> + </element> + <element name="TRxAboutDialogOptions"> + <short>Параметры окна "О программе"</short> + <descr> + <p>Ðабор флагов, определÑющий +<link id="TRxAboutDialogOption">параметры</link> Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾ÐºÐ½Ð° информации о программе</p> + </descr> + <seealso> + <link id="TRxAboutDialogOption"/> + <link id="TRxAboutDialog.Options"/> + </seealso> + </element> + <element name="TRxAboutDialog"> + <descr>Компонента TRXAboutDialog предназначена Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о программе.</descr> + </element> + <element name="TRxAboutDialog.Create"> + <short>КонÑтруктор Ñоздаёт ÑкземплÑÑ€ клаÑÑа</short> + <descr>КонÑтруктор Ñоздаёт ÑкземплÑÑ€ клаÑÑа</descr> + </element> + <element name="TRxAboutDialog.Destroy"> + <short>Уничтожает ÑкземплÑÑ€ клаÑÑа</short> + <descr>Уничтожает ÑкземплÑÑ€ клаÑÑа</descr> + </element> + <element name="TRxAboutDialog.Execute"> + <short>Метод отображет окно "О программе"</short> + <descr>Метод отображет окно "О программе"</descr> + </element> + <element name="TRxAboutDialog.Options"> + <short>Параметры окна "О программе"</short> + <descr> + <p>Ðабор флагов, определÑющий +<link id="TRxAboutDialogOption">параметры</link> Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾ÐºÐ½Ð° информации о программе</p> + </descr> + <seealso> + <link id="TRxAboutDialogOptions"/> + </seealso> + </element> + <element name="TRxAboutDialog.ApplicationTitle"> + <short>Заголовок программы</short> + <descr>Заголовок программы, выводимый на первой Ñтранице она</descr> + </element> + <element name="TRxAboutDialog.LicenseFileName"> + <descr>Файл лицензии</descr> + </element> + <element name="TRxAboutDialog.Caption"> + <short>Заголовок окна</short> + <descr>Заголовок окна</descr> + </element> + <element name="TRxAboutDialog.Picture"> + <short>Логотип, отображаемый в окне "О программе"</short> + <descr>Изображение логотипа</descr> + </element> + </module> + <module name="rxAboutFormUnit"> + <element name="TrxAboutFormForm"> + <short>КлаÑÑ Ð¿Ñ€ÐµÐ´ÑтавлÑет Ñобой форму "О программе"</short> + <descr>КлаÑÑ Ð¿Ñ€ÐµÐ´ÑтавлÑет Ñобой форму "О программе"</descr> + </element> + <element name="TrxAboutFormForm.LoadLicense"> + <descr>Загружает на Ñтраницу "ЛицензиÑ" формы "О программе" файл лицензионного ÑоглашениÑ</descr> + </element> + </module> + <module name="rxdbgrid_findunit"/> + <module name="rxdbgrid_columsunit"/> + <module name="RxViewsPanel"> + <topic name="TRxViewsPanelItem"/> + <element name="TRxViewsPanelItem"> + <descr>ÐšÐ¾Ð»Ð»ÐµÐºÑ†Ð¸Ñ TRxViewsPanelItems Ñодержит в Ñебе Ñлементы "Кнопки" Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€ÐµÐ´Ñтавлений</descr> + </element> + <element name="TRxViewsPanelItem.Create"/> + <element name="TRxViewsPanelItem.Destroy"/> + <element name="TRxViewsPanelItem.Action"/> + <element name="TRxViewsPanelItem.Visible"/> + <element name="TRxViewsPanelItem.Caption"/> + <element name="TRxViewsPanelItem.Tag"/> + <element name="TRxViewsPanelItem.ImageIndex"/> + <element name="TRxViewsPanelItems"> + <short>ÐšÐ¾Ð»Ð»ÐµÐºÑ†Ð¸Ñ TRxViewsPanelItems Ñодержит в Ñебе Ñлементы "Кнопки" Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€ÐµÐ´Ñтавлений</short> + <descr>ÐšÐ¾Ð»Ð»ÐµÐºÑ†Ð¸Ñ TRxViewsPanelItems Ñодержит в Ñебе Ñлементы "Кнопки" Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€ÐµÐ´Ñтавлений</descr> + </element> + <element name="TRxViewsPanelItems.Create"/> + <element name="TRxViewsPanelItems.Items"/> + <element name="TRxViewsPanelItems.UpdateImages"/> + <element name="TRxViewsPanel"> + <short>КлаÑÑ TRxViewsPanel предÑтавлÑет Ñобой визуальный компонент в Ñтиле Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€ÐµÐ´ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð· MS Project или Gnome Planer.</short> + <descr>КлаÑÑ TRxViewsPanel предÑтавлÑет Ñобой визуальный компонент в Ñтиле Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€ÐµÐ´ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð· MS Project или Gnome Planer.</descr> + </element> + <short>Модуль RxViewsPanel Ñодержит визуальный компонент Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлений</short> + <descr>Модуль RxViewsPanel Ñодержит визуальный компонент Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñтавлений</descr> + <element name="TRxViewsPanel.Create"> + <short>Создаёт ÑкземплÑÑ€</short> + </element> + <element name="TRxViewsPanel.Destroy"/> + <element name="TRxViewsPanel.ButtonHeght"> + <short>СвойÑтво определÑет выÑоту кнопки в панели</short> + <descr>СвойÑтво определÑет выÑоту кнопки в панели</descr> + </element> + <element name="TRxViewsPanel.Color"> + <short>Цвет фона панели</short> + <descr>Цвет фона панели</descr> + </element> + <element name="TRxViewsPanel.Items"/> + <element name="TRxViewsPanel.ImageList"> + <short>Указатель на Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº</short> + <descr>Указатель на Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº на панели.</descr> + </element> + <element name="TRxViewsPanel.OnSelectViewEvent"/> + <element name="TRxViewsPanel.ItemIndex"/> + <element name="TSelectViewEvent"> + <short>Событие возникает при нажатии на кнопку Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð°</short> + <descr> + <p>Событие возникает при нажатии на кнопку Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð°. +</p> + <table> + <tr> + <td>ItemIndex</td> + <td>ПорÑдковый номер кнопку</td> + </tr> + <tr> + <td>Item</td> + <td>указатель на кнопку</td> + </tr> + </table> + </descr> + <example file="/usr/local/share/lazarus/components/rxnew/Demos/RxViewsPanel/unit1.pas"/> + </element> + </module> + <module name="RxSystemServices"> + <element name="TRxServiceType"/> + <element name="TRxServiceStatus"/> + <element name="TRxServiceState"/> + <element name="TRxServiceItem"/> + <element name="TRxSystemServices"> + <short>Компонента получает ÑоÑтоÑние Ñлужб на указанном компьютере</short> + </element> + <element name="TRxSystemServices.Create"/> + <element name="TRxSystemServices.Destroy"/> + <element name="TRxSystemServices.Items"> + <short>МаÑÑив Ñодержит ÑпиÑок Ñлужб, работающих в ÑиÑтеме</short> + </element> + <element name="TRxSystemServices.ItemCount"> + <short>КоличеÑтво Ñелементов в маÑÑиве Items</short> + </element> + <element name="TRxSystemServices.ServerName"> + <short>Ð˜Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð°, на котором опрашиваютÑÑ Ñлужбы</short> + </element> + <element name="TRxSystemServices.ServiceType"> + <short>Фильтр отбора Ñлужб по типу (Ñлужба/драйвер)</short> + </element> + <element name="TRxSystemServices.ServiceStatus"> + <short>Фильтр отбора Ñлужб по ÑтатуÑу работает/оÑтановлена</short> + </element> + <short>Модуль Ñодержит компоненту TRxSystemServices</short> + <descr>Модуль RxSystemServices предназначен Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о ÑоÑтоÑнии работающих в ÑиÑтеме Ñлужб (windows) / демонов (unix-like) +Cодержит компоненту <link id="TRxSystemServices">TRxSystemServices</link>.</descr> + </module> + </package> +</fpdoc-descriptions> diff --git a/components/rx/version/2.1/docs/todo.txt b/components/rx/version/2.1/docs/todo.txt new file mode 100644 index 000000000..4c758fb2a --- /dev/null +++ b/components/rx/version/2.1/docs/todo.txt @@ -0,0 +1,5 @@ +1. +в TPageManager необходимо обработать ÑÐ¸Ñ‚ÑƒÐ°Ñ†Ð¸Ñ Ð¿Ñ€Ñмого Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ +закладки в PageControl-е + + diff --git a/components/rx/version/2.1/duallist.pas b/components/rx/version/2.1/duallist.pas new file mode 100644 index 000000000..25996dd57 --- /dev/null +++ b/components/rx/version/2.1/duallist.pas @@ -0,0 +1,188 @@ +{ duallist unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit duallist; + +interface + +{$I rx.inc} + +uses Classes, Controls; + +type + +{ TDualListDialog } + + TDualListDialog = class(TComponent) + private + FCtl3D: Boolean; + FSorted: Boolean; + FTitle:string; + FLabel1Caption: TCaption; + FLabel2Caption: TCaption; + FOkBtnCaption: TCaption; + FCancelBtnCaption: TCaption; + FHelpBtnCaption: TCaption; + FHelpContext: THelpContext; + FList1: TStrings; + FList2: TStrings; + FShowHelp: Boolean; + procedure SetList1(Value: TStrings); + procedure SetList2(Value: TStrings); + function IsLabel1Custom: Boolean; + function IsLabel2Custom: Boolean; + function IsOkBtnCustom: Boolean; + function IsCancelBtnCustom: Boolean; + function IsHelpBtnCustom: Boolean; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function Execute: Boolean; + published + property Ctl3D: Boolean read FCtl3D write FCtl3D default True; + property Sorted: Boolean read FSorted write FSorted; + property Title: string read FTitle write FTitle; + property Label1Caption: TCaption read FLabel1Caption write FLabel1Caption + stored IsLabel1Custom; + property Label2Caption: TCaption read FLabel2Caption write FLabel2Caption + stored IsLabel2Custom; + property OkBtnCaption: TCaption read FOkBtnCaption write FOkBtnCaption + stored IsOkBtnCustom; + property CancelBtnCaption: TCaption read FCancelBtnCaption write FCancelBtnCaption + stored IsCancelBtnCustom; + property HelpBtnCaption: TCaption read FHelpBtnCaption write FHelpBtnCaption + stored IsHelpBtnCustom; + property HelpContext: THelpContext read FHelpContext write FHelpContext; + property List1: TStrings read FList1 write SetList1; + property List2: TStrings read FList2 write SetList2; + property ShowHelp: Boolean read FShowHelp write FShowHelp default True; + end; + +implementation + +uses SysUtils, Forms, FDualLst, VCLUtils, LCLStrConsts, rxconst; + +{ TDualListDialog } + +constructor TDualListDialog.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FCtl3D := True; + FShowHelp := True; + FList1 := TStringList.Create; + FList2 := TStringList.Create; + FLabel1Caption := SDualListSrcCaption; + FLabel2Caption := SDualListDestCaption; + OkBtnCaption := rsmbOK; + CancelBtnCaption := rsmbCancel; + HelpBtnCaption := rsmbHelp; + Title:=SDualListCaption; +end; + +destructor TDualListDialog.Destroy; +begin + List1.Free; + List2.Free; + inherited Destroy; +end; + +procedure TDualListDialog.SetList1(Value: TStrings); +begin + FList1.Assign(Value); +end; + +procedure TDualListDialog.SetList2(Value: TStrings); +begin + FList2.Assign(Value); +end; + +function TDualListDialog.IsLabel1Custom: Boolean; +begin + Result := CompareStr(Label1Caption, SDualListSrcCaption) <> 0; +end; + +function TDualListDialog.IsLabel2Custom: Boolean; +begin + Result := CompareStr(Label2Caption, SDualListDestCaption) <> 0; +end; + +function TDualListDialog.IsOkBtnCustom: Boolean; +begin + Result := CompareStr(OkBtnCaption, rsmbOK) <> 0; +end; + +function TDualListDialog.IsCancelBtnCustom: Boolean; +begin + Result := CompareStr(CancelBtnCaption, rsmbCancel) <> 0; +end; + +function TDualListDialog.IsHelpBtnCustom: Boolean; +begin + Result := CompareStr(HelpBtnCaption, rsmbHelp) <> 0; +end; + +function TDualListDialog.Execute: Boolean; +var + Form: TDualListForm; +begin + Form := TDualListForm.Create(Application); + try + with Form do + begin + Ctl3D := Self.Ctl3D; + if NewStyleControls then Font.Style := []; + ShowHelp := Self.ShowHelp; + SrcList.Sorted := Sorted; + DstList.Sorted := Sorted; + SrcList.Items := List1; + DstList.Items := List2; + if Self.Title <> '' then Form.Caption := Self.Title; + if Label1Caption <> '' then SrcLabel.Caption := Label1Caption; + if Label2Caption <> '' then DstLabel.Caption := Label2Caption; + ButtonPanel1.OKButton.Caption := OkBtnCaption; + ButtonPanel1.CancelButton.Caption := CancelBtnCaption; + ButtonPanel1.HelpButton.Caption := HelpBtnCaption; + + HelpContext := Self.HelpContext; + ButtonPanel1.HelpButton.HelpContext := HelpContext; + end; + Result := (Form.ShowModal = mrOk); + if Result then + begin + List1 := Form.SrcList.Items; + List2 := Form.DstList.Items; + end; + finally + Form.Free; + end; +end; + +end. diff --git a/components/rx/version/2.1/ex_rx_bin_datapacket.pas b/components/rx/version/2.1/ex_rx_bin_datapacket.pas new file mode 100644 index 000000000..e70917208 --- /dev/null +++ b/components/rx/version/2.1/ex_rx_bin_datapacket.pas @@ -0,0 +1,172 @@ +{ + TBinaryRxDatapacketReader implementation + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + +unit ex_rx_bin_datapacket; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, dom, db, ex_rx_datapacket; + +type + TChangeLogEntry = record + UpdateKind : TUpdateKind; + OrigEntry : integer; + NewEntry : integer; + end; + TChangeLogEntryArr = array of TChangeLogEntry; + +type + { TBinaryRxDatapacketReader } + + TBinaryRxDatapacketReader = class(TRxDataPacketReader) + public + procedure LoadFieldDefs(AFieldDefs : TFieldDefs); override; + procedure StoreFieldDefs(AFieldDefs : TFieldDefs); override; + function GetRecordRowState(out AUpdOrder : Integer) : TRowState; override; + procedure FinalizeStoreRecords; override; + function GetCurrentRecord : boolean; override; + procedure GotoNextRecord; override; + procedure InitLoadRecords; override; + procedure RestoreRecord(ADataset : TDataset); override; + procedure StoreRecord(ADataset : TDataset; ARowState : TRowState; AUpdOrder : integer = 0); override; + class function RecognizeStream(AStream : TStream) : boolean; override; + end; + +implementation + +uses + dbconst; + +{ TBinaryRxDatapacketReader } + +const + RxBinaryIdent = 'BinRxDataset'; + +procedure TBinaryRxDatapacketReader.LoadFieldDefs(AFieldDefs: TFieldDefs); +var + FldCount : word; + i : integer; +begin + + if not RecognizeStream(Stream) then + DatabaseError(SStreamNotRecognised); + + FldCount:=Stream.ReadWord; + AFieldDefs.Clear; + for i := 0 to FldCount -1 do with TFieldDef.create(AFieldDefs) do + begin + Name := Stream.ReadAnsiString; + Displayname := Stream.ReadAnsiString; + Size := Stream.ReadWord; + DataType := TFieldType(Stream.ReadWord); + + if Stream.ReadByte = 1 then + Attributes := Attributes + [faReadonly]; + end; + +end; + +procedure TBinaryRxDatapacketReader.StoreFieldDefs(AFieldDefs: TFieldDefs); +var i : integer; +begin + Stream.Write(RxBinaryIdent[1],length(RxBinaryIdent)); + + Stream.WriteWord(AFieldDefs.Count); + for i := 0 to AFieldDefs.Count -1 do with AFieldDefs[i] do + begin + Stream.WriteAnsiString(Name); + Stream.WriteAnsiString(DisplayName); + Stream.WriteWord(size); + Stream.WriteWord(ord(DataType)); + + if faReadonly in Attributes then + Stream.WriteByte(1) + else + Stream.WriteByte(0); + end; + +end; + +function TBinaryRxDatapacketReader.GetRecordRowState(out AUpdOrder: Integer + ): TRowState; +var Buf : byte; +begin + Buf := 0; + AUpdOrder := 0; + + Stream.Read(Buf,1); + Result := ByteToRowState(Buf); + if Result<>[] then + Stream.ReadBuffer(AUpdOrder,sizeof(integer)); + +end; + +procedure TBinaryRxDatapacketReader.FinalizeStoreRecords; +begin +// Do nothing +end; + +function TBinaryRxDatapacketReader.GetCurrentRecord: boolean; +var + Buf : byte; +begin + Buf := 0; + Result := (Stream.Read(Buf,1)=1) and (Buf=$fe); +end; + +procedure TBinaryRxDatapacketReader.GotoNextRecord; +begin +// Do Nothing +end; + +procedure TBinaryRxDatapacketReader.InitLoadRecords; +begin +// Do Nothing +end; + +procedure TBinaryRxDatapacketReader.RestoreRecord(ADataset: TDataset); +begin + Stream.ReadBuffer(ADataset.ActiveBuffer^,ADataset.RecordSize); +end; + +procedure TBinaryRxDatapacketReader.StoreRecord(ADataset: TDataset; + ARowState: TRowState; AUpdOrder: integer); +begin + Stream.WriteByte($fe); + Stream.WriteByte(RowStateToByte(ARowState)); + if ARowState<>[] then + Stream.WriteBuffer(AUpdOrder,sizeof(integer)); + Stream.WriteBuffer(ADataset.ActiveBuffer^,ADataset.RecordSize); +end; + +class function TBinaryRxDatapacketReader.RecognizeStream(AStream: TStream + ): boolean; +var s : string; + len : integer; +begin + Len := length(RxBinaryIdent); + setlength(s,len); + if (AStream.Read (s[1],len) = len) + and (s=RxBinaryIdent) then + Result := True + else + Result := False; + +end; + +initialization + RegisterDatapacketReader(TBinaryRxDatapacketReader,dfBinary); +end. + diff --git a/components/rx/version/2.1/ex_rx_datapacket.pas b/components/rx/version/2.1/ex_rx_datapacket.pas new file mode 100644 index 000000000..65ad4be1c --- /dev/null +++ b/components/rx/version/2.1/ex_rx_datapacket.pas @@ -0,0 +1,139 @@ +unit ex_rx_datapacket; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils,db; + +type + TRowStateValue = (rsvOriginal, rsvDeleted, rsvInserted, rsvUpdated, rsvDetailUpdates); + TRowState = set of TRowStateValue; + +type + TRxDataPacketFormat = (dfBinary,dfXML,dfXMLUTF8,dfAny); + +type + + { TRxDatapacketReader } + + TRxDatapacketReaderClass = class of TRxDatapacketReader; + TRxDatapacketReader = class(TObject) + FStream : TStream; + protected + class function RowStateToByte(const ARowState : TRowState) : byte; + class function ByteToRowState(const AByte : Byte) : TRowState; + public + constructor create(AStream : TStream); virtual; + // Load a dataset from stream: + // Load the field-definitions from a stream. + procedure LoadFieldDefs(AFieldDefs : TFieldDefs); virtual; abstract; + // Is called before the records are loaded + procedure InitLoadRecords; virtual; abstract; + // Return the RowState of the current record, and the order of the update + function GetRecordRowState(out AUpdOrder : Integer) : TRowState; virtual; abstract; + // Returns if there is at least one more record available in the stream + function GetCurrentRecord : boolean; virtual; abstract; + // Store a record from stream in the current record-buffer + procedure RestoreRecord(ADataset : TDataset); virtual; abstract; + // Move the stream to the next record + procedure GotoNextRecord; virtual; abstract; + + // Store a dataset to stream: + // Save the field-definitions to a stream. + procedure StoreFieldDefs(AFieldDefs : TFieldDefs); virtual; abstract; + // Save a record from the current record-buffer to the stream + procedure StoreRecord(ADataset : TDataset; ARowState : TRowState; AUpdOrder : integer = 0); virtual; abstract; + // Is called after all records are stored + procedure FinalizeStoreRecords; virtual; abstract; + // Checks if the provided stream is of the right format for this class + class function RecognizeStream(AStream : TStream) : boolean; virtual; abstract; + property Stream: TStream read FStream; + end; + +type + TRxDatapacketReaderRegistration = record + ReaderClass : TRxDatapacketReaderClass; + Format : TRxDatapacketFormat; + end; + +function GetRegisterDatapacketReader(AStream : TStream; AFormat : TRxDatapacketFormat; var ADataReaderClass : TRxDatapacketReaderRegistration) : boolean; +procedure RegisterDatapacketReader(ADatapacketReaderClass : TRxDatapacketReaderClass; AFormat : TRxDatapacketFormat); + +implementation + +var + RxRegisteredDatapacketReaders : Array of TRxDatapacketReaderRegistration; + + +function GetRegisterDatapacketReader(AStream: TStream; + AFormat: TRxDatapacketFormat; + var ADataReaderClass: TRxDatapacketReaderRegistration): boolean; +var i : integer; +begin + Result := False; + for i := 0 to length(RxRegisteredDatapacketReaders)-1 do if ((AFormat=dfAny) or (AFormat=RxRegisteredDatapacketReaders[i].Format)) then + begin + + if (AStream <> nil) then + AStream.Seek(0,soFromBeginning); // ensure at start of stream to check value + + if (AStream=nil) or (RxRegisteredDatapacketReaders[i].ReaderClass.RecognizeStream(AStream)) then + begin + ADataReaderClass := RxRegisteredDatapacketReaders[i]; + Result := True; + if (AStream <> nil) then + AStream.Seek(0,soFromBeginning); + break; + end; + end; +end; + +procedure RegisterDatapacketReader( + ADatapacketReaderClass: TRxDatapacketReaderClass; AFormat: TRxDatapacketFormat + ); +begin + setlength(RxRegisteredDatapacketReaders,length(RxRegisteredDatapacketReaders)+1); + with RxRegisteredDatapacketReaders[length(RxRegisteredDatapacketReaders)-1] do + begin + Readerclass := ADatapacketReaderClass; + Format := AFormat; + end; +end; + +{ TRxDatapacketReader } + +class function TRxDatapacketReader.RowStateToByte(const ARowState: TRowState + ): byte; +var RowStateInt : Byte; +begin + RowStateInt:=0; + if rsvOriginal in ARowState then RowStateInt := RowStateInt+1; + if rsvDeleted in ARowState then RowStateInt := RowStateInt+2; + if rsvInserted in ARowState then RowStateInt := RowStateInt+4; + if rsvUpdated in ARowState then RowStateInt := RowStateInt+8; + Result := RowStateInt; +end; + +class function TRxDatapacketReader.ByteToRowState(const AByte: Byte + ): TRowState; +begin + result := []; + if (AByte and 1)=1 then Result := Result+[rsvOriginal]; + if (AByte and 2)=2 then Result := Result+[rsvDeleted]; + if (AByte and 4)=4 then Result := Result+[rsvInserted]; + if (AByte and 8)=8 then Result := Result+[rsvUpdated]; +end; + +constructor TRxDatapacketReader.create(AStream: TStream); +begin + FStream := AStream; +end; + +initialization + setlength(RxRegisteredDatapacketReaders,0); +finalization + setlength(RxRegisteredDatapacketReaders,0); +end. + diff --git a/components/rx/version/2.1/ex_rx_xml_datapacket.pas b/components/rx/version/2.1/ex_rx_xml_datapacket.pas new file mode 100644 index 000000000..f07150ea6 --- /dev/null +++ b/components/rx/version/2.1/ex_rx_xml_datapacket.pas @@ -0,0 +1,405 @@ +{ + TXMLRxDatapacketReader implementation + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} + +unit ex_rx_xml_datapacket; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, dom, db, ex_rx_datapacket; + +type + TChangeLogEntry = record + UpdateKind : TUpdateKind; + OrigEntry : integer; + NewEntry : integer; + end; + TChangeLogEntryArr = array of TChangeLogEntry; + +type + { TXMLRxDatapacketReader } + + TXMLRxDatapacketReader = class(TRxDataPacketReader) + XMLDocument : TXMLDocument; + DataPacketNode : TDOMElement; + MetaDataNode : TDOMNode; + FieldsNode : TDOMNode; + FChangeLogNode, + FParamsNode, + FRowDataNode, + FRecordNode : TDOMNode; + FChangeLog : TChangeLogEntryArr; + FEntryNr : integer; + FLastChange : integer; + public + destructor destroy; override; + procedure StoreFieldDefs(AFieldDefs : TFieldDefs); override; + procedure StoreRecord(ADataset : TDataset; ARowState : TRowState; AUpdOrder : integer = 0); override; + procedure FinalizeStoreRecords; override; + procedure LoadFieldDefs(AFieldDefs : TFieldDefs); override; + procedure InitLoadRecords; override; + function GetCurrentRecord : boolean; override; + function GetRecordRowState(out AUpdOrder : Integer) : TRowState; override; + procedure RestoreRecord(ADataset : TDataset); override; + procedure GotoNextRecord; override; + class function RecognizeStream(AStream : TStream) : boolean; override; + end; + +implementation + +uses xmlwrite, xmlread, rxdconst; + +const + XMLFieldtypenames : Array [TFieldType] of String[15] = + ( + 'Unknown', + 'string', + 'i2', + 'i4', + 'i4', + 'boolean', + 'r8', + 'r8', + 'fixed', + 'date', + 'time', + 'datetime', + 'bin.hex', + 'bin.hex', + 'i4', + 'bin.hex', + 'bin.hex', + 'bin.hex', + 'bin.hex', + 'bin.hex', + 'bin.hex', + 'bin.hex', + '', + 'string', + 'string', + 'i8', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '' + ); + + +{ TXMLRxDatapacketReader } + +destructor TXMLRxDatapacketReader.destroy; +begin + FieldsNode.Free; + MetaDataNode.Free; + DataPacketNode.Free; + XMLDocument.Free; + inherited destroy; +end; + +// Actually does a lot more than just loading the field defs... +procedure TXMLRxDatapacketReader.LoadFieldDefs(AFieldDefs : TFieldDefs); + + function GetNodeAttribute(const aNode : TDOMNode; AttName : String) : string; + var AnAttr : TDomNode; + begin + AnAttr := ANode.Attributes.GetNamedItem(AttName); + if assigned(AnAttr) then result := AnAttr.NodeValue + else result := ''; + end; + +var i : integer; + AFieldDef : TFieldDef; + iFieldType : TFieldType; + FTString : string; + AFieldNode : TDOMNode; + bLoadFieldDefs : Boolean; + +begin + + // if we already have field defs then don't reload from the file + bLoadFieldDefs := (AFieldDefs.Count = 0); + + + ReadXMLFile(XMLDocument,Stream); + DataPacketNode := XMLDocument.FindNode('DATAPACKET') as TDOMElement; + if not assigned(DataPacketNode) then DatabaseError(sUnknownXMLDatasetFormat); + + MetaDataNode := DataPacketNode.FindNode('METADATA'); + if not assigned(MetaDataNode) then DatabaseError(sUnknownXMLDatasetFormat); + + FieldsNode := MetaDataNode.FindNode('FIELDS'); + if not assigned(FieldsNode) then DatabaseError(sUnknownXMLDatasetFormat); + + if bLoadFieldDefs then + begin + with FieldsNode.ChildNodes do for i := 0 to Count - 1 do + begin + AFieldNode := item[i]; + if AFieldNode.CompareName('FIELD')=0 then + begin + AFieldDef := TFieldDef.create(AFieldDefs); + AFieldDef.DisplayName:=GetNodeAttribute(AFieldNode,'fieldname'); + AFieldDef.Name:=GetNodeAttribute(AFieldNode,'attrname'); + AFieldDef.Size:=StrToIntDef(GetNodeAttribute(AFieldNode,'width'),0); + FTString:=GetNodeAttribute(AFieldNode,'fieldtype'); + + AFieldDef.DataType:=ftUnknown; + for iFieldType:=low(TFieldType) to high(TFieldType) do + if SameText(XMLFieldtypenames[iFieldType],FTString) then + begin + AFieldDef.DataType:=iFieldType; + break; + end; + end; + end; + end; + + FChangeLogNode := MetaDataNode.FindNode('PARAMS'); + if assigned(FChangeLogNode) then + FChangeLogNode := FChangeLogNode.Attributes.GetNamedItem('CHANGE_LOG'); + + FRowDataNode := DataPacketNode.FindNode('ROWDATA'); + FRecordNode := nil; +end; + +procedure TXMLRxDatapacketReader.StoreFieldDefs(AFieldDefs: TFieldDefs); + +var i : integer; + AFieldNode : TDOMElement; + +begin + XMLDocument := TXMLDocument.Create; + DataPacketNode := XMLDocument.CreateElement('DATAPACKET'); + DataPacketNode.SetAttribute('Version','2.0'); + + MetaDataNode := XMLDocument.CreateElement('METADATA'); + FieldsNode := XMLDocument.CreateElement('FIELDS'); + + for i := 0 to AFieldDefs.Count -1 do with AFieldDefs[i] do + begin + AFieldNode := XMLDocument.CreateElement('FIELD'); + if Name <> '' then AFieldNode.SetAttribute('fieldname',Name); + AFieldNode.SetAttribute('attrname',DisplayName); + if size <> 0 then AFieldNode.SetAttribute('width',IntToStr(Size)); + AFieldNode.SetAttribute('fieldtype',XMLFieldtypenames[DataType]); + case DataType of + ftAutoInc : begin + AFieldNode.SetAttribute('readonly','true'); + AFieldNode.SetAttribute('subtype','Autoinc'); + end; + ftCurrency: AFieldNode.SetAttribute('subtype','Money'); + ftVarBytes, + ftBlob : AFieldNode.SetAttribute('subtype','Binary'); + ftMemo : AFieldNode.SetAttribute('subtype','Text'); + ftTypedBinary, + ftGraphic: AFieldNode.SetAttribute('subtype','Graphics'); + ftFmtMemo : AFieldNode.SetAttribute('subtype','Formatted'); + ftParadoxOle, + ftDBaseOle : AFieldNode.SetAttribute('subtype','Ole'); + end; {case} + if faReadonly in Attributes then AFieldNode.SetAttribute('readonly','true'); + + FieldsNode.AppendChild(AFieldNode); + end; + + MetaDataNode.AppendChild(FieldsNode); + FParamsNode := XMLDocument.CreateElement('PARAMS'); + MetaDataNode.AppendChild(FParamsNode); + DataPacketNode.AppendChild(MetaDataNode); + FRowDataNode := XMLDocument.CreateElement('ROWDATA'); + setlength(FChangeLog,0); + FEntryNr:=0; + FLastChange:=-1; +end; + +procedure TXMLRxDatapacketReader.FinalizeStoreRecords; +var ChangeLogStr : String; + i : integer; +begin + ChangeLogStr:=''; + for i := 0 to length(FChangeLog)-1 do with FChangeLog[i] do + begin + ChangeLogStr:=ChangeLogStr+' '+inttostr(NewEntry)+' '+inttostr(OrigEntry)+' '; + if UpdateKind=ukModify then ChangeLogStr := ChangeLogStr+'8'; + if UpdateKind=ukInsert then ChangeLogStr := ChangeLogStr+'4'; + if UpdateKind=ukDelete then ChangeLogStr := ChangeLogStr+'2'; + end; + setlength(FChangeLog,0); + + if ChangeLogStr<>'' then + (FParamsNode as TDomElement).SetAttribute('CHANGE_LOG',Trim(ChangeLogStr)); + + DataPacketNode.AppendChild(FRowDataNode); + XMLDocument.AppendChild(DataPacketNode); + + WriteXML(XMLDocument,Stream); +end; + +function TXMLRxDatapacketReader.GetCurrentRecord: boolean; +begin + Result := assigned(FRecordNode); +end; + +function TXMLRxDatapacketReader.GetRecordRowState(out AUpdOrder: Integer + ): TRowState; +var ARowStateNode : TDOmNode; + ARowState : integer; + i : integer; +begin + ARowStateNode := FRecordNode.Attributes.GetNamedItem('RowState'); + if ARowStateNode = nil then // This item is not edited + Result := [] + else + begin + Result := ByteToRowState(StrToIntDef(ARowStateNode.NodeValue,0)); + if Result = [rsvOriginal] then + begin + for i := 0 to length(FChangeLog)-1 do + if FChangeLog[i].NewEntry=FEntryNr then break; + assert(FChangeLog[i].NewEntry=FEntryNr); + end + else + begin + for i := 0 to length(FChangeLog)-1 do + if FChangeLog[i].OrigEntry=FEntryNr then break; + assert(FChangeLog[i].OrigEntry=FEntryNr); + end; + AUpdOrder:=i; + end; +end; + +procedure TXMLRxDatapacketReader.InitLoadRecords; + +var ChangeLogStr : String; + i,cp : integer; + ps : string; + +begin + FRecordNode := FRowDataNode.FirstChild; + FEntryNr := 1; + setlength(FChangeLog,0); + if assigned(FChangeLogNode) then + ChangeLogStr:=FChangeLogNode.NodeValue + else + ChangeLogStr:=''; + ps := ''; + cp := 0; + if ChangeLogStr<>'' then for i := 1 to length(ChangeLogStr)+1 do + begin + if not (ChangeLogStr[i] in [' ',#0]) then + ps := ps + ChangeLogStr[i] + else + begin + case (cp mod 3) of + 0 : begin + SetLength(FChangeLog,length(FChangeLog)+1); + FChangeLog[cp div 3].OrigEntry:=StrToIntDef(ps,0); + end; + 1 : FChangeLog[cp div 3].NewEntry:=StrToIntDef(ps,0); + 2 : begin + if ps = '2' then + FChangeLog[cp div 3].UpdateKind:=ukDelete + else if ps = '4' then + FChangeLog[cp div 3].UpdateKind:=ukInsert + else if ps = '8' then + FChangeLog[cp div 3].UpdateKind:=ukModify; + end; + end; {case} + ps := ''; + inc(cp); + end; + end; +end; + +procedure TXMLRxDatapacketReader.RestoreRecord(ADataset : TDataset); +var FieldNr : integer; + AFieldNode : TDomNode; +begin + with ADataset do for FieldNr:=0 to FieldCount-1 do + begin + AFieldNode := FRecordNode.Attributes.GetNamedItem(Fields[FieldNr].FieldName); + if assigned(AFieldNode) then + begin + Fields[FieldNr].AsString := AFieldNode.NodeValue; // set it to the filterbuffer + end + end; +end; + +procedure TXMLRxDatapacketReader.StoreRecord(ADataset : TDataset; ARowState : TRowState; AUpdOrder : integer = 0); +var FieldNr : Integer; + ARecordNode : TDOMElement; +begin + inc(FEntryNr); + ARecordNode := XMLDocument.CreateElement('ROW'); + for FieldNr := 0 to ADataset.Fields.Count-1 do + begin + ARecordNode.SetAttribute(ADataset.fields[FieldNr].FieldName,ADataset.fields[FieldNr].AsString); + end; + if ARowState<>[] then + begin + ARecordNode.SetAttribute('RowState',inttostr(RowStateToByte(ARowState))); + if AUpdOrder>=length(FChangeLog) then + setlength(FChangeLog,AUpdOrder+1); + if (rsvOriginal in ARowState) or (rsvDeleted in ARowState) then + FChangeLog[AUpdOrder].OrigEntry:=FEntryNr; + if (rsvDeleted in ARowState) or (rsvUpdated in ARowState) or (rsvInserted in ARowState) then + FChangeLog[AUpdOrder].NewEntry:=FEntryNr; + if ARowState=[rsvUpdated] then + FChangeLog[AUpdOrder].UpdateKind := ukModify; + if ARowState=[rsvInserted] then + FChangeLog[AUpdOrder].UpdateKind := ukInsert; + if ARowState=[rsvDeleted] then + FChangeLog[AUpdOrder].UpdateKind := ukDelete; + end; + FRowDataNode.AppendChild(ARecordNode); +end; + +class function TXMLRxDatapacketReader.RecognizeStream(AStream: TStream): boolean; +const XmlStart = '<?xml'; +var s : string; + len : integer; +begin + Len := length(XmlStart); + setlength(s,len); + if (AStream.Read (s[1],len) = len) + and (s=XmlStart) then + Result := True + else + Result := False; +end; + +procedure TXMLRxDatapacketReader.GotoNextRecord; +begin + FRecordNode := FRecordNode.NextSibling; + inc(FEntryNr); + while assigned(FRecordNode) and (FRecordNode.CompareName('ROW')<>0) do + FRecordNode := FRecordNode.NextSibling; +end; + +initialization + RegisterDatapacketReader(TXMLRxDatapacketReader,dfXML); +end. + +end. + diff --git a/components/rx/version/2.1/exsortfb.pas b/components/rx/version/2.1/exsortfb.pas new file mode 100644 index 000000000..eb0cba3f6 --- /dev/null +++ b/components/rx/version/2.1/exsortfb.pas @@ -0,0 +1,107 @@ +{ RxDBGrid sort engine module for FBDataSet + + Copyright (C) 2009 Lagunov Aleksey alexs75@hotbox.ru + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit exsortfb; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, DB, + {$IFDEF FPC} + RxDBGrid + {$ELSE} + exDBGrid + {$ENDIF} + ; + +type + + { TFBDataSetSortEngine } + + TFBDataSetSortEngine = class(TRxDBGridSortEngine) + protected + procedure UpdateFooterRows(ADataSet:TDataSet; AGrid:TRxDBGrid);override; + function EnabledFooterRowsCalc:boolean;override; + public + procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; + procedure SortList(ListField:string; ADataSet:TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions);override; + end; + +implementation +uses FBCustomDataSet; + +type + THackFBDataSet = class(TFBDataSet); + THackRxColumnFooter = class(TRxColumnFooter); + +procedure TFBDataSetSortEngine.UpdateFooterRows(ADataSet: TDataSet; + AGrid: TRxDBGrid); +var + i,j:integer; + Col:TRxColumn; +begin + if not Assigned(ADataSet) then exit; + + for i:=0 to ADataSet.RecordCount-1 do + begin + for j:=0 to AGrid.Columns.Count-1 do + begin + Col:=TRxColumn(AGrid.Columns[j]); + if THackRxColumnFooter(Col.Footer).ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + THackRxColumnFooter(Col.Footer).UpdateTestValueFromVar( THackFBDataSet(ADataSet).GetAnyRecField(i, ADataSet.FieldByName(Col.Footer.FieldName))); + end; + end; +end; + +function TFBDataSetSortEngine.EnabledFooterRowsCalc: boolean; +begin + Result:=true; +end; + +procedure TFBDataSetSortEngine.Sort(Field: TField; ADataSet: TDataSet; + Asc: boolean; SortOptions: TRxSortEngineOptions); +begin + if Assigned(ADataSet) then + (ADataSet as TFBDataSet).SortOnField(Field.FieldName, Asc); +end; + +procedure TFBDataSetSortEngine.SortList(ListField: string; ADataSet: TDataSet; + Asc: array of boolean; SortOptions: TRxSortEngineOptions); +begin + if Assigned(ADataSet) then + (ADataSet as TFBDataSet).SortOnFields(ListField, Asc); +end; + +initialization + RegisterRxDBGridSortEngine(TFBDataSetSortEngine, 'TFBDataSet'); +end. + diff --git a/components/rx/version/2.1/exsortmds.pas b/components/rx/version/2.1/exsortmds.pas new file mode 100644 index 000000000..20196ccf0 --- /dev/null +++ b/components/rx/version/2.1/exsortmds.pas @@ -0,0 +1,186 @@ +unit exsortmds; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, DB, RxDBGrid; + +type + TMemDataSetSortEngine = class(TExDBGridSortEngine) + public + procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean);override; + end; + +implementation +uses memds; + +type + THackMDS = class(TMemDataSet) + end; + +procedure TMemDataSetSortEngine.Sort(Field:TField; ADataSet:TDataSet; Asc:boolean); +var + MS:TMemoryStream; + V, FRecSize, FRecCount, I, J:integer; + BufOrign, BufTest:PChar; + PI, PJ:PInteger; + S1:string; + R1:Double; + I1:integer; + B1:boolean; + D1:TDateTime; + + +function DoExch:boolean; +begin + Result:=false; + ADataSet.RecNo:=J+1; + if Asc then + begin + case Field.DataType of + ftFixedChar, + ftWideString, + ftString:Result:=S1 > Field.AsString; + + ftBoolean:Result:=B1 > Field.AsBoolean; + + ftInteger, + ftWord, + ftSmallint, + ftAutoInc, + ftLargeint: + begin + Result:=I1 > Field.AsInteger; +// writeln('I1=', I1, ' I2=',Field.AsInteger,' Result=', Result, ' i=',i, ' j=',j); + end; + + ftFloat, + ftCurrency, + ftBCD:Result:=R1 > Field.AsFloat; + + ftDate, + ftTime, + ftDateTime, + ftTimeStamp:Result:=D1 > Field.AsFloat; + else + exit; + end; + end + else + begin + case Field.DataType of + ftFixedChar, + ftWideString, + ftString:Result:=S1 < Field.AsString; + + ftBoolean:Result:=B1 < Field.AsBoolean; + + ftInteger, + ftWord, + ftSmallint, + ftAutoInc, + ftLargeint:Result:=I1 < Field.AsInteger; + + ftFloat, + ftCurrency, + ftBCD:Result:=R1 < Field.AsFloat; + + ftDate, + ftTime, + ftDateTime, + ftTimeStamp:Result:=D1 < Field.AsFloat; + else + exit; + end; + end; +{ if not Asc then + Result:=not Result; + Result:=true;} +end; + +begin + if Assigned(ADataSet) then + begin + ADataSet.DisableControls; + MS:=TMemoryStream.Create; + BufOrign:=THackMDS(ADataSet).AllocRecordBuffer; + BufTest:=THackMDS(ADataSet).AllocRecordBuffer; + PI:=@I; + PJ:=@J; + try + THackMDS(ADataSet).SaveDataToStream(MS, true); + MS.Seek(0, soFromBeginning); + MS.Read(V, SizeOf(V)); // Marker + MS.Read(V, SizeOf(V)); // Size + FRecSize:=THackMDS(ADataSet).GetRecordSize; + FRecCount:=V div FRecSize; + for i:=0 to FRecCount-2 do + begin + MS.Seek(FRecSize*I + SizeOf(V)*2, soFromBeginning); + MS.Read(BufOrign^, FRecSize); + if i=0 then //fix error + ADataSet.First + else + ADataSet.RecNo:=I+1; + + case Field.DataType of + ftFixedChar, + ftWideString, + ftString:S1:=Field.AsString; + + ftBoolean:B1:=Field.AsBoolean; + + ftInteger, + ftWord, + ftSmallint, + ftAutoInc, + ftLargeint:I1:=Field.AsInteger; + + ftFloat, + ftCurrency, + ftBCD:R1:=Field.AsFloat; + + ftDate, + ftTime, + ftDateTime, + ftTimeStamp:D1:=Field.AsFloat; +{ else + exit;} + end; + + for j:=i+1 to FRecCount-1 do + begin + MS.Seek(FRecSize*j + SizeOf(V)*2, soFromBeginning); + MS.Read(BufTest^, FRecSize); + if DoExch then + begin + MS.Seek(FRecSize*j + SizeOf(V)*2, soFromBeginning); + MS.Write(BufOrign^, FRecSize); + Move(BufTest^, BufOrign^, FRecSize); + end; + end; + THackMDS(ADataSet).SetBookmarkData(BufOrign, @PI); + MS.Seek(FRecSize*I + SizeOf(V)*2, soFromBeginning); + MS.Write(BufOrign^, FRecSize); + MS.Seek(0, soFromBeginning); + THackMDS(ADataSet).LoadDataFromStream(MS); + end; +// (ADataSet as TFBDataSet).SortOnField(Field.FieldName, Asc);} + MS.Seek(0, soFromBeginning); + THackMDS(ADataSet).LoadDataFromStream(MS); + finally + THackMDS(ADataSet).FreeRecordBuffer(BufOrign); + THackMDS(ADataSet).FreeRecordBuffer(BufTest); + MS.Free; + ADataSet.EnableControls; + end; + THackMDS(ADataSet).First; + end; +end; + +initialization + RegisterExDBGridSortEngine(TMemDataSetSortEngine, TMemDataset); +end. + diff --git a/components/rx/version/2.1/exsortsql.pas b/components/rx/version/2.1/exsortsql.pas new file mode 100644 index 000000000..37c7c0ad6 --- /dev/null +++ b/components/rx/version/2.1/exsortsql.pas @@ -0,0 +1,134 @@ +{ RxDBGrid sort engine module for FBDataSet + + Copyright (C) 2011 BugMaker from freepascal.ru + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit exsortsql; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, DB, RxDBGrid; + +type + + { TSQLQuerySortEngine } + + TSQLQuerySortEngine = class(TRxDBGridSortEngine) + public + procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; + procedure SortList(ListField: string; ADataSet: TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions); override; + end; + +implementation +uses SQLDB, synRegExpr, strUtils; + + +procedure TSQLQuerySortEngine.Sort(Field: TField; ADataSet: TDataSet; + Asc: boolean; SortOptions: TRxSortEngineOptions); +begin + SortList(Field.FieldName,ADataSet,Asc,SortOptions); +end; + +procedure TSQLQuerySortEngine.SortList(ListField: string; ADataSet: TDataSet; + Asc: array of boolean; SortOptions: TRxSortEngineOptions); +var + S:string; + i, C:integer; + cmd:string; + strLen:Integer; + RegExpr: TRegExpr; + Mask:String; + OldParams:TParams; +begin + if not (Assigned(ADataSet) and ADataset.Active) then exit; + + S:=''; + C:=Pos(';', ListField); + i:=0; + while C>0 do + begin + if S<>'' then S:=S+','; + S:=S + Copy(ListField, 1, C-1); + Delete(ListField, 1, C); + + if (i<=High(Asc)) and (not Asc[i]) then + S:=S + ' DESC'; + C:=Pos(';', ListField); + inc(i); + end; + + if ListField<>'' then + begin + if S<>'' then S:=S+','; + S:=S + ListField; + if (i<=High(Asc)) and (not Asc[i]) then + S:=S + ' DESC'; + end; + + OldParams:=TParams.Create; + OldParams.Assign((ADataSet as TSQLQuery).Params); + cmd:=(ADataSet as TSQLQuery).SQL.Text; + strlen:=length(cmd); + //РегулÑрное выражение позволÑет найти уже имеющуюÑÑ ÐºÐ¾Ð½Ñтрукцию ORDER BY, + //еÑли она напиÑана одной Ñтрокой, и между Ñловами не понапихали комментариев :) + //РаботоÑпоÑобные примеры: + //ORDER BY FIELD1, FIELD2 DESC, FIELD100500 + //oRdeR bY fielD1 , FiElD2,FieLD100500 DESC + //ÐеработоÑпоÑобный: + //ORDER BY FIELD1, + //FIELD2, + //FIELD100500 + mask:='(?i)(^|\s)\s*order\s+by\s+\S+\.?\S*(\s+desc)?\s*(,\s*\S+\.?\S*(\s+desc)?(^|s*))*'; + with TRegExpr.Create do begin + + Expression := mask; + if Exec(cmd) then begin + s:=LeftStr(cmd,MatchPos[0]-1) + +slinebreak+'order by ' + +s+slineBreak + +RightStr(cmd, strlen-MatchPos[0]-MatchLen[0]+1); + end + else + s:=cmd+slinebreak+'order by '+s+slineBreak; + + ADataSet.Active:=False; + (ADataSet as TSQLQuery).SQL.Text:=s; + (ADataSet as TSQLQuery).Params.Assign(OldParams); + OldParams.Free; + ADataSet.Active:=True; + Free; + end; + +end; + +initialization + RegisterRxDBGridSortEngine(TSQLQuerySortEngine, 'TSQLQuery'); +end. diff --git a/components/rx/version/2.1/exsortzeos.pas b/components/rx/version/2.1/exsortzeos.pas new file mode 100644 index 000000000..591941149 --- /dev/null +++ b/components/rx/version/2.1/exsortzeos.pas @@ -0,0 +1,174 @@ +unit exsortzeos; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, DB, RxDBGrid, ZConnection, ZDataset, ZAbstractDataset, ZAbstractRODataset; + +type + + { TZeosDataSetSortEngine } + + TZeosDataSetSortEngine = class(TRxDBGridSortEngine) + protected + procedure UpdateFooterRows(ADataSet:TDataSet; AGrid:TRxDBGrid);override; + function EnabledFooterRowsCalc:boolean;override; + public + procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; + procedure SortList(ListField: string; ADataSet: TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions); override; + end; + +implementation +uses ZDbcIntfs, ZVariant; + +type + THackZeosDS = class(TZAbstractRODataset); + THackRxColumnFooter = class(TRxColumnFooter); + + THackDataLink = class(TDataLink); + THackDataSet = class(TDataSet); + THackRxDBGrid = class(TRxDBGrid); + +procedure TZeosDataSetSortEngine.UpdateFooterRows(ADataSet: TDataSet; + AGrid: TRxDBGrid); +var + RS:IZResultSet; + CurRow, i:integer; + Col:TRxColumn; + + DHL:THackDataLink; + DHS:THackDataSet; + SaveState:TDataSetState; + SavePos:integer; + SaveActiveRecord:integer; + + SaveAfterScroll:TDataSetNotifyEvent; + SaveBeforeScroll:TDataSetNotifyEvent; +begin + if not Assigned(ADataSet) then exit; + if not Assigned(AGrid) then + begin + SavePos:=SavePos; + exit; + end; + DHL:=THackDataLink(THackRxDBGrid(AGrid).Datalink); + DHS:=THackDataSet(ADataSet); + SaveState:=DHS.SetTempState(dsBrowse); + + SaveAfterScroll:=ADataSet.AfterScroll; + SaveBeforeScroll:=ADataSet.BeforeScroll; + ADataSet.AfterScroll:=nil; + ADataSet.BeforeScroll:=nil; + + SaveActiveRecord:=DHL.ActiveRecord; + DHL.ActiveRecord:=0; + SavePos:=ADataSet.RecNo; + + + ADataSet.First; + while not ADataSet.EOF do + begin + + for i:=0 to AGrid.Columns.Count-1 do + begin + Col:=TRxColumn(AGrid.Columns[i]); + if THackRxColumnFooter(Col.Footer).ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + THackRxColumnFooter(Col.Footer).UpdateTestValueFromVar( ADataSet.FieldByName(Col.Footer.FieldName).Value); + end; + + ADataSet.Next; + end; + + DHS.RecNo := DHL.RecordCount + SavePos + 1; + + while not ADataSet.BOF do + begin + if SavePos = ADataSet.RecNo then + break; + ADataSet.Prior; + end; + + DHL.ActiveRecord:=SaveActiveRecord; + DHS.RestoreState(SaveState); + + ADataSet.AfterScroll := SaveAfterScroll; + ADataSet.BeforeScroll := SaveBeforeScroll; +{ RS:=THackZeosDS(ADataSet).ResultSet; + CurRow:=RS.GetRow; + RS.First; +// while not RS.IsLast do + while not RS.IsAfterLast do + begin + for i:=0 to AGrid.Columns.Count-1 do + begin + Col:=TRxColumn(AGrid.Columns[i]); + if THackRxColumnFooter(Col.Footer).ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + THackRxColumnFooter(Col.Footer).UpdateTestValueFromVar(EncodeVariant(RS.GetValueByName(Col.FieldName))); + end; + RS.Next; + end; + RS.MoveAbsolute(CurRow);} +end; + +function TZeosDataSetSortEngine.EnabledFooterRowsCalc: boolean; +begin + Result:=true; +end; + +procedure TZeosDataSetSortEngine.Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions); +begin + if not Assigned(ADataSet) then exit; + if ADataSet is TZAbstractDataset then + begin + TZAbstractDataset(ADataSet).SortedFields:=Field.FieldName; + if Asc then + TZAbstractDataset(ADataSet).SortType:=stAscending + else + TZAbstractDataset(ADataSet).SortType:=stDescending; + end; +end; + +procedure TZeosDataSetSortEngine.SortList(ListField: string; + ADataSet: TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions); +var + S:string; + i, C:integer; +begin + if not Assigned(ADataSet) then exit; + + S:=''; + C:=Pos(';', ListField); + i:=0; + while C>0 do + begin + if S<>'' then S:=S+';'; + S:=S + Copy(ListField, 1, C-1); + Delete(ListField, 1, C); + + if (i<=High(Asc)) and (not Asc[i]) then + S:=S + ' DESC'; + C:=Pos(';', ListField); + inc(i); + end; + + if ListField<>'' then + begin + if S<>'' then S:=S+';'; + S:=S + ListField; + if (i<=High(Asc)) and (not Asc[i]) then + S:=S + ' DESC'; + end; + + (ADataSet as TZAbstractRODataset).SortedFields:=S; +end; + + +initialization + RegisterRxDBGridSortEngine(TZeosDataSetSortEngine, 'TZReadOnlyQuery'); + RegisterRxDBGridSortEngine(TZeosDataSetSortEngine, 'TZQuery'); + RegisterRxDBGridSortEngine(TZeosDataSetSortEngine, 'TZTable'); + RegisterRxDBGridSortEngine(TZeosDataSetSortEngine, 'TZMacroQuery'); +end. + diff --git a/components/rx/version/2.1/fduallst.lfm b/components/rx/version/2.1/fduallst.lfm new file mode 100644 index 000000000..1630d2c8d --- /dev/null +++ b/components/rx/version/2.1/fduallst.lfm @@ -0,0 +1,175 @@ +object DualListForm: TDualListForm + Left = 451 + Height = 344 + Top = 264 + Width = 552 + ActiveControl = IncBtn + BorderIcons = [] + Caption = 'DualListForm' + ClientHeight = 344 + ClientWidth = 552 + OnActivate = ListClick + OnShow = ListClick + Position = poScreenCenter + LCLVersion = '0.9.29' + object SrcLabel: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 18 + Top = 6 + Width = 50 + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + Caption = 'Source' + ParentColor = False + end + object DstLabel: TLabel + AnchorSideLeft.Control = DstList + AnchorSideTop.Control = Owner + Left = 304 + Height = 18 + Top = 6 + Width = 34 + BorderSpacing.Top = 6 + Caption = 'Dest' + ParentColor = False + end + object SrcList: TListBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = SrcLabel + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = IncAllBtn + AnchorSideBottom.Control = ButtonPanel1 + Left = 6 + Height = 262 + Top = 30 + Width = 242 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + ItemHeight = 0 + MultiSelect = True + OnClick = ListClick + OnDblClick = IncBtnClick + OnKeyDown = SrcListKeyDown + ParentShowHint = False + ShowHint = True + Sorted = True + TabOrder = 0 + TopIndex = -1 + end + object DstList: TListBox + AnchorSideLeft.Control = IncAllBtn + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = DstLabel + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = ButtonPanel1 + Left = 304 + Height = 262 + Top = 30 + Width = 242 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + ItemHeight = 0 + MultiSelect = True + OnClick = ListClick + OnDblClick = ExclBtnClick + OnKeyDown = DstListKeyDown + ParentShowHint = False + ShowHint = True + Sorted = True + TabOrder = 5 + TopIndex = -1 + end + object IncBtn: TButton + AnchorSideLeft.Control = IncAllBtn + AnchorSideTop.Control = SrcList + AnchorSideRight.Control = IncAllBtn + AnchorSideRight.Side = asrBottom + Left = 254 + Height = 37 + Top = 36 + Width = 44 + Anchors = [akTop, akLeft, akRight] + AutoSize = True + BorderSpacing.Top = 6 + BorderSpacing.InnerBorder = 4 + Caption = '>' + Font.Color = clBlack + Font.Style = [fsBold] + OnClick = IncBtnClick + ParentFont = False + TabOrder = 1 + end + object IncAllBtn: TButton + AnchorSideLeft.Control = Owner + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = IncBtn + AnchorSideTop.Side = asrBottom + Left = 254 + Height = 37 + Top = 79 + Width = 44 + AutoSize = True + BorderSpacing.Top = 6 + BorderSpacing.InnerBorder = 4 + Caption = '>>' + Font.Color = clBlack + Font.Style = [fsBold] + OnClick = IncAllBtnClick + ParentFont = False + TabOrder = 2 + end + object ExclBtn: TButton + AnchorSideLeft.Control = IncAllBtn + AnchorSideTop.Control = IncAllBtn + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = IncAllBtn + AnchorSideRight.Side = asrBottom + Left = 254 + Height = 37 + Top = 122 + Width = 44 + Anchors = [akTop, akLeft, akRight] + AutoSize = True + BorderSpacing.Top = 6 + BorderSpacing.InnerBorder = 4 + Caption = '<' + Font.Color = clBlack + Font.Style = [fsBold] + OnClick = ExclBtnClick + ParentFont = False + TabOrder = 3 + end + object ExclAllBtn: TButton + AnchorSideLeft.Control = IncAllBtn + AnchorSideTop.Control = ExclBtn + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = IncAllBtn + AnchorSideRight.Side = asrBottom + Left = 254 + Height = 37 + Top = 165 + Width = 44 + Anchors = [akTop, akLeft, akRight] + AutoSize = True + BorderSpacing.Top = 6 + BorderSpacing.InnerBorder = 4 + Caption = '<<' + Font.Color = clBlack + Font.Style = [fsBold] + OnClick = ExclAllBtnClick + ParentFont = False + TabOrder = 4 + end + object ButtonPanel1: TButtonPanel + Left = 6 + Height = 40 + Top = 298 + Width = 540 + TabOrder = 6 + ShowButtons = [pbOK, pbCancel, pbHelp] + end +end diff --git a/components/rx/version/2.1/fduallst.lrs b/components/rx/version/2.1/fduallst.lrs new file mode 100644 index 000000000..fd0583630 --- /dev/null +++ b/components/rx/version/2.1/fduallst.lrs @@ -0,0 +1,61 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TDualListForm','FORMDATA',[ + 'TPF0'#13'TDualListForm'#12'DualListForm'#4'Left'#3#195#1#6'Height'#3'X'#1#3 + +'Top'#3#8#1#5'Width'#3'('#2#13'ActiveControl'#7#6'IncBtn'#11'BorderIcons'#11 + +#0#7'Caption'#6#12'DualListForm'#12'ClientHeight'#3'X'#1#11'ClientWidth'#3'(' + +#2#10'OnActivate'#7#9'ListClick'#6'OnShow'#7#9'ListClick'#8'Position'#7#14'p' + +'oScreenCenter'#10'LCLVersion'#6#6'0.9.29'#0#6'TLabel'#8'SrcLabel'#22'Anchor' + +'SideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#2 + +#6#6'Height'#2#18#3'Top'#2#6#5'Width'#2'2'#18'BorderSpacing.Left'#2#6#17'Bor' + +'derSpacing.Top'#2#6#7'Caption'#6#6'Source'#11'ParentColor'#8#0#0#6'TLabel'#8 + +'DstLabel'#22'AnchorSideLeft.Control'#7#7'DstList'#21'AnchorSideTop.Control' + +#7#5'Owner'#4'Left'#3'0'#1#6'Height'#2#18#3'Top'#2#6#5'Width'#2'"'#17'Border' + +'Spacing.Top'#2#6#7'Caption'#6#4'Dest'#11'ParentColor'#8#0#0#8'TListBox'#7'S' + +'rcList'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#8 + +'SrcLabel'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control' + +#7#9'IncAllBtn'#24'AnchorSideBottom.Control'#7#12'ButtonPanel1'#4'Left'#2#6#6 + +'Height'#3#6#1#3'Top'#2#30#5'Width'#3#242#0#7'Anchors'#11#5'akTop'#6'akLeft' + +#7'akRight'#8'akBottom'#0#20'BorderSpacing.Around'#2#6#10'ItemHeight'#2#0#11 + +'MultiSelect'#9#7'OnClick'#7#9'ListClick'#10'OnDblClick'#7#11'IncBtnClick'#9 + +'OnKeyDown'#7#14'SrcListKeyDown'#14'ParentShowHint'#8#8'ShowHint'#9#6'Sorted' + +#9#8'TabOrder'#2#0#8'TopIndex'#2#255#0#0#8'TListBox'#7'DstList'#22'AnchorSid' + +'eLeft.Control'#7#9'IncAllBtn'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'Anc' + +'horSideTop.Control'#7#8'DstLabel'#18'AnchorSideTop.Side'#7#9'asrBottom'#23 + +'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom' + +#24'AnchorSideBottom.Control'#7#12'ButtonPanel1'#4'Left'#3'0'#1#6'Height'#3#6 + +#1#3'Top'#2#30#5'Width'#3#242#0#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8 + +'akBottom'#0#20'BorderSpacing.Around'#2#6#10'ItemHeight'#2#0#11'MultiSelect' + +#9#7'OnClick'#7#9'ListClick'#10'OnDblClick'#7#12'ExclBtnClick'#9'OnKeyDown'#7 + +#14'DstListKeyDown'#14'ParentShowHint'#8#8'ShowHint'#9#6'Sorted'#9#8'TabOrde' + +'r'#2#5#8'TopIndex'#2#255#0#0#7'TButton'#6'IncBtn'#22'AnchorSideLeft.Control' + +#7#9'IncAllBtn'#21'AnchorSideTop.Control'#7#7'SrcList'#23'AnchorSideRight.Co' + +'ntrol'#7#9'IncAllBtn'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3#254 + +#0#6'Height'#2'%'#3'Top'#2'$'#5'Width'#2','#7'Anchors'#11#5'akTop'#6'akLeft' + +#7'akRight'#0#8'AutoSize'#9#17'BorderSpacing.Top'#2#6#25'BorderSpacing.Inner' + +'Border'#2#4#7'Caption'#6#1'>'#10'Font.Color'#7#7'clBlack'#10'Font.Style'#11 + +#6'fsBold'#0#7'OnClick'#7#11'IncBtnClick'#10'ParentFont'#8#8'TabOrder'#2#1#0 + +#0#7'TButton'#9'IncAllBtn'#22'AnchorSideLeft.Control'#7#5'Owner'#19'AnchorSi' + +'deLeft.Side'#7#9'asrCenter'#21'AnchorSideTop.Control'#7#6'IncBtn'#18'Anchor' + +'SideTop.Side'#7#9'asrBottom'#4'Left'#3#254#0#6'Height'#2'%'#3'Top'#2'O'#5'W' + +'idth'#2','#8'AutoSize'#9#17'BorderSpacing.Top'#2#6#25'BorderSpacing.InnerBo' + +'rder'#2#4#7'Caption'#6#2'>>'#10'Font.Color'#7#7'clBlack'#10'Font.Style'#11#6 + +'fsBold'#0#7'OnClick'#7#14'IncAllBtnClick'#10'ParentFont'#8#8'TabOrder'#2#2#0 + +#0#7'TButton'#7'ExclBtn'#22'AnchorSideLeft.Control'#7#9'IncAllBtn'#21'Anchor' + +'SideTop.Control'#7#9'IncAllBtn'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'An' + +'chorSideRight.Control'#7#9'IncAllBtn'#20'AnchorSideRight.Side'#7#9'asrBotto' + +'m'#4'Left'#3#254#0#6'Height'#2'%'#3'Top'#2'z'#5'Width'#2','#7'Anchors'#11#5 + +'akTop'#6'akLeft'#7'akRight'#0#8'AutoSize'#9#17'BorderSpacing.Top'#2#6#25'Bo' + +'rderSpacing.InnerBorder'#2#4#7'Caption'#6#1'<'#10'Font.Color'#7#7'clBlack' + +#10'Font.Style'#11#6'fsBold'#0#7'OnClick'#7#12'ExclBtnClick'#10'ParentFont'#8 + +#8'TabOrder'#2#3#0#0#7'TButton'#10'ExclAllBtn'#22'AnchorSideLeft.Control'#7#9 + +'IncAllBtn'#21'AnchorSideTop.Control'#7#7'ExclBtn'#18'AnchorSideTop.Side'#7#9 + +'asrBottom'#23'AnchorSideRight.Control'#7#9'IncAllBtn'#20'AnchorSideRight.Si' + +'de'#7#9'asrBottom'#4'Left'#3#254#0#6'Height'#2'%'#3'Top'#3#165#0#5'Width'#2 + +','#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'AutoSize'#9#17'BorderSpa' + +'cing.Top'#2#6#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#2'<<'#10'Font.' + +'Color'#7#7'clBlack'#10'Font.Style'#11#6'fsBold'#0#7'OnClick'#7#15'ExclAllBt' + +'nClick'#10'ParentFont'#8#8'TabOrder'#2#4#0#0#12'TButtonPanel'#12'ButtonPane' + +'l1'#4'Left'#2#6#6'Height'#2'('#3'Top'#3'*'#1#5'Width'#3#28#2#8'TabOrder'#2#6 + +#11'ShowButtons'#11#4'pbOK'#8'pbCancel'#6'pbHelp'#0#0#0#0 +]); diff --git a/components/rx/version/2.1/fduallst.lrt b/components/rx/version/2.1/fduallst.lrt new file mode 100644 index 000000000..c887c8f9c --- /dev/null +++ b/components/rx/version/2.1/fduallst.lrt @@ -0,0 +1,7 @@ +TDUALLISTFORM.CAPTION=DualListForm +TDUALLISTFORM.SRCLABEL.CAPTION=Source +TDUALLISTFORM.DSTLABEL.CAPTION=Dest +TDUALLISTFORM.INCBTN.CAPTION=> +TDUALLISTFORM.INCALLBTN.CAPTION=>> +TDUALLISTFORM.EXCLBTN.CAPTION=< +TDUALLISTFORM.EXCLALLBTN.CAPTION=<< diff --git a/components/rx/version/2.1/fduallst.pas b/components/rx/version/2.1/fduallst.pas new file mode 100644 index 000000000..e9f15e13f --- /dev/null +++ b/components/rx/version/2.1/fduallst.pas @@ -0,0 +1,220 @@ +{ fduallst unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit fduallst; + +{$I RX.INC} +{$L-,S-} + +interface + +uses SysUtils, LCLIntf, Messages, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ExtCtrls, Buttons, LResources, LCLType, ButtonPanel; + +type + + { TDualListForm } + + TDualListForm = class(TForm) + ButtonPanel1: TButtonPanel; + SrcList: TListBox; + DstList: TListBox; + SrcLabel: TLabel; + DstLabel: TLabel; + IncBtn: TButton; + IncAllBtn: TButton; + ExclBtn: TButton; + ExclAllBtn: TButton; + procedure IncBtnClick(Sender: TObject); + procedure IncAllBtnClick(Sender: TObject); + procedure ExclBtnClick(Sender: TObject); + procedure ExclAllBtnClick(Sender: TObject); + procedure SrcListDragOver(Sender, Source: TObject; X, Y: Integer; + State: TDragState; var Accept: Boolean); + procedure DstListDragOver(Sender, Source: TObject; X, Y: Integer; + State: TDragState; var Accept: Boolean); + procedure SrcListDragDrop(Sender, Source: TObject; X, Y: Integer); + procedure DstListDragDrop(Sender, Source: TObject; X, Y: Integer); + procedure SrcListKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure DstListKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure HelpBtnClick(Sender: TObject); + procedure ListClick(Sender: TObject); + private + { Private declarations } + function GetShowHelp: Boolean; + procedure SetShowHelp(AValue: Boolean); + public + { Public declarations } + procedure SetButtons; + property ShowHelp: Boolean read GetShowHelp write SetShowHelp + default True; +end; + +implementation + +uses VCLUtils, BOXPROCS; + + +{ TDualListForm } + +procedure TDualListForm.SetButtons; +var + SrcEmpty, DstEmpty: Boolean; +begin + SrcEmpty := (SrcList.Items.Count = 0); + DstEmpty := (DstList.Items.Count = 0); + IncBtn.Enabled := not SrcEmpty and (SrcList.SelCount > 0); + IncAllBtn.Enabled := not SrcEmpty; + ExclBtn.Enabled := not DstEmpty and (DstList.SelCount > 0); + ExclAllBtn.Enabled := not DstEmpty; +end; + +function TDualListForm.GetShowHelp: Boolean; +begin + Result := pbHelp in ButtonPanel1.ShowButtons; +end; + +procedure TDualListForm.SetShowHelp(AValue: Boolean); +begin + if AValue then + ButtonPanel1.ShowButtons:=ButtonPanel1.ShowButtons + [pbHelp] + else + ButtonPanel1.ShowButtons:=ButtonPanel1.ShowButtons - [pbHelp]; +end; + +procedure TDualListForm.IncBtnClick(Sender: TObject); +begin + BoxMoveSelectedItems(SrcList, DstList); + SetButtons; +end; + +procedure TDualListForm.IncAllBtnClick(Sender: TObject); +begin + BoxMoveAllItems(SrcList, DstList); + SetButtons; +end; + +procedure TDualListForm.ExclBtnClick(Sender: TObject); +begin + BoxMoveSelectedItems(DstList, SrcList); + SetButtons; +end; + +procedure TDualListForm.ExclAllBtnClick(Sender: TObject); +begin + BoxMoveAllItems(DstList, SrcList); + SetButtons; +end; + +procedure TDualListForm.SrcListDragOver(Sender, Source: TObject; X, + Y: Integer; State: TDragState; var Accept: Boolean); +begin + BoxDragOver(SrcList, Source, X, Y, State, Accept, SrcList.Sorted); + if State = dsDragLeave then + (Source as TListBox).DragCursor := crDrag; + if (State = dsDragEnter) and ((Source as TListBox).SelCount > 1) then + (Source as TListBox).DragCursor := crMultiDrag; +end; + +procedure TDualListForm.DstListDragOver(Sender, Source: TObject; X, + Y: Integer; State: TDragState; var Accept: Boolean); +begin + BoxDragOver(DstList, Source, X, Y, State, Accept, DstList.Sorted); + if State = dsDragLeave then + (Source as TListBox).DragCursor := crDrag; + if (State = dsDragEnter) and ((Source as TListBox).SelCount > 1) then + (Source as TListBox).DragCursor := crMultiDrag; +end; + +procedure TDualListForm.SrcListDragDrop(Sender, Source: TObject; X, + Y: Integer); +begin + if Source = DstList then ExclBtnClick(SrcList) + else if Source = SrcList then begin + BoxMoveFocusedItem(SrcList, SrcList.ItemAtPos(Point(X, Y), True)); + end; +end; + +procedure TDualListForm.DstListDragDrop(Sender, Source: TObject; X, + Y: Integer); +begin + if Source = SrcList then IncBtnClick(DstList) + else if Source = DstList then begin + BoxMoveFocusedItem(DstList, DstList.ItemAtPos(Point(X, Y), True)); + end; +end; + +procedure TDualListForm.SrcListKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +var + Incr: Integer; +begin + if not SrcList.Sorted then begin + if (ssCtrl in Shift) and ((Key = VK_DOWN) or (Key = VK_UP)) then begin + if Key = VK_DOWN then Incr := 1 + else Incr := -1; + BoxMoveFocusedItem(SrcList, SrcList.ItemIndex + Incr); + Key := 0; + end; + end; +end; + +procedure TDualListForm.DstListKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +var + Incr: Integer; +begin + if not DstList.Sorted then begin + if (ssCtrl in Shift) and ((Key = VK_DOWN) or (Key = VK_UP)) then begin + if Key = VK_DOWN then Incr := 1 + else Incr := -1; + BoxMoveFocusedItem(DstList, DstList.ItemIndex + Incr); + Key := 0; + end; + end; +end; + +procedure TDualListForm.HelpBtnClick(Sender: TObject); +begin + Application.HelpContext(HelpContext); +end; + +procedure TDualListForm.ListClick(Sender: TObject); +begin + SetButtons; +end; + +initialization + {$i fduallst.lrs} + +end. diff --git a/components/rx/version/2.1/folderlister.pas b/components/rx/version/2.1/folderlister.pas new file mode 100644 index 000000000..cbb58ce13 --- /dev/null +++ b/components/rx/version/2.1/folderlister.pas @@ -0,0 +1,215 @@ +{ folderlister unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit folderlister; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Menus; + + +type + { TCustomFolderLister } + + TCustomFolderLister = class(TComponent) + private + FDefaultExt: string; + FMenuItem: TMenuItem; + FOnExecuteItem: TNotifyEvent; + FFileFolder: string; + FFileList:TStringList; + procedure DoFind(S:string; MenuItem:TMenuItem); + function GetCount: integer; + function GetFiles(Item: integer): string; + procedure SetMenuItem(const AValue: TMenuItem); + procedure SetFileFolder(const AValue: string); + protected + property FileFolder:string read FFileFolder write SetFileFolder; + property OnExecuteItem:TNotifyEvent read FOnExecuteItem write FOnExecuteItem; + property MenuItem:TMenuItem read FMenuItem write SetMenuItem; + property DefaultExt:string read FDefaultExt write FDefaultExt; + procedure InternalExecute(Sender: TObject);virtual; + public + procedure Execute; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Files[Item:integer]:string read GetFiles; + property Count:integer read GetCount; + published + end; + +type + TFolderLister = class(TCustomFolderLister) + published + property DefaultExt; + property FileFolder; + property OnExecuteItem; + property MenuItem; + end; + +implementation +uses FileUtil, strutils, RxAppUtils, LazUTF8; + +function MenuItemStr(S:string):string; +var + i:integer; +begin + Result:=Copy2Symb(ExtractFileName(S), '.'); + if Result='' then exit; + for i:=1 to Length(Result) do + begin + if Result[i]='\' then Result[i]:='/' else + if Result[i]='_' then Result[i]:='.'; + end; +end; + +{ TCustomFolderLister } +procedure TCustomFolderLister.DoFind(S: string; MenuItem: TMenuItem); +var + Rec:TSearchRec; + R:integer; + AFileList, + AFolderList:TStringList; + +procedure CreateItems; +var + i:integer; + M:TMenuItem; +begin + for I:=0 to AFileList.Count-1 do + begin + FFileList.Add(AFileList[i]); + M:=TMenuItem.Create(Application.MainForm); + M.Caption:=MenuItemStr(AFileList[i]); + M.Hint:=MenuItemStr(AFileList[i]); + MenuItem.Add(M); + M.Tag:=FFileList.Count-1; + M.OnClick:=@InternalExecute; + end; +end; + +procedure CreateSubItems; +var + i:integer; + M:TMenuItem; +begin + for i:=0 to AFolderList.Count-1 do + begin + M:=TMenuItem.Create(Application.MainForm); + M.Caption:=MenuItemStr(AFolderList[i]); + MenuItem.Add(M); + DoFind(AFolderList[i]+DirectorySeparator,M); + end; +end; + +begin + AFolderList:=TStringList.Create; + AFolderList.Sorted:=true; + AFileList:=TStringList.Create; + AFolderList.Sorted:=true; + try + R:=FindFirstUTF8(S+AllMask,faAnyFile, Rec); + while R=0 do + begin + if ((Rec.Attr and faDirectory) <>0) and (Rec.Name<>'.') and (Rec.Name<>'..') then + AFolderList.Add(S+Rec.Name) + else + begin + if UTF8LowerCase(ExtractFileExt(Rec.Name))=UTF8LowerCase(FDefaultExt) then + AFileList.Add(S+Rec.Name); + end; + R:=FindNextUTF8(Rec); + end; + FindCloseUTF8(Rec); + CreateSubItems; + CreateItems; + finally + AFolderList.Free; + AFileList.Free; + end; +end; + +function TCustomFolderLister.GetCount: integer; +begin + Result:=FFileList.Count; +end; + +function TCustomFolderLister.GetFiles(Item: integer): string; +begin + Result:=FFileList[Item]; +end; + +procedure TCustomFolderLister.SetMenuItem(const AValue: TMenuItem); +begin + if FMenuItem=AValue then exit; + FMenuItem:=AValue; +end; + +procedure TCustomFolderLister.SetFileFolder(const AValue: string); +begin + if FFileFolder=AValue then exit; + FFileFolder:=AValue; + if FFileFolder<>'' then + if FFileFolder[Length(FFileFolder)]<>DirectorySeparator then + FFileFolder:=FFileFolder+DirectorySeparator; +end; + +procedure TCustomFolderLister.InternalExecute(Sender: TObject); +begin + if Assigned(FOnExecuteItem) then + FOnExecuteItem(Sender) +end; + +procedure TCustomFolderLister.Execute; +begin + if Assigned(FMenuItem) then + DoFind(FFileFolder, FMenuItem) + else + raise Exception.Create(Name+'. Not assigned property MenuItem'); +end; + +constructor TCustomFolderLister.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FFileList:=TStringList.Create; + FFileList.Sorted:=false; +end; + +destructor TCustomFolderLister.Destroy; +begin + FFileList.Free; + inherited Destroy; +end; + +end. diff --git a/components/rx/version/2.1/images/DBCalcEdit.xpm b/components/rx/version/2.1/images/DBCalcEdit.xpm new file mode 100644 index 000000000..8a505f3f5 --- /dev/null +++ b/components/rx/version/2.1/images/DBCalcEdit.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char *DBCalcEdit[]={ +"24 24 8 1", +"e c #000000", +"f c #000080", +"c c #008080", +"d c #00ffff", +". c #808000", +"# c #808080", +"a c #c0c0c0", +"b c #ffffff", +"........................", +".###############........", +".#a#baaaabaaaaa#........", +".###############........", +".#a#bbbbabbbbbb#........", +".#b#baababaaaab#........", +".#a#bbbbabbbbbb#........", +".#b#baababaaabb#........", +".#a#bbbbabbbbbb#........", +".#b#baababaaaab#........", +".#a#bbbcccccccccccccc...", +".#####cbdbdbdbdbdbdbce..", +"......cdeeeeeeeeccccfe..", +"......cbebbbbbbaccccfe..", +"......cdeaaaaaaaccccfe..", +"......cbccccccccccccfe..", +"......cdcebebebebebefe..", +"......cbccccccccccccfe..", +"......cdcebebebebbaefe..", +"......cbccccccccccccfe..", +"......ccfffffffffffffe..", +".......eeeeeeeeeeeeee...", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/DBLookUp.xpm b/components/rx/version/2.1/images/DBLookUp.xpm new file mode 100644 index 000000000..399de56bd --- /dev/null +++ b/components/rx/version/2.1/images/DBLookUp.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char *DBLookUp[]={ +"24 24 8 1", +"# c #000000", +"c c #000080", +"e c #800000", +". c #808000", +"f c #808080", +"d c #c0c0c0", +"b c #ff0000", +"a c #ffffff", +"..##....................", +".#aa#b.........c........", +"#daaa#b.......cc........", +"#ddaaa#......cccccccc...", +".#ddaaa##.....cc.....c..", +"..#ddaaaa###...c.....c..", +"...#ddaabbbb#........c..", +"....#ddebbb#.........c..", +"..c.#feeeb#d###########.", +"..c..#eef#daaaaaaa#aad#.", +"..c..#ef#dccccccca#a#d#.", +"..c..#e#daaaaaaaaa#ddd#.", +"..c...#.###############.", +"..c.....#aaaaaaaaaaaaa#.", +"..c.....#acccccccccaaa#.", +"..c.c...#ccccccccccccc#.", +"..c.cc..#caaaaaaaaaacc#.", +"...cccc.#ccccccccccccc#.", +"....cc..#acccccccccaaa#.", +"....c...#aaaaaaaaaaaaa#.", +"........#accccccccccaa#.", +"........#aaaaaaaaaaaaa#.", +"........###############.", +"........................"}; diff --git a/components/rx/version/2.1/images/RXCTLREG.RES b/components/rx/version/2.1/images/RXCTLREG.RES new file mode 100644 index 0000000000000000000000000000000000000000..f15e291733b23144a0cf8906ad4c6727d820b14b GIT binary patch literal 10280 zcmdT~&ubh<7Ow1=jD!P~+%_kLJ?&u+4ZVap2;^83{~)pzWG|b&2cH{kwr5Y%V8cux zFu8>x2mcGc8eIf3tPcbF7kt{yDQ+Q?9)sE1?|ZMhy4sqt<*Y%oPwMWkU%h(us=lsY z-D8X~pW$#$55Sg;KQLw!8s~mzZksR6O>^Dc!1cEI()2yP3S3KKKD|)mKLY&TA0HT1 ze+GZCd>n2HWAJZ^LN7Q2nuCJ_T$#WCd2xEdSz~r4eMd>)#!DydG!pAK)6HZvO$!`p zdbpXShrI(F_tWpcPyBJ1ZXPE7NO3*b)cZ7@%@Q03o3mLex)gTl;UN-m<pCJ*j3q!P zM;gblEH-9%7in|2ZFbELjy*$k!(7Ih$2WDGnAPGigoP?wr&1EnD9*hR$M%1qc>85I zwx3eG{W9Fx7g3xORd@3&O()blXU7pX#A;(5@K^<gOKByCe-=;dhYfSu3vaU!krm-C z=`=O5<pP|fiK}grPK3+GJkiFN+{DIb02bDnKumRyI{9~LubbzYb2tyv9v+#}m1y7^ z+dLn5Tn-y-hgnhUU88qxj8c%dZfs-Ip63o1iF473+%b=iq1)y!=zDt@GjD>&zxi>r zW^hILTU3pp^N%jt!krX(kduNMk*da}HG+@as~LD8W}iLs*c}}O41<874*1pV=v8Ci z=(QyEDY!066IfQ@$(%GajqitwoDsD7yMnRuW~&dzqv!ea7b=a~;o;Y&@t6-Gd!y*_ zJf6mAr$#^K9P4cgVCkC3+rrjpm$h@p23MQ88@q|mJD-f_0mFZdo7k97C5($YcB+Yv zoqfu#{f%R1vxeEjOt)>Wq2FzruP_r{H@Cp%N^#f>FdZ4#&<tgs6SECmIUhCpvRmtS z(H9!M!Dw0ASJX3Wzkg{sBxb|Dxb&L7CtdlTE1~DOiLuU=um{H7y<OFpcqX8S|DFZi z4)%x*7zxlLo}RVNSlA;@8GkMGh)sOj!MKpT^nVx6BF1jv-ec*gr@JWoAlF7ZhAM|# z#gM~V&cE+Tb^J-^a-9fG2eGF*e<cPJQ$5q;F(<K<1d|s21$T4UbTt8pLZgK0Ebr0? z<}{HENhW^SHAD|Ts)qrv*r$@!7Z&+X3|;0K!(E?>{rVJztxqLR!O2wOU;hC%X<RSf zzgfuJpIW?e*RUOS46DT%>JqJ75>qNQ&~`KDZxXZ-Mm*tzZCYAMAs<+DloknXoFOkn z^uVxJta$^58=p6`@UK{**km;DHqtp!m;|AELX^y`3gxDTxM`qRzTtGbukB#RcNv`R z)Lm`G_6TpNOi0>t4j4-ooH34|MT{j*<V*!b^))7)C!&{aS&eb^=FE`9*qhL+dS`BA zR*$@iun&OR_adixyCw5mAI$A}=2ou1EvtDFCCr;=cPlSKLX{6f!rL&|cd%i{IpI79 zjLw_i<=g|z*15~IJn$MW_gM(=Tm8ddunB>^BOq_>^~o*sH8|tm?lN`@xADg{XD#Q> zVI2r&v1tF(=~ZY^kpVE~q=457y`jE4FJ`l+Ioh^YO@`x-X0v|^9?a*(lP6CF=ab3U zm>tDW=kr1FMDfm~8hv_C@sp?3@${kM{x!Gp^2Zt<Ki>EH2iLy)Y5KTgS^2&G)#>!H z+T;)VSFcZ1&nW-l?TM%4y;T>Gtbzwo)+cgmu}lv6EH&#Ba(ErAoo4Xd`D;ZU-N-0M za`8wf*4LD{sMs)Q7T`HH(791uAt5te(N_bDWsOmsBcZlIuWK+8g5Ds(`+)&+_`EQ% z9>XCLRF8s?5Nz_im@}S=ks*QD(^L?%9u(j+2>EN?uW)@?^VfdEva;Nrp^j-G4Z@S` zvq~)1u?W#Umo0T+IeD>*eO{KyK1(nck+6xe>%#`iM#=kP7g!dV6K>F27;b`pm?%cM zU<@%V=}Tv+N^G;3JMQc_a<10g*E^Yn&||zMs}oJyvNqT(!4CSZ6S3N|#G0cNY?!cx zt(ok@fJ^MtEH-OQi1le?pT>UD$Um~YJ)Sg<Kd#p@jHpD&9lL5gZvIu6;~rgQwfdYN zSY%jfV?NIH9*>c87{WlrHAh)vr~_V~{t$4ikL>AYp&!_+d7pqWF2`QatTm>~8Z(|c zFWNoCMteV8#`RL3UO%^ayM-Oy9@Z#3_*<?1_IliBz1POj7Fi>)#hm93CqGVAoVb9y z#F&<VvEK2M9_PU><~dG`HuD%0V@uz%kNrgcK@MJ=P&#ouXRX5`JMz}7Q#d+)gE4Z^ zTQK&^75$diG)9Wo8rd)-5tv(SkyT|ms_`(Zv4h@KqL1@Vq;2t`z|T>*)pw0A@TLsY zAm_jbd~4S4%XgXwyUfssi=gjTCFe$1z<${H5gV^>`PX@sE`3=V!*BZzr0>DL0DpX= z!Z$0c^c}%BH6O#zzh#a4eU6Bq|9Xe=t>AxQVzSkR#d>>M{|w#Z?>;ZPMvb4Lun)cd zKO(=%=qp9txzp+j{8r>ez7@eGM864PmxzuYFxI3EHW7~WaCNqCLhUiL@4uq29B+l^ zjqNwmwvo4wqwLb9{)G#8-wgdw8n9A){K@erLyz4?Rc!?9aO>?i8k^&dW3+Rl4>ok_ z^-{26451LbS9UJMgKvC3OumP97TZXOC64v<SG^D3n*BL@8Nc3bqp$HR`s-itR$|;N zd?QF3#~g}Y-vW;eXEc4wJi53BT;yVZ@sT7b-e(Tw{Nn!p{-a0UhI)@P!vxjmViYip zJkIc*8RecQht0fq1srmvaua><2Cn}<eUNORC54-qKO6C9`MG<noN0HcF_sfPujoA% zYCOmCtYm5rj1L6?)9hUNYwyqZz@dJ}`(NfgX-_#7SZD*_w?=Zo8Sp*+{wQ8k`(X^r z1>JmOm{N>o#6$Nm=wD7f#?-m{u+h7hjUEZXKKL<~IaEKDWsc$_Y|(4|QKZL5*`SA$ z;3vkMsj-V>%*kBjgg8~bz{Mxdd(HUCHOp0ScLjZ~`863w(ppw)-I<u@&!0b&YNrX8 z9AzohT&|aTs7=YdrF=8PcLL<aq8cd)^)O>MroJ2vv|USM*7BdF0P3-`5Z-9t{kO-^ hul+Jm8|a^n_)3g^PM52CDVI>oMLdEv9>H%v{TC3qqj&%S literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/RXDBREG.res b/components/rx/version/2.1/images/RXDBREG.res new file mode 100644 index 0000000000000000000000000000000000000000..a64e8327e06b64fdbd4defd6c63d0ca609cf46b8 GIT binary patch literal 5420 zcmd5=zi-<{7`>DRC{MJubaK$CBLNz)h7L}6MH<vDjid$Ap+JBF9upM}KxYyG6|goI z=;X=&iieI_yZ1i`jR>WtT;Kcdjz6N<kYL#HXN!FI_}%ezPw(RorIdPrk1_TG*o)ac zrFOs=^M(3RY4r%7hd|%rPpc<DHe$88;X8f}aNm9IDN8@VIG>I}Dg3LVusdu4)%p23 z_B_CeacArfTRT^ylB)t;5R$Q@8G9BRhQk-bi{Zrc+jYI&U}IX`=3H!FG=0tX#jwe- zV~%FC*&ps)qhn)Uzx^A3d&y`~PhJb3Cgdl^EI1kRlYC<F5}z;g7@r}1kL!Gr=f{FA zEj-&ksNFYMgjTy}(2MH*q@JmLphr+~Ulxj+bv4{-dKS<R4d^91Yyq#SAxDx3lBDDU zGl=Kf=nNa;Y(6(xHece++?Wg-$<K^7^GvWEMaFT9Hk(cTdT~z;8G={Q<Q6m>VHvE3 zPt|jE0L>0mrk<*wofjXvg}NL1#qDy&McW9&rV*F3rZK3GrNOVj-!mFX7@0+#OCyLP zot*&VNC4hcwn1Lk(ik(})N&+9grB1^P8^RuDsjBlS=I6e*ydl(>yPr?Qe($)Fs~XP zoU6;X3y>uAU|&Dh&=mR|V4un7x$Arv^m9{zZ?HDjEkUxQ(`e2D1`q9Yd0_JN7WfUO zXl-%E&N@KtZF!yc@|*G7<qP0HONV)YS_zdgd=v(#m6nfc@_xC=-*^p;akkcf)bBCe z_XO^<v94}@@=`Plv`{Q%hb`dBbrbUvoj5=B%OSTx{MCc1`X}V#6DxIy-)Ei^f2g9` z@=Cq?_f!J?;|~?w!+c=1+45t$%JG$qf^m@3<#|p9bSuWSbp!ONEK6SW`NXyC7IfRg zEc&|b!*QAV9@oFajtBi@KbMZ(dg10Gx_11Lh!NzP2M<vd(Mwxi{HN0mnuY#L;W<em zPFw$_@GCQzPb@itgXX+xyfq;Y|0QXBKV&-m2Rtlz0RBtT!SKsadSIU6Z>N9q8=wHh zxj8-M)PchZ>n^|!=?bhS1`UX+fLaim>MtaNM_04S9r6*Vtv>qqFueZJe_b8-;Y8lo z*ti24iXAZ<E=0_wl(htAsWe<mET-@g{iMlfsA#OSdq~k*)?UXMk}OW+mX~odt50Wq zE+>*?9B3%xw;E=0UTVk#mui@HGz4xmOgkFlM2&_>Sy99OHL$DS^`0ZPobK1HrT+KU z+n2J6+`LZ;R{`@JSoq0ocGBQHZ}B*6ahFFuMSe5k_ldpL<aUbl;<w-<-g1Y)!-J(1 zV&Y*@<~8p8f#Jc(^YkEjGqoO+LO-?o*?fA?k3;?Z_|)&Dl)^ow2R;9>2mAWbgS-N! z>bq+`2i}N&vcz^dM<N?;&=4bI&dgbZ-<*0p*Y%mlkoJwoFlOzsNbdU5$XPQEj`VqX zhH&|O-owA-@LG6WNyu|x9+ilxeGVKmFvnG%Ih;uHoz{L1^fk1-2kkrXjy(rn>A`x@ zdJsSV#)Ex4X#CjcJNeM3?@j+4h^3ycq{%JZ&n$Z|#WVaqT-aA|-D}{Dcu*WC8+Sbv zKOV_-%)X0xbtED0TwcC_EzDT(5?@uzd<b739a$dtF}1@lX?<eo_v)R*3wr85d#+#I zJD1OMKia;Fp$B;le2g0UgS<zhj%@o_S3}?Lvg=@h2a9vOQ^Osx{Nu)W<@ag3?cl*K zOO}mbchSUE{H!dCNR=h?$Ad*RP>TifPeRr3RaEdC1M<b7B953}hsb4c{BgA2dEGSS dyml0h!?A4yyVYA8Q55XTbwW13w?ExJ`XBrB?nD3p literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/RXSPINDOWN.png b/components/rx/version/2.1/images/RXSPINDOWN.png new file mode 100644 index 0000000000000000000000000000000000000000..bab32593318511707922195438dcb9eff67fdbac GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*XLbJY5_^DsCmGI5hkZm?h{pLFeOq jM(zZcU|#X#nIa6At=ZT%$fZjIRWf+G`njxgN@xNAVw4t7 literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/RXSPINUP.png b/components/rx/version/2.1/images/RXSPINUP.png new file mode 100644 index 0000000000000000000000000000000000000000..51f9a447844b10d4af1ac3dcca0794db8f14b921 GIT binary patch literal 89 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*XI~JY5_^DsCmGI5hkZm?h|^z<G#4 kSy{}HEk)L%S1FE(;j$7NTOi}3J3zGzp00i_>zopr09mmWmjD0& literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/RXTOOREG.RES b/components/rx/version/2.1/images/RXTOOREG.RES new file mode 100644 index 0000000000000000000000000000000000000000..3a1803e13ad64c38e5b31b5c44db11e0e3b50320 GIT binary patch literal 9436 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 literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/RxMDICloseIcon.png b/components/rx/version/2.1/images/RxMDICloseIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..e3df635b6f2540fc3de5a44d828ffada3c53598f GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-z3?wHfJxv8t%*9TgAsieWw;%dH0CL#^d_r7- zG!QIJ-+3NLF_r}R1v5B2yO9Rua29w(7BevL9RXp+soH$fKtTmh7sn8enaK$P=?qNG r%si8LdH&?^<nZwP;ZZOPVBujfFJcbaY~1S(RLkJ$>gTe~DWM4f*nlGg literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TCURRENCYEDIT.xpm b/components/rx/version/2.1/images/TCURRENCYEDIT.xpm new file mode 100644 index 000000000..2f867f206 --- /dev/null +++ b/components/rx/version/2.1/images/TCURRENCYEDIT.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static char *TCURRENCYEDIT[]={ +"24 24 6 1", +". c None", +"a c #000000", +"d c #0000ff", +"# c #808080", +"c c #c0c0c0", +"b c #ffffff", +"........................", +"........................", +"........................", +"........................", +"#######################.", +"#aaaaaaaaaaaaaaaaaaaaab.", +"#abbbbbbbbbbbbbbbbbbbcb.", +"#abbbbbbbbbbbbbaabaabcb.", +"#abbbbbbbbbbbbbbbabbbcb.", +"#abbbbdbbbbbdbbbbabbbcb.", +"#abbbddddbbddbbbbabbbcb.", +"#abbdbdbbbbbdbbbbabbbcb.", +"#abbbdddbbbbdbbbbabbbcb.", +"#abbbbdbdbbbdbbbbabbbcb.", +"#abbddddbbbbdbbbbabbbcb.", +"#abbbbdbbbbdddbbbabbbcb.", +"#abbbbbbbbbbbbbaabaabcb.", +"#abbbbbbbbbbbbbbbbbbbcb.", +"#accccccccccccccccccccb.", +"#bbbbbbbbbbbbbbbbbbbbbb.", +"........................", +"........................", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TDBDateEdit.xpm b/components/rx/version/2.1/images/TDBDateEdit.xpm new file mode 100644 index 000000000..d561c3563 --- /dev/null +++ b/components/rx/version/2.1/images/TDBDateEdit.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static char *TDBDateEdit[]={ +"18 18 8 1", +"# c None", +"e c #000000", +"c c #000080", +"d c #0000ff", +"f c #800000", +". c #808080", +"a c #c0c0c0", +"b c #ffffff", +"...............###", +".a.baaaabaaaaa.###", +"...............###", +".a.bbbbabbbbbb.###", +".b.baababaaaab.###", +".a.bbcccccccccccc#", +".b.bacdddcdddcddce", +".a.bbcccccccccccce", +".b.bacbbbbbbbbbbce", +".a.bbcbbfbbffffbce", +".....cbffbbfbbbbce", +"#####cbbfbbfffabce", +"#####cbbfbbbbbfbce", +"#####cbbfbbabafbce", +"#####cbfffbfffabce", +"#####cbbbbbbbbbbce", +"#####cccccccccccce", +"######eeeeeeeeeeee"}; diff --git a/components/rx/version/2.1/images/TDualListDialog.xpm b/components/rx/version/2.1/images/TDualListDialog.xpm new file mode 100644 index 000000000..1b2f4db8d --- /dev/null +++ b/components/rx/version/2.1/images/TDualListDialog.xpm @@ -0,0 +1,34 @@ +/* XPM */ +static char *TDualListDialog[]={ +"24 24 7 1", +". c None", +"b c #000000", +"e c #000080", +"c c #0000ff", +"# c #808080", +"d c #c0c0c0", +"a c #ffffff", +"........................", +"........................", +".######################.", +".#abccccccccccccccbabab.", +".#bbbbbbbbbbbbbbbbbbbbb.", +".#dadadadadadadadadadab.", +".#adadadadadadadadadadb.", +".#dbbbbadad#dadbbbbadab.", +".#abaabbadab#dabaabbadb.", +".#dbaabdbadbb#dbaabdbab.", +".#abaabbbdabbdabaabbbdb.", +".#dbaaaabadbdadbaaaabab.", +".#abaeeabdadadabaeeabdb.", +".#dbaaaabadabadbaaaabab.", +".#abaeeabdabbdabaeeabdb.", +".#dbaaaaba#bbadbaaaabab.", +".#abaaaabda#bdabaaaabdb.", +".#dbbbbbbada#adbbbbbbab.", +".#adadadadadadadadadadb.", +".#dadadadadadadadadadab.", +".#adadadadadadadadadadb.", +".#bbbbbbbbbbbbbbbbbbbbb.", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TFolderLister.xpm b/components/rx/version/2.1/images/TFolderLister.xpm new file mode 100644 index 000000000..cc103f575 --- /dev/null +++ b/components/rx/version/2.1/images/TFolderLister.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char *TFolderLister[]={ +"24 24 8 1", +". c None", +"a c #000000", +"c c #808080", +"# c #848484", +"f c #c0c0c0", +"e c #c6c6c6", +"b c #ffff00", +"d c #ffffff", +"....#a#.................", +".#a#aba#a#..............", +".ab#aba#ba...ccc........", +".##bbbbb##..cdddcc......", +"#aab#a#baa#cddddddcc....", +"abbbadabbbaddddddddda...", +"#aab#a#baa#dddddddda....", +"a##bbbbb##addddddda.....", +"eab#aba#baeddddddadcc...", +".#a#aba#a#dddddddaddda..", +"....#a#dddddddddaddda...", +"....cdfbaaddddddadda....", +"....cdbfbfaadddadda.....", +"....cdfbfcddaadadda.....", +"...cccccccccccccdaa.....", +"...cddddddddddcadaa.....", +"...cdfbfbfbfbfbacca.....", +"....cdfbfbfbfbfcaca.....", +"....cdbfbfbfbfbfaca.....", +".....cdbfbfbfbfbcaa.....", +".....ccccccccccccaa.....", +"......aaaaaaaaaaaaa.....", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TLoginDialog.xpm b/components/rx/version/2.1/images/TLoginDialog.xpm new file mode 100644 index 000000000..2c5d53d10 --- /dev/null +++ b/components/rx/version/2.1/images/TLoginDialog.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static char *TLoginDialog[]={ +"24 24 6 1", +". c None", +"b c #000000", +"c c #0000ff", +"# c #808080", +"d c #c0c0c0", +"a c #ffffff", +"........................", +"........................", +".######################.", +".#abccccccccccccccbabab.", +".#bbbbbbbbbbbbbbbbbbbbb.", +".#adadadadadadadadadadb.", +".#dadadadadadadadadadab.", +".#adadadadadadadadadadb.", +".#dadadadadadadadadadab.", +".#adadadadadadadadadadb.", +".#dada#bbadadadadadadab.", +".#ada#b#bbadadadadadadb.", +".#dadbbdabbbbbbbbbbadab.", +".#adabbadbbbbbbbbbbdadb.", +".#dad#b#bbdadbbabbdadab.", +".#adad#bbdadabbdbbadadb.", +".#dadadddadadbbabbdadab.", +".#adadadadadadadadadadb.", +".#dadadadadadadadadadab.", +".#adadadadadadadadadadb.", +".#dadadadadadadadadadab.", +".#bbbbbbbbbbbbbbbbbbbbb.", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TPAGEMANAGER.xpm b/components/rx/version/2.1/images/TPAGEMANAGER.xpm new file mode 100644 index 000000000..60e5b287b --- /dev/null +++ b/components/rx/version/2.1/images/TPAGEMANAGER.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char *TPAGEMANAGER[]={ +"24 24 8 1", +". c None", +"b c #000000", +"c c #000080", +"f c #00ffff", +"d c #800000", +"# c #808080", +"e c #ffff00", +"a c #ffffff", +"........................", +"........................", +".........##############.", +".........#aaaaaaaaaaaab.", +".......##############ab.", +".......#aaaaaaaaaaaabab.", +".....##############abab.", +".....#aaaaaaaaaaaababab.", +".....#acccccaddddababab.", +".....#aaaaaaadaadababab.", +".....#accccaadaadababab.", +".....#aaaaaaadaadababab.", +".....#abbbaaaddddababab.", +".bbbbbbeaebaaaaaaababbb.", +".bbbfbeabbbbbbbbaabab...", +".bbbfbaeaeaeaeaebabbb...", +".bbbfbeaeabbbbbbaab.....", +".bbbfbaeaeaeab###bb.....", +".bbbfbeaeabbb...........", +".bbbfbbeaeaeb...........", +".bebbb.bbbbb............", +".bbb....................", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TRXAPPICON.xpm b/components/rx/version/2.1/images/TRXAPPICON.xpm new file mode 100644 index 000000000..67c91165f --- /dev/null +++ b/components/rx/version/2.1/images/TRXAPPICON.xpm @@ -0,0 +1,36 @@ +/* XPM */ +static char *TRXAPPICON[]={ +"24 24 9 1", +". c None", +"a c #000000", +"f c #800000", +"c c #808000", +"e c #808080", +"g c #c0c0c0", +"# c #ff0000", +"d c #ffff00", +"b c #ffffff", +"...........###..##...##.", +"............#..#..#.#..#", +"........a...#..#....#..#", +"......aabaa.#..#....#..#", +"....aabbcdda#..#..#.#..#", +"..aabbccccc###..##...##.", +".abbddddddddddda........", +".aaaaaaaaaaaaaaa..##b...", +".abddeebddeebdda...##b..", +"..cceeecceeeccc....###b.", +"..cbebbcbebbcbc.####d#..", +"..cdebbcdebbcee##d##d#b.", +"..cbebbcbebbcebfd#dd#b..", +"..cdebbcdebbcebbfbb##...", +".adddaadddaadebgbf###b..", +".aaaaaaaaaaaebbgegf#....", +".adbdbdbdbdebebegeea....", +".aaaaaaaaaebebeeaaaa....", +".........ebebeea........", +"........ebgbeea.........", +"........agbeea..........", +"........aeeaa...........", +".........aa.............", +"........................"}; diff --git a/components/rx/version/2.1/images/TRXCLOCK.xpm b/components/rx/version/2.1/images/TRXCLOCK.xpm new file mode 100644 index 000000000..9ccb31f27 --- /dev/null +++ b/components/rx/version/2.1/images/TRXCLOCK.xpm @@ -0,0 +1,31 @@ +/* XPM */ +static char *TRXCLOCK[]={ +"24 24 4 1", +". c None", +"# c #000000", +"b c #c0c0c0", +"a c #ff0000", +"........................", +"........................", +"........................", +"....##...........##.....", +"...#aa#..#####..#aa#....", +"..#aaa###bbbbb###aaa#...", +"..#aaa#bbbb#bbbb#aaa#...", +"...###bbbbb#bbbbb###....", +"....#bbb#bbbbb#bbb#.....", +"....#bbbbbb#bbbbbb#.....", +"...#bb#bbbb#bbbb#bb#....", +"...#bbbbbbb#bbbbbbb#....", +"...#b##bbbb#bbbb##b#....", +"...#bbbbbbbb#bbbbbb#....", +"...#bb#bbbbbb#bb#bb#....", +"....#bbbbbbbbbbbbb#.....", +"....#bbb#bbbbb#bbb#.....", +".....#bbbbb#bbbbb#......", +"......#bbbb#bbbb#.......", +".....####bbbbb####......", +"....###..#####..###.....", +"....##...........##.....", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TRXDBCOMBOBOX.xpm b/components/rx/version/2.1/images/TRXDBCOMBOBOX.xpm new file mode 100644 index 000000000..f4ce7dae4 --- /dev/null +++ b/components/rx/version/2.1/images/TRXDBCOMBOBOX.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static char *TRXDBCOMBOBOX[]={ +"24 24 6 1", +". c None", +"c c #000000", +"d c #000080", +"# c #808080", +"a c #c0c0c0", +"b c #ffffff", +"........................", +".###############........", +".#a#baaaabaaaaa#........", +".###############........", +".#a#bbbbabbbbbb#........", +".#b#baababaaaab#........", +".#a#bbbbabbbbbb#........", +".#b#baababaaabb#........", +".#a#bbccccccccccccccccc.", +".#b#bacbbbbbbbbbbbcbbac.", +".#a#bbcbdddddddddbcbcac.", +".#####cbbbbbbbbbbbcaaac.", +"......ccccccccccccccccc.", +"...d....cbbbbbbbbbbbbbc.", +"..ddd...cbbddddddddbbbc.", +".ddddd..cdddddddddddddc.", +"...d....cddbbbbbbbbbddc.", +"...d....cdddddddddddddc.", +"...d....cbbddddddddbbbc.", +"...d....cbbbbbbbbbbbbbc.", +"...dddd.cbbdddddddddbbc.", +"........cbbbbbbbbbbbbbc.", +"........ccccccccccccccc.", +"........................"}; diff --git a/components/rx/version/2.1/images/TRXDBSpinEdit.png b/components/rx/version/2.1/images/TRXDBSpinEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..d102b48411deaf4cb828c8d98386eaeb58f020d7 GIT binary patch literal 564 zcmV-40?Yl0P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000i0 z000i00SA;*-2eaq=1D|BR7i=<l)-8fQ5c24e=?3MDSd&yL>J;BP+vjZyU1?R*i8qr zC_@QdR3a+WWFuYp3~mLHEZmE4;HnnHriR*KX0D6Qo!pr_ncNlx4+QRi@BPoYIsakc zA4Bva3`3>Y)9F+|spgilRoc%Dgkh+ZqWqa+%~&ViLcU5wDU;M)zys*_!^&p81`v_L zHcf7>ZRiL20F%kILRzm)nJVe(Iov#`5YVJ<&?0U_7VWhupkKee{m@ag8NJ>!X|?Fv z*V&!P4-aE{y)_oSdh^cOOOk{j2mr{k41Z^6-BGhK^IzYALZIId8!c)=5Cr7}{GB1$ z=NHx;=|)_9c)k=^WznO-r%L0Olg9w$3OdDz&(0SBMEe8AFHbD7R*N)YU8v(N*O&7J zqtUPwiQ{8ipv@vpuEpxO`1zZ?-GfSPLZJGg(|G-MLLln}q#Id#ddM4_TjGJ8cUN*3 zlry-0FJWB7vg6n+-N-FP8cIRVG9fNFJ6{m(56ZfpB+o2FAh-oN+@we+CytM~oG&Wp zm4D!olIg8{>3v$9=P7sszTu%x&ED>Tl^{z%sT@cU<>7fgSq?~w$Q2zP)NVsM8{v0j zi}cUOBd)K007XnsPv5JjPwt+SRoK|vx~1X&BmM%mGVx@MT?1qQ0000<MNUMnLSTZ) CBLtuT literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRXDICE.xpm b/components/rx/version/2.1/images/TRXDICE.xpm new file mode 100644 index 000000000..d7227c16e --- /dev/null +++ b/components/rx/version/2.1/images/TRXDICE.xpm @@ -0,0 +1,31 @@ +/* XPM */ +static char *TRXDICE[]={ +"24 24 4 1", +". c None", +"# c #000000", +"b c #c0c0c0", +"a c #ffffff", +"........................", +"........................", +"........................", +"...........##...........", +".........##aa##.........", +".......##aa##aa##.......", +".....##aaaa##aaaa##.....", +"...##aaaaaaaaaaaaaa##...", +"...#b##aaaa##aaaa##a#...", +"...#bbb##aa##aa##aaa#...", +"...#bbbbb##aa##aa##a#...", +"...#bbbbbbb##aaaa##a#...", +"...#bbbbbbb#a##aaaaa#...", +"...#bbb##bb#a##aaaaa#...", +"...#bbb##bb#aaaaaaaa#...", +"...#bbbbbbb#aaaaa##a#...", +"...#bbbbbbb#aaaaa##a#...", +"...##bbbbbb#a##aaaa##...", +".....##bbbb#a##aa##.....", +".......##bb#aaa##.......", +".........###a##.........", +"...........##...........", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TRXLABEL.xpm b/components/rx/version/2.1/images/TRXLABEL.xpm new file mode 100644 index 000000000..6aa7fec0f --- /dev/null +++ b/components/rx/version/2.1/images/TRXLABEL.xpm @@ -0,0 +1,30 @@ +/* XPM */ +static char *TRXLABEL[]={ +"24 24 3 1", +". c None", +"# c #000000", +"a c #ffffff", +"........................", +"........................", +"........................", +"........................", +"........................", +"........................", +".........####aa.........", +"..........####aa........", +".........#####aa........", +".........##a###aa.......", +"........##aa.##aa.......", +"........##aa.###aa......", +".......##aa...##aa......", +".......##########aa.....", +"......##aaaaaaa##aa.....", +"......##aa.....###aa....", +".....##aa.......##aa....", +"....####aa.....####aa...", +".....aaaaa......aaaaa...", +"........................", +"........................", +"........................", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TRXLookUpEdit.xpm b/components/rx/version/2.1/images/TRXLookUpEdit.xpm new file mode 100644 index 000000000..d16d096e2 --- /dev/null +++ b/components/rx/version/2.1/images/TRXLookUpEdit.xpm @@ -0,0 +1,34 @@ +/* XPM */ +static char *TRXLookUpEdit[]={ +"24 24 7 1", +". c None", +"# c #000000", +"e c #800000", +"c c #808080", +"d c #c0c0c0", +"b c #ff0000", +"a c #ffffff", +"..##....................", +".#aa#b..ccccccccccccccc.", +"#daaa#b.cdcaddddadddddc.", +"#ddaaa#.ccccccccccccccc.", +".#ddaaa##dcaaaadaaaaaac.", +"..#ddaaaa###ddadaddddac.", +"...#ddaabbbb#aadaaaaaac.", +"....#ddebbb#ddadadddaac.", +"....#ceeeb#aaaadaaaaaac.", +".....#eec#caddadaddddac.", +".....#ec#dcaaaadaaaaaac.", +".....#e#ccccccccccccccc.", +"......#.................", +"..ccccccccccccccccccccc.", +"..c###################a.", +"..c#aaaaaaaaaadaaaaaada.", +"..c#aaaaaaaaaadaddddcda.", +"..c#aaaaaaaaaadad##dcda.", +"..c#aaaaaaaaaadaddddcda.", +"..c#aaaaaaaaaadacccccda.", +"..c#dddddddddddddddddda.", +"..caaaaaaaaaaaaaaaaaaaa.", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TRXSWITCH.xpm b/components/rx/version/2.1/images/TRXSWITCH.xpm new file mode 100644 index 000000000..a06aa968e --- /dev/null +++ b/components/rx/version/2.1/images/TRXSWITCH.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char *TRXSWITCH[]={ +"24 24 5 1", +". c None", +"# c #000000", +"b c #808080", +"c c #ff0000", +"a c #ffffff", +"........................", +"........................", +".....##############.....", +".....##############.....", +".....###aaaaaaa#b##.....", +".....##aaaaaaa#bb##.....", +".....#aaaaaaa#bbb##.....", +".....#########bbb##.....", +".....#aaaaaaa#bbb##.....", +".....#aaaaaaaa#bb##.....", +".....##aaaaaaa#bb##.....", +".....##aaaaaaaa#b##.....", +".....###########b##.....", +".....##aaaaaaaa#b##.....", +".....##a######a#b##.....", +".....##a#cccc#a#b##.....", +".....##a######a#b##.....", +".....##aaaaaaaa#b##.....", +".....###########b##.....", +".....###bbbbbbbb###.....", +".....##############.....", +".....##############.....", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TReportManager.xpm b/components/rx/version/2.1/images/TReportManager.xpm new file mode 100644 index 000000000..640e57d6d --- /dev/null +++ b/components/rx/version/2.1/images/TReportManager.xpm @@ -0,0 +1,36 @@ +/* XPM */ +static char *TReportManager[]={ +"24 24 9 1", +". c None", +"# c #000000", +"c c #0000ff", +"g c #808000", +"f c #808080", +"b c #c0c0c0", +"d c #ff00ff", +"e c #ffff00", +"a c #ffffff", +"........................", +"........................", +"......#########.........", +".....#aaaaaaaa#.........", +".....#a#####a#..........", +"....#aaaaaaaa#..........", +"....#a#####a####........", +"...#aaaaaaaa#b#b#.......", +"..##########b#b##.......", +".#bbbbbbbbbb#b#b#.......", +".#############bb#.......", +".#bccbbbbbbbb#b#d###....", +".#beebb###bbb#b##...#.#.", +".######eae######.....##.", +"..#bbf#aeaeaeae#....###.", +"...####eaeaeaeae###.....", +"......#aeae###########..", +"......#eae#ggggggggg#...", +"......#ae#ggggggggg#....", +"......#e#ggggggggg#.....", +"......##ggggggggg#......", +"......###########.......", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TRxAboutDialog.png b/components/rx/version/2.1/images/TRxAboutDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..71503019e292d94ed82bedde92ad748e9c78cfcc GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9F5b3mApeM<0Mpx_fv z7sn8f&Z|=|@*Y;;ap~8pE}VVz=9!s2bpafz0x}|@uYNP?yyjyzI<WuoC6|r~&!ukN zWNUf1Sa9of3BH9Nx+Z4j9$a`Qf}^3hTenh<ok8hSPgHA%jOc_MwTb_-*Y28qBvjO4 zUvqXMXSB@SS&zdOU-!7PsZo2E=#-9V-z2r>s`Qr?QEp4*<w8GqM4bssG@J4CJKMGA z>1W^WTlA^u^w+z)Go)6$d*E;)Dsy|2iotEIHnz=8rrYBuu4<aMAU!W*6_@{^&mF2h zYZtkhSspdBJid%4DtGVoSB;<i>wa7oocO!`9Z&xI^+EqP^nyIkz~JfX=d#Wzp$PyS CHiH2G literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxCalendarGrid.xpm b/components/rx/version/2.1/images/TRxCalendarGrid.xpm new file mode 100644 index 000000000..243b8cb69 --- /dev/null +++ b/components/rx/version/2.1/images/TRxCalendarGrid.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char *TRxCalendarGrid[]={ +"24 24 5 1", +". c None", +"# c #000000", +"a c #00ffff", +"c c #800000", +"b c #ffffff", +"........................", +"........................", +"......###.....###.......", +".....#...#...#...#......", +"....##############......", +"....#a#aaaaaaaa#a##.....", +"....#aaaaaaaaaaaa##.....", +"....###############.....", +"....#bbbbbbbbbbbb##.....", +"....#bbbbbbbbbbbb##.....", +"....#bbbccbbbcbbb##.....", +"....#bbcbbcbccbbb##.....", +"....#bbbbcbbbcbbb##.....", +"....#bbbcbbbbcbbb##.....", +"....#bbcbbbbbcbbb##.....", +"....#bbccccbbcbbb##.....", +"....#bbbbbbbbbbbb##.....", +"....#bbbbbbbbbbbb##.....", +"....#bbbbbbbbbbbb##.....", +"....###############.....", +"......#############.....", +"........................", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TRxClock.png b/components/rx/version/2.1/images/TRxClock.png new file mode 100644 index 0000000000000000000000000000000000000000..f94fb08013c4dc7986c0840e3d55fe1a1eb79a02 GIT binary patch literal 982 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pftew|C&ZNz$OnQ3hK2?Z1*Cxl z5F9vg;6G5{Kf`}81*Cy2AOMPug3%BdHX-2Ywx9;+8OD+zzhDN3XE)M-oEA?P$B>F! zb0;0-Yf#{E-Yxv^|MgQVjo8*?S!i&we9PbxIlSzqeZqn;i$+-s$!H5P*)5uW3oKSN zte<h<^j3b(J;%RkJ~Gl@{mR(sU=T;f*I9C^9ZM6mL_(G@JzctE<_dR-4tFoP<+tu9 zd$28jmRPBk6<~L+y-8yYyWuB>BQ=vBY(HPXc<!T<WHQU;y`YfxboFyt=akR{0AGA! AjQ{`u literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxCloseFormValidator.png b/components/rx/version/2.1/images/TRxCloseFormValidator.png new file mode 100644 index 0000000000000000000000000000000000000000..30885956e6af627b8c8490b7703eb7e2ab6b2445 GIT binary patch literal 334 zcmV-U0kQsxP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000i0 z000i00SA;*-2eaq07*naR7i={RY4YnAPB{I-7AhpH^W79sTRz_YzzgnW;1`4ApEZo z0{lCIHV}dw-z?hQ1!34@Q|{^P7SWtiYcLU@6eI!=!es7l294t+kBFXSQy`-H1c>Mc z;hg*&+1<yS{I3y3Ik{XfOHGiISdah^cXhW2ERt*+N!}#z?sk2z2U#gX3o6%U4O$7d zZ3CPUI5KeLX5#F330kM<b&b_s-7e}Cy(i#OoA%U~`?MgJ;Hr8r&LqgHwfd}57gNV& zxWmr6nii>EGbG#4sJMe+0_Nh1_P?5$VMc@*zqX9-d(Z+cRM{4)ZMO(o<J=qZ^_%>o gM~8?8hWZ11016><a-~OF3;+NC07*qoM6N<$f{4_LlK=n! literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxDBCalcEdit.xpm b/components/rx/version/2.1/images/TRxDBCalcEdit.xpm new file mode 100644 index 000000000..4f527e45b --- /dev/null +++ b/components/rx/version/2.1/images/TRxDBCalcEdit.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static char *TRxDBCalcEdit_xpm[]={ +"18 18 8 1", +"# c None", +"e c #000000", +"f c #000080", +"c c #008080", +"d c #00ffff", +". c #808080", +"a c #c0c0c0", +"b c #ffffff", +"...............###", +".a.baaaabaaaaa.###", +"...............###", +".a.bbbbabbbbbb.###", +".b.baababaaaab.###", +".a.bbbbabbbbbb.###", +".bbcccccccccccccc#", +".acbdbdbdbdbdbdbce", +".bcdeeeeeeeeccccfe", +".acbebbbbbbaccccfe", +"..cdeaaaaaaaccccfe", +"##cbccccccccccccfe", +"##cdcebebebebebefe", +"##cbccccccccccccfe", +"##cdcebebebebbaefe", +"##cbccccccccccccfe", +"##ccfffffffffffffe", +"###eeeeeeeeeeeeee#"}; diff --git a/components/rx/version/2.1/images/TRxDBColorBox.png b/components/rx/version/2.1/images/TRxDBColorBox.png new file mode 100644 index 0000000000000000000000000000000000000000..3987f09162852d7d191caf9c4c47f72cf7c9653f GIT binary patch literal 501 zcmV<R0Sf+!P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000i0000i00SA;*-2eaqmq|oHR7i=nRXa|@Kop#f+(xk=1xG*> zAR}rDBtXsqKqv)8I$O{#5a<ArHfXm?L6IvE2@rBfg+z#;$Ss1ofLV%UEwAHm0wb-o z@7bPtZ@eFZ2`tMJa?Uv?fbipZ5R(4Rgj@*tV;rXmWGNtmJSY-R93Jr~0Dx^<N-`X) z2-}iu6R|8yFvb;985fJou^%=XN1*gJ;ra1cILRW{9c3DnHkH`v_5`I(0RWn`gfZ@` z%Wm|?>!j`h0N>kZ{=8f+!}}3%oE`wc>Gp&cv?Od%UQl|9QmLfmv><6xb!qtc9AanJ zoXQiq93w5#^-ScRw-lK-D+Y+`j)bl+Mq0GDe~`I@Fgo`Gm=yzBy?z14qAglmU71S& zNLfV^)#^fK;&%H>i8aO;Y}=k9P1<C6pb<hyt92*({Z~K9IVW<XL{*hb003&W!^rdG z{cSKau_BO$t*gt-gwOSJB`)NvCqFWE5U%Ra1lBi<nTa2shUo$lH!ss?OdL)&J4*cT r{~-3d3+{tiVOETI0bqP#%q#K>Gq3rX(1&x@00000NkvXXu0mjfK_1K` literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxDBComboEdit.xpm b/components/rx/version/2.1/images/TRxDBComboEdit.xpm new file mode 100644 index 000000000..845470c51 --- /dev/null +++ b/components/rx/version/2.1/images/TRxDBComboEdit.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char *TRxDBComboEdit[]={ +"24 24 5 1", +". c None", +"c c #000000", +"# c #808080", +"a c #c0c0c0", +"b c #ffffff", +"........................", +".###############........", +".#a#baaaabaaaaa#........", +".###############........", +".#a#bbbbabbbbbb#........", +".#b#baababaaaab#........", +".#a#bbbbabbbbbb#........", +".#b#baababaaabb#........", +".#a#bbbbabbbbbb#........", +".#b#baababaaaab#........", +".#a#bbbbabbbbbb#........", +".######################.", +"..#cccccccccccccccccccb.", +"..#cbbbbbbbbbabbbbbbbab.", +"..#cbbbbbbbbbabaaaaa#ab.", +"..#cbbbbbbbbbabaaaaa#ab.", +"..#cbbbbbbbbbabac#ca#ab.", +"..#cbbbbbbbbbabaaaaa#ab.", +"..#cbbbbbbbbbabaaaaa#ab.", +"..#cbbbbbbbbbab######ab.", +"..#caaaaaaaaaaaaaaaaaab.", +"..#bbbbbbbbbbbbbbbbbbbb.", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TRxDBCurrEdit.png b/components/rx/version/2.1/images/TRxDBCurrEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..44066afc9e8056afbce770bd8306f0104f6ec786 GIT binary patch literal 385 zcmV-{0e=38P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0003<Nkl<Zc-rlk zK@Ni;5Jjbn_6DBE^WY&$PtZ+a=b|^!Wfz`_I*GKPLM^opB=Zvk8o~ekqbMsf7sEC{ z0N4fy0NVfoU>hI+Yy$*<ZGZq`2XfA}=_{p%d9)6XV1Kz;QImpsDb;JguK5Vz6Tl?` zFf|{BSW0DEkSG9XrwM?{vYeeS#M$a!f^!QYzV;KHfH7@g#soa0^qNaWC9`P>NhxDI z6kXR9RaNZ=0PRu<eF9)(`Rn1)u=~3M_)2JP0$^TS&o>IdR0e=8tO(O%=m5|zm5@?y z0`}WKDS%K3Ws!h?A$up_8cqxVTHjm9n6*tO1z<ziy53}QI=uIjO#sw1cis07$NZ7` z%+8@u0fz4tJ#3DF)fY=)A^QcuClr9TZ8rk|?G2F3uV^wx2q0Gx0JaDKTLgeD0>Bml fV2c2-l|8@{L+$l3RD#0i00000NkvXXu0mjfwmp}4 literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxDBGrid.xpm b/components/rx/version/2.1/images/TRxDBGrid.xpm new file mode 100644 index 000000000..fa191f0ff --- /dev/null +++ b/components/rx/version/2.1/images/TRxDBGrid.xpm @@ -0,0 +1,37 @@ +/* XPM */ +static char *TRxDBGrid[]={ +"24 24 10 1", +". c None", +"c c #000000", +"f c #008000", +"e c #00ffff", +"g c #800080", +"# c #808080", +"a c #c0c0c0", +"d c #ff0000", +"h c #ff00ff", +"b c #ffffff", +"........................", +".###############........", +".#a#baaaabaaaaa#........", +".###############........", +".#a#bbbbabbbbbb#........", +".#b#baababaaaab#........", +".#a#bbbbabbbbbb#........", +".#b#baababaaabb#........", +".#a#bbbbabbbbbb#........", +".#b#baababaaaab#........", +".#a#bcccccccccccccccccc.", +".####cacbaaaaabaaaaaaac.", +".....cccccccccccccccccc.", +".....cacbbbbbabbbbbbbbc.", +".....cbcaaaaaaaaaaaaaac.", +".....cacbbbbbabbbbbbbbc.", +".....ccccdddddddddddddc.", +".....cbebcbbbabbbbbbbbc.", +".cccccebecddddddddddddc.", +".cfffcbebccbbabbbbbbbbc.", +".cfffcccccgcaaaaaaaaaac.", +".cfffcbcbchgcabbbbbbbbc.", +".cccccccccghgcccccccccc.", +".........cccccc........."}; diff --git a/components/rx/version/2.1/images/TRxDBLookupCombo.xpm b/components/rx/version/2.1/images/TRxDBLookupCombo.xpm new file mode 100644 index 000000000..3c6245dda --- /dev/null +++ b/components/rx/version/2.1/images/TRxDBLookupCombo.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char *TRxDBLookupCombo[]={ +"24 24 8 1", +". c None", +"# c #000000", +"c c #000080", +"e c #800000", +"f c #808080", +"d c #c0c0c0", +"b c #ff0000", +"a c #ffffff", +"..##....................", +".#aa#b.........c........", +"#daaa#b.......cc........", +"#ddaaa#......cccccccc...", +".#ddaaa##.....cc.....c..", +"..#ddaaaa###...c.....c..", +"...#ddaabbbb#........c..", +"....#ddebbb#.........c..", +"..c.#feeeb#d###########.", +"..c..#eef#daaaaaaa#aad#.", +"..c..#ef#dccccccca#a#d#.", +"..c..#e#daaaaaaaaa#ddd#.", +"..c...#.###############.", +"..c.....#aaaaaaaaaaaaa#.", +"..c.....#acccccccccaaa#.", +"..c.c...#ccccccccccccc#.", +"..c.cc..#caaaaaaaaaacc#.", +"...cccc.#ccccccccccccc#.", +"....cc..#acccccccccaaa#.", +"....c...#aaaaaaaaaaaaa#.", +"........#accccccccccaa#.", +"........#aaaaaaaaaaaaa#.", +"........###############.", +"........................"}; diff --git a/components/rx/version/2.1/images/TRxDBProgressBar.png b/components/rx/version/2.1/images/TRxDBProgressBar.png new file mode 100644 index 0000000000000000000000000000000000000000..de40d879de01ba803beba39ba35adcd477745c29 GIT binary patch literal 373 zcmV-*0gC>KP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000i0 z000i00SA;*-2eaqCrLy>R7i<qV4yKzWME)m$jZw44-=R+Z5ks3!~g%dwZOG95@kbH zR@VRj{~6#I*)rUK7zZGf{zu1zEg{|lrtIu26ajQTrok}7k=eKb<NyB*|B(%yI&~UD zc6JstE^t`_*G@1VSYU<{4;Z0|fVfCz%*x98k8A<VH@v(WBv^_GIy>_i85r;cQE*@o zMHcMZbB&?1GmjBx5E+>mGI-Wrg!8vI>tpb7fpcfh!`Up^*;x$Of{1~EfuT0e07=__ z3_dY{1r{VQfXqL4_X}LyN|hUfPm~2PL$QIaNAJMdIUf2Ld}08J8I5$ng3ZwWDN`A~ zeSAk13mE6lUHJd(*^?-SvoSI-?Ax=KB7<Sc6rLN)%O??ELJ|RB8Eq7df*}9^2Bnpq T5GrU$00000NkvXXu0mjfE+dp+ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxDBRadioGroup.png b/components/rx/version/2.1/images/TRxDBRadioGroup.png new file mode 100644 index 0000000000000000000000000000000000000000..a607c630cd3db619017decf29e6489cdcf171632 GIT binary patch literal 882 zcmV-&1C9KNP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000i0000i00SA;*-2eas6iGxuR7i=nly68=VHC!HS2kCosg<sT z5{-e7wJ<1xvN9s5=tBgSBW{SZpuj#wf1pAX!Y^S(VnK0{HT)1^WFI0$#{#i1S{D67 zU82#H(y~8#)zgQuxi#lB>4D3==e*~Ap8K5l@G6AB>FSr854xBR%?XdE&BucBH*xiG zE4eEZ>HIi?Z)g<X@EE?KQOY_r<idqH3m5=yKImetWieUih4_X>>4Y$H-|$#)L*;@6 zBxYnFlarW|lGt<oIxDwq;pe~rwRw3QX=x#K)hYm-`}PqBkiB9Np7&p9aQB6g2Hrn@ zPlWxIy}g~2Jw0qJE2E*f7=VPdGzuyzxNo<E2%SzRzrTL<I{?_UCXMvuc%q#F36ZJn z9Xn_|b}SfMRTYoJf&0=Wp4QZG_|YT3Kv(ZK%qeLAoU`Rnuy#qr88ml93cS917qitG zmfKrX!&Qrg{PX8onv>%f$X>CC_E&>UObWS~Inz4`L2X_hV<RI>>N+KDZDDKg8XHMm zzMRh<55QE5HmqJsdU8CKjyF^~!U?O7TOq{3(T)xlrl#`v%o$qC%Q;YA55Tb3%af`q zO4{0}-@l(X_wM;O6r6I)xw^MfeZO0pUJQze$V=~cX?igzPFKGO2p2Dkh)9LWBtHfQ zL_}ml*X4@EB3_qEL`3R#?UHA;wIU+&>G^ZHoS7*GqF~MKq~Q0#C^c~g1KZ2XX*zqB z^`)hZ|N6yxyB&aK>(-H5Sm-Y-x$2Rfr=Li{DR<BTAczS5An0JOPyzzx6cg#m@ie&m z0BEk-jEK<F^8tV?%@Ju~7BB#K`@UmNF#%I!s#HxCX_|v>)ix`_UT;77+qU9rX(fN# zR>c5NygQ3q54)!wQ%!T=OFxXJ)uF03N=r{fCBJdwT0~9>4MH!y&=zT$168%5>*E-W zQRgDMg8&ZYXM_q0fUb{IR8)wrj}wUJg1A@(Mx%i{cj_@34YPXw#>{@1{~5#-P*q!y zJQ~SNh}oim$iE_{gI;g{Ka<B4P!wgR<#`Jzu9jArx5EF%A5C_>hSJtbBme*a07*qo IM6N<$f=|Aa3;+NC literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxDBTimeEdit.png b/components/rx/version/2.1/images/TRxDBTimeEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..7754a99f53555508ec947dfa429922d6b5d4200c GIT binary patch literal 493 zcmV<J0TTX+P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000i0 z000i00SA;*-2eaqpGibPR7i=nRxwV)Fcf`1lyZYyqyuF$CqV3orDAc45J%|5SRtA$ zs0#-v-z+@_LvO+I85+B;V>^uyPm1Ei{_p+&Y{voq8Dtw;Yq9O7X$TOBhqzG6_j}M< ziwNB1i^b6=o*~bRh;*+!$P(3c<6c&k1^`SZmz{vw?B2E4>yO?7NNX*1-8fP!R#h4o z=ReV)<?B11pB{S2Z*K4M7X1~>EQN1LXb}KhJ$@eb+2`=Rvm{ttBj1wHqM<mWu@jMY z{zpD(DjQnupQrOpr;6>{bu@D#0yF1VQCXG%0HxH?T||z^Q!vI1vxu3YlmZc9I^Q^v z#bOZ^P)g-3vKjjV%<TH)gbkgysA-^D!kBoUfH4LHK(y}Kv0T-7DJUvnt@1^}Nw(t( zp!-Q!u4;@k-^$QB0G(=%mg#Qyjj}9V;P%Ua+cpPe%A1Fnh`$Gb{dpj%09GnF2ey*j zJh){F9DEJ4jS72XjWJ09;BcZPt4N_0=snenSavB4O(M)dLK1&dS$OS}&Sbv=3duqY jCC?2^EsfLvBwG9eebhvlVYC_?00000NkvXXu0mjf@2u7K literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxDBTrackBar.png b/components/rx/version/2.1/images/TRxDBTrackBar.png new file mode 100644 index 0000000000000000000000000000000000000000..19c09c7d9bb53fd5fec1bf8d9576262e0cab4604 GIT binary patch literal 417 zcmV;S0bc%zP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000i0 z000i00SA;*-2eaqQ%OWYR7i>KRIzTtFc5u4*(!FnM1rBpn29dXwNeK@16?TU7Jea9 zBv34Vp<mDq)=nK+Duk*^{fp{41iMLWrzt8MPqJh?&+qx}d;!i3p(aGcYA&S|0JDWI z%)J&MB4&mjWwRgH41b3pBF=MZe28N@Mp8B?A|Sap%p~=#(RoU&Y!b)hxOp*u-ECV( z-~m9M%Zg}qEh_a$k`;QrFH9!)njZuMEUuQErgI|-uPo|@G7$n;{;3v171WlZZui=H z$Qr?7W$@B;E*eubo!%LT*6U~IZOeScYfRC{`=?XP1{=Te6^(AkM$wYQT>~3mHyIJ> z;cm79!`X(jEaSuBjhUH;vyGG6@)cDPg+88kz+*7L&BGQ^=;Ot~?Ev-0GS_uT>We7! zwYaN`f#c84mX7Lg!VZ#qZW7l9b(1#YC&TqhPTlYP-_<U-;9U3y*rlw?7(KMf00000 LNkvXXu0mjflq|Nb literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxDateEdit.png b/components/rx/version/2.1/images/TRxDateEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..3295641fae58079af003873fbdbd5470cf8b6d6b GIT binary patch literal 986 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pftew|C&ZNz$Y)?^03sj;5kLq6 z2M!$g4;1*%@E=S8X&?&-fMTOyGz5lC2<S{W76bGQV@Z%-FoVOh8)-mJho_5UNX4zv ziQQZc3OugnO=2zo{^u`a@#UBuv?5z8r{a8^)}a)|397}6FW3KG%yggWWoi9^B;%-t z#wvl5>3<mIzb%_*7vhj=qns>Uzi^j(9qS>*&MJpHFPUFxYYND^SX%Hd@;J0iQah4i zm1)DCFr%u5&E7X3e=0iNmh|r7v&q{p$<Gf>iRRA`kCGJM>nsBbZBJJ}mvv4FO#r4( BVqyRQ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxDbLookupList.xpm b/components/rx/version/2.1/images/TRxDbLookupList.xpm new file mode 100644 index 000000000..6e47893dc --- /dev/null +++ b/components/rx/version/2.1/images/TRxDbLookupList.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char *TRxDbLookupList[]={ +"24 24 8 1", +". c None", +"# c #000000", +"c c #000080", +"e c #800000", +"f c #808080", +"d c #c0c0c0", +"b c #ff0000", +"a c #ffffff", +"..##....................", +".#aa#b.........c........", +"#daaa#b.......cc........", +"#ddaaa#......ccccccc....", +".#ddaaa##.....cc....c...", +"..#ddaaaa###...c....c...", +"...#ddaabbbb#.......c...", +"....#ddebbb#........c...", +"..c.#feeeb#d###########.", +"..c..#eef#aaaaaaaa#aad#.", +"..c..#ef#dcccccaaa#a#d#.", +"..c..#e#aaaaaaaaaa#ddd#.", +"..c...#daaccccccaa#####.", +"..c....#aaaaaaaaaa#ddd#.", +"..c....#accccccaaa#ddd#.", +"..c.c..#cccccccccc#ddd#.", +"..c.cc.#caaaaaaacc#ddd#.", +"...cccc#cccccccccc#ddd#.", +"....cc.#accccccaaa#####.", +"....c..#aaaaaaaaaa#add#.", +".......#acccccccaa#a#d#.", +".......#aaaaaaaaaa#ddd#.", +".......################.", +"........................"}; diff --git a/components/rx/version/2.1/images/TRxFolderMonitor.xpm b/components/rx/version/2.1/images/TRxFolderMonitor.xpm new file mode 100644 index 000000000..e01e988a4 --- /dev/null +++ b/components/rx/version/2.1/images/TRxFolderMonitor.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static char *TRxFolderMonitor[]={ +"24 24 6 1", +". c None", +"b c #000000", +"# c #808080", +"c c #c0c0c0", +"d c #ffff00", +"a c #ffffff", +"........................", +"........................", +".............###........", +"............#aaa##......", +"...........#aaaaaa##....", +"..........#aaaaaaaaab...", +"..........#aaaaaaaab....", +".........#aaaaaaaab.....", +".........#aaaaaaaba##...", +"......###aaaaaaaabaaab..", +".....#aa#aaaaaaabaaab...", +"....#acdbbaaaaaabaab....", +"....#adcdcbbaaabaab.....", +"....#acdc#aabbabaab.....", +"...#############abb.....", +"...#aaaaaaaaaa#babb.....", +"...#acdcdcdcdcdb##b.....", +"....#acdcdcdcdc#b#b.....", +"....#adcdcdcdcdcb#b.....", +".....#adcdcdcdcd#bb.....", +".....############bb.....", +"......bbbbbbbbbbbbb.....", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/TRxHistoryNavigator.png b/components/rx/version/2.1/images/TRxHistoryNavigator.png new file mode 100644 index 0000000000000000000000000000000000000000..ceced4ac13c6fbcd39f6396992f611263500d874 GIT binary patch literal 390 zcmV;10eSw3P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000ie z000ie0hKEb8vp<SI7vi7R7i={ls!wsKp4k=7hHm?R0O|7tKi_Eqg!z7m=BPymocMR zlij%WYv|x0NGY8<3QhsXLdM4-O-xLT%}a;=;kY;M|8mc9P=J6iFpPbY1E{X#YJ2uS z7=6h_q;%f%%JbF<Tpcv-o2COml7#sFOew7c@gE#SrKXfrwLU(-^6}H-$*x{VlJKX< zlko)r<H=>-XJdeS>#h|!q-l)eLMBoN%X)7`4rv0k4g`_L)&`!JHW3l615vOQ83?B7 zq|O1~pQVM>I*|2pCF|u%HgPPQIIeZq#mG@{GPUi}=3>$Q-WvtxQN;P#DFDZ#QE&2! z!0!amKgC`Wyu7~2&GnV42ow|aah{P^1d0iU!eQ2+Rv?-`4?_5-fIYnhXiVU`VRr#I k&>H0Lb(fDU{~cT48~!NTcziMx6aWAK07*qoM6N<$f`wtNaR2}S literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxIniPropStorage.png b/components/rx/version/2.1/images/TRxIniPropStorage.png new file mode 100644 index 0000000000000000000000000000000000000000..c1766a70d43c02eab70ae3cb9a516c057f4232d8 GIT binary patch literal 426 zcmV;b0agBqP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000ie000ie0hKEb8vp<SOi4sRR7i={l)+BJFbsx2Cw&_vkht&) z969hlvGY{C0Ma-hHZk6&jk&B<v$dlgyX=#qxUuU$iQU4jBLJ%E*G`;srj#O0zwr9< zd{qH61E3i%-ao$KE6&n&iKdCPZA;TM!@T=^A7Uy2cUB365CA{S4D*;u;QMRsHT@l5 z3EVwAtrVE%XZJDKr)QeM%m^VMB0~X}(9AhvjJP{p*O7C^%xK#d5h2D1KuW2K6Orj; zs_Ogg#(P2t4mjW<;v#a^?w?C3?(V+dZhGJJ366Kv@7PBzHW#z_ibMnvA%uXtqpFqP z%!n~kN}0c!a{@W%!B$l)B|0D<3Y=2H%&NF47I#q@C11m;Hob&J0#nJ&tSb6hj@wjK zC);p5j@MOncz@iclLGGUrIc#)qJXRFiGR!@f&Vc3p^bl1*Fpe9#1|Lrg8aA5FZH2Y UNCE6%lmGw#07*qoM6N<$f}@_ey#N3J literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxLoginDialog.png b/components/rx/version/2.1/images/TRxLoginDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a5f24c7f6c723374107fba1baaec1cb3e5c359 GIT binary patch literal 546 zcmV+-0^R+IP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000i0 z000i00SA;*-2eaq)Ja4^R7i={l|N`xQ51*28&l;GXhl@eEE(ECB~+*)+#$J6N~N1q zyVTJk>fofyEoAAGH4uuB%`6%hA=7mciJJ&Mg4L-hMQQ#lL2Ggys<F*WUS89;_?zxK z_nh;c!+o3s|GUJXK`U(kZ0z9mSZO8x#O~*g9=^7AkZHX&jFjMDLDqs0(UIOmgO094 z<!P;tmu)~=Yi|cisZf#|V*rRu5?n5qDHe-?e2)z1cDo26a2$tHsT3~2bzSoLJk@HI zLZN^Vf=nh89w3=a;<_%`Y?ex;f|QbI)c;2u33&8yg&(aPa$yU3t%Y20>2x~udcD3+ zJRT>P%S{HjeO)j=d!8ptD}4L9!;~{e>-#p1MuTS?_kEKd)X4rKC-*ot^%A}D7~5W_ z@fK2NEwAs@Id`Q_Eg-=64PvpbiLJDZ$IZIW30LhM4|;{5^k*H7rY0j8P11g9N% z`XE8%L`Z;J%P-h#12_PzF2UW!CcB?Q0sy>k8(yv7p!orAUWHHZnmn&V?V<?`7&}d8 zq~RklBlo}W$iTUQ2}Xr629;K*wCWEuV+?7fNUMLgzZ%=YFzGezv8`#ZZ6d(1aqc(b ky*oLirK7bDzH5)8-+V`nig43-8~^|S07*qoM6N<$g6q}vtN;K2 literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxMemoryData.xpm b/components/rx/version/2.1/images/TRxMemoryData.xpm new file mode 100644 index 000000000..0e4e61364 --- /dev/null +++ b/components/rx/version/2.1/images/TRxMemoryData.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static char *TRxMemoryData[]={ +"24 24 6 1", +". c None", +"# c #000000", +"c c #000080", +"d c #808080", +"a c #c0c0c0", +"b c #ffffff", +"........................", +"####################....", +"#a#baaaaaabaaaaaaaa#....", +"####################....", +"#a#bbbbbbabbbbbbbbb#....", +"#b#bccccbabcccccccb#....", +"#a#bbbbbbabbbbbbbbb#....", +"#b#bccccbabccccccbb#....", +"#a#bbbbbbabbbbbbbbb#....", +"#b#bccccbabccccccbb#....", +"#a#bbbbbbabbbbbbb###....", +"#b#bccccbabcbbb#daa#....", +"#a#bbbbbbabbb#daaaaa#...", +"#b#bccccbab#daaaaaaaa#..", +"#a#bbbbbb#daaaaaaaaaad#.", +"#b#bcccbdaaaaaaaaaaddd#.", +"#a#bbbbdbaaaaaaaaddd#a#.", +"########abaaaaaddd#ad#..", +"........#dbaaddd#ad#.#..", +".........#dbdd#ad#.#....", +"..........#a#ad#.#......", +"...........#d#.#........", +".............#..........", +"........................"}; diff --git a/components/rx/version/2.1/images/TRxRadioGroup.png b/components/rx/version/2.1/images/TRxRadioGroup.png new file mode 100644 index 0000000000000000000000000000000000000000..1d2d30fdf1936deff5210a4f58a9015c09f0b489 GIT binary patch literal 633 zcmV-<0*3vGP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000i0000i00SA;*-2ear8%ab#R7i={l|e`paTLaX>Vgu{DGd)B zwkHu}NrEoAL3?dYJOxV(EG~;DJFN#n2Qd*Z)*+TyD8^XUi%NwjA&4zlJP27tl(Mrf z2swwXu!w|x9c-r^cXnoTgXn_?GjIOi``(}T-aPo<(PZZo5Eqgy&ki2*Nv#N~y0BE| z1W;=wE+UACfUA|yRvCz@s%8Qns{-iyHhS)Z%M~D}Z&&#W`8@*1e9f+r8bnP2O-ub1 z0gs(i(^Bkr+(gqJp(tU7hi|wBT3K1DUqDg9W^gBRJ+Kuhi!_3xX0#5BhzR<x?$ET9 zMdZQ>Yf^s=u7{ARsXrF5?IJ}9)3I+~gWGLw-1Ygm)73?yx0l^a27qsd!GhOIac9Ro zn;smj-KI`8h;D3fOV_zPHpb&f1b|cR?OdIi;Yl<KBD_hb`CcqGHV3|7kWaas`R-Q~ znmry~%+0YrK29i^v={hYgCmhzbMSU~nR9->#dj@{;Mv3k7b6kQc6Zl52bEoPzpsxU z2M3f64;jg3E!_8OYn<-v<m1*B;P9((szGdXlel4UX>^q5)6=H^b3V_@`FTdNS-uns zyjxwZzCj_sS2J)Wnp#>2&dzeLr-$84hVughJdMS;GC9c^ua{6V$<ok}g(Hrpsv;sX z)7mOu4MWO!oleVx{(gD2xF`<;0g+P4{I(vCi)HgvE{fw&;Y5R0_in{O{GZ|{d(;}3 TwGPns00000NkvXXu0mjf({U3B literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxSpeedButton.png b/components/rx/version/2.1/images/TRxSpeedButton.png new file mode 100644 index 0000000000000000000000000000000000000000..607d4c111f073e68d5423a61af348919d17a4080 GIT binary patch literal 1023 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pftew|C&ZNz$Y)?^03sj;5kLq6 z2M!$g4;1*%@E=S8X&?&-fMTOyGz5lC2<S{W76bGQV@Z%-FoVOh8)-n!T2B|pkcwNi zlP>ZdR^V{e&kc{5_4j}KH`g`V&C70<lo}svFLvPY`mvGY0biK7PWZe{trxmCbSs>> zCAxfNtL@(zr+5>!0-372CCXMC+teL-aHV|mL(au(zSkbOcg=$38oSY&mswt$IzOHI z@oJStyHx5nBU8!QDxN7Pyt7(ZzcU4{3VHOTd;X@2?lZ3Q*6}P2iPhX+c_cjP+v}a? qWq+&Oe*X{HyIz3lir}@S$Ez4KMJGt|<;>y(MTw`YpUXO@geCyK`h3y= literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxSpinButton.png b/components/rx/version/2.1/images/TRxSpinButton.png new file mode 100644 index 0000000000000000000000000000000000000000..d9a7267d4d263db7f65a7984cd04d1cb53b2a61c GIT binary patch literal 969 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pftew|C&ZNz$OnQ3hK2?Z1*Cz* zfddB`8XEos1^zSq2U9>A$N~bO*eDncfngH@C(H|LfSzG23GxeOaCmkj4ah0?ba4!+ zxV84uUcLqe9+n529vu5^zg+k_tFPsjKN7-=xlh)f?ev(?u3pn5$*owbS>XIl)?+vO z)Eh+y8s}xNspR9kvTX6wM~$J=^cOrcHjrQNZNmoU+3^l<XEuJ`mdRhU{!_9Z!*}Db nT#3GojVfQ*<KybC_)mYxkggIT8OvI<78JOiu6{1-oD!M<s=8js literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxSpinEdit.png b/components/rx/version/2.1/images/TRxSpinEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b9fcd6288e0acb915a90c20293c2984fe104fb GIT binary patch literal 957 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pftew|C&ZNz$OnQ3hK2?Z1*Cz* zfddB`8XEos1^zSq2U9>A$N~bO*eDncfngH@C(H|LfSzG23GxeOaCmkj4amv%ba4!+ zxV3kpBliIXj@Gx2*qZ<Tzi-L0tvoZUDf#L`@0*VI++S^WX`XzoVXyLiHnY>~gPU|& zr}7IpF)a}1+w`iPQJ_#fL$OkL=_iJcceWw?3#v@!Gp{J#YIk7&$~%@jzjDnh3s1f3 b?%O1OS;bYdLFlP6C_p`3{an^LB{Ts51mah| literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxTimeEdit.png b/components/rx/version/2.1/images/TRxTimeEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..ca1f3e54f9b16f3b9b0f591c514098188ff5bc88 GIT binary patch literal 418 zcmV;T0bTxyP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000i0 z000i00SA;*-2eaqR7pfZR7i>KR6$O|Fc6$6h&Q#j(hnf+NE~`?-;nhO5E9%_E5SqB zR2<-p_ze=nA+fRR#BEU#7e=x+>)5-qJDULi_-haVBx$*P`jrHyvGe}+eAM6<mse>5 z0Jyn*I9h_uW`jZB%h7zD*j@V`Bon_k!B23)vn)wx0+M*WpCp!K#y+lsBtG$x_yLl% zSUd`V8n;<yCNm5E_j_qLTWJ^Sx>gW*I=ya_^|wF*$cEi;w!&z>#>?F~oO7M$$K!D` zMI=LD=L}V401&K)a|X%U7EGWLn~a?DWj*`8UHi0X&<2NdR;G|uk_zbuAznrHyDI3a z0!RlTi0s+NJ$Fp4N0n5YRxPR3Q`!DeD(KRHu?E{yQ_`TS3?xw3b@8lkz#$XYTx4>; z7um0(G);$0S|AcV3rN4@F7e~Z+$TX?0k;C=Yz_=wI@qVk-hn;70CCZJrcyF!-T(jq M07*qoM6N<$f|Pc(0RR91 literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxVersionInfo.png b/components/rx/version/2.1/images/TRxVersionInfo.png new file mode 100644 index 0000000000000000000000000000000000000000..a88218ba481ee8424b47cc2f42711c4d3c5bc269 GIT binary patch literal 330 zcmV-Q0k!^#P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000jX z000jX0U?|6GXMYp{7FPXR7i={mBA6hAP_}g9Gmb+8y?p(Y{hoc21ncAm@@E?Fo89| zGU~y9VRrKK9}9%QziaASV$AFYzZsARzrAJ#RgA6hG01_*5^jem!%=u1(tG}{Q-?pb z>%JPZYlYdpoen<NPzTRh1`YsR?|wR$fjK0`9J0(35gEy6nThANrGx<BeNhI$HNXm> zyGRg#+d8N)*PfvU)F8Wp_lKcjgXxYcOH_x{mcyyB14t0iprQj2!nP+)WZj>%MbZUm z(0W952Sx4Kfe6UgKQy1HTP>C!&aT#n<^TeOum(E^m&arH?lLOIw0A!sl!xMnm)-c) cZdBR93m+|1|3_0jkpKVy07*qoM6N<$f?QRKqyPW_ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TRxViewsPanel.png b/components/rx/version/2.1/images/TRxViewsPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..8054b0856025e0ef576b4e3997bed5bb9249c472 GIT binary patch literal 311 zcmV-70m%M|P)<h;3K|Lk000e1NJLTq000;O000*V1^@s65h0H)00009a7bBm000ie z000ie0hKEb8vp<R=}AOER7i=<l~E3aAPhvO8}CJLX1Q58S@#1`L|hRx+4)hM@J1LX zl9?G1UXd9<fSC<~2!Nej)BS6jL<A!9;+4yw8o<mD5is*@xT<1`w{$otA_DV%=9~in zgb;SmN##5<0ML+h2m#Ky9XN;9<`ZrzEo_}H1_r8R@Px7*Tm!o^ki*+YNnzTZfxr$X zCA?hNI$w|I3^=MRgX@q7dQdM~X)@FU^0eZ9RjxaOD{!yYqCx(kXx#>_MeEV$4D?hl z;ts?ENI#xU@rQFCs;Zm8JV&Va9;)?Etw)JVwlvIp{}?<s_ySJ4l0q2x%)$Tw002ov JPDHLkV1i=8d9VNg literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/TSECRETPANEL.xpm b/components/rx/version/2.1/images/TSECRETPANEL.xpm new file mode 100644 index 000000000..4607e79b4 --- /dev/null +++ b/components/rx/version/2.1/images/TSECRETPANEL.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static char *TSECRETPANEL[]={ +"24 24 11 1", +". c None", +"# c #000000", +"d c #000080", +"i c #0000ff", +"e c #008000", +"g c #800000", +"a c #808080", +"b c #c0c0c0", +"h c #ff0000", +"f c #ffff00", +"c c #ffffff", +"........................", +"........................", +".######################.", +".#aaaaaaaaaaaaaaaaaaab#.", +".#aaaaaaaaaaaaaaaaaacc#.", +".#aabbbbbbbbbbbbbbbbcc#.", +".#aabbbbbd#dbbbbbbbbcc#.", +".#aabbbbdefedbbbbbbbcc#.", +".#aabbbb#fff#aabbbbbcc#.", +".#aabbbbdefedbb##bbbcc#.", +".#aabbbbbd#dbbbggbbbcc#.", +".#aabbbbabbbbb#hh#bbcc#.", +".#aabbbbabbbbb#hh#bbcc#.", +".#aabb#####bb#hhhh#bcc#.", +".#aabb#iii#bb######bcc#.", +".#aabb#iii#aabbbbbbbcc#.", +".#aabb#iii#bbbbbbbbbcc#.", +".#aabb#####bbbbbbbbbcc#.", +".#aabbbbbbbbbbbbbbbbcc#.", +".#accccccccccccccccccc#.", +".#bccccccccccccccccccc#.", +".######################.", +"........................", +"........................"}; diff --git a/components/rx/version/2.1/images/componet_img/DICE1.xpm b/components/rx/version/2.1/images/componet_img/DICE1.xpm new file mode 100644 index 000000000..ec087375f --- /dev/null +++ b/components/rx/version/2.1/images/componet_img/DICE1.xpm @@ -0,0 +1,71 @@ +/* XPM */ +static char *DICE1[]={ +"64 64 4 1", +". c None", +"# c #000000", +"b c #c0c0c0", +"a c #ffffff", +"................................................................", +".............................######.............................", +"...........................##########...........................", +".........................####aaaaaa####.........................", +".......................####aaaaaaaaaa####.......................", +".....................####aaaaaaaaaaaaaa####.....................", +"...................####aaaaaaaaaaaaaaaaaa####...................", +".................####aaaaaaaaaaaaaaaaaaaaaa####.................", +"...............####aaaaaaaaaaaaaaaaaaaaaaaaaa####...............", +".............####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.............", +"...........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####...........", +".........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........", +".......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.......", +".....####aaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaa####.....", +"...####aaaaaaaaaaaaaaaaaaaaa########aaaaaaaaaaaaaaaaaaaaa####...", +".####aaaaaaaaaaaaaaaaaaaaaa##########aaaaaaaaaaaaaaaaaaaaaa####.", +"#####aaaaaaaaaaaaaaaaaaaaaa##########aaaaaaaaaaaaaaaaaaaaaa#####", +"##b####aaaaaaaaaaaaaaaaaaaaa########aaaaaaaaaaaaaaaaaaaaa####a##", +"##bbb####aaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaa####aaa##", +"##bbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##", +"##bbbbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaaaa##", +"##bbbbbbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaa###aaaa##", +"##bbbbbbbbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaa####aaaa######aaa##", +"##bbbbbbbbbbbbbbb####aaaaaaaaaaaaaaaaaaaaaa####aaaaaa######aaa##", +"##bbbbbbbbbbbbbbbbb####aaaaaaaaaaaaaaaaaa####aaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbb####aaaaaaaaaaaaaa####aaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaa######aaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbbbbbbbbbbbbbbb###bbbb######aaaa###aaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb#######bbb##aaa#######aaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb#######bbb##aaa#######aaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbb###bbbb#######bbb##aaa#######aaaa###aaaaaaaaaaaa##", +"##bbbbbbbbbbb######bbb######bbb##aaa######aaa######aaaaaaaaaaa##", +"##bbbbbbbbbbb######bbbb####bbbb##aaaa####aaaa######aaaaaaaaaaa##", +"##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##", +"##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##", +"##bbbb###bbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaa###aaaa##", +"##bbb######bbb######bbbbbbbbbbb##aaaaaaaaaaa######aaa######aaa##", +"##bbb######bbbb####bbbbbbbbbbbb##aaaaaaaaaaaa####aaaa######aaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##", +"##bbbb######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa######aaaa##", +"###bbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa####aaaa###", +".####bbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaa###aaaaaaaaaaaaaaaaa####.", +"...####bbbbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaaaa####...", +".....####bbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaa####.....", +".......####bbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaa####.......", +".........####bbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaa####.........", +"...........####bbbbbbbbbbbbbbbb##aaa#######aaaaaa####...........", +".............####bbbbbbbbbbbbbb##aaa######aaaaa####.............", +"...............####bbbbbbbbbbbb##aaaa####aaaa####...............", +".................####bbbbbbbbbb##aaaaaaaaaa####.................", +"...................####bbbbbbbb##aaaaaaaa####...................", +".....................####bbbbbb##aaaaaa####.....................", +".......................####bbbb##aaaa####.......................", +".........................####bb##aa####.........................", +"...........................##########...........................", +"..............................####..............................", +"................................................................"}; diff --git a/components/rx/version/2.1/images/componet_img/DICE2.xpm b/components/rx/version/2.1/images/componet_img/DICE2.xpm new file mode 100644 index 000000000..6586a3c2c --- /dev/null +++ b/components/rx/version/2.1/images/componet_img/DICE2.xpm @@ -0,0 +1,71 @@ +/* XPM */ +static char *DICE2[]={ +"64 64 4 1", +". c None", +"# c #000000", +"b c #c0c0c0", +"a c #ffffff", +"................................................................", +".............................######.............................", +"...........................##########...........................", +".........................####aaaaaa####.........................", +".......................####aaaaaaaaaa####.......................", +".....................####aaaaa####aaaaa####.....................", +"...................####aaaaa########aaaaa####...................", +".................####aaaaaa##########aaaaaa####.................", +"...............####aaaaaaaa##########aaaaaaaa####...............", +".............####aaaaaaaaaaa########aaaaaaaaaaa####.............", +"...........####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####...........", +".........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........", +".......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.......", +".....####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.....", +"...####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####...", +".####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.", +"#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####", +"##b####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####a##", +"##bbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaa##", +"##bbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##", +"##bbbbbbbbb####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####aaaaaaaaa##", +"##bbbbbbbbbbb####aaaaaaaaaaa########aaaaaaaaaaa####aaaa###aaaa##", +"##bbbbbbbbbbbbb####aaaaaaaa##########aaaaaaaa####aaaa######aaa##", +"##bbbbbbbbbbbbbbb####aaaaaa##########aaaaaa####aaaaaa######aaa##", +"##bbbbbbbbbbbbbbbbb####aaaaa########aaaaa####aaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbb####aaaaa####aaaaa####aaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaa######aaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbb######aaaa###aaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbb###bbbbbbbbbbbbbb##aaa#######aaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbb######bbbbbbbbbbbb##aaa######aaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbb######bbbbbbbbbbbb##aaaa####aaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaa###aaaa##", +"##bbbbbbbbbbbb######bbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa######aaa##", +"##bbbbbbbbbbbbb####bbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa######aaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa######aaaa##", +"###bbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa####aaaa###", +".####bbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaa###aaaaaaaaaaaaaaaaa####.", +"...####bbbbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaaaa####...", +".....####bbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaa####.....", +".......####bbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaa####.......", +".........####bbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaa####.........", +"...........####bbbbbbbbbbbbbbbb##aaa#######aaaaaa####...........", +".............####bbbbbbbbbbbbbb##aaa######aaaaa####.............", +"...............####bbbbbbbbbbbb##aaaa####aaaa####...............", +".................####bbbbbbbbbb##aaaaaaaaaa####.................", +"...................####bbbbbbbb##aaaaaaaa####...................", +".....................####bbbbbb##aaaaaa####.....................", +".......................####bbbb##aaaa####.......................", +".........................####bb##aa####.........................", +"...........................##########...........................", +"..............................####..............................", +"................................................................"}; diff --git a/components/rx/version/2.1/images/componet_img/DICE3.xpm b/components/rx/version/2.1/images/componet_img/DICE3.xpm new file mode 100644 index 000000000..acf2a159c --- /dev/null +++ b/components/rx/version/2.1/images/componet_img/DICE3.xpm @@ -0,0 +1,71 @@ +/* XPM */ +static char *DICE3[]={ +"64 64 4 1", +". c None", +"# c #000000", +"b c #c0c0c0", +"a c #ffffff", +"................................................................", +".............................######.............................", +"...........................##########...........................", +".........................####aaaaaa####.........................", +".......................####aaaaaaaaaa####.......................", +".....................####aaaaa####aaaaa####.....................", +"...................####aaaaa########aaaaa####...................", +".................####aaaaaa##########aaaaaa####.................", +"...............####aaaaaaaa##########aaaaaaaa####...............", +".............####aaaaaaaaaaa########aaaaaaaaaaa####.............", +"...........####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####...........", +".........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........", +".......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.......", +".....####aaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaa####.....", +"...####aaaaaaaaaaaaaaaaaaaaa########aaaaaaaaaaaaaaaaaaaaa####...", +".####aaaaaaaaaaaaaaaaaaaaaa##########aaaaaaaaaaaaaaaaaaaaaa####.", +"#####aaaaaaaaaaaaaaaaaaaaaa##########aaaaaaaaaaaaaaaaaaaaaa#####", +"##b####aaaaaaaaaaaaaaaaaaaaa########aaaaaaaaaaaaaaaaaaaaa####a##", +"##bbb####aaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaa####aaa##", +"##bbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##", +"##bbbbbbbbb####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####aaaaaaaaa##", +"##bbbbbbbbbbb####aaaaaaaaaaa########aaaaaaaaaaa####aaaa###aaaa##", +"##bbbbbbbbbbbbb####aaaaaaaa##########aaaaaaaa####aaaa######aaa##", +"##bbbbbbbbbbbbbbb####aaaaaa##########aaaaaa####aaaaaa######aaa##", +"##bbbbbbbbbbbbbbbbb####aaaaa########aaaaa####aaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbb####aaaaa####aaaaa####aaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaa######aaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbbbbbbbbbbbbbbb###bbbb######aaaa###aaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaa###aaaa##", +"##bbbbbbbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaa######aaa##", +"##bbbbbbbbbbbbbbbbbbb#######bbb##aaa#######aaaaaaaaaa######aaa##", +"##bbbbbbbbbbbbbbbbbbb#######bbb##aaa#######aaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbb#######bbb##aaa#######aaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbb######bbb##aaa######aaaaaaaaaa#######aaa##", +"##bbbbbbbbbbbbbbbbbbbbb####bbbb##aaaa####aaaaaaaaaaa######aaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaa###aaaaaaaaaaaaaaaaaaaa##", +"##bbbb###bbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaa###aaaa##", +"##bbb######bbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaa######aaa##", +"##bbb######bbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaa######aaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaa#######aaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaa#######aaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaa######aaaaaaaaaa#######aaa##", +"##bbbb######bbbbbbbbbbbbbbbbbbb##aaaa####aaaaaaaaaaa######aaaa##", +"###bbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa####aaaa###", +".####bbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaa###aaaaaaaaaaaaaaaaa####.", +"...####bbbbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaaaa####...", +".....####bbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaa####.....", +".......####bbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaa####.......", +".........####bbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaa####.........", +"...........####bbbbbbbbbbbbbbbb##aaa#######aaaaaa####...........", +".............####bbbbbbbbbbbbbb##aaa######aaaaa####.............", +"...............####bbbbbbbbbbbb##aaaa####aaaa####...............", +".................####bbbbbbbbbb##aaaaaaaaaa####.................", +"...................####bbbbbbbb##aaaaaaaa####...................", +".....................####bbbbbb##aaaaaa####.....................", +".......................####bbbb##aaaa####.......................", +".........................####bb##aa####.........................", +"...........................##########...........................", +"..............................####..............................", +"................................................................"}; diff --git a/components/rx/version/2.1/images/componet_img/DICE4.xpm b/components/rx/version/2.1/images/componet_img/DICE4.xpm new file mode 100644 index 000000000..4a78ceb82 --- /dev/null +++ b/components/rx/version/2.1/images/componet_img/DICE4.xpm @@ -0,0 +1,71 @@ +/* XPM */ +static char *DICE4[]={ +"64 64 4 1", +". c None", +"# c #000000", +"b c #c0c0c0", +"a c #ffffff", +"................................................................", +".............................######.............................", +"...........................##########...........................", +".........................####aaaaaa####.........................", +".......................####aaaaaaaaaa####.......................", +".....................####aaaaa####aaaaa####.....................", +"...................####aaaaa########aaaaa####...................", +".................####aaaaaa##########aaaaaa####.................", +"...............####aaaaaaaa##########aaaaaaaa####...............", +".............####aaaaaaaaaaa########aaaaaaaaaaa####.............", +"...........####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####...........", +".........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........", +".......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.......", +".....####aaaaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa####.....", +"...####aaaaa########aaaaaaaaaaaaaaaaaaaaaaaa########aaaaa####...", +".####aaaaaa##########aaaaaaaaaaaaaaaaaaaaaa##########aaaaaa####.", +"#####aaaaaa##########aaaaaaaaaaaaaaaaaaaaaa##########aaaaaa#####", +"##b####aaaaa########aaaaaaaaaaaaaaaaaaaaaaaa########aaaaa####a##", +"##bbb####aaaaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa####aaa##", +"##bbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##", +"##bbbbbbbbb####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####aaaaaaaaa##", +"##bbbb###bbbb####aaaaaaaaaaa########aaaaaaaaaaa####aaaa###aaaa##", +"##bbb######bbbb####aaaaaaaa##########aaaaaaaa####aaaa######aaa##", +"##bbb######bbbbbb####aaaaaa##########aaaaaa####aaaaaa######aaa##", +"##bbb#######bbbbbbb####aaaaa########aaaaa####aaaaaaa#######aaa##", +"##bbb#######bbbbbbbbb####aaaaa####aaaaa####aaaaaaaaa#######aaa##", +"##bbb#######bbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaa#######aaa##", +"##bbbb######bbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaa######aaaa##", +"##bbbbb####bbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbbbbbbbbbbbbbbb###bbbb######aaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbb###bbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb######bbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb######bbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbbb######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbb######bbbbbbbbbbb####bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbbb###bbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbb###bbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb######bbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb######bbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbbb######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbb######bbbbbbbbbbb####bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"###bbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaa###", +".####bbbbbbbbbbbbbbbbb###bbbbbb##aaaaaa###aaaaaaaaaaaaaaaaa####.", +"...####bbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaaaa####...", +".....####bbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaa####.....", +".......####bbbbbbbbbb#######bbb##aaa#######aaaaaaaaaa####.......", +".........####bbbbbbbb#######bbb##aaa#######aaaaaaaa####.........", +"...........####bbbbbb#######bbb##aaa#######aaaaaa####...........", +".............####bbbbb######bbb##aaa######aaaaa####.............", +"...............####bbbb####bbbb##aaaa####aaaa####...............", +".................####bbbbbbbbbb##aaaaaaaaaa####.................", +"...................####bbbbbbbb##aaaaaaaa####...................", +".....................####bbbbbb##aaaaaa####.....................", +".......................####bbbb##aaaa####.......................", +".........................####bb##aa####.........................", +"...........................##########...........................", +"..............................####..............................", +"................................................................"}; diff --git a/components/rx/version/2.1/images/componet_img/DICE5.xpm b/components/rx/version/2.1/images/componet_img/DICE5.xpm new file mode 100644 index 000000000..5a7ebd587 --- /dev/null +++ b/components/rx/version/2.1/images/componet_img/DICE5.xpm @@ -0,0 +1,71 @@ +/* XPM */ +static char *DICE5[]={ +"64 64 4 1", +". c None", +"# c #000000", +"b c #c0c0c0", +"a c #ffffff", +"................................................................", +".............................######.............................", +"...........................##########...........................", +".........................####aaaaaa####.........................", +".......................####aaaaaaaaaa####.......................", +".....................####aaaaa####aaaaa####.....................", +"...................####aaaaa########aaaaa####...................", +".................####aaaaaa##########aaaaaa####.................", +"...............####aaaaaaaa##########aaaaaaaa####...............", +".............####aaaaaaaaaaa########aaaaaaaaaaa####.............", +"...........####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####...........", +".........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........", +".......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.......", +".....####aaaaa####aaaaaaaaaaaa####aaaaaaaaaaaa####aaaaa####.....", +"...####aaaaa########aaaaaaaa########aaaaaaaa########aaaaa####...", +".####aaaaaa##########aaaaaa##########aaaaaa##########aaaaaa####.", +"#####aaaaaa##########aaaaaa##########aaaaaa##########aaaaaa#####", +"##b####aaaaa########aaaaaaaa########aaaaaaaa########aaaaa####a##", +"##bbb####aaaaa####aaaaaaaaaaaa####aaaaaaaaaaaa####aaaaa####aaa##", +"##bbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##", +"##bbbbbbbbb####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####aaaaaaaaa##", +"##bbbb###bbbb####aaaaaaaaaaa########aaaaaaaaaaa####aaaaaaaaaaa##", +"##bbb######bbbb####aaaaaaaa##########aaaaaaaa####aaaaaaaaaaaaa##", +"##bbb######bbbbbb####aaaaaa##########aaaaaa####aaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbb####aaaaa########aaaaa####aaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbb####aaaaa####aaaaa####aaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaa##", +"##bbbb######bbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbb####bbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbbb###bbbb######aaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb#######bbb##aaaaaaaaaaaaaa###aaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbbb######bbb##aaaaaaaaaaaa######aaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbbbb####bbbb##aaaaaaaaaaaa######aaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##", +"##bbbb###bbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##", +"##bbb######bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaa######aaaaaaaaaaaa##", +"##bbb######bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaa####aaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbb######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"###bbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaa###", +".####bbbbbbbbbbbbbbbbb###bbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaa####.", +"...####bbbbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaa####...", +".....####bbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaa####.....", +".......####bbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaa####.......", +".........####bbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaa####.........", +"...........####bbbbbb#######bbb##aaaaaaaaaaaaaaaa####...........", +".............####bbbbb######bbb##aaaaaaaaaaaaaa####.............", +"...............####bbbb####bbbb##aaaaaaaaaaaa####...............", +".................####bbbbbbbbbb##aaaaaaaaaa####.................", +"...................####bbbbbbbb##aaaaaaaa####...................", +".....................####bbbbbb##aaaaaa####.....................", +".......................####bbbb##aaaa####.......................", +".........................####bb##aa####.........................", +"...........................##########...........................", +"..............................####..............................", +"................................................................"}; diff --git a/components/rx/version/2.1/images/componet_img/DICE6.xpm b/components/rx/version/2.1/images/componet_img/DICE6.xpm new file mode 100644 index 000000000..3228e314f --- /dev/null +++ b/components/rx/version/2.1/images/componet_img/DICE6.xpm @@ -0,0 +1,71 @@ +/* XPM */ +static char *DICE6[]={ +"64 64 4 1", +". c None", +"# c #000000", +"b c #c0c0c0", +"a c #ffffff", +"................................................................", +".............................######.............................", +"...........................##########...........................", +".........................####aaaaaa####.........................", +".......................####aaaaaaaaaa####.......................", +".....................####aaaaa####aaaaa####.....................", +"...................####aaaaa########aaaaa####...................", +".................####aaaaaa##########aaaaaa####.................", +"...............####aaaaaaaa##########aaaaaaaa####...............", +".............####aaaaaaaaaaa########aa####aaaaa####.............", +"...........####aaaaaaaaaaaaaaa####aa########aaaaa####...........", +".........####aaaaaaaaaaaaaaaaaaaaaa##########aaaaaa####.........", +".......####aaaaaaaaaaaaaaaaaaaaaaaa##########aaaaaaaa####.......", +".....####aaaaa####aaaaaaaaaaaaaaaaaa########aa####aaaaa####.....", +"...####aaaaa########aaaaaaaaaaaaaaaaaa####aa########aaaaa####...", +".####aaaaaa##########aaaaaaaaaaaaaaaaaaaaaa##########aaaaaa####.", +"#####aaaaaa##########aaaaaaaaaaaaaaaaaaaaaa##########aaaaaa#####", +"##b####aaaaa########aa####aaaaaaaaaaaaaaaaaa########aaaaa####a##", +"##bbb####aaaaa####aa########aaaaaaaaaaaaaaaaaa####aaaaa####aaa##", +"##bbbbb####aaaaaaaa##########aaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbb####aaaaaa##########aaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##", +"##bbbbbbbbb####aaaaa########aa####aaaaaaaaaaaaaaa####aaaaaaaaa##", +"##bbbb###bbbb####aaaaa####aa########aaaaaaaaaaa####aaaa###aaaa##", +"##bbb######bbbb####aaaaaaaa##########aaaaaaaa####aaaa######aaa##", +"##bbb######bbbbbb####aaaaaa##########aaaaaa####aaaaaa######aaa##", +"##bbb#######bbbbbbb####aaaaa########aaaaa####aaaaaaa#######aaa##", +"##bbb#######bbbbbbbbb####aaaaa####aaaaa####aaaaaaaaa#######aaa##", +"##bbb#######bbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaa#######aaa##", +"##bbbb######bbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaa######aaaa##", +"##bbbbb####bbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaa####aaaaa##", +"##bbbbbbbbbbbbbbbbbbbb###bbbb######aaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbbbbbbbbbb###bbbb#######bbb##aaaaaaaaaaaaaa###aaaaaaaaaaaa##", +"##bbbbbbbbbbb######bbb######bbb##aaaaaaaaaaaa######aaaaaaaaaaa##", +"##bbbbbbbbbbb######bbbb####bbbb##aaaaaaaaaaaa######aaaaaaaaaaa##", +"##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##", +"##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##", +"##bbbb###bbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##", +"##bbb######bbb######bbbbbbbbbbb##aaaaaaaaaaa######aaaaaaaaaaaa##", +"##bbb######bbbb####bbbbbbbbbbbb##aaaaaaaaaaaa####aaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"##bbbb######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##", +"###bbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaa###", +".####bbbbbbbbbbbbbbbbb###bbbbbb##aaaaaa###aaaaaaaaaaaaaaaaa####.", +"...####bbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaaaa####...", +".....####bbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaa####.....", +".......####bbbbbbbbbb#######bbb##aaa#######aaaaaaaaaa####.......", +".........####bbbbbbbb#######bbb##aaa#######aaaaaaaa####.........", +"...........####bbbbbb#######bbb##aaa#######aaaaaa####...........", +".............####bbbbb######bbb##aaa######aaaaa####.............", +"...............####bbbb####bbbb##aaaa####aaaa####...............", +".................####bbbbbbbbbb##aaaaaaaaaa####.................", +"...................####bbbbbbbb##aaaaaaaa####...................", +".....................####bbbbbb##aaaaaa####.....................", +".......................####bbbb##aaaa####.......................", +".........................####bb##aa####.........................", +"...........................##########...........................", +"..............................####..............................", +"................................................................"}; diff --git a/components/rx/version/2.1/images/componet_img/RXSWITCH_OFF.xpm b/components/rx/version/2.1/images/componet_img/RXSWITCH_OFF.xpm new file mode 100644 index 000000000..72d626919 --- /dev/null +++ b/components/rx/version/2.1/images/componet_img/RXSWITCH_OFF.xpm @@ -0,0 +1,55 @@ +/* XPM */ +static char *RXSWITCH_OFF[]={ +"32 48 4 1", +". c None", +"# c #000000", +"b c #808080", +"a c #ffffff", +"................................", +"................................", +"................................", +"................................", +"....########################....", +"....#aaaaaaaaaaaaaaaaaaaaaa#....", +"....#a####################a#....", +"....#a####################a#....", +"....#a##aaaaaaaaaaaaaaa#b#a#....", +"....#a#################bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#################bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....##aaa#########aaa#bbb#a#....", +"....##aa#aaaaaaaa#aaa#bbb#a#....", +"....#aaa#aaaaaaa#aaa#bbbb#a#....", +"....#aa#aaaaaaaa#aaa#bbbb#a#....", +"...#aaa#########aaa#bbbbb#a#....", +"...#aaaaaaaaaaaaaaa#bbbbb#a#....", +"..#aaaaaaaaaaaaaaa#bbbbbb#a#....", +"..#################bbbbbb#a#....", +"..#aaaaaaaaaaaaaaa#bbbbbb#a#....", +"...#aaaaaaaaaaaaaaa#bbbbb#a#....", +"....#aaaaaaaaaaaaaaa#bbbb#a#....", +"....##aaaaaaaaaaaaaaa#bbb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a##aaaaaaaaaaaaaaa#b#a#....", +"....#a####################a#....", +"....#a####################a#....", +"....#aaaaaaaaaaaaaaaaaaaaaa#....", +"....########################....", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/components/rx/version/2.1/images/componet_img/RXSWITCH_ON.xpm b/components/rx/version/2.1/images/componet_img/RXSWITCH_ON.xpm new file mode 100644 index 000000000..a7c1d1854 --- /dev/null +++ b/components/rx/version/2.1/images/componet_img/RXSWITCH_ON.xpm @@ -0,0 +1,56 @@ +/* XPM */ +static char *RXSWITCH_ON[]={ +"32 48 5 1", +". c None", +"# c #000000", +"b c #808080", +"c c #ff0000", +"a c #ffffff", +"................................", +"................................", +"................................", +"................................", +"....########################....", +"....#aaaaaaaaaaaaaaaaaaaaaa#....", +"....#a####################a#....", +"....#a####################a#....", +"....#a##aaaaaaaaaaaaaaa#b#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....##aaaaaaaaaaaaaaa#bbb#a#....", +"....#aaaaaaaaaaaaaaa#bbbb#a#....", +"...#aaaaaaaaaaaaaaa#bbbbb#a#....", +"..#aaaaaaaaaaaaaaa#bbbbbb#a#....", +"..#################bbbbbb#a#....", +"..#aaaaaaaaaaaaaaa#bbbbbb#a#....", +"...#aaaaaaaaaaaaaaa#bbbbb#a#....", +"...#aaaaaaaaaaaaaaa#bbbbb#a#....", +"....#aaaaaaaaaaaaaaa#bbbb#a#....", +"....#aaaaaaaaaaaaaaa#bbbb#a#....", +"....##aaaaaaaaaaaaaaa#bbb#a#....", +"....##aaaaaaaaaaaaaaa#bbb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#################bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaa#########aaa#bb#a#....", +"....#a#aaa#ccccccc#aaa#bb#a#....", +"....#a#aaa#ccccccc#aaa#bb#a#....", +"....#a#aaa#ccccccc#aaa#bb#a#....", +"....#a#aaa#ccccccc#aaa#bb#a#....", +"....#a#aaa#########aaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#aaaaaaaaaaaaaaa#bb#a#....", +"....#a#################bb#a#....", +"....#a#bbbbbbbbbbbbbbbb#b#a#....", +"....#a##bbbbbbbbbbbbbbbb##a#....", +"....#a####################a#....", +"....#aaaaaaaaaaaaaaaaaaaaaa#....", +"....########################....", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/components/rx/version/2.1/images/componet_img/all_component_res.bat b/components/rx/version/2.1/images/componet_img/all_component_res.bat new file mode 100644 index 000000000..af4c7034f --- /dev/null +++ b/components/rx/version/2.1/images/componet_img/all_component_res.bat @@ -0,0 +1,5 @@ +del tooledit.lrs +del rxdbgrid.lrs + +..\..\..\..\tools\lazres.exe tooledit.lrs picDateEdit.bmp +..\..\..\..\tools\lazres.exe rxdbgrid.lrs rx_markerdown.xpm rx_markerup.xpm diff --git a/components/rx/version/2.1/images/componet_img/all_component_res.sh b/components/rx/version/2.1/images/componet_img/all_component_res.sh new file mode 100644 index 000000000..b2ebbeaad --- /dev/null +++ b/components/rx/version/2.1/images/componet_img/all_component_res.sh @@ -0,0 +1,10 @@ +rm tooledit.lrs +rm rxdbgrid.lrs +rm tooledit.res +rm rxdbgrid.res + +/usr/local/share/lazarus/tools/lazres tooledit.res picDateEdit.png +/usr/local/share/lazarus/tools/lazres rxdbgrid.res rx_markerdown.png rx_markerup.png + +#../../../../tools\lazres.exe tooledit.lrs picDateEdit.bmp +#../../../../tools\lazres.exe rxdbgrid.lrs rx_markerdown.xpm rx_markerup.xpm diff --git a/components/rx/version/2.1/images/componet_img/picDateEdit.png b/components/rx/version/2.1/images/componet_img/picDateEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..de59f5efa02816544e9c6acd741da693d7ceed98 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^GC<73!VDyvzaFpwQbGYfA+G-!{sWmE9UcGw|37o) z43Oz1vH2iSh%w3A-Gy0@$LAA}ljZ5+7{YPgx9=eD0R;}%`WGxmzT_n^>gENAukidH zzf@s*9sj38$_xc8DigVSET8W^p~Us3KCoGRLy2DB)FoEmE-kLsT>2(<ey-P~O_3+K zR!blEXgQ{n|5Iqv<LxK@Sbq9EZ_g*K<2pf`__xW5RsFiZuMcReYKdz^NlIc#s#S7P zDv)9@GB7mOHL%n*vIsG>v@!)EV{HQyD+7b*`~68M8glbfGSe!d8q9PJO+t)}tV~R; Yj4dD<B(Gl-2WnvOboFyt=akR{0C@Un{{R30 literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/componet_img/rx_markerdown.png b/components/rx/version/2.1/images/componet_img/rx_markerdown.png new file mode 100644 index 0000000000000000000000000000000000000000..3e07cf6c38a765b2ac1d10db2f0979fbc65d1020 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2VkYHF5IUx~9F_i@Q1v4;|O+IS@;w5>zyD<E3 z??1C2$m1;Vh%5%u9$@TtGTRQwQ1f(g4B@z*oZ!I3EAT=7NK40`^oEW9jTaa?zWL81 z;nUXkpT~lcp_`evDzC&i6R1PA#5JNMC9x#cD!C{XNHG{07#iyuSn3*Cgcw>{nF5iq zwt<P2fkE{B{v;F)x%nxXX_Zh7X1azZAx1`4CZ<-#77z`R*Ds0#H86O(`njxgN@xNA D_!2;U literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/componet_img/rx_markerup.png b/components/rx/version/2.1/images/componet_img/rx_markerup.png new file mode 100644 index 0000000000000000000000000000000000000000..64f683e3b6e9287bd8fb3ea2b6e84e8454578c27 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2VkYHF5IUx~9F_i@Q1v4;|O+IS@;w5>zyD<E3 z??1C2$m1;Vh%5%u9$@TtGTRQwQ1Nte4B@z*oZ!I9`~RU1Tibt$Gi(AM<$G^3Ol02p z-<grQjDbPTUf^@>ylDzR^{OSV5hW>!C8<`)MX5lF!N|bSSl7T(*T^Eo(9+5jh>W!j zOsotHqVM-7p=ij>PsvQHglaI;H8cq^GO{u;wKBGVXpp>qQ5>j&!PC{xWt~$(69Cd( BKDqz^ literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/images/mk_res.bat b/components/rx/version/2.1/images/mk_res.bat new file mode 100644 index 000000000..923e0f17c --- /dev/null +++ b/components/rx/version/2.1/images/mk_res.bat @@ -0,0 +1,2 @@ +del rx.lrs +c:\lazarus\tools\lazres.exe rx.lrs TDBDateEdit.xpm TRXLookUpEdit.xpm TRxDBCalcEdit.xpm TRxDBLookupCombo.xpm TRxDBGrid.xpm TDualListDialog.xpm TFolderLister.xpm TRxMemoryData.xpm TCURRENCYEDIT.xpm TRXSWITCH.xpm TRXDICE.xpm TRXDBCOMBOBOX.xpm ttoolpanel.xpm trxxpmanifest.xpm TPAGEMANAGER.xpm TRXAPPICON.xpm TSECRETPANEL.xpm TRXLABEL.xpm tautopanel.xpm TRxCalendarGrid.xpm TRxDateEdit.png TRxClock.png TRxSpeedButton.png TRxSpinButton.png TRxSpinEdit.png TRXDBSpinEdit.png TRxTimeEdit.png TRxDBTimeEdit.png TRxDBProgressBar.png TRxDBTrackBar.png TRxLoginDialog.png TRxVersionInfo.png TRxAboutDialog.png TRxDBCurrEdit.png TRxViewsPanel.png TRxDBColorBox.png TRxRadioGroup.png TRxDBRadioGroup.png TRxHistoryNavigator.png TRxCloseFormValidator.png diff --git a/components/rx/version/2.1/images/mk_res.sh b/components/rx/version/2.1/images/mk_res.sh new file mode 100755 index 000000000..ee3835e1c --- /dev/null +++ b/components/rx/version/2.1/images/mk_res.sh @@ -0,0 +1,2 @@ +rm rx.lrs +/usr/local/share/lazarus/tools/lazres rx.lrs TDBDateEdit.xpm TRXLookUpEdit.xpm TRxDBCalcEdit.xpm TRxDBLookupCombo.xpm TRxDBGrid.xpm TDualListDialog.xpm TFolderLister.xpm TRxMemoryData.xpm TCURRENCYEDIT.xpm TRXSWITCH.xpm TRXDICE.xpm TRXDBCOMBOBOX.xpm ttoolpanel.xpm trxxpmanifest.xpm TPAGEMANAGER.xpm TRXAPPICON.xpm TSECRETPANEL.xpm TRXLABEL.xpm tautopanel.xpm TRxCalendarGrid.xpm TRxDateEdit.png TRxClock.png TRxSpeedButton.png TRxSpinButton.png TRxSpinEdit.png TRXDBSpinEdit.png TRxTimeEdit.png TRxDBTimeEdit.png TRxDBProgressBar.png TRxDBTrackBar.png TRxLoginDialog.png TRxVersionInfo.png TRxAboutDialog.png TRxDBCurrEdit.png TRxViewsPanel.png TRxDBColorBox.png TRxRadioGroup.png TRxDBRadioGroup.png TRxHistoryNavigator.png TRxCloseFormValidator.png TRxIniPropStorage.png \ No newline at end of file diff --git a/components/rx/version/2.1/images/next1.xpm b/components/rx/version/2.1/images/next1.xpm new file mode 100644 index 000000000..22c69dcf9 --- /dev/null +++ b/components/rx/version/2.1/images/next1.xpm @@ -0,0 +1,11 @@ +/* XPM */ +static char *next1[]={ +"8 6 2 1", +". c None", +"# c #000000", +"...#....", +"...##...", +"...###..", +"...###..", +"...##...", +"...#...."}; diff --git a/components/rx/version/2.1/images/next2.xpm b/components/rx/version/2.1/images/next2.xpm new file mode 100644 index 000000000..f0546c314 --- /dev/null +++ b/components/rx/version/2.1/images/next2.xpm @@ -0,0 +1,11 @@ +/* XPM */ +static char *next2[]={ +"8 6 2 1", +". c None", +"# c #000000", +".#...#..", +".##..##.", +".###.###", +".###.###", +".##..##.", +".#...#.."}; diff --git a/components/rx/version/2.1/images/prev1.xpm b/components/rx/version/2.1/images/prev1.xpm new file mode 100644 index 000000000..fd077995b --- /dev/null +++ b/components/rx/version/2.1/images/prev1.xpm @@ -0,0 +1,11 @@ +/* XPM */ +static char *prev1[]={ +"8 6 2 1", +". c None", +"# c #000000", +"....#...", +"...##...", +"..###...", +"..###...", +"...##...", +"....#..."}; diff --git a/components/rx/version/2.1/images/prev2.xpm b/components/rx/version/2.1/images/prev2.xpm new file mode 100644 index 000000000..d53b7076c --- /dev/null +++ b/components/rx/version/2.1/images/prev2.xpm @@ -0,0 +1,11 @@ +/* XPM */ +static char *prev2[]={ +"8 6 2 1", +". c None", +"# c #000000", +"..#...#.", +".##..##.", +"###.###.", +"###.###.", +".##..##.", +"..#...#."}; diff --git a/components/rx/version/2.1/images/rx.lrs b/components/rx/version/2.1/images/rx.lrs new file mode 100644 index 000000000..8cca9dd79 --- /dev/null +++ b/components/rx/version/2.1/images/rx.lrs @@ -0,0 +1,785 @@ +LazarusResources.Add('TDBDateEdit','XPM',[ + '/* XPM */'#10'static char *TDBDateEdit[]={'#10'"18 18 8 1",'#10'"# c None",' + +#10'"e c #000000",'#10'"c c #000080",'#10'"d c #0000ff",'#10'"f c #800000",' + +#10'". c #808080",'#10'"a c #c0c0c0",'#10'"b c #ffffff",'#10'"..............' + +'.###",'#10'".a.baaaabaaaaa.###",'#10'"...............###",'#10'".a.bbbbabbb' + +'bbb.###",'#10'".b.baababaaaab.###",'#10'".a.bbcccccccccccc#",'#10'".b.bacdd' + +'dcdddcddce",'#10'".a.bbcccccccccccce",'#10'".b.bacbbbbbbbbbbce",'#10'".a.bb' + +'cbbfbbffffbce",'#10'".....cbffbbfbbbbce",'#10'"#####cbbfbbfffabce",'#10'"##' + +'###cbbfbbbbbfbce",'#10'"#####cbbfbbabafbce",'#10'"#####cbfffbfffabce",'#10 + +'"#####cbbbbbbbbbbce",'#10'"#####cccccccccccce",'#10'"######eeeeeeeeeeee"};' + +#10 +]); +LazarusResources.Add('TRXLookUpEdit','XPM',[ + '/* XPM */'#10'static char *TRXLookUpEdit[]={'#10'"24 24 7 1",'#10'". c None"' + +','#10'"# c #000000",'#10'"e c #800000",'#10'"c c #808080",'#10'"d c #c0c0c0' + +'",'#10'"b c #ff0000",'#10'"a c #ffffff",'#10'"..##....................",'#10 + +'".#aa#b..ccccccccccccccc.",'#10'"#daaa#b.cdcaddddadddddc.",'#10'"#ddaaa#.cc' + +'ccccccccccccc.",'#10'".#ddaaa##dcaaaadaaaaaac.",'#10'"..#ddaaaa###ddadadddd' + +'ac.",'#10'"...#ddaabbbb#aadaaaaaac.",'#10'"....#ddebbb#ddadadddaac.",'#10'"' + +'....#ceeeb#aaaadaaaaaac.",'#10'".....#eec#caddadaddddac.",'#10'".....#ec#dc' + +'aaaadaaaaaac.",'#10'".....#e#ccccccccccccccc.",'#10'"......#...............' + +'..",'#10'"..ccccccccccccccccccccc.",'#10'"..c###################a.",'#10'".' + +'.c#aaaaaaaaaadaaaaaada.",'#10'"..c#aaaaaaaaaadaddddcda.",'#10'"..c#aaaaaaaa' + +'aadad##dcda.",'#10'"..c#aaaaaaaaaadaddddcda.",'#10'"..c#aaaaaaaaaadacccccda' + +'.",'#10'"..c#dddddddddddddddddda.",'#10'"..caaaaaaaaaaaaaaaaaaaa.",'#10'"..' + +'......................",'#10'"........................"};'#10 +]); +LazarusResources.Add('TRxDBCalcEdit','XPM',[ + '/* XPM */'#10'static char *TRxDBCalcEdit_xpm[]={'#10'"18 18 8 1",'#10'"# c N' + +'one",'#10'"e c #000000",'#10'"f c #000080",'#10'"c c #008080",'#10'"d c #00' + +'ffff",'#10'". c #808080",'#10'"a c #c0c0c0",'#10'"b c #ffffff",'#10'"......' + +'.........###",'#10'".a.baaaabaaaaa.###",'#10'"...............###",'#10'".a.' + +'bbbbabbbbbb.###",'#10'".b.baababaaaab.###",'#10'".a.bbbbabbbbbb.###",'#10'"' + +'.bbcccccccccccccc#",'#10'".acbdbdbdbdbdbdbce",'#10'".bcdeeeeeeeeccccfe",'#10 + +'".acbebbbbbbaccccfe",'#10'"..cdeaaaaaaaccccfe",'#10'"##cbccccccccccccfe",' + +#10'"##cdcebebebebebefe",'#10'"##cbccccccccccccfe",'#10'"##cdcebebebebbaefe"' + +','#10'"##cbccccccccccccfe",'#10'"##ccfffffffffffffe",'#10'"###eeeeeeeeeeeee' + +'e#"};'#10 +]); +LazarusResources.Add('TRxDBLookupCombo','XPM',[ + '/* XPM */'#10'static char *TRxDBLookupCombo[]={'#10'"24 24 8 1",'#10'". c No' + +'ne",'#10'"# c #000000",'#10'"c c #000080",'#10'"e c #800000",'#10'"f c #808' + +'080",'#10'"d c #c0c0c0",'#10'"b c #ff0000",'#10'"a c #ffffff",'#10'"..##...' + +'.................",'#10'".#aa#b.........c........",'#10'"#daaa#b.......cc..' + +'......",'#10'"#ddaaa#......cccccccc...",'#10'".#ddaaa##.....cc.....c..",'#10 + +'"..#ddaaaa###...c.....c..",'#10'"...#ddaabbbb#........c..",'#10'"....#ddebb' + +'b#.........c..",'#10'"..c.#feeeb#d###########.",'#10'"..c..#eef#daaaaaaa#aa' + +'d#.",'#10'"..c..#ef#dccccccca#a#d#.",'#10'"..c..#e#daaaaaaaaa#ddd#.",'#10'"' + +'..c...#.###############.",'#10'"..c.....#aaaaaaaaaaaaa#.",'#10'"..c.....#ac' + +'ccccccccaaa#.",'#10'"..c.c...#ccccccccccccc#.",'#10'"..c.cc..#caaaaaaaaaacc' + +'#.",'#10'"...cccc.#ccccccccccccc#.",'#10'"....cc..#acccccccccaaa#.",'#10'".' + +'...c...#aaaaaaaaaaaaa#.",'#10'"........#accccccccccaa#.",'#10'"........#aaa' + +'aaaaaaaaaa#.",'#10'"........###############.",'#10'".......................' + +'."};'#10 +]); +LazarusResources.Add('TRxDBGrid','XPM',[ + '/* XPM */'#10'static char *TRxDBGrid[]={'#10'"24 24 10 1",'#10'". c None",' + +#10'"c c #000000",'#10'"f c #008000",'#10'"e c #00ffff",'#10'"g c #800080",' + +#10'"# c #808080",'#10'"a c #c0c0c0",'#10'"d c #ff0000",'#10'"h c #ff00ff",' + +#10'"b c #ffffff",'#10'"........................",'#10'".###############....' + +'....",'#10'".#a#baaaabaaaaa#........",'#10'".###############........",'#10 + +'".#a#bbbbabbbbbb#........",'#10'".#b#baababaaaab#........",'#10'".#a#bbbbab' + +'bbbbb#........",'#10'".#b#baababaaabb#........",'#10'".#a#bbbbabbbbbb#.....' + +'...",'#10'".#b#baababaaaab#........",'#10'".#a#bcccccccccccccccccc.",'#10'"' + +'.####cacbaaaaabaaaaaaac.",'#10'".....cccccccccccccccccc.",'#10'".....cacbbb' + +'bbabbbbbbbbc.",'#10'".....cbcaaaaaaaaaaaaaac.",'#10'".....cacbbbbbabbbbbbbb' + +'c.",'#10'".....ccccdddddddddddddc.",'#10'".....cbebcbbbabbbbbbbbc.",'#10'".' + +'cccccebecddddddddddddc.",'#10'".cfffcbebccbbabbbbbbbbc.",'#10'".cfffcccccgc' + +'aaaaaaaaaac.",'#10'".cfffcbcbchgcabbbbbbbbc.",'#10'".cccccccccghgcccccccccc' + +'.",'#10'".........cccccc........."};'#10 +]); +LazarusResources.Add('TDualListDialog','XPM',[ + '/* XPM */'#10'static char *TDualListDialog[]={'#10'"24 24 7 1",'#10'". c Non' + +'e",'#10'"b c #000000",'#10'"e c #000080",'#10'"c c #0000ff",'#10'"# c #8080' + +'80",'#10'"d c #c0c0c0",'#10'"a c #ffffff",'#10'"........................",' + +#10'"........................",'#10'".######################.",'#10'".#abccc' + +'cccccccccccbabab.",'#10'".#bbbbbbbbbbbbbbbbbbbbb.",'#10'".#dadadadadadadada' + +'dadab.",'#10'".#adadadadadadadadadadb.",'#10'".#dbbbbadad#dadbbbbadab.",'#10 + +'".#abaabbadab#dabaabbadb.",'#10'".#dbaabdbadbb#dbaabdbab.",'#10'".#abaabbbd' + +'abbdabaabbbdb.",'#10'".#dbaaaabadbdadbaaaabab.",'#10'".#abaeeabdadadabaeeab' + +'db.",'#10'".#dbaaaabadabadbaaaabab.",'#10'".#abaeeabdabbdabaeeabdb.",'#10'"' + +'.#dbaaaaba#bbadbaaaabab.",'#10'".#abaaaabda#bdabaaaabdb.",'#10'".#dbbbbbbad' + +'a#adbbbbbbab.",'#10'".#adadadadadadadadadadb.",'#10'".#dadadadadadadadadada' + +'b.",'#10'".#adadadadadadadadadadb.",'#10'".#bbbbbbbbbbbbbbbbbbbbb.",'#10'".' + +'.......................",'#10'"........................"};'#10 +]); +LazarusResources.Add('TFolderLister','XPM',[ + '/* XPM */'#10'static char *TFolderLister[]={'#10'"24 24 8 1",'#10'". c None"' + +','#10'"a c #000000",'#10'"c c #808080",'#10'"# c #848484",'#10'"f c #c0c0c0' + +'",'#10'"e c #c6c6c6",'#10'"b c #ffff00",'#10'"d c #ffffff",'#10'"....#a#...' + +'..............",'#10'".#a#aba#a#..............",'#10'".ab#aba#ba...ccc.....' + +'...",'#10'".##bbbbb##..cdddcc......",'#10'"#aab#a#baa#cddddddcc....",'#10'"' + +'abbbadabbbaddddddddda...",'#10'"#aab#a#baa#dddddddda....",'#10'"a##bbbbb##a' + +'ddddddda.....",'#10'"eab#aba#baeddddddadcc...",'#10'".#a#aba#a#dddddddaddda' + +'..",'#10'"....#a#dddddddddaddda...",'#10'"....cdfbaaddddddadda....",'#10'".' + +'...cdbfbfaadddadda.....",'#10'"....cdfbfcddaadadda.....",'#10'"...ccccccccc' + +'ccccdaa.....",'#10'"...cddddddddddcadaa.....",'#10'"...cdfbfbfbfbfbacca....' + +'.",'#10'"....cdfbfbfbfbfcaca.....",'#10'"....cdbfbfbfbfbfaca.....",'#10'"..' + +'...cdbfbfbfbfbcaa.....",'#10'".....ccccccccccccaa.....",'#10'"......aaaaaaa' + +'aaaaaa.....",'#10'"........................",'#10'"........................' + +'"};'#10 +]); +LazarusResources.Add('TRxMemoryData','XPM',[ + '/* XPM */'#10'static char *TRxMemoryData[]={'#10'"24 24 6 1",'#10'". c None"' + +','#10'"# c #000000",'#10'"c c #000080",'#10'"d c #808080",'#10'"a c #c0c0c0' + +'",'#10'"b c #ffffff",'#10'"........................",'#10'"################' + +'####....",'#10'"#a#baaaaaabaaaaaaaa#....",'#10'"####################....",' + +#10'"#a#bbbbbbabbbbbbbbb#....",'#10'"#b#bccccbabcccccccb#....",'#10'"#a#bbbb' + +'bbabbbbbbbbb#....",'#10'"#b#bccccbabccccccbb#....",'#10'"#a#bbbbbbabbbbbbbb' + +'b#....",'#10'"#b#bccccbabccccccbb#....",'#10'"#a#bbbbbbabbbbbbb###....",'#10 + +'"#b#bccccbabcbbb#daa#....",'#10'"#a#bbbbbbabbb#daaaaa#...",'#10'"#b#bccccba' + +'b#daaaaaaaa#..",'#10'"#a#bbbbbb#daaaaaaaaaad#.",'#10'"#b#bcccbdaaaaaaaaaadd' + +'d#.",'#10'"#a#bbbbdbaaaaaaaaddd#a#.",'#10'"########abaaaaaddd#ad#..",'#10'"' + +'........#dbaaddd#ad#.#..",'#10'".........#dbdd#ad#.#....",'#10'"..........#' + +'a#ad#.#......",'#10'"...........#d#.#........",'#10'".............#........' + +'..",'#10'"........................"};'#10 +]); +LazarusResources.Add('TCURRENCYEDIT','XPM',[ + '/* XPM */'#10'static char *TCURRENCYEDIT[]={'#10'"24 24 6 1",'#10'". c None"' + +','#10'"a c #000000",'#10'"d c #0000ff",'#10'"# c #808080",'#10'"c c #c0c0c0' + +'",'#10'"b c #ffffff",'#10'"........................",'#10'"................' + +'........",'#10'"........................",'#10'"........................",' + +#10'"#######################.",'#10'"#aaaaaaaaaaaaaaaaaaaaab.",'#10'"#abbbbb' + +'bbbbbbbbbbbbbbcb.",'#10'"#abbbbbbbbbbbbbaabaabcb.",'#10'"#abbbbbbbbbbbbbbba' + +'bbbcb.",'#10'"#abbbbdbbbbbdbbbbabbbcb.",'#10'"#abbbddddbbddbbbbabbbcb.",'#10 + +'"#abbdbdbbbbbdbbbbabbbcb.",'#10'"#abbbdddbbbbdbbbbabbbcb.",'#10'"#abbbbdbdb' + +'bbdbbbbabbbcb.",'#10'"#abbddddbbbbdbbbbabbbcb.",'#10'"#abbbbdbbbbdddbbbabbb' + +'cb.",'#10'"#abbbbbbbbbbbbbaabaabcb.",'#10'"#abbbbbbbbbbbbbbbbbbbcb.",'#10'"' + +'#accccccccccccccccccccb.",'#10'"#bbbbbbbbbbbbbbbbbbbbbb.",'#10'"...........' + +'.............",'#10'"........................",'#10'"......................' + +'..",'#10'"........................"};'#10 +]); +LazarusResources.Add('TRXSWITCH','XPM',[ + '/* XPM */'#10'static char *TRXSWITCH[]={'#10'"24 24 5 1",'#10'". c None",'#10 + +'"# c #000000",'#10'"b c #808080",'#10'"c c #ff0000",'#10'"a c #ffffff",'#10 + +'"........................",'#10'"........................",'#10'".....#####' + +'#########.....",'#10'".....##############.....",'#10'".....###aaaaaaa#b##..' + +'...",'#10'".....##aaaaaaa#bb##.....",'#10'".....#aaaaaaa#bbb##.....",'#10'"' + +'.....#########bbb##.....",'#10'".....#aaaaaaa#bbb##.....",'#10'".....#aaaaa' + +'aaa#bb##.....",'#10'".....##aaaaaaa#bb##.....",'#10'".....##aaaaaaaa#b##...' + +'..",'#10'".....###########b##.....",'#10'".....##aaaaaaaa#b##.....",'#10'".' + +'....##a######a#b##.....",'#10'".....##a#cccc#a#b##.....",'#10'".....##a####' + +'##a#b##.....",'#10'".....##aaaaaaaa#b##.....",'#10'".....###########b##....' + +'.",'#10'".....###bbbbbbbb###.....",'#10'".....##############.....",'#10'"..' + +'...##############.....",'#10'"........................",'#10'".............' + +'..........."};'#10 +]); +LazarusResources.Add('TRXDICE','XPM',[ + '/* XPM */'#10'static char *TRXDICE[]={'#10'"24 24 4 1",'#10'". c None",'#10 + +'"# c #000000",'#10'"b c #c0c0c0",'#10'"a c #ffffff",'#10'".................' + +'.......",'#10'"........................",'#10'"........................",' + +#10'"...........##...........",'#10'".........##aa##.........",'#10'".......' + +'##aa##aa##.......",'#10'".....##aaaa##aaaa##.....",'#10'"...##aaaaaaaaaaaaa' + +'a##...",'#10'"...#b##aaaa##aaaa##a#...",'#10'"...#bbb##aa##aa##aaa#...",'#10 + +'"...#bbbbb##aa##aa##a#...",'#10'"...#bbbbbbb##aaaa##a#...",'#10'"...#bbbbbb' + +'b#a##aaaaa#...",'#10'"...#bbb##bb#a##aaaaa#...",'#10'"...#bbb##bb#aaaaaaaa#' + +'...",'#10'"...#bbbbbbb#aaaaa##a#...",'#10'"...#bbbbbbb#aaaaa##a#...",'#10'"' + +'...##bbbbbb#a##aaaa##...",'#10'".....##bbbb#a##aa##.....",'#10'".......##bb' + +'#aaa##.......",'#10'".........###a##.........",'#10'"...........##.........' + +'..",'#10'"........................",'#10'"........................"};'#10 +]); +LazarusResources.Add('TRXDBCOMBOBOX','XPM',[ + '/* XPM */'#10'static char *TRXDBCOMBOBOX[]={'#10'"24 24 6 1",'#10'". c None"' + +','#10'"c c #000000",'#10'"d c #000080",'#10'"# c #808080",'#10'"a c #c0c0c0' + +'",'#10'"b c #ffffff",'#10'"........................",'#10'".###############' + +'........",'#10'".#a#baaaabaaaaa#........",'#10'".###############........",' + +#10'".#a#bbbbabbbbbb#........",'#10'".#b#baababaaaab#........",'#10'".#a#bbb' + +'babbbbbb#........",'#10'".#b#baababaaabb#........",'#10'".#a#bbcccccccccccc' + +'ccccc.",'#10'".#b#bacbbbbbbbbbbbcbbac.",'#10'".#a#bbcbdddddddddbcbcac.",'#10 + +'".#####cbbbbbbbbbbbcaaac.",'#10'"......ccccccccccccccccc.",'#10'"...d....cb' + +'bbbbbbbbbbbbc.",'#10'"..ddd...cbbddddddddbbbc.",'#10'".ddddd..cdddddddddddd' + +'dc.",'#10'"...d....cddbbbbbbbbbddc.",'#10'"...d....cdddddddddddddc.",'#10'"' + +'...d....cbbddddddddbbbc.",'#10'"...d....cbbbbbbbbbbbbbc.",'#10'"...dddd.cbb' + +'dddddddddbbc.",'#10'"........cbbbbbbbbbbbbbc.",'#10'"........cccccccccccccc' + +'c.",'#10'"........................"};'#10 +]); +LazarusResources.Add('ttoolpanel','XPM',[ + '/* XPM */'#10'static char *TToolPanel[]={'#10'"24 24 10 1",'#10'". c None",' + +#10'"# c #000000",'#10'"h c #000080",'#10'"d c #0000ff",'#10'"f c #008000",' + +#10'"b c #808080",'#10'"c c #c0c0c0",'#10'"e c #ff0000",'#10'"g c #ff00ff",' + +#10'"a c #ffffff",'#10'"........................",'#10'"####################' + +'####",'#10'"aaaaab#aaaaab#aaaaab#ccc",'#10'"accccb#accccb#accccb#ccc",'#10 + +'"adeecb#afffcb#a#eecb#ccc",'#10'"adddcb#afggcb#ahhhcb#ccc",'#10'"accccb#acc' + +'ccb#accccb#ccc",'#10'"bbbbbb#bbbbbb#bbbbbb#ccc",'#10'"#####################' + +'###",'#10'"....................dd..",'#10'".#################.dddd.",'#10'"' + +'.#a#ddddddddd#a#a#dddddd",'#10'".#################..dd..",'#10'".#ccccccccc' + +'cccccc#..dd..",'#10'".#c####c#######cc#..dd..",'#10'".#c#aa#c#aaaaa#cc#..dd' + +'..",'#10'".#c#aa#c#aaaaa#cc#..dd..",'#10'".#c#aa#c#aaaaa#ddddddd..",'#10'".' + +'#c#aa#c#aaaaa#ddddddd..",'#10'".#c#aa#c#aaaaa#cc#......",'#10'".#c####c####' + +'###cc#......",'#10'".#ccccccccccccccc#......",'#10'".#################.....' + +'.",'#10'"........................"};'#10 +]); +LazarusResources.Add('trxxpmanifest','XPM',[ + '/* XPM */'#10'static char *trxxpmanifest[]={'#10'"24 24 9 1",'#10'". c None"' + +','#10'"# c #000000",'#10'"c c #000080",'#10'"a c #00ff00",'#10'"e c #9d9da1' + +'",'#10'"g c #e0dfe3",'#10'"b c #ff0000",'#10'"d c #ffff00",'#10'"f c #fffff' + +'f",'#10'"........................",'#10'"........................",'#10'"..' + +'..##...##.####........",'#10'".....##.##..#####.......",'#10'"......###...#' + +'#.##.......",'#10'"......###...#####.......",'#10'".....#####..####........' + +'",'#10'".....##.##..##..........",'#10'"....##...##.##..........",'#10'"...' + +'.....................",'#10'".####################...",'#10'".#aaaaaaaaaaaa' + +'#b#c#d#e..",'#10'".####################e..",'#10'".#ffffffffffffffffff#e.."' + +','#10'".#ffffffffffffffffff#e..",'#10'".#ffffffffffffffffff#e..",'#10'".#ff' + +'ffffffffffffffff#e..",'#10'".#ffffggggggfggggggf#e..",'#10'".#ffffgffff#fgf' + +'fff#f#e..",'#10'".#ffffg#####fg#####f#e..",'#10'".#ffffffffffffffffff#e..",' + +#10'".####################e..",'#10'"..eeeeeeeeeeeeeeeeeeee..",'#10'".......' + +'................."};'#10 +]); +LazarusResources.Add('TPAGEMANAGER','XPM',[ + '/* XPM */'#10'static char *TPAGEMANAGER[]={'#10'"24 24 8 1",'#10'". c None",' + +#10'"b c #000000",'#10'"c c #000080",'#10'"f c #00ffff",'#10'"d c #800000",' + +#10'"# c #808080",'#10'"e c #ffff00",'#10'"a c #ffffff",'#10'"..............' + +'..........",'#10'"........................",'#10'".........##############."' + +','#10'".........#aaaaaaaaaaaab.",'#10'".......##############ab.",'#10'"....' + +'...#aaaaaaaaaaaabab.",'#10'".....##############abab.",'#10'".....#aaaaaaaaa' + +'aaababab.",'#10'".....#acccccaddddababab.",'#10'".....#aaaaaaadaadababab.",' + +#10'".....#accccaadaadababab.",'#10'".....#aaaaaaadaadababab.",'#10'".....#a' + +'bbbaaaddddababab.",'#10'".bbbbbbeaebaaaaaaababbb.",'#10'".bbbfbeabbbbbbbbaa' + +'bab...",'#10'".bbbfbaeaeaeaeaebabbb...",'#10'".bbbfbeaeabbbbbbaab.....",'#10 + +'".bbbfbaeaeaeab###bb.....",'#10'".bbbfbeaeabbb...........",'#10'".bbbfbbeae' + +'aeb...........",'#10'".bebbb.bbbbb............",'#10'".bbb.................' + +'...",'#10'"........................",'#10'"........................"};'#10 +]); +LazarusResources.Add('TRXAPPICON','XPM',[ + '/* XPM */'#10'static char *TRXAPPICON[]={'#10'"24 24 9 1",'#10'". c None",' + +#10'"a c #000000",'#10'"f c #800000",'#10'"c c #808000",'#10'"e c #808080",' + +#10'"g c #c0c0c0",'#10'"# c #ff0000",'#10'"d c #ffff00",'#10'"b c #ffffff",' + +#10'"...........###..##...##.",'#10'"............#..#..#.#..#",'#10'".......' + +'.a...#..#....#..#",'#10'"......aabaa.#..#....#..#",'#10'"....aabbcdda#..#..' + +'#.#..#",'#10'"..aabbccccc###..##...##.",'#10'".abbddddddddddda........",'#10 + +'".aaaaaaaaaaaaaaa..##b...",'#10'".abddeebddeebdda...##b..",'#10'"..cceeecce' + +'eeccc....###b.",'#10'"..cbebbcbebbcbc.####d#..",'#10'"..cdebbcdebbcee##d##d' + +'#b.",'#10'"..cbebbcbebbcebfd#dd#b..",'#10'"..cdebbcdebbcebbfbb##...",'#10'"' + +'.adddaadddaadebgbf###b..",'#10'".aaaaaaaaaaaebbgegf#....",'#10'".adbdbdbdbd' + +'ebebegeea....",'#10'".aaaaaaaaaebebeeaaaa....",'#10'".........ebebeea......' + +'..",'#10'"........ebgbeea.........",'#10'"........agbeea..........",'#10'".' + +'.......aeeaa...........",'#10'".........aa.............",'#10'"............' + +'............"};'#10 +]); +LazarusResources.Add('TSECRETPANEL','XPM',[ + '/* XPM */'#10'static char *TSECRETPANEL[]={'#10'"24 24 11 1",'#10'". c None"' + +','#10'"# c #000000",'#10'"d c #000080",'#10'"i c #0000ff",'#10'"e c #008000' + +'",'#10'"g c #800000",'#10'"a c #808080",'#10'"b c #c0c0c0",'#10'"h c #ff000' + +'0",'#10'"f c #ffff00",'#10'"c c #ffffff",'#10'"........................",' + +#10'"........................",'#10'".######################.",'#10'".#aaaaa' + +'aaaaaaaaaaaaaab#.",'#10'".#aaaaaaaaaaaaaaaaaacc#.",'#10'".#aabbbbbbbbbbbbbb' + +'bbcc#.",'#10'".#aabbbbbd#dbbbbbbbbcc#.",'#10'".#aabbbbdefedbbbbbbbcc#.",'#10 + +'".#aabbbb#fff#aabbbbbcc#.",'#10'".#aabbbbdefedbb##bbbcc#.",'#10'".#aabbbbbd' + +'#dbbbggbbbcc#.",'#10'".#aabbbbabbbbb#hh#bbcc#.",'#10'".#aabbbbabbbbb#hh#bbc' + +'c#.",'#10'".#aabb#####bb#hhhh#bcc#.",'#10'".#aabb#iii#bb######bcc#.",'#10'"' + +'.#aabb#iii#aabbbbbbbcc#.",'#10'".#aabb#iii#bbbbbbbbbcc#.",'#10'".#aabb#####' + +'bbbbbbbbbcc#.",'#10'".#aabbbbbbbbbbbbbbbbcc#.",'#10'".#accccccccccccccccccc' + +'#.",'#10'".#bccccccccccccccccccc#.",'#10'".######################.",'#10'".' + +'.......................",'#10'"........................"};'#10 +]); +LazarusResources.Add('TRXLABEL','XPM',[ + '/* XPM */'#10'static char *TRXLABEL[]={'#10'"24 24 3 1",'#10'". c None",'#10 + +'"# c #000000",'#10'"a c #ffffff",'#10'"........................",'#10'"....' + +'....................",'#10'"........................",'#10'"...............' + +'.........",'#10'"........................",'#10'"........................",' + +#10'".........####aa.........",'#10'"..........####aa........",'#10'".......' + +'..#####aa........",'#10'".........##a###aa.......",'#10'"........##aa.##aa.' + +'......",'#10'"........##aa.###aa......",'#10'".......##aa...##aa......",'#10 + +'".......##########aa.....",'#10'"......##aaaaaaa##aa.....",'#10'"......##aa' + +'.....###aa....",'#10'".....##aa.......##aa....",'#10'"....####aa.....####aa' + +'...",'#10'".....aaaaa......aaaaa...",'#10'"........................",'#10'"' + +'........................",'#10'"........................",'#10'"...........' + +'.............",'#10'"........................"};'#10 +]); +LazarusResources.Add('tautopanel','XPM',[ + '/* XPM */ '#10'static const unsigned char * tautopanel_xpm[] = {'#10'"24 24 ' + +'5 1",'#10'" '#9'c None",'#10'"!'#9'c black",'#10'"#'#9'c #808080",'#10'"$'#9 + +'c white",'#10'"%'#9'c #FF0000",'#10'" ",'#10'" ' + +' ",'#10'" ################### ",'#10'" #$$$$$$$$$$$$$$' + +'$$$ $ ",'#10'" #$ #$ ",'#10'" #$ #$ ",' + +#10'" #$ #$ ",'#10'" #$%% #$ ",'#10'" #% %' + +' % #$ ",'#10'" #% % % #$ ",'#10'" #% % % % %%% ' + +' %%$ ",'#10'" #%%%% % % % % #% ",'#10'" #% % % % % % #% ",'#10 + +'" #% % % % % % #% ",'#10'" #% % % % % % #% ",'#10'" #% % %' + +'%% %% %%$ ",'#10'" #$ #$ ",'#10'" #$ #' + +'$ ",'#10'" #$ #$ ",'#10'" #$ #$ ",'#10'"' + +' # #################$ ",'#10'" $$$$$$$$$$$$$$$$$$$ ",'#10'" ' + +' ",'#10'" "};' +]); +LazarusResources.Add('TRxCalendarGrid','XPM',[ + '/* XPM */'#10'static char *TRxCalendarGrid[]={'#10'"24 24 5 1",'#10'". c Non' + +'e",'#10'"# c #000000",'#10'"a c #00ffff",'#10'"c c #800000",'#10'"b c #ffff' + +'ff",'#10'"........................",'#10'"........................",'#10'".' + +'.....###.....###.......",'#10'".....#...#...#...#......",'#10'"....########' + +'######......",'#10'"....#a#aaaaaaaa#a##.....",'#10'"....#aaaaaaaaaaaa##....' + +'.",'#10'"....###############.....",'#10'"....#bbbbbbbbbbbb##.....",'#10'"..' + +'..#bbbbbbbbbbbb##.....",'#10'"....#bbbccbbbcbbb##.....",'#10'"....#bbcbbcbc' + +'cbbb##.....",'#10'"....#bbbbcbbbcbbb##.....",'#10'"....#bbbcbbbbcbbb##.....' + +'",'#10'"....#bbcbbbbbcbbb##.....",'#10'"....#bbccccbbcbbb##.....",'#10'"...' + +'.#bbbbbbbbbbbb##.....",'#10'"....#bbbbbbbbbbbb##.....",'#10'"....#bbbbbbbbb' + +'bbb##.....",'#10'"....###############.....",'#10'"......#############....."' + +','#10'"........................",'#10'"........................",'#10'"....' + +'...................."};'#10 +]); +LazarusResources.Add('TRxDateEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205 + +#202#0#0#3#0'PLTE'#1#0#0#0#0#0#128#0#0#128#128#0#0#0#128#128#0#128#0#128#128 + +#128#128#128#192#192#192#255#0#0#0#255#0#255#255#0#0#0#255#255#0#255#0#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0','#144#198'\'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0#136'IDATx'#218 + +'u'#145#139#10#128' '#12'E7'#130#22#132#254#255'o'#166#4'M'#8#155'R'#168'k*l' + +'x'#207'^*'#194'd!'#144'%s'#1#233#175#251#163#2#223#2#233'u'#127#192'b3Z'#128 + +#129'z'#16't'#151#252#1#31#246#166#158'>T@e<#c'#19#127#161#186'G~'#5#194'!' + +#137'z@'#220#233#3#232'+)'#16#29'D98'#13#162'H'#194#166#25'+Y'#0#170'5'#128 + +#188'V2z'#128#179'K'#217#227#242'r'#203#134'b'#238#225#230#147#183#210#31#159 + +'Ud['#15'h'#23'Z'#25#23#189'C'#28#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxClock','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205 + +#202#0#0#3#0'PLTE'#1#0#0#0#0#0#0#128#0#128#128#0#0#0#128#128#0#128#0#128#128 + +#128#128#128#192#192#192#255#0#0#0#255#0#255#255#0#0#0#255#255#0#255#0#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'IF'#160'|'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0#132'IDATx'#218 + +#157#146#193#14#128' '#12'C'#187#19#254#255#215#202#169'2'#6#172'j8('#9#4#246 + +'h'#10#20#195#166#217'?`'#160'V8'#129#29'8'#25'[8'#22#29#180')N'#160'8'#168 + +#128#175#152#192#203#181#15#9#188#199#246')'#226'2/'#171#234'3B'#193'R'#8'h' + +#245#154#30'%'#136#165'`*'#20'T'#164#2#229#165#184#153#168'G'#24#136'GJ'#30 + +#167#218#223'cH'#6#163#230'ay*jP>'#206#135#130'('#172#7'1'#242#0#196'|'#147 + +#224#183#207'p'#1#206#241'B'#25'c'#4#211#189#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxSpeedButton','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205 + +#202#0#0#3#0'PLTE'#1#0#0#0#0#0#128#0#0#128#128#0#0#0#128#128#0#128#0#128#128 + +#128#128#128#192#192#192#255#0#0#0#255#0#255#255#0#0#0#255#255#0#255#0#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0','#144#198'\'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0#173'IDATx'#218 + +'}'#146#209#14#195' '#8'E/mWX'#154#253#255#135#246'E'#172'+'#131#166#217'tu3' + +#198#135's@'#8'J'#248#177#8#224#14'V'#23',W'#158#178#133#208#139#176#139' ' + +#204#218#21#167#169#133'='#253#152#202#13'a*Q'#2'{'#139#24'v'#171'3<~'#196 + +#224#212'w'#147#225#9#163#172#247'}'#192#222#214'8'#4#214#7'2'#172#233'jJ' + +#178#137#242#202#248#234#170'8'#135#26'e'#182'25'#25#155'$Id'#200'Kj'#132#5 + +#247#2'Q'#170'T'#226#228#139#159#178#209'G'#152#215#13'~'#12#165'T])'#191'y' + +#196'Wb'#246#235#185'7v'#253'zF'#251#255'P'#189#175#16#2#212#17#214#165#199 + +'z'#1'i'#21#144#25#14'l'#154#14#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxSpinButton','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205 + +#202#0#0#3#0'PLTE'#1#0#0#0#0#0#0#128#0#128#128#0#0#0#128#128#0#128#0#128#128 + +#192#192#192#128#128#128#255#0#0#0#255#0#255#255#0#0#0#255#255#0#255#0#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#200'7q|'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0'wIDATx'#218#173#210 + +#189#14#128' '#12#4#224#178#224#198#251'?'#167#19#215#5'M9'#180#252#24#19#163 + +#11#201'}'#205#137'H'#144#135'''|'#130#25#11'!u)pC'#246#29'H'#187#7#149#216 + +'r'#192#129#158'k'#172'y'#14#14#212#166#163#229#226#129'U'#150'/'#160#230'30' + +#31#160#246#176#176#3#155'_@'#237#153#129#243#182'i'#15'|'#175#242'c.'#0#247 + +'3Vm'#24#142#177#129'$'#244#7'_^~'#212'O'#151#225#0'g$X'#25']'#5'r'#173#0#0#0 + +#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxSpinEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205 + +#202#0#0#3#0'PLTE'#1#0#0#0#0#0#0#128#0#128#128#0#0#0#128#128#0#128#0#128#128 + +#192#192#192#128#128#128#255#0#0#0#255#0#255#255#0#0#0#255#255#0#255#0#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#200'7q|'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0'kIDATx'#218#189#145 + +'A'#11#192' '#8#133#237#226#6#131#253#255#223'9'#8#182'wij'#130'c'#213#161'K' + +#217'A'#222'G'#234#179'D'#131#147#214#128#189'#'#223#6'6'#203#175'S'#130'-'#5 + +#149#15#16'B'#2#160#23#14#178#234#135#1#16'q'#23'h!y'#19#165#242#0#136#238'=' + +'T'#15#160'z4'#159#3#168's'#181'>'#192#191#169#220'9'#185#245#10#158'vWe'#213 + +'GM'#130#23#211'$E'#25#128#18#229'#'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRXDBSpinEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1#230'IDATH'#137#205 + +#148#193'j'#19'Q'#24#133#191#127'2'#142'+)}'#129#190'D'#23#226'"P_A'#220#187 + +#200'n'#210#216'M'#7#178'(C'#9']T"*'#212'd#]'#248#12'n'#5#145','#220#139'o' + +#224#170#22#196#166#134#218'af'#174#139#206#157#220#153';'#153#220#22#4#15#4 + +#238#127#239#253#207#185'9'#255'a'#224#31'C'#244'"'#12'C'#165#215#211#233'T@' + +#169#230#150#178'U'#218#207#13#132'a'#168#148#162#252#153'b'#205'X'''#222'B' + +#190'JD)'#147#212']'#192#3#232#247#195#202'f'#189#6#16#145#194'6Mn'#174'm' + +#232#7#249#0#147#201#180'BZ'#175'M'#153'*'#233#234'9'#220'<'#168#16#208#164 + +'n'#208'"nC'#22#237#181')'#160'_'#191#189#253#208'Q'#180#25#189#222'3i'#181 + +#232#219#215#217#157#201#15#15'cz'#189'5'#22#189'z'#243#206#218'K'#146#132' ' + +#8#0#200#178#12#127'gh'#221'Q'#179'1'#243'_'#223#129'B'#160#223#15#27'-jB'#16 + +#4#229#4#252#157'!'#217#231#23#214#29#233'F\|x'#190#20'Xe'#209#163#193#167'J' + +#227#151#147#199#0#228#10':'#197#136#207#206#23#0'D'#251#3#198'/O,'#177'V' + +#139'4a]'#168#227'-'#215#151#243#5#163#209#176#20#137#227'c['#160#205'"M'#174 + +#197#234#184#248#249#155#189#221#131'JmB'#160#250#161#211'x'#253'vB '#235#5 + +#164#27'Y{z'#200#27#155'['#226#129#157'wWr'#23#148'3'#184#127'/a\'#196#178 + +#227#216','#221#200'-E'#26'JA'#206'2!.8;_'#16#237#15#202#186#158'$'#207',D ' + +#184#5'9'#220#164'H'''''#142#143#185#156'/*'#231#149#127#224#145#146#233#173 + +'|'#233'}Z'#156#231')x'#2#190#225#161'N'#205#222#238#129#149' K@'#169#28'H' + +#16#229#225'y>Y'#14'H'#138#200#21#29#30#212'nC:'#27#225'wc'#139#244#207#199 + +'#'#174#175'~'#0'ELOO'#223#171#167'O'#238#158#148'U'#216#216#220#186#165#225 + +#255'#'#254#2#182'2'#241'd'#141']'#3'd'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxTimeEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1'TIDATH'#137#237'TAN' + +#195'0'#16#156')'#136'7'#181#183#210#15' '#238'H'#28'zm'#223#144#245#7#16#18 + +#220'P+'#193'C'#218'T'#28#224#140#248#13#18#195'!'#177#177#235#196'mQ'#17#23 + +'F'#178'6'#235#216#187#179';'#155#0#255#248'k'#16#0'$i'#185'|'#250#149#4#167 + +#177#243#254#246'|'#212#224#23#151'Wi'#2#0#184#185'}8Z'#130#205'f'#131'A'#223 + +#203#209'|'#157#216']'#251#30'$'#19#191'7'#193'Op'#194#179',Ig'#2#146'x'#189 + +#159'$'#150'd'#198'>'#174#130'$>'#241#145#248#1#146#180'X<'#10#128#26#183'Yf' + +'&3'#11#254#247'{i8[i'#23#234#186'V'#16'y:'#189'n'#147#245#183'@'#2#200#134 + +#221'p'#182#194'h'#190#198#203#221'9'#156's'#157#231#199#227'q3E$C`'#231#12 + +'Ue'#0#16#172#135's'#6#201#218#22'L'#160#18#155#140#156#242'e='#251#190']' + +#251#180'h'#208#6#135'sV'#166#144'U'#146#10#233#7'!^E'#246#187'*'#232#170#2 + +'H'#7'!'#136#236#217#199'=wL'#173'G'#149'T'#155'V-'#169#213'S'#217#254'Q*' + +#232#210#128#177#6#219'SS'#210#160#170#12'$P'#215'u'#241#172'o'#192'!'#19#215 + +'\dr'#191#23#217#175#162'4M'#135'LZ '#18'='#11'H'#191#228'.'#241#227#201#220 + +'''A\'#1#183#2#228'l'#14#12'^:'#216#167#200#222#129'='#190#0'q'#209'z'#166'R' + +'2h'#222#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxDBTimeEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1#159'IDATH'#137#181'V' + +'1N'#195'0'#20'}?'#148'r'#131'\'#164#3'e3''@'#236#136#165'bq'#138#16'G'#232 + +#196'X!'#154','#168#11#7')'#223',='#6'Co'#193#242#25#26#187#174'c;'#141#16'O' + +#138#226#196#254#239#253#255'l'#199#1#254#25'd'#27'Zk'#177#237#166'i'#8#16 + +#137#135#184'P'#202#247'{'#208'Z'#139#8#220#229#139#197#209''''#158'!'#207 + +#139#136't'#175'<'#200#18#213'u'#227'^V'#149#6#0'L&'#151#157#128#217#236#222 + +#181#215#235#143#222#2'Hk-u'#221'8R+VU'#26#23#231'?'#209#160#229#235';'#158 + +#159#30'z'#201'on'#239#242#22#253#21#204','#133'oIh'#17#0'\=~'#30#245#217#231 + +#240#189#179'$X\#'#223#146#208#162#161'8'#163#177#19#145'v'#254'G>i*'#27'Z' + +#237#159#167#243'M'#167#138#237#219'u4s"'#2'3'#231'WQY'#150#0#0#165#212#209 + +']D'#142#200'S0'#198#12#179#136#153#161#148#2#17'a:'#223'8'#145#197'b'#17#21 + +'PJ'#229'-'#178#25#251#2#204#236#250#228#132#13#157#183#168'i'#160'Z'#194#152 + +'x'#159#128'1'#6#4'@'#180#238#218#177'\'#213'x)(*`'#173#242'E'#194'I'#182#227 + +#10#160#251'IX'#174'j'#140'3'#223#202#208':'#0#157'j'#142#150#233'n'#247#141 + +#178',]'#224#246#203#128#219'6'#7'd'#202#155#135#152#136#191#7#128#253'y ' + +#169#0'V*9'#7#182#146#220'<'#184'e'#10#28'|'#13#179#141#10'{c'#141'1I'#1#224 + +'p'#162'%'#171'H'#161#21#232'='#213#138'Xv)'#12'M"'#204'@B'#18#127'SYx'#237 + +#147#206'd'#191#2#10#201'B'#12'%'#207#13'L-'#141#211#255'$Z'#252#2'}'#212'D' + +#152'a'#180#26#28#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxDBProgressBar','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1'''IDATH'#137'c`'#160 + +'1`d```'#200#202#202#250#15#19#152'6m'#26'#'#3#195#255#255#184#181#192#181'2' + +#18'eCVV'#214#255#255#255#25#224#24#217'2'#220#128#24#7' '#148#254'G'#199#132 + +'-!'#222#2#166#236#236','#20#1't>'#166#193'0'#195#145#217#184#1#227#255#255 + +#12#255#145#13#157':u'#26'Cvv'#22'4.pY'#2#215'N0'#30'X`'#134#18#15#24#161#137 + +#128#184'Hf'#204#202#202#250#143'l'#1#204'7'#188#188#26'$X'#138#9':;'#243#24 + +#25#24#240#4'Qp`'#16'E'#22#236#218's'#141#161#179'3'#143#17'g'#16#25#153#24 + +'2x'#214'^'#132#243#183'7'#235'c'#240'q'#129'sg'#206#195#217','#217#217'Y'#12 + +#216#130#136#129#129#129#161'6'#206#0'I'#219#127#12'>1'#128#5#22'$0'#128#204 + +'?w'#247#11'\'#220'J'#149#27#131'O'#148#5'0C'#177#129#173'G'#239#192#217'9' + +#30#250#24'|b'#0#137#25#141't'#192#130#205#208#254')S'#25#190'}|G'#21#11#24 + +#231#206']'#248#255#236#217#147'('#134#179'120'#236#219#179#151'"'#131'a'#201 + +#20#158#27#203#203''''#17'_B'#18#1'`'#25'm'#20#140#130'!'#0#0#6#165#149#157 + +#16'*hH'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxDBTrackBar','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1'SIDATH'#137#237'T' + +#177'n'#194'0'#16'}F'#217'*v'#182'D'#130#161#202#152#137'.'#208#181'R'#7'>'#3 + +']('#234#22'~!S$P,~'#161'_'#208#13#214'N'#29'Y*'#132#170'J'#253#139#234':'#4 + +#187'Il'#167')*'#27'O'#178'd;'#207#239#249#238'|'#1#206#12#161'&D'#196'j.' + +#165#20#0#179#133'.'#204#189#22' "f'#134#30'e'#179#31#216#12#127#135' "'#206 + +'si|'#136'c:FR6(" '#185'7'#204'$'#245#173#209'yJ'#172'l'#18#199#228#184'y1' + +#127#221'm[G'#224#1'@'#158#203#138'hu-*'#245'H'#146#21'z'#189'/L&'#247#154#31 + +#4#3','#174#150#156#166's#'#10#175','#234#134'2'#17#2'X'#254#169#22'B'#21#212 + +#150#162'n'#247#218'z'#200#26#193'be'#240#210't.'#26'S4'#157#222#25#135#214 + +#235'g'#231'm'#203'|'#197'kL'#209#199#251#167'S'#204#6#27#191#241#21#141'n' + +#199'F'#209#146#196']'#3#27'_7'#25#17#233#225'n'#182#2#195#217#134#179','#227 + +#195#225#141#153#153#135#179#141#147#219#242#21'U'#17#133'>'#158'v'#192'c0' + +#192#205#195#22'Q'#232#227#197#193#237#0#245#198'2'#215'uH'#234#139'('#244 + +#181#184#171#139#129#227#207#206#150#142#234'o'#194#14#146'{n'#18#215#6'u' + +#147'6'#226''''#195#245'JN'#221#239#252#223#213'.'#184#224'\'#248#6#216#165 + +#172#203#24'='#180#201#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxLoginDialog','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1#212'IDATH'#137#213 + +#149'?hSQ'#20#135#191#27'S'#229#17'hET'#208','#25#218'A%T'#168'"'#220'!'#185 + +'NJ'#165#155'S'#187#212#209'!'#234#224#164#203'-d'#233#148'5'#16#138#144#205 + +','#26#23'!'#211'u'#17#137#155#8'>'#130#213#169')Ei'#254',Akr'#29#170#177#205 + +'K^^'#211#183#248#155#238';'#247#156#243#157#195'}'#156#3#255#187#196#160'A+' + +'l'#255'l'#236#224#245'Xi%'#254#196#238#231#142#30#190#182'v'#144'i'#189'5' + +#140#148#224'`A'#214#130#16#209#145#222'C'#131#142#174'C'#229'i'#173#143#151 + +'m@Zko'#7'J'#169'P'#146#27'c'#0#136'L'#18'\.'#151')'#22#139#129'|'#143#12#232 + +'v'#187#8'!p'#28#135'R'#169#20'.'#192'u]'#242#249'<'#213'j'#149'B'#161#128#16 + +#130'L&'#19#30' '#153'L'#226#186'.'#217'l'#150'J'#165#130#148#146'h'#212#255 + +'G'#28#9'x'#244'p'#133#31#173#28'ra'#11'y'#173#133'\p'#233't:'#244'z'#189#190 + +'O<'#30''''#151#203'M'#6#184'}]0?{'#158'''K+|'#251#186#195#148'3G'#235#251'6' + +#141'F'#131'g'#27#247'}'#147#30#212#200#254'"'''#247'85'#245#18#189#241#24 + +#219'^'#167#241#22'Rg-'#175#239#213'9w'#165'N- '#192#247#13'b'#177#203#196#18 + +')j;'#155#156'Im'#146'X'#252'B'#236'B'#224#226#253#1#246#215'O'#232#188#1#166 + +#153#191#4#167#29'x'#250' A'#228'DH'#128'['#203'/'#216'k'#3'8'#0#172'.'#193 + +#221#197'&'#187#159'C'#2#0#188'o'#27'^'#173#223#160#249#1'n^'#133'O'#239#154 + +'<'#175'C'#237#162#9#12#24';Mg'#164#225'#0#'#247#191#239#200#192#185#129#9'F' + +#133'1'#6#149'V'#168#180#234#15'4c'#12'i'#165'H'#171#127#182#191#26#219#193 + +'0'#233'5'#237#177#173'i'#175'm"'#192#176'q'#238'7'#226#189';9'#164#165#163 + +#181#14#190'k'#143#163#223'|G'#141#138'p'#211'x'#28#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxVersionInfo','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#15#18#0#0#15#18#1'!'#155#242'3'#0#0#0#252'IDATH'#137#213#149 + +#193#17#194' '#16'E_'#28#155#240'H'#27#30#215'2l'#197'v'#210#6'G'#219#224#152 + +'2'#240#144'0'#129'5'#192'2'#234#193#127'av'#242#243#31#11#132#192#191'k'#234 + +'[b'#204#236#6#191#25#144#7#191#189'f'#6'U'#140#173#240'1'#200#129#201#18'n' + +#135'('#195'Qx'#30#210'{'#254#174'S'#135'?'#181#235#190#26#179'k'#133#217#189 + +#157#14'>'#215'P'#7#207'Y'#6#14#0'\'#239'~:'#151#129'9$'#198#28#178#204#18#17 + +#25#201'g'#153#137#231#182#165#132#0#224'}Q'#6#192'5'#192#10#160#187'H'#16 + +#128#219':'#168'0'#215#158#161#6#212' '#187#130#247#135#161'a'#131#233#142'*' + +'KT'#135#212#150#195#169#177#3'H'#16#208#160#162#3#17#194#182'''Nd'#221#159 + +#180'E'#210#5'h'#208'zDu'#7'E'#237#217#129#8#200#215'?4'#159#168'[-'#150#31 + +#206#174#214#135#230#0#2#132#176#6';'#7#151#199'c'#248#238'2*'#198#180'w? ' + +#148#135#226#135#151#221#248#213'nT'#217#193#11#31'-T'#255'GS='#145#0#0#0#0 + +'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxAboutDialog','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#0#228'IDATH'#137#213 + +#149#209#13#195' '#12'D'#143'*{q'#155#197#217#204#153#140'~P'#8'%'#16#28#20 + +'U'#234#251#1','#235#14#3'2'#192#191#227#210'D'#136#144#231#26#218#217#6#132 + +#238#163#17#181#151#24#14#161#240#138#145'jm'#193#161#220'X'#8#128's'#139'-y' + +#30#7#0'"'#242#140'Z'#133#136#28#21#144'l&'#145#254'k'#173#186#155#196'U'#21 + +'@'#190#131'ka'#9'['#28#221#154#227'V'#163#215'H'#220#178#129'+'#186#21#148 + +#136'[Mb&'#131'zg'#233'xZF'#164#31#30'U'#243#136'Z'#204'Va6'#152#229#247#6 + +#214#231'g'#205#237#190#162#242'r'#203#245#221#187'h'#26#168#238#224'@'#200 + +'Zi'#183#130'$0'#219'*'#134#6#179#130'5'#183'_'#145#170#130#158#160'gnh'#170 + +#10'O'#194#243#136'%L'#173#162'F69'#197'69'#199#166#12'Zm'#189#215#234#129 + +#242'O~'#248#211#17#145#251#127#238#12'o'#239#175'R'#255#176#141'Ys'#0#0#0#0 + +'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxDBCurrEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0'0'#0#0#0'0'#8#6#0#0#0'W'#2#249#135 + +#0#0#1'HIDATx'#218#237#151'A'#14#131' '#16'E'#165#139#246#6#158#199#243#224 + +'!JO'#208'Ma'#231#162'7'#209'e'#23#158#137':'#137#180#160'B-'#181#14'$'#243 + +#19#3#26#193#255#252#163'(+2'#23#195'6@'#0#216#6#8#0#219#0#1'`'#27' '#0'l'#3 + +#4#128'm'#128#0'b'#7'r'#206#181#233'+'#165#134'y'#180#14#143'`'#127#185'YQ' + +#147#130'y)'#213'k'#191#174#249#8#225#19#192'%'#2'05'#31#134'XJe['#144'('#0 + +'h'#167#9#128#202#178#156#157'/'#196#217#234'_'#130's'#11'!'#190#246#19#157 + +#128'1m`'#198#4'<'#163#244#154'KE%'#179'i'#9'I)c<'#20']'#215#21'UU'#237#7#0 + +#237'R'#9'}'#2'`c'#249#235#225#209#176#251#187#3#248'Jhm'#2'`^['#207'7'#10 + +#192'T'#6#128'-'#172#8#211'c'#232#0#208'.'#149#144'Rn'#2#246#219'?)'#128'P'#9 + +'e'#145#128#127'!{'''#224#26'N'#12#0'Z'#223'['#200#152#181'M'''#5'`C'#216#186 + +#222'dq:'#188#247#147'M'#0#212'4w'#221#247#15#199#252#145#249#204#206#161'P' + +#1#134#239#21'=l'#142#129#213#23'Ka!'#251#5#192''''#20#128#182'm7'#3#0#237#13 + +#144#204#175'h2F'#8' W'#17#0#182#8#0'['#4#128'-'#2#192#22#1'`'#139#0#176#149 + +'='#192#19'C'#237#245'1T'#130#194#231#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxViewsPanel','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#23#8#6#0#0#0#17'!'#143'-' + +#0#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149'+'#14#27#0#0#0#233'IDATH'#137#205 + +#149'Q'#14#132' '#12'D'#167#27#239'Eof'#185'Y9Y'#247#3'QD\'#17'4'#217#249'Q' + +#155#240'F'#24''''#146#153#25#17'^'#145#25'@'#128#153#13#130#8#128#157'\'#211 + +#253'k'#154'D'#4'"'#243#226#149#203#160#26#192#204#16#17'0'#243'm'#184#170'b' + +#138#183't8("'#2#243'~'#230#156#3#0#132#16'v'#207'I'#229'<3'#0#208#144't'#8#1 + +#206#185#29'8'#135#214#230#19'n*-l'#157'/'#6#6#170'd'#240#132#178#29'\'#3#187 + +'3'#144#195#219'GIa'#218#157#129#192#14'&%'#188'\'#216':_'#143#232#12'8'#170 + +','#131#235#144#7'zP/Zi2'#212#3#242#180#226'~U'#174';'#131'+p'#175#214#162'A' + +#254#160'h'#221#6#173'E'#235#209#231#12#244'T/'#226#14#196#3'H?'#158'M'#241 + +#135's'#31#170#170#155#193'<G'#168#247#30#170#245'O'#173'G'#137'K'#182'4'#204 + +'{'#255#24'<7'#248#2'N'#186#146'B'#24#248#204#194#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxDBColorBox','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148 + +'S'#221#0#0#1#151'IDATH'#137#181'U;N'#195'@'#20#156#141#220'F'#177' '#5'G@' + +#20' #j'#10'$@'#206#1'@('#5'E:['#208'.'#16#232#0#145'6h'#183'KA'#145'+'#16#9 + +#16'rH'#133'D'#136#160#200'-'#130#185#128'Y'#138'd-'#175#227'o'#2'#'#173#180 + +#239#217#158'yo'#188#31#130#9','#203#18'r'#206'9'''#128#240#227'x'#16#146#254 + +#206#132'\'#8#248'c'#28#167#9'd) '#130'<('#18'O'#28#30#241'('#0#128'm[J2'#28 + +#171#8#219#146'l'#19#177',K0'#198#21'R'#25#23#139#203#177#31'6'#26'G'#160#244 + +'6'#225#249#241'X8'#201'"'#215#29'e'#26#148'6'#149#216#233#246#4#165'M'#1#0 + +#154#180#132'1'#238#171#203'n'#244#199#235#164#238#1#0#223#219'g'#254#188'\.' + +#195#251#17'p'#156#30#0#192#233#246#132#22#180'$lQ^Pz'#138'R'#169#164#228#180 + +' iRui'#248#248#28'bg'#215#156#202#19#185#28'#-'#210#245'L'#228#158#183#20 + +#153'7+'#6#136#235#142#132#174'/FZ'#180#183#127#144#185#131'0:'#247#3#152#21 + +#3'Z'#189'~'#1#198#162'-Z[]'#153'K'#0'HYE'#18#213#234'Bf'#226'v'#251'K'#137 + +'5'#198#24'l'#219#158'"M'#218'dy'#160#17'BH'#171'u'''#250#253'W?'#201'9''r' + +#163'DU'#149'K'#0#0'j'#181#195#200#243#228#253'm03'#177'"'#144#134#173#171 + +#203#204#132#207#245's%.'#228#171'''?2u'#16#174#234#207#4#214'7'#140#153#137 + +#31#158#134#233#2#18'7/'#211'gL'#28'N6;J'#252#239#255' '#246#186#11#238#131 + +'YaV'#140'x'#1'`|a'#204'+'#242#11'3'#175#249#153#208#135's'#214#0#0#0#0'IEND' + +#174'B`'#130 +]); +LazarusResources.Add('TRxRadioGroup','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148 + +'S'#221#0#0#2#27'IDATH'#137#213#149'AH'#20'q'#20#198#127#234#130#18#209')'#13 + +#15#27#182''''#17'dI'#130'.'#186'A{mM<'#5'K'#12',.'#139''';'#173#7'A'#7'1'#17 + +'/'#214'!'#150'X('#198'X'#214#139'J'#133'''!'#136'-X<'#8'YD'#148#178#179'.'#8 + +'9'#135#173#176#136#132'}'#29'l'#167#29'wvfs'#131#232#131#7'3o'#254#223#251 + +#222#159#247#222'<'#248#223#209'd'#231#20#16#23#146'-'#207#14#30#243'I'#173#8 + +#170#186#176'T'#231#4'Pk%."'#136#136#128#171#149#207'V'#25#136#170#170'f'#2 + +#30#171#2#232#250'6z'#238#131#203#21' '#167'oW'#249#10#249'='#2#199'|'#205 + +#174#145#26'DM'#1'MK'#253#21#1#143#157'S'#211'R'#236'w'#220'D'#211#30#161'(a' + +#134#135'o'#184#6'ZYY'#170'_@Q'#194'fp''r='#176#21'('#139'4'#130#163'f'#180 + +#14#140#136#8#250#175#238#208#180#148'E'#228#194#9'kR'#127#13#174#135#144#169 + +#169'?'#22#176#237'"E'#9#211#177'o_'#131#219'mm'#220#245#249#184#211#213'E' + +#162#183#151#221'L'#6#128'o'#134#193#130#215'Kqg'#199'<'#155#30#28#172#221 + +#166'N5'#136'nlpK'#215#185'<6'#198#227'H'#4#128'S'#237#237'\'#157#153#225'I4' + +#10'"'#188'I'#167#249'^,66'#7#190'`'#144'O'#185#156#249#238'W'#20#154'='#30 + +'^'#204#205#177'>>N('#153#180#23#248']'#131'#'#145'Zs'#240'vy'#153's~'#191 + +#197'w-'#145#224#217#196#4#23'#'#17#206'vw'#215'?'#7#149']t'#191#175#143#31#7 + +#7#148#14#15#25#201'f-'#220#247'kk'#156#238#236#228#227#214#22#224#240#171'p' + +#170'Als'#147#184'apit'#148#231#211#211#166#255's>'#207#203#249'yF'#178'Y' + +#190#20#10#188'[]'#173#190'A!'#191'W3p%'#154'ZZ'#8#206#206'r'#175#167#135#221 + +'L'#134#243#3#3'<'#141#197#184'29'#201#25#175#151'P2'#201#210#208#144#133'#' + +#142#166#170'""2'#211#218'*_'#13'C'#202'x'#157'N'#203#131#254'~y'#181#184'(' + +#15#3#1#145'R'#201#252#182#30#143#139'e'#243'T.'#138#227'P'#225'D'#131'V'#247 + +'n'#197'A'#252#159#226'''{'#212#26#152#181#14#208#246#0#0#0#0'IEND'#174'B`' + +#130 +]); +LazarusResources.Add('TRxDBRadioGroup','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148 + +'S'#221#0#0#3#20'IDATH'#137#181#148'oHSa'#20#198#127'W6W'#162#169#149#174#132 + +#18#141#129#144#181'0('#130#178'2"'#168#232'C'#4#150'#n'#136#179#160#192'>E' + +#127#160'B'#20#194'/aEbAq'#145'5'#252#16'ad'#31'"E'#199#2#177'0Z'#22#253'C]' + +#162#209#148#210#178'?z'#213#211#135#177#185'5'#231'4'#233#129#203#189#231 + +#188#231'}'#158#251#156#247#240'*'#132#192#233#234#151#155#15#186#152#14#205 + +#9#143#167#205#199#130#242'7q'#245'q+'#185'+'#19#233#252'8'#130'oh'#20#223 + +#240#24#190#161'Q'#202':4'#228#194#133'9'#11#24#0'n>'#232'b'#173'e1Y'#230#133 + +#248#134'F'#233#132'0r'#223#240'XpC'#229#130#5'$fd '#147#147#152#146#146#216 + +'s'#253':+'#183'l'#225#231#192#0#181'yy'#28'ii!u'#213'*'#0#156#251#246#17#7 + +#144#189'b'#17#158#247'_hp'#247#133#145#6#222'?~O'#132#253#149#189#189#157 + +#147'==l,+'#163#161#184#24#128#132#180'4'#10'**'#184'o'#183#131#8#157'N''' + +#191#191'~'#245';'#0#216#180'&'#141#244#228'x'#162#157#1#9#145#169#236#29';h' + +'<v,'#24'[U'#21#143#195#129#251#210'%'#158#214#212'p'#248#209'#'#191'@W'#239 + +'7'#204')i'#0#156#179#229'P'#176'vI'#196#25'4wD'#10#188#190'{'#23#179#213#26 + +#150#219'[S'#195'U'#139#133#252#243#231'Y'#154#147#227#23#200'^'#177#136#246 + +'W'#131'LL'#10#185#153'9'#211';'#8'Am^'#30'c##L'#234':%mmak'#239#26#27'I\' + +#190#156#207#30#15#192'T'#139'6'#172'^Jzr<'#149#142'7T:'#194#9#171#143'[!' + +#196#193#209#142#14#22#166#166#242#248#204#25'Z'#203#203'9P_'#15#192#176#215 + +#203#147#170'*J'#218#218#168#223#191#159'7'#247#238#249'7'#20#156'r'#203#185 + +#186#183'R}'#191'['#154'^'#12#138#136#200'K'#239'wiz1(NW'#191#8#8#23'/'#138 + +#136'H'#133#201'$?'#6#6'DDdB'#215#229#138#197'"^'#151'KDD'#234'v'#237#146'g' + +#181#181'""'#242#233#249's'#185#156#153')'#6#162'`'#205#237#164#224#247#193 + +'(5q'#6#3#219#203#203'i:{'#150#245#165#165#140#255#250#197'z'#187#29#128'e' + +#235#214#145'[X'#232'/,'#185#234#145#157#167#159'H'#193')w'#208#1' '#136#8 + +#254' '#232'`'#174'P'#2#2#230#20#19#233#201#241'4'#184#251#0'h'#174#218#140 + +#136#208#211#243#1#128','#205#17'ia'#22'0'#0'x'#251#190'cN1'#1'Sc'#170'TM'#21 + +'i'#154#131'n'#213'6+'#194'^o?'#249#219#182#226'ji%'#127#219'V'#197#0'P'#188 + +';'#139'['#15#187#167#29'SMs'#224'K?'#140#166#213#161#170'6JKOD%'#191'q'#227 + +'ZDN'#9#13'B/'#189#208#22'i'#154#3'U'#181#161#235#227#24#141'Q'#231'"'#186 + +#131#0#14#229'g'#132#10#10#128#174#143'STT'#136#174#143#19#136#231#130#184'X' + +#5'F'#163#129';w'#234'1'#26#13#179'z'#254#198#204'~'#153#255#25#196#20'PU[' + +#144'<'#26#201'L'#136#217#162#128#200#191'"'#166#131'^o'#255'?'#147#199#20'P' + +#20'e'#166#229'y'#11'('#174#150'V'#153#183#194#255#198#31'Mv'#189#134#210#214 + +'J$'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxHistoryNavigator','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149'+'#14#27#0#0#1'8IDATH'#137#213#148 + +'=K'#195'@'#24#199#127#23'\'#130#171'T'#4#191'D'#171#224#224#160#163'[p'#236 + +#152#15#144#174#151'1'#163'Y'#147#221#184#245'k'#232#224' H)'#157':'#10'N'#1 + +#199'B'#198#199'!MLL'#140#205'K'#135#254#225#184'7'#238#255'r'#207'qP'#128 + +#128'00'#140'}'#146#3#168#174#228'j{'#246'?'#24'}'#201'E'#164't'#222#243#202 + +#243#214#9'\'#29'4'#238#155#166#3'@'#146#132#248#254'L)'#173#3#241#31#28'D' + +#165#166#148'T'#181'>>'#191#242#241#211#227#201#174'^H'#146#240#167#200#147 + +#241#5#0#227#201'e'#222'gc'#128'{'#235#174#21'9'#164'i'#140#226'B&R'#7#203'z' + +'oE'#14'i'#2#180#14#4#145#198#214#6#158#151'6'#17#17#173#3'Q'#176#21#25#8#166 + +#233#164#206#1#223#159#165#133#213':'#144#245'r%'#235#229'J6q,'#155'8'#174'u' + +#215#197#200'Qq2'#181#237#210#230'b'#209#254#222#27#5#230'Q'#196#249#217')'#0 + +#199#163'Qo'#242#138#192#239#4#208'?'#197'^'#18#188#188#190#201#205#245#149 + +#170#8#20#19#244'q'#158#145'W'#4#138#9#134#194'a'#214#160'V '#154'?'#15'B' + +#248#167#128'='#189#5'hL'#224#186'aw'#1'8'#208#26#228#239'u'#151#143','#255 + +#29'['#224#27#254'('#218'x|2'#20#20#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxCloseFormValidator','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1#0'IDATH'#137#213'UA' + +#22#132' '#8#197'y'#221'+'#142'F7'#195'Es'#169#22#204#194'l'#12#5#179'f3'#127 + +#149' '#252#175#16#2#252';'#130'6'#16#130#28#223','#218#221#5'a'#216'cS'#238 + +#233#236#22#209#156'Rk0'#17#160#20'$'#2#16#194'd'#238'n'#6#141#227'$'#143#136 + +#158'eS '#162#250#4#136#232#6#225#156#252#28#217#221#199#156#252#175#17'E9' + +#185'\/KM'#144#147'X'#144#0#16'wu'#183#8','#146'l'#27'I'#222'$'#240#238'v}' + +#175#7'Y)B'#11'*'#215'f'#13'Z'#9#182'm'#3#156#17'82p'#228'f'#226#236'w'#9'Z' + +#167#232'u'#141#213']'#221'.'#234#21#189''''#224'R'#155#246#212#151#251#180 + +' '#151#224#170'z/'#206'$'#200#170#181#250#172'R'#23'S'#199'e'#184#195#206 + +#186#154#22#169'^3$'#219#208#168#184#131'a'#2#230#226#138#246#191#154#153'aF' + +#132#25#191#182#140#238'{'#208#2'-T'#217#22#170'm'#183#8'Z'#227#220#27#241 + +#245#155#252#163'G'#135#136#6#134#250#3'|'#0#10'!sr'#165'GZ'#12#0#0#0#0'IEND' + +#174'B`'#130 +]); +LazarusResources.Add('TRxIniPropStorage','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149'+' + +#14#27#0#0#1'LIDATH'#137#213#148#193'N'#195'0'#12#134'?''}'#27'$'#144#184#240 + +#10#28'9'#240'>'#177#243'T'#188#0#210'8 61'#222#166#141#185#172'U'#179#181 + +#163#29#187#236#147#162#184#177#235'?'#137#221#194#173'#'#0#170#234#215'N' + +#156's'#166#148'"M'#191#240#250#242'|U'#1'3'#3#160#25'/'#222'?'#190#225'+' + +#206#210'u'#137#166#137#180'mK'#211'4'#195#188#251'|'#31'b*'#1'wV'#9#132#16#0 + +'?'#204#12#243#152'J'#224#251'k'#237'5'#253#29'_'#9#220'=<'#173#20#152#230'g' + +#247'1'#216#167'g'#154#193#204#8'! "C'#1#151#208#204'9b'#140#184';]'#215#145 + +'s'#198#204'h'#219#22#17'!'#198#8'@J'#169#138#19#145#233'd'#170#234#251#237 + +#198'{B'#8#14'8'#224'"'#226'"r'#214#238#159'K)'#238#238#190#223'nz'#223#244#9 + +#142'w'#212#239#216'G-6'#23#179#248#138'D'#4#17'!'#132#128#187#163#170#149 + +#223#204#136'1RJ'#153#191#154's'#2'9'#231#193'VU,%: '#31#10#156'R'#194#204 + +#170#184')'#22'wQ'#25'%_'#195#170'6'#189#132'E'#2'S'#201#205#172'*'#250'Y' + +#142#219'TU'''#219'p<'#142#215'Uux'#127#220#166#147#2#238#238#165#148'j'#244 + +#162#128#171#234#137#127#204'"'#129#255'0'#251#161#141#127'R'#215'B'#0'D'#196 + +#23#23#236#130#252#183#205'/'#245#161'[H'#1#236'`'#148#0#0#0#0'IEND'#174'B`' + +#130 +]); diff --git a/components/rx/version/2.1/images/rxspin_res.bat b/components/rx/version/2.1/images/rxspin_res.bat new file mode 100644 index 000000000..ac11ec643 --- /dev/null +++ b/components/rx/version/2.1/images/rxspin_res.bat @@ -0,0 +1,2 @@ +del rxspin.lrs +d:\lazarus\tools\lazres.exe rxspin.lrs rxspindown.png rxspinup.png diff --git a/components/rx/version/2.1/images/tautopanel.xpm b/components/rx/version/2.1/images/tautopanel.xpm new file mode 100644 index 000000000..bb75b3560 --- /dev/null +++ b/components/rx/version/2.1/images/tautopanel.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static const unsigned char * tautopanel_xpm[] = { +"24 24 5 1", +" c None", +"! c black", +"# c #808080", +"$ c white", +"% c #FF0000", +" ", +" ", +" ################### ", +" #$$$$$$$$$$$$$$$$$ $ ", +" #$ #$ ", +" #$ #$ ", +" #$ #$ ", +" #$%% #$ ", +" #% % % #$ ", +" #% % % #$ ", +" #% % % % %%% %%$ ", +" #%%%% % % % % #% ", +" #% % % % % % #% ", +" #% % % % % % #% ", +" #% % % % % % #% ", +" #% % %%% %% %%$ ", +" #$ #$ ", +" #$ #$ ", +" #$ #$ ", +" #$ #$ ", +" # #################$ ", +" $$$$$$$$$$$$$$$$$$$ ", +" ", +" "}; \ No newline at end of file diff --git a/components/rx/version/2.1/images/trxxpmanifest.xpm b/components/rx/version/2.1/images/trxxpmanifest.xpm new file mode 100644 index 000000000..1dd31fa9f --- /dev/null +++ b/components/rx/version/2.1/images/trxxpmanifest.xpm @@ -0,0 +1,36 @@ +/* XPM */ +static char *trxxpmanifest[]={ +"24 24 9 1", +". c None", +"# c #000000", +"c c #000080", +"a c #00ff00", +"e c #9d9da1", +"g c #e0dfe3", +"b c #ff0000", +"d c #ffff00", +"f c #ffffff", +"........................", +"........................", +"....##...##.####........", +".....##.##..#####.......", +"......###...##.##.......", +"......###...#####.......", +".....#####..####........", +".....##.##..##..........", +"....##...##.##..........", +"........................", +".####################...", +".#aaaaaaaaaaaa#b#c#d#e..", +".####################e..", +".#ffffffffffffffffff#e..", +".#ffffffffffffffffff#e..", +".#ffffffffffffffffff#e..", +".#ffffffffffffffffff#e..", +".#ffffggggggfggggggf#e..", +".#ffffgffff#fgffff#f#e..", +".#ffffg#####fg#####f#e..", +".#ffffffffffffffffff#e..", +".####################e..", +"..eeeeeeeeeeeeeeeeeeee..", +"........................"}; diff --git a/components/rx/version/2.1/images/ttoolpanel.xpm b/components/rx/version/2.1/images/ttoolpanel.xpm new file mode 100644 index 000000000..46c0e08b5 --- /dev/null +++ b/components/rx/version/2.1/images/ttoolpanel.xpm @@ -0,0 +1,37 @@ +/* XPM */ +static char *TToolPanel[]={ +"24 24 10 1", +". c None", +"# c #000000", +"h c #000080", +"d c #0000ff", +"f c #008000", +"b c #808080", +"c c #c0c0c0", +"e c #ff0000", +"g c #ff00ff", +"a c #ffffff", +"........................", +"########################", +"aaaaab#aaaaab#aaaaab#ccc", +"accccb#accccb#accccb#ccc", +"adeecb#afffcb#a#eecb#ccc", +"adddcb#afggcb#ahhhcb#ccc", +"accccb#accccb#accccb#ccc", +"bbbbbb#bbbbbb#bbbbbb#ccc", +"########################", +"....................dd..", +".#################.dddd.", +".#a#ddddddddd#a#a#dddddd", +".#################..dd..", +".#ccccccccccccccc#..dd..", +".#c####c#######cc#..dd..", +".#c#aa#c#aaaaa#cc#..dd..", +".#c#aa#c#aaaaa#cc#..dd..", +".#c#aa#c#aaaaa#ddddddd..", +".#c#aa#c#aaaaa#ddddddd..", +".#c#aa#c#aaaaa#cc#......", +".#c####c#######cc#......", +".#ccccccccccccccc#......", +".#################......", +"........................"}; diff --git a/components/rx/version/2.1/languages/register_rxctrl.po b/components/rx/version/2.1/languages/register_rxctrl.po new file mode 100644 index 000000000..1e423145e --- /dev/null +++ b/components/rx/version/2.1/languages/register_rxctrl.po @@ -0,0 +1,11 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: register_rxctrl.sloadicon +msgid "Load icon" +msgstr "" + +#: register_rxctrl.stesttrxlogindialog +msgid "Test TRxLoginDialog" +msgstr "" + diff --git a/components/rx/version/2.1/languages/rxconst.es.po b/components/rx/version/2.1/languages/rxconst.es.po new file mode 100644 index 000000000..eda3c0031 --- /dev/null +++ b/components/rx/version/2.1/languages/rxconst.es.po @@ -0,0 +1,231 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: rxconst.sabout +msgid "About" +msgstr "" + +#: rxconst.sappversion +msgid "Version : " +msgstr "" + +#: rxconst.savaliablebuttons +msgid "Avaliable buttons" +msgstr "Botones disponibles" + +#: rxconst.sbrowse +msgid "Browse" +msgstr "Vista" + +#: rxconst.sbuilddate +msgid "Build date : " +msgstr "" + +#: rxconst.sbuttonalign +msgid "Button align" +msgstr "Alineaci?n de Botones" + +#: rxconst.sbuttonalign1 +msgid "None" +msgstr "Ninguno" + +#: rxconst.sbuttonalign2 +msgid "Left" +msgstr "Izquierdo" + +#: rxconst.sbuttonalign3 +msgid "Rignt" +msgstr "Derecho" + +#: rxconst.scarbonwidgetset +msgid "Carbon widget set" +msgstr "" + +#: rxconst.scloseallexceptthis +msgid "Close all except this" +msgstr "" + +#: rxconst.scloseallwindows +msgid "Close all windows" +msgstr "" + +#: rxconst.sclosevaliderror +msgid "Error. Expected vailes..." +msgstr "" + +#: rxconst.sclosewindows +msgid "Close window" +msgstr "" + +#: rxconst.sdatedlgtitle +msgid "Select a Date" +msgstr "Seleccionar Fecha" + +#: rxconst.sdefaultfilter +msgid "All files (*.*)|*.*" +msgstr "Todos los Ficheros (*.*)|*.*" + +#: rxconst.sdetails +msgid "Details" +msgstr "Detalles" + +#: rxconst.sduallistcaption +msgid "Dual list dialog" +msgstr "Lista dialogo doble" + +#: rxconst.sduallistdestcaption +msgid "Destination" +msgstr "Destino" + +#: rxconst.sduallistsrccaption +msgid "Source" +msgstr "Fuente" + +#: rxconst.sexptcontrolnotfound +msgid "Control not found in validate %s." +msgstr "" + +#: rxconst.sfilenotexec +msgid "File specified is not an executable file, dynamic-link library, or icon file" +msgstr "Fichero especificado no es un fichero ejecutable, vinculo dinamico, o fichero de icono" + +#: rxconst.sflatbuttons +msgid "Flat buttons" +msgstr "Botones planos" + +#: rxconst.sfpcversion +msgid "FPC version : " +msgstr "" + +#: rxconst.sfpguiwidgetset +msgid "FpGUI widget set" +msgstr "" + +#: rxconst.sgeneral +msgid "General" +msgstr "" + +#: rxconst.sgtk2widgetset +msgid "GTK 2 widget set" +msgstr "" + +#: rxconst.sgtkwidgetset +msgid "GTK widget set" +msgstr "" + +#: rxconst.shistorydesc +msgid "History - \"%s\"" +msgstr "" + +#: rxconst.slclversion +msgid "LCL Version: " +msgstr "" + +#: rxconst.slicense +msgid "License" +msgstr "" + +#: rxconst.sloadliberror +msgid "Could not load '%s' library" +msgstr "No se puede cargar la libreria '%s'" + +#: rxconst.snextmonth +msgid "Next Month|" +msgstr "Proximo Mes|" + +#: rxconst.snextyear +msgid "Next Year|" +msgstr "Proximo A?o|" + +#: rxconst.snotimplemented +msgid "Function not yet implemented" +msgstr "Funcion no esta aun implementada" + +#: rxconst.soptions +msgid "Options" +msgstr "Opciones" + +#: rxconst.sotherguiwidgetset +msgid "Other gui" +msgstr "" + +#: rxconst.soutofrange +msgid "Out of range %d %d %d %d" +msgstr "" + +#: rxconst.sprevmonth +msgid "Previous Month|" +msgstr "Anterior Mes|" + +#: rxconst.sprevyear +msgid "Previous Year|" +msgstr "Anterior A?o|" + +#: rxconst.sqtwidgetset +msgid "QT widget set" +msgstr "" + +#: rxconst.sreqvalue +msgid "Error. Expected value for filed %s." +msgstr "" + +#: rxconst.sshowcaption +msgid "Show caption" +msgstr "Mostrar titulo" + +#: rxconst.sshowhint +msgid "Show hint" +msgstr "Mostrar consejo" + +#: rxconst.stargetcpu +msgid "Target CPU : " +msgstr "" + +#: rxconst.stargetos +msgid "Target OS : " +msgstr "" + +#: rxconst.stocurdate +msgid "Set current date" +msgstr "Poner fecha actual" + +#: rxconst.stoolbarstyle +msgid "Tool bar style" +msgstr "Estilo Barra de Tarea" + +#: rxconst.stoolbarstyle1 +msgid "Standart" +msgstr "Estandart" + +#: rxconst.stoolbarstyle2 +msgid "Windows XP" +msgstr "Windows XP" + +#: rxconst.stoolbarstyle3 +msgid "Native" +msgstr "Nativo" + +#: rxconst.stoolpanelsetup +msgid "Tool panel setup" +msgstr "Menu panel herramienta" + +#: rxconst.stransparent +msgid "Transparent" +msgstr "Transparente" + +#: rxconst.svisiblebuttons +msgid "Visible buttons" +msgstr "Botones visibles" + +#: rxconst.swin32_64widgetset +msgid "Win32/Win64 widget set" +msgstr "" + +#: rxconst.swincewidgetset +msgid "WinCE widget set" +msgstr "" + +#: rxconst.swindowsicofiles +msgid "Windows Ico files (*.ico)|*.ico|All files (*.*)|*.*" +msgstr "Windows Iconos Ficheros (*.ico)|*.ico)|Todos los ficheros (*.*)|*.*" + diff --git a/components/rx/version/2.1/languages/rxconst.po b/components/rx/version/2.1/languages/rxconst.po new file mode 100644 index 000000000..1b08f30c0 --- /dev/null +++ b/components/rx/version/2.1/languages/rxconst.po @@ -0,0 +1,231 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: rxconst.sabout +msgid "About" +msgstr "" + +#: rxconst.sappversion +msgid "Version : " +msgstr "" + +#: rxconst.savaliablebuttons +msgid "Avaliable buttons" +msgstr "" + +#: rxconst.sbrowse +msgid "Browse" +msgstr "" + +#: rxconst.sbuilddate +msgid "Build date : " +msgstr "" + +#: rxconst.sbuttonalign +msgid "Button align" +msgstr "" + +#: rxconst.sbuttonalign1 +msgid "None" +msgstr "" + +#: rxconst.sbuttonalign2 +msgid "Left" +msgstr "" + +#: rxconst.sbuttonalign3 +msgid "Rignt" +msgstr "" + +#: rxconst.scarbonwidgetset +msgid "Carbon widget set" +msgstr "" + +#: rxconst.scloseallexceptthis +msgid "Close all except this" +msgstr "" + +#: rxconst.scloseallwindows +msgid "Close all windows" +msgstr "" + +#: rxconst.sclosevaliderror +msgid "Error. Expected vailes..." +msgstr "" + +#: rxconst.sclosewindows +msgid "Close window" +msgstr "" + +#: rxconst.sdatedlgtitle +msgid "Select a Date" +msgstr "" + +#: rxconst.sdefaultfilter +msgid "All files (*.*)|*.*" +msgstr "" + +#: rxconst.sdetails +msgid "Details" +msgstr "" + +#: rxconst.sduallistcaption +msgid "Dual list dialog" +msgstr "" + +#: rxconst.sduallistdestcaption +msgid "Destination" +msgstr "" + +#: rxconst.sduallistsrccaption +msgid "Source" +msgstr "" + +#: rxconst.sexptcontrolnotfound +msgid "Control not found in validate %s." +msgstr "" + +#: rxconst.sfilenotexec +msgid "File specified is not an executable file, dynamic-link library, or icon file" +msgstr "" + +#: rxconst.sflatbuttons +msgid "Flat buttons" +msgstr "" + +#: rxconst.sfpcversion +msgid "FPC version : " +msgstr "" + +#: rxconst.sfpguiwidgetset +msgid "FpGUI widget set" +msgstr "" + +#: rxconst.sgeneral +msgid "General" +msgstr "" + +#: rxconst.sgtk2widgetset +msgid "GTK 2 widget set" +msgstr "" + +#: rxconst.sgtkwidgetset +msgid "GTK widget set" +msgstr "" + +#: rxconst.shistorydesc +msgid "History - \"%s\"" +msgstr "" + +#: rxconst.slclversion +msgid "LCL Version: " +msgstr "" + +#: rxconst.slicense +msgid "License" +msgstr "" + +#: rxconst.sloadliberror +msgid "Could not load '%s' library" +msgstr "" + +#: rxconst.snextmonth +msgid "Next Month|" +msgstr "" + +#: rxconst.snextyear +msgid "Next Year|" +msgstr "" + +#: rxconst.snotimplemented +msgid "Function not yet implemented" +msgstr "" + +#: rxconst.soptions +msgid "Options" +msgstr "" + +#: rxconst.sotherguiwidgetset +msgid "Other gui" +msgstr "" + +#: rxconst.soutofrange +msgid "Out of range %d %d %d %d" +msgstr "" + +#: rxconst.sprevmonth +msgid "Previous Month|" +msgstr "" + +#: rxconst.sprevyear +msgid "Previous Year|" +msgstr "" + +#: rxconst.sqtwidgetset +msgid "QT widget set" +msgstr "" + +#: rxconst.sreqvalue +msgid "Error. Expected value for filed %s." +msgstr "" + +#: rxconst.sshowcaption +msgid "Show caption" +msgstr "" + +#: rxconst.sshowhint +msgid "Show hint" +msgstr "" + +#: rxconst.stargetcpu +msgid "Target CPU : " +msgstr "" + +#: rxconst.stargetos +msgid "Target OS : " +msgstr "" + +#: rxconst.stocurdate +msgid "Set current date" +msgstr "" + +#: rxconst.stoolbarstyle +msgid "Tool bar style" +msgstr "" + +#: rxconst.stoolbarstyle1 +msgid "Standart" +msgstr "" + +#: rxconst.stoolbarstyle2 +msgid "Windows XP" +msgstr "" + +#: rxconst.stoolbarstyle3 +msgid "Native" +msgstr "" + +#: rxconst.stoolpanelsetup +msgid "Tool panel setup" +msgstr "" + +#: rxconst.stransparent +msgid "Transparent" +msgstr "" + +#: rxconst.svisiblebuttons +msgid "Visible buttons" +msgstr "" + +#: rxconst.swin32_64widgetset +msgid "Win32/Win64 widget set" +msgstr "" + +#: rxconst.swincewidgetset +msgid "WinCE widget set" +msgstr "" + +#: rxconst.swindowsicofiles +msgid "Windows Ico files (*.ico)|*.ico|All files (*.*)|*.*" +msgstr "" + diff --git a/components/rx/version/2.1/languages/rxconst.ru.po b/components/rx/version/2.1/languages/rxconst.ru.po new file mode 100644 index 000000000..37caadd59 --- /dev/null +++ b/components/rx/version/2.1/languages/rxconst.ru.po @@ -0,0 +1,231 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: rxconst.sabout +msgid "About" +msgstr "О ÑиÑтеме" + +#: rxconst.sappversion +msgid "Version : " +msgstr "ВерÑÐ¸Ñ : " + +#: rxconst.savaliablebuttons +msgid "Avaliable buttons" +msgstr "ДоÑтупные кнопки" + +#: rxconst.sbrowse +msgid "Browse" +msgstr "Обзор" + +#: rxconst.sbuilddate +msgid "Build date : " +msgstr "Дата Ñборки : " + +#: rxconst.sbuttonalign +msgid "Button align" +msgstr "Выравнивание кнопок" + +#: rxconst.sbuttonalign1 +msgid "None" +msgstr "Ðет" + +#: rxconst.sbuttonalign2 +msgid "Left" +msgstr "Влево" + +#: rxconst.sbuttonalign3 +msgid "Rignt" +msgstr "Вправо" + +#: rxconst.scarbonwidgetset +msgid "Carbon widget set" +msgstr "ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Carbon" + +#: rxconst.scloseallexceptthis +msgid "Close all except this" +msgstr "Закрыть вÑе окна, за иÑключением Ñтого" + +#: rxconst.scloseallwindows +msgid "Close all windows" +msgstr "Закрыть вÑе окна" + +#: rxconst.sclosevaliderror +msgid "Error. Expected vailes..." +msgstr "Ошибка. ОжидаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ..." + +#: rxconst.sclosewindows +msgid "Close window" +msgstr "Закрыть окно" + +#: rxconst.sdatedlgtitle +msgid "Select a Date" +msgstr "Выберите дату" + +#: rxconst.sdefaultfilter +msgid "All files (*.*)|*.*" +msgstr "Ð’Ñе файлы (*.*)|*.*" + +#: rxconst.sdetails +msgid "Details" +msgstr "Подробно" + +#: rxconst.sduallistcaption +msgid "Dual list dialog" +msgstr "Управление ÑпиÑками" + +#: rxconst.sduallistdestcaption +msgid "Destination" +msgstr "Выбор" + +#: rxconst.sduallistsrccaption +msgid "Source" +msgstr "ИÑточник" + +#: rxconst.sexptcontrolnotfound +msgid "Control not found in validate %s." +msgstr "Элемент ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ найден в валидаторе %s" + +#: rxconst.sfilenotexec +msgid "File specified is not an executable file, dynamic-link library, or icon file" +msgstr "Указанный файл не иÑполнÑемый, не библиотека и не иконка" + +#: rxconst.sflatbuttons +msgid "Flat buttons" +msgstr "Плавающие кнопки" + +#: rxconst.sfpcversion +msgid "FPC version : " +msgstr "ВерÑÐ¸Ñ FPC : " + +#: rxconst.sfpguiwidgetset +msgid "FpGUI widget set" +msgstr "ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ FpGUI" + +#: rxconst.sgeneral +msgid "General" +msgstr "Общее" + +#: rxconst.sgtk2widgetset +msgid "GTK 2 widget set" +msgstr "ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ GTK 2" + +#: rxconst.sgtkwidgetset +msgid "GTK widget set" +msgstr "ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ GTK" + +#: rxconst.shistorydesc +msgid "History - \"%s\"" +msgstr "" + +#: rxconst.slclversion +msgid "LCL Version: " +msgstr "ВерÑÐ¸Ñ LCL : " + +#: rxconst.slicense +msgid "License" +msgstr "ЛицензиÑ" + +#: rxconst.sloadliberror +msgid "Could not load '%s' library" +msgstr "Ðевозможно загрузить библиотеку '%s'" + +#: rxconst.snextmonth +msgid "Next Month|" +msgstr "Следующий меÑÑц|" + +#: rxconst.snextyear +msgid "Next Year|" +msgstr "Следующий год|" + +#: rxconst.snotimplemented +msgid "Function not yet implemented" +msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ðµ реализована" + +#: rxconst.soptions +msgid "Options" +msgstr "Параметры" + +#: rxconst.sotherguiwidgetset +msgid "Other gui" +msgstr "ÐеизвеÑтный графичеÑкий интерфейÑ" + +#: rxconst.soutofrange +msgid "Out of range %d %d %d %d" +msgstr "" + +#: rxconst.sprevmonth +msgid "Previous Month|" +msgstr "Превыдущий меÑÑц|" + +#: rxconst.sprevyear +msgid "Previous Year|" +msgstr "Превыдущий год|" + +#: rxconst.sqtwidgetset +msgid "QT widget set" +msgstr "ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ QT" + +#: rxconst.sreqvalue +msgid "Error. Expected value for filed %s." +msgstr "Поле %s. ТребуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ" + +#: rxconst.sshowcaption +msgid "Show caption" +msgstr "Отображать заголовок" + +#: rxconst.sshowhint +msgid "Show hint" +msgstr "Отображать подÑказки" + +#: rxconst.stargetcpu +msgid "Target CPU : " +msgstr "Целевой процеÑÑор : " + +#: rxconst.stargetos +msgid "Target OS : " +msgstr "Ð¦ÐµÐ»ÐµÐ²Ð°Ñ ÐžÐ¡ : " + +#: rxconst.stocurdate +msgid "Set current date" +msgstr "УÑтановть текущую дату" + +#: rxconst.stoolbarstyle +msgid "Tool bar style" +msgstr "Стиль панели инÑтрументов" + +#: rxconst.stoolbarstyle1 +msgid "Standart" +msgstr "Стандартный" + +#: rxconst.stoolbarstyle2 +msgid "Windows XP" +msgstr "Windows XP" + +#: rxconst.stoolbarstyle3 +msgid "Native" +msgstr "Из текущей темы" + +#: rxconst.stoolpanelsetup +msgid "Tool panel setup" +msgstr "ÐаÑтройка панели инÑтрументов" + +#: rxconst.stransparent +msgid "Transparent" +msgstr "Прозрачно" + +#: rxconst.svisiblebuttons +msgid "Visible buttons" +msgstr "Отображаемые конпки" + +#: rxconst.swin32_64widgetset +msgid "Win32/Win64 widget set" +msgstr "ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Win32/Win64" + +#: rxconst.swincewidgetset +msgid "WinCE widget set" +msgstr "ГрафичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ WinCE" + +#: rxconst.swindowsicofiles +msgid "Windows Ico files (*.ico)|*.ico|All files (*.*)|*.*" +msgstr "Файлы иконок Windows (*.ico)|*.ico|Ð’Ñе файлы (*.*)|*.*" + diff --git a/components/rx/version/2.1/languages/rxconst.uk.po b/components/rx/version/2.1/languages/rxconst.uk.po new file mode 100644 index 000000000..e123d618c --- /dev/null +++ b/components/rx/version/2.1/languages/rxconst.uk.po @@ -0,0 +1,240 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" + +#: rxconst.sabout +msgid "About" +msgstr "Про ÑиÑтему" + +#: rxconst.sappversion +msgid "Version : " +msgstr "ВерÑÑ–Ñ : " + +#: rxconst.savaliablebuttons +msgid "Avaliable buttons" +msgstr "ДоÑтупні кнопки" + +#: rxconst.sbrowse +msgid "Browse" +msgstr "ПереглÑд" + +#: rxconst.sbuilddate +msgid "Build date : " +msgstr "Збірка : " + +#: rxconst.sbuttonalign +msgid "Button align" +msgstr "Ð’Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº" + +#: rxconst.sbuttonalign1 +msgid "None" +msgstr "ÐÑ–" + +#: rxconst.sbuttonalign2 +msgid "Left" +msgstr "Ліворуч" + +#: rxconst.sbuttonalign3 +msgid "Rignt" +msgstr "Праворуч" + +#: rxconst.scarbonwidgetset +msgid "Carbon widget set" +msgstr "Графічний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Carbon" + +#: rxconst.scloseallexceptthis +msgid "Close all except this" +msgstr "Закрити вÑÑ– вікна, за виключеннÑм цього" + +#: rxconst.scloseallwindows +msgid "Close all windows" +msgstr "Закрити вÑÑ– вікна" + +#: rxconst.sclosevaliderror +msgid "Error. Expected vailes..." +msgstr "Помилка. ОчікуєтьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ñ..." + +#: rxconst.sclosewindows +msgid "Close window" +msgstr "Закрити вікно" + +#: rxconst.sdatedlgtitle +msgid "Select a Date" +msgstr "Выберіть дату" + +#: rxconst.sdefaultfilter +msgid "All files (*.*)|*.*" +msgstr "Ð’ÑÑ– файли (*.*)|*.*" + +#: rxconst.sdetails +msgid "Details" +msgstr "Детальніше" + +#: rxconst.sduallistcaption +msgid "Dual list dialog" +msgstr "Діалог з двома ÑпиÑками" + +#: rxconst.sduallistdestcaption +msgid "Destination" +msgstr "ПризначеннÑ" + +#: rxconst.sduallistsrccaption +msgid "Source" +msgstr "Джерело" + +#: rxconst.sexptcontrolnotfound +msgid "Control not found in validate %s." +msgstr "Елемент ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð½Ðµ знайдений в валідаторі %s" + +#: rxconst.sfilenotexec +msgid "File specified is not an executable file, dynamic-link library, or icon file" +msgstr "Вказаний файл не виконуваний, не бібліотека Ñ– не іконка" + +#: rxconst.sflatbuttons +msgid "Flat buttons" +msgstr "Плаваючі кнопки" + +#: rxconst.sfpcversion +msgid "FPC version : " +msgstr "ВерÑÑ–Ñ FPC : " + +#: rxconst.sfpguiwidgetset +msgid "FpGUI widget set" +msgstr "Ðабір віджетів FpGUI" + +#: rxconst.sgeneral +msgid "General" +msgstr "Загальне" + +#: rxconst.sgtk2widgetset +msgid "GTK 2 widget set" +msgstr "Ðабір віджетів GTK 2" + +#: rxconst.sgtkwidgetset +msgid "GTK widget set" +msgstr "Ðабір віджетів GTK" + +#: rxconst.shistorydesc +msgid "History - \"%s\"" +msgstr "ІÑÑ‚Ð¾Ñ€Ñ–Ñ - \"%s\"" + +#: rxconst.slclversion +msgid "LCL Version: " +msgstr "ВерÑÑ–Ñ LCL : " + +#: rxconst.slicense +msgid "License" +msgstr "ЛіцензіÑ" + +#: rxconst.sloadliberror +msgid "Could not load '%s' library" +msgstr "Ðеможливо завантажити бібліотеку '%s'" + +#: rxconst.snextmonth +msgid "Next Month|" +msgstr "Слідуючий міÑÑць|" + +#: rxconst.snextyear +msgid "Next Year|" +msgstr "Слідуючий рік|" + +#: rxconst.snotimplemented +msgid "Function not yet implemented" +msgstr "Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð½Ðµ реалізована" + +#: rxconst.soptions +msgid "Options" +msgstr "Параметри" + +#: rxconst.sotherguiwidgetset +msgid "Other gui" +msgstr "Інші GUI" + +#: rxconst.soutofrange +msgid "Out of range %d %d %d %d" +msgstr "" + +#: rxconst.sprevmonth +msgid "Previous Month|" +msgstr "Попередній міÑÑць|" + +#: rxconst.sprevyear +msgid "Previous Year|" +msgstr "Попередній міÑÑць|" + +#: rxconst.sqtwidgetset +msgid "QT widget set" +msgstr "Ðабір віджетів QT" + +#: rxconst.sreqvalue +msgid "Error. Expected value for filed %s." +msgstr "Поле %s. ВимагаєтьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ" + +#: rxconst.sshowcaption +msgid "Show caption" +msgstr "Показати заголовок" + +#: rxconst.sshowhint +msgid "Show hint" +msgstr "Показувати підказку" + +#: rxconst.stargetcpu +msgid "Target CPU : " +msgstr "Цільовий CPU : " + +#: rxconst.stargetos +msgid "Target OS : " +msgstr "Цільова OS : " + +#: rxconst.stocurdate +msgid "Set current date" +msgstr "Ð’Ñтановити поточну дату" + +#: rxconst.stoolbarstyle +msgid "Tool bar style" +msgstr "Стиль панелі інÑтрументів " + +#: rxconst.stoolbarstyle1 +msgid "Standart" +msgstr "Стандартний" + +#: rxconst.stoolbarstyle2 +msgid "Windows XP" +msgstr "Windows XP" + +#: rxconst.stoolbarstyle3 +msgid "Native" +msgstr "З поточної теми" + +#: rxconst.stoolpanelsetup +msgid "Tool panel setup" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð½ÐµÐ»Ñ– інÑтрументів" + +#: rxconst.stransparent +msgid "Transparent" +msgstr "Прозоро" + +#: rxconst.svisiblebuttons +msgid "Visible buttons" +msgstr "Видимі кнопки" + +#: rxconst.swin32_64widgetset +msgid "Win32/Win64 widget set" +msgstr "Ðабір віджетів Win32/Win64" + +#: rxconst.swincewidgetset +msgid "WinCE widget set" +msgstr "Ðабір віджетів WinCE" + +#: rxconst.swindowsicofiles +msgid "Windows Ico files (*.ico)|*.ico|All files (*.*)|*.*" +msgstr "Файли іконок Windows (*.ico)|*.ico|Ð’ÑÑ– файли (*.*)|*.*" + diff --git a/components/rx/version/2.1/languages/rxdconst.es.po b/components/rx/version/2.1/languages/rxdconst.es.po new file mode 100644 index 000000000..79d876c54 --- /dev/null +++ b/components/rx/version/2.1/languages/rxdconst.es.po @@ -0,0 +1,433 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: rxdconst.sapptitlelabel +msgid "Application \"%s\"" +msgstr "Aplicación \"%s\"" + +#: rxdconst.sbrowsedata +msgid "browse" +msgstr "vista" + +#: rxdconst.scalcfieldsdata +msgid "calc" +msgstr "calc" + +#: rxdconst.scapturefilter +msgid "Control locked by filter" +msgstr "Control bloqueado por filtro" + +#: rxdconst.schangepassword +msgid "Change password" +msgstr "Cambiar clave" + +#: rxdconst.scirculardatalink +msgid "SCircularDataLink" +msgstr "SCircularEnlaceDato" + +#: rxdconst.sconfirmpasswordlabel +msgid "&Confirm:" +msgstr "&Confirmar:" + +#: rxdconst.sconfirmsave +msgid "Data changed. Save?" +msgstr "Dato cambiado. Salvar?" + +#: rxdconst.sdatabasename +msgid "Database loocked: %s" +msgstr "Base de Dato bloqueada: %s" + +#: rxdconst.sdatasourcefixed +msgid "SDataSourceFixed" +msgstr "SFuenteDatosFija" + +#: rxdconst.sdbcomboboxfieldnotassigned +msgid "%s:TDBComboBox - DataField not assigned" +msgstr "" + +#: rxdconst.sdbexceptcaption +msgid "Error in DB engine" +msgstr "Error in DB Motor" + +#: rxdconst.sdeletemultiplerecords +msgid "Delete all selected records?" +msgstr "Eliminar todos los registros seleccionados" + +#: rxdconst.sdeleterecordquestion +msgid "Delete record?" +msgstr "Eliminar registro" + +#: rxdconst.seditdata +msgid "editing" +msgstr "editando" + +#: rxdconst.serrormsglabel +msgid "Error message" +msgstr "Mensaje de error" + +#: rxdconst.sexprbadcompare +msgid "Compare opertion need fielad and const" +msgstr "Comparación operacion necesita fielad y const" + +#: rxdconst.sexprbadfield +msgid "Field '%s' not used in filter expression" +msgstr "Campo '%s' no usado en expresión de filtro" + +#: rxdconst.sexprbadnulltest +msgid "NULL-values enabled in '=' и '<>'" +msgstr "Valor nulo habilitado en '=' y '<>'" + +#: rxdconst.sexprexpected +msgid "Error %s" +msgstr "Error %s" + +#: rxdconst.sexprincorrect +msgid "Error in filter expression" +msgstr "Error en expresión de filtro" + +#: rxdconst.sexprinvalidchar +msgid "Error symbol in expression: '%s'" +msgstr "Error simbolo en expresión: '%s'" + +#: rxdconst.sexprnameerror +msgid "Error in filed name" +msgstr "Error en nombre del fichero" + +#: rxdconst.sexprnorparen +msgid "Error ')', error: %s" +msgstr "Error ')', error: %s" + +#: rxdconst.sexprnotboolean +msgid "Field '%s' is not boolean" +msgstr "Campo '%s' no es boolean" + +#: rxdconst.sexprstringerror +msgid "Error in string const" +msgstr "Error en cadena const" + +#: rxdconst.sexprtermination +msgid "Error in filter end" +msgstr "Error en terminación del filtro" + +#: rxdconst.sfieldreadonly +msgid "SFieldReadOnly %s" +msgstr "SCampoSoloLectura %s" + +#: rxdconst.sfieldrequired +msgid "Field '%s' must have a value" +msgstr "Campo '%s' debe tener un valor" + +#: rxdconst.sfieldtypemismatch +msgid "Type mismatch for field '%s', expecting: %s actual: %s" +msgstr "Tipo no corresponde para el campo '%s', se esperaba: %s actual: %s" + +#: rxdconst.shintlabel +msgid "Enter you user name and password" +msgstr "Entre su nombre de usuario y clave" + +#: rxdconst.sinactivedata +msgid "inactive" +msgstr "inactivo" + +#: rxdconst.sinsertdata +msgid "append" +msgstr "adicionar" + +#: rxdconst.sinvaliddate +msgid "Invalid Date" +msgstr "fecha invalida" + +#: rxdconst.sinvalidfields +msgid "No fields defined" +msgstr "No hay campos definido" + +#: rxdconst.sinvalidusername +msgid "User name or password not valid" +msgstr "Nombre de usuario o clave no es valido" + +#: rxdconst.slocaldatabase +msgid "Unable complete this operation on local dataset" +msgstr "No se puede completar esta operación en el conjunto de datos local" + +#: rxdconst.smemnorecords +msgid "No data found" +msgstr "No hay datos" + +#: rxdconst.smore1 +msgid "&More >>" +msgstr "&Mas >>" + +#: rxdconst.smore2 +msgid "&Less <<" +msgstr "&Menos <<" + +#: rxdconst.snewpasswordlabel +msgid "&New password:" +msgstr "&Nueva clave:" + +#: rxdconst.snextbutton +msgid "&Next" +msgstr "&Proximo" + +#: rxdconst.snotcapturefilter +msgid "Control need locked by filter" +msgstr "Control necesita bloquearlo por filtro" + +#: rxdconst.snotediting +msgid "Dataset not in edit or insert mode" +msgstr "Conjunto de Datos no esta en modo de edición o inserción" + +#: rxdconst.soldpasswordlabel +msgid "&Old password:" +msgstr "&Anterior clave:" + +#: rxdconst.spasswordchanged +msgid "Password changed" +msgstr "Clave cambiada" + +#: rxdconst.spasswordlabel +msgid "&Password:" +msgstr "&Clave:" + +#: rxdconst.spasswordnotchanged +msgid "Password not changed" +msgstr "Clave no cambio" + +#: rxdconst.spasswordsmismatch +msgid "New password and confirmation not equal" +msgstr "Nueva clave y confirmacion no son iguales" + +#: rxdconst.sprevbutton +msgid "&Prior" +msgstr "&Anterior" + +#: rxdconst.spropdefbylookup +msgid "PropDefByLookup" +msgstr "PropDefByLookup" + +#: rxdconst.sregistration +msgid "Register" +msgstr "Registro" + +#: rxdconst.sretrylogin +msgid "Retry to connect with database?" +msgstr "Reintentar conectar con la base de dato?" + +#: rxdconst.srxascendign +msgid "Ascendign" +msgstr "Ascendente" + +#: rxdconst.srxborrowstructure +msgid "Borrow structure..." +msgstr "Tomar estructura..." + +#: rxdconst.srxcopyonlymetadata +msgid "Copy only metadata" +msgstr "Copiar solo metadata" + +#: rxdconst.srxdbgridemptifilter +msgid "(Empty)" +msgstr "(Todos)" + +#: rxdconst.srxdbgridfilter +msgid "Filter data" +msgstr "Filtrar" + +#: rxdconst.srxdbgridfilterclear +msgctxt "rxdconst.srxdbgridfilterclear" +msgid "Clear filter" +msgstr "Quitar Filtro" + +#: rxdconst.srxdbgridfiltersimple +msgid "Filter in table" +msgstr "Filtrar en Tabla" + +#: rxdconst.srxdbgridfind +msgctxt "rxdconst.srxdbgridfind" +msgid "Find data" +msgstr "Buscar" + +#: rxdconst.srxdbgridfindcaption +msgctxt "rxdconst.srxdbgridfindcaption" +msgid "Find data" +msgstr "Buscar" + +#: rxdconst.srxdbgridfindcasesens +msgid "Case sensetive" +msgstr "Caso sensitivo" + +#: rxdconst.srxdbgridfinddirecion +msgid "Direction" +msgstr "Dirección" + +#: rxdconst.srxdbgridfindonfield +msgid "Find on field" +msgstr "Buscar en campo" + +#: rxdconst.srxdbgridfindpartial +msgid "Partial key" +msgstr "Llave Parcial" + +#: rxdconst.srxdbgridfindrangeall +msgid "All" +msgstr "Todo" + +#: rxdconst.srxdbgridfindrangeback +msgid "Backward" +msgstr "Hacia Atras" + +#: rxdconst.srxdbgridfindrangeforw +msgid "Forward" +msgstr "Hacia Delante" + +#: rxdconst.srxdbgridfindtext +msgid "Text to find" +msgstr "Texto a Buscar" + +#: rxdconst.srxdbgridselcolcaption +msgid "Grid columns" +msgstr "Columnas de la Tabla" + +#: rxdconst.srxdbgridselcolhint1 +msgid "Move selected column up" +msgstr "Mover columna seleccionada para arriba" + +#: rxdconst.srxdbgridselcolhint2 +msgid "Move selected column down" +msgstr "Mover columna seleccionada para abajo" + +#: rxdconst.srxdbgridselectallrows +msgid "Select all rows" +msgstr "" + +#: rxdconst.srxdbgridselectcolumns +msgid "Select visible collumns" +msgstr "Seleccionar Columnas Visibles" + +#: rxdconst.srxdbgridsortbycolumns +msgid "Sort data for collumns" +msgstr "Ordenar por Columnas" + +#: rxdconst.srxdescending +msgid "Descending" +msgstr "Descendente" + +#: rxdconst.srxfilterformapply +msgid "Apply" +msgstr "Aceptar" + +#: rxdconst.srxfilterformcancel +msgid "Cancel" +msgstr "Cancelar" + +#: rxdconst.srxfilterformcaption +msgid "Filter conditions" +msgstr "Condiciones de Filtro" + +#: rxdconst.srxfilterformclear +msgctxt "rxdconst.srxfilterformclear" +msgid "Clear filter" +msgstr "Limpiar Todo" + +#: rxdconst.srxfilterformcondition +msgid "Condition :" +msgstr "Condición:" + +#: rxdconst.srxfilterformend +msgid "end." +msgstr "FIN." + +#: rxdconst.srxfilterformonfield +msgid "On field :" +msgstr "Campo :" + +#: rxdconst.srxfilterformoperaion +msgid "Operation :" +msgstr "Operación :" + +#: rxdconst.srxfilterformoperand +msgid "Operand :" +msgstr "Operando :" + +#: rxdconst.srxfilterformselectexp +msgid "Enter filter expression for data in table:" +msgstr "Seleccionar todos los registros que cumplan las siguientes condiciónes :" + +#: rxdconst.srxfindmore +msgid "Find more" +msgstr "" + +#: rxdconst.srxselectdatasetstruct +msgid "Select dataset to copy to" +msgstr "Seleccionar conjunto de datos para copiar" + +#: rxdconst.srxsortbyformaddfield +msgid "&Add field" +msgstr "&Adicionar" + +#: rxdconst.srxsortbyformallfields +msgid "&Fields in dataset:" +msgstr "&Orden de Ordenamiento :" + +#: rxdconst.srxsortbyformcaption +msgid "Sort on field" +msgstr "Ordenar por Columnas" + +#: rxdconst.srxsortbyformcaseinsens +msgid "&Case insensitive sort" +msgstr "" + +#: rxdconst.srxsortbyformmovednfield +msgid "&Down" +msgstr "A&bajo" + +#: rxdconst.srxsortbyformmoveupfield +msgid "&Up" +msgstr "A&rriba" + +#: rxdconst.srxsortbyformremovefield +msgid "&Remove" +msgstr "&Eliminar" + +#: rxdconst.srxsortbyformsortfields +msgid "&Selected fields:" +msgstr "&Campos Disponibles :" + +#: rxdconst.srxsortbyformsortorder +#, fuzzy +#| msgid "Select field for sort data:" +msgid "Select f&ield for sort data:" +msgstr "Seleccionar Dirección de Ordenamiento :" + +#: rxdconst.srxsoursedataset +msgid "Sourse dataset" +msgstr "Fuente del Conjunto de Datos" + +#: rxdconst.sservererrorlabel +msgid "Server error" +msgstr "Error del Servidor" + +#: rxdconst.ssetkeydata +msgid "find" +msgstr "buscar" + +#: rxdconst.sunknownfieldtype +msgid "SUnknownFieldType %s" +msgstr "STipoCampoDesconocido %s" + +#: rxdconst.sunknownxmldatasetformat +msgid "Unknown XML Dataset format" +msgstr "" + +#: rxdconst.sunlockcaption +msgid "Unloock" +msgstr "Desbloquear" + +#: rxdconst.sunlockhint +msgid "Enter you password" +msgstr "Entre su clave" + +#: rxdconst.susernamelabel +msgid "&User name:" +msgstr "&Nombre usuario:" + diff --git a/components/rx/version/2.1/languages/rxdconst.po b/components/rx/version/2.1/languages/rxdconst.po new file mode 100644 index 000000000..92b6a84a6 --- /dev/null +++ b/components/rx/version/2.1/languages/rxdconst.po @@ -0,0 +1,431 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: rxdconst.sapptitlelabel +msgid "Application \"%s\"" +msgstr "" + +#: rxdconst.sbrowsedata +msgid "browse" +msgstr "" + +#: rxdconst.scalcfieldsdata +msgid "calc" +msgstr "" + +#: rxdconst.scapturefilter +msgid "Control locked by filter" +msgstr "" + +#: rxdconst.schangepassword +msgid "Change password" +msgstr "" + +#: rxdconst.scirculardatalink +msgid "SCircularDataLink" +msgstr "" + +#: rxdconst.sconfirmpasswordlabel +msgid "&Confirm:" +msgstr "" + +#: rxdconst.sconfirmsave +msgid "Data changed. Save?" +msgstr "" + +#: rxdconst.sdatabasename +msgid "Database loocked: %s" +msgstr "" + +#: rxdconst.sdatasourcefixed +msgid "SDataSourceFixed" +msgstr "" + +#: rxdconst.sdbcomboboxfieldnotassigned +msgid "%s:TDBComboBox - DataField not assigned" +msgstr "" + +#: rxdconst.sdbexceptcaption +msgid "Error in DB engine" +msgstr "" + +#: rxdconst.sdeletemultiplerecords +msgid "Delete all selected records?" +msgstr "" + +#: rxdconst.sdeleterecordquestion +msgid "Delete record?" +msgstr "" + +#: rxdconst.seditdata +msgid "editing" +msgstr "" + +#: rxdconst.serrormsglabel +msgid "Error message" +msgstr "" + +#: rxdconst.sexprbadcompare +msgid "Compare opertion need fielad and const" +msgstr "" + +#: rxdconst.sexprbadfield +msgid "Field '%s' not used in filter expression" +msgstr "" + +#: rxdconst.sexprbadnulltest +msgid "NULL-values enabled in '=' и '<>'" +msgstr "" + +#: rxdconst.sexprexpected +msgid "Error %s" +msgstr "" + +#: rxdconst.sexprincorrect +msgid "Error in filter expression" +msgstr "" + +#: rxdconst.sexprinvalidchar +msgid "Error symbol in expression: '%s'" +msgstr "" + +#: rxdconst.sexprnameerror +msgid "Error in filed name" +msgstr "" + +#: rxdconst.sexprnorparen +msgid "Error ')', error: %s" +msgstr "" + +#: rxdconst.sexprnotboolean +msgid "Field '%s' is not boolean" +msgstr "" + +#: rxdconst.sexprstringerror +msgid "Error in string const" +msgstr "" + +#: rxdconst.sexprtermination +msgid "Error in filter end" +msgstr "" + +#: rxdconst.sfieldreadonly +msgid "SFieldReadOnly %s" +msgstr "" + +#: rxdconst.sfieldrequired +msgid "Field '%s' must have a value" +msgstr "" + +#: rxdconst.sfieldtypemismatch +msgid "Type mismatch for field '%s', expecting: %s actual: %s" +msgstr "" + +#: rxdconst.shintlabel +msgid "Enter you user name and password" +msgstr "" + +#: rxdconst.sinactivedata +msgid "inactive" +msgstr "" + +#: rxdconst.sinsertdata +msgid "append" +msgstr "" + +#: rxdconst.sinvaliddate +msgid "Invalid Date" +msgstr "" + +#: rxdconst.sinvalidfields +msgid "No fields defined" +msgstr "" + +#: rxdconst.sinvalidusername +msgid "User name or password not valid" +msgstr "" + +#: rxdconst.slocaldatabase +msgid "Unable complete this operation on local dataset" +msgstr "" + +#: rxdconst.smemnorecords +msgid "No data found" +msgstr "" + +#: rxdconst.smore1 +msgid "&More >>" +msgstr "" + +#: rxdconst.smore2 +msgid "&Less <<" +msgstr "" + +#: rxdconst.snewpasswordlabel +msgid "&New password:" +msgstr "" + +#: rxdconst.snextbutton +msgid "&Next" +msgstr "" + +#: rxdconst.snotcapturefilter +msgid "Control need locked by filter" +msgstr "" + +#: rxdconst.snotediting +msgid "Dataset not in edit or insert mode" +msgstr "" + +#: rxdconst.soldpasswordlabel +msgid "&Old password:" +msgstr "" + +#: rxdconst.spasswordchanged +msgid "Password changed" +msgstr "" + +#: rxdconst.spasswordlabel +msgid "&Password:" +msgstr "" + +#: rxdconst.spasswordnotchanged +msgid "Password not changed" +msgstr "" + +#: rxdconst.spasswordsmismatch +msgid "New password and confirmation not equal" +msgstr "" + +#: rxdconst.sprevbutton +msgid "&Prior" +msgstr "" + +#: rxdconst.spropdefbylookup +msgid "PropDefByLookup" +msgstr "" + +#: rxdconst.sregistration +msgid "Register" +msgstr "" + +#: rxdconst.sretrylogin +msgid "Retry to connect with database?" +msgstr "" + +#: rxdconst.srxascendign +msgid "Ascendign" +msgstr "" + +#: rxdconst.srxborrowstructure +msgid "Borrow structure..." +msgstr "" + +#: rxdconst.srxcopyonlymetadata +msgid "Copy only metadata" +msgstr "" + +#: rxdconst.srxdbgridemptifilter +msgid "(Empty)" +msgstr "" + +#: rxdconst.srxdbgridfilter +msgid "Filter data" +msgstr "" + +#: rxdconst.srxdbgridfilterclear +msgctxt "rxdconst.srxdbgridfilterclear" +msgid "Clear filter" +msgstr "" + +#: rxdconst.srxdbgridfiltersimple +msgid "Filter in table" +msgstr "" + +#: rxdconst.srxdbgridfind +msgctxt "rxdconst.srxdbgridfind" +msgid "Find data" +msgstr "" + +#: rxdconst.srxdbgridfindcaption +msgctxt "rxdconst.srxdbgridfindcaption" +msgid "Find data" +msgstr "" + +#: rxdconst.srxdbgridfindcasesens +msgid "Case sensetive" +msgstr "" + +#: rxdconst.srxdbgridfinddirecion +msgid "Direction" +msgstr "" + +#: rxdconst.srxdbgridfindonfield +msgid "Find on field" +msgstr "" + +#: rxdconst.srxdbgridfindpartial +msgid "Partial key" +msgstr "" + +#: rxdconst.srxdbgridfindrangeall +msgid "All" +msgstr "" + +#: rxdconst.srxdbgridfindrangeback +msgid "Backward" +msgstr "" + +#: rxdconst.srxdbgridfindrangeforw +msgid "Forward" +msgstr "" + +#: rxdconst.srxdbgridfindtext +msgid "Text to find" +msgstr "" + +#: rxdconst.srxdbgridselcolcaption +msgid "Grid columns" +msgstr "" + +#: rxdconst.srxdbgridselcolhint1 +msgid "Move selected column up" +msgstr "" + +#: rxdconst.srxdbgridselcolhint2 +msgid "Move selected column down" +msgstr "" + +#: rxdconst.srxdbgridselectallrows +msgid "Select all rows" +msgstr "" + +#: rxdconst.srxdbgridselectcolumns +msgid "Select visible collumns" +msgstr "" + +#: rxdconst.srxdbgridsortbycolumns +msgid "Sort data for collumns" +msgstr "" + +#: rxdconst.srxdescending +msgid "Descending" +msgstr "" + +#: rxdconst.srxfilterformapply +msgid "Apply" +msgstr "" + +#: rxdconst.srxfilterformcancel +msgid "Cancel" +msgstr "" + +#: rxdconst.srxfilterformcaption +msgid "Filter conditions" +msgstr "" + +#: rxdconst.srxfilterformclear +msgctxt "rxdconst.srxfilterformclear" +msgid "Clear filter" +msgstr "" + +#: rxdconst.srxfilterformcondition +msgid "Condition :" +msgstr "" + +#: rxdconst.srxfilterformend +msgid "end." +msgstr "" + +#: rxdconst.srxfilterformonfield +msgid "On field :" +msgstr "" + +#: rxdconst.srxfilterformoperaion +msgid "Operation :" +msgstr "" + +#: rxdconst.srxfilterformoperand +msgid "Operand :" +msgstr "" + +#: rxdconst.srxfilterformselectexp +msgid "Enter filter expression for data in table:" +msgstr "" + +#: rxdconst.srxfindmore +msgid "Find more" +msgstr "" + +#: rxdconst.srxselectdatasetstruct +msgid "Select dataset to copy to" +msgstr "" + +#: rxdconst.srxsortbyformaddfield +msgid "&Add field" +msgstr "" + +#: rxdconst.srxsortbyformallfields +msgid "&Fields in dataset:" +msgstr "" + +#: rxdconst.srxsortbyformcaption +msgid "Sort on field" +msgstr "" + +#: rxdconst.srxsortbyformcaseinsens +msgid "&Case insensitive sort" +msgstr "" + +#: rxdconst.srxsortbyformmovednfield +msgid "&Down" +msgstr "" + +#: rxdconst.srxsortbyformmoveupfield +msgid "&Up" +msgstr "" + +#: rxdconst.srxsortbyformremovefield +msgid "&Remove" +msgstr "" + +#: rxdconst.srxsortbyformsortfields +msgid "&Selected fields:" +msgstr "" + +#: rxdconst.srxsortbyformsortorder +msgid "Select f&ield for sort data:" +msgstr "" + +#: rxdconst.srxsoursedataset +msgid "Sourse dataset" +msgstr "" + +#: rxdconst.sservererrorlabel +msgid "Server error" +msgstr "" + +#: rxdconst.ssetkeydata +msgid "find" +msgstr "" + +#: rxdconst.sunknownfieldtype +msgid "SUnknownFieldType %s" +msgstr "" + +#: rxdconst.sunknownxmldatasetformat +msgid "Unknown XML Dataset format" +msgstr "" + +#: rxdconst.sunlockcaption +msgid "Unloock" +msgstr "" + +#: rxdconst.sunlockhint +msgid "Enter you password" +msgstr "" + +#: rxdconst.susernamelabel +msgid "&User name:" +msgstr "" + diff --git a/components/rx/version/2.1/languages/rxdconst.ru.po b/components/rx/version/2.1/languages/rxdconst.ru.po new file mode 100644 index 000000000..e2c1a8d14 --- /dev/null +++ b/components/rx/version/2.1/languages/rxdconst.ru.po @@ -0,0 +1,431 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: rxdconst.sapptitlelabel +msgid "Application \"%s\"" +msgstr "Программа \"%s\"" + +#: rxdconst.sbrowsedata +msgid "browse" +msgstr "проÑмотр" + +#: rxdconst.scalcfieldsdata +msgid "calc" +msgstr "вычиÑление" + +#: rxdconst.scapturefilter +msgid "Control locked by filter" +msgstr "Элементы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ñ…Ð²Ð°Ñ‡ÐµÐ½Ñ‹ фильтром" + +#: rxdconst.schangepassword +msgid "Change password" +msgstr "Изменить пароль" + +#: rxdconst.scirculardatalink +msgid "SCircularDataLink" +msgstr "ПерекрёÑÑ‚Ð½Ð°Ñ ÑÑылка данных" + +#: rxdconst.sconfirmpasswordlabel +msgid "&Confirm:" +msgstr "&Подтверждение:" + +#: rxdconst.sconfirmsave +msgid "Data changed. Save?" +msgstr "Данные были изменены. Сохранить?" + +#: rxdconst.sdatabasename +msgid "Database loocked: %s" +msgstr "База данных блокирована: %s" + +#: rxdconst.sdatasourcefixed +msgid "SDataSourceFixed" +msgstr "" + +#: rxdconst.sdbcomboboxfieldnotassigned +msgid "%s:TDBComboBox - DataField not assigned" +msgstr "%s:TDBComboBox - Ðе приÑвоено ÑвойÑтво DataField" + +#: rxdconst.sdbexceptcaption +msgid "Error in DB engine" +msgstr "Ошибка Ñдры БД" + +#: rxdconst.sdeletemultiplerecords +msgid "Delete all selected records?" +msgstr "Удалить вÑе выделенные запиÑи" + +#: rxdconst.sdeleterecordquestion +msgid "Delete record?" +msgstr "Удалить запиÑÑŒ" + +#: rxdconst.seditdata +msgid "editing" +msgstr "редактирование" + +#: rxdconst.serrormsglabel +msgid "Error message" +msgstr "Сообщение об ошибке" + +#: rxdconst.sexprbadcompare +msgid "Compare opertion need fielad and const" +msgstr "Операции ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÑŽÑ‚ Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð¿Ð¾Ð»Ñ Ð¸ конÑтанты" + +#: rxdconst.sexprbadfield +msgid "Field '%s' not used in filter expression" +msgstr "Поле '%s' не может быть иÑпользовано в выражении фильтрации" + +#: rxdconst.sexprbadnulltest +msgid "NULL-values enabled in '=' и '<>'" +msgstr "NULL-Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ñ‹ только в выражениÑÑ… '=' и '<>'" + +#: rxdconst.sexprexpected +msgid "Error %s" +msgstr "ОжидалоÑÑŒ выражение, а вÑтречено %s" + +#: rxdconst.sexprincorrect +msgid "Error in filter expression" +msgstr "Ошибка в выражении фильтра" + +#: rxdconst.sexprinvalidchar +msgid "Error symbol in expression: '%s'" +msgstr "Ошибочный Ñимвол в выражении: '%s'" + +#: rxdconst.sexprnameerror +msgid "Error in filed name" +msgstr "Ошибка в имени полÑ" + +#: rxdconst.sexprnorparen +msgid "Error ')', error: %s" +msgstr "ОжидалоÑÑŒ ')', а вÑтречено: %s" + +#: rxdconst.sexprnotboolean +msgid "Field '%s' is not boolean" +msgstr "Поле '%s' не логичеÑкого типа" + +#: rxdconst.sexprstringerror +msgid "Error in string const" +msgstr "Ошибка в Ñтроковой конÑтанте" + +#: rxdconst.sexprtermination +msgid "Error in filter end" +msgstr "Ошибка в окончании Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°" + +#: rxdconst.sfieldreadonly +msgid "SFieldReadOnly %s" +msgstr "Поле %s только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ" + +#: rxdconst.sfieldrequired +msgid "Field '%s' must have a value" +msgstr "Поле '%s' ожидает значение" + +#: rxdconst.sfieldtypemismatch +msgid "Type mismatch for field '%s', expecting: %s actual: %s" +msgstr "ÐеÑоответÑвие типов Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ '%s', необходимо: %s введено: %s" + +#: rxdconst.shintlabel +msgid "Enter you user name and password" +msgstr "Введите ваше Ð¸Ð¼Ñ Ð¸ пароль" + +#: rxdconst.sinactivedata +msgid "inactive" +msgstr "не активный" + +#: rxdconst.sinsertdata +msgid "append" +msgstr "вÑтавка" + +#: rxdconst.sinvaliddate +msgid "Invalid Date" +msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð´Ð°Ñ‚Ð°" + +#: rxdconst.sinvalidfields +msgid "No fields defined" +msgstr "Ðет объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹" + +#: rxdconst.sinvalidusername +msgid "User name or password not valid" +msgstr "Ошибка в имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароле" + +#: rxdconst.slocaldatabase +msgid "Unable complete this operation on local dataset" +msgstr "Ðевозможно произвеÑти Ñту операцию Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð¹ базой данных" + +#: rxdconst.smemnorecords +msgid "No data found" +msgstr "Данных не найдено" + +#: rxdconst.smore1 +msgid "&More >>" +msgstr "&Больше >>" + +#: rxdconst.smore2 +msgid "&Less <<" +msgstr "&Меньше <<" + +#: rxdconst.snewpasswordlabel +msgid "&New password:" +msgstr "&Ðовый пароль:" + +#: rxdconst.snextbutton +msgid "&Next" +msgstr "&Дальше" + +#: rxdconst.snotcapturefilter +msgid "Control need locked by filter" +msgstr "Элементы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть захвачены фильтром" + +#: rxdconst.snotediting +msgid "Dataset not in edit or insert mode" +msgstr "Ðабор данных не в режиме Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ вÑтавки" + +#: rxdconst.soldpasswordlabel +msgid "&Old password:" +msgstr "&Старый пароль" + +#: rxdconst.spasswordchanged +msgid "Password changed" +msgstr "Пароль изменён" + +#: rxdconst.spasswordlabel +msgid "&Password:" +msgstr "&Пароль:" + +#: rxdconst.spasswordnotchanged +msgid "Password not changed" +msgstr "Пароль не изменён" + +#: rxdconst.spasswordsmismatch +msgid "New password and confirmation not equal" +msgstr "Ðовый пароль и подтверждение не Ñовпадают" + +#: rxdconst.sprevbutton +msgid "&Prior" +msgstr "&Превыдущие" + +#: rxdconst.spropdefbylookup +msgid "PropDefByLookup" +msgstr "" + +#: rxdconst.sregistration +msgid "Register" +msgstr "РегиÑтрациÑ" + +#: rxdconst.sretrylogin +msgid "Retry to connect with database?" +msgstr "Ð’Ñ‹ хотите повторить попытку ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð±Ð°Ð·Ð¾Ð¹ данных?" + +#: rxdconst.srxascendign +msgid "Ascendign" +msgstr "По возраÑтанию" + +#: rxdconst.srxborrowstructure +msgid "Borrow structure..." +msgstr "Обзор Ñтруктуры..." + +#: rxdconst.srxcopyonlymetadata +msgid "Copy only metadata" +msgstr "Копировать только метаданные..." + +#: rxdconst.srxdbgridemptifilter +msgid "(Empty)" +msgstr "(Ðет)" + +#: rxdconst.srxdbgridfilter +msgid "Filter data" +msgstr "Фильтр данных" + +#: rxdconst.srxdbgridfilterclear +msgctxt "rxdconst.srxdbgridfilterclear" +msgid "Clear filter" +msgstr "ОчиÑтить фильтр" + +#: rxdconst.srxdbgridfiltersimple +msgid "Filter in table" +msgstr "Фильтр в таблице" + +#: rxdconst.srxdbgridfind +msgctxt "rxdconst.srxdbgridfind" +msgid "Find data" +msgstr "ПоиÑк данных" + +#: rxdconst.srxdbgridfindcaption +msgctxt "rxdconst.srxdbgridfindcaption" +msgid "Find data" +msgstr "ПоиÑк данных" + +#: rxdconst.srxdbgridfindcasesens +msgid "Case sensetive" +msgstr "РегиÑтро-завиÑимо" + +#: rxdconst.srxdbgridfinddirecion +msgid "Direction" +msgstr "Ðаправление" + +#: rxdconst.srxdbgridfindonfield +msgid "Find on field" +msgstr "ИÑкать по полю" + +#: rxdconst.srxdbgridfindpartial +msgid "Partial key" +msgstr "ПоиÑк по вхождению" + +#: rxdconst.srxdbgridfindrangeall +msgid "All" +msgstr "Ð’ÑÑ‘" + +#: rxdconst.srxdbgridfindrangeback +msgid "Backward" +msgstr "Ðазад" + +#: rxdconst.srxdbgridfindrangeforw +msgid "Forward" +msgstr "Вперёд" + +#: rxdconst.srxdbgridfindtext +msgid "Text to find" +msgstr "ТекÑÑ‚ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка" + +#: rxdconst.srxdbgridselcolcaption +msgid "Grid columns" +msgstr "ÐŸÐ¾Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹" + +#: rxdconst.srxdbgridselcolhint1 +msgid "Move selected column up" +msgstr "ПеремеÑтить выбранное поле выше" + +#: rxdconst.srxdbgridselcolhint2 +msgid "Move selected column down" +msgstr "ПеремеÑтить выбранное поле ниже" + +#: rxdconst.srxdbgridselectallrows +msgid "Select all rows" +msgstr "Выделить вÑе Ñтроки" + +#: rxdconst.srxdbgridselectcolumns +msgid "Select visible collumns" +msgstr "Выбор Ñтолбцов Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ" + +#: rxdconst.srxdbgridsortbycolumns +msgid "Sort data for collumns" +msgstr "Сортировать данные по колонкам" + +#: rxdconst.srxdescending +msgid "Descending" +msgstr "По убыванию" + +#: rxdconst.srxfilterformapply +msgid "Apply" +msgstr "Применить" + +#: rxdconst.srxfilterformcancel +msgid "Cancel" +msgstr "Отмена" + +#: rxdconst.srxfilterformcaption +msgid "Filter conditions" +msgstr "Выражение фильтра" + +#: rxdconst.srxfilterformclear +msgctxt "rxdconst.srxfilterformclear" +msgid "Clear filter" +msgstr "ОчиÑтить фильтр" + +#: rxdconst.srxfilterformcondition +msgid "Condition :" +msgstr "Выражение :" + +#: rxdconst.srxfilterformend +msgid "end." +msgstr "конец." + +#: rxdconst.srxfilterformonfield +msgid "On field :" +msgstr "Ðа поле :" + +#: rxdconst.srxfilterformoperaion +msgid "Operation :" +msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ :" + +#: rxdconst.srxfilterformoperand +msgid "Operand :" +msgstr "Операнд :" + +#: rxdconst.srxfilterformselectexp +msgid "Enter filter expression for data in table:" +msgstr "Введите выражение фильтрации данных в таблице:" + +#: rxdconst.srxfindmore +msgid "Find more" +msgstr "ИÑкать далее" + +#: rxdconst.srxselectdatasetstruct +msgid "Select dataset to copy to" +msgstr "Выберите таблицу Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ" + +#: rxdconst.srxsortbyformaddfield +msgid "&Add field" +msgstr "&Добавить поле" + +#: rxdconst.srxsortbyformallfields +msgid "&Fields in dataset:" +msgstr "&ÐŸÐ¾Ð»Ñ Ð² таблице" + +#: rxdconst.srxsortbyformcaption +msgid "Sort on field" +msgstr "Сортировать по полÑм" + +#: rxdconst.srxsortbyformcaseinsens +msgid "&Case insensitive sort" +msgstr "&Сортировка без учёта региÑтра" + +#: rxdconst.srxsortbyformmovednfield +msgid "&Down" +msgstr "&Вниз" + +#: rxdconst.srxsortbyformmoveupfield +msgid "&Up" +msgstr "&Вверх" + +#: rxdconst.srxsortbyformremovefield +msgid "&Remove" +msgstr "&Убрать" + +#: rxdconst.srxsortbyformsortfields +msgid "&Selected fields:" +msgstr "&Выбранные полÑ" + +#: rxdconst.srxsortbyformsortorder +msgid "Select f&ield for sort data:" +msgstr "Укажите Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ñортировки данных :" + +#: rxdconst.srxsoursedataset +msgid "Sourse dataset" +msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°" + +#: rxdconst.sservererrorlabel +msgid "Server error" +msgstr "Ошибка Ñервера" + +#: rxdconst.ssetkeydata +msgid "find" +msgstr "поиÑк" + +#: rxdconst.sunknownfieldtype +msgid "SUnknownFieldType %s" +msgstr "Ðе определён тип данных Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ %s" + +#: rxdconst.sunknownxmldatasetformat +msgid "Unknown XML Dataset format" +msgstr "Ðе извеÑтный формат XML данных" + +#: rxdconst.sunlockcaption +msgid "Unloock" +msgstr "Разблокировать" + +#: rxdconst.sunlockhint +msgid "Enter you password" +msgstr "Введите ваш пароль" + +#: rxdconst.susernamelabel +msgid "&User name:" +msgstr "&Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" + diff --git a/components/rx/version/2.1/languages/rxdconst.uk.po b/components/rx/version/2.1/languages/rxdconst.uk.po new file mode 100644 index 000000000..0a5926a19 --- /dev/null +++ b/components/rx/version/2.1/languages/rxdconst.uk.po @@ -0,0 +1,440 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" + +#: rxdconst.sapptitlelabel +msgid "Application \"%s\"" +msgstr "Програма \"%s\"" + +#: rxdconst.sbrowsedata +msgid "browse" +msgstr "переглÑд" + +#: rxdconst.scalcfieldsdata +msgid "calc" +msgstr "обчиÑленнÑ" + +#: rxdconst.scapturefilter +msgid "Control locked by filter" +msgstr "Елементи ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð·Ð°Ñ…Ð¾Ð¿Ð»ÐµÐ½Ñ– фільтром" + +#: rxdconst.schangepassword +msgid "Change password" +msgstr "Змінити пароль" + +#: rxdconst.scirculardatalink +msgid "SCircularDataLink" +msgstr "ПерехреÑне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…" + +#: rxdconst.sconfirmpasswordlabel +msgid "&Confirm:" +msgstr "&ПідтвердженнÑ:" + +#: rxdconst.sconfirmsave +msgid "Data changed. Save?" +msgstr "Дані були змінені. Зберегти?" + +#: rxdconst.sdatabasename +msgid "Database loocked: %s" +msgstr "База даних блокована: %s" + +#: rxdconst.sdatasourcefixed +msgid "SDataSourceFixed" +msgstr "" + +#: rxdconst.sdbcomboboxfieldnotassigned +msgid "%s:TDBComboBox - DataField not assigned" +msgstr "%s:TDBComboBox - Ðе приÑвоєно влаÑтивіÑть DataField" + +#: rxdconst.sdbexceptcaption +msgid "Error in DB engine" +msgstr "Помилка Ñдра БД" + +#: rxdconst.sdeletemultiplerecords +msgid "Delete all selected records?" +msgstr "Видалити вÑÑ– виділені запиÑи" + +#: rxdconst.sdeleterecordquestion +msgid "Delete record?" +msgstr "Видалити запиÑ" + +#: rxdconst.seditdata +msgid "editing" +msgstr "РедагуваннÑ" + +#: rxdconst.serrormsglabel +msgid "Error message" +msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку" + +#: rxdconst.sexprbadcompare +msgid "Compare opertion need fielad and const" +msgstr "Операції порівнÑÐ½Ð½Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°ÑŽÑ‚ÑŒ наÑвноÑті Ð¿Ð¾Ð»Ñ Ñ– конÑтанти" + +#: rxdconst.sexprbadfield +msgid "Field '%s' not used in filter expression" +msgstr "Поле '%s' не може бути викориÑтане в виразі фільтрації" + +#: rxdconst.sexprbadnulltest +msgid "NULL-values enabled in '=' и '<>'" +msgstr "NULL-Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ñ– тільки у виразах '=' Ñ– '<>'" + +#: rxdconst.sexprexpected +msgid "Error %s" +msgstr "Очікували вираз, а зуÑтріли %s" + +#: rxdconst.sexprincorrect +msgid "Error in filter expression" +msgstr "Помилка у виразі фільтра" + +#: rxdconst.sexprinvalidchar +msgid "Error symbol in expression: '%s'" +msgstr "Помилковий Ñимвол у виразі: '%s'" + +#: rxdconst.sexprnameerror +msgid "Error in filed name" +msgstr "Помилка в імені полÑ" + +#: rxdconst.sexprnorparen +msgid "Error ')', error: %s" +msgstr "Очікували ')', а зуÑтріли: %s" + +#: rxdconst.sexprnotboolean +msgid "Field '%s' is not boolean" +msgstr "Поле '%s' не логічного типу" + +#: rxdconst.sexprstringerror +msgid "Error in string const" +msgstr "Помилка в Ñтроковій конÑтанті" + +#: rxdconst.sexprtermination +msgid "Error in filter end" +msgstr "Помилка в закінченні виразу фільтра" + +#: rxdconst.sfieldreadonly +msgid "SFieldReadOnly %s" +msgstr "Поле %s лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ" + +#: rxdconst.sfieldrequired +msgid "Field '%s' must have a value" +msgstr "Поле '%s' очікує значеннÑ" + +#: rxdconst.sfieldtypemismatch +msgid "Type mismatch for field '%s', expecting: %s actual: %s" +msgstr "ÐеÑоответÑвие типов Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ '%s', необходимо: %s введено: %s" + +#: rxdconst.shintlabel +msgid "Enter you user name and password" +msgstr "Введіть ваші ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача та пароль" + +#: rxdconst.sinactivedata +msgid "inactive" +msgstr "бездіÑльний" + +#: rxdconst.sinsertdata +msgid "append" +msgstr "вÑтавка" + +#: rxdconst.sinvaliddate +msgid "Invalid Date" +msgstr "Помилкова дата" + +#: rxdconst.sinvalidfields +msgid "No fields defined" +msgstr "Ðемає Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ–Ð²" + +#: rxdconst.sinvalidusername +msgid "User name or password not valid" +msgstr "Помилка в імені кориÑтувача або паролі" + +#: rxdconst.slocaldatabase +msgid "Unable complete this operation on local dataset" +msgstr "Ðеможливо провеÑти цю операцію з локальною базою даних" + +#: rxdconst.smemnorecords +msgid "No data found" +msgstr "Даних не знайдено" + +#: rxdconst.smore1 +msgid "&More >>" +msgstr "&Більше >>" + +#: rxdconst.smore2 +msgid "&Less <<" +msgstr "&Менше <<" + +#: rxdconst.snewpasswordlabel +msgid "&New password:" +msgstr "&Ðовий пароль:" + +#: rxdconst.snextbutton +msgid "&Next" +msgstr "&Далі" + +#: rxdconst.snotcapturefilter +msgid "Control need locked by filter" +msgstr "Елементи ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ– бути захоплені фільтром" + +#: rxdconst.snotediting +msgid "Dataset not in edit or insert mode" +msgstr "Ðабір даних не в режимі Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ вÑтавки" + +#: rxdconst.soldpasswordlabel +msgid "&Old password:" +msgstr "&Старий пароль" + +#: rxdconst.spasswordchanged +msgid "Password changed" +msgstr "Пароль змінено" + +#: rxdconst.spasswordlabel +msgid "&Password:" +msgstr "&Пароль:" + +#: rxdconst.spasswordnotchanged +msgid "Password not changed" +msgstr "Пароль не змінено" + +#: rxdconst.spasswordsmismatch +msgid "New password and confirmation not equal" +msgstr "Ðовий пароль Ñ– Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ Ñпівпадають" + +#: rxdconst.sprevbutton +msgid "&Prior" +msgstr "&Попередній" + +#: rxdconst.spropdefbylookup +msgid "PropDefByLookup" +msgstr "" + +#: rxdconst.sregistration +msgid "Register" +msgstr "РеєÑтраціÑ" + +#: rxdconst.sretrylogin +msgid "Retry to connect with database?" +msgstr "Ви хочете повторити Ñпробу з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· базою даних?" + +#: rxdconst.srxascendign +msgid "Ascendign" +msgstr "По зроÑтанню" + +#: rxdconst.srxborrowstructure +msgid "Borrow structure..." +msgstr "ОглÑд Ñтруктури ..." + +#: rxdconst.srxcopyonlymetadata +msgid "Copy only metadata" +msgstr "Копіювати тільки метадані ..." + +#: rxdconst.srxdbgridemptifilter +msgid "(Empty)" +msgstr "(Ðемає)" + +#: rxdconst.srxdbgridfilter +msgid "Filter data" +msgstr "Фільтр даних" + +#: rxdconst.srxdbgridfilterclear +msgctxt "rxdconst.srxdbgridfilterclear" +msgid "Clear filter" +msgstr "ОчиÑтити фільтр" + +#: rxdconst.srxdbgridfiltersimple +msgid "Filter in table" +msgstr "Фільтр в таблиці" + +#: rxdconst.srxdbgridfind +msgctxt "rxdconst.srxdbgridfind" +msgid "Find data" +msgstr "Пошук даних" + +#: rxdconst.srxdbgridfindcaption +msgctxt "rxdconst.srxdbgridfindcaption" +msgid "Find data" +msgstr "Пошук даних" + +#: rxdconst.srxdbgridfindcasesens +msgid "Case sensetive" +msgstr "РегіÑтрозалежно" + +#: rxdconst.srxdbgridfinddirecion +msgid "Direction" +msgstr "ÐапрÑмок" + +#: rxdconst.srxdbgridfindonfield +msgid "Find on field" +msgstr "Шукати по полю" + +#: rxdconst.srxdbgridfindpartial +msgid "Partial key" +msgstr "Пошук по входженню" + +#: rxdconst.srxdbgridfindrangeall +msgid "All" +msgstr "Ð’ÑÑ–" + +#: rxdconst.srxdbgridfindrangeback +msgid "Backward" +msgstr "Ðазад" + +#: rxdconst.srxdbgridfindrangeforw +msgid "Forward" +msgstr "Вперед" + +#: rxdconst.srxdbgridfindtext +msgid "Text to find" +msgstr "ТекÑÑ‚ Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ" + +#: rxdconst.srxdbgridselcolcaption +msgid "Grid columns" +msgstr "ÐŸÐ¾Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ–" + +#: rxdconst.srxdbgridselcolhint1 +msgid "Move selected column up" +msgstr "ПереміÑтити вибране поле вище" + +#: rxdconst.srxdbgridselcolhint2 +msgid "Move selected column down" +msgstr "ПереміÑтити вибране поле нижче" + +#: rxdconst.srxdbgridselectallrows +msgid "Select all rows" +msgstr "Виділити вÑÑ– Ñ€Ñдки" + +#: rxdconst.srxdbgridselectcolumns +msgid "Select visible collumns" +msgstr "Вибір Ñтовпців Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ" + +#: rxdconst.srxdbgridsortbycolumns +msgid "Sort data for collumns" +msgstr "Сортувати дані по колонках" + +#: rxdconst.srxdescending +msgid "Descending" +msgstr "За зменшеннÑм" + +#: rxdconst.srxfilterformapply +msgid "Apply" +msgstr "ЗаÑтоÑувати" + +#: rxdconst.srxfilterformcancel +msgid "Cancel" +msgstr "СкаÑувати" + +#: rxdconst.srxfilterformcaption +msgid "Filter conditions" +msgstr "Вираз фільтра" + +#: rxdconst.srxfilterformclear +msgctxt "rxdconst.srxfilterformclear" +msgid "Clear filter" +msgstr "ОчиÑтити фільтр" + +#: rxdconst.srxfilterformcondition +msgid "Condition :" +msgstr "Вираз :" + +#: rxdconst.srxfilterformend +msgid "end." +msgstr "кінець." + +#: rxdconst.srxfilterformonfield +msgid "On field :" +msgstr "Ðа поле :" + +#: rxdconst.srxfilterformoperaion +msgid "Operation :" +msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ñ–Ñ :" + +#: rxdconst.srxfilterformoperand +msgid "Operand :" +msgstr "Операнд :" + +#: rxdconst.srxfilterformselectexp +msgid "Enter filter expression for data in table:" +msgstr "Введіть вираз фільтрації даних в таблиці:" + +#: rxdconst.srxfindmore +msgid "Find more" +msgstr "Шукати далі" + +#: rxdconst.srxselectdatasetstruct +msgid "Select dataset to copy to" +msgstr "Виберіть таблицю Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ" + +#: rxdconst.srxsortbyformaddfield +msgid "&Add field" +msgstr "&Додати поле" + +#: rxdconst.srxsortbyformallfields +msgid "&Fields in dataset:" +msgstr "&ÐŸÐ¾Ð»Ñ Ð² таблиці" + +#: rxdconst.srxsortbyformcaption +msgid "Sort on field" +msgstr "Сортувати по полÑÑ…" + +#: rxdconst.srxsortbyformcaseinsens +msgid "&Case insensitive sort" +msgstr "&Ð¡Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ· ÑƒÑ€Ð°Ñ…ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра" + +#: rxdconst.srxsortbyformmovednfield +msgid "&Down" +msgstr "&Вниз" + +#: rxdconst.srxsortbyformmoveupfield +msgid "&Up" +msgstr "&Вгору" + +#: rxdconst.srxsortbyformremovefield +msgid "&Remove" +msgstr "&Видалити" + +#: rxdconst.srxsortbyformsortfields +msgid "&Selected fields:" +msgstr "&Вибрані полÑ" + +#: rxdconst.srxsortbyformsortorder +msgid "Select f&ield for sort data:" +msgstr "Вкажіть Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ ÑÐ¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… :" + +#: rxdconst.srxsoursedataset +msgid "Sourse dataset" +msgstr "Початкова таблицÑ" + +#: rxdconst.sservererrorlabel +msgid "Server error" +msgstr "Помилка Ñервера" + +#: rxdconst.ssetkeydata +msgid "find" +msgstr "Пошук" + +#: rxdconst.sunknownfieldtype +msgid "SUnknownFieldType %s" +msgstr "Ðе визначений тип даних Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ %s" + +#: rxdconst.sunknownxmldatasetformat +msgid "Unknown XML Dataset format" +msgstr "Ðе відомий формат XML даних" + +#: rxdconst.sunlockcaption +msgid "Unloock" +msgstr "Розблокувати" + +#: rxdconst.sunlockhint +msgid "Enter you password" +msgstr "Введіть ваш пароль" + +#: rxdconst.susernamelabel +msgid "&User name:" +msgstr "&Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача" + diff --git a/components/rx/version/2.1/languages/rxmemds.po b/components/rx/version/2.1/languages/rxmemds.po new file mode 100644 index 000000000..16582d7f9 --- /dev/null +++ b/components/rx/version/2.1/languages/rxmemds.po @@ -0,0 +1,11 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: rxmemds.sinvalidfields +msgid "No fields defined" +msgstr "" + +#: rxmemds.smemnorecords +msgid "No data found" +msgstr "" + diff --git a/components/rx/version/2.1/lib/WindowsXP.or b/components/rx/version/2.1/lib/WindowsXP.or new file mode 100644 index 0000000000000000000000000000000000000000..76b93ce426283bfa799f37fdd9dc1d8348a8079c GIT binary patch literal 860 zcmah|&1xGl5S9}|A&`4}6FLUGjvL!JVVxfWrXlIcNt&yym2J_LWHfS|y|oY1_vpLy zMKZJAb+@FD0sZWJ-;8EHX75@pMmE`JY<p|Bk^n)K-fBZE#cPTu8SyR|`;7<t`DZ$z zle`~s$Mu80nttLR|HuES&Da;jo^buz!>zLP;>G6tSqCuQjYTgx7F;{!GvgLx@o+!s zj0A@$T_$ty^jH)c#KrmHK`H^Xo#n;h0q2;*!C0(=I|H@URzk-b6+HNP>?m)~B-rG+ zCx~mMGjk2`vH4~*;Z3GpG_g#~xsw)Oy*AQMG1*22ozO=zUFtkfuDy#=MJO|Kz6xGx z03WV`TAHX;TnCJP84WAKuF*k)tzxrO5$Ca3A#G#a$!F1}S~3kPm{mkk&c7L#`3>;$ z#kAXmO6E#CtXLHoN4YR|>xoyDLKRSgwQB!1Nf24Hj%~KBzn0-^EoxE~g#uXXU59iC zKCgACqjv2Mso7n-HT<qzJK}nl8+EITd;eYIm<$J}gW0g(>-UwK_p*5<V@=PcTdd^* oB|T~&BrGvV!nX?j^_EJe-C8M(!da!+CHugde+*6gKEu&wulm{7pa1{> literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/lib/readmy.txt b/components/rx/version/2.1/lib/readmy.txt new file mode 100644 index 000000000..e6d2c9271 --- /dev/null +++ b/components/rx/version/2.1/lib/readmy.txt @@ -0,0 +1 @@ +don't remove file WindowsXP.or \ No newline at end of file diff --git a/components/rx/version/2.1/pagemngr.pas b/components/rx/version/2.1/pagemngr.pas new file mode 100644 index 000000000..f2c8f8938 --- /dev/null +++ b/components/rx/version/2.1/pagemngr.pas @@ -0,0 +1,320 @@ +{ pagemngr unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit pagemngr; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls; + +const + pageNull = -1; + DefStatusMessage = 'Step %d from %d'; + +type + TPageOwner = TPageControl; + TCheckPageEnabled = function (APageIndex:integer): Boolean of object; + TPageManagerOption = (pmoSetFormCaption, pmoSetInfoControl); + TPageManagerOptions = set of TPageManagerOption; + { TPageManager } + + TPageManager = class(TComponent) + private + FNextBtn: TControl; + FOnCheckPageEnabled: TCheckPageEnabled; + FOnPageChanged: TNotifyEvent; + FOptions: TPageManagerOptions; + FPageOwner: TPageOwner; + FPriorBtn: TControl; + FSaveBtnNextClick: TNotifyEvent; + FSaveBtnPriorClick: TNotifyEvent; + FStatusControl: TControl; + FStatusMessage: string; + function GetPageCount: Integer; + function GetPageIndex: Integer; + procedure SetNextBtn(const AValue: TControl); + procedure SetOnCheckPageEnabled(const AValue: TCheckPageEnabled); + procedure SetOptions(const AValue: TPageManagerOptions); + procedure SetPageIndex(const AValue: Integer); + procedure SetPageOwner(const AValue: TPageOwner); + procedure SetPriorBtn(const AValue: TControl); + procedure BtnClickNext(Sender: TObject); + procedure BtnClickPrior(Sender: TObject); + procedure SetStatusControl(const AValue: TControl); + procedure SetStatusMessage(const AValue: string); + procedure SyncBtnNextClick(Sync: Boolean); + procedure SyncBtnPriorClick(Sync: Boolean); + protected + function GetPriorPageIndex(Page: Integer): Integer; virtual; + function GetNextPageIndex(Page: Integer): Integer; virtual; + procedure Loaded; override; + public + constructor Create(AOwner: TComponent); virtual; + procedure CheckBtnEnabled; + procedure NextPage; + procedure PriorPage; + procedure PageChanged;virtual; + property PageCount: Integer read GetPageCount; + property PageIndex: Integer read GetPageIndex write SetPageIndex; + published + property PageOwner: TPageOwner read FPageOwner write SetPageOwner; + property NextBtn: TControl read FNextBtn write SetNextBtn; + property PriorBtn: TControl read FPriorBtn write SetPriorBtn; + property OnCheckPageEnabled:TCheckPageEnabled read FOnCheckPageEnabled write SetOnCheckPageEnabled; + property OnPageChanged: TNotifyEvent read FOnPageChanged write FOnPageChanged; + property Options:TPageManagerOptions read FOptions write SetOptions default []; + property StatusControl:TControl read FStatusControl write SetStatusControl; + property StatusMessage:string read FStatusMessage write SetStatusMessage; + end; + +implementation + +{ TPageManager } + +procedure TPageManager.SetNextBtn(const AValue: TControl); +begin + if FNextBtn=AValue then exit; + SyncBtnNextClick(false); + FNextBtn:=AValue; + SyncBtnNextClick(true); +end; + +function TPageManager.GetPageCount: Integer; +begin + if Assigned(FPageOwner) then + Result := FPageOwner.PageCount + else + Result := 0; +end; + +function TPageManager.GetPageIndex: Integer; +begin + if Assigned(PageOwner) then Result := PageOwner.ActivePageIndex + else Result := pageNull; +end; + +procedure TPageManager.SetOnCheckPageEnabled(const AValue: TCheckPageEnabled); +begin + if FOnCheckPageEnabled=AValue then exit; + FOnCheckPageEnabled:=AValue; +end; + +procedure TPageManager.SetOptions(const AValue: TPageManagerOptions); +begin + if FOptions=AValue then exit; + FOptions:=AValue; +end; + +procedure TPageManager.SetPageIndex(const AValue: Integer); +begin + if Assigned(FPageOwner) and (FPageOwner.ActivePageIndex <> AValue) then + begin + FPageOwner.ActivePageIndex:=AValue; + PageChanged; + end; +end; + +procedure TPageManager.SetPageOwner(const AValue: TPageOwner); +begin + if FPageOwner=AValue then exit; + FPageOwner:=AValue; +end; + +procedure TPageManager.SetPriorBtn(const AValue: TControl); +begin + if FPriorBtn=AValue then exit; + SyncBtnPriorClick(false); + FPriorBtn:=AValue; + SyncBtnPriorClick(true); +end; + +procedure TPageManager.BtnClickNext(Sender: TObject); +begin + if Assigned(FPageOwner) then + begin + FPageOwner.ActivePageIndex:=GetNextPageIndex(FPageOwner.ActivePageIndex); + PageChanged; + end; +end; + +procedure TPageManager.BtnClickPrior(Sender: TObject); +begin + if Assigned(FPageOwner) then + begin + FPageOwner.ActivePageIndex:=GetPriorPageIndex(FPageOwner.ActivePageIndex); + PageChanged; + end; +end; + +procedure TPageManager.SetStatusControl(const AValue: TControl); +begin + if FStatusControl=AValue then exit; + FStatusControl:=AValue; +end; + +procedure TPageManager.SetStatusMessage(const AValue: string); +begin + if FStatusMessage=AValue then exit; + FStatusMessage:=AValue; +end; + +procedure TPageManager.SyncBtnNextClick(Sync: Boolean); +begin + if Assigned(FNextBtn) and not (csDesigning in ComponentState) then + begin + if Sync then + begin + FSaveBtnNextClick := FNextBtn.OnClick; + FNextBtn.OnClick := @BtnClickNext; + end + else + begin + FNextBtn.OnClick := FSaveBtnNextClick; + FSaveBtnNextClick := nil; + end; + end; +end; + +procedure TPageManager.SyncBtnPriorClick(Sync: Boolean); +begin + if Assigned(FPriorBtn) and not (csDesigning in ComponentState) then + begin + if Sync then + begin + FSaveBtnPriorClick := FPriorBtn.OnClick; + FPriorBtn.OnClick := @BtnClickPrior; + end + else + begin + FPriorBtn.OnClick := FSaveBtnPriorClick; + FSaveBtnPriorClick := nil; + end; + end; +end; + +function TPageManager.GetPriorPageIndex(Page: Integer): Integer; +begin + Result:=Page; + while Page > 0 do + begin + Dec(Page); + if Assigned(FOnCheckPageEnabled) then + begin + if FOnCheckPageEnabled(Page) then + break + else + if Page = 0 then + exit; + end + else + break; + end; + Result:=Page; +end; + +function TPageManager.GetNextPageIndex(Page: Integer): Integer; +begin + Result:=Page; + if not Assigned(FPageOwner) then exit; + while Page < FPageOwner.PageCount-1 do + begin + Inc(Page); + if Assigned(FOnCheckPageEnabled) then + begin + if FOnCheckPageEnabled(Page) then + break + else + if Page = FPageOwner.PageCount then + exit; + end + else + break; + end; + Result:=Page; +end; + +procedure TPageManager.PageChanged; +var + S:string; +begin + if Assigned(OnPageChanged) then + OnPageChanged(Self); + if FStatusMessage <> '' then + begin + S:=Format(FStatusMessage, [PageIndex+1, PageCount]); + if (pmoSetFormCaption in Options) and Assigned(Owner) and (Owner is TCustomForm) then + TCustomForm(Owner).Caption:=S; + if (pmoSetInfoControl in Options) and Assigned(FStatusControl) then + FStatusControl.Caption:=S; + end; + CheckBtnEnabled; +end; + +procedure TPageManager.Loaded; +begin + inherited Loaded; + if not (csDesigning in ComponentState) then + begin + SyncBtnNextClick(true); + SyncBtnPriorClick(true); + PageChanged; + end; +end; + +constructor TPageManager.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FStatusMessage:=DefStatusMessage; +end; + +procedure TPageManager.CheckBtnEnabled; +var + P:integer; +begin + P:=PageIndex; + FNextBtn.Enabled:=GetNextPageIndex(P)>P; + FPriorBtn.Enabled:=GetPriorPageIndex(P)<P; +end; + +procedure TPageManager.NextPage; +begin + BtnClickNext(nil); +end; + +procedure TPageManager.PriorPage; +begin + BtnClickPrior(nil); +end; + +end. diff --git a/components/rx/version/2.1/pickdate.lrs b/components/rx/version/2.1/pickdate.lrs new file mode 100644 index 000000000..3ff15ef75 --- /dev/null +++ b/components/rx/version/2.1/pickdate.lrs @@ -0,0 +1,20 @@ +LazarusResources.Add('next1','XPM',[ + '/* XPM */'#10'static char *next1[]={'#10'"8 6 2 1",'#10'". c None",'#10'"# c' + +' #000000",'#10'"...#....",'#10'"...##...",'#10'"...###..",'#10'"...###..",' + +#10'"...##...",'#10'"...#...."};'#10 +]); +LazarusResources.Add('next2','XPM',[ + '/* XPM */'#10'static char *next2[]={'#10'"8 6 2 1",'#10'". c None",'#10'"# c' + +' #000000",'#10'".#...#..",'#10'".##..##.",'#10'".###.###",'#10'".###.###",' + +#10'".##..##.",'#10'".#...#.."};'#10 +]); +LazarusResources.Add('prev1','XPM',[ + '/* XPM */'#10'static char *prev1[]={'#10'"8 6 2 1",'#10'". c None",'#10'"# c' + +' #000000",'#10'"....#...",'#10'"...##...",'#10'"..###...",'#10'"..###...",' + +#10'"...##...",'#10'"....#..."};'#10 +]); +LazarusResources.Add('prev2','XPM',[ + '/* XPM */'#10'static char *prev2[]={'#10'"8 6 2 1",'#10'". c None",'#10'"# c' + +' #000000",'#10'"..#...#.",'#10'".##..##.",'#10'"###.###.",'#10'"###.###.",' + +#10'".##..##.",'#10'"..#...#."};'#10 +]); diff --git a/components/rx/version/2.1/pickdate.pas b/components/rx/version/2.1/pickdate.pas new file mode 100644 index 000000000..808351529 --- /dev/null +++ b/components/rx/version/2.1/pickdate.pas @@ -0,0 +1,1591 @@ +{ pickdate unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit pickdate; + +{$I rx.inc} + +interface + +uses + LCLType, Classes, Controls, SysUtils, Graphics, DateUtil, Grids, + LCLProc, LMessages, ExtCtrls, StdCtrls, Buttons, Forms, Menus; + +{ TRxCalendar } + +type + TDayOfWeek = 0..6; + + TDaysItem = packed record + DayNum:byte; + DayDate:TDateTime; + DayColor:TColor; + end; + + TDaysArray = array[0..6, 1..6] of TDaysItem; + + { TCustomRxCalendar } + + TCustomRxCalendar = class(TCustomDrawGrid) + private + FDate: TDateTime; + FMonthOffset: Integer; + FNotInThisMonthColor: TColor; + FOnChange: TNotifyEvent; + FReadOnly: Boolean; + FStartOfWeek: TDayOfWeekName; + FUpdating: Boolean; + FUseCurrentDate: Boolean; + FWeekends: TDaysOfWeek; + FWeekendColor: TColor; + FDaysArray:TDaysArray; + FShortDaysOfWeek: TStrings; + function GetDateElement(Index: Integer): Integer; + procedure FillDaysArray; + function GetShortDaysOfWeek: TStrings; + procedure SetCalendarDate(Value: TDateTime); + procedure SetDateElement(Index: Integer; Value: Integer); + procedure SetNotInThisMonthColor(const AValue: TColor); + procedure SetShortDaysOfWeek(const AValue: TStrings); + procedure SetStartOfWeek(Value: TDayOfWeekName); + procedure SetUseCurrentDate(Value: Boolean); + procedure SetWeekendColor(Value: TColor); + procedure SetWeekends(Value: TDaysOfWeek); + function IsWeekend(ACol, ARow: Integer): Boolean; + procedure CalendarUpdate(DayOnly: Boolean); + function StoreCalendarDate: Boolean; + procedure AddWeek; + procedure DecWeek; + protected + procedure CreateParams(var Params: TCreateParams); override; + procedure Change; dynamic; + procedure ChangeMonth(Delta: Integer); + procedure Click; override; + function DaysThisMonth: Integer; + procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure KeyPress(var Key: Char); override; + procedure LMSize(var Message: TLMSize); message LM_SIZE; + procedure RxCalendarMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); + procedure RxCalendarMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); + procedure UpdateShortDaysOfWeek; virtual; + + property CalendarDate: TDateTime read FDate write SetCalendarDate + stored StoreCalendarDate; + property Day: Integer index 3 read GetDateElement write SetDateElement stored False; + property Month: Integer index 2 read GetDateElement write SetDateElement stored False; + property ReadOnly: Boolean read FReadOnly write FReadOnly default False; + property StartOfWeek: TDayOfWeekName read FStartOfWeek write SetStartOfWeek default Mon; + property UseCurrentDate: Boolean read FUseCurrentDate write SetUseCurrentDate default True; + property WeekendColor: TColor read FWeekendColor write SetWeekendColor default clRed; + property Weekends: TDaysOfWeek read FWeekends write SetWeekends default [Sun]; + property Year: Integer index 1 read GetDateElement write SetDateElement stored False; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + property NotInThisMonthColor:TColor read FNotInThisMonthColor write SetNotInThisMonthColor default clSilver; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure NextMonth; + procedure NextYear; + procedure PrevMonth; + procedure PrevYear; + procedure UpdateCalendar; virtual; + property ShortDaysOfWeek: TStrings read GetShortDaysOfWeek write SetShortDaysOfWeek; + end; + + { TRxCalendar1 } + + TRxCalendarGrid = class(TCustomRxCalendar) + protected + procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override; + published + property Align; + property Anchors; + property BorderColor; + property BorderSpacing; + property CalendarDate; + property Constraints; + property Day; + property Font; + property Hint; + property Month; + property NotInThisMonthColor; + property PopupMenu; + property ReadOnly; + property SelectedColor; + property ShortDaysOfWeek; // + property StartOfWeek; + property TabStop; + property UseCurrentDate; + property Visible; + property WeekendColor; + property Weekends; + property Year; + + property OnChange; + property OnClick; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseEnter; + property OnMouseLeave; + property OnMouseMove; + property OnMouseUp; + property OnResize; + property OnPrepareCanvas; + end; + +{ TPopupCalendar } + +type + TCloseUpEvent = procedure (Sender: TObject; Accept: Boolean) of object; + + TPopupCalendar = class(TForm) + private + FCalendar: TCustomRxCalendar; + FCloseUp: TCloseUpEvent; + FTitleLabel: TLabel; + FFourDigitYear: Boolean; + FBtns: array[0..3] of TSpeedButton; + FMonthMenu:TPopupMenu; + FMonthNames: TStrings; + procedure CalendarMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + function GetDate: TDateTime; + procedure PrevMonthBtnClick(Sender: TObject); + procedure NextMonthBtnClick(Sender: TObject); + procedure PrevYearBtnClick(Sender: TObject); + procedure NextYearBtnClick(Sender: TObject); + procedure CalendarChange(Sender: TObject); + procedure SetDate(const AValue: TDateTime); + procedure SetMonthNames(const AValue: TStrings); + procedure TopPanelDblClick(Sender: TObject); + procedure MonthMenuClick(Sender: TObject); + procedure CalendarDblClick(Sender: TObject); + protected + FCloseBtn:TBitBtn; + FControlPanel:TPanel; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure KeyPress(var Key: Char); override; + procedure Paint;override; + procedure Deactivate; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure AutoSizeForm; + property Date:TDateTime read GetDate write SetDate; + property OnCloseUp: TCloseUpEvent read FCloseUp write FCloseUp; + property Calendar: TCustomRxCalendar read FCalendar; + property MonthNames: TStrings read FMonthNames write SetMonthNames; + end; + +{ TSelectDateDlg } + +type + TSelectDateDlg = class(TForm) + Calendar: TCustomRxCalendar; + TitleLabel: TLabel; + FMonthMenu:TPopupMenu; + procedure PrevMonthBtnClick(Sender: TObject); + procedure NextMonthBtnClick(Sender: TObject); + procedure PrevYearBtnClick(Sender: TObject); + procedure NextYearBtnClick(Sender: TObject); + procedure CalendarChange(Sender: TObject); + procedure CalendarDblClick(Sender: TObject); + procedure TopPanelDblClick(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure MonthMenuClick(Sender: TObject); + private + { Private declarations } + FBtns: array[0..3] of TSpeedButton; + procedure SetDate(Date: TDateTime); + function GetDate: TDateTime; + public + { Public declarations } + constructor Create(AOwner: TComponent); override; + property Date: TDateTime read GetDate write SetDate; + end; + +{ Calendar dialog } + +function SelectDate(var Date: TDateTime; const DlgCaption: TCaption; + AStartOfWeek: TDayOfWeekName; AWeekends: TDaysOfWeek; + AWeekendColor: TColor; BtnHints: TStrings): Boolean; +function SelectDateStr(var StrDate: string; const DlgCaption: TCaption; + AStartOfWeek: TDayOfWeekName; AWeekends: TDaysOfWeek; + AWeekendColor: TColor; BtnHints: TStrings): Boolean; +function PopupDate(var Date: TDateTime; Edit: TWinControl): Boolean; + +{ Popup calendar } + +function CreatePopupCalendar(AOwner: TComponent + {$IFDEF USED_BiDi}; ABiDiMode: TBiDiMode = bdLeftToRight {$ENDIF}): TPopupCalendar; +procedure SetupPopupCalendar(PopupCalendar: TWinControl; + AStartOfWeek: TDayOfWeekName; AWeekends: TDaysOfWeek; + AWeekendColor: TColor; BtnHints: TStrings; FourDigitYear: Boolean); + +const + PopupCalendarSize: TPoint = (X: 187; Y: 124); + +implementation + +uses Messages, RXCtrls, rxconst, ToolEdit, vclutils, math, LCLStrConsts, + {rxstrutils,} LResources; + +const + SBtnGlyphs: array[0..3] of PChar = ('PREV2', 'PREV1', 'NEXT1', 'NEXT2'); + +procedure FontSetDefault(AFont: TFont); +(* +{$IFDEF WIN32} +var + NonClientMetrics: TNonClientMetrics; +{$ENDIF} +*) +begin +(* +{$IFDEF WIN32} + NonClientMetrics.cbSize := SizeOf(NonClientMetrics); + if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then + AFont.Handle := CreateFontIndirect(NonClientMetrics.lfMessageFont) + else +{$ENDIF} +*) + with AFont do + begin + Color := clWindowText; +{$IFDEF WINDOWS} + Name := 'MS Sans Serif'; + Size := 8; +{$ELSE} + if Assigned(Application) and Assigned(Application.MainForm) then + Size := Application.MainForm.Font.Size + else + Size := 9; + Name := 'default'; +{$ENDIF} + Style := []; + end; +end; + +function CreateRxCalendarPopupMenu(AOwner:TComponent; AOnClick:TNotifyEvent):TPopupMenu; +var + i:integer; + MI:TMenuItem; +begin + Result:=TPopupMenu.Create(AOwner); + for i:=1 to 12 do + begin + MI:=TMenuItem.Create(Result); + MI.Caption := LongMonthNames[i]; + MI.OnClick:=AOnClick; + MI.Tag:=i; + Result.Items.Add(MI); + end; + + MI:=TMenuItem.Create(Result); + MI.Caption:='-'; + Result.Items.Add(MI); + + MI:=TMenuItem.Create(Result); + MI.Caption:=sToCurDate; + MI.OnClick:=AOnClick; + MI.Tag:=-1; + Result.Items.Add(MI); +end; + +{ TRxTimerSpeedButton } + +type + TRxTimerSpeedButton = class(TRxSpeedButton) + public + constructor Create(AOwner: TComponent); override; + published + property AllowTimer default True; + end; + +constructor TRxTimerSpeedButton.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + AllowTimer := True; + ControlStyle := ControlStyle + [csReplicatable]; +end; + + + { TCustomRxCalendar } + +constructor TCustomRxCalendar.Create(AOwner: TComponent); +var + ADefaultTextStyle: TTextStyle; +begin + inherited Create(AOwner); + FShortDaysOfWeek := TStringList.Create; + FUseCurrentDate := True; + FStartOfWeek := Mon; + FWeekends := [Sun]; + FWeekendColor := clRed; + FNotInThisMonthColor:=clSilver; + FixedCols := 0; + FixedRows := 1; + ColCount := 7; + RowCount := 7; + ScrollBars := ssNone; + Options := Options - [goRangeSelect] + [goDrawFocusSelected]; + ControlStyle := ControlStyle + [csFramed]; + FDate := Date; + ADefaultTextStyle:=DefaultTextStyle; + ADefaultTextStyle.Alignment:=taCenter; + ADefaultTextStyle.Layout:=tlCenter; + DefaultTextStyle:=ADefaultTextStyle; + FocusRectVisible := False; + OnMouseWheelUp := @RxCalendarMouseWheelUp; + OnMouseWheelDown := @RxCalendarMouseWheelDown; + UpdateShortDaysOfWeek; + UpdateCalendar; + TitleStyle:=tsNative; +end; + +destructor TCustomRxCalendar.Destroy; +begin + FShortDaysOfWeek.Free; + inherited Destroy; +end; + +procedure TCustomRxCalendar.CreateParams(var Params: TCreateParams); +const + ClassStylesOff = CS_VREDRAW or CS_HREDRAW; +begin + inherited CreateParams(Params); + with Params do + begin + WindowClass.Style := WindowClass.Style and DWORD(not ClassStylesOff); + Style := Style or WS_CLIPCHILDREN; + end; +end; + +procedure TCustomRxCalendar.Change; +begin + if Assigned(FOnChange) then FOnChange(Self); +end; + +procedure TCustomRxCalendar.Click; +var + TheCellText: string; +begin + FDate := FDaysArray[Col, Row].DayDate; + FUseCurrentDate := False; + CalendarUpdate(false); + Change; + inherited Click; +end; + +function TCustomRxCalendar.DaysThisMonth: Integer; +begin + Result := DaysPerMonth(Year, Month); +end; + +procedure TCustomRxCalendar.DrawCell(ACol, ARow: Longint; ARect: TRect; + AState: TGridDrawState); +var + DayNum:integer; + R: TRect; +begin + PrepareCanvas(aCol, aRow, aState); + + if (gdSelected in aState) and (gdFocused in aState) then + Canvas.Brush.Color:=SelectedColor; + + Canvas.FillRect(aRect); + DrawCellGrid(aCol,aRow,aRect,aState); + + if ARow>0 then + begin + if not ((gdSelected in aState) and (gdFocused in aState)) then + begin + if (FDaysArray[ACol, ARow].DayDate = Date) and (FDaysArray[ACol, ARow].DayColor <> FNotInThisMonthColor) then + begin + R := ARect; + // Variant 1 + //Dec(R.Bottom, 1); + //Dec(R.Right, 1); + //Canvas.Frame3d(R, 1, bvLowered); + + // Variant 2 + RxFrame3D(Canvas, R, clWindowFrame, clBtnHighlight, 1); + RxFrame3D(Canvas, R, clBtnShadow, clBtnFace, 1); + end; + Canvas.Font.Color:=FDaysArray[ACol, ARow].DayColor; + end + else + Canvas.Font.Color := clHighlightText // clWindow + ; + DrawCellText(ACol, ARow, ARect, AState, IntToStr(FDaysArray[ACol, ARow].DayNum)); + + end + else + begin + Canvas.Font.Color:=clWindowText; + //DrawCellText(ACol, ARow, ARect, AState, ShortDayNames[(Ord(StartOfWeek) + ACol) mod 7 + 1]); + if FShortDaysOfWeek <> nil then begin + if ACol <= FShortDaysOfWeek.Count - 1 then + DrawCellText(ACol, ARow, ARect, AState, FShortDaysOfWeek.Strings[(Ord(StartOfWeek) + ACol) mod 7]); + end; + end; +end; + +procedure TCustomRxCalendar.KeyDown(var Key: Word; Shift: TShiftState); +begin + if Shift = [] then + case Key of + VK_UP: + begin + DecWeek; + Exit; + end; + VK_DOWN: + begin + AddWeek; + Exit; + end; + VK_LEFT, VK_SUBTRACT: + begin + if (Day > 1) then Day := Day - 1 + else CalendarDate := CalendarDate - 1; + Exit; + end; + VK_RIGHT, VK_ADD: + begin + if (Day < DaysThisMonth) then Day := Day + 1 + else CalendarDate := CalendarDate + 1; + Exit; + end; + VK_PRIOR: + begin + ChangeMonth(-1); + Exit; + end; + VK_NEXT: + begin + ChangeMonth(+1); + Exit; + end; + end; + inherited KeyDown(Key, Shift); +end; + +procedure TCustomRxCalendar.KeyPress(var Key: Char); +begin + if Key in ['T', 't'] then begin + CalendarDate := Trunc(Now); + Key := #0; + end; + inherited KeyPress(Key); +end; + +procedure TCustomRxCalendar.LMSize(var Message: TLMSize); +var + GridLinesH, GridLinesW: Integer; +begin + GridLinesH := 6 * GridLineWidth; + if (goVertLine in Options) or (goFixedVertLine in Options) then + GridLinesW := 6 * GridLineWidth + else GridLinesW := 0; + DefaultColWidth := (Message.Width - GridLinesW) div 7; + DefaultRowHeight := (Message.Height - GridLinesH) div 7; +end; + +procedure TCustomRxCalendar.RxCalendarMouseWheelUp(Sender: TObject; + Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); +begin + DecWeek; + Handled := True; +end; + +procedure TCustomRxCalendar.RxCalendarMouseWheelDown(Sender: TObject; + Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); +begin + AddWeek; + Handled := True; +end; + +procedure TCustomRxCalendar.SetCalendarDate(Value: TDateTime); +begin + if FDate <> Value then + begin + FDate := Value; + UpdateCalendar; + Change; + end; +end; + +function TCustomRxCalendar.StoreCalendarDate: Boolean; +begin + Result := not FUseCurrentDate; +end; + +procedure TCustomRxCalendar.AddWeek; +begin + if (Day + 7 <= DaysThisMonth) then + Day := Day + 7 + else + CalendarDate := CalendarDate + 7; +end; + +procedure TCustomRxCalendar.DecWeek; +begin + if (Day - 7 >= 1) then + Day := Day - 7 + else + CalendarDate := CalendarDate - 7; +end; + +function TCustomRxCalendar.GetDateElement(Index: Integer): Integer; +var + AYear, AMonth, ADay: Word; +begin + DecodeDate(FDate, AYear, AMonth, ADay); + case Index of + 1: Result := AYear; + 2: Result := AMonth; + 3: Result := ADay; + else Result := -1; + end; +end; + +procedure TCustomRxCalendar.FillDaysArray; +var + x,y:integer; + DayNum: Integer; + FirstDate:TDateTime; + AYear, AMonth, ADay:Word; +begin + DecodeDate(FDate, AYear, AMonth, ADay); + FirstDate := EncodeDate(AYear, AMonth, 1) + FMonthOffset-1; + DayNum:=FMonthOffset; + for y:=1 to 6 do + begin + for x:=0 to 6 do + begin + FDaysArray[x,y].DayDate:=FirstDate; + if DayNum < 1 then + begin + FDaysArray[x,y].DayColor:=FNotInThisMonthColor; + DecodeDate(FirstDate, AYear, AMonth, ADay); + FDaysArray[x,y].DayNum:=ADay; + end + else + if DayNum > DaysThisMonth then + begin + FDaysArray[x,y].DayColor:=FNotInThisMonthColor; + DecodeDate(FirstDate, AYear, AMonth, ADay); + FDaysArray[x,y].DayNum:=ADay; + end + else + begin + if IsWeekend(x, y) then + FDaysArray[x,y].DayColor:=WeekendColor + else + FDaysArray[x,y].DayColor:=clWindowText; + FDaysArray[x,y].DayNum:=DayNum; + end; + FirstDate:=FirstDate+1; + DayNum:=DayNum+1; + end; + end; +end; + +procedure TCustomRxCalendar.UpdateShortDaysOfWeek; +var + Ind: Integer; + OldNotify: TNotifyEvent; +begin + if (FShortDaysOfWeek <> nil) and (FShortDaysOfWeek.Count = 0) then + begin + OldNotify := TStringList(FShortDaysOfWeek).OnChange; + TStringList(FShortDaysOfWeek).OnChange := nil; + for Ind := 1 to 7 do + FShortDaysOfWeek.Add(DefaultFormatSettings.ShortDayNames[Ind]); + TStringList(FShortDaysOfWeek).OnChange := OldNotify; + end; +end; + +function TCustomRxCalendar.GetShortDaysOfWeek: TStrings; +begin + Result := FShortDaysOfWeek; +end; + +procedure TCustomRxCalendar.SetDateElement(Index: Integer; Value: Integer); +var + AYear, AMonth, ADay: Word; +begin + if Value > 0 then begin + DecodeDate(FDate, AYear, AMonth, ADay); + case Index of + 1: if AYear <> Value then AYear := Value else Exit; + 2: if (Value <= 12) and (Value <> AMonth) then begin + AMonth := Value; + if ADay > DaysPerMonth(Year, Value) then + ADay := DaysPerMonth(Year, Value); + end else Exit; + 3: if (Value <= DaysThisMonth) and (Value <> ADay) then + ADay := Value + else Exit; + else Exit; + end; + FDate := EncodeDate(AYear, AMonth, ADay); + FUseCurrentDate := False; + CalendarUpdate(Index = 3); + Change; + end; +end; + +procedure TCustomRxCalendar.SetNotInThisMonthColor(const AValue: TColor); +begin + if AValue <> FNotInThisMonthColor then + begin + FNotInThisMonthColor:=AValue; + FillDaysArray; + Invalidate; + end; +end; + +procedure TCustomRxCalendar.SetShortDaysOfWeek(const AValue: TStrings); +begin + if AValue.Text <> FShortDaysOfWeek.Text then begin + FShortDaysOfWeek.Assign(AValue); + Invalidate; // + end; +end; + +procedure TCustomRxCalendar.SetWeekendColor(Value: TColor); +begin + if Value <> FWeekendColor then + begin + FWeekendColor := Value; + FillDaysArray; + Invalidate; + end; +end; + +procedure TCustomRxCalendar.SetWeekends(Value: TDaysOfWeek); +begin + if Value <> FWeekends then + begin + FWeekends := Value; + UpdateCalendar; + end; +end; + +function TCustomRxCalendar.IsWeekend(ACol, ARow: Integer): Boolean; +begin + Result := TDayOfWeekName((Integer(StartOfWeek) + ACol) mod 7) in FWeekends; +end; + +procedure TCustomRxCalendar.SetStartOfWeek(Value: TDayOfWeekName); +begin + if Value <> FStartOfWeek then + begin + FStartOfWeek := Value; + UpdateCalendar; + end; +end; + +procedure TCustomRxCalendar.SetUseCurrentDate(Value: Boolean); +begin + if Value <> FUseCurrentDate then + begin + FUseCurrentDate := Value; + if Value then + begin + FDate := Date; { use the current date, then } + UpdateCalendar; + end; + end; +end; + +{ Given a value of 1 or -1, moves to Next or Prev month accordingly } +procedure TCustomRxCalendar.ChangeMonth(Delta: Integer); +var + AYear, AMonth, ADay: Word; + NewDate: TDateTime; + CurDay: Integer; +begin + DecodeDate(FDate, AYear, AMonth, ADay); + CurDay := ADay; + if Delta > 0 then ADay := DaysPerMonth(AYear, AMonth) + else ADay := 1; + NewDate := EncodeDate(AYear, AMonth, ADay); + NewDate := NewDate + Delta; + DecodeDate(NewDate, AYear, AMonth, ADay); + if DaysPerMonth(AYear, AMonth) > CurDay then + ADay := CurDay + else + ADay := DaysPerMonth(AYear, AMonth); + CalendarDate := EncodeDate(AYear, AMonth, ADay); +end; + +procedure TCustomRxCalendar.PrevMonth; +begin + ChangeMonth(-1); +end; + +procedure TCustomRxCalendar.NextMonth; +begin + ChangeMonth(1); +end; + +procedure TCustomRxCalendar.NextYear; +begin + if IsLeapYear(Year) and (Month = 2) and (Day = 29) then Day := 28; + Year := Year + 1; +end; + +procedure TCustomRxCalendar.PrevYear; +begin + if IsLeapYear(Year) and (Month = 2) and (Day = 29) then Day := 28; + Year := Year - 1; +end; + +procedure TCustomRxCalendar.CalendarUpdate(DayOnly: Boolean); +var + AYear, AMonth, ADay: Word; + FirstDate: TDateTime; +begin + FUpdating := True; + try + DecodeDate(FDate, AYear, AMonth, ADay); + FirstDate := EncodeDate(AYear, AMonth, 1); + FMonthOffset := 2 - ((DayOfWeek(FirstDate) - Ord(StartOfWeek) + 7) mod 7); + { day of week for 1st of month } + if FMonthOffset = 2 then FMonthOffset := -5; + + FillDaysArray; + MoveExtend(false, (ADay - FMonthOffset) mod 7, (ADay - FMonthOffset) div 7 + 1); + TopRow:=1; //Правим ошибку Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ñкрола ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ Ð¿Ð¾Ñле 15 чиÑла... + VisualChange; + + if DayOnly then Update else Invalidate; + finally + FUpdating := False; + end; +end; + +procedure TCustomRxCalendar.UpdateCalendar; +begin + CalendarUpdate(False); +end; + +{ TLocCalendar } + +type + TLocCalendar = class(TCustomRxCalendar) + private + procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; + procedure CMParentColorChanged(var Message: TMessage); message CM_PARENTCOLORCHANGED; + protected + procedure CreateParams(var Params: TCreateParams); override; + procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override; + public + constructor Create(AOwner: TComponent); override; + procedure MouseToCell(X, Y: Integer; var ACol, ARow: Longint); + property GridLineWidth; + property DefaultColWidth; + property DefaultRowHeight; + end; + +constructor TLocCalendar.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + ControlStyle := [csCaptureMouse, csClickEvents, csDoubleClicks]; + ControlStyle := ControlStyle + [csReplicatable]; +// Enabled := False; + BorderStyle := bsNone; + ParentColor := True; + CalendarDate := Trunc(Now); + UseCurrentDate := False; + FixedColor := Color; + Options := [goFixedHorzLine]; + TabStop := False; +end; + +procedure TLocCalendar.CMParentColorChanged(var Message: TMessage); +begin + inherited; + if ParentColor then FixedColor := Self.Color; +end; + +procedure TLocCalendar.CMEnabledChanged(var Message: TMessage); +begin + if HandleAllocated and not (csDesigning in ComponentState) then +// EnableWindow(Handle, True); +end; + +procedure TLocCalendar.CreateParams(var Params: TCreateParams); +begin + inherited CreateParams(Params); + with Params do + Style := Style and not (WS_BORDER or WS_TABSTOP or WS_DISABLED); +end; + +procedure TLocCalendar.MouseToCell(X, Y: Integer; var ACol, ARow: Longint); +var + Coord: TGridCoord; +begin + Coord := MouseCoord(X, Y); + ACol := Coord.X; + ARow := Coord.Y; +end; + +procedure TLocCalendar.DrawCell(ACol, ARow: Longint; ARect: TRect; + AState: TGridDrawState); +var + D, M, Y: Word; +begin + inherited DrawCell(ACol, ARow, ARect, AState); + + if FDaysArray[ACol, ARow].DayDate = SysUtils.Date then + rxFrame3D(Canvas, ARect, clBtnShadow, clBtnHighlight, 1); +end; + + +function CreatePopupCalendar(AOwner: TComponent + {$IFDEF USED_BiDi}; ABiDiMode: TBiDiMode = bdLeftToRight {$ENDIF}): TPopupCalendar; +begin + Result := TPopupCalendar.Create(AOwner); + + if (AOwner <> nil) and not (csDesigning in AOwner.ComponentState) and + (Screen.PixelsPerInch <> 96) then + begin { scale to screen res } +// Result.ScaleBy(Screen.PixelsPerInch, 96); + { The ScaleBy method does not scale the font well, so set the + font back to the original info. } + TPopupCalendar(Result).FCalendar.ParentFont := True; + FontSetDefault(TPopupCalendar(Result).Font); +{$IFDEF USED_BiDi} + Result.BiDiMode := ABiDiMode; +{$ENDIF} + end; +end; + +procedure SetupPopupCalendar(PopupCalendar: TWinControl; + AStartOfWeek: TDayOfWeekName; AWeekends: TDaysOfWeek; + AWeekendColor: TColor; BtnHints: TStrings; FourDigitYear: Boolean); +var + I: Integer; +begin + if (PopupCalendar = nil) or not (PopupCalendar is TPopupCalendar) then + Exit; + TPopupCalendar(PopupCalendar).FFourDigitYear := FourDigitYear; + if TPopupCalendar(PopupCalendar).FCalendar <> nil then + begin + with TPopupCalendar(PopupCalendar).FCalendar do + begin + StartOfWeek := AStartOfWeek; + WeekendColor := AWeekendColor; + Weekends := AWeekends; + end; + if (BtnHints <> nil) then + for I := 0 to Min(BtnHints.Count - 1, 3) do + begin + if BtnHints[I] <> '' then + TPopupCalendar(PopupCalendar).FBtns[I].Hint := BtnHints[I]; + end; + end; +end; + +constructor TPopupCalendar.Create(AOwner: TComponent); +const + BtnSide = 14; +var + BackPanel: TWinControl; + MI:TMenuItem; + i:integer; + TmpBitmap:TBitmap; +begin + inherited CreateNew(AOwner); + + BorderStyle:=bsNone; + + FFourDigitYear := FourDigitYear; + Height := Max(PopupCalendarSize.Y, 120); + Width := Max(PopupCalendarSize.X, 180); + Color := clBtnFace; + FontSetDefault(Font); + KeyPreview:=true; + + if AOwner is TControl then ShowHint := TControl(AOwner).ShowHint + else ShowHint := True; + +// if (csDesigning in ComponentState) then Exit; + + FMonthNames := TStringList.Create; + if FMonthNames.Count = 0 then + begin + for i := Low(DefaultFormatSettings.LongMonthNames) to High(DefaultFormatSettings.LongMonthNames) do + FMonthNames.Add(DefaultFormatSettings.LongMonthNames[i]); + end; + + BackPanel := TPanel.Create(Self); + BackPanel.Anchors:=[akLeft, akRight, akTop, akBottom]; + + with BackPanel as TPanel do + begin + Parent := Self; +// Align := alClient; + ParentColor := True; + ControlStyle := ControlStyle + [csReplicatable]; + end; + + FControlPanel := TPanel.Create(Self); + with FControlPanel do + begin + Parent := BackPanel; + Align := alTop; + Width := Self.Width - 4; + Height := 18; + BevelOuter := bvNone; + ParentColor := True; + ControlStyle := ControlStyle + [csReplicatable]; + Color:=clSkyBlue; + end; + + FCalendar := TLocCalendar.Create(Self); + with TLocCalendar(FCalendar) do + begin + Parent := BackPanel; + Align := alClient; + OnChange := @CalendarChange; + OnMouseUp := @CalendarMouseUp; + OnDblClick := @CalendarDblClick; + end; + + FCloseBtn:=TBitBtn.Create(Self); + FCloseBtn.Parent := BackPanel; + FCloseBtn.Kind:=bkCancel; + FCloseBtn.Align:=alBottom; + FCloseBtn.AutoSize:=true; + + BackPanel.Top:=2; + BackPanel.Left:=2; + BackPanel.Width:=Width - 4; + + BackPanel.Height:=Height - 4; + + FBtns[0] := TRxTimerSpeedButton.Create(Self); + with FBtns[0] do + begin + Parent := FControlPanel; + SetBounds(-1, -1, BtnSide, BtnSide); + //loaded bitmap should be freed as Glyph just takes a copy of it + TmpBitmap:=LoadBitmapFromLazarusResource('prev2'); + Glyph := TmpBitmap; + FreeAndNil(TmpBitmap); + + OnClick := @PrevYearBtnClick; + Hint := sPrevYear; + Align:=alLeft; + end; + + FBtns[1] := TRxTimerSpeedButton.Create(Self); + with FBtns[1] do + begin + Parent := FControlPanel; + SetBounds(BtnSide - 2, -1, BtnSide, BtnSide); + + TmpBitmap:=LoadBitmapFromLazarusResource('prev1'); + Glyph := TmpBitmap; + FreeAndNil(TmpBitmap); + + OnClick := @PrevMonthBtnClick; + Hint := sPrevMonth; + Align:=alLeft; + end; + + FBtns[2] := TRxTimerSpeedButton.Create(Self); + with FBtns[2] do + begin + Parent := FControlPanel; + SetBounds(FControlPanel.Width - 2 * BtnSide + 2, -1, BtnSide, BtnSide); + TmpBitmap:=LoadBitmapFromLazarusResource('next1'); + Glyph := TmpBitmap; + FreeAndNil(TmpBitmap); + OnClick := @NextMonthBtnClick; + Hint := sNextMonth; + Align:=alRight; + end; + + FBtns[3] := TRxTimerSpeedButton.Create(Self); + with FBtns[3] do + begin + Parent := FControlPanel; + SetBounds(FControlPanel.Width - BtnSide + 1, -1, BtnSide, BtnSide); + TmpBitmap:=LoadBitmapFromLazarusResource('next2'); + Glyph := TmpBitmap; + FreeAndNil(TmpBitmap); + OnClick := @NextYearBtnClick; + Hint := sNextYear; + Align:=alRight; + end; + + FTitleLabel := TLabel.Create(Self); + with FTitleLabel do + begin + Parent := FControlPanel; + AutoSize := False; + Alignment := taCenter; + SetBounds(BtnSide * 2 + 1, 1, FControlPanel.Width - 4 * BtnSide - 2, 14); + Transparent := True; + OnDblClick := @TopPanelDblClick; + ControlStyle := ControlStyle + [csReplicatable]; + Align:=alClient; + end; + + FMonthMenu:=CreateRxCalendarPopupMenu(Self, @MonthMenuClick); + + FTitleLabel.PopupMenu:=FMonthMenu; + ActiveControl:=FCalendar; + CalendarChange(nil); +end; + +destructor TPopupCalendar.Destroy; +begin + FMonthNames.Free; + inherited Destroy; +end; + +procedure TPopupCalendar.AutoSizeForm; +begin + FControlPanel.Height:=FCalendar.Canvas.TextHeight('Wg')+4; + Height:=(FCalendar.Canvas.TextHeight('Wg')+4)*7+FControlPanel.Height + FCloseBtn.Height; + Width:=FCalendar.Canvas.TextWidth(' WWW')*7; + FCalendar.AutoFillColumns:=true; +end; + +procedure TPopupCalendar.CalendarMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var + Col, Row: Longint; +begin + if (Button = mbLeft) and (Shift = []) then + begin + TLocCalendar(FCalendar).MouseToCell(X, Y, Col, Row); + if (Row > 0) and (FCalendar.FDaysArray[Col, Row].DayColor <> FCalendar.FNotInThisMonthColor) then + ModalResult:=mrOk; + end; +end; + +function TPopupCalendar.GetDate: TDateTime; +begin + Result:=FCalendar.CalendarDate; +end; + +procedure TPopupCalendar.TopPanelDblClick(Sender: TObject); +begin + FCalendar.CalendarDate := Trunc(Now); +end; + +procedure TPopupCalendar.MonthMenuClick(Sender: TObject); +var + Cmd:integer; +begin + Cmd:=(Sender as TComponent).Tag; + if Cmd = -1 then + FCalendar.SetCalendarDate(Sysutils.Date) + else + FCalendar.Month:=Cmd; +end; + +procedure TPopupCalendar.CalendarDblClick(Sender: TObject); +begin + ModalResult:=mrOk; +end; + +procedure TPopupCalendar.KeyDown(var Key: Word; Shift: TShiftState); +begin + if FCalendar <> nil then + case Key of + VK_NEXT: + begin + if ssCtrl in Shift then FCalendar.NextYear; + end; + VK_PRIOR: + begin + if ssCtrl in Shift then FCalendar.PrevYear; + end; + VK_ESCAPE:ModalResult:=mrCancel; + end; + inherited KeyDown(Key, Shift); +end; + +procedure TPopupCalendar.KeyPress(var Key: Char); +begin + inherited KeyPress(Key); + if (FCalendar <> nil) and (Key <> #0) then + FCalendar.KeyPress(Key); +end; + +procedure TPopupCalendar.Paint; +var + CR:TRect; +begin + inherited Paint; + + CR:=ClientRect; + RxFrame3D(Canvas, CR, clBtnHighlight, clWindowFrame, 1); + RxFrame3D(Canvas, CR, clBtnFace, clBtnShadow, 1); +end; + +procedure TPopupCalendar.Deactivate; +begin + inherited Deactivate; +{ if Assigned(FOnPopUpCloseEvent) then + FOnPopUpCloseEvent(FFindResult);} +// Close; +end; + +procedure TPopupCalendar.PrevYearBtnClick(Sender: TObject); +begin + FCalendar.PrevYear; + FCalendar.SetFocus; +end; + +procedure TPopupCalendar.NextYearBtnClick(Sender: TObject); +begin + FCalendar.NextYear; + FCalendar.SetFocus; +end; + +procedure TPopupCalendar.PrevMonthBtnClick(Sender: TObject); +begin + FCalendar.PrevMonth; + FCalendar.SetFocus; +end; + +procedure TPopupCalendar.NextMonthBtnClick(Sender: TObject); +begin + FCalendar.NextMonth; + FCalendar.SetFocus; +end; + +procedure TPopupCalendar.CalendarChange(Sender: TObject); +var + AYear, AMonth, ADay: Word; +begin + DecodeDate(FCalendar.CalendarDate, AYear, AMonth, ADay); + FTitleLabel.Caption := Format('%s, %d', [DefaultFormatSettings.LongMonthNames[AMonth], AYear]); +end; + +procedure TPopupCalendar.SetDate(const AValue: TDateTime); +begin + FCalendar.CalendarDate:=AValue; +end; + +procedure TPopupCalendar.SetMonthNames(const AValue: TStrings); +begin + if AValue.Text <> FMonthNames.Text then + begin + FMonthNames.Assign(AValue); + CalendarChange(Self); + end; +end; + + { TSelectDateDlg } + +constructor TSelectDateDlg.Create(AOwner: TComponent); +var + Control: TWinControl; + MI:TMenuItem; + i:integer; + TmpBitmap:TBitmap; +begin + inherited CreateNew(AOwner, 0); + Caption := sDateDlgTitle; + + BorderStyle := bsToolWindow; + + BorderIcons := [biSystemMenu]; + ClientHeight := 154; + ClientWidth := 222; + FontSetDefault(Font); + Color := clBtnFace; + Position := poScreenCenter; + ShowHint := True; + KeyPreview := True; + + Control := TPanel.Create(Self); + with Control as TPanel do + begin + Parent := Self; + SetBounds(0, 0, 222, 22); + Align := alTop; + BevelInner := bvLowered; + ParentColor := True; + ParentFont := True; + end; + + TitleLabel := TLabel.Create(Self); + with TitleLabel do + begin + Parent := Control; + SetBounds(35, 4, 152, 14); + Alignment := taCenter; + AutoSize := False; + Caption := ''; + ParentFont := True; + Font.Color := clBlue; + Font.Style := [fsBold]; + Transparent := True; + OnDblClick := @TopPanelDblClick; + end; + + FBtns[0] := TRxTimerSpeedButton.Create(Self); + with FBtns[0] do + begin + Parent := Control; + SetBounds(3, 3, 16, 16); + + TmpBitmap:=LoadBitmapFromLazarusResource('prev2'); + Glyph := TmpBitmap; + FreeAndNil(TmpBitmap); + + OnClick := @PrevYearBtnClick; + Hint := sPrevYear; + end; + + FBtns[1] := TRxTimerSpeedButton.Create(Self); + with FBtns[1] do begin + Parent := Control; + SetBounds(18, 3, 16, 16); + + TmpBitmap:=LoadBitmapFromLazarusResource('prev1'); + Glyph := TmpBitmap; + FreeAndNil(TmpBitmap); + + OnClick := @PrevMonthBtnClick; + Hint := sPrevMonth; + end; + + FBtns[2] := TRxTimerSpeedButton.Create(Self); + with FBtns[2] do + begin + Parent := Control; + SetBounds(188, 3, 16, 16); + + TmpBitmap:=LoadBitmapFromLazarusResource('next1'); + Glyph := TmpBitmap; + FreeAndNil(TmpBitmap); + + OnClick := @NextMonthBtnClick; + Hint := sNextMonth; + end; + + FBtns[3] := TRxTimerSpeedButton.Create(Self); + with FBtns[3] do begin + Parent := Control; + SetBounds(203, 3, 16, 16); + + TmpBitmap:=LoadBitmapFromLazarusResource('next2'); + Glyph := TmpBitmap; + FreeAndNil(TmpBitmap); + + OnClick := @NextYearBtnClick; + Hint := sNextYear; + end; + + Control := TPanel.Create(Self); + with Control as TPanel do + begin + Parent := Self; + SetBounds(0, 133, 222, 21); + Align := alBottom; + BevelInner := bvNone; + BevelOuter := bvNone; + ParentFont := True; + ParentColor := True; + end; + + with TButton.Create(Self) do + begin + Parent := Control; + SetBounds(0, 0, 112, 21); + Caption := rsmbOK; + ModalResult := mrOk; + end; + + with TButton.Create(Self) do + begin + Parent := Control; + SetBounds(111, 0, 111, 21); + Caption := rsmbCancel; + ModalResult := mrCancel; + Cancel := True; + end; + + Calendar := TCustomRxCalendar.Create(Self); + with Calendar do + begin + Parent := Self; + Align := alClient; + ParentFont := True; + SetBounds(2, 2, 218, 113); + Color := clWhite; + TabOrder := 0; + UseCurrentDate := False; + OnChange := @CalendarChange; + OnDblClick := @CalendarDblClick; + end; + + OnKeyDown := @FormKeyDown; + Calendar.CalendarDate := Trunc(Now); + ActiveControl := Calendar; + + FMonthMenu:=CreateRxCalendarPopupMenu(Self, @MonthMenuClick); + + TitleLabel.PopupMenu:=FMonthMenu; +end; + +procedure TSelectDateDlg.SetDate(Date: TDateTime); +begin + if Date = NullDate then Date := SysUtils.Date; + try + Calendar.CalendarDate := Date; + CalendarChange(nil); + except + Calendar.CalendarDate := SysUtils.Date; + end; +end; + +function TSelectDateDlg.GetDate: TDateTime; +begin + Result := Calendar.CalendarDate; +end; + +procedure TSelectDateDlg.TopPanelDblClick(Sender: TObject); +begin + SetDate(Trunc(Now)); +end; + +procedure TSelectDateDlg.PrevYearBtnClick(Sender: TObject); +begin + Calendar.PrevYear; +end; + +procedure TSelectDateDlg.NextYearBtnClick(Sender: TObject); +begin + Calendar.NextYear; +end; + +procedure TSelectDateDlg.PrevMonthBtnClick(Sender: TObject); +begin + Calendar.PrevMonth; +end; + +procedure TSelectDateDlg.NextMonthBtnClick(Sender: TObject); +begin + Calendar.NextMonth; +end; + +procedure TSelectDateDlg.CalendarChange(Sender: TObject); +begin + TitleLabel.Caption := FormatDateTime('MMMM, YYYY', Calendar.CalendarDate); +end; + +procedure TSelectDateDlg.CalendarDblClick(Sender: TObject); +begin + ModalResult := mrOK; +end; + +procedure TSelectDateDlg.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + case Key of + VK_RETURN: ModalResult := mrOK; + VK_ESCAPE: ModalResult := mrCancel; + VK_NEXT: + begin + if ssCtrl in Shift then Calendar.NextYear; + //else Calendar.NextMonth; + TitleLabel.Update; + end; + VK_PRIOR: + begin + if ssCtrl in Shift then Calendar.PrevYear; + //else Calendar.PrevMonth; + TitleLabel.Update; + end; + VK_TAB: + begin + if Shift = [ssShift] then Calendar.PrevMonth + else Calendar.NextMonth; + TitleLabel.Update; + end; + end; {case} +end; + +procedure TSelectDateDlg.MonthMenuClick(Sender: TObject); +var + Cmd:integer; +begin + Cmd:=(Sender as TComponent).Tag; + if Cmd = -1 then + Calendar.SetCalendarDate(Sysutils.Date) + else + Calendar.Month:=Cmd; +end; + +{ SelectDate routines } + +function CreateDateDialog(const DlgCaption: TCaption): TSelectDateDlg; +begin + Result := TSelectDateDlg.Create(Application); + try + if DlgCaption <> '' then Result.Caption := DlgCaption; +{ if Screen.PixelsPerInch <> 96 then begin { scale to screen res } +// Result.ScaleBy(Screen.PixelsPerInch, 96); + { The ScaleBy method does not scale the font well, so set the + font back to the original info. } + Result.Calendar.ParentFont := True; + FontSetDefault(Result.Font); + Result.Left := (Screen.Width div 2) - (Result.Width div 2); + Result.Top := (Screen.Height div 2) - (Result.Height div 2); + end;} + except + FreeAndNil(Result); + raise; + end; +end; + +function PopupDate(var Date: TDateTime; Edit: TWinControl): Boolean; +var + D: TSelectDateDlg; + P: TPoint; + W, H, X, Y: Integer; +begin + Result := False; + D := CreateDateDialog(''); + try + D.BorderIcons := []; + D.HandleNeeded; + D.Position := poDesigned; + W := D.Width; + H := D.Height; + P := (Edit.ClientOrigin); + Y := P.Y + Edit.Height - 1; + if (Y + H) > Screen.Height then Y := P.Y - H + 1; + if Y < 0 then Y := P.Y + Edit.Height - 1; + X := (P.X + Edit.Width) - W; + if X < 0 then X := P.X; + D.Left := X; + D.Top := Y; + D.Date := Date; + + if D.ShowModal = mrOk then + begin + Date := D.Date; + Result := True; + end; + finally + D.Free; + end; +end; + +function SelectDate(var Date: TDateTime; const DlgCaption: TCaption; + AStartOfWeek: TDayOfWeekName; AWeekends: TDaysOfWeek; + AWeekendColor: TColor; BtnHints: TStrings): Boolean; +var + D: TSelectDateDlg; + I: Integer; +begin + Result := False; + D := CreateDateDialog(DlgCaption); + try + D.Date := Date; + with D.Calendar do begin + StartOfWeek := AStartOfWeek; + Weekends := AWeekends; + WeekendColor := AWeekendColor; + end; + if (BtnHints <> nil) then + for I := 0 to Min(BtnHints.Count - 1, 3) do begin + if BtnHints[I] <> '' then + D.FBtns[I].Hint := BtnHints[I]; + end; + if D.ShowModal = mrOk then begin + Date := D.Date; + Result := True; + end; + finally + D.Free; + end; +end; + +function SelectDateStr(var StrDate: string; const DlgCaption: TCaption; + AStartOfWeek: TDayOfWeekName; AWeekends: TDaysOfWeek; + AWeekendColor: TColor; BtnHints: TStrings): Boolean; +var + DateValue: TDateTime; +begin + if StrDate <> '' then begin + try + DateValue := StrToDateFmt(DefaultFormatSettings.ShortDateFormat, StrDate); + except + DateValue := Date; + end; + end + else DateValue := Date; + Result := SelectDate(DateValue, DlgCaption, AStartOfWeek, AWeekends, + AWeekendColor, BtnHints); + if Result then StrDate := FormatDateTime(DefaultFormatSettings.ShortDateFormat, DateValue); +end; + +{ TRxCalendarGrid } + +procedure TRxCalendarGrid.SetBounds(aLeft, aTop, aWidth, aHeight: integer); +var + GridLinesH, GridLinesW: Integer; +begin + inherited SetBounds(aLeft, aTop, aWidth, aHeight); + + GridLinesH := 6 * GridLineWidth; + if (goVertLine in Options) or (goFixedVertLine in Options) then + GridLinesW := 6 * GridLineWidth + else GridLinesW := 0; + DefaultColWidth := (aWidth - GridLinesW) div 7; + DefaultRowHeight := (aHeight - GridLinesH) div 7; +end; + +initialization + {$I pickdate.lrs} +end. diff --git a/components/rx/version/2.1/register_rxctrl.pas b/components/rx/version/2.1/register_rxctrl.pas new file mode 100644 index 000000000..dcdf1bf01 --- /dev/null +++ b/components/rx/version/2.1/register_rxctrl.pas @@ -0,0 +1,172 @@ +unit register_rxctrl; + +{$mode objfpc}{$H+} + +interface +uses + Classes, SysUtils, LResources, LazarusPackageIntf; + +procedure Register; +implementation +uses RxLogin, ComponentEditors, RxAppIcon, Dialogs, rxconst; + +resourcestring + sTestTRxLoginDialog = 'Test TRxLoginDialog'; + sLoadIcon = 'Load icon'; + +type + + { TRxLoginDialogEditor } + + TRxLoginDialogEditor = class(TComponentEditor) + public + DefaultEditor: TBaseComponentEditor; + constructor Create(AComponent: TComponent; ADesigner: TComponentEditorDesigner); override; + destructor Destroy; override; + function GetVerbCount:integer;override; + function GetVerb(Index:integer):string;override; + procedure ExecuteVerb(Index:integer);override; + end; + + + { TRxAppIcon } + + TRxAppIconEditor = class(TComponentEditor) + public + DefaultEditor: TBaseComponentEditor; + constructor Create(AComponent: TComponent; ADesigner: TComponentEditorDesigner); override; + destructor Destroy; override; + function GetVerbCount:integer;override; + function GetVerb(Index:integer):string;override; + procedure ExecuteVerb(Index:integer);override; + end; + +{ TRxLoginDialogEditor } + +constructor TRxLoginDialogEditor.Create(AComponent: TComponent; + ADesigner: TComponentEditorDesigner); +var + CompClass: TClass; +begin + inherited Create(AComponent, ADesigner); + CompClass := PClass(Acomponent)^; + try + PClass(AComponent)^ := TComponent; + DefaultEditor := GetComponentEditor(AComponent, ADesigner); + finally + PClass(AComponent)^ := CompClass; + end; +end; + +destructor TRxLoginDialogEditor.Destroy; +begin + DefaultEditor.Free; + inherited Destroy; +end; + +function TRxLoginDialogEditor.GetVerbCount: integer; +begin + Result:=DefaultEditor.GetVerbCount + 1; +end; + +function TRxLoginDialogEditor.GetVerb(Index: integer): string; +begin + if Index < DefaultEditor.GetVerbCount then + Result := DefaultEditor.GetVerb(Index) + else + begin + case Index - DefaultEditor.GetVerbCount of + 0:Result:=sTestTRxLoginDialog; + end; + end; +end; + +procedure TRxLoginDialogEditor.ExecuteVerb(Index: integer); +begin + if Index < DefaultEditor.GetVerbCount then + DefaultEditor.ExecuteVerb(Index) + else + begin + case Index - DefaultEditor.GetVerbCount of + 0:(Component as TRxLoginDialog).Login; + end; + end; +end; + +{ TRxAppIcon } + +type + PClass = ^TClass; + +constructor TRxAppIconEditor.Create(AComponent: TComponent; + ADesigner: TComponentEditorDesigner); +var + CompClass: TClass; +begin + inherited Create(AComponent, ADesigner); + CompClass := PClass(Acomponent)^; + try + PClass(AComponent)^ := TComponent; + DefaultEditor := GetComponentEditor(AComponent, ADesigner); + finally + PClass(AComponent)^ := CompClass; + end; +end; + +destructor TRxAppIconEditor.Destroy; +begin + DefaultEditor.Free; + inherited Destroy; +end; + +function TRxAppIconEditor.GetVerbCount: integer; +begin + Result:=DefaultEditor.GetVerbCount + 1; +end; + +function TRxAppIconEditor.GetVerb(Index: integer): string; +begin + if Index < DefaultEditor.GetVerbCount then + Result := DefaultEditor.GetVerb(Index) + else + begin + case Index - DefaultEditor.GetVerbCount of + 0:Result:=sLoadIcon; + end; + end; +end; + +procedure TRxAppIconEditor.ExecuteVerb(Index: integer); +var + OpenDialog1: TOpenDialog; +begin + if Index < DefaultEditor.GetVerbCount then + DefaultEditor.ExecuteVerb(Index) + else + begin + case Index - DefaultEditor.GetVerbCount of + 0:begin + OpenDialog1:=TOpenDialog.Create(nil); + OpenDialog1.Filter:=sWindowsIcoFiles; + try + if OpenDialog1.Execute then + (Component as TRxAppIcon).LoadFromFile(OpenDialog1.FileName); + finally + OpenDialog1.Free; + end; + Modified; + end; + end; + end; +end; + + +procedure Register; +begin + // + RegisterComponentEditor(TRxLoginDialog, TRxLoginDialogEditor); + RegisterComponentEditor(TRxAppIcon, TRxAppIconEditor); +end; + +end. + diff --git a/components/rx/version/2.1/registerrx.pas b/components/rx/version/2.1/registerrx.pas new file mode 100644 index 000000000..4186eb632 --- /dev/null +++ b/components/rx/version/2.1/registerrx.pas @@ -0,0 +1,267 @@ +{ registerrx unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit registerrx; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, LazarusPackageIntf; + +const + RxCtrllPageName = 'RX Controls'; + +procedure Register; + +implementation +uses + PropEdits, folderlister, duallist, RxHistoryNavigator, + curredit, rxswitch, rxdice, rxtoolbar, rxxpman, PageMngr, RxAppIcon, + Dialogs, ComponentEditors, DBPropEdits, DB, rxctrls, + RxCustomChartPanel, AutoPanel, pickdate, rxconst, tooledit, rxclock, + rxceEditLookupFields, rxpopupunit, rxspin, RxTimeEdit, + RxAboutDialog, RxViewsPanel, RxMDI; + +type + + + { TPopUpColumnFieldProperty } + + TPopUpColumnFieldProperty = class(TFieldProperty) + public + procedure FillValues(const Values: TStringList); override; + end; + +{ TPopUpColumnFieldProperty } + +procedure TPopUpColumnFieldProperty.FillValues(const Values: TStringList); +var + Column: TPopUpColumn; + DataSource: TDataSource; +begin + Column:=TPopUpColumn(GetComponent(0)); + if not (Column is TPopUpColumn) then exit; + DataSource := TPopUpFormColumns(Column.Collection).PopUpFormOptions.DataSource; + if Assigned(DataSource) and Assigned(DataSource.DataSet) then + DataSource.DataSet.GetFieldNames(Values); +end; + +type + + { THistoryButtonProperty } + + THistoryButtonProperty = class(TStringPropertyEditor) + public + function GetAttributes: TPropertyAttributes; override; + procedure GetValues(Proc: TGetStrProc); override; + end; + + + +{ THistoryButtonProperty } + +function THistoryButtonProperty.GetAttributes: TPropertyAttributes; +begin + Result:= [paValueList, paSortList, paMultiSelect]; +end; + +procedure THistoryButtonProperty.GetValues(Proc: TGetStrProc); +var + I: Integer; + Navigator:TRxHistoryNavigator; +begin + Navigator:=TRxHistoryNavigator(GetComponent(0)); + if Assigned(Navigator) then + begin + if Assigned(Navigator.ToolPanel) then + begin + for i:=0 to Navigator.ToolPanel.Items.Count - 1 do + begin + if Assigned(Navigator.ToolPanel.Items[i].Action) then + Proc(Navigator.ToolPanel.Items[i].Action.Name); + end; + end; + end; +end; + +{$IFDEF USE_TRxAppIcon} +procedure RegisterRxAppIcon; +begin + RegisterComponents(RxCtrllPageName,[TRxAppIcon]); +end; +{$ENDIF} +{$IFDEF USE_TRXXPManifest} +procedure RegisterRxXPMan; +begin + RegisterComponents(RxCtrllPageName,[TRXXPManifest]); +end; +{$ENDIF} + +procedure RegisterPageMngr; +begin + RegisterComponents(RxCtrllPageName,[TPageManager]); +end; + + +procedure RegisterDualList; +begin + RegisterComponents(RxCtrllPageName,[TDualListDialog]); +end; + +procedure RegisterCurrEdit; +begin + RegisterComponents(RxCtrllPageName,[TCurrencyEdit]); +end; + +procedure RegisterRXSwitch; +begin + RegisterComponents(RxCtrllPageName,[TRxSwitch]); +end; + +procedure RegisterRXDice; +begin + RegisterComponents(RxCtrllPageName,[TRxDice]); +end; + +procedure RegisterFolderLister; +begin + RegisterComponents(RxCtrllPageName,[TFolderLister]); +end; + +procedure RegisterRxToolBar; +begin + RegisterComponents(RxCtrllPageName,[TToolPanel]); +end; + +procedure RegisterRxCtrls; +begin + RegisterComponents(RxCtrllPageName,[TRxLabel, TSecretPanel, TRxSpeedButton, TRxRadioGroup]); +end; + + +procedure RegisterChartPanel; +begin + RegisterComponents(RxCtrllPageName,[TRxChart]); +end; + +procedure RegisterAutoPanel; +begin + RegisterComponents(RxCtrllPageName,[TAutoPanel]); +end; + +procedure RegisterPickDate; +begin + RegisterComponents(RxCtrllPageName,[TRxCalendarGrid]); +end; + +procedure RegisterToolEdit; +begin + RegisterComponents(RxCtrllPageName,[TRxDateEdit]); +end; + +procedure RegisterRxClock; +begin + RegisterComponents(RxCtrllPageName,[TRxClock]); +end; + +procedure RegisterRxSpin; +begin + RegisterComponents(RxCtrllPageName,[TRxSpinButton, TRxSpinEdit]); +end; + +procedure RegisterRxTimeEdit; +begin + RegisterComponents(RxCtrllPageName,[TRxTimeEdit]); +end; + +procedure RegisterRxAboutDialog; +begin + RegisterComponents(RxCtrllPageName,[TRxAboutDialog]); +end; + +procedure RegisterRxViewsPanel; +begin + RegisterComponents(RxCtrllPageName,[TRxViewsPanel]); +end; + +procedure RegisterRxMDI; +begin + RegisterComponents(RxCtrllPageName,[TRxMDICloseButton, TRxMDIPanel, TRxMDITasks]); +end; + +procedure RegisterRxHistoryNavigator; +begin + RegisterComponents('RX Tools',[TRxHistoryNavigator]); +end; + +procedure Register; +begin + //RX + RegisterUnit('folderlister', @RegisterFolderLister); + RegisterUnit('duallist', @RegisterDualList); + RegisterUnit('curredit', @RegisterCurrEdit); + RegisterUnit('rxswitch', @RegisterRXSwitch); + RegisterUnit('rxdice', @RegisterRXDice); + {$IFDEF USE_TRXXPManifest} + RegisterUnit('RxXPMan', @RegisterRxXPMan); + {$ENDIF} + RegisterUnit('PageMngr', @RegisterPageMngr); + RegisterUnit('rxtoolbar', @RegisterRxToolBar); + {$IFDEF USE_TRxAppIcon} + RegisterUnit('rxappicon', @RegisterRxAppIcon); + {$ENDIF} + RegisterUnit('rxctrls', @RegisterRxCtrls); + RegisterUnit('RxCustomChartPanel', @RegisterChartPanel); + RegisterUnit('AutoPanel', @RegisterAutoPanel); + RegisterUnit('pickdate', @RegisterPickDate); + RegisterUnit('tooledit', @RegisterToolEdit); + RegisterUnit('rxclock', @RegisterRxClock); + RegisterUnit('rxspin', @RegisterRxSpin); + RegisterUnit('RxTimeEdit', @RegisterRxTimeEdit); + RegisterUnit('RxAboutDialog', @RegisterRxAboutDialog); + RegisterUnit('RxViewsPanel', @RegisterRxViewsPanel); + RegisterUnit('RxHistoryNavigator', @RegisterRxHistoryNavigator); + RegisterUnit('RxMDI', @RegisterRxMDI); + + + +// + RegisterPropertyEditor(TypeInfo(string), TPopUpColumn, 'FieldName', TPopUpColumnFieldProperty); + RegisterPropertyEditor(TypeInfo(string), TRxHistoryNavigator, 'BackBtn', THistoryButtonProperty); + RegisterPropertyEditor(TypeInfo(string), TRxHistoryNavigator, 'ForwardBtn', THistoryButtonProperty); + RegisterCEEditLookupFields; +end; + +initialization + {$i rx.lrs} +end. diff --git a/components/rx/version/2.1/registerrxdb.pas b/components/rx/version/2.1/registerrxdb.pas new file mode 100644 index 000000000..c6b9a3a66 --- /dev/null +++ b/components/rx/version/2.1/registerrxdb.pas @@ -0,0 +1,164 @@ +{ RegisterRxDB unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RegisterRxDB; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, LazarusPackageIntf; + +procedure Register; +implementation +uses DB, DBPropEdits, rxdbgrid, RxDBSpinEdit, RxDBTimeEdit, RxDBCtrls, rxmemds, + ComponentEditors, seldsfrm, PropEdits, RxDBColorBox, dbdateedit, rxdbcomb, + rxlookup, dbcurredit; + +type + +{ TRxDBGridFieldProperty } + TRxDBGridFieldProperty = class(TFieldProperty) + public + procedure FillValues(const Values: TStringList); override; + end; + +{ TRxDBGridFieldProperty } + +procedure TRxDBGridFieldProperty.FillValues(const Values: TStringList); +var + Column: TRxColumn; + Grid: TRxDBGrid; + DataSource: TDataSource; +begin + Column:=TRxColumn(GetComponent(0)); + if not (Column is TRxColumn) then exit; + Grid:=TRxDBGrid(Column.Grid); + if not (Grid is TRxDBGrid) then exit; + DataSource := Grid.DataSource; + if Assigned(DataSource) and Assigned(DataSource.DataSet) then + DataSource.DataSet.GetFieldNames(Values); +end; + +type +{ TRxDBGridFooterFieldProperty } + TRxDBGridFooterFieldProperty = class(TFieldProperty) + public + procedure FillValues(const Values: TStringList); override; + end; + +{ TRxDBGridFieldProperty } + +procedure TRxDBGridFooterFieldProperty.FillValues(const Values: TStringList); +var + Footer: TRxColumnFooter; + Grid: TRxDBGrid; + DataSource: TDataSource; +begin + Footer:=TRxColumnFooter(GetComponent(0)); + Grid:=TRxDBGrid(Footer.Owner.Grid); + if not (Grid is TRxDBGrid) then exit; + DataSource := Grid.DataSource; + if Assigned(DataSource) and Assigned(DataSource.DataSet) then + DataSource.DataSet.GetFieldNames(Values); +end; + + +procedure RegisterRxDBSpinEdit; +begin + RegisterComponents('RX DBAware',[TRxDBSpinEdit]); +end; + +procedure RegisterRxDBTimeEdit; +begin + RegisterComponents('RX DBAware',[TRxDBTimeEdit]); +end; + +procedure RegisterRxDBCtrls; +begin + RegisterComponents('RX DBAware',[TRxDBProgressBar, TRxDBTrackBar, TRxDBRadioGroup]); +end; + +procedure RegisterRxDbGrid; +begin + RegisterComponents('RX DBAware',[TRxDBGrid]); +end; + +procedure RegisterRxMemDS; +begin + RegisterComponents('RX DBAware',[TRxMemoryData]); +end; + +procedure RegisterRxDBColorBox; +begin + RegisterComponents('RX DBAware',[TRxDBColorBox]); +end; + +procedure RegisterUnitDBDateEdit; +begin + RegisterComponents('RX DBAware',[TDBDateEdit, TRxDBCalcEdit, TRxDBCurrEdit]); +end; + +procedure RegisterRXLookup; +begin + RegisterComponents('RX DBAware',[TRXLookupEdit, TRxDBLookupCombo]); +end; + +procedure RegisterRxDBComb; +begin + RegisterComponents('RX DBAware',[TRxDBComboBox]); +end; + +procedure Register; +begin + //RX DBAware + RegisterUnit('dbdateedit', @RegisterUnitDBDateEdit); + RegisterUnit('rxlookup', @RegisterRXLookup); + RegisterUnit('rxdbcomb', @RegisterRxDBComb); + + RegisterUnit('RxDBTimeEdit', @RegisterRxDBTimeEdit); + RegisterUnit('RxDBSpinEdit', @RegisterRxDBSpinEdit); + RegisterUnit('RxDBCtrls', @RegisterRxDBCtrls); + RegisterUnit('rxdbgrid', @RegisterRxDbGrid); + RegisterUnit('rxmemds', @RegisterRxMemDS); + RegisterUnit('RxDBColorBox', @RegisterRxDBColorBox); + + //Component Editors + RegisterComponentEditor(TRxMemoryData, TMemDataSetEditor); + + // + RegisterPropertyEditor(TypeInfo(string), TRxColumn, 'FieldName', TRxDBGridFieldProperty); + RegisterPropertyEditor(TypeInfo(string), TRxColumnFooter, 'FieldName', TRxDBGridFooterFieldProperty); +end; + +end. + diff --git a/components/rx/version/2.1/registerrxtools.pas b/components/rx/version/2.1/registerrxtools.pas new file mode 100644 index 000000000..069778a24 --- /dev/null +++ b/components/rx/version/2.1/registerrxtools.pas @@ -0,0 +1,84 @@ +{ RegisterRxTools unit + + Copyright (C) 2005-2013 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RegisterRxTools; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, LazarusPackageIntf; + +procedure Register; + +implementation +uses RxSystemServices, RxLogin, RxVersInfo, RxCloseFormValidator, RxIniPropStorage; + +const + sRxToolsPage = 'RX Tools'; + +procedure RegisterRxSystemServices; +begin + RegisterComponents(sRxToolsPage, [TRxSystemServices]); +end; + +procedure RegisterRxLogin; +begin + RegisterComponents(sRxToolsPage, [TRxLoginDialog]); +end; + +procedure RegisterRxVersInfo; +begin + RegisterComponents(sRxToolsPage, [TRxVersionInfo]); +end; + +procedure RegisterCloseFormValidator; +begin + RegisterComponents(sRxToolsPage,[TRxCloseFormValidator]); +end; + +procedure RegisterRxIniPropStorage; +begin + RegisterComponents(sRxToolsPage,[TRxIniPropStorage]); +end; + +procedure Register; +begin + RegisterUnit('RxLogin', @RegisterRxLogin); + RegisterUnit('RxVersInfo', @RegisterRxVersInfo); + RegisterUnit('RxSystemServices', @RegisterRxSystemServices); + RegisterUnit('RxCloseFormValidator', @RegisterCloseFormValidator); + RegisterUnit('RxIniPropStorage', @RegisterRxIniPropStorage); +end; + +end. + diff --git a/components/rx/version/2.1/rx.inc b/components/rx/version/2.1/rx.inc new file mode 100644 index 000000000..8af052e04 --- /dev/null +++ b/components/rx/version/2.1/rx.inc @@ -0,0 +1,62 @@ +{ global include module + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +{$mode objfpc} + +{$H+} + +{$DEFINE RX_D3} +{$DEFINE RX_D4} +{$DEFINE HASVARIANT} +{.$DEFINE ENABLE_Child_Defs} +{$DEFINE NEW_STYLE_TITLE_ALIGNMENT_RXDBGRID} +{.$DEFINE RXDBGRID_OPTIONS_WO_CANCEL_ON_EXIT} +{.$DEFINE USED_BiDi} +{$DEFINE DEFAULT_POPUP_CALENDAR} +{.$DEFINE FIX_TRxMemoryData_Filter} +{.$DEFINE FIX_BUG_FieldNo} + +{.DEFINE USE_TRXXPManifest} +{.$DEFINE USE_TRxAppIcon} + +{.$DEFINE USE_DEPRECATES} + +// +{.$DEFINE DBDateEdit_OLD} + +{$if FPC_FULLVERSION<20701} + {$DEFINE NoAutomatedBookmark} +{$endif} + +{$IFDEF NoAutomatedBookmark} +{$ELSE} +{$ENDIF} + diff --git a/components/rx/version/2.1/rx.lrs b/components/rx/version/2.1/rx.lrs new file mode 100644 index 000000000..8cca9dd79 --- /dev/null +++ b/components/rx/version/2.1/rx.lrs @@ -0,0 +1,785 @@ +LazarusResources.Add('TDBDateEdit','XPM',[ + '/* XPM */'#10'static char *TDBDateEdit[]={'#10'"18 18 8 1",'#10'"# c None",' + +#10'"e c #000000",'#10'"c c #000080",'#10'"d c #0000ff",'#10'"f c #800000",' + +#10'". c #808080",'#10'"a c #c0c0c0",'#10'"b c #ffffff",'#10'"..............' + +'.###",'#10'".a.baaaabaaaaa.###",'#10'"...............###",'#10'".a.bbbbabbb' + +'bbb.###",'#10'".b.baababaaaab.###",'#10'".a.bbcccccccccccc#",'#10'".b.bacdd' + +'dcdddcddce",'#10'".a.bbcccccccccccce",'#10'".b.bacbbbbbbbbbbce",'#10'".a.bb' + +'cbbfbbffffbce",'#10'".....cbffbbfbbbbce",'#10'"#####cbbfbbfffabce",'#10'"##' + +'###cbbfbbbbbfbce",'#10'"#####cbbfbbabafbce",'#10'"#####cbfffbfffabce",'#10 + +'"#####cbbbbbbbbbbce",'#10'"#####cccccccccccce",'#10'"######eeeeeeeeeeee"};' + +#10 +]); +LazarusResources.Add('TRXLookUpEdit','XPM',[ + '/* XPM */'#10'static char *TRXLookUpEdit[]={'#10'"24 24 7 1",'#10'". c None"' + +','#10'"# c #000000",'#10'"e c #800000",'#10'"c c #808080",'#10'"d c #c0c0c0' + +'",'#10'"b c #ff0000",'#10'"a c #ffffff",'#10'"..##....................",'#10 + +'".#aa#b..ccccccccccccccc.",'#10'"#daaa#b.cdcaddddadddddc.",'#10'"#ddaaa#.cc' + +'ccccccccccccc.",'#10'".#ddaaa##dcaaaadaaaaaac.",'#10'"..#ddaaaa###ddadadddd' + +'ac.",'#10'"...#ddaabbbb#aadaaaaaac.",'#10'"....#ddebbb#ddadadddaac.",'#10'"' + +'....#ceeeb#aaaadaaaaaac.",'#10'".....#eec#caddadaddddac.",'#10'".....#ec#dc' + +'aaaadaaaaaac.",'#10'".....#e#ccccccccccccccc.",'#10'"......#...............' + +'..",'#10'"..ccccccccccccccccccccc.",'#10'"..c###################a.",'#10'".' + +'.c#aaaaaaaaaadaaaaaada.",'#10'"..c#aaaaaaaaaadaddddcda.",'#10'"..c#aaaaaaaa' + +'aadad##dcda.",'#10'"..c#aaaaaaaaaadaddddcda.",'#10'"..c#aaaaaaaaaadacccccda' + +'.",'#10'"..c#dddddddddddddddddda.",'#10'"..caaaaaaaaaaaaaaaaaaaa.",'#10'"..' + +'......................",'#10'"........................"};'#10 +]); +LazarusResources.Add('TRxDBCalcEdit','XPM',[ + '/* XPM */'#10'static char *TRxDBCalcEdit_xpm[]={'#10'"18 18 8 1",'#10'"# c N' + +'one",'#10'"e c #000000",'#10'"f c #000080",'#10'"c c #008080",'#10'"d c #00' + +'ffff",'#10'". c #808080",'#10'"a c #c0c0c0",'#10'"b c #ffffff",'#10'"......' + +'.........###",'#10'".a.baaaabaaaaa.###",'#10'"...............###",'#10'".a.' + +'bbbbabbbbbb.###",'#10'".b.baababaaaab.###",'#10'".a.bbbbabbbbbb.###",'#10'"' + +'.bbcccccccccccccc#",'#10'".acbdbdbdbdbdbdbce",'#10'".bcdeeeeeeeeccccfe",'#10 + +'".acbebbbbbbaccccfe",'#10'"..cdeaaaaaaaccccfe",'#10'"##cbccccccccccccfe",' + +#10'"##cdcebebebebebefe",'#10'"##cbccccccccccccfe",'#10'"##cdcebebebebbaefe"' + +','#10'"##cbccccccccccccfe",'#10'"##ccfffffffffffffe",'#10'"###eeeeeeeeeeeee' + +'e#"};'#10 +]); +LazarusResources.Add('TRxDBLookupCombo','XPM',[ + '/* XPM */'#10'static char *TRxDBLookupCombo[]={'#10'"24 24 8 1",'#10'". c No' + +'ne",'#10'"# c #000000",'#10'"c c #000080",'#10'"e c #800000",'#10'"f c #808' + +'080",'#10'"d c #c0c0c0",'#10'"b c #ff0000",'#10'"a c #ffffff",'#10'"..##...' + +'.................",'#10'".#aa#b.........c........",'#10'"#daaa#b.......cc..' + +'......",'#10'"#ddaaa#......cccccccc...",'#10'".#ddaaa##.....cc.....c..",'#10 + +'"..#ddaaaa###...c.....c..",'#10'"...#ddaabbbb#........c..",'#10'"....#ddebb' + +'b#.........c..",'#10'"..c.#feeeb#d###########.",'#10'"..c..#eef#daaaaaaa#aa' + +'d#.",'#10'"..c..#ef#dccccccca#a#d#.",'#10'"..c..#e#daaaaaaaaa#ddd#.",'#10'"' + +'..c...#.###############.",'#10'"..c.....#aaaaaaaaaaaaa#.",'#10'"..c.....#ac' + +'ccccccccaaa#.",'#10'"..c.c...#ccccccccccccc#.",'#10'"..c.cc..#caaaaaaaaaacc' + +'#.",'#10'"...cccc.#ccccccccccccc#.",'#10'"....cc..#acccccccccaaa#.",'#10'".' + +'...c...#aaaaaaaaaaaaa#.",'#10'"........#accccccccccaa#.",'#10'"........#aaa' + +'aaaaaaaaaa#.",'#10'"........###############.",'#10'".......................' + +'."};'#10 +]); +LazarusResources.Add('TRxDBGrid','XPM',[ + '/* XPM */'#10'static char *TRxDBGrid[]={'#10'"24 24 10 1",'#10'". c None",' + +#10'"c c #000000",'#10'"f c #008000",'#10'"e c #00ffff",'#10'"g c #800080",' + +#10'"# c #808080",'#10'"a c #c0c0c0",'#10'"d c #ff0000",'#10'"h c #ff00ff",' + +#10'"b c #ffffff",'#10'"........................",'#10'".###############....' + +'....",'#10'".#a#baaaabaaaaa#........",'#10'".###############........",'#10 + +'".#a#bbbbabbbbbb#........",'#10'".#b#baababaaaab#........",'#10'".#a#bbbbab' + +'bbbbb#........",'#10'".#b#baababaaabb#........",'#10'".#a#bbbbabbbbbb#.....' + +'...",'#10'".#b#baababaaaab#........",'#10'".#a#bcccccccccccccccccc.",'#10'"' + +'.####cacbaaaaabaaaaaaac.",'#10'".....cccccccccccccccccc.",'#10'".....cacbbb' + +'bbabbbbbbbbc.",'#10'".....cbcaaaaaaaaaaaaaac.",'#10'".....cacbbbbbabbbbbbbb' + +'c.",'#10'".....ccccdddddddddddddc.",'#10'".....cbebcbbbabbbbbbbbc.",'#10'".' + +'cccccebecddddddddddddc.",'#10'".cfffcbebccbbabbbbbbbbc.",'#10'".cfffcccccgc' + +'aaaaaaaaaac.",'#10'".cfffcbcbchgcabbbbbbbbc.",'#10'".cccccccccghgcccccccccc' + +'.",'#10'".........cccccc........."};'#10 +]); +LazarusResources.Add('TDualListDialog','XPM',[ + '/* XPM */'#10'static char *TDualListDialog[]={'#10'"24 24 7 1",'#10'". c Non' + +'e",'#10'"b c #000000",'#10'"e c #000080",'#10'"c c #0000ff",'#10'"# c #8080' + +'80",'#10'"d c #c0c0c0",'#10'"a c #ffffff",'#10'"........................",' + +#10'"........................",'#10'".######################.",'#10'".#abccc' + +'cccccccccccbabab.",'#10'".#bbbbbbbbbbbbbbbbbbbbb.",'#10'".#dadadadadadadada' + +'dadab.",'#10'".#adadadadadadadadadadb.",'#10'".#dbbbbadad#dadbbbbadab.",'#10 + +'".#abaabbadab#dabaabbadb.",'#10'".#dbaabdbadbb#dbaabdbab.",'#10'".#abaabbbd' + +'abbdabaabbbdb.",'#10'".#dbaaaabadbdadbaaaabab.",'#10'".#abaeeabdadadabaeeab' + +'db.",'#10'".#dbaaaabadabadbaaaabab.",'#10'".#abaeeabdabbdabaeeabdb.",'#10'"' + +'.#dbaaaaba#bbadbaaaabab.",'#10'".#abaaaabda#bdabaaaabdb.",'#10'".#dbbbbbbad' + +'a#adbbbbbbab.",'#10'".#adadadadadadadadadadb.",'#10'".#dadadadadadadadadada' + +'b.",'#10'".#adadadadadadadadadadb.",'#10'".#bbbbbbbbbbbbbbbbbbbbb.",'#10'".' + +'.......................",'#10'"........................"};'#10 +]); +LazarusResources.Add('TFolderLister','XPM',[ + '/* XPM */'#10'static char *TFolderLister[]={'#10'"24 24 8 1",'#10'". c None"' + +','#10'"a c #000000",'#10'"c c #808080",'#10'"# c #848484",'#10'"f c #c0c0c0' + +'",'#10'"e c #c6c6c6",'#10'"b c #ffff00",'#10'"d c #ffffff",'#10'"....#a#...' + +'..............",'#10'".#a#aba#a#..............",'#10'".ab#aba#ba...ccc.....' + +'...",'#10'".##bbbbb##..cdddcc......",'#10'"#aab#a#baa#cddddddcc....",'#10'"' + +'abbbadabbbaddddddddda...",'#10'"#aab#a#baa#dddddddda....",'#10'"a##bbbbb##a' + +'ddddddda.....",'#10'"eab#aba#baeddddddadcc...",'#10'".#a#aba#a#dddddddaddda' + +'..",'#10'"....#a#dddddddddaddda...",'#10'"....cdfbaaddddddadda....",'#10'".' + +'...cdbfbfaadddadda.....",'#10'"....cdfbfcddaadadda.....",'#10'"...ccccccccc' + +'ccccdaa.....",'#10'"...cddddddddddcadaa.....",'#10'"...cdfbfbfbfbfbacca....' + +'.",'#10'"....cdfbfbfbfbfcaca.....",'#10'"....cdbfbfbfbfbfaca.....",'#10'"..' + +'...cdbfbfbfbfbcaa.....",'#10'".....ccccccccccccaa.....",'#10'"......aaaaaaa' + +'aaaaaa.....",'#10'"........................",'#10'"........................' + +'"};'#10 +]); +LazarusResources.Add('TRxMemoryData','XPM',[ + '/* XPM */'#10'static char *TRxMemoryData[]={'#10'"24 24 6 1",'#10'". c None"' + +','#10'"# c #000000",'#10'"c c #000080",'#10'"d c #808080",'#10'"a c #c0c0c0' + +'",'#10'"b c #ffffff",'#10'"........................",'#10'"################' + +'####....",'#10'"#a#baaaaaabaaaaaaaa#....",'#10'"####################....",' + +#10'"#a#bbbbbbabbbbbbbbb#....",'#10'"#b#bccccbabcccccccb#....",'#10'"#a#bbbb' + +'bbabbbbbbbbb#....",'#10'"#b#bccccbabccccccbb#....",'#10'"#a#bbbbbbabbbbbbbb' + +'b#....",'#10'"#b#bccccbabccccccbb#....",'#10'"#a#bbbbbbabbbbbbb###....",'#10 + +'"#b#bccccbabcbbb#daa#....",'#10'"#a#bbbbbbabbb#daaaaa#...",'#10'"#b#bccccba' + +'b#daaaaaaaa#..",'#10'"#a#bbbbbb#daaaaaaaaaad#.",'#10'"#b#bcccbdaaaaaaaaaadd' + +'d#.",'#10'"#a#bbbbdbaaaaaaaaddd#a#.",'#10'"########abaaaaaddd#ad#..",'#10'"' + +'........#dbaaddd#ad#.#..",'#10'".........#dbdd#ad#.#....",'#10'"..........#' + +'a#ad#.#......",'#10'"...........#d#.#........",'#10'".............#........' + +'..",'#10'"........................"};'#10 +]); +LazarusResources.Add('TCURRENCYEDIT','XPM',[ + '/* XPM */'#10'static char *TCURRENCYEDIT[]={'#10'"24 24 6 1",'#10'". c None"' + +','#10'"a c #000000",'#10'"d c #0000ff",'#10'"# c #808080",'#10'"c c #c0c0c0' + +'",'#10'"b c #ffffff",'#10'"........................",'#10'"................' + +'........",'#10'"........................",'#10'"........................",' + +#10'"#######################.",'#10'"#aaaaaaaaaaaaaaaaaaaaab.",'#10'"#abbbbb' + +'bbbbbbbbbbbbbbcb.",'#10'"#abbbbbbbbbbbbbaabaabcb.",'#10'"#abbbbbbbbbbbbbbba' + +'bbbcb.",'#10'"#abbbbdbbbbbdbbbbabbbcb.",'#10'"#abbbddddbbddbbbbabbbcb.",'#10 + +'"#abbdbdbbbbbdbbbbabbbcb.",'#10'"#abbbdddbbbbdbbbbabbbcb.",'#10'"#abbbbdbdb' + +'bbdbbbbabbbcb.",'#10'"#abbddddbbbbdbbbbabbbcb.",'#10'"#abbbbdbbbbdddbbbabbb' + +'cb.",'#10'"#abbbbbbbbbbbbbaabaabcb.",'#10'"#abbbbbbbbbbbbbbbbbbbcb.",'#10'"' + +'#accccccccccccccccccccb.",'#10'"#bbbbbbbbbbbbbbbbbbbbbb.",'#10'"...........' + +'.............",'#10'"........................",'#10'"......................' + +'..",'#10'"........................"};'#10 +]); +LazarusResources.Add('TRXSWITCH','XPM',[ + '/* XPM */'#10'static char *TRXSWITCH[]={'#10'"24 24 5 1",'#10'". c None",'#10 + +'"# c #000000",'#10'"b c #808080",'#10'"c c #ff0000",'#10'"a c #ffffff",'#10 + +'"........................",'#10'"........................",'#10'".....#####' + +'#########.....",'#10'".....##############.....",'#10'".....###aaaaaaa#b##..' + +'...",'#10'".....##aaaaaaa#bb##.....",'#10'".....#aaaaaaa#bbb##.....",'#10'"' + +'.....#########bbb##.....",'#10'".....#aaaaaaa#bbb##.....",'#10'".....#aaaaa' + +'aaa#bb##.....",'#10'".....##aaaaaaa#bb##.....",'#10'".....##aaaaaaaa#b##...' + +'..",'#10'".....###########b##.....",'#10'".....##aaaaaaaa#b##.....",'#10'".' + +'....##a######a#b##.....",'#10'".....##a#cccc#a#b##.....",'#10'".....##a####' + +'##a#b##.....",'#10'".....##aaaaaaaa#b##.....",'#10'".....###########b##....' + +'.",'#10'".....###bbbbbbbb###.....",'#10'".....##############.....",'#10'"..' + +'...##############.....",'#10'"........................",'#10'".............' + +'..........."};'#10 +]); +LazarusResources.Add('TRXDICE','XPM',[ + '/* XPM */'#10'static char *TRXDICE[]={'#10'"24 24 4 1",'#10'". c None",'#10 + +'"# c #000000",'#10'"b c #c0c0c0",'#10'"a c #ffffff",'#10'".................' + +'.......",'#10'"........................",'#10'"........................",' + +#10'"...........##...........",'#10'".........##aa##.........",'#10'".......' + +'##aa##aa##.......",'#10'".....##aaaa##aaaa##.....",'#10'"...##aaaaaaaaaaaaa' + +'a##...",'#10'"...#b##aaaa##aaaa##a#...",'#10'"...#bbb##aa##aa##aaa#...",'#10 + +'"...#bbbbb##aa##aa##a#...",'#10'"...#bbbbbbb##aaaa##a#...",'#10'"...#bbbbbb' + +'b#a##aaaaa#...",'#10'"...#bbb##bb#a##aaaaa#...",'#10'"...#bbb##bb#aaaaaaaa#' + +'...",'#10'"...#bbbbbbb#aaaaa##a#...",'#10'"...#bbbbbbb#aaaaa##a#...",'#10'"' + +'...##bbbbbb#a##aaaa##...",'#10'".....##bbbb#a##aa##.....",'#10'".......##bb' + +'#aaa##.......",'#10'".........###a##.........",'#10'"...........##.........' + +'..",'#10'"........................",'#10'"........................"};'#10 +]); +LazarusResources.Add('TRXDBCOMBOBOX','XPM',[ + '/* XPM */'#10'static char *TRXDBCOMBOBOX[]={'#10'"24 24 6 1",'#10'". c None"' + +','#10'"c c #000000",'#10'"d c #000080",'#10'"# c #808080",'#10'"a c #c0c0c0' + +'",'#10'"b c #ffffff",'#10'"........................",'#10'".###############' + +'........",'#10'".#a#baaaabaaaaa#........",'#10'".###############........",' + +#10'".#a#bbbbabbbbbb#........",'#10'".#b#baababaaaab#........",'#10'".#a#bbb' + +'babbbbbb#........",'#10'".#b#baababaaabb#........",'#10'".#a#bbcccccccccccc' + +'ccccc.",'#10'".#b#bacbbbbbbbbbbbcbbac.",'#10'".#a#bbcbdddddddddbcbcac.",'#10 + +'".#####cbbbbbbbbbbbcaaac.",'#10'"......ccccccccccccccccc.",'#10'"...d....cb' + +'bbbbbbbbbbbbc.",'#10'"..ddd...cbbddddddddbbbc.",'#10'".ddddd..cdddddddddddd' + +'dc.",'#10'"...d....cddbbbbbbbbbddc.",'#10'"...d....cdddddddddddddc.",'#10'"' + +'...d....cbbddddddddbbbc.",'#10'"...d....cbbbbbbbbbbbbbc.",'#10'"...dddd.cbb' + +'dddddddddbbc.",'#10'"........cbbbbbbbbbbbbbc.",'#10'"........cccccccccccccc' + +'c.",'#10'"........................"};'#10 +]); +LazarusResources.Add('ttoolpanel','XPM',[ + '/* XPM */'#10'static char *TToolPanel[]={'#10'"24 24 10 1",'#10'". c None",' + +#10'"# c #000000",'#10'"h c #000080",'#10'"d c #0000ff",'#10'"f c #008000",' + +#10'"b c #808080",'#10'"c c #c0c0c0",'#10'"e c #ff0000",'#10'"g c #ff00ff",' + +#10'"a c #ffffff",'#10'"........................",'#10'"####################' + +'####",'#10'"aaaaab#aaaaab#aaaaab#ccc",'#10'"accccb#accccb#accccb#ccc",'#10 + +'"adeecb#afffcb#a#eecb#ccc",'#10'"adddcb#afggcb#ahhhcb#ccc",'#10'"accccb#acc' + +'ccb#accccb#ccc",'#10'"bbbbbb#bbbbbb#bbbbbb#ccc",'#10'"#####################' + +'###",'#10'"....................dd..",'#10'".#################.dddd.",'#10'"' + +'.#a#ddddddddd#a#a#dddddd",'#10'".#################..dd..",'#10'".#ccccccccc' + +'cccccc#..dd..",'#10'".#c####c#######cc#..dd..",'#10'".#c#aa#c#aaaaa#cc#..dd' + +'..",'#10'".#c#aa#c#aaaaa#cc#..dd..",'#10'".#c#aa#c#aaaaa#ddddddd..",'#10'".' + +'#c#aa#c#aaaaa#ddddddd..",'#10'".#c#aa#c#aaaaa#cc#......",'#10'".#c####c####' + +'###cc#......",'#10'".#ccccccccccccccc#......",'#10'".#################.....' + +'.",'#10'"........................"};'#10 +]); +LazarusResources.Add('trxxpmanifest','XPM',[ + '/* XPM */'#10'static char *trxxpmanifest[]={'#10'"24 24 9 1",'#10'". c None"' + +','#10'"# c #000000",'#10'"c c #000080",'#10'"a c #00ff00",'#10'"e c #9d9da1' + +'",'#10'"g c #e0dfe3",'#10'"b c #ff0000",'#10'"d c #ffff00",'#10'"f c #fffff' + +'f",'#10'"........................",'#10'"........................",'#10'"..' + +'..##...##.####........",'#10'".....##.##..#####.......",'#10'"......###...#' + +'#.##.......",'#10'"......###...#####.......",'#10'".....#####..####........' + +'",'#10'".....##.##..##..........",'#10'"....##...##.##..........",'#10'"...' + +'.....................",'#10'".####################...",'#10'".#aaaaaaaaaaaa' + +'#b#c#d#e..",'#10'".####################e..",'#10'".#ffffffffffffffffff#e.."' + +','#10'".#ffffffffffffffffff#e..",'#10'".#ffffffffffffffffff#e..",'#10'".#ff' + +'ffffffffffffffff#e..",'#10'".#ffffggggggfggggggf#e..",'#10'".#ffffgffff#fgf' + +'fff#f#e..",'#10'".#ffffg#####fg#####f#e..",'#10'".#ffffffffffffffffff#e..",' + +#10'".####################e..",'#10'"..eeeeeeeeeeeeeeeeeeee..",'#10'".......' + +'................."};'#10 +]); +LazarusResources.Add('TPAGEMANAGER','XPM',[ + '/* XPM */'#10'static char *TPAGEMANAGER[]={'#10'"24 24 8 1",'#10'". c None",' + +#10'"b c #000000",'#10'"c c #000080",'#10'"f c #00ffff",'#10'"d c #800000",' + +#10'"# c #808080",'#10'"e c #ffff00",'#10'"a c #ffffff",'#10'"..............' + +'..........",'#10'"........................",'#10'".........##############."' + +','#10'".........#aaaaaaaaaaaab.",'#10'".......##############ab.",'#10'"....' + +'...#aaaaaaaaaaaabab.",'#10'".....##############abab.",'#10'".....#aaaaaaaaa' + +'aaababab.",'#10'".....#acccccaddddababab.",'#10'".....#aaaaaaadaadababab.",' + +#10'".....#accccaadaadababab.",'#10'".....#aaaaaaadaadababab.",'#10'".....#a' + +'bbbaaaddddababab.",'#10'".bbbbbbeaebaaaaaaababbb.",'#10'".bbbfbeabbbbbbbbaa' + +'bab...",'#10'".bbbfbaeaeaeaeaebabbb...",'#10'".bbbfbeaeabbbbbbaab.....",'#10 + +'".bbbfbaeaeaeab###bb.....",'#10'".bbbfbeaeabbb...........",'#10'".bbbfbbeae' + +'aeb...........",'#10'".bebbb.bbbbb............",'#10'".bbb.................' + +'...",'#10'"........................",'#10'"........................"};'#10 +]); +LazarusResources.Add('TRXAPPICON','XPM',[ + '/* XPM */'#10'static char *TRXAPPICON[]={'#10'"24 24 9 1",'#10'". c None",' + +#10'"a c #000000",'#10'"f c #800000",'#10'"c c #808000",'#10'"e c #808080",' + +#10'"g c #c0c0c0",'#10'"# c #ff0000",'#10'"d c #ffff00",'#10'"b c #ffffff",' + +#10'"...........###..##...##.",'#10'"............#..#..#.#..#",'#10'".......' + +'.a...#..#....#..#",'#10'"......aabaa.#..#....#..#",'#10'"....aabbcdda#..#..' + +'#.#..#",'#10'"..aabbccccc###..##...##.",'#10'".abbddddddddddda........",'#10 + +'".aaaaaaaaaaaaaaa..##b...",'#10'".abddeebddeebdda...##b..",'#10'"..cceeecce' + +'eeccc....###b.",'#10'"..cbebbcbebbcbc.####d#..",'#10'"..cdebbcdebbcee##d##d' + +'#b.",'#10'"..cbebbcbebbcebfd#dd#b..",'#10'"..cdebbcdebbcebbfbb##...",'#10'"' + +'.adddaadddaadebgbf###b..",'#10'".aaaaaaaaaaaebbgegf#....",'#10'".adbdbdbdbd' + +'ebebegeea....",'#10'".aaaaaaaaaebebeeaaaa....",'#10'".........ebebeea......' + +'..",'#10'"........ebgbeea.........",'#10'"........agbeea..........",'#10'".' + +'.......aeeaa...........",'#10'".........aa.............",'#10'"............' + +'............"};'#10 +]); +LazarusResources.Add('TSECRETPANEL','XPM',[ + '/* XPM */'#10'static char *TSECRETPANEL[]={'#10'"24 24 11 1",'#10'". c None"' + +','#10'"# c #000000",'#10'"d c #000080",'#10'"i c #0000ff",'#10'"e c #008000' + +'",'#10'"g c #800000",'#10'"a c #808080",'#10'"b c #c0c0c0",'#10'"h c #ff000' + +'0",'#10'"f c #ffff00",'#10'"c c #ffffff",'#10'"........................",' + +#10'"........................",'#10'".######################.",'#10'".#aaaaa' + +'aaaaaaaaaaaaaab#.",'#10'".#aaaaaaaaaaaaaaaaaacc#.",'#10'".#aabbbbbbbbbbbbbb' + +'bbcc#.",'#10'".#aabbbbbd#dbbbbbbbbcc#.",'#10'".#aabbbbdefedbbbbbbbcc#.",'#10 + +'".#aabbbb#fff#aabbbbbcc#.",'#10'".#aabbbbdefedbb##bbbcc#.",'#10'".#aabbbbbd' + +'#dbbbggbbbcc#.",'#10'".#aabbbbabbbbb#hh#bbcc#.",'#10'".#aabbbbabbbbb#hh#bbc' + +'c#.",'#10'".#aabb#####bb#hhhh#bcc#.",'#10'".#aabb#iii#bb######bcc#.",'#10'"' + +'.#aabb#iii#aabbbbbbbcc#.",'#10'".#aabb#iii#bbbbbbbbbcc#.",'#10'".#aabb#####' + +'bbbbbbbbbcc#.",'#10'".#aabbbbbbbbbbbbbbbbcc#.",'#10'".#accccccccccccccccccc' + +'#.",'#10'".#bccccccccccccccccccc#.",'#10'".######################.",'#10'".' + +'.......................",'#10'"........................"};'#10 +]); +LazarusResources.Add('TRXLABEL','XPM',[ + '/* XPM */'#10'static char *TRXLABEL[]={'#10'"24 24 3 1",'#10'". c None",'#10 + +'"# c #000000",'#10'"a c #ffffff",'#10'"........................",'#10'"....' + +'....................",'#10'"........................",'#10'"...............' + +'.........",'#10'"........................",'#10'"........................",' + +#10'".........####aa.........",'#10'"..........####aa........",'#10'".......' + +'..#####aa........",'#10'".........##a###aa.......",'#10'"........##aa.##aa.' + +'......",'#10'"........##aa.###aa......",'#10'".......##aa...##aa......",'#10 + +'".......##########aa.....",'#10'"......##aaaaaaa##aa.....",'#10'"......##aa' + +'.....###aa....",'#10'".....##aa.......##aa....",'#10'"....####aa.....####aa' + +'...",'#10'".....aaaaa......aaaaa...",'#10'"........................",'#10'"' + +'........................",'#10'"........................",'#10'"...........' + +'.............",'#10'"........................"};'#10 +]); +LazarusResources.Add('tautopanel','XPM',[ + '/* XPM */ '#10'static const unsigned char * tautopanel_xpm[] = {'#10'"24 24 ' + +'5 1",'#10'" '#9'c None",'#10'"!'#9'c black",'#10'"#'#9'c #808080",'#10'"$'#9 + +'c white",'#10'"%'#9'c #FF0000",'#10'" ",'#10'" ' + +' ",'#10'" ################### ",'#10'" #$$$$$$$$$$$$$$' + +'$$$ $ ",'#10'" #$ #$ ",'#10'" #$ #$ ",' + +#10'" #$ #$ ",'#10'" #$%% #$ ",'#10'" #% %' + +' % #$ ",'#10'" #% % % #$ ",'#10'" #% % % % %%% ' + +' %%$ ",'#10'" #%%%% % % % % #% ",'#10'" #% % % % % % #% ",'#10 + +'" #% % % % % % #% ",'#10'" #% % % % % % #% ",'#10'" #% % %' + +'%% %% %%$ ",'#10'" #$ #$ ",'#10'" #$ #' + +'$ ",'#10'" #$ #$ ",'#10'" #$ #$ ",'#10'"' + +' # #################$ ",'#10'" $$$$$$$$$$$$$$$$$$$ ",'#10'" ' + +' ",'#10'" "};' +]); +LazarusResources.Add('TRxCalendarGrid','XPM',[ + '/* XPM */'#10'static char *TRxCalendarGrid[]={'#10'"24 24 5 1",'#10'". c Non' + +'e",'#10'"# c #000000",'#10'"a c #00ffff",'#10'"c c #800000",'#10'"b c #ffff' + +'ff",'#10'"........................",'#10'"........................",'#10'".' + +'.....###.....###.......",'#10'".....#...#...#...#......",'#10'"....########' + +'######......",'#10'"....#a#aaaaaaaa#a##.....",'#10'"....#aaaaaaaaaaaa##....' + +'.",'#10'"....###############.....",'#10'"....#bbbbbbbbbbbb##.....",'#10'"..' + +'..#bbbbbbbbbbbb##.....",'#10'"....#bbbccbbbcbbb##.....",'#10'"....#bbcbbcbc' + +'cbbb##.....",'#10'"....#bbbbcbbbcbbb##.....",'#10'"....#bbbcbbbbcbbb##.....' + +'",'#10'"....#bbcbbbbbcbbb##.....",'#10'"....#bbccccbbcbbb##.....",'#10'"...' + +'.#bbbbbbbbbbbb##.....",'#10'"....#bbbbbbbbbbbb##.....",'#10'"....#bbbbbbbbb' + +'bbb##.....",'#10'"....###############.....",'#10'"......#############....."' + +','#10'"........................",'#10'"........................",'#10'"....' + +'...................."};'#10 +]); +LazarusResources.Add('TRxDateEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205 + +#202#0#0#3#0'PLTE'#1#0#0#0#0#0#128#0#0#128#128#0#0#0#128#128#0#128#0#128#128 + +#128#128#128#192#192#192#255#0#0#0#255#0#255#255#0#0#0#255#255#0#255#0#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0','#144#198'\'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0#136'IDATx'#218 + +'u'#145#139#10#128' '#12'E7'#130#22#132#254#255'o'#166#4'M'#8#155'R'#168'k*l' + +'x'#207'^*'#194'd!'#144'%s'#1#233#175#251#163#2#223#2#233'u'#127#192'b3Z'#128 + +#129'z'#16't'#151#252#1#31#246#166#158'>T@e<#c'#19#127#161#186'G~'#5#194'!' + +#137'z@'#220#233#3#232'+)'#16#29'D98'#13#162'H'#194#166#25'+Y'#0#170'5'#128 + +#188'V2z'#128#179'K'#217#227#242'r'#203#134'b'#238#225#230#147#183#210#31#159 + +'Ud['#15'h'#23'Z'#25#23#189'C'#28#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxClock','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205 + +#202#0#0#3#0'PLTE'#1#0#0#0#0#0#0#128#0#128#128#0#0#0#128#128#0#128#0#128#128 + +#128#128#128#192#192#192#255#0#0#0#255#0#255#255#0#0#0#255#255#0#255#0#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0'IF'#160'|'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0#132'IDATx'#218 + +#157#146#193#14#128' '#12'C'#187#19#254#255#215#202#169'2'#6#172'j8('#9#4#246 + +'h'#10#20#195#166#217'?`'#160'V8'#129#29'8'#25'[8'#22#29#180')N'#160'8'#168 + +#128#175#152#192#203#181#15#9#188#199#246')'#226'2/'#171#234'3B'#193'R'#8'h' + +#245#154#30'%'#136#165'`*'#20'T'#164#2#229#165#184#153#168'G'#24#136'GJ'#30 + +#167#218#223'cH'#6#163#230'ay*jP>'#206#135#130'('#172#7'1'#242#0#196'|'#147 + +#224#183#207'p'#1#206#241'B'#25'c'#4#211#189#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxSpeedButton','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205 + +#202#0#0#3#0'PLTE'#1#0#0#0#0#0#128#0#0#128#128#0#0#0#128#128#0#128#0#128#128 + +#128#128#128#192#192#192#255#0#0#0#255#0#255#255#0#0#0#255#255#0#255#0#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0','#144#198'\'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0#173'IDATx'#218 + +'}'#146#209#14#195' '#8'E/mWX'#154#253#255#135#246'E'#172'+'#131#166#217'tu3' + +#198#135's@'#8'J'#248#177#8#224#14'V'#23',W'#158#178#133#208#139#176#139' ' + +#204#218#21#167#169#133'='#253#152#202#13'a*Q'#2'{'#139#24'v'#171'3<~'#196 + +#224#212'w'#147#225#9#163#172#247'}'#192#222#214'8'#4#214#7'2'#172#233'jJ' + +#178#137#242#202#248#234#170'8'#135#26'e'#182'25'#25#155'$Id'#200'Kj'#132#5 + +#247#2'Q'#170'T'#226#228#139#159#178#209'G'#152#215#13'~'#12#165'T])'#191'y' + +#196'Wb'#246#235#185'7v'#253'zF'#251#255'P'#189#175#16#2#212#17#214#165#199 + +'z'#1'i'#21#144#25#14'l'#154#14#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxSpinButton','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205 + +#202#0#0#3#0'PLTE'#1#0#0#0#0#0#0#128#0#128#128#0#0#0#128#128#0#128#0#128#128 + +#192#192#192#128#128#128#255#0#0#0#255#0#255#255#0#0#0#255#255#0#255#0#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#200'7q|'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0'wIDATx'#218#173#210 + +#189#14#128' '#12#4#224#178#224#198#251'?'#167#19#215#5'M9'#180#252#24#19#163 + +#11#201'}'#205#137'H'#144#135'''|'#130#25#11'!u)pC'#246#29'H'#187#7#149#216 + +'r'#192#129#158'k'#172'y'#14#14#212#166#163#229#226#129'U'#150'/'#160#230'30' + +#31#160#246#176#176#3#155'_@'#237#153#129#243#182'i'#15'|'#175#242'c.'#0#247 + +'3Vm'#24#142#177#129'$'#244#7'_^~'#212'O'#151#225#0'g$X'#25']'#5'r'#173#0#0#0 + +#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxSpinEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205 + +#202#0#0#3#0'PLTE'#1#0#0#0#0#0#0#128#0#128#128#0#0#0#128#128#0#128#0#128#128 + +#192#192#192#128#128#128#255#0#0#0#255#0#255#255#0#0#0#255#255#0#255#0#255 + +#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#200'7q|'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0'kIDATx'#218#189#145 + +'A'#11#192' '#8#133#237#226#6#131#253#255#223'9'#8#182'wij'#130'c'#213#161'K' + +#217'A'#222'G'#234#179'D'#131#147#214#128#189'#'#223#6'6'#203#175'S'#130'-'#5 + +#149#15#16'B'#2#160#23#14#178#234#135#1#16'q'#23'h!y'#19#165#242#0#136#238'=' + +'T'#15#160'z4'#159#3#168's'#181'>'#192#191#169#220'9'#185#245#10#158'vWe'#213 + +'GM'#130#23#211'$E'#25#128#18#229'#'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRXDBSpinEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1#230'IDATH'#137#205 + +#148#193'j'#19'Q'#24#133#191#127'2'#142'+)}'#129#190'D'#23#226'"P_A'#220#187 + +#200'n'#210#216'M'#7#178'(C'#9']T"*'#212'd#]'#248#12'n'#5#145','#220#139'o' + +#224#170#22#196#166#134#218'af'#174#139#206#157#220#153';'#153#220#22#4#15#4 + +#238#127#239#253#207#185'9'#255'a'#224#31'C'#244'"'#12'C'#165#215#211#233'T@' + +#169#230#150#178'U'#218#207#13#132'a'#168#148#162#252#153'b'#205'X'''#222'B' + +#190'JD)'#147#212']'#192#3#232#247#195#202'f'#189#6#16#145#194'6Mn'#174'm' + +#232#7#249#0#147#201#180'BZ'#175'M'#153'*'#233#234'9'#220'<'#168#16#208#164 + +'n'#208'"nC'#22#237#181')'#160'_'#191#189#253#208'Q'#180#25#189#222'3i'#181 + +#232#219#215#217#157#201#15#15'cz'#189'5'#22#189'z'#243#206#218'K'#146#132' ' + +#8#0#200#178#12#127'gh'#221'Q'#179'1'#243'_'#223#129'B'#160#223#15#27'-jB'#16 + +#4#229#4#252#157'!'#217#231#23#214#29#233'F\|x'#190#20'Xe'#209#163#193#167'J' + +#227#151#147#199#0#228#10':'#197#136#207#206#23#0'D'#251#3#198'/O,'#177'V' + +#139'4a]'#168#227'-'#215#151#243#5#163#209#176#20#137#227'c['#160#205'"M'#174 + +#197#234#184#248#249#155#189#221#131'JmB'#160#250#161#211'x'#253'vB '#235#5 + +#164#27'Y{z'#200#27#155'['#226#129#157'wWr'#23#148'3'#184#127'/a\'#196#178 + +#227#216','#221#200'-E'#26'JA'#206'2!.8;_'#16#237#15#202#186#158'$'#207',D ' + +#184#5'9'#220#164'H'''''#142#143#185#156'/*'#231#149#127#224#145#146#233#173 + +'|'#233'}Z'#156#231')x'#2#190#225#161'N'#205#222#238#129#149' K@'#169#28'H' + +#16#229#225'y>Y'#14'H'#138#200#21#29#30#212'nC:'#27#225'wc'#139#244#207#199 + +'#'#174#175'~'#0'ELOO'#223#171#167'O'#238#158#148'U'#216#216#220#186#165#225 + +#255'#'#254#2#182'2'#241'd'#141']'#3'd'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxTimeEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1'TIDATH'#137#237'TAN' + +#195'0'#16#156')'#136'7'#181#183#210#15' '#238'H'#28'zm'#223#144#245#7#16#18 + +#220'P+'#193'C'#218'T'#28#224#140#248#13#18#195'!'#177#177#235#196'mQ'#17#23 + +'F'#178'6'#235#216#187#179';'#155#0#255#248'k'#16#0'$i'#185'|'#250#149#4#167 + +#177#243#254#246'|'#212#224#23#151'Wi'#2#0#184#185'}8Z'#130#205'f'#131'A'#223 + +#203#209'|'#157#216']'#251#30'$'#19#191'7'#193'Op'#194#179',Ig'#2#146'x'#189 + +#159'$'#150'd'#198'>'#174#130'$>'#241#145#248#1#146#180'X<'#10#128#26#183'Yf' + +'&3'#11#254#247'{i8[i'#23#234#186'V'#16'y:'#189'n'#147#245#183'@'#2#200#134 + +#221'p'#182#194'h'#190#198#203#221'9'#156's'#157#231#199#227'q3E$C`'#231#12 + +'Ue'#0#16#172#135's'#6#201#218#22'L'#160#18#155#140#156#242'e='#251#190']' + +#251#180'h'#208#6#135'sV'#166#144'U'#146#10#233#7'!^E'#246#187'*'#232#170#2 + +'H'#7'!'#136#236#217#199'=wL'#173'G'#149'T'#155'V-'#169#213'S'#217#254'Q*' + +#232#210#128#177#6#219'SS'#210#160#170#12'$P'#215'u'#241#172'o'#192'!'#19#215 + +'\dr'#191#23#217#175#162'4M'#135'LZ '#18'='#11'H'#191#228'.'#241#227#201#220 + +'''A\'#1#183#2#228'l'#14#12'^:'#216#167#200#222#129'='#190#0'q'#209'z'#166'R' + +'2h'#222#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxDBTimeEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1#159'IDATH'#137#181'V' + +'1N'#195'0'#20'}?'#148'r'#131'\'#164#3'e3''@'#236#136#165'bq'#138#16'G'#232 + +#196'X!'#154','#168#11#7')'#223',='#6'Co'#193#242#25#26#187#174'c;'#141#16'O' + +#138#226#196#254#239#253#255'l'#199#1#254#25'd'#27'Zk'#177#237#166'i'#8#16 + +#137#135#184'P'#202#247'{'#208'Z'#139#8#220#229#139#197#209''''#158'!'#207 + +#139#136't'#175'<'#200#18#213'u'#227'^V'#149#6#0'L&'#151#157#128#217#236#222 + +#181#215#235#143#222#2'Hk-u'#221'8R+VU'#26#23#231'?'#209#160#229#235';'#158 + +#159#30'z'#201'on'#239#242#22#253#21#204','#133'oIh'#17#0'\=~'#30#245#217#231 + +#240#189#179'$X\#'#223#146#208#162#161'8'#163#177#19#145'v'#254'G>i*'#27'Z' + +#237#159#167#243'M'#167#138#237#219'u4s"'#2'3'#231'WQY'#150#0#0#165#212#209 + +']D'#142#200'S0'#198#12#179#136#153#161#148#2#17'a:'#223'8'#145#197'b'#17#21 + +'PJ'#229'-'#178#25#251#2#204#236#250#228#132#13#157#183#168'i'#160'Z'#194#152 + +'x'#159#128'1'#6#4'@'#180#238#218#177'\'#213'x)(*`'#173#242'E'#194'I'#182#227 + +#10#160#251'IX'#174'j'#140'3'#223#202#208':'#0#157'j'#142#150#233'n'#247#141 + +#178',]'#224#246#203#128#219'6'#7'd'#202#155#135#152#136#191#7#128#253'y ' + +#169#0'V*9'#7#182#146#220'<'#184'e'#10#28'|'#13#179#141#10'{c'#141'1I'#1#224 + +'p'#162'%'#171'H'#161#21#232'='#213#138'Xv)'#12'M"'#204'@B'#18#127'SYx'#237 + +#147#206'd'#191#2#10#201'B'#12'%'#207#13'L-'#141#211#255'$Z'#252#2'}'#212'D' + +#152'a'#180#26#28#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxDBProgressBar','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1'''IDATH'#137'c`'#160 + +'1`d```'#200#202#202#250#15#19#152'6m'#26'#'#3#195#255#255#184#181#192#181'2' + +#18'eCVV'#214#255#255#255#25#224#24#217'2'#220#128#24#7' '#148#254'G'#199#132 + +'-!'#222#2#166#236#236','#20#1't>'#166#193'0'#195#145#217#184#1#227#255#255 + +#12#255#145#13#157':u'#26'Cvv'#22'4.pY'#2#215'N0'#30'X`'#134#18#15#24#161#137 + +#128#184'Hf'#204#202#202#250#143'l'#1#204'7'#188#188#26'$X'#138#9':;'#243#24 + +#25#24#240#4'Qp`'#16'E'#22#236#218's'#141#161#179'3'#143#17'g'#16#25#153#24 + +'2x'#214'^'#132#243#183'7'#235'c'#240'q'#129'sg'#206#195#217','#217#217'Y'#12 + +#216#130#136#129#129#129#161'6'#206#0'I'#219#127#12'>1'#128#5#22'$0'#128#204 + +'?w'#247#11'\'#220'J'#149#27#131'O'#148#5'0C'#177#129#173'G'#239#192#217'9' + +#30#250#24'|b'#0#137#25#141't'#192#130#205#208#254')S'#25#190'}|G'#21#11#24 + +#231#206']'#248#255#236#217#147'('#134#179'120'#236#219#179#151'"'#131'a'#201 + +#20#158#27#203#203''''#17'_B'#18#1'`'#25'm'#20#140#130'!'#0#0#6#165#149#157 + +#16'*hH'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxDBTrackBar','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1'SIDATH'#137#237'T' + +#177'n'#194'0'#16'}F'#217'*v'#182'D'#130#161#202#152#137'.'#208#181'R'#7'>'#3 + +']('#234#22'~!S$P,~'#161'_'#208#13#214'N'#29'Y*'#132#170'J'#253#139#234':'#4 + +#187'Il'#167')*'#27'O'#178'd;'#207#239#249#238'|'#1#206#12#161'&D'#196'j.' + +#165#20#0#179#133'.'#204#189#22' "f'#134#30'e'#179#31#216#12#127#135' "'#206 + +'si|'#136'c:FR6(" '#185'7'#204'$'#245#173#209'yJ'#172'l'#18#199#228#184'y1' + +#127#221'm[G'#224#1'@'#158#203#138'hu-*'#245'H'#146#21'z'#189'/L&'#247#154#31 + +#4#3','#174#150#156#166's#'#10#175','#234#134'2'#17#2'X'#254#169#22'B'#21#212 + +#150#162'n'#247#218'z'#200#26#193'be'#240#210't.'#26'S4'#157#222#25#135#214 + +#235'g'#231'm'#203'|'#197'kL'#209#199#251#167'S'#204#6#27#191#241#21#141'n' + +#199'F'#209#146#196']'#3#27'_7'#25#17#233#225'n'#182#2#195#217#134#179','#227 + +#195#225#141#153#153#135#179#141#147#219#242#21'U'#17#133'>'#158'v'#192'c0' + +#192#205#195#22'Q'#232#227#197#193#237#0#245#198'2'#215'uH'#234#139'('#244 + +#181#184#171#139#129#227#207#206#150#142#234'o'#194#14#146'{n'#18#215#6'u' + +#147'6'#226''''#195#245'JN'#221#239#252#223#213'.'#184#224'\'#248#6#216#165 + +#172#203#24'='#180#201#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxLoginDialog','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1#212'IDATH'#137#213 + +#149'?hSQ'#20#135#191#27'S'#229#17'hET'#208','#25#218'A%T'#168'"'#220'!'#185 + +'NJ'#165#155'S'#187#212#209'!'#234#224#164#203'-d'#233#148'5'#16#138#144#205 + +','#26#23'!'#211'u'#17#137#155#8'>'#130#213#169')Ei'#254',Akr'#29#170#177#205 + +'K^^'#211#183#248#155#238';'#247#156#243#157#195'}'#156#3#255#187#196#160'A+' + +'l'#255'l'#236#224#245'Xi%'#254#196#238#231#142#30#190#182'v'#144'i'#189'5' + +#140#148#224'`A'#214#130#16#209#145#222'C'#131#142#174'C'#229'i'#173#143#151 + +'m@Zko'#7'J'#169'P'#146#27'c'#0#136'L'#18'\.'#151')'#22#139#129'|'#143#12#232 + +'v'#187#8'!p'#28#135'R'#169#20'.'#192'u]'#242#249'<'#213'j'#149'B'#161#128#16 + +#130'L&'#19#30' '#153'L'#226#186'.'#217'l'#150'J'#165#130#148#146'h'#212#255 + +'G'#28#9'x'#244'p'#133#31#173#28'ra'#11'y'#173#133'\p'#233't:'#244'z'#189#190 + +'O<'#30''''#151#203'M'#6#184'}]0?{'#158'''K+|'#251#186#195#148'3G'#235#251'6' + +#141'F'#131'g'#27#247'}'#147#30#212#200#254'"'''#247'85'#245#18#189#241#24 + +#219'^'#167#241#22'Rg-'#175#239#213'9w'#165'N- '#192#247#13'b'#177#203#196#18 + +')j;'#155#156'Im'#146'X'#252'B'#236'B'#224#226#253#1#246#215'O'#232#188#1#166 + +#153#191#4#167#29'x'#250' A'#228'DH'#128'['#203'/'#216'k'#3'8'#0#172'.'#193 + +#221#197'&'#187#159'C'#2#0#188'o'#27'^'#173#223#160#249#1'n^'#133'O'#239#154 + +'<'#175'C'#237#162#9#12#24';Mg'#164#225'#0#'#247#191#239#200#192#185#129#9'F' + +#133'1'#6#149'V'#168#180#234#15'4c'#12'i'#165'H'#171#127#182#191#26#219#193 + +'0'#233'5'#237#177#173'i'#175'm"'#192#176'q'#238'7'#226#189';9'#164#165#163 + +#181#14#190'k'#143#163#223'|G'#141#138'p'#211'x'#28#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxVersionInfo','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#15#18#0#0#15#18#1'!'#155#242'3'#0#0#0#252'IDATH'#137#213#149 + +#193#17#194' '#16'E_'#28#155#240'H'#27#30#215'2l'#197'v'#210#6'G'#219#224#152 + +'2'#240#144'0'#129'5'#192'2'#234#193#127'av'#242#243#31#11#132#192#191'k'#234 + +'[b'#204#236#6#191#25#144#7#191#189'f'#6'U'#140#173#240'1'#200#129#201#18'n' + +#135'('#195'Qx'#30#210'{'#254#174'S'#135'?'#181#235#190#26#179'k'#133#217#189 + +#157#14'>'#215'P'#7#207'Y'#6#14#0'\'#239'~:'#151#129'9$'#198#28#178#204#18#17 + +#25#201'g'#153#137#231#182#165#132#0#224'}Q'#6#192'5'#192#10#160#187'H'#16 + +#128#219':'#168'0'#215#158#161#6#212' '#187#130#247#135#161'a'#131#233#142'*' + +'KT'#135#212#150#195#169#177#3'H'#16#208#160#162#3#17#194#182'''Nd'#221#159 + +#180'E'#210#5'h'#208'zDu'#7'E'#237#217#129#8#200#215'?4'#159#168'[-'#150#31 + +#206#174#214#135#230#0#2#132#176#6';'#7#151#199'c'#248#238'2*'#198#180'w? ' + +#148#135#226#135#151#221#248#213'nT'#217#193#11#31'-T'#255'GS='#145#0#0#0#0 + +'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxAboutDialog','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#0#228'IDATH'#137#213 + +#149#209#13#195' '#12'D'#143'*{q'#155#197#217#204#153#140'~P'#8'%'#16#28#20 + +'U'#234#251#1','#235#14#3'2'#192#191#227#210'D'#136#144#231#26#218#217#6#132 + +#238#163#17#181#151#24#14#161#240#138#145'jm'#193#161#220'X'#8#128's'#139'-y' + +#30#7#0'"'#242#140'Z'#133#136#28#21#144'l&'#145#254'k'#173#186#155#196'U'#21 + +'@'#190#131'ka'#9'['#28#221#154#227'V'#163#215'H'#220#178#129'+'#186#21#148 + +#136'[Mb&'#131'zg'#233'xZF'#164#31#30'U'#243#136'Z'#204'Va6'#152#229#247#6 + +#214#231'g'#205#237#190#162#242'r'#203#245#221#187'h'#26#168#238#224'@'#200 + +'Zi'#183#130'$0'#219'*'#134#6#179#130'5'#183'_'#145#170#130#158#160'gnh'#170 + +#10'O'#194#243#136'%L'#173#162'F69'#197'69'#199#166#12'Zm'#189#215#234#129 + +#242'O~'#248#211#17#145#251#127#238#12'o'#239#175'R'#255#176#141'Ys'#0#0#0#0 + +'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxDBCurrEdit','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0'0'#0#0#0'0'#8#6#0#0#0'W'#2#249#135 + +#0#0#1'HIDATx'#218#237#151'A'#14#131' '#16'E'#165#139#246#6#158#199#243#224 + +'!JO'#208'Ma'#231#162'7'#209'e'#23#158#137':'#137#180#160'B-'#181#14'$'#243 + +#19#3#26#193#255#252#163'(+2'#23#195'6@'#0#216#6#8#0#219#0#1'`'#27' '#0'l'#3 + +#4#128'm'#128#0'b'#7'r'#206#181#233'+'#165#134'y'#180#14#143'`'#127#185'YQ' + +#147#130'y)'#213'k'#191#174#249#8#225#19#192'%'#2'05'#31#134'XJe['#144'('#0 + +'h'#167#9#128#202#178#156#157'/'#196#217#234'_'#130's'#11'!'#190#246#19#157 + +#128'1m`'#198#4'<'#163#244#154'KE%'#179'i'#9'I)c<'#20']'#215#21'UU'#237#7#0 + +#237'R'#9'}'#2'`c'#249#235#225#209#176#251#187#3#248'Jhm'#2'`^['#207'7'#10 + +#192'T'#6#128'-'#172#8#211'c'#232#0#208'.'#149#144'Rn'#2#246#219'?)'#128'P'#9 + +'e'#145#128#127'!{'''#224#26'N'#12#0'Z'#223'['#200#152#181'M'''#5'`C'#216#186 + +#222'dq:'#188#247#147'M'#0#212'4w'#221#247#15#199#252#145#249#204#206#161'P' + +#1#134#239#21'=l'#142#129#213#23'Ka!'#251#5#192''''#20#128#182'm7'#3#0#237#13 + +#144#204#175'h2F'#8' W'#17#0#182#8#0'['#4#128'-'#2#192#22#1'`'#139#0#176#149 + +'='#192#19'C'#237#245'1T'#130#194#231#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxViewsPanel','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#23#8#6#0#0#0#17'!'#143'-' + +#0#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149'+'#14#27#0#0#0#233'IDATH'#137#205 + +#149'Q'#14#132' '#12'D'#167#27#239'Eof'#185'Y9Y'#247#3'QD\'#17'4'#217#249'Q' + +#155#240'F'#24''''#146#153#25#17'^'#145#25'@'#128#153#13#130#8#128#157'\'#211 + +#253'k'#154'D'#4'"'#243#226#149#203#160#26#192#204#16#17'0'#243'm'#184#170'b' + +#138#183't8("'#2#243'~'#230#156#3#0#132#16'v'#207'I'#229'<3'#0#208#144't'#8#1 + +#206#185#29'8'#135#214#230#19'n*-l'#157'/'#6#6#170'd'#240#132#178#29'\'#3#187 + +'3'#144#195#219'GIa'#218#157#129#192#14'&%'#188'\'#216':_'#143#232#12'8'#170 + +','#131#235#144#7'zP/Zi2'#212#3#242#180#226'~U'#174';'#131'+p'#175#214#162'A' + +#254#160'h'#221#6#173'E'#235#209#231#12#244'T/'#226#14#196#3'H?'#158'M'#241 + +#135's'#31#170#170#155#193'<G'#168#247#30#170#245'O'#173'G'#137'K'#182'4'#204 + +'{'#255#24'<7'#248#2'N'#186#146'B'#24#248#204#194#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxDBColorBox','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148 + +'S'#221#0#0#1#151'IDATH'#137#181'U;N'#195'@'#20#156#141#220'F'#177' '#5'G@' + +#20' #j'#10'$@'#206#1'@('#5'E:['#208'.'#16#232#0#145'6h'#183'KA'#145'+'#16#9 + +#16'rH'#133'D'#136#160#200'-'#130#185#128'Y'#138'd-'#175#227'o'#2'#'#173#180 + +#239#217#158'yo'#188#31#130#9','#203#18'r'#206'9'''#128#240#227'x'#16#146#254 + +#206#132'\'#8#248'c'#28#167#9'd) '#130'<('#18'O'#28#30#241'('#0#128'm[J2'#28 + +#171#8#219#146'l'#19#177',K0'#198#21'R'#25#23#139#203#177#31'6'#26'G'#160#244 + +'6'#225#249#241'X8'#201'"'#215#29'e'#26#148'6'#149#216#233#246#4#165'M'#1#0 + +#154#180#132'1'#238#171#203'n'#244#199#235#164#238#1#0#223#219'g'#254#188'\.' + +#195#251#17'p'#156#30#0#192#233#246#132#22#180'$lQ^Pz'#138'R'#169#164#228#180 + +' iRui'#248#248#28'bg'#215#156#202#19#185#28'#-'#210#245'L'#228#158#183#20 + +#153'7+'#6#136#235#142#132#174'/FZ'#180#183#127#144#185#131'0:'#247#3#152#21 + +#3'Z'#189'~'#1#198#162'-Z[]'#153'K'#0'HYE'#18#213#234'Bf'#226'v'#251'K'#137 + +'5'#198#24'l'#219#158'"M'#218'dy'#160#17'BH'#171'u'''#250#253'W?'#201'9''r' + +#163'DU'#149'K'#0#0'j'#181#195#200#243#228#253'm03'#177'"'#144#134#173#171 + +#203#204#132#207#245's%.'#228#171'''?2u'#16#174#234#207#4#214'7'#140#153#137 + +#31#158#134#233#2#18'7/'#211'gL'#28'N6;J'#252#239#255' '#246#186#11#238#131 + +'YaV'#140'x'#1'`|a'#204'+'#242#11'3'#175#249#153#208#135's'#214#0#0#0#0'IEND' + +#174'B`'#130 +]); +LazarusResources.Add('TRxRadioGroup','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148 + +'S'#221#0#0#2#27'IDATH'#137#213#149'AH'#20'q'#20#198#127#234#130#18#209')'#13 + +#15#27#182''''#17'dI'#130'.'#186'A{mM<'#5'K'#12',.'#139''';'#173#7'A'#7'1'#17 + +'/'#214'!'#150'X('#198'X'#214#139'J'#133'''!'#136'-X<'#8'YD'#148#178#179'.'#8 + +'9'#135#173#176#136#132'}'#29'l'#167#29'wvfs'#131#232#131#7'3o'#254#223#251 + +#222#159#247#222'<'#248#223#209'd'#231#20#16#23#146'-'#207#14#30#243'I'#173#8 + +#170#186#176'T'#231#4'Pk%."'#136#136#128#171#149#207'V'#25#136#170#170'f'#2 + +#30#171#2#232#250'6z'#238#131#203#21' '#167'oW'#249#10#249'='#2#199'|'#205 + +#174#145#26'DM'#1'MK'#253#21#1#143#157'S'#211'R'#236'w'#220'D'#211#30#161'(a' + +#134#135'o'#184#6'ZYY'#170'_@Q'#194'fp''r='#176#21'('#139'4'#130#163'f'#180 + +#14#140#136#8#250#175#238#208#180#148'E'#228#194#9'kR'#127#13#174#135#144#169 + +#169'?'#22#176#237'"E'#9#211#177'o_'#131#219'mm'#220#245#249#184#211#213'E' + +#162#183#151#221'L'#6#128'o'#134#193#130#215'Kqg'#199'<'#155#30#28#172#221 + +#166'N5'#136'nlpK'#215#185'<6'#198#227'H'#4#128'S'#237#237'\'#157#153#225'I4' + +#10'"'#188'I'#167#249'^,66'#7#190'`'#144'O'#185#156#249#238'W'#20#154'='#30 + +'^'#204#205#177'>>N('#153#180#23#248']'#131'#'#145'Zs'#240'vy'#153's~'#191 + +#197'w-'#145#224#217#196#4#23'#'#17#206'vw'#215'?'#7#149']t'#191#175#143#31#7 + +#7#148#14#15#25#201'f-'#220#247'kk'#156#238#236#228#227#214#22#224#240#171'p' + +#170'Als'#147#184'apit'#148#231#211#211#166#255's>'#207#203#249'yF'#178'Y' + +#190#20#10#188'[]'#173#190'A!'#191'W3p%'#154'ZZ'#8#206#206'r'#175#167#135#221 + +'L'#134#243#3#3'<'#141#197#184'29'#201#25#175#151'P2'#201#210#208#144#133'#' + +#142#166#170'""2'#211#218'*_'#13'C'#202'x'#157'N'#203#131#254'~y'#181#184'(' + +#15#3#1#145'R'#201#252#182#30#143#139'e'#243'T.'#138#227'P'#225'D'#131'V'#247 + +'n'#197'A'#252#159#226'''{'#212#26#152#181#14#208#246#0#0#0#0'IEND'#174'B`' + +#130 +]); +LazarusResources.Add('TRxDBRadioGroup','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148 + +'S'#221#0#0#3#20'IDATH'#137#181#148'oHSa'#20#198#127'W6W'#162#169#149#174#132 + +#18#141#129#144#181'0('#130#178'2"'#168#232'C'#4#150'#n'#136#179#160#192'>E' + +#127#160'B'#20#194'/aEbAq'#145'5'#252#16'ad'#31'"E'#199#2#177'0Z'#22#253'C]' + +#162#209#148#210#178'?z'#213#211#135#177#185'5'#231'4'#233#129#203#189#231 + +#188#231'}'#158#251#156#247#240'*'#132#192#233#234#151#155#15#186#152#14#205 + +#9#143#167#205#199#130#242'7q'#245'q+'#185'+'#19#233#252'8'#130'oh'#20#223 + +#240#24#190#161'Q'#202':4'#228#194#133'9'#11#24#0'n>'#232'b'#173'e1Y'#230#133 + +#248#134'F'#233#132'0r'#223#240'XpC'#229#130#5'$fd '#147#147#152#146#146#216 + +'s'#253':+'#183'l'#225#231#192#0#181'yy'#28'ii!u'#213'*'#0#156#251#246#17#7 + +#144#189'b'#17#158#247'_hp'#247#133#145#6#222'?~O'#132#253#149#189#189#157 + +#147'==l,+'#163#161#184#24#128#132#180'4'#10'**'#184'o'#183#131#8#157'N''' + +#191#191'~'#245';'#0#216#180'&'#141#244#228'x'#162#157#1#9#145#169#236#29';h' + +'<v,'#24'[U'#21#143#195#129#251#210'%'#158#214#212'p'#248#209'#'#191'@W'#239 + +'7'#204')i'#0#156#179#229'P'#176'vI'#196#25'4wD'#10#188#190'{'#23#179#213#26 + +#150#219'[S'#195'U'#139#133#252#243#231'Y'#154#147#227#23#200'^'#177#136#246 + +'W'#131'LL'#10#185#153'9'#211';'#8'Am^'#30'c##L'#234':%mmak'#239#26#27'I\' + +#190#156#207#30#15#192'T'#139'6'#172'^Jzr<'#149#142'7T:'#194#9#171#143'[!' + +#196#193#209#142#14#22#166#166#242#248#204#25'Z'#203#203'9P_'#15#192#176#215 + +#203#147#170'*J'#218#218#168#223#191#159'7'#247#238#249'7'#20#156'r'#203#185 + +#186#183'R}'#191'['#154'^'#12#138#136#200'K'#239'wiz1(NW'#191#8#8#23'/'#138 + +#136'H'#133#201'$?'#6#6'DDdB'#215#229#138#197'"^'#151'KDD'#234'v'#237#146'g' + +#181#181'""'#242#233#249's'#185#156#153')'#6#162'`'#205#237#164#224#247#193 + +'(5q'#6#3#219#203#203'i:{'#150#245#165#165#140#255#250#197'z'#187#29#128'e' + +#235#214#145'[X'#232'/,'#185#234#145#157#167#159'H'#193')w'#208#1' '#136#8 + +#254' '#232'`'#174'P'#2#2#230#20#19#233#201#241'4'#184#251#0'h'#174#218#140 + +#136#208#211#243#1#128','#205#17'ia'#22'0'#0'x'#251#190'cN1'#1'Sc'#170'TM'#21 + +'i'#154#131'n'#213'6+'#194'^o?'#249#219#182#226'ji%'#127#219'V'#197#0'P'#188 + +';'#139'['#15#187#167#29'SMs'#224'K?'#140#166#213#161#170'6JKOD%'#191'q'#227 + +'ZDN'#9#13'B/'#189#208#22'i'#154#3'U'#181#161#235#227#24#141'Q'#231'"'#186 + +#131#0#14#229'g'#132#10#10#128#174#143'STT'#136#174#143#19#136#231#130#184'X' + +#5'F'#163#129';w'#234'1'#26#13#179'z'#254#198#204'~'#153#255#25#196#20'PU[' + +#144'<'#26#201'L'#136#217#162#128#200#191'"'#166#131'^o'#255'?'#147#199#20'P' + +#20'e'#166#229'y'#11'('#174#150'V'#153#183#194#255#198#31'Mv'#189#134#210#214 + +'J$'#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxHistoryNavigator','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149'+'#14#27#0#0#1'8IDATH'#137#213#148 + +'=K'#195'@'#24#199#127#23'\'#130#171'T'#4#191'D'#171#224#224#160#163'[p'#236 + +#152#15#144#174#151'1'#163'Y'#147#221#184#245'k'#232#224' H)'#157':'#10'N'#1 + +#199'B'#198#199'!MLL'#140#205'K'#135#254#225#184'7'#238#255'r'#207'qP'#128 + +#128'00'#140'}'#146#3#168#174#228'j{'#246'?'#24'}'#201'E'#164't'#222#243#202 + +#243#214#9'\'#29'4'#238#155#166#3'@'#146#132#248#254'L)'#173#3#241#31#28'D' + +#165#166#148'T'#181'>>'#191#242#241#211#227#201#174'^H'#146#240#167#200#147 + +#241#5#0#227#201'e'#222'gc'#128'{'#235#174#21'9'#164'i'#140#226'B&R'#7#203'z' + +'oE'#14'i'#2#180#14#4#145#198#214#6#158#151'6'#17#17#173#3'Q'#176#21#25#8#166 + +#233#164#206#1#223#159#165#133#213':'#144#245'r%'#235#229'J6q,'#155'8'#174'u' + +#215#197#200'Qq2'#181#237#210#230'b'#209#254#222#27#5#230'Q'#196#249#217')'#0 + +#199#163'Qo'#242#138#192#239#4#208'?'#197'^'#18#188#188#190#201#205#245#149 + +#170#8#20#19#244'q'#158#145'W'#4#138#9#134#194'a'#214#160'V '#154'?'#15'B' + +#248#167#128'='#189#5'hL'#224#186'aw'#1'8'#208#26#228#239'u'#151#143','#255 + +#29'['#224#27#254'('#218'x|2'#20#20#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRxCloseFormValidator','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#9'pHYs'#0#0#14#156#0#0#14#156#1#7#148'S'#221#0#0#1#0'IDATH'#137#213'UA' + +#22#132' '#8#197'y'#221'+'#142'F7'#195'Es'#169#22#204#194'l'#12#5#179'f3'#127 + +#149' '#252#175#16#2#252';'#130'6'#16#130#28#223','#218#221#5'a'#216'cS'#238 + +#233#236#22#209#156'Rk0'#17#160#20'$'#2#16#194'd'#238'n'#6#141#227'$'#143#136 + +#158'eS '#162#250#4#136#232#6#225#156#252#28#217#221#199#156#252#175#17'E9' + +#185'\/KM'#144#147'X'#144#0#16'wu'#183#8','#146'l'#27'I'#222'$'#240#238'v}' + +#175#7'Y)B'#11'*'#215'f'#13'Z'#9#182'm'#3#156#17'82p'#228'f'#226#236'w'#9'Z' + +#167#232'u'#141#213']'#221'.'#234#21#189''''#224'R'#155#246#212#151#251#180 + +' '#151#224#170'z/'#206'$'#200#170#181#250#172'R'#23'S'#199'e'#184#195#206 + +#186#154#22#169'^3$'#219#208#168#184#131'a'#2#230#226#138#246#191#154#153'aF' + +#132#25#191#182#140#238'{'#208#2'-T'#217#22#170'm'#183#8'Z'#227#220#27#241 + +#245#155#252#163'G'#135#136#6#134#250#3'|'#0#10'!sr'#165'GZ'#12#0#0#0#0'IEND' + +#174'B`'#130 +]); +LazarusResources.Add('TRxIniPropStorage','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149'+' + +#14#27#0#0#1'LIDATH'#137#213#148#193'N'#195'0'#12#134'?''}'#27'$'#144#184#240 + +#10#28'9'#240'>'#177#243'T'#188#0#210'8 61'#222#166#141#185#172'U'#179#181 + +#163#29#187#236#147#162#184#177#235'?'#137#221#194#173'#'#0#170#234#215'N' + +#156's'#166#148'"M'#191#240#250#242'|U'#1'3'#3#160#25'/'#222'?'#190#225'+' + +#206#210'u'#137#166#137#180'mK'#211'4'#195#188#251'|'#31'b*'#1'wV'#9#132#16#0 + +'?'#204#12#243#152'J'#224#251'k'#237'5'#253#29'_'#9#220'=<'#173#20#152#230'g' + +#247'1'#216#167'g'#154#193#204#8'! "C'#1#151#208#204'9b'#140#184';]'#215#145 + +'s'#198#204'h'#219#22#17'!'#198#8'@J'#169#138#19#145#233'd'#170#234#251#237 + +#198'{B'#8#14'8'#224'"'#226'"r'#214#238#159'K)'#238#238#190#223'nz'#223#244#9 + +#142'w'#212#239#216'G-6'#23#179#248#138'D'#4#17'!'#132#128#187#163#170#149 + +#223#204#136'1RJ'#153#191#154's'#2'9'#231#193'VU,%: '#31#10#156'R'#194#204 + +#170#184')'#22'wQ'#25'%_'#195#170'6'#189#132'E'#2'S'#201#205#172'*'#250'Y' + +#142#219'TU'''#219'p<'#142#215'Uux'#127#220#166#147#2#238#238#165#148'j'#244 + +#162#128#171#234#137#127#204'"'#129#255'0'#251#161#141#127'R'#215'B'#0'D'#196 + +#23#23#236#130#252#183#205'/'#245#161'[H'#1#236'`'#148#0#0#0#0'IEND'#174'B`' + +#130 +]); diff --git a/components/rx/version/2.1/rx_sort_fbdataset.lpk b/components/rx/version/2.1/rx_sort_fbdataset.lpk new file mode 100644 index 000000000..630f4643e --- /dev/null +++ b/components/rx/version/2.1/rx_sort_fbdataset.lpk @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<CONFIG> + <Package Version="4"> + <Name Value="rx_sort_fbdataset"/> + <CompilerOptions> + <Version Value="11"/> + <SearchPaths> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)/"/> + </SearchPaths> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Files Count="2"> + <Item1> + <Filename Value="rxsortfbdataset.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="RxSortFBDataSet"/> + </Item1> + <Item2> + <Filename Value="exsortfb.pas"/> + <UnitName Value="exsortfb"/> + </Item2> + </Files> + <Type Value="RunAndDesignTime"/> + <RequiredPkgs Count="3"> + <Item1> + <PackageName Value="rxnew"/> + </Item1> + <Item2> + <PackageName Value="fbdemofpc"/> + </Item2> + <Item3> + <PackageName Value="FCL"/> + </Item3> + </RequiredPkgs> + <UsageOptions> + <UnitPath Value="$(PkgOutDir)"/> + </UsageOptions> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + </Package> +</CONFIG> diff --git a/components/rx/version/2.1/rx_sort_fbdataset.pas b/components/rx/version/2.1/rx_sort_fbdataset.pas new file mode 100644 index 000000000..f4f3b96d2 --- /dev/null +++ b/components/rx/version/2.1/rx_sort_fbdataset.pas @@ -0,0 +1,21 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit rx_sort_fbdataset; + +interface + +uses + RxSortFBDataSet, exsortfb, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('RxSortFBDataSet', @RxSortFBDataSet.Register); +end; + +initialization + RegisterPackage('rx_sort_fbdataset', @Register); +end. diff --git a/components/rx/version/2.1/rx_sort_sqldb.lpk b/components/rx/version/2.1/rx_sort_sqldb.lpk new file mode 100644 index 000000000..8b1650672 --- /dev/null +++ b/components/rx/version/2.1/rx_sort_sqldb.lpk @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<CONFIG> + <Package Version="4"> + <Name Value="rx_sort_sqldb"/> + <CompilerOptions> + <Version Value="11"/> + <SearchPaths> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)/"/> + </SearchPaths> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Version Major="1"/> + <Files Count="1"> + <Item1> + <Filename Value="rxsortsqldb.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="RxSortSqlDB"/> + </Item1> + </Files> + <Type Value="RunAndDesignTime"/> + <RequiredPkgs Count="3"> + <Item1> + <PackageName Value="SQLDBLaz"/> + </Item1> + <Item2> + <PackageName Value="rxnew"/> + </Item2> + <Item3> + <PackageName Value="IDEIntf"/> + </Item3> + </RequiredPkgs> + <UsageOptions> + <UnitPath Value="$(PkgOutDir)"/> + </UsageOptions> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + </Package> +</CONFIG> diff --git a/components/rx/version/2.1/rx_sort_sqldb.pas b/components/rx/version/2.1/rx_sort_sqldb.pas new file mode 100644 index 000000000..bb6af8f8c --- /dev/null +++ b/components/rx/version/2.1/rx_sort_sqldb.pas @@ -0,0 +1,21 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit rx_sort_sqldb; + +interface + +uses + RxSortSqlDB, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('RxSortSqlDB', @RxSortSqlDB.Register); +end; + +initialization + RegisterPackage('rx_sort_sqldb', @Register); +end. diff --git a/components/rx/version/2.1/rx_sort_zeos.lpk b/components/rx/version/2.1/rx_sort_zeos.lpk new file mode 100644 index 000000000..6fe9abb36 --- /dev/null +++ b/components/rx/version/2.1/rx_sort_zeos.lpk @@ -0,0 +1,48 @@ +<?xml version="1.0"?> +<CONFIG> + <Package Version="4"> + <Name Value="rx_sort_zeos"/> + <CompilerOptions> + <Version Value="11"/> + <SearchPaths> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Version Major="1"/> + <Files Count="2"> + <Item1> + <Filename Value="rxsortzeos.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="RxSortZeos"/> + </Item1> + <Item2> + <Filename Value="exsortzeos.pas"/> + <UnitName Value="exsortzeos"/> + </Item2> + </Files> + <Type Value="RunAndDesignTime"/> + <RequiredPkgs Count="3"> + <Item1> + <PackageName Value="zcomponent"/> + </Item1> + <Item2> + <PackageName Value="rxnew"/> + </Item2> + <Item3> + <PackageName Value="FCL"/> + </Item3> + </RequiredPkgs> + <UsageOptions> + <UnitPath Value="$(PkgOutDir)"/> + </UsageOptions> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + </Package> +</CONFIG> diff --git a/components/rx/version/2.1/rx_sort_zeos.pas b/components/rx/version/2.1/rx_sort_zeos.pas new file mode 100644 index 000000000..c31e1f1ea --- /dev/null +++ b/components/rx/version/2.1/rx_sort_zeos.pas @@ -0,0 +1,21 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit rx_sort_zeos; + +interface + +uses + RxSortZeos, exsortzeos, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('RxSortZeos', @RxSortZeos.Register); +end; + +initialization + RegisterPackage('rx_sort_zeos', @Register); +end. diff --git a/components/rx/version/2.1/rxaboutdialog.pas b/components/rx/version/2.1/rxaboutdialog.pas new file mode 100644 index 000000000..9ab7123d2 --- /dev/null +++ b/components/rx/version/2.1/rxaboutdialog.pas @@ -0,0 +1,148 @@ +{ RxAboutDialog + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} +unit RxAboutDialog; + +{$mode objfpc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs; + +type + + TRxAboutDialogOption = (radHelpButton, radLicenseTab, radShowImageLogo); + TRxAboutDialogOptions = set of TRxAboutDialogOption; + { TRxAboutDialog } + + TRxAboutDialog = class(TComponent) + private + FAdditionalInfo: TStrings; + FApplicationTitle: string; + FCaption: string; + FLicenseFileName: string; + FOptions: TRxAboutDialogOptions; + FPicture: TPicture; + procedure SetAdditionalInfo(const AValue: TStrings); + procedure SetPicture(const AValue: TPicture); + procedure SetRxAboutDialogOptions(const AValue: TRxAboutDialogOptions); + protected + { Protected declarations } + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Execute; + published + property Options:TRxAboutDialogOptions read FOptions write SetRxAboutDialogOptions; + property ApplicationTitle:string read FApplicationTitle write FApplicationTitle; + property LicenseFileName:string read FLicenseFileName write FLicenseFileName; + property Caption:string read FCaption write FCaption; + property Picture: TPicture read FPicture write SetPicture; + property AdditionalInfo:TStrings read FAdditionalInfo write SetAdditionalInfo; + end; + + +implementation +uses rxAboutFormUnit, ButtonPanel, rxconst; + +{ TRxAboutDialog } + +procedure TRxAboutDialog.SetRxAboutDialogOptions( + const AValue: TRxAboutDialogOptions); +begin + if FOptions=AValue then exit; + FOptions:=AValue; +end; + +procedure TRxAboutDialog.SetPicture(const AValue: TPicture); +begin + if FPicture=AValue then exit; + FPicture.Assign(AValue); +end; + +procedure TRxAboutDialog.SetAdditionalInfo(const AValue: TStrings); +begin + FAdditionalInfo.Assign(AValue); +end; + +constructor TRxAboutDialog.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FPicture := TPicture.Create; + FCaption:=sAbout; + FAdditionalInfo:= TStringList.Create; +end; + +destructor TRxAboutDialog.Destroy; +begin + FAdditionalInfo.Free; + FPicture.Graphic := nil; + FPicture.Free; + inherited Destroy; +end; + +procedure TRxAboutDialog.Execute; +var + rxAboutFormForm: TrxAboutFormForm; +begin + rxAboutFormForm:=TrxAboutFormForm.Create(Application); + rxAboutFormForm.Caption:=FCaption; + if radLicenseTab in FOptions then + rxAboutFormForm.LoadLicense(FLicenseFileName) + else + rxAboutFormForm.TabSheet3.TabVisible:=false; + + if radHelpButton in FOptions then + rxAboutFormForm.ButtonPanel1.ShowButtons:=rxAboutFormForm.ButtonPanel1.ShowButtons + [pbHelp] + else + rxAboutFormForm.ButtonPanel1.ShowButtons:=rxAboutFormForm.ButtonPanel1.ShowButtons - [pbHelp]; + + if FApplicationTitle <> '' then + rxAboutFormForm.lblAppTitle.Caption:=FApplicationTitle; + + if radShowImageLogo in FOptions then + begin + rxAboutFormForm.Image1.Picture.Assign(Picture); + end + else + begin + end; + + rxAboutFormForm.Memo2.Lines.Assign(FAdditionalInfo); + + try + rxAboutFormForm.ShowModal; + finally + rxAboutFormForm.Free; + end; +end; + +end. diff --git a/components/rx/version/2.1/rxaboutformunit.lfm b/components/rx/version/2.1/rxaboutformunit.lfm new file mode 100644 index 000000000..b7f3a42de --- /dev/null +++ b/components/rx/version/2.1/rxaboutformunit.lfm @@ -0,0 +1,217 @@ +object rxAboutFormForm: TrxAboutFormForm + Left = 546 + Height = 386 + Top = 349 + Width = 498 + Caption = 'rxAboutFormForm' + ClientHeight = 386 + ClientWidth = 498 + OnCreate = FormCreate + Position = poScreenCenter + LCLVersion = '0.9.29' + object PageControl1: TPageControl + Left = 0 + Height = 340 + Top = 0 + Width = 498 + ActivePage = TabSheet1 + Align = alClient + TabIndex = 0 + TabOrder = 0 + object TabSheet1: TTabSheet + Caption = 'General' + ClientHeight = 314 + ClientWidth = 490 + object lblAppTitle: TLabel + AnchorSideLeft.Control = Image1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = TabSheet1 + AnchorSideRight.Control = TabSheet1 + AnchorSideRight.Side = asrBottom + Left = 140 + Height = 14 + Top = 6 + Width = 344 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + Caption = 'App title' + ParentColor = False + WordWrap = True + end + object Image1: TImage + AnchorSideLeft.Control = TabSheet1 + AnchorSideTop.Control = TabSheet1 + Left = 6 + Height = 128 + Top = 6 + Width = 128 + AutoSize = True + BorderSpacing.Around = 6 + end + object lblVersion: TLabel + AnchorSideLeft.Control = lblAppTitle + AnchorSideTop.Control = lblAppTitle + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = lblAppTitle + AnchorSideRight.Side = asrBottom + Left = 140 + Height = 14 + Top = 27 + Width = 344 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 7 + Caption = 'Version : ' + ParentColor = False + end + object Memo2: TMemo + AnchorSideLeft.Control = Image1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = lblVersion + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = TabSheet1 + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = TabSheet1 + AnchorSideBottom.Side = asrBottom + Left = 140 + Height = 273 + Top = 41 + Width = 350 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderStyle = bsNone + ParentColor = True + ReadOnly = True + TabOrder = 0 + WordWrap = False + end + end + object TabSheet2: TTabSheet + Caption = 'Detail' + ClientHeight = 314 + ClientWidth = 490 + object lblBuildDate: TLabel + AnchorSideLeft.Control = TabSheet2 + AnchorSideRight.Control = TabSheet2 + AnchorSideRight.Side = asrBottom + Left = 0 + Height = 14 + Top = 6 + Width = 490 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + Caption = 'Build date :' + ParentColor = False + end + object lblLCLVersion: TLabel + AnchorSideLeft.Control = TabSheet2 + AnchorSideTop.Control = lblBuildDate + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = TabSheet2 + AnchorSideRight.Side = asrBottom + Left = 0 + Height = 14 + Top = 26 + Width = 490 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + Caption = 'LCL Version :' + ParentColor = False + end + object lblFPCVersion: TLabel + AnchorSideLeft.Control = TabSheet2 + AnchorSideTop.Control = lblLCLVersion + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = TabSheet2 + AnchorSideRight.Side = asrBottom + Left = 0 + Height = 14 + Top = 46 + Width = 490 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + Caption = 'FPC Version :' + ParentColor = False + end + object lblTargCPU: TLabel + AnchorSideLeft.Control = TabSheet2 + AnchorSideTop.Control = lblFPCVersion + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = TabSheet2 + AnchorSideRight.Side = asrBottom + Left = 0 + Height = 14 + Top = 66 + Width = 490 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + Caption = 'Target CPU :' + ParentColor = False + end + object lblTargetOS: TLabel + AnchorSideLeft.Control = TabSheet2 + AnchorSideTop.Control = lblTargCPU + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = TabSheet2 + AnchorSideRight.Side = asrBottom + Left = 0 + Height = 14 + Top = 86 + Width = 490 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + Caption = 'Target OS :' + ParentColor = False + end + object lblWidgetName: TLabel + AnchorSideLeft.Control = TabSheet2 + AnchorSideTop.Control = lblTargetOS + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = TabSheet2 + AnchorSideRight.Side = asrBottom + Left = 0 + Height = 14 + Top = 106 + Width = 490 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + Caption = 'Widget Name' + ParentColor = False + end + end + object TabSheet3: TTabSheet + Caption = 'License' + ClientHeight = 301 + ClientWidth = 494 + object Memo1: TMemo + Left = 0 + Height = 301 + Top = 0 + Width = 494 + Align = alClient + Lines.Strings = ( + 'Memo1' + ) + TabOrder = 0 + end + end + end + object ButtonPanel1: TButtonPanel + Left = 6 + Height = 34 + Top = 346 + Width = 486 + TabOrder = 1 + ShowButtons = [pbClose, pbHelp] + end + object RxVersionInfo1: TRxVersionInfo + left = 432 + top = 88 + end +end diff --git a/components/rx/version/2.1/rxaboutformunit.pas b/components/rx/version/2.1/rxaboutformunit.pas new file mode 100644 index 000000000..561ec5e0c --- /dev/null +++ b/components/rx/version/2.1/rxaboutformunit.pas @@ -0,0 +1,107 @@ +{ RxAboutForm + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxAboutFormUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ComCtrls, StdCtrls, ExtCtrls, ButtonPanel, RxVersInfo; + +type + + { TrxAboutFormForm } + + TrxAboutFormForm = class(TForm) + ButtonPanel1: TButtonPanel; + Image1: TImage; + lblAppTitle: TLabel; + lblBuildDate: TLabel; + lblFPCVersion: TLabel; + lblLCLVersion: TLabel; + lblTargCPU: TLabel; + lblTargetOS: TLabel; + lblVersion: TLabel; + lblWidgetName: TLabel; + Memo1: TMemo; + Memo2: TMemo; + PageControl1: TPageControl; + RxVersionInfo1: TRxVersionInfo; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + TabSheet3: TTabSheet; + procedure FormCreate(Sender: TObject); + private + { private declarations } + public + procedure LoadLicense(AFileName:string); + end; + +implementation +uses rxconst; + +{$R *.lfm} + +{ TrxAboutFormForm } + +procedure TrxAboutFormForm.FormCreate(Sender: TObject); +begin + lblAppTitle.Caption:=RxVersionInfo1.ProductName; + if lblAppTitle.Caption = '' then + lblAppTitle.Caption:=Application.Title; + + PageControl1.ActivePageIndex:=0; + Memo1.Text:=''; + lblWidgetName.Caption:=RxVersionInfo1.WidgetName; + lblVersion.Caption:=sAppVersion + RxVersionInfo1.FileLongVersion; + lblLCLVersion.Caption:=sLCLVersion + LCLVersion; + lblFPCVersion.Caption:=sFpcVersion + {$I %FPCVERSION%}; + lblTargCPU.Caption:=sTargetCPU + {$I %FPCTARGETCPU%}; + lblTargetOS.Caption:=sTargetOS + {$I %FPCTARGETOS%}; + lblBuildDate.Caption:=sBuildDate + {$I %DATE%}; + TabSheet1.Caption:=sGeneral; + TabSheet2.Caption:=sDetails; + TabSheet3.Caption:=sLicense; + Memo2.Color:=TabSheet1.Color; +end; + + +procedure TrxAboutFormForm.LoadLicense(AFileName: string); +begin + if FileExistsUTF8(AFileName) then + Memo1.Lines.LoadFromFile(UTF8ToSys(AFileName)); +end; + +end. + diff --git a/components/rx/version/2.1/rxappicon.pas b/components/rx/version/2.1/rxappicon.pas new file mode 100644 index 000000000..779fa8615 --- /dev/null +++ b/components/rx/version/2.1/rxappicon.pas @@ -0,0 +1,171 @@ +{ rxappicon unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxappicon; + +{$mode objfpc}{$H+} + +{$IFDEF LCLQT} + {$DEFINE LCLGtk2} +{$ENDIF} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs; + +type + + { TRxAppIcon } + + TRxAppIcon = class(TComponent) + private + FIcon:TIcon; + FIconStream:TMemoryStream; + function GetAppIcon: TIcon; + procedure SetAppIcon(const AValue: TIcon); + { Private declarations } + protected + procedure Loaded; override; + procedure DefineProperties(Filer: TFiler); override; + procedure ReadData(Stream: TStream); virtual; + procedure WriteData(Stream: TStream); virtual; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure ApplyIcon; + procedure LoadFromFile(AFileName:string); + property Icon:TIcon read GetAppIcon write SetAppIcon; + published + end; + + +implementation +{$IFDEF WIN32} +{$IFNDEF LCLGtk2} +uses Windows, Win32Int, InterfaceBase, vclutils; +{$ENDIF} +{$ENDIF} + + +{ TRxAppIcon } + +procedure TRxAppIcon.SetAppIcon(const AValue: TIcon); +begin + FIcon.Assign(AValue); + Application.Icon:=FIcon; +end; + +procedure TRxAppIcon.Loaded; +begin + inherited Loaded; + if not (csDesigning in ComponentState) then + ApplyIcon; +end; + +procedure TRxAppIcon.DefineProperties(Filer: TFiler); +begin + inherited DefineProperties(Filer); + Filer.DefineBinaryProperty('Data', @ReadData, @WriteData, FIconStream.Size>0); +end; + +procedure TRxAppIcon.ReadData(Stream: TStream); +begin + FIconStream.LoadFromStream(Stream); +end; + +procedure TRxAppIcon.WriteData(Stream: TStream); +begin + FIconStream.SaveToStream(Stream); +end; + +constructor TRxAppIcon.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FIcon:=TIcon.Create; + FIconStream:=TMemoryStream.Create; +end; + +destructor TRxAppIcon.Destroy; +begin + FreeAndNil(FIcon); + FreeAndNil(FIconStream); + inherited Destroy; +end; + +procedure TRxAppIcon.ApplyIcon; +{$IFDEF WIN32} +{$IFNDEF LCLGtk2} +procedure DoApply; +var + H:HICON; + CI: TCursorOrIcon; + IconSize, RequestedSize: TPoint; +begin + try + FIconStream.Position := 0; + FIconStream.ReadBuffer(CI, SizeOf(CI)); + RequestedSize.x:=0; + RequestedSize.Y:=0; + ReadIcon(FIconStream, H, CI.Count, SizeOf(CI), RequestedSize, IconSize); + SendMessage(TWin32WidgetSet(WidgetSet).AppHandle, WM_SETICON, 1, H); + SetClassLong(TWin32WidgetSet(WidgetSet).AppHandle, GCL_HICON, H); + Application.Icon:=FIcon; + Application.Icon.Handle:=H; + finally + end; +end; +{$ENDIF} +{$ENDIF} +begin + if FIconStream.Size>0 then + begin + Icon.LoadFromStream(FIconStream); + {$IFDEF WIN32} +{$IFNDEF LCLGtk2} + DoApply; +{$ENDIF} + {$ENDIF} + end; + FIconStream.Position:=0; +end; + +procedure TRxAppIcon.LoadFromFile(AFileName: string); +begin + FIconStream.LoadFromFile(AFileName); +end; + +function TRxAppIcon.GetAppIcon: TIcon; +begin + Result:=FIcon; +end; + +end. diff --git a/components/rx/version/2.1/rxapputils.pas b/components/rx/version/2.1/rxapputils.pas new file mode 100644 index 000000000..59c09ef31 --- /dev/null +++ b/components/rx/version/2.1/rxapputils.pas @@ -0,0 +1,220 @@ +{ rxapputils unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxapputils; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, Controls, IniFiles; + +const + {$IFNDEF LINUX} + AllMask = '*.*'; + {$ELSE} + AllMask = '*'; + {$ENDIF} + +var + DefCompanyName: string = ''; + RegUseAppTitle: Boolean = False; + + +function GetDefaultSection(Component: TComponent): string; +procedure GetDefaultIniData(Control: TControl; var IniFileName, + Section: string; UseRegistry: Boolean = false); +function GetDefaultIniName: string; + +type + TOnGetDefaultIniName = function: string; + +const + OnGetDefaultIniName: TOnGetDefaultIniName = nil; + +//Save to IniFile or TRegIniFile string value +procedure IniWriteString(IniFile: TObject; const Section, Ident, + Value: string); +function IniReadString(IniFile: TObject; const Section, Ident, + Value: string):string; + +//Save to IniFile or TRegIniFile integer value +procedure IniWriteInteger(IniFile: TObject; const Section, Ident:string; + const Value: integer); +function IniReadInteger(IniFile: TObject; const Section, Ident:string; + const Value: integer):integer; + +function GetDefaultIniRegKey: string; +implementation +uses Registry, Forms, FileUtil; + +function GetDefaultSection(Component: TComponent): string; +var + F: TCustomForm; + Owner: TComponent; +begin + if Component <> nil then begin + if Component is TCustomForm then Result := Component.ClassName + else begin + Result := Component.Name; + if Component is TControl then begin + F := GetParentForm(TControl(Component)); + if F <> nil then Result := F.ClassName + Result + else begin + if TControl(Component).Parent <> nil then + Result := TControl(Component).Parent.Name + Result; + end; + end + else begin + Owner := Component.Owner; + if Owner is TForm then + Result := Format('%s.%s', [Owner.ClassName, Result]); + end; + end; + end + else Result := ''; +end; + +function GetDefaultIniName: string; +var + S:string; +begin + if Assigned(OnGetDefaultIniName) then + Result:= OnGetDefaultIniName() + else + begin + Result := ExtractFileName(ChangeFileExt(Application.ExeName, '.ini')); + S:=UTF8ToSys(GetAppConfigDir(false)); + ForceDirectoriesUTF8(S); + Result:=S+Result; + end; +end; + +procedure GetDefaultIniData(Control: TControl; var IniFileName, + Section: string; UseRegistry: Boolean ); +var + I: Integer; +begin + IniFileName := EmptyStr; +{ with Control do + if Owner is TCustomForm then + for I := 0 to Owner.ComponentCount - 1 do + if (Owner.Components[I] is TFormPropertyStorage) then + begin + IniFileName := TFormPropertyStorage(Owner.Components[I]).IniFileName; + Break; + end;} + Section := GetDefaultSection(Control); + if IniFileName = EmptyStr then + if UseRegistry then IniFileName := GetDefaultIniRegKey + else + IniFileName := GetDefaultIniName; +end; + +procedure IniWriteString(IniFile: TObject; const Section, Ident, + Value: string); +var + S: string; +begin + if IniFile is TRegIniFile then + TRegIniFile(IniFile).WriteString(Section, Ident, Value) + else + begin + S := Value; + if S <> '' then + begin + if ((S[1] = '"') and (S[Length(S)] = '"')) or + ((S[1] = '''') and (S[Length(S)] = '''')) then + S := '"' + S + '"'; + end; + if IniFile is TIniFile then + TIniFile(IniFile).WriteString(Section, Ident, S); + end; +end; + +function IniReadString(IniFile: TObject; const Section, Ident, Value: string + ): string; +var + S: string; +begin + if IniFile is TRegIniFile then + Result:=TRegIniFile(IniFile).ReadString(Section, Ident, Value) + else + begin + S := Value; + if S <> '' then begin + if ((S[1] = '"') and (S[Length(S)] = '"')) or + ((S[1] = '''') and (S[Length(S)] = '''')) then + S := '"' + S + '"'; + end; + if IniFile is TIniFile then + Result:=TIniFile(IniFile).ReadString(Section, Ident, S); + end; +end; + +procedure IniWriteInteger(IniFile: TObject; const Section, Ident: string; + const Value: integer); +begin + if IniFile is TRegIniFile then + TRegIniFile(IniFile).WriteInteger(Section, Ident, Value) + else + begin + if IniFile is TIniFile then + TIniFile(IniFile).WriteInteger(Section, Ident, Value); + end; +end; + +function IniReadInteger(IniFile: TObject; const Section, Ident: string; + const Value: integer): integer; +begin + if IniFile is TRegIniFile then + Result:=TRegIniFile(IniFile).ReadInteger(Section, Ident, Value) + else + begin + if IniFile is TIniFile then + Result:=TIniFile(IniFile).ReadInteger(Section, Ident, Value); + end; +end; + +function GetDefaultIniRegKey: string; +begin + if RegUseAppTitle and (Application.Title <> '') then + Result := Application.Title + else Result := ExtractFileName(ChangeFileExt(Application.ExeName, '')); + if DefCompanyName <> '' then + Result := DefCompanyName + '\' + Result; + Result := 'Software\' + Result; +end; + + +end. + diff --git a/components/rx/version/2.1/rxceeditlookupfields.pas b/components/rx/version/2.1/rxceeditlookupfields.pas new file mode 100644 index 000000000..282c4082c --- /dev/null +++ b/components/rx/version/2.1/rxceeditlookupfields.pas @@ -0,0 +1,185 @@ +{ rxceEditLookupFields unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxceEditLookupFields; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, PropEdits; + +type + + { TLookupFieldProperty } + + TLookupFieldProperty = class(TStringPropertyEditor) + public + function GetAttributes: TPropertyAttributes; override; + procedure GetValues(Proc: TGetStrProc); override; + procedure FillValues(const Values: TStrings); virtual; + end; + + { TLookupDisplayProperty } + + TLookupDisplayProperty = class(TLookupFieldProperty) + public + function GetAttributes: TPropertyAttributes; override; + procedure Edit; override; + end; + +procedure RegisterCEEditLookupFields; +implementation +uses + // + db, duallist, Forms, rxstrutils, TypInfo, + //unit for edits + rxlookup; + +procedure RegisterCEEditLookupFields; +begin + RegisterPropertyEditor(TypeInfo(string), TRxDBLookupCombo, 'LookupField', TLookupFieldProperty); + RegisterPropertyEditor(TypeInfo(string), TRxDBLookupCombo, 'LookupDisplay', TLookupDisplayProperty); + RegisterPropertyEditor(TypeInfo(string), TRxLookupEdit, 'LookupField', TLookupFieldProperty); + RegisterPropertyEditor(TypeInfo(string), TRxLookupEdit, 'LookupDisplay', TLookupDisplayProperty); +end; + +{ TLookupFieldProperty } + +function TLookupFieldProperty.GetAttributes: TPropertyAttributes; +begin + Result:= [paValueList, paSortList, paMultiSelect]; +end; + +procedure TLookupFieldProperty.GetValues(Proc: TGetStrProc); +var + I: Integer; + Values: TStringList; +begin + Values := TStringList.Create; + try + FillValues(Values); + for I := 0 to Values.Count - 1 do Proc(Values[I]); + finally + Values.Free; + end; +end; + +procedure TLookupFieldProperty.FillValues(const Values: TStrings); +var + DataSource: TDataSource; +begin + DataSource := GetObjectProp(GetComponent(0), 'LookupSource') as TDataSource; +// DataSource := TRxDBLookupCombo(GetComponent(0)).LookupSource; + if (DataSource is TDataSource) and Assigned(DataSource.DataSet) then + DataSource.DataSet.GetFieldNames(Values); +end; + +{ TLookupDisplayProperty } + +function TLookupDisplayProperty.GetAttributes: TPropertyAttributes; +begin + Result:=inherited GetAttributes + [paDialog] +end; + +procedure TLookupDisplayProperty.Edit; +var + DualListDialog1: TDualListDialog; + Cmp1:TRxDBLookupCombo; + Cmp2:TRxLookupEdit; + +procedure DoInitFill; +var + i,j:integer; + LookupDisplay:string; +begin + if Assigned(Cmp1) then + LookupDisplay:=Cmp1.LookupDisplay + else + LookupDisplay:=Cmp2.LookupDisplay; + if LookupDisplay<>'' then + begin + StrToStrings(LookupDisplay, DualListDialog1.List2, ';'); + for i:=DualListDialog1.List1.Count-1 downto 0 do + begin + j:=DualListDialog1.List2.IndexOf(DualListDialog1.List1[i]); + if j>=0 then + DualListDialog1.List1.Delete(i); + end; + end; +end; + +function DoFillDone:string; +var + i:integer; +begin + for i:=0 to DualListDialog1.List2.Count-1 do + Result:=Result + DualListDialog1.List2[i]+';'; + if Result<>'' then + Result:=Copy(Result, 1, Length(Result)-1); +end; + +procedure DoSetCaptions; +begin + DualListDialog1.Label1Caption:='All fields'; + DualListDialog1.Label2Caption:='Fields is LookupDisplay'; + DualListDialog1.Title:='Fill fields in LookupDisplay property'; +end; + +begin + Cmp1:=nil; + Cmp2:=nil; + + if GetComponent(0) is TRxDBLookupCombo then + Cmp1:=TRxDBLookupCombo(GetComponent(0)) + else + Cmp2:=TRxLookupEdit(GetComponent(0)); + + DualListDialog1:=TDualListDialog.Create(Application); + try + DoSetCaptions; + FillValues(DualListDialog1.List1); + DoInitFill; + if DualListDialog1.Execute then + begin + if Assigned(Cmp1) then + Cmp1.LookupDisplay:=DoFillDone + else + Cmp2.LookupDisplay:=DoFillDone; + end; + finally + FreeAndNil(DualListDialog1); + end; +end; + +end. + diff --git a/components/rx/version/2.1/rxclock.pas b/components/rx/version/2.1/rxclock.pas new file mode 100644 index 000000000..2b4bd4534 --- /dev/null +++ b/components/rx/version/2.1/rxclock.pas @@ -0,0 +1,990 @@ +{ rxclock unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxclock; + +interface + +{$I rx.inc} +uses LCLType, LMessages, SysUtils, Classes, Graphics, Controls, Forms, {StdCtrls,} + ExtCtrls, Menus, messages; + +type + TShowClock = (scDigital, scAnalog); + TPaintMode = (pmPaintAll, pmHandPaint); + + TRxClockTime = packed record + Hour, Minute, Second: Word; + end; + + TRxGetTimeEvent = procedure (Sender: TObject; var ATime: TDateTime) of object; + +{ TRxClock } + + TRxClock = class(TCustomPanel) + private + { Private declarations } + FTimer: TTimer; + FAutoSize: Boolean; + FShowMode: TShowClock; + FTwelveHour: Boolean; + FLeadingZero: Boolean; + FShowSeconds: Boolean; + FAlarm: TDateTime; + FAlarmEnabled: Boolean; + FHooked: Boolean; + FDotsColor: TColor; + FAlarmWait: Boolean; + FDisplayTime: TRxClockTime; + FClockRect: TRect; + FClockRadius: Longint; + FClockCenter: TPoint; + FOnGetTime: TRxGetTimeEvent; + FOnAlarm: TNotifyEvent; + procedure TimerExpired(Sender: TObject); + procedure GetTime(var T: TRxClockTime); + function IsAlarmTime(ATime: TDateTime): Boolean; + procedure SetShowMode(Value: TShowClock); + function GetAlarmElement(Index: Integer): Byte; + procedure SetAlarmElement(Index: Integer; Value: Byte); + procedure SetDotsColor(Value: TColor); + procedure SetTwelveHour(Value: Boolean); + procedure SetLeadingZero(Value: Boolean); + procedure SetShowSeconds(Value: Boolean); + procedure PaintAnalogClock(PaintMode: TPaintMode); + procedure Paint3DFrame(var Rect: TRect); + procedure DrawAnalogFace; + procedure CircleClock(MaxWidth, MaxHeight: Integer); + procedure DrawSecondHand(Pos: Integer); + procedure DrawFatHand(Pos: Integer; HourHand: Boolean); + procedure PaintTimeStr(var Rect: TRect; FullTime: Boolean); + procedure ResizeFont(const Rect: TRect); + procedure ResetAlarm; + procedure CheckAlarm; + function FormatSettingsChange(var Message: TLMessage): Boolean; +// procedure CMCtl3DChanged(var Message: TLMessage); message CM_CTL3DCHANGED; + procedure CMTextChanged(var Message: TLMessage); message CM_TEXTCHANGED; + procedure CMFontChanged(var Message: TLMessage); message CM_FONTCHANGED; + {$IFDEF windows} + procedure WMTimeChange(var Message: TLMessage); message WM_TIMECHANGE; + {$ENDIF} + protected + { Protected declarations } + procedure SetAutoSize(const Value: Boolean); virtual; + procedure Alarm; dynamic; + procedure AlignControls(AControl: TControl; var Rect: TRect); override; + procedure CreateWnd; override; +// procedure DestroyWindowHandle; override; + procedure Loaded; override; + procedure Paint; override; + function GetSystemTime: TDateTime; virtual; + public + { Public declarations } + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure SetAlarmTime(AlarmTime: TDateTime); + procedure UpdateClock; + published + { Published declarations } + property AlarmEnabled: Boolean read FAlarmEnabled write FAlarmEnabled default False; + property AlarmHour: Byte Index 1 read GetAlarmElement write SetAlarmElement default 0; + property AlarmMinute: Byte Index 2 read GetAlarmElement write SetAlarmElement default 0; + property AlarmSecond: Byte Index 3 read GetAlarmElement write SetAlarmElement default 0; + property AutoSize: Boolean read FAutoSize write SetAutoSize default False; + property BevelInner default bvLowered; + property BevelOuter default bvRaised; + property DotsColor: TColor read FDotsColor write SetDotsColor default clTeal; + property ShowMode: TShowClock read FShowMode write SetShowMode default scDigital; + property ShowSeconds: Boolean read FShowSeconds write SetShowSeconds default True; + property TwelveHour: Boolean read FTwelveHour write SetTwelveHour default False; + property LeadingZero: Boolean read FLeadingZero write SetLeadingZero default True; + property Align; + property BevelWidth; + property BorderWidth; + property BorderStyle; +{$IFDEF RX_D4} + property Anchors; + property Constraints; + property UseDockManager default True; + property DockSite; + property DragKind; + property FullRepaint; +{$ENDIF} + property Color; + property Cursor; + property DragMode; + property DragCursor; + property Enabled; + property Font; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property Visible; + property OnAlarm: TNotifyEvent read FOnAlarm write FOnAlarm; + property OnGetTime: TRxGetTimeEvent read FOnGetTime write FOnGetTime; + property OnClick; + property OnDblClick; + property OnMouseMove; + property OnMouseDown; + property OnMouseUp; + property OnDragOver; + property OnDragDrop; + property OnEndDrag; + property OnResize; + property OnContextPopup; + property OnStartDrag; +// property OnCanResize; + property OnConstrainedResize; + property OnDockDrop; + property OnDockOver; + property OnEndDock; +// property OnGetSiteInfo; +// property OnStartDock; +// property OnUnDock; + end; + +implementation + +uses VCLUtils, RTLConsts{, LConsts}, LCLIntf; + +const + Registered: Boolean = False; + +type + PPointArray = ^TPointArray; + TPointArray = array [0..60 * 2 - 1] of TSmallPoint; + +const + ClockData: array[0..60 * 4 - 1] of Byte = ( + $00, $00, $C1, $E0, $44, $03, $EC, $E0, $7F, $06, $6F, $E1, + $A8, $09, $48, $E2, $B5, $0C, $74, $E3, $9F, $0F, $F0, $E4, + $5E, $12, $B8, $E6, $E9, $14, $C7, $E8, $39, $17, $17, $EB, + $48, $19, $A2, $ED, $10, $1B, $60, $F0, $8C, $1C, $4B, $F3, + $B8, $1D, $58, $F6, $91, $1E, $81, $F9, $14, $1F, $BC, $FC, + $40, $1F, $00, $00, $14, $1F, $44, $03, $91, $1E, $7F, $06, + $B8, $1D, $A8, $09, $8C, $1C, $B5, $0C, $10, $1B, $A0, $0F, + $48, $19, $5E, $12, $39, $17, $E9, $14, $E9, $14, $39, $17, + $5E, $12, $48, $19, $9F, $0F, $10, $1B, $B5, $0C, $8C, $1C, + $A8, $09, $B8, $1D, $7F, $06, $91, $1E, $44, $03, $14, $1F, + $00, $00, $3F, $1F, $BC, $FC, $14, $1F, $81, $F9, $91, $1E, + $58, $F6, $B8, $1D, $4B, $F3, $8C, $1C, $60, $F0, $10, $1B, + $A2, $ED, $48, $19, $17, $EB, $39, $17, $C7, $E8, $E9, $14, + $B8, $E6, $5E, $12, $F0, $E4, $9F, $0F, $74, $E3, $B5, $0C, + $48, $E2, $A8, $09, $6F, $E1, $7F, $06, $EC, $E0, $44, $03, + $C1, $E0, $00, $00, $EC, $E0, $BC, $FC, $6F, $E1, $81, $F9, + $48, $E2, $58, $F6, $74, $E3, $4B, $F3, $F0, $E4, $60, $F0, + $B8, $E6, $A2, $ED, $C7, $E8, $17, $EB, $17, $EB, $C7, $E8, + $A2, $ED, $B8, $E6, $61, $F0, $F0, $E4, $4B, $F3, $74, $E3, + $58, $F6, $48, $E2, $81, $F9, $6F, $E1, $BC, $FC, $EC, $E0); + +const + AlarmSecDelay = 60; { seconds for try alarm event after alarm time occured } + MaxDotWidth = 25; { maximum Hour-marking dot width } + MinDotWidth = 2; { minimum Hour-marking dot width } + MinDotHeight = 1; { minimum Hour-marking dot height } + + { distance from the center of the clock to... } + HourSide = 7; { ...either side of the Hour hand } + MinuteSide = 5; { ...either side of the Minute hand } + HourTip = 60; { ...the tip of the Hour hand } + MinuteTip = 80; { ...the tip of the Minute hand } + SecondTip = 80; { ...the tip of the Second hand } + HourTail = 15; { ...the tail of the Hour hand } + MinuteTail = 20; { ...the tail of the Minute hand } + + { conversion factors } + CirTabScale = 8000; { circle table values scale down value } + MmPerDm = 100; { millimeters per decimeter } + + { number of hand positions on... } + HandPositions = 60; { ...entire clock } + SideShift = (HandPositions div 4); { ...90 degrees of clock } + TailShift = (HandPositions div 2); { ...180 degrees of clock } + +var + CircleTab: PPointArray; + HRes: Integer; { width of the display (in pixels) } + VRes: Integer; { height of the display (in raster lines) } + AspectH: Longint; { number of pixels per decimeter on the display } + AspectV: Longint; { number of raster lines per decimeter on the display } + +{ Exception routine } + +procedure InvalidTime(Hour, Min, Sec: Word); +var + sTime: string[50]; +begin + sTime := IntToStr(Hour) + DefaultFormatSettings.TimeSeparator + IntToStr(Min) + + DefaultFormatSettings.TimeSeparator + IntToStr(Sec); + raise EConvertError.CreateFmt(SInvalidTime, [sTime]); +end; + +function VertEquiv(l: Integer): Integer; +begin + VertEquiv := Longint(l) * AspectV div AspectH; +end; + +function HorzEquiv(l: Integer): Integer; +begin + HorzEquiv := Longint(l) * AspectH div AspectV; +end; + +function LightColor(Color: TColor): TColor; +var + L: Longint; + C: array[1..3] of Byte; + I: Byte; +begin + L := ColorToRGB(Color); + C[1] := GetRValue(L); + C[2] := GetGValue(L); + C[3] := GetBValue(L); + for I := 1 to 3 do + begin + if C[I] = $FF then + begin + Result := clBtnHighlight; + Exit; + end; + if C[I] <> 0 then + if C[I] = $C0 then C[I] := $FF + else C[I] := C[I] + $7F; + end; + Result := TColor(RGB(C[1], C[2], C[3])); +end; + +procedure ClockInit; +var + Pos: Integer; { hand position Index into the circle table } + vSize: Integer; { height of the display in millimeters } + hSize: Integer; { width of the display in millimeters } + DC: HDC; +begin + DC := GetDC(0); + try + VRes := GetDeviceCaps(DC, VERTRES); + HRes := GetDeviceCaps(DC, HORZRES); + vSize := GetDeviceCaps(DC, VERTSIZE); + hSize := GetDeviceCaps(DC, HORZSIZE); + finally + ReleaseDC(0, DC); + end; + AspectV := (Longint(VRes) * MmPerDm) div Longint(vSize); + AspectH := (Longint(HRes) * MmPerDm) div Longint(hSize); + CircleTab := PPointArray(@ClockData); + for Pos := 0 to HandPositions - 1 do + CircleTab^[Pos].Y := VertEquiv(CircleTab^[Pos].Y); +end; + +function HourHandPos(T: TRxClockTime): Integer; +begin + Result := (T.Hour * 5) + (T.Minute div 12); +end; + +{ Digital clock font routine } + +procedure SetNewFontSize(Canvas: TCanvas; const Text: string; + MaxH, MaxW: Integer); +const + fHeight = 1000; +var + Font: TFont; + NewH: Integer; +begin + Font := Canvas.Font; + { empiric calculate character height by cell height } + MaxH := MulDiv(MaxH, 4, 5); +{ with Font do + begin} + Font.Height := -fHeight; + NewH := MulDiv(fHeight, MaxW, Canvas.TextWidth(Text)); + if NewH > MaxH then NewH := MaxH; + Font.Height := -NewH; +// end; +end; + +{ TRxClock } + +constructor TRxClock.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + if not Registered then begin + ClockInit; + Registered := True; + end; + Caption := TimeToStr(Time); + ControlStyle := ControlStyle - [csSetCaption] - [csReplicatable]; + BevelInner := bvLowered; + BevelOuter := bvRaised; + FTimer := TTimer.Create(Self); + FTimer.Interval := 450; { every second } + FTimer.OnTimer := @TimerExpired; + FDotsColor := clTeal; + FShowSeconds := True; + FLeadingZero := True; + GetTime(FDisplayTime); + if FDisplayTime.Hour >= 12 then Dec(FDisplayTime.Hour, 12); + FAlarmWait := True; + FAlarm := EncodeTime(0, 0, 0, 0); +end; + +destructor TRxClock.Destroy; +begin + if FHooked then + begin +// Application.UnhookMainWindow(FormatSettingsChange); + FHooked := False; + end; + inherited Destroy; +end; + +procedure TRxClock.Loaded; +begin + inherited Loaded; + ResetAlarm; +end; + +procedure TRxClock.CreateWnd; +begin + inherited CreateWnd; + if not (csDesigning in ComponentState) and not (IsLibrary or FHooked) then + begin +// Application.HookMainWindow(FormatSettingsChange); + FHooked := True; + end; +end; + +{procedure TRxClock.DestroyWindowHandle; +begin + if FHooked then begin + Application.UnhookMainWindow(FormatSettingsChange); + FHooked := False; + end; + inherited DestroyWindowHandle; +end; +} +{ +procedure TRxClock.CMCtl3DChanged(var Message: TMessage); +begin + inherited; + if ShowMode = scAnalog then Invalidate; +end; +} +procedure TRxClock.CMTextChanged(var Message: TMessage); +begin + { Skip this message, no repaint } +end; + +procedure TRxClock.CMFontChanged(var Message: TMessage); +begin + inherited; + Invalidate; + if AutoSize then Realign; +end; + +{$IFDEF windows} +procedure TRxClock.WMTimeChange(var Message: TMessage); +begin + inherited; + Invalidate; + CheckAlarm; +end; +{$ENDIF} + +function TRxClock.FormatSettingsChange(var Message: TMessage): Boolean; +begin +{$IFDEF windows} + Result := False; + case Message.Msg of + WM_WININICHANGE: + begin + Invalidate; + if AutoSize then Realign; + end; + end; +{$ENDIF} +end; + +function TRxClock.GetSystemTime: TDateTime; +begin + Result := SysUtils.Time; + if Assigned(FOnGetTime) then FOnGetTime(Self, Result); +end; + +procedure TRxClock.GetTime(var T: TRxClockTime); +var + MSec: Word; +begin + with T do + DecodeTime(GetSystemTime, Hour, Minute, Second, MSec); +end; + +procedure TRxClock.UpdateClock; +begin + Invalidate; + if AutoSize then Realign; + Update; +end; + +procedure TRxClock.ResetAlarm; +begin + FAlarmWait := (FAlarm > GetSystemTime) or (FAlarm = 0); +end; + +function TRxClock.IsAlarmTime(ATime: TDateTime): Boolean; +var + Hour, Min, Sec, MSec: Word; + AHour, AMin, ASec: Word; +begin + DecodeTime(FAlarm, Hour, Min, Sec, MSec); + DecodeTime(ATime, AHour, AMin, ASec, MSec); + Result := {FAlarmWait and} (Hour = AHour) and (Min = AMin) and + (ASec >= Sec) and (ASec <= Sec + AlarmSecDelay); +end; + +procedure TRxClock.ResizeFont(const Rect: TRect); +var + H, W: Integer; + DC: HDC; + TimeStr: string; +begin + H := Rect.Bottom - Rect.Top - 4; + W := (Rect.Right - Rect.Left - 30); + if (H <= 0) or (W <= 0) then Exit; + DC := GetDC(0); + try + Canvas.Handle := DC; + Canvas.Font := Font; + TimeStr := '88888'; + if FShowSeconds then TimeStr := TimeStr + '888'; + if FTwelveHour then begin + if Canvas.TextWidth(DefaultFormatSettings.TimeAMString) > Canvas.TextWidth(DefaultFormatSettings.TimePMString) then + TimeStr := TimeStr + ' ' + DefaultFormatSettings.TimeAMString + else TimeStr := TimeStr + ' ' + DefaultFormatSettings.TimePMString; + end; + SetNewFontSize(Canvas, TimeStr, H, W); + Font := Canvas.Font; + finally + Canvas.Handle := 0; + ReleaseDC(0, DC); + end; +end; + +procedure TRxClock.AlignControls(AControl: TControl; var Rect: TRect); +{$IFDEF RX_D4} +var + InflateWidth: Integer; +{$ENDIF} +begin + inherited AlignControls(AControl, Rect); + FClockRect := Rect; +{$IFDEF RX_D4} + InflateWidth := BorderWidth + 1; + if BevelOuter <> bvNone then Inc(InflateWidth, BevelWidth); + if BevelInner <> bvNone then Inc(InflateWidth, BevelWidth); + InflateRect(FClockRect, -InflateWidth, -InflateWidth); +{$ENDIF} + with FClockRect do CircleClock(Right - Left, Bottom - Top); + if AutoSize then ResizeFont(Rect); +end; + +procedure TRxClock.Alarm; +begin + if Assigned(FOnAlarm) then FOnAlarm(Self); +end; + +procedure TRxClock.SetAutoSize(const Value: Boolean); +begin + if (Value <> FAutoSize) then + begin + FAutoSize := Value; + if FAutoSize then + begin + Invalidate; + Realign; + end; + end; +end; + +procedure TRxClock.SetTwelveHour(Value: Boolean); +begin + if FTwelveHour <> Value then begin + FTwelveHour := Value; + Invalidate; + if AutoSize then Realign; + end; +end; + +procedure TRxClock.SetLeadingZero(Value: Boolean); +begin + if FLeadingZero <> Value then begin + FLeadingZero := Value; + Invalidate; + end; +end; + +procedure TRxClock.SetShowSeconds(Value: Boolean); +begin + if FShowSeconds <> Value then begin + {if FShowSeconds and (ShowMode = scAnalog) then + DrawSecondHand(FDisplayTime.Second);} + FShowSeconds := Value; + Invalidate; + if AutoSize then Realign; + end; +end; + +procedure TRxClock.SetDotsColor(Value: TColor); +begin + if Value <> FDotsColor then begin + FDotsColor := Value; + Invalidate; + end; +end; + +procedure TRxClock.SetShowMode(Value: TShowClock); +begin + if FShowMode <> Value then begin + FShowMode := Value; + Invalidate; + end; +end; + +function TRxClock.GetAlarmElement(Index: Integer): Byte; +var + Hour, Min, Sec, MSec: Word; +begin + DecodeTime(FAlarm, Hour, Min, Sec, MSec); + case Index of + 1: Result := Hour; + 2: Result := Min; + 3: Result := Sec; + else Result := 0; + end; +end; + +procedure TRxClock.SetAlarmElement(Index: Integer; Value: Byte); +var + Hour, Min, Sec, MSec: Word; +begin + DecodeTime(FAlarm, Hour, Min, Sec, MSec); + case Index of + 1: Hour := Value; + 2: Min := Value; + 3: Sec := Value; + else Exit; + end; + if (Hour < 24) and (Min < 60) and (Sec < 60) then begin + FAlarm := EncodeTime(Hour, Min, Sec, 0); + ResetAlarm; + end + else InvalidTime(Hour, Min, Sec); +end; + +procedure TRxClock.SetAlarmTime(AlarmTime: TDateTime); +var + Hour, Min, Sec, MSec: Word; +begin + DecodeTime(FAlarm, Hour, Min, Sec, MSec); + if (Hour < 24) and (Min < 60) and (Sec < 60) then begin + FAlarm := Frac(AlarmTime); + ResetAlarm; + end + else InvalidTime(Hour, Min, Sec); +end; + +procedure TRxClock.TimerExpired(Sender: TObject); +var + DC: HDC; + Rect: TRect; + InflateWidth: Integer; +begin + DC := GetDC(Handle); + try + Canvas.Handle := DC; + Canvas.Brush.Color := Color; + Canvas.Font := Font; + Canvas.Pen.Color := Font.Color; + if FShowMode = scAnalog then PaintAnalogClock(pmHandPaint) + else begin + Rect := GetClientRect; + InflateWidth := BorderWidth; + if BevelOuter <> bvNone then Inc(InflateWidth, BevelWidth); + if BevelInner <> bvNone then Inc(InflateWidth, BevelWidth); + InflateRect(Rect, -InflateWidth, -InflateWidth); + PaintTimeStr(Rect, False); + end; + finally + Canvas.Handle := 0; + ReleaseDC(Handle, DC); + end; + CheckAlarm; +end; + +procedure TRxClock.CheckAlarm; +begin + if FAlarmEnabled and IsAlarmTime(GetSystemTime) then begin + if FAlarmWait then begin + FAlarmWait := False; + Alarm; + end; + end + else ResetAlarm; +end; + +procedure TRxClock.DrawAnalogFace; +var + Pos, DotHeight, DotWidth: Integer; + DotCenter: TPoint; + R: TRect; + SaveBrush, SavePen: TColor; + MinDots: Boolean; +begin + DotWidth := (MaxDotWidth * Longint(FClockRect.Right - FClockRect.Left)) div HRes; + DotHeight := VertEquiv(DotWidth); + if DotHeight < MinDotHeight then DotHeight := MinDotHeight; + if DotWidth < MinDotWidth then DotWidth := MinDotWidth; + DotCenter.X := DotWidth div 2; + DotCenter.Y := DotHeight div 2; + InflateRect(FClockRect, -DotCenter.Y, -DotCenter.X); + FClockRadius := ((FClockRect.Right - FClockRect.Left) div 2); + FClockCenter.X := FClockRect.Left + FClockRadius; + FClockCenter.Y := FClockRect.Top + ((FClockRect.Bottom - FClockRect.Top) div 2); + InflateRect(FClockRect, DotCenter.Y, DotCenter.X); + SaveBrush := Canvas.Brush.Color; + SavePen := Canvas.Pen.Color; + try + Canvas.Brush.Color := Canvas.Pen.Color; + MinDots := ((DotWidth > MinDotWidth) and (DotHeight > MinDotHeight)); + for Pos := 0 to HandPositions - 1 do + begin + R.Top := (CircleTab^[Pos].Y * FClockRadius) div CirTabScale + FClockCenter.Y; + R.Left := (CircleTab^[Pos].X * FClockRadius) div CirTabScale + FClockCenter.X; + if (Pos mod 5) <> 0 then + begin + if MinDots then + begin +// if Ctl3D then + begin + Canvas.Brush.Color := clBtnShadow; + OffsetRect(R, -1, -1); + R.Right := R.Left + 2; + R.Bottom := R.Top + 2; + Canvas.FillRect(R); + Canvas.Brush.Color := clBtnHighlight; + OffsetRect(R, 1, 1); + Canvas.FillRect(R); + Canvas.Brush.Color := Self.Color; + end; + R.Right := R.Left + 1; + R.Bottom := R.Top + 1; + Canvas.FillRect(R); + end; + end + else begin + R.Right := R.Left + DotWidth; + R.Bottom := R.Top + DotHeight; + OffsetRect(R, -DotCenter.X, -DotCenter.Y); + if {Ctl3D and} MinDots then + with Canvas do + begin + Brush.Color := FDotsColor; + Brush.Style := bsSolid; + FillRect(R); + RxFrame3D(Canvas, R, LightColor(FDotsColor), clWindowFrame, 1); + end; + Canvas.Brush.Color := Canvas.Pen.Color; + if not ({Ctl3D and} MinDots) then Canvas.FillRect(R); + end; + end; + finally + Canvas.Brush.Color := SaveBrush; + Canvas.Pen.Color := SavePen; + end; +end; + +procedure TRxClock.CircleClock(MaxWidth, MaxHeight: Integer); +var + ClockHeight: Integer; + ClockWidth: Integer; +begin + if MaxWidth > HorzEquiv(MaxHeight) then begin + ClockWidth := HorzEquiv(MaxHeight); + FClockRect.Left := FClockRect.Left + ((MaxWidth - ClockWidth) div 2); + FClockRect.Right := FClockRect.Left + ClockWidth; + end + else begin + ClockHeight := VertEquiv(MaxWidth); + FClockRect.Top := FClockRect.Top + ((MaxHeight - ClockHeight) div 2); + FClockRect.Bottom := FClockRect.Top + ClockHeight; + end; +end; + +procedure TRxClock.DrawSecondHand(Pos: Integer); +var + Radius: Longint; + SaveMode: TPenMode; +begin + Radius := (FClockRadius * SecondTip) div 100; + SaveMode := Canvas.Pen.Mode; + Canvas.Pen.Mode := pmNot; + try + Canvas.MoveTo(FClockCenter.X, FClockCenter.Y); + Canvas.LineTo(FClockCenter.X + ((CircleTab^[Pos].X * Radius) div + CirTabScale), FClockCenter.Y + ((CircleTab^[Pos].Y * Radius) div + CirTabScale)); + finally + Canvas.Pen.Mode := SaveMode; + end; +end; + +procedure TRxClock.DrawFatHand(Pos: Integer; HourHand: Boolean); +var + ptSide, ptTail, ptTip: TPoint; + Index, Hand: Integer; + Scale: Longint; + SaveMode: TPenMode; +begin + if HourHand then Hand := HourSide else Hand := MinuteSide; + Scale := (FClockRadius * Hand) div 100; + Index := (Pos + SideShift) mod HandPositions; + ptSide.Y := (CircleTab^[Index].Y * Scale) div CirTabScale; + ptSide.X := (CircleTab^[Index].X * Scale) div CirTabScale; + if HourHand then Hand := HourTip else Hand := MinuteTip; + Scale := (FClockRadius * Hand) div 100; + ptTip.Y := (CircleTab^[Pos].Y * Scale) div CirTabScale; + ptTip.X := (CircleTab^[Pos].X * Scale) div CirTabScale; + if HourHand then Hand := HourTail else Hand := MinuteTail; + Scale := (FClockRadius * Hand) div 100; + Index := (Pos + TailShift) mod HandPositions; + ptTail.Y := (CircleTab^[Index].Y * Scale) div CirTabScale; + ptTail.X := (CircleTab^[Index].X * Scale) div CirTabScale; + with Canvas do begin + SaveMode := Pen.Mode; + Pen.Mode := pmCopy; + try + MoveTo(FClockCenter.X + ptSide.X, FClockCenter.Y + ptSide.Y); + LineTo(FClockCenter.X + ptTip.X, FClockCenter.Y + ptTip.Y); + MoveTo(FClockCenter.X - ptSide.X, FClockCenter.Y - ptSide.Y); + LineTo(FClockCenter.X + ptTip.X, FClockCenter.Y + ptTip.Y); + MoveTo(FClockCenter.X + ptSide.X, FClockCenter.Y + ptSide.Y); + LineTo(FClockCenter.X + ptTail.X, FClockCenter.Y + ptTail.Y); + MoveTo(FClockCenter.X - ptSide.X, FClockCenter.Y - ptSide.Y); + LineTo(FClockCenter.X + ptTail.X, FClockCenter.Y + ptTail.Y); + finally + Pen.Mode := SaveMode; + end; + end; +end; + +procedure TRxClock.PaintAnalogClock(PaintMode: TPaintMode); +var + NewTime: TRxClockTime; +begin + Canvas.Pen.Color := Font.Color; + Canvas.Brush.Color := Color; + SetBkMode(Canvas.Handle, TRANSPARENT); + if PaintMode = pmPaintAll then + begin + with Canvas do + begin + FillRect(FClockRect); + Pen.Color := Self.Font.Color; + DrawAnalogFace; + DrawFatHand(HourHandPos(FDisplayTime), True); + DrawFatHand(FDisplayTime.Minute, False); + Pen.Color := Brush.Color; + if ShowSeconds then + DrawSecondHand(FDisplayTime.Second); + end; + end + else + begin + with Canvas do + begin + Pen.Color := Brush.Color; + GetTime(NewTime); + if NewTime.Hour >= 12 then + Dec(NewTime.Hour, 12); + if (NewTime.Second <> FDisplayTime.Second) then + if ShowSeconds then + DrawSecondHand(FDisplayTime.Second); + if ((NewTime.Minute <> FDisplayTime.Minute) or + (NewTime.Hour <> FDisplayTime.Hour)) then + begin + DrawFatHand(FDisplayTime.Minute, False); + DrawFatHand(HourHandPos(FDisplayTime), True); + Pen.Color := Self.Font.Color; + DrawFatHand(NewTime.Minute, False); + DrawFatHand(HourHandPos(NewTime), True); + end; + Pen.Color := Brush.Color; + if (NewTime.Second <> FDisplayTime.Second) then + begin + if ShowSeconds then + DrawSecondHand(NewTime.Second); + FDisplayTime := NewTime; + end; + end; + end; +end; + +procedure TRxClock.PaintTimeStr(var Rect: TRect; FullTime: Boolean); +var + FontHeight, FontWidth, FullWidth, I, L, H: Integer; + TimeStr, SAmPm: string; + NewTime: TRxClockTime; + + function IsPartSym(Idx, Num: Byte): Boolean; + var + TwoSymHour: Boolean; + begin + TwoSymHour := (H >= 10) or FLeadingZero; + case Idx of + 1: begin {hours} + Result := True; + end; + 2: begin {minutes} + if TwoSymHour then Result := (Num in [4, 5]) + else Result := (Num in [3, 4]); + end; + 3: begin {seconds} + if TwoSymHour then Result := FShowSeconds and (Num in [7, 8]) + else Result := FShowSeconds and (Num in [6, 7]); + end; + else Result := False; + end; + end; + + procedure DrawSym(Sym: Char; Num: Byte); + begin + if FullTime or + ((NewTime.Second <> FDisplayTime.Second) and IsPartSym(3, Num)) or + ((NewTime.Minute <> FDisplayTime.Minute) and IsPartSym(2, Num)) or + (NewTime.Hour <> FDisplayTime.Hour) then + begin + Canvas.FillRect(Rect); + DrawText(Canvas.Handle, @Sym, 1, Rect, DT_EXPANDTABS or + DT_VCENTER or DT_CENTER or DT_NOCLIP or DT_SINGLELINE); + end; + end; + +begin + GetTime(NewTime); + H := NewTime.Hour; + if NewTime.Hour >= 12 then Dec(NewTime.Hour, 12); + if FTwelveHour then begin + if H > 12 then Dec(H, 12) else if H = 0 then H := 12; + end; + if (not FullTime) and (NewTime.Hour <> FDisplayTime.Hour) then begin + Repaint; + Exit; + end; + if FLeadingZero then TimeStr := 'hh:mm' else TimeStr := 'h:mm'; + if FShowSeconds then TimeStr := TimeStr + ':ss'; + if FTwelveHour then TimeStr := TimeStr + ' ampm'; + with NewTime do + TimeStr := FormatDateTime(TimeStr, GetSystemTime); + if (H >= 10) or FLeadingZero then L := 5 else L := 4; + if FShowSeconds then Inc(L, 3); + SAmPm := Copy(TimeStr, L + 1, MaxInt); + with Canvas do begin + Font := Self.Font; + FontHeight := TextHeight('8'); + FontWidth := TextWidth('8'); + FullWidth := TextWidth(SAmPm) + (L * FontWidth); + with Rect do begin + Left := ((Right + Left) - FullWidth) div 2 {shr 1}; + Right := Left + FullWidth; + Top := ((Bottom + Top) - FontHeight) div 2 {shr 1}; + Bottom := Top + FontHeight; + end; + Brush.Color := Color; + for I := 1 to L do begin + Rect.Right := Rect.Left + FontWidth; + DrawSym(TimeStr[I], I); + Inc(Rect.Left, FontWidth); + end; + if FullTime or (NewTime.Hour <> FDisplayTime.Hour) then begin + Rect.Right := Rect.Left + TextWidth(SAmPm); + DrawText(Handle, @SAmPm[1], Length(SAmPm), Rect, + DT_EXPANDTABS or DT_VCENTER or DT_NOCLIP or DT_SINGLELINE); + end; + end; + FDisplayTime := NewTime; +end; + +procedure TRxClock.Paint3DFrame(var Rect: TRect); +var + TopColor, BottomColor: TColor; + + procedure AdjustColors(Bevel: TPanelBevel); + begin + TopColor := clBtnHighlight; + if Bevel = bvLowered then TopColor := clBtnShadow; + BottomColor := clBtnShadow; + if Bevel = bvLowered then BottomColor := clBtnHighlight; + end; + +begin + Rect := GetClientRect; + with Canvas do + begin + Brush.Color := Color; + FillRect(Rect); + end; + if BevelOuter <> bvNone then + begin + AdjustColors(BevelOuter); + RxFrame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth); + end; + InflateRect(Rect, -BorderWidth, -BorderWidth); + if BevelInner <> bvNone then + begin + AdjustColors(BevelInner); + RxFrame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth); + end; +end; + +procedure TRxClock.Paint; +var + R: TRect; +begin + Paint3DFrame(R); + case FShowMode of + scDigital: PaintTimeStr(R, True); + scAnalog: PaintAnalogClock(pmPaintAll); + end; +end; + +end. diff --git a/components/rx/version/2.1/rxcloseformvalidator.pas b/components/rx/version/2.1/rxcloseformvalidator.pas new file mode 100644 index 000000000..b0c1240ba --- /dev/null +++ b/components/rx/version/2.1/rxcloseformvalidator.pas @@ -0,0 +1,410 @@ +{ RxCloseFormValidator unit + + Copyright (C) 2005-2013 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RxCloseFormValidator; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, DB; + +type + TRxCloseFormValidator = class; + + TValidateEvent = procedure(AOwner:TRxCloseFormValidator; AControl:TWinControl; var Validate:boolean) of object; + + { TValidateItem } + + TValidateItem = class(TCollectionItem) + private + FControl: TWinControl; + FEnabled: boolean; + FFieldCaption: string; + FOnValidate: TValidateEvent; + procedure SetControl(AValue: TWinControl); + procedure SetEnabled(AValue: boolean); + procedure SetFieldCaption(AValue: string); + function DBComponentField:TField; + protected + function GetDisplayName: string; override; + public + constructor Create(ACollection: TCollection); override; + destructor Destroy; override; + function CheckClose(AForm:TCustomForm):boolean; + function ErrorMessage:string; + procedure SetFocus; + published + property Control:TWinControl read FControl write SetControl; + property Enabled:boolean read FEnabled write SetEnabled default true; + property FieldCaption:string read FFieldCaption write SetFieldCaption; + property OnValidate:TValidateEvent read FOnValidate write FOnValidate; + end; + + { TValidateItems } + + TValidateItems = class(TOwnedCollection) + private + function GetItems(Index: Integer): TValidateItem; + procedure SetItems(Index: Integer; AValue: TValidateItem); + public + property Items[Index: Integer]: TValidateItem read GetItems write SetItems; default; + end; + + { TRxCloseFormValidator } + + TRxCloseFormValidator = class(TComponent) + private + FErrorMsgCaption: string; + FOnCloseQuery : TCloseQueryEvent; + FItems:TValidateItems; + procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); + function GetItems: TValidateItems; + procedure SetCloseQueryHandler; + procedure SetItems(AValue: TValidateItems); + protected + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + procedure Loaded; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function CheckCloseForm:boolean; + function ByControl(AControl: TWinControl):TValidateItem; + published + property ErrorMsgCaption:string read FErrorMsgCaption write FErrorMsgCaption; + property Items:TValidateItems read GetItems write SetItems; + end; + +implementation +uses LCLType, StdCtrls, DbCtrls, typinfo, ComCtrls, ExtCtrls, rxconst; + +{ TValidateItems } + +function TValidateItems.GetItems(Index: Integer): TValidateItem; +begin + result := TValidateItem( inherited Items[Index] ); +end; + +procedure TValidateItems.SetItems(Index: Integer; AValue: TValidateItem); +begin + Items[Index].Assign( AValue ); +end; + +{constructor TValidateItems.Create; +begin + inherited Create(TValidateItem); +end;} + +{ TValidateItem } + +procedure TValidateItem.SetControl(AValue: TWinControl); +var + i:integer; + OwnForm, P:TComponent; + F:TField; +begin + if FControl=AValue then Exit; + FControl:=AValue; + + if Assigned(FControl) and (FFieldCaption = '') then + begin + //УÑтановим название Ð¿Ð¾Ð»Ñ Ð¿Ð¾ текÑÑ‚ компоненты + if FControl is TCustomRadioGroup then + FFieldCaption:=TCustomRadioGroup(FControl).Caption + else + if FControl is TCustomCheckBox then + FFieldCaption:=TCustomCheckBox(FControl).Caption + else + if Assigned(FControl.Owner) then + begin + OwnForm:=FControl.Owner; + //Попробуем найти название поле - по текÑту метки, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑвÑзана Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ полем + for i:=0 to OwnForm.ComponentCount-1 do + begin + P:=OwnForm.Components[i]; + if P is TLabel then + if TLabel(P).FocusControl = FControl then + begin + FFieldCaption:=TLabel(P).Caption; + break; + end; + end; + end; + + if FFieldCaption = '' then + begin + F:=DBComponentField; + if Assigned(F) then + FFieldCaption:=F.DisplayLabel; + end; + end +end; + +procedure TValidateItem.SetEnabled(AValue: boolean); +begin + if FEnabled=AValue then Exit; + FEnabled:=AValue; +end; + +procedure TValidateItem.SetFieldCaption(AValue: string); +begin + if FFieldCaption=AValue then Exit; + FFieldCaption:=AValue; +end; + +function TValidateItem.DBComponentField: TField; +var + P:TObject; + PI1, PI2:PPropInfo; + FiName:string; + DS:TDataSet; +begin + Result:=nil; + if not Assigned(FControl) then exit; + //Сначала проверим - вдруги Ñто завÑзки на работу Ñ Ð‘Ð” + PI1:=GetPropInfo(Control, 'DataSource'); + PI2:=GetPropInfo(Control, 'DataField'); + if Assigned(PI1) and Assigned(PI2) then + begin + //Точно - БД + P:=GetObjectProp(Control, 'DataSource'); + FiName:=GetPropValue(Control, 'DataField'); + if Assigned(P) and (FiName<>'') then + begin + DS:=(P as TDataSource).DataSet; + if Assigned(DS) then + Result:=DS.FieldByName(FiName); + end; + end +end; + +function TValidateItem.GetDisplayName: string; +begin + if Assigned(FControl) then + begin + if FEnabled then + Result:=FControl.Name + ' - validate' + else + Result:=FControl.Name + ' - disabled' + end + else + Result:=inherited GetDisplayName; +end; + +constructor TValidateItem.Create(ACollection: TCollection); +begin + inherited Create(ACollection); + FEnabled:=true; +end; + +destructor TValidateItem.Destroy; +begin + inherited Destroy; +end; + +function TValidateItem.CheckClose(AForm: TCustomForm): boolean; +var + P:TObject; + PI1, PI2:PPropInfo; + FiName:string; + DS:TDataSet; +begin + Result:=true; + if not Assigned(FControl) then exit; + + if Assigned(FOnValidate) then + FOnValidate( TRxCloseFormValidator(TValidateItems(Collection).Owner), FControl, Result) + else + begin + if FControl = AForm.ActiveControl then + begin + AForm.SelectNext(FControl, true, true); + end; + //Сначала проверим - вдруги Ñто завÑзки на работу Ñ Ð‘Ð” + PI1:=GetPropInfo(Control, 'DataSource'); + PI2:=GetPropInfo(Control, 'DataField'); + if Assigned(PI1) and Assigned(PI2) then + begin + //Точно - БД + //Проверка выполнÑетÑÑ ÐµÑли только указан иÑточник данных и поле в нём + P:=GetObjectProp(Control, 'DataSource'); + FiName:=GetPropValue(Control, 'DataField'); + if Assigned(P) and (FiName<>'') then + begin + DS:=(P as TDataSource).DataSet; + if Assigned(DS) then + Result:=not DS.FieldByName(FiName).IsNull; + end; + end + else + if Control is TCustomEdit then + Result:=TCustomEdit(Control).Text<>''; + end; +end; + +function TValidateItem.ErrorMessage: string; +begin + Result:=Format(sReqValue, [FFieldCaption]); +end; + +procedure TValidateItem.SetFocus; +var + P:TWinControl; +begin + + if FControl is TWinControl then + begin + P:=TWinControl(FControl).Parent; + //Ðеобходимо обработать Ñлучай Ð½Ð°Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ñ‹ на PageControl-e + while Assigned(P) and not (P is TCustomForm) do + begin + if P is TTabSheet then + TTabSheet(P).PageControl.ActivePage:=TTabSheet(P); + P:=P.Parent; + end; + TWinControl(FControl).SetFocus; + end; +end; + +{ TRxCloseFormValidator } + +procedure TRxCloseFormValidator.FormCloseQuery(Sender: TObject; + var CanClose: boolean); +begin + if Sender is TCustomForm then + begin + if TForm(Sender).ModalResult = mrOk then + begin + CanClose:=CheckCloseForm; + if CanClose and Assigned(FOnCloseQuery) then + FOnCloseQuery(Sender, CanClose); + end; + end; +end; + +function TRxCloseFormValidator.CheckCloseForm: boolean; +var + i:integer; + F:TComponent; +begin + F:=Owner; + while Assigned(F) and not (F is TCustomForm) do + F:=F.Owner; + + Result:=false; + + if not Assigned(F) then exit; + + for i:=0 to FItems.Count-1 do + begin + if FItems[i].Enabled and (not FItems[i].CheckClose(F as TCustomForm)) then + begin + FItems[i].SetFocus; + Application.MessageBox(PChar(FItems[i].ErrorMessage), PChar(FErrorMsgCaption), MB_OK + MB_ICONERROR); + exit; + end; + end; + Result:=true; +end; + +function TRxCloseFormValidator.ByControl(AControl: TWinControl): TValidateItem; +var + i:integer; +begin + Result:=nil; + for i:=0 to FItems.Count - 1 do + begin + if FItems[i].FControl = AControl then + begin + Result:=FItems[i]; + exit; + end; + end; + raise Exception.CreateFmt(sExptControlNotFound, [Name]); +end; + +function TRxCloseFormValidator.GetItems: TValidateItems; +begin + Result:=FItems; +end; + +procedure TRxCloseFormValidator.SetCloseQueryHandler; +begin + if (csDesigning in ComponentState) or (not Assigned(Owner)) then exit; + if Owner is TCustomForm then + begin + FOnCloseQuery:=TForm(Owner).OnCloseQuery; + TForm(Owner).OnCloseQuery:=@FormCloseQuery; + end; +end; + +procedure TRxCloseFormValidator.SetItems(AValue: TValidateItems); +begin + FItems.Assign(AValue); +end; + +procedure TRxCloseFormValidator.Notification(AComponent: TComponent; + Operation: TOperation); +var + i:integer; +begin + inherited Notification(AComponent, Operation); + if AComponent = Self then exit; + if Operation = opRemove then + begin + for i:=0 to FItems.Count - 1 do + if FItems[i].Control = AComponent then + FItems[i].Control := nil; + end; +end; + +procedure TRxCloseFormValidator.Loaded; +begin + inherited Loaded; + SetCloseQueryHandler; +end; + +constructor TRxCloseFormValidator.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FErrorMsgCaption:=sCloseValidError; + FItems:=TValidateItems.Create(Self, TValidateItem); +end; + +destructor TRxCloseFormValidator.Destroy; +begin + FreeAndNil(FItems); + inherited Destroy; +end; + +end. diff --git a/components/rx/version/2.1/rxconfigvalues.pas b/components/rx/version/2.1/rxconfigvalues.pas new file mode 100644 index 000000000..7a8b6b022 --- /dev/null +++ b/components/rx/version/2.1/rxconfigvalues.pas @@ -0,0 +1,432 @@ +{ rxConfigValues unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxConfigValues; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils; + +const + cvtInteger = 1; // целое + cvtString = 2; // Ñтрока + cvtBoolean = 3; // логичеÑÐºÐ°Ñ + cvtDateTime = 4; // дата + cvtFloat = 5; // вещеÑтвенное + +type + + { TConfigValue } + + TConfigValue = class + private + FModified:boolean; + FName: string; + FDataType:byte; + FValue:Variant; + function GetAsBoolean: boolean; + function GetAsDateTime: TDateTime; + function GetAsFloat: Double; + function GetAsInteger: integer; + function GetAsString: string; + procedure SetAsBoolean(const AValue: boolean); + procedure SetAsDateTime(const AValue: TDateTime); + procedure SetAsFloat(const AValue: Double); + procedure SetAsInteger(const AValue: integer); + procedure SetAsString(const AValue: string); + function GetValue: string; + public + constructor Create; + destructor Destroy; override; + property Name:string read FName; + property AsString:string read GetAsString write SetAsString; + property AsInteger:integer read GetAsInteger write SetAsInteger; + property AsFloat:Double read GetAsFloat write SetAsFloat; + property AsBoolean:boolean read GetAsBoolean write SetAsBoolean; + property AsDateTime:TDateTime read GetAsDateTime write SetAsDateTime; + property Modified:boolean read FModified write FModified; + property DataType:byte read FDataType; + property Value:string read GetValue; + end; + + { TConfigValues } + + TConfigValues = class + private + FItems:TList; + function CreateValue(AName:string; AType:byte):TConfigValue; + function GetCount: integer; + function GetItem(Index:Integer): TConfigValue; + public + constructor Create; + destructor Destroy; override; + procedure BeginUpdate; + procedure EndUpdate; + procedure Clear; + function ParamByName(AName:string):TConfigValue; + function ByNameAsInteger(AName:string; DefValue:integer):integer; + function ByNameAsString(AName:string; DefValue:string):string; + function ByNameAsFloat(AName:string; DefValue:Double):Double; + function ByNameAsBoolean(AName:string; DefValue:Boolean):Boolean; + function ByNameAsDateTime(AName:string; DefValue:TDateTime):TDateTime; + procedure SetByNameAsInteger(AName:string; AValue:integer); + procedure SetByNameAsString(AName:string; AValue:string); + procedure SetByNameAsFloat(AName:string; ADefValue:Double); + procedure SetByNameAsBoolean(AName:string; ADefValue:Boolean); + procedure SetByNameAsDateTime(AName:string; ADefValue:TDateTime); + public + property Items[Index:Integer]:TConfigValue read GetItem;default; + property Count:integer read GetCount; + end; + + +implementation + +{ TConfigValues } + +function TConfigValues.CreateValue(AName: string; AType: byte): TConfigValue; +begin + Result:=TConfigValue.Create; + Result.FDataType:=AType; + Result.FName:=AName; + FItems.Add(Result); +end; + +function TConfigValues.GetCount: integer; +begin + Result:=FItems.Count; +end; + +function TConfigValues.GetItem(Index:Integer): TConfigValue; +begin + Result:=TConfigValue(FItems[Index]); +end; + +constructor TConfigValues.Create; +begin + inherited Create; + FItems:=TList.Create; +end; + +destructor TConfigValues.Destroy; +begin + Clear; + FreeAndNil(FItems); + inherited Destroy; +end; + +procedure TConfigValues.BeginUpdate; +begin + +end; + +procedure TConfigValues.EndUpdate; +var + i:integer; +begin + for i:=0 to FItems.Count - 1 do + TConfigValue(FItems[i]).FModified:=false; +end; + +procedure TConfigValues.Clear; +var + i:integer; +begin + for i:=0 to FItems.Count - 1 do + TConfigValue(FItems[i]).Free; + FItems.Clear; +end; + +function TConfigValues.ParamByName(AName: string): TConfigValue; +var + i:integer; +begin + AName:=AnsiUpperCase(AName); + Result:=nil; + for i:=0 to FItems.Count - 1 do + begin + if AnsiUpperCase(TConfigValue(FItems[i]).FName) = AName then + begin + Result:=TConfigValue(FItems[i]); + exit; + end; + end; +end; + +function TConfigValues.ByNameAsInteger(AName: string; DefValue: integer + ): integer; +var + P:TConfigValue; +begin + P:=ParamByName(AName); + if Assigned(P) then + Result:=P.AsInteger + else + Result:=DefValue; +end; + +function TConfigValues.ByNameAsString(AName: string; DefValue: string): string; +var + P:TConfigValue; +begin + P:=ParamByName(AName); + if Assigned(P) then + Result:=P.AsString + else + Result:=DefValue; +end; + +function TConfigValues.ByNameAsFloat(AName: string; DefValue: Double): Double; +var + P:TConfigValue; +begin + P:=ParamByName(AName); + if Assigned(P) then + Result:=P.AsFloat + else + Result:=DefValue; +end; + +function TConfigValues.ByNameAsBoolean(AName: string; DefValue: Boolean + ): Boolean; +var + P:TConfigValue; +begin + P:=ParamByName(AName); + if Assigned(P) then + Result:=P.AsBoolean + else + Result:=DefValue; +end; + +function TConfigValues.ByNameAsDateTime(AName: string; DefValue: TDateTime + ): TDateTime; +var + P:TConfigValue; +begin + P:=ParamByName(AName); + if Assigned(P) then + Result:=P.AsDateTime + else + Result:=DefValue; +end; + +procedure TConfigValues.SetByNameAsInteger(AName: string; AValue: integer); +var + P:TConfigValue; +begin + P:=ParamByName(AName); + if not Assigned(P) then + P:=CreateValue(AName, cvtInteger); + P.AsInteger:=AValue; +end; + +procedure TConfigValues.SetByNameAsString(AName: string; AValue: string); +var + P:TConfigValue; +begin + P:=ParamByName(AName); + if not Assigned(P) then + P:=CreateValue(AName, cvtString); + P.AsString:=AValue; +end; + +procedure TConfigValues.SetByNameAsFloat(AName: string; ADefValue: Double); +var + P:TConfigValue; +begin + P:=ParamByName(AName); + if not Assigned(P) then + P:=CreateValue(AName, cvtFloat); + P.AsFloat:=ADefValue; +end; + +procedure TConfigValues.SetByNameAsBoolean(AName: string; ADefValue: Boolean); +var + P:TConfigValue; +begin + P:=ParamByName(AName); + if not Assigned(P) then + P:=CreateValue(AName, cvtBoolean); + P.AsBoolean:=ADefValue; +end; + +procedure TConfigValues.SetByNameAsDateTime(AName: string; ADefValue: TDateTime + ); +var + P:TConfigValue; +begin + P:=ParamByName(AName); + if not Assigned(P) then + P:=CreateValue(AName, cvtDateTime); + P.AsDateTime:=ADefValue; +end; + +{ TConfigValue } + +function TConfigValue.GetAsBoolean: boolean; +begin + if FDataType = cvtBoolean then + Result:=FValue + else + raise Exception.CreateFmt('Variable %s is not boolean', [FName]); +end; + +function TConfigValue.GetAsDateTime: TDateTime; +begin + if FDataType = cvtDateTime then + Result:=FValue + else + raise Exception.CreateFmt('Variable %s is not date/time', [FName]); +end; + +function TConfigValue.GetAsFloat: Double; +begin + if FDataType = cvtFloat then + Result:=FValue + else + raise Exception.CreateFmt('Variable %s is not float', [FName]); +end; + +function TConfigValue.GetAsInteger: integer; +begin + if FDataType = cvtInteger then + Result:=FValue + else + raise Exception.CreateFmt('Variable %s is not integer', [FName]); +end; + +function TConfigValue.GetAsString: string; +begin + if FDataType = cvtString then + Result:=FValue + else + raise Exception.CreateFmt('Variable %s is not string', [FName]); +end; + +procedure TConfigValue.SetAsBoolean(const AValue: boolean); +begin + if FDataType = cvtBoolean then + begin + if FValue<>AValue then + begin + FValue:=AValue; + FModified:=true; + end + end + else + raise Exception.CreateFmt('Variable %s is not boolean', [FName]); +end; + +procedure TConfigValue.SetAsDateTime(const AValue: TDateTime); +begin + if FDataType = cvtDateTime then + begin + if FValue<>AValue then + begin + FValue:=AValue; + FModified:=true; + end + end + else + raise Exception.CreateFmt('Variable %s is not date/time', [FName]); +end; + +procedure TConfigValue.SetAsFloat(const AValue: Double); +begin + if FDataType = cvtFloat then + begin + if FValue<>AValue then + begin + FValue:=AValue; + FModified:=true; + end + end + else + raise Exception.CreateFmt('Variable %s is not float', [FName]); +end; + +procedure TConfigValue.SetAsInteger(const AValue: integer); +begin + if FDataType = cvtInteger then + begin + if (FValue = null) or (FValue<>AValue) then + begin + FValue:=AValue; + FModified:=true; + end + end + else + raise Exception.CreateFmt('Variable %s is not integer', [FName]); +end; + +procedure TConfigValue.SetAsString(const AValue: string); +begin + if FDataType = cvtString then + begin + if FValue<>AValue then + begin + FValue:=AValue; + FModified:=true; + end + end + else + raise Exception.CreateFmt('Variable %s is not string', [FName]); +end; + +constructor TConfigValue.Create; +begin + inherited Create; + FModified:=false; + FValue:=null; +end; + +destructor TConfigValue.Destroy; +begin + inherited Destroy; +end; + +function TConfigValue.GetValue: string; +begin + case FDataType of + cvtInteger : Result:=IntToStr(AsInteger); + cvtString : Result:=AsString; + cvtBoolean : Result:=IntToStr(Ord(AsBoolean)); + cvtDateTime: Result:=DateTimeToStr(AsDateTime); + cvtFloat : Str(AsFloat, Result); + end; +end; + +end. + diff --git a/components/rx/version/2.1/rxconst.pas b/components/rx/version/2.1/rxconst.pas new file mode 100644 index 000000000..a1e5cb9c3 --- /dev/null +++ b/components/rx/version/2.1/rxconst.pas @@ -0,0 +1,133 @@ +{ rxconst unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxconst; + +interface + +{$I RX.INC} + +uses LMessages, Controls; + +const + RX_VERSION = $0002004B; { 2.75 } + +const +{ Command message for Speedbar editor } + CM_SPEEDBARCHANGED = CM_BASE + 80; +{ Command message for TRxSpeedButton } + CM_RXBUTTONPRESSED = CM_BASE + 81; +{ Command messages for TRxWindowHook } + CM_RECREATEWINDOW = CM_BASE + 82; + CM_DESTROYHOOK = CM_BASE + 83; +{ Notify message for TRxTrayIcon } + CM_TRAYICON = CM_BASE + 84; + +const + crHand = TCursor(14000); + crDragHand = TCursor(14001); + +//const +//{ TBitmap.GetTransparentColor from GRAPHICS.PAS uses this value } +// PaletteMask = $02000000; + +resourcestring + sBrowse = 'Browse'; + sDefaultFilter = 'All files (*.*)|*.*'; + sDateDlgTitle = 'Select a Date'; + sNextYear = 'Next Year|'; + sNextMonth = 'Next Month|'; + sPrevYear = 'Previous Year|'; + sPrevMonth = 'Previous Month|'; + sNotImplemented = 'Function not yet implemented'; + sFileNotExec = 'File specified is not an executable file, dynamic-link library, or icon file'; + sLoadLibError = 'Could not load ''%s'' library'; + sDetails = 'Details'; + sWindowsIcoFiles = 'Windows Ico files (*.ico)|*.ico|All files (*.*)|*.*'; + sToCurDate = 'Set current date'; + + //TDualListDialog + SDualListSrcCaption = 'Source'; + SDualListDestCaption = 'Destination'; + SDualListCaption = 'Dual list dialog'; + + //TToolPanelSetupForm + sToolPanelSetup = 'Tool panel setup'; + sVisibleButtons = 'Visible buttons'; + sOptions = 'Options'; + sAvaliableButtons = 'Avaliable buttons'; + sShowCaption = 'Show caption'; + sToolBarStyle = 'Tool bar style'; + sToolBarStyle1 = 'Standart'; + sToolBarStyle2 = 'Windows XP'; + sToolBarStyle3 = 'Native'; + sFlatButtons = 'Flat buttons'; + sTransparent = 'Transparent'; + sShowHint = 'Show hint'; + sButtonAlign = 'Button align'; + sButtonAlign1 = 'None'; + sButtonAlign2 = 'Left'; + sButtonAlign3 = 'Rignt'; + sGTKWidgetSet = 'GTK widget set'; + sGTK2WidgetSet = 'GTK 2 widget set'; + sWin32_64WidgetSet = 'Win32/Win64 widget set'; + sWinCEWidgetSet = 'WinCE widget set'; + sCarbonWidgetSet = 'Carbon widget set'; + sQTWidgetSet = 'QT widget set'; + sFpGUIWidgetSet = 'FpGUI widget set'; + sOtherGUIWidgetSet = 'Other gui'; + sAppVersion = 'Version : '; + sLCLVersion = 'LCL Version: '; + sFpcVersion = 'FPC version : '; + sTargetCPU = 'Target CPU : '; + sTargetOS = 'Target OS : '; + sBuildDate = 'Build date : '; + sAbout = 'About'; + sGeneral = 'General'; + sLicense = 'License'; + SOutOfRange = 'Out of range %d %d %d %d'; + + { TRxHistoryNavigator } + sHistoryDesc = 'History - "%s"'; + + { RxCloseFormValidator } + sCloseValidError = 'Error. Expected vailes...'; + sReqValue = 'Error. Expected value for filed %s.'; + sExptControlNotFound = 'Control not found in validate %s.'; + + { RxMDI } + sCloseWindows = 'Close window'; + sCloseAllExceptThis = 'Close all except this'; + sCloseAllWindows = 'Close all windows'; + +implementation + +end. diff --git a/components/rx/version/2.1/rxctrls.pas b/components/rx/version/2.1/rxctrls.pas new file mode 100644 index 000000000..323e0abd6 --- /dev/null +++ b/components/rx/version/2.1/rxctrls.pas @@ -0,0 +1,4459 @@ +{ rxctrls unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxctrls; + +{$I rx.inc} + +interface + +uses LResources, LCLType, LCLIntf, LMessages, Classes, Controls, Graphics, + StdCtrls, ExtCtrls, Forms, Buttons, Menus, RxConst, IniFiles, GraphType + {, Placemnt}; + +type + TPositiveInt = 1..MaxInt; + +(* +{ TTextListBox } + + TTextListBox = class(TCustomListBox) + private + FMaxWidth: Integer; +{$IFNDEF WIN32} + FTabWidth: Integer; + procedure SetTabWidth(Value: Integer); +{$ENDIF} + procedure ResetHorizontalExtent; + procedure SetHorizontalExtent; + function GetItemWidth(Index: Integer): Integer; + protected +{$IFNDEF WIN32} + procedure CreateParams(var Params: TCreateParams); override; + procedure CreateWnd; override; +{$ENDIF} + procedure WndProc(var Message: TMessage); override; + published + property Align; + property BorderStyle; + property Color; + property DragCursor; + property DragMode; + property Enabled; + property ExtendedSelect; + property Font; + property IntegralHeight; +{$IFDEF RX_D4} + property Anchors; + property BiDiMode; + property Constraints; + property DragKind; + property ParentBiDiMode; +{$ENDIF} +{$IFDEF WIN32} + {$IFNDEF VER90} + property ImeMode; + property ImeName; + {$ENDIF} +{$ENDIF} + property ItemHeight; + property Items; + property MultiSelect; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property Sorted; + property TabOrder; + property TabStop; +{$IFDEF WIN32} + property TabWidth; +{$ELSE} + property TabWidth: Integer read FTabWidth write SetTabWidth default 0; +{$ENDIF} + property Visible; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; +{$IFDEF WIN32} + property OnStartDrag; +{$ENDIF} +{$IFDEF RX_D5} + property OnContextPopup; +{$ENDIF} +{$IFDEF RX_D4} + property OnMouseWheelDown; + property OnMouseWheelUp; + property OnEndDock; + property OnStartDock; +{$ENDIF} + end; + +{ TRxCustomListBox } + + TGetItemWidthEvent = procedure(Control: TWinControl; Index: Integer; + var Width: Integer) of object; + + TRxCustomListBox = class(TWinControl) + private + FItems: TStrings; + FBorderStyle: TBorderStyle; + FCanvas: TCanvas; + FColumns: Integer; + FItemHeight: Integer; + FStyle: TListBoxStyle; + FIntegralHeight: Boolean; + FMultiSelect: Boolean; + FSorted: Boolean; + FExtendedSelect: Boolean; + FTabWidth: Integer; + FSaveItems: TStringList; + FSaveTopIndex: Integer; + FSaveItemIndex: Integer; + FAutoScroll: Boolean; + FGraySelection: Boolean; + FMaxItemWidth: Integer; + FOnDrawItem: TDrawItemEvent; + FOnMeasureItem: TMeasureItemEvent; + FOnGetItemWidth: TGetItemWidthEvent; + procedure ResetHorizontalExtent; + procedure SetHorizontalExtent; + function GetAutoScroll: Boolean; + function GetItemHeight: Integer; virtual; + function GetItemIndex: Integer; + function GetSelCount: Integer; + function GetSelected(Index: Integer): Boolean; + function GetTopIndex: Integer; + procedure SetAutoScroll(Value: Boolean); + procedure SetBorderStyle(Value: TBorderStyle); + procedure SetColumnWidth; + procedure SetColumns(Value: Integer); + procedure SetExtendedSelect(Value: Boolean); + procedure SetIntegralHeight(Value: Boolean); + procedure SetItemHeight(Value: Integer); + procedure SetItemIndex(Value: Integer); + procedure SetMultiSelect(Value: Boolean); + procedure SetSelected(Index: Integer; Value: Boolean); + procedure SetSorted(Value: Boolean); + procedure SetStyle(Value: TListBoxStyle); + procedure SetTabWidth(Value: Integer); + procedure SetTopIndex(Value: Integer); + procedure SetGraySelection(Value: Boolean); + procedure SetOnDrawItem(Value: TDrawItemEvent); + procedure SetOnGetItemWidth(Value: TGetItemWidthEvent); + procedure WMPaint(var Message: TWMPaint); message WM_PAINT; + procedure WMSize(var Message: TWMSize); message WM_SIZE; + procedure CNCommand(var Message: TWMCommand); message CN_COMMAND; + procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM; + procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM; + procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN; + procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST; + procedure WMKillFocus(var Msg: TWMKillFocus); message WM_KILLFOCUS; + procedure WMSetFocus(var Msg: TWMSetFocus); message WM_SETFOCUS; +{$IFDEF WIN32} +// procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED; +{$ENDIF} + protected + procedure CreateParams(var Params: TCreateParams); override; + procedure CreateWnd; override; + procedure DestroyWnd; override; + function CreateItemList: TStrings; virtual; + function GetItemWidth(Index: Integer): Integer; virtual; + procedure WndProc(var Message: TMessage); override; + procedure DragCanceled; override; + procedure DrawItem(Index: Integer; Rect: TRect; + State: TOwnerDrawState); virtual; + procedure MeasureItem(Index: Integer; var Height: Integer); virtual; + function GetItemData(Index: Integer): Longint; dynamic; + procedure SetItemData(Index: Integer; AData: LongInt); dynamic; + procedure SetItems(Value: TStrings); virtual; + procedure ResetContent; dynamic; + procedure DeleteString(Index: Integer); dynamic; + property AutoScroll: Boolean read GetAutoScroll write SetAutoScroll default False; + property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle default bsSingle; + property Columns: Integer read FColumns write SetColumns default 0; + property ExtendedSelect: Boolean read FExtendedSelect write SetExtendedSelect default True; + property GraySelection: Boolean read FGraySelection write SetGraySelection default False; + property IntegralHeight: Boolean read FIntegralHeight write SetIntegralHeight default False; + property ItemHeight: Integer read GetItemHeight write SetItemHeight; + property MultiSelect: Boolean read FMultiSelect write SetMultiSelect default False; + property ParentColor default False; + property Sorted: Boolean read FSorted write SetSorted default False; + property Style: TListBoxStyle read FStyle write SetStyle default lbStandard; + property TabWidth: Integer read FTabWidth write SetTabWidth default 0; + property OnDrawItem: TDrawItemEvent read FOnDrawItem write SetOnDrawItem; + property OnMeasureItem: TMeasureItemEvent read FOnMeasureItem write FOnMeasureItem; + property OnGetItemWidth: TGetItemWidthEvent read FOnGetItemWidth write SetOnGetItemWidth; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Clear; + procedure DefaultDrawText(X, Y: Integer; const S: string); + function ItemAtPos(Pos: TPoint; Existing: Boolean): Integer; + function ItemRect(Index: Integer): TRect; + property Canvas: TCanvas read FCanvas; + property Items: TStrings read FItems write SetItems; + property ItemIndex: Integer read GetItemIndex write SetItemIndex; + property SelCount: Integer read GetSelCount; + property Selected[Index: Integer]: Boolean read GetSelected write SetSelected; + property TopIndex: Integer read GetTopIndex write SetTopIndex; + published + property TabStop default True; + end; + +{ TRxCheckListBox } + + TCheckKind = (ckCheckBoxes, ckRadioButtons, ckCheckMarks); + TChangeStateEvent = procedure (Sender: TObject; Index: Integer) of object; + + TRxCheckListBox = class(TRxCustomListBox) + private + FAllowGrayed: Boolean; + FCheckKind: TCheckKind; + FSaveStates: TList; + FDrawBitmap: TBitmap; + FCheckWidth, FCheckHeight: Integer; + FReserved: Integer; + FInUpdateStates: Boolean; + FIniLink: TIniLink; + FOnClickCheck: TNotifyEvent; + FOnStateChange: TChangeStateEvent; + procedure ResetItemHeight; + function GetItemHeight: Integer; override; + procedure DrawCheck(R: TRect; AState: TCheckBoxState; Enabled: Boolean); + procedure SetCheckKind(Value: TCheckKind); + procedure SetChecked(Index: Integer; AChecked: Boolean); + function GetChecked(Index: Integer): Boolean; + procedure SetState(Index: Integer; AState: TCheckBoxState); + function GetState(Index: Integer): TCheckBoxState; + procedure SetItemEnabled(Index: Integer; Value: Boolean); + function GetItemEnabled(Index: Integer): Boolean; + function GetAllowGrayed: Boolean; + procedure ToggleClickCheck(Index: Integer); + procedure InvalidateCheck(Index: Integer); + procedure InvalidateItem(Index: Integer); + function CreateCheckObject(Index: Integer): TObject; + function FindCheckObject(Index: Integer): TObject; + function GetCheckObject(Index: Integer): TObject; + function IsCheckObject(Index: Integer): Boolean; + procedure ReadVersion(Reader: TReader); + procedure WriteVersion(Writer: TWriter); + procedure ReadCheckData(Reader: TReader); + procedure WriteCheckData(Writer: TWriter); + procedure InternalSaveStates(IniFile: TObject; const Section: string); + procedure InternalRestoreStates(IniFile: TObject; const Section: string); + function GetStorage: TFormPlacement; + procedure SetStorage(Value: TFormPlacement); + procedure IniSave(Sender: TObject); + procedure IniLoad(Sender: TObject); + procedure UpdateCheckStates; + function GetCheckedIndex: Integer; + procedure SetCheckedIndex(Value: Integer); + procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM; + procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; + protected + function CreateItemList: TStrings; override; + procedure DrawItem(Index: Integer; Rect: TRect; + State: TOwnerDrawState); override; + procedure DefineProperties(Filer: TFiler); override; + function GetItemWidth(Index: Integer): Integer; override; + function GetItemData(Index: Integer): LongInt; override; + procedure SetItemData(Index: Integer; AData: LongInt); override; + procedure KeyPress(var Key: Char); override; + procedure Loaded; override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + procedure ResetContent; override; + procedure DeleteString(Index: Integer); override; + procedure ClickCheck; dynamic; + procedure ChangeItemState(Index: Integer); dynamic; + procedure CreateParams(var Params: TCreateParams); override; + procedure CreateWnd; override; + procedure DestroyWnd; override; + procedure WMDestroy(var Msg: TWMDestroy); message WM_DESTROY; + function GetCheckWidth: Integer; + procedure SetItems(Value: TStrings); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; +{$IFDEF WIN32} + procedure SaveStatesReg(IniFile: TRegIniFile); + procedure RestoreStatesReg(IniFile: TRegIniFile); +{$ENDIF WIN32} + procedure SaveStates(IniFile: TIniFile); + procedure RestoreStates(IniFile: TIniFile); + procedure ApplyState(AState: TCheckBoxState; EnabledOnly: Boolean); + property Checked[Index: Integer]: Boolean read GetChecked write SetChecked; + property State[Index: Integer]: TCheckBoxState read GetState write SetState; + property EnabledItem[Index: Integer]: Boolean read GetItemEnabled write SetItemEnabled; + published + property AllowGrayed: Boolean read GetAllowGrayed write FAllowGrayed default False; + property CheckKind: TCheckKind read FCheckKind write SetCheckKind default ckCheckBoxes; + property CheckedIndex: Integer read GetCheckedIndex write SetCheckedIndex default -1; + property IniStorage: TFormPlacement read GetStorage write SetStorage; + property Align; + property AutoScroll default True; + property BorderStyle; + property Color; + property Columns; + property DragCursor; + property DragMode; + property Enabled; + property ExtendedSelect; + property Font; + property GraySelection; +{$IFDEF RX_D4} + property Anchors; + property BiDiMode; + property Constraints; + property DragKind; + property ParentBiDiMode; +{$ENDIF} +{$IFDEF WIN32} + {$IFNDEF VER90} + property ImeMode; + property ImeName; + {$ENDIF} +{$ENDIF} + property IntegralHeight; + property ItemHeight; + property Items stored False; + property MultiSelect; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property Sorted; + property Style; + property TabOrder; + property TabWidth; + property Visible; + property OnStateChange: TChangeStateEvent read FOnStateChange write FOnStateChange; + property OnClickCheck: TNotifyEvent read FOnClickCheck write FOnClickCheck; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnDrawItem; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnGetItemWidth; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMeasureItem; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; +{$IFDEF WIN32} + property OnStartDrag; +{$ENDIF} +{$IFDEF RX_D5} + property OnContextPopup; +{$ENDIF} +{$IFDEF RX_D4} + property OnMouseWheelDown; + property OnMouseWheelUp; + property OnEndDock; + property OnStartDock; +{$ENDIF} + end; +*) +const + clbDefaultState = cbUnchecked; + clbDefaultEnabled = True; + +{ TRxCustomLabel } + +type + TShadowPosition = (spLeftTop, spLeftBottom, spRightBottom, spRightTop); +{$IFNDEF RX_D3} + TTextLayout = (tlTop, tlCenter, tlBottom); +{$ENDIF} + + TRxCustomLabel = class(TGraphicControl) + private + FFocusControl: TWinControl; + FAlignment: TAlignment; + FAutoSize: Boolean; + FLayout: TTextLayout; + FShadowColor: TColor; + FShadowSize: Byte; + FShadowPos: TShadowPosition; + FWordWrap: Boolean; + FShowAccelChar: Boolean; + FShowFocus: Boolean; + FFocused: Boolean; + FMouseInControl: Boolean; + FDragging: Boolean; + FLeftMargin: Integer; + FRightMargin: Integer; + FOnMouseEnter: TNotifyEvent; + FOnMouseLeave: TNotifyEvent; + procedure DoDrawText(var Rect: TRect; Flags: Word); + function GetTransparent: Boolean; + procedure UpdateTracking; + procedure SetAlignment(Value: TAlignment); +{$IFNDEF RX_D6} + procedure SetAutoSize(Value: Boolean); +{$ENDIF} + procedure SetFocusControl(Value: TWinControl); + procedure SetLayout(Value: TTextLayout); + procedure SetLeftMargin(Value: Integer); + procedure SetRightMargin(Value: Integer); + procedure SetShadowColor(Value: TColor); + procedure SetShadowSize(Value: Byte); + procedure SetShadowPos(Value: TShadowPosition); + procedure SetShowAccelChar(Value: Boolean); + procedure SetTransparent(Value: Boolean); + procedure SetWordWrap(Value: Boolean); + procedure SetShowFocus(Value: Boolean); + procedure CMTextChanged(var Message: TLMessage); message CM_TEXTCHANGED; + procedure CMFocusChanged(var Message: TLMessage); message CM_FOCUSCHANGED; + procedure CMFontChanged(var Message: TLMessage); message CM_FONTCHANGED; + procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR; + procedure CMEnabledChanged(var Message: TLMessage); message CM_ENABLEDCHANGED; + procedure CMMouseEnter(var Message: TLMessage); message CM_MOUSEENTER; + procedure CMMouseLeave(var Message: TLMessage); message CM_MOUSELEAVE; + procedure CMVisibleChanged(var Message: TLMessage); message CM_VISIBLECHANGED; +(* + procedure WMRButtonDown(var Message: TWMRButtonDown); message WM_RBUTTONDOWN; + procedure WMRButtonUp(var Message: TWMRButtonUp); message WM_RBUTTONUP; +*) + protected + procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; + procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; +// procedure SetAutoSize(Value: Boolean); override; + procedure AdjustBounds; + function GetDefaultFontColor: TColor; virtual; + function GetLabelCaption: string; virtual; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure Paint; override; + procedure MouseEnter; dynamic; + procedure MouseLeave; dynamic; + property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; + property AutoSize: Boolean read FAutoSize write SetAutoSize default True; + property FocusControl: TWinControl read FFocusControl write SetFocusControl; + property Layout: TTextLayout read FLayout write SetLayout default tlTop; + property LeftMargin: Integer read FLeftMargin write SetLeftMargin default 0; + property RightMargin: Integer read FRightMargin write SetRightMargin default 0; + property ShadowColor: TColor read FShadowColor write SetShadowColor default clBtnHighlight; + property ShadowSize: Byte read FShadowSize write SetShadowSize default 1; + property ShadowPos: TShadowPosition read FShadowPos write SetShadowPos default spLeftTop; + property ShowAccelChar: Boolean read FShowAccelChar write SetShowAccelChar default True; + property ShowFocus: Boolean read FShowFocus write SetShowFocus default False; + property Transparent: Boolean read GetTransparent write SetTransparent default False; + property WordWrap: Boolean read FWordWrap write SetWordWrap default False; + property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; + property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; + public + constructor Create(AOwner: TComponent); override; + property Canvas; + property MouseInControl: Boolean read FMouseInControl; + end; + +{ TRxLabel } + + TRxLabel = class(TRxCustomLabel) + published + property Align; + property Alignment; + property AutoSize; + property Caption; + property Color; + property DragCursor; + property DragMode; + property Enabled; + property FocusControl; + property Font; + property Anchors; + property Constraints; + property DragKind; +{$IFDEF RX_D4} + property BiDiMode; + property ParentBiDiMode; +{$ENDIF} + property BorderSpacing; + property Layout; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShadowColor; + property ShadowSize; + property ShadowPos; + property ShowAccelChar; + property ShowFocus; + property ShowHint; + property Transparent; + property Visible; + property WordWrap; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnMouseEnter; + property OnMouseLeave; + property OnStartDrag; + property OnContextPopup; + property OnEndDock; + property OnStartDock; + end; + + +{ TSecretPanel } + + TGlyphLayout = (glGlyphLeft, glGlyphRight, glGlyphTop, glGlyphBottom); + TScrollDirection = (sdVertical, sdHorizontal); + TPanelDrawEvent = procedure(Sender: TObject; Canvas: TCanvas; + Rect: TRect) of object; + + TSecretPanel = class(TCustomPanel) + private + FActive: Boolean; + FAlignment: TAlignment; + FLines: TStrings; + FCycled: Boolean; + FScrollCnt: Integer; + FMaxScroll: Integer; + FTxtDivider: Byte; + FFirstLine: Integer; + FTimer: TTimer; + FTxtRect: TRect; + FPaintRect: TRect; + FGlyphOrigin: TPoint; + FMemoryImage: TBitmap; + FGlyph: TBitmap; + FHiddenList: TList; + FTextStyle: TPanelBevel; + FDirection: TScrollDirection; + FGlyphLayout: TGlyphLayout; + FOnPaintClient: TPanelDrawEvent; + FOnStartPlay: TNotifyEvent; + FOnStopPlay: TNotifyEvent; + FAsyncDrawing: Boolean; + procedure SetAsyncDrawing(Value: Boolean); + function GetInflateWidth: Integer; + function GetInterval: Cardinal; + procedure SetInterval(Value: Cardinal); + procedure SetGlyph(Value: TBitmap); + procedure SetLines(Value: TStrings); + procedure SetActive(Value: Boolean); + procedure SetAlignment(Value: TAlignment); + procedure SetGlyphLayout(Value: TGlyphLayout); + procedure SetTextStyle(Value: TPanelBevel); + procedure SetDirection(Value: TScrollDirection); + procedure RecalcDrawRect; + procedure PaintGlyph; + procedure PaintText; + procedure UpdateMemoryImage; + procedure GlyphChanged(Sender: TObject); + procedure LinesChanged(Sender: TObject); + procedure CMFontChanged(var Message: TLMessage); message CM_FONTCHANGED; + procedure CMColorChanged(var Message: TLMessage); message CM_COLORCHANGED; +// procedure WMSize(var Message: TLMessage); message LM_SIZE; + procedure WMSize(var Message: TLMSize); message LM_SIZE; + protected + procedure AlignControls(AControl: TControl; var Rect: TRect); override; + procedure Paint; override; + procedure PaintClient(ACanvas: TCanvas; Rect: TRect); virtual; + procedure TimerExpired(Sender: TObject); virtual; + procedure StartPlay; dynamic; + procedure StopPlay; dynamic; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Play; + procedure Stop; + property Canvas; + published + property AsyncDrawing: Boolean read FAsyncDrawing write SetAsyncDrawing default True; + property Active: Boolean read FActive write SetActive default False; + property Alignment: TAlignment read FAlignment write SetAlignment default taCenter; + property Cycled: Boolean read FCycled write FCycled default False; + property Glyph: TBitmap read FGlyph write SetGlyph; + property GlyphLayout: TGlyphLayout read FGlyphLayout write SetGlyphLayout + default glGlyphLeft; + property Interval: Cardinal read GetInterval write SetInterval default 30; + property Lines: TStrings read FLines write SetLines; + property ScrollDirection: TScrollDirection read FDirection write SetDirection + default sdVertical; + property TextStyle: TPanelBevel read FTextStyle write SetTextStyle default bvNone; + property Anchors; + property Constraints; + property DragKind; +{$IFDEF RX_D4} + property BiDiMode; + property ParentBiDiMode; +{$ENDIF} + property Align; + property BevelInner; + property BevelOuter default bvLowered; + property BevelWidth; + property BorderWidth; + property BorderStyle; + property DragCursor; + property DragMode; + property Color; + property Font; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + property OnPaintClient: TPanelDrawEvent read FOnPaintClient write FOnPaintClient; + property OnStartPlay: TNotifyEvent read FOnStartPlay write FOnStartPlay; + property OnStopPlay: TNotifyEvent read FOnStopPlay write FOnStopPlay; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + property OnContextPopup; + property OnEndDock; + property OnStartDock; + property OnResize; + end; + +{ TRxSpeedButton } +(* + + TRxNumGlyphs = 1..5; + TRxDropDownMenuPos = (dmpBottom, dmpRight); + TRxButtonState = (rbsUp, rbsDisabled, rbsDown, rbsExclusive, rbsInactive); +*) + + TRxSpeedButton = class(TSpeedButton) + private + FAllowTimer: Boolean; + FInitRepeatPause: Word; + FRepeatPause: Word; + FRepeatTimer: TTimer; + procedure SetAllowTimer(const AValue: Boolean); + procedure TimerExpired(Sender: TObject); + protected + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property AllowTimer: Boolean read FAllowTimer write SetAllowTimer default False; + property InitPause: Word read FInitRepeatPause write FInitRepeatPause default 500; + property RepeatInterval: Word read FRepeatPause write FRepeatPause default 100; + end; + +(* +{ TButtonImage } + + TButtonImage = class(TObject) + private + FGlyph: TObject; + FButtonSize: TPoint; + FCaption: TCaption; + function GetNumGlyphs: TRxNumGlyphs; + procedure SetNumGlyphs(Value: TRxNumGlyphs); + function GetWordWrap: Boolean; + procedure SetWordWrap(Value: Boolean); + function GetAlignment: TAlignment; + procedure SetAlignment(Value: TAlignment); + function GetGlyph: TBitmap; + procedure SetGlyph(Value: TBitmap); + public + constructor Create; + destructor Destroy; override; + procedure Invalidate; +{$IFDEF WIN32} + procedure DrawEx(Canvas: TCanvas; X, Y, Margin, Spacing: Integer; + Layout: TButtonLayout; AFont: TFont; Images: TImageList; + ImageIndex: Integer; Flags: Word); +{$ENDIF} + procedure Draw(Canvas: TCanvas; X, Y, Margin, Spacing: Integer; + Layout: TButtonLayout; AFont: TFont; Flags: Word); + property Alignment: TAlignment read GetAlignment write SetAlignment; + property Caption: TCaption read FCaption write FCaption; + property Glyph: TBitmap read GetGlyph write SetGlyph; + property NumGlyphs: TRxNumGlyphs read GetNumGlyphs write SetNumGlyphs; + property ButtonSize: TPoint read FButtonSize write FButtonSize; + property WordWrap: Boolean read GetWordWrap write SetWordWrap; + end; + +{ TRxButtonGlyph } + + TRxButtonGlyph = class + private + FOriginal: TBitmap; + FGlyphList: TImageList; + FIndexs: array[TRxButtonState] of Integer; + FTransparentColor: TColor; + FNumGlyphs: TRxNumGlyphs; + FWordWrap: Boolean; + FAlignment: TAlignment; + FOnChange: TNotifyEvent; + procedure GlyphChanged(Sender: TObject); + procedure SetGlyph(Value: TBitmap); + procedure SetNumGlyphs(Value: TRxNumGlyphs); + function MapColor(Color: TColor): TColor; + protected + procedure MinimizeCaption(Canvas: TCanvas; const Caption: string; + Buffer: PChar; MaxLen, Width: Integer); + function CreateButtonGlyph(State: TRxButtonState): Integer; +{$IFDEF WIN32} + function CreateImageGlyph(State: TRxButtonState; Images: TImageList; + Index: Integer): Integer; +{$ENDIF} + procedure CalcButtonLayout(Canvas: TCanvas; const Client: TRect; + var Caption: string; Layout: TButtonLayout; Margin, Spacing: Integer; + PopupMark: Boolean; var GlyphPos: TPoint; var TextBounds: TRect; + Flags: Word {$IFDEF WIN32}; Images: TImageList; ImageIndex: Integer + {$ENDIF}); + public + constructor Create; + destructor Destroy; override; + procedure Invalidate; + function DrawButtonGlyph(Canvas: TCanvas; X, Y: Integer; + State: TRxButtonState): TPoint; +{$IFDEF WIN32} + function DrawButtonImage(Canvas: TCanvas; X, Y: Integer; Images: TImageList; + ImageIndex: Integer; State: TRxButtonState): TPoint; + function DrawEx(Canvas: TCanvas; const Client: TRect; const Caption: string; + Layout: TButtonLayout; Margin, Spacing: Integer; PopupMark: Boolean; + Images: TImageList; ImageIndex: Integer; State: TRxButtonState; + Flags: Word): TRect; +{$ENDIF} + procedure DrawButtonText(Canvas: TCanvas; const Caption: string; + TextBounds: TRect; State: TRxButtonState; Flags: Word); + procedure DrawPopupMark(Canvas: TCanvas; X, Y: Integer; + State: TRxButtonState); + function Draw(Canvas: TCanvas; const Client: TRect; const Caption: string; + Layout: TButtonLayout; Margin, Spacing: Integer; PopupMark: Boolean; + State: TRxButtonState; Flags: Word): TRect; + property Alignment: TAlignment read FAlignment write FAlignment; + property Glyph: TBitmap read FOriginal write SetGlyph; + property NumGlyphs: TRxNumGlyphs read FNumGlyphs write SetNumGlyphs; + property WordWrap: Boolean read FWordWrap write FWordWrap; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + end; + +function DrawShadowText(DC: HDC; Str: PChar; Count: Integer; var Rect: TRect; + Format: Word; ShadowSize: Byte; ShadowColor: TColorRef; + ShadowPos: TShadowPosition): Integer; + +function CheckBitmap: TBitmap; +*) + +type + + { TRxDBRadioGroup } + + { TRxRadioGroup } + + TRxRadioGroup = class(TRadioGroup) + private + function GetItemEnabled(Index: integer): boolean; + procedure SetItemEnabled(Index: integer; AValue: boolean); + public + property ItemEnabled[Index: integer]: boolean read GetItemEnabled write SetItemEnabled; + end; + +implementation + + +uses SysUtils, Dialogs, VCLUtils, Math, RxAppUtils, ImgList, + ActnList, InterfaceBase; +const + Alignments: array [TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER); + WordWraps: array[Boolean] of Word = (0, DT_WORDBREAK); +(* +{ TTextListBox } + +procedure TTextListBox.SetHorizontalExtent; +begin + SendMessage(Handle, LB_SETHORIZONTALEXTENT, FMaxWidth, 0); +end; + +function TTextListBox.GetItemWidth(Index: Integer): Integer; +var + ATabWidth: Longint; + S: string; +begin + S := Items[Index] + 'x'; + if TabWidth > 0 then begin + ATabWidth := Round((TabWidth * Canvas.TextWidth('0')) * 0.25); + Result := LoWord(GetTabbedTextExtent(Canvas.Handle, @S[1], Length(S), + 1, ATabWidth)); + end + else Result := Canvas.TextWidth(S); +end; + +procedure TTextListBox.ResetHorizontalExtent; +var + I: Integer; +begin + FMaxWidth := 0; + for I := 0 to Items.Count - 1 do + FMaxWidth := Max(FMaxWidth, GetItemWidth(I)); + SetHorizontalExtent; +end; + +{$IFNDEF WIN32} + +procedure TTextListBox.SetTabWidth(Value: Integer); +begin + if Value < 0 then Value := 0; + if FTabWidth <> Value then begin + FTabWidth := Value; + RecreateWnd; + end; +end; + +procedure TTextListBox.CreateParams(var Params: TCreateParams); +const + TabStops: array[Boolean] of Longword = (0, LBS_USETABSTOPS); +begin + inherited CreateParams(Params); + Params.Style := Params.Style or TabStops[FTabWidth <> 0]; +end; + +procedure TTextListBox.CreateWnd; +begin + inherited CreateWnd; + if FTabWidth <> 0 then + SendMessage(Handle, LB_SETTABSTOPS, 1, Longint(@FTabWidth)); +end; + +{$ENDIF} + +procedure TTextListBox.WndProc(var Message: TMessage); +begin + case Message.Msg of + LB_ADDSTRING, LB_INSERTSTRING: + begin + inherited WndProc(Message); + FMaxWidth := Max(FMaxWidth, GetItemWidth(Message.Result)); + SetHorizontalExtent; + end; + LB_DELETESTRING: + begin + if GetItemWidth(Message.wParam) >= FMaxWidth then begin + Perform(WM_HSCROLL, SB_TOP, 0); + inherited WndProc(Message); + ResetHorizontalExtent; + end + else inherited WndProc(Message); + end; + LB_RESETCONTENT: + begin + FMaxWidth := 0; + SetHorizontalExtent; + Perform(WM_HSCROLL, SB_TOP, 0); + inherited WndProc(Message); + end; + WM_SETFONT: + begin + inherited WndProc(Message); + Canvas.Font.Assign(Self.Font); + ResetHorizontalExtent; + Exit; + end; + else inherited WndProc(Message); + end; +end; + +{ TRxCustomListBox implementation copied from STDCTRLS.PAS and modified } + +{ TRxListBoxStrings } + +type + TRxListBoxStrings = class(TStrings) + private + ListBox: TRxCustomListBox; + protected +{$IFNDEF RX_D3} + procedure Error(Msg: Word; Data: Integer); +{$ENDIF} + function Get(Index: Integer): string; override; + function GetCount: Integer; override; + function GetObject(Index: Integer): TObject; override; + procedure PutObject(Index: Integer; AObject: TObject); override; + procedure SetUpdateState(Updating: Boolean); override; + public + function Add(const S: string): Integer; override; + procedure Clear; override; + procedure Delete(Index: Integer); override; + procedure Insert(Index: Integer; const S: string); override; + end; + +{$IFNDEF RX_D3} +procedure TRxListBoxStrings.Error(Msg: Word; Data: Integer); + +{$IFDEF WIN32} + function ReturnAddr: Pointer; + asm + MOV EAX,[EBP+4] + end; +{$ELSE} + function ReturnAddr: Pointer; assembler; + asm + MOV AX,[BP].Word[2] + MOV DX,[BP].Word[4] + end; +{$ENDIF} + +begin + raise EStringListError.CreateFmt('%s: %d', [LoadStr(Msg), + Data]) at ReturnAddr; +end; +{$ENDIF} + +function TRxListBoxStrings.GetCount: Integer; +begin + Result := SendMessage(ListBox.Handle, LB_GETCOUNT, 0, 0); +end; + +function TRxListBoxStrings.Get(Index: Integer): string; +var + Len: Integer; +{$IFDEF WIN32} + Text: array[0..4095] of Char; +{$ENDIF} +begin + Len := SendMessage(ListBox.Handle, LB_GETTEXT, Index, + {$IFDEF WIN32} LongInt(@Text) {$ELSE} LongInt(@Result) {$ENDIF}); + if Len < 0 then Error(SListIndexError, Index); +{$IFDEF WIN32} + SetString(Result, Text, Len); +{$ELSE} + System.Move(Result[0], Result[1], Len); + Result[0] := Char(Len); +{$ENDIF} +end; + +function TRxListBoxStrings.GetObject(Index: Integer): TObject; +begin + Result := TObject(ListBox.GetItemData(Index)); + if Longint(Result) = LB_ERR then Error(SListIndexError, Index); +end; + +procedure TRxListBoxStrings.PutObject(Index: Integer; AObject: TObject); +begin + ListBox.SetItemData(Index, LongInt(AObject)); +end; + +function TRxListBoxStrings.Add(const S: string): Integer; +{$IFNDEF WIN32} +var + Text: array[0..255] of Char; +{$ENDIF} +begin +{$IFDEF WIN32} + Result := SendMessage(ListBox.Handle, LB_ADDSTRING, 0, LongInt(PChar(S))); +{$ELSE} + Result := SendMessage(ListBox.Handle, LB_ADDSTRING, 0, LongInt(StrPCopy(Text, S))); +{$ENDIF} + if Result < 0 then raise EOutOfResources.Create(ResStr(SInsertLineError)); +end; + +procedure TRxListBoxStrings.Insert(Index: Integer; const S: string); +{$IFNDEF WIN32} +var + Text: array[0..255] of Char; +{$ENDIF} +begin + if SendMessage(ListBox.Handle, LB_INSERTSTRING, Index, +{$IFDEF WIN32} + Longint(PChar(S))) < 0 then +{$ELSE} + Longint(StrPCopy(Text, S))) < 0 then +{$ENDIF} + raise EOutOfResources.Create(ResStr(SInsertLineError)); +end; + +procedure TRxListBoxStrings.Delete(Index: Integer); +begin + ListBox.DeleteString(Index); +end; + +procedure TRxListBoxStrings.Clear; +begin + ListBox.ResetContent; +end; + +procedure TRxListBoxStrings.SetUpdateState(Updating: Boolean); +begin + SendMessage(ListBox.Handle, WM_SETREDRAW, Ord(not Updating), 0); + if not Updating then ListBox.Refresh; +end; + +{ TRxCustomListBox } + +procedure ListIndexError(Index: Integer); + +{$IFDEF WIN32} + function ReturnAddr: Pointer; + asm + MOV EAX,[EBP+4] + end; +{$ELSE} + function ReturnAddr: Pointer; assembler; + asm + MOV AX,[BP].Word[2] + MOV DX,[BP].Word[4] + end; +{$ENDIF} + +begin +{$IFDEF RX_D3} + raise EStringListError.CreateFmt(SListIndexError, [Index]) at ReturnAddr; +{$ELSE} + raise EStringListError.CreateFmt('%s: %d', [LoadStr(SListIndexError), + Index]) at ReturnAddr; +{$ENDIF} +end; + +constructor TRxCustomListBox.Create(AOwner: TComponent); +const + ListBoxStyle = [csSetCaption, csDoubleClicks]; +begin + inherited Create(AOwner); +{$IFDEF WIN32} + if NewStyleControls then ControlStyle := ListBoxStyle + else ControlStyle := ListBoxStyle + [csFramed]; +{$ELSE} + ControlStyle := ListBoxStyle + [csFramed]; +{$ENDIF} + Width := 121; + Height := 97; + TabStop := True; + ParentColor := False; + FItems := CreateItemList; + TRxListBoxStrings(FItems).ListBox := Self; + FCanvas := TControlCanvas.Create; + TControlCanvas(FCanvas).Control := Self; + FItemHeight := 16; + FBorderStyle := bsSingle; + FExtendedSelect := True; +end; + +destructor TRxCustomListBox.Destroy; +begin + inherited Destroy; + FCanvas.Free; + FItems.Free; + FSaveItems.Free; +end; + +function TRxCustomListBox.CreateItemList: TStrings; +begin + Result := TRxListBoxStrings.Create; +end; + +function TRxCustomListBox.GetItemData(Index: Integer): LongInt; +begin + Result := SendMessage(Handle, LB_GETITEMDATA, Index, 0); +end; + +procedure TRxCustomListBox.SetItemData(Index: Integer; AData: LongInt); +begin + SendMessage(Handle, LB_SETITEMDATA, Index, AData); +end; + +procedure TRxCustomListBox.DeleteString(Index: Integer); +begin + SendMessage(Handle, LB_DELETESTRING, Index, 0); +end; + +procedure TRxCustomListBox.SetHorizontalExtent; +begin + SendMessage(Handle, LB_SETHORIZONTALEXTENT, FMaxItemWidth, 0); +end; + +function TRxCustomListBox.GetItemWidth(Index: Integer): Integer; +var + ATabWidth: Longint; + S: string; +begin + if (Style <> lbStandard) and Assigned(FOnGetItemWidth) and + Assigned(FOnDrawItem) then + begin + Result := 0; + FOnGetItemWidth(Self, Index, Result); + end + else begin + S := Items[Index] + 'x'; + if TabWidth > 0 then begin + {if (FTabChar > #0) then + for I := 1 to Length(S) do + if S[I] = FTabChar then S[I] := #9;} + ATabWidth := Round((TabWidth * Canvas.TextWidth('0')) * 0.25); + Result := LoWord(GetTabbedTextExtent(Canvas.Handle, @S[1], Length(S), + 1, ATabWidth)); + end + else Result := Canvas.TextWidth(S); + end; +end; + +procedure TRxCustomListBox.ResetHorizontalExtent; +var + I: Integer; +begin + FMaxItemWidth := 0; + for I := 0 to Items.Count - 1 do + FMaxItemWidth := Max(FMaxItemWidth, GetItemWidth(I)); + SetHorizontalExtent; +end; + +procedure TRxCustomListBox.ResetContent; +begin + SendMessage(Handle, LB_RESETCONTENT, 0, 0); +end; + +procedure TRxCustomListBox.Clear; +begin + FItems.Clear; +end; + +procedure TRxCustomListBox.SetColumnWidth; +begin + if FColumns > 0 then + SendMessage(Handle, LB_SETCOLUMNWIDTH, (Width + FColumns - 3) div + FColumns, 0); +end; + +procedure TRxCustomListBox.SetColumns(Value: Integer); +begin + if FColumns <> Value then + if (FColumns = 0) or (Value = 0) then begin + FColumns := Value; + RecreateWnd; + end + else begin + FColumns := Value; + if HandleAllocated then SetColumnWidth; + end; +end; + +function TRxCustomListBox.GetItemIndex: Integer; +begin + Result := SendMessage(Handle, LB_GETCURSEL, 0, 0); +end; + +function TRxCustomListBox.GetSelCount: Integer; +begin + Result := SendMessage(Handle, LB_GETSELCOUNT, 0, 0); +end; + +procedure TRxCustomListBox.SetItemIndex(Value: Integer); +begin + if GetItemIndex <> Value then + SendMessage(Handle, LB_SETCURSEL, Value, 0); +end; + +procedure TRxCustomListBox.SetExtendedSelect(Value: Boolean); +begin + if Value <> FExtendedSelect then begin + FExtendedSelect := Value; + RecreateWnd; + end; +end; + +procedure TRxCustomListBox.SetIntegralHeight(Value: Boolean); +begin + if Value <> FIntegralHeight then begin + FIntegralHeight := Value; + RecreateWnd; + end; +end; + +function TRxCustomListBox.GetAutoScroll: Boolean; +begin + Result := FAutoScroll and (Columns = 0); +end; + +procedure TRxCustomListBox.SetOnDrawItem(Value: TDrawItemEvent); +begin + if Assigned(FOnDrawItem) <> Assigned(Value) then begin + FOnDrawItem := Value; + Perform(WM_HSCROLL, SB_TOP, 0); + if HandleAllocated then + if AutoScroll then ResetHorizontalExtent + else SendMessage(Handle, LB_SETHORIZONTALEXTENT, 0, 0); + end + else FOnDrawItem := Value; +end; + +procedure TRxCustomListBox.SetOnGetItemWidth(Value: TGetItemWidthEvent); +begin + if Assigned(FOnGetItemWidth) <> Assigned(Value) then begin + FOnGetItemWidth := Value; + Perform(WM_HSCROLL, SB_TOP, 0); + if HandleAllocated then + if AutoScroll then ResetHorizontalExtent + else SendMessage(Handle, LB_SETHORIZONTALEXTENT, 0, 0); + end + else FOnGetItemWidth := Value; +end; + +procedure TRxCustomListBox.SetAutoScroll(Value: Boolean); +begin + if AutoScroll <> Value then begin + FAutoScroll := Value; + Perform(WM_HSCROLL, SB_TOP, 0); + if HandleAllocated then begin + if AutoScroll then ResetHorizontalExtent + else SendMessage(Handle, LB_SETHORIZONTALEXTENT, 0, 0); + end; + end; +end; + +function TRxCustomListBox.GetItemHeight: Integer; +var + R: TRect; +begin + Result := FItemHeight; + if HandleAllocated and (FStyle = lbStandard) then begin + Perform(LB_GETITEMRECT, 0, Longint(@R)); + Result := R.Bottom - R.Top; + end; +end; + +procedure TRxCustomListBox.SetItemHeight(Value: Integer); +begin + if (FItemHeight <> Value) and (Value > 0) then begin + FItemHeight := Value; + RecreateWnd; + end; +end; + +procedure TRxCustomListBox.SetTabWidth(Value: Integer); +begin + if Value < 0 then Value := 0; + if FTabWidth <> Value then begin + FTabWidth := Value; + RecreateWnd; + end; +end; + +procedure TRxCustomListBox.SetMultiSelect(Value: Boolean); +begin + if FMultiSelect <> Value then begin + FMultiSelect := Value; + RecreateWnd; + end; +end; + +function TRxCustomListBox.GetSelected(Index: Integer): Boolean; +var + R: Longint; +begin + R := SendMessage(Handle, LB_GETSEL, Index, 0); + if R = LB_ERR then ListIndexError(Index); + Result := LongBool(R); +end; + +procedure TRxCustomListBox.SetSelected(Index: Integer; Value: Boolean); +begin + if MultiSelect then begin + if SendMessage(Handle, LB_SETSEL, Ord(Value), Index) = LB_ERR then + ListIndexError(Index); + end + else begin + if Value then SetItemIndex(Index) + else if (ItemIndex = Index) then SetItemIndex(-1); + end; +end; + +procedure TRxCustomListBox.SetSorted(Value: Boolean); +begin + if FSorted <> Value then begin + FSorted := Value; + RecreateWnd; + end; +end; + +procedure TRxCustomListBox.SetStyle(Value: TListBoxStyle); +begin + if FStyle <> Value then begin + FStyle := Value; + RecreateWnd; + end; +end; + +function TRxCustomListBox.GetTopIndex: Integer; +begin + Result := SendMessage(Handle, LB_GETTOPINDEX, 0, 0); +end; + +procedure TRxCustomListBox.SetBorderStyle(Value: TBorderStyle); +begin + if FBorderStyle <> Value then begin + FBorderStyle := Value; + RecreateWnd; + end; +end; + +procedure TRxCustomListBox.SetTopIndex(Value: Integer); +begin + if GetTopIndex <> Value then SendMessage(Handle, LB_SETTOPINDEX, Value, 0); +end; + +procedure TRxCustomListBox.SetGraySelection(Value: Boolean); +begin + if FGraySelection <> Value then begin + FGraySelection := Value; + if not Focused then Invalidate; + end; +end; + +procedure TRxCustomListBox.SetItems(Value: TStrings); +begin + Items.Assign(Value); +end; + +function TRxCustomListBox.ItemAtPos(Pos: TPoint; Existing: Boolean): Integer; +var + Count: Integer; + ItemRect: TRect; +begin + if PtInRect(ClientRect, Pos) then begin + Result := TopIndex; + Count := Items.Count; + while Result < Count do begin + Perform(LB_GETITEMRECT, Result, Longint(@ItemRect)); + if PtInRect(ItemRect, Pos) then Exit; + Inc(Result); + end; + if not Existing then Exit; + end; + Result := -1; +end; + +function TRxCustomListBox.ItemRect(Index: Integer): TRect; +var + Count: Integer; +begin + Count := Items.Count; + if (Index = 0) or (Index < Count) then + Perform(LB_GETITEMRECT, Index, Longint(@Result)) + else if Index = Count then begin + Perform(LB_GETITEMRECT, Index - 1, Longint(@Result)); + OffsetRect(Result, 0, Result.Bottom - Result.Top); + end + else FillChar(Result, SizeOf(Result), 0); +end; + +procedure TRxCustomListBox.CreateParams(var Params: TCreateParams); +type + PSelects = ^TSelects; + TSelects = array[Boolean] of Longword; +const + BorderStyles: array[TBorderStyle] of Longword = (0, WS_BORDER); + Styles: array[TListBoxStyle] of Longword = + (0, LBS_OWNERDRAWFIXED, LBS_OWNERDRAWVARIABLE + {$IFDEF RX_D6}, LBS_OWNERDRAWFIXED, LBS_OWNERDRAWFIXED{$ENDIF}); + Sorteds: array[Boolean] of Longword = (0, LBS_SORT); + MultiSelects: array[Boolean] of Longword = (0, LBS_MULTIPLESEL); + ExtendSelects: array[Boolean] of Longword = (0, LBS_EXTENDEDSEL); + IntegralHeights: array[Boolean] of Longword = (LBS_NOINTEGRALHEIGHT, 0); + MultiColumns: array[Boolean] of Longword = (0, LBS_MULTICOLUMN); + TabStops: array[Boolean] of Longword = (0, LBS_USETABSTOPS); +var + Selects: PSelects; +begin + inherited CreateParams(Params); + CreateSubClass(Params, 'LISTBOX'); + with Params do begin +{$IFNDEF WIN32} + Inc(X); Inc(Y); + Dec(Width, 2); Dec(Height, 2); +{$ENDIF} + Selects := @MultiSelects; + if FExtendedSelect then Selects := @ExtendSelects; + Style := Style or (WS_HSCROLL or WS_VSCROLL or LBS_HASSTRINGS or + LBS_NOTIFY) or Styles[FStyle] or Sorteds[FSorted] or + Selects^[FMultiSelect] or IntegralHeights[FIntegralHeight] or + MultiColumns[FColumns <> 0] or BorderStyles[FBorderStyle] or + TabStops[FTabWidth <> 0]; +{$IFDEF WIN32} + if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then begin + Style := Style and not WS_BORDER; + ExStyle := ExStyle or WS_EX_CLIENTEDGE; + end; +{$ENDIF} + WindowClass.Style := WindowClass.Style and not (CS_HREDRAW or CS_VREDRAW); + end; +end; + +procedure TRxCustomListBox.CreateWnd; +var + W, H: Integer; +begin + W := Width; + H := Height; + inherited CreateWnd; + SetWindowPos(Handle, 0, Left, Top, W, H, SWP_NOZORDER or SWP_NOACTIVATE); + if FTabWidth <> 0 then + SendMessage(Handle, LB_SETTABSTOPS, 1, Longint(@FTabWidth)); + SetColumnWidth; + if FSaveItems <> nil then begin + FItems.Assign(FSaveItems); + SetTopIndex(FSaveTopIndex); + SetItemIndex(FSaveItemIndex); + FSaveItems.Free; + FSaveItems := nil; + end; +end; + +procedure TRxCustomListBox.DestroyWnd; +begin + if FItems.Count > 0 then begin + FSaveItems := TStringList.Create; + FSaveItems.Assign(FItems); + FSaveTopIndex := GetTopIndex; + FSaveItemIndex := GetItemIndex; + end; + inherited DestroyWnd; +end; + +procedure TRxCustomListBox.WndProc(var Message: TMessage); +begin + if AutoScroll then begin + case Message.Msg of + LB_ADDSTRING, LB_INSERTSTRING: + begin + inherited WndProc(Message); + FMaxItemWidth := Max(FMaxItemWidth, GetItemWidth(Message.Result)); + SetHorizontalExtent; + Exit; + end; + LB_DELETESTRING: + begin + if GetItemWidth(Message.wParam) >= FMaxItemWidth then begin + Perform(WM_HSCROLL, SB_TOP, 0); + inherited WndProc(Message); + ResetHorizontalExtent; + end + else inherited WndProc(Message); + Exit; + end; + LB_RESETCONTENT: + begin + FMaxItemWidth := 0; + SetHorizontalExtent; + Perform(WM_HSCROLL, SB_TOP, 0); + inherited WndProc(Message); + Exit; + end; + WM_SETFONT: + begin + inherited WndProc(Message); + Canvas.Font.Assign(Self.Font); + ResetHorizontalExtent; + Exit; + end; + end; + end; + {for auto drag mode, let listbox handle itself, instead of TControl} + if not (csDesigning in ComponentState) and ((Message.Msg = WM_LBUTTONDOWN) or + (Message.Msg = WM_LBUTTONDBLCLK)) and not Dragging then + begin + if DragMode = dmAutomatic then begin + if IsControlMouseMsg(TWMMouse(Message)) then Exit; + ControlState := ControlState + [csLButtonDown]; + Dispatch(Message); {overrides TControl's BeginDrag} + Exit; + end; + end; + inherited WndProc(Message); +end; + +procedure TRxCustomListBox.WMLButtonDown(var Message: TWMLButtonDown); +var + ItemNo: Integer; + ShiftState: TShiftState; +begin + ShiftState := KeysToShiftState(Message.Keys); + if (DragMode = dmAutomatic) and FMultiSelect then begin + if not (ssShift in ShiftState) or (ssCtrl in ShiftState) then begin + ItemNo := ItemAtPos(SmallPointToPoint(Message.Pos), True); + if (ItemNo >= 0) and (Selected[ItemNo]) then begin + BeginDrag(False); + Exit; + end; + end; + end; + inherited; + if (DragMode = dmAutomatic) and not (FMultiSelect and + ((ssCtrl in ShiftState) or (ssShift in ShiftState))) then + BeginDrag(False); +end; + +procedure TRxCustomListBox.WMNCHitTest(var Msg: TWMNCHitTest); +begin + if csDesigning in ComponentState then DefaultHandler(Msg) + else inherited; +end; + +procedure TRxCustomListBox.CNCommand(var Message: TWMCommand); +begin + case Message.NotifyCode of + LBN_SELCHANGE: + begin +{$IFDEF RX_D3} + inherited Changed; +{$ENDIF} + Click; + end; + LBN_DBLCLK: DblClick; + end; +end; + +procedure TRxCustomListBox.WMPaint(var Message: TWMPaint); + + procedure PaintListBox; + var + DrawItemMsg: TWMDrawItem; + MeasureItemMsg: TWMMeasureItem; + DrawItemStruct: TDrawItemStruct; + MeasureItemStruct: TMeasureItemStruct; + R: TRect; + Y, I, H, W: Integer; + begin + { Initialize drawing records } + DrawItemMsg.Msg := CN_DRAWITEM; + DrawItemMsg.DrawItemStruct := @DrawItemStruct; + DrawItemMsg.Ctl := Handle; + DrawItemStruct.CtlType := ODT_LISTBOX; + DrawItemStruct.itemAction := ODA_DRAWENTIRE; + DrawItemStruct.itemState := 0; + DrawItemStruct.hDC := Message.DC; + DrawItemStruct.CtlID := Handle; + DrawItemStruct.hwndItem := Handle; + { Intialize measure records } + MeasureItemMsg.Msg := CN_MEASUREITEM; + MeasureItemMsg.IDCtl := Handle; + MeasureItemMsg.MeasureItemStruct := @MeasureItemStruct; + MeasureItemStruct.CtlType := ODT_LISTBOX; + MeasureItemStruct.CtlID := Handle; + { Draw the listbox } + Y := 0; + I := TopIndex; + GetClipBox(Message.DC, R); + H := Height; + W := Width; + while Y < H do begin + MeasureItemStruct.itemID := I; + if I < Items.Count then + MeasureItemStruct.itemData := Longint(Pointer(Items.Objects[I])); + MeasureItemStruct.itemWidth := W; + MeasureItemStruct.itemHeight := FItemHeight; + DrawItemStruct.itemData := MeasureItemStruct.itemData; + DrawItemStruct.itemID := I; + Dispatch(MeasureItemMsg); + DrawItemStruct.rcItem := Rect(0, Y, MeasureItemStruct.itemWidth, + Y + Integer(MeasureItemStruct.itemHeight)); + Dispatch(DrawItemMsg); + Inc(Y, MeasureItemStruct.itemHeight); + Inc(I); + if I >= Items.Count then break; + end; + end; + +begin + if Message.DC <> 0 then PaintListBox + else inherited; +end; + +procedure TRxCustomListBox.WMSize(var Message: TWMSize); +begin + inherited; + SetColumnWidth; +end; + +procedure TRxCustomListBox.DragCanceled; +var + M: TWMMouse; +{$IFDEF WIN32} + MousePos: TPoint; +{$ENDIF} +begin + with M do begin + Msg := WM_LBUTTONDOWN; +{$IFDEF WIN32} + GetCursorPos(MousePos); + Pos := PointToSmallPoint(ScreenToClient(MousePos)); +{$ELSE} + GetCursorPos(Pos); + Pos := ScreenToClient(Pos); +{$ENDIF} + Keys := 0; + Result := 0; + end; + DefaultHandler(M); + M.Msg := WM_LBUTTONUP; + DefaultHandler(M); +end; + +procedure TRxCustomListBox.DefaultDrawText(X, Y: Integer; const S: string); +var + ATabWidth: Longint; +begin +{$IFDEF RX_D4} + TControlCanvas(FCanvas).UpdateTextFlags; +{$ENDIF} + if FTabWidth = 0 then FCanvas.TextOut(X, Y, S) + else begin + ATabWidth := Round((TabWidth * Canvas.TextWidth('0')) * 0.25); + TabbedTextOut(FCanvas.Handle, X, Y, @S[1], Length(S), 1, ATabWidth, X); + end; +end; + +procedure TRxCustomListBox.DrawItem(Index: Integer; Rect: TRect; + State: TOwnerDrawState); +begin + if Assigned(FOnDrawItem) then FOnDrawItem(Self, Index, Rect, State) + else begin + FCanvas.FillRect(Rect); + if Index < Items.Count then begin +{$IFDEF RX_D4} + if not UseRightToLeftAlignment then Inc(Rect.Left, 2) + else Dec(Rect.Right, 2); +{$ELSE} + Inc(Rect.Left, 2); +{$ENDIF} + DefaultDrawText(Rect.Left, Max(Rect.Top, (Rect.Bottom + + Rect.Top - Canvas.TextHeight('Wy')) div 2), Items[Index]); + end; + end; +end; + +procedure TRxCustomListBox.MeasureItem(Index: Integer; var Height: Integer); +begin + if Assigned(FOnMeasureItem) then FOnMeasureItem(Self, Index, Height) +end; + +procedure TRxCustomListBox.CNDrawItem(var Message: TWMDrawItem); +var + State: TOwnerDrawState; +begin + with Message.DrawItemStruct^ do begin +{$IFDEF WIN32} + {$IFDEF RX_D5} + State := TOwnerDrawState(LongRec(itemState).Lo); + {$ELSE} + State := TOwnerDrawState(WordRec(LongRec(itemState).Lo).Lo); + {$ENDIF} +{$ELSE} + State := TOwnerDrawState(WordRec(itemState).Lo); +{$ENDIF} + FCanvas.Handle := hDC; + FCanvas.Font := Font; + FCanvas.Brush := Brush; + if (Integer(itemID) >= 0) and (odSelected in State) then begin + with FCanvas do + if not (csDesigning in ComponentState) and FGraySelection and + not Focused then + begin + Brush.Color := clBtnFace; + if ColorToRGB(Font.Color) = ColorToRGB(clBtnFace) then + Font.Color := clBtnText; + end + else begin + Brush.Color := clHighlight; + Font.Color := clHighlightText + end; + end; + if Integer(itemID) >= 0 then DrawItem(itemID, rcItem, State) + else FCanvas.FillRect(rcItem); + if odFocused in State then DrawFocusRect(hDC, rcItem); + FCanvas.Handle := 0; + end; +end; + +procedure TRxCustomListBox.CNMeasureItem(var Message: TWMMeasureItem); +begin + with Message.MeasureItemStruct^ do begin + itemHeight := FItemHeight; + if FStyle = lbOwnerDrawVariable then + MeasureItem(itemID, Integer(itemHeight)); + end; +end; + +procedure TRxCustomListBox.WMKillFocus(var Msg: TWMKillFocus); +begin + inherited; + if FGraySelection and MultiSelect and (SelCount > 1) then Invalidate; +end; + +procedure TRxCustomListBox.WMSetFocus(var Msg: TWMSetFocus); +begin + inherited; + if FGraySelection and MultiSelect and (SelCount > 1) then Invalidate; +end; + +{$IFDEF WIN32} +procedure TRxCustomListBox.CMCtl3DChanged(var Message: TMessage); +begin + if NewStyleControls and (FBorderStyle = bsSingle) then RecreateWnd; + inherited; +end; +{$ENDIF} + +{ TCheckListBoxItem } + +type + TCheckListBoxItem = class + private + FData: LongInt; + FState: TCheckBoxState; + FEnabled: Boolean; + function GetChecked: Boolean; + public + constructor Create; + property Checked: Boolean read GetChecked; + property Enabled: Boolean read FEnabled write FEnabled; + property State: TCheckBoxState read FState write FState; + end; + +constructor TCheckListBoxItem.Create; +begin + inherited Create; + FState := clbDefaultState; + FEnabled := clbDefaultEnabled; +end; + +function TCheckListBoxItem.GetChecked: Boolean; +begin + Result := FState = cbChecked; +end; + +{ TCheckListBoxStrings } + +type + TCheckListBoxStrings = class(TRxListBoxStrings) + public + procedure Exchange(Index1, Index2: Integer); override; + procedure Move(CurIndex, NewIndex: Integer); override; + end; + +procedure TCheckListBoxStrings.Exchange(Index1, Index2: Integer); +var + TempEnabled1, TempEnabled2: Boolean; + TempState1, TempState2: TCheckBoxState; +begin + with TRxCheckListBox(ListBox) do begin + TempState1 := State[Index1]; + TempEnabled1 := EnabledItem[Index1]; + TempState2 := State[Index2]; + TempEnabled2 := EnabledItem[Index2]; + inherited Exchange(Index1, Index2); + State[Index1] := TempState2; + EnabledItem[Index1] := TempEnabled2; + State[Index2] := TempState1; + EnabledItem[Index2] := TempEnabled1; + end; +end; + +procedure TCheckListBoxStrings.Move(CurIndex, NewIndex: Integer); +var + TempEnabled: Boolean; + TempState: TCheckBoxState; +begin + with TRxCheckListBox(ListBox) do begin + TempState := State[CurIndex]; + TempEnabled := EnabledItem[CurIndex]; + inherited Move(CurIndex, NewIndex); + State[NewIndex] := TempState; + EnabledItem[NewIndex] := TempEnabled; + end; +end; + +{ TRxCheckListBox } + +const + FCheckBitmap: TBitmap = nil; + +function CheckBitmap: TBitmap; +begin + if FCheckBitmap = nil then begin + FCheckBitmap := TBitmap.Create; + FCheckBitmap.Handle := LoadBitmap(hInstance, 'CHECK_IMAGES'); + end; + Result := FCheckBitmap; +end; + +procedure DestroyLocals; far; +begin + if FCheckBitmap <> nil then begin + FCheckBitmap.Free; + FCheckBitmap := nil; + end; +end; + +const + InternalVersion = 202; { for backward compatibility only } + +constructor TRxCheckListBox.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FAutoScroll := True; + with CheckBitmap do begin + FCheckWidth := Width div 6; + FCheckHeight := Height div 3; + end; + FDrawBitmap := TBitmap.Create; + with FDrawBitmap do begin + Width := FCheckWidth; + Height := FCheckHeight; + end; + FIniLink := TIniLink.Create; + FIniLink.OnSave := IniSave; + FIniLink.OnLoad := IniLoad; +end; + +destructor TRxCheckListBox.Destroy; +begin + FSaveStates.Free; + FSaveStates := nil; + FDrawBitmap.Free; + FDrawBitmap := nil; + FIniLink.Free; + inherited Destroy; +end; + +procedure TRxCheckListBox.Loaded; +begin + inherited Loaded; + UpdateCheckStates; +end; + +function TRxCheckListBox.CreateItemList: TStrings; +begin + Result := TCheckListBoxStrings.Create; +end; + +const + sCount = 'Count'; + sItem = 'Item'; + +procedure TRxCheckListBox.InternalSaveStates(IniFile: TObject; + const Section: string); +var + I: Integer; +begin + IniEraseSection(IniFile, Section); + IniWriteInteger(IniFile, Section, sCount, Items.Count); + for I := 0 to Items.Count - 1 do + IniWriteInteger(IniFile, Section, sItem + IntToStr(I), Integer(State[I])); +end; + +procedure TRxCheckListBox.InternalRestoreStates(IniFile: TObject; + const Section: string); +var + I: Integer; + ACount: Integer; +begin + ACount := Min(IniReadInteger(IniFile, Section, sCount, 0), Items.Count); + for I := 0 to ACount - 1 do begin + State[I] := TCheckBoxState(IniReadInteger(IniFile, Section, + sItem + IntToStr(I), Integer(clbDefaultState))); + if (State[I] = cbChecked) and (FCheckKind = ckRadioButtons) then Exit; + end; +end; + +{$IFDEF WIN32} +procedure TRxCheckListBox.SaveStatesReg(IniFile: TRegIniFile); +begin + InternalSaveStates(IniFile, GetDefaultSection(Self)); +end; + +procedure TRxCheckListBox.RestoreStatesReg(IniFile: TRegIniFile); +begin + InternalRestoreStates(IniFile, GetDefaultSection(Self)); +end; +{$ENDIF WIN32} + +procedure TRxCheckListBox.SaveStates(IniFile: TIniFile); +begin + InternalSaveStates(IniFile, GetDefaultSection(Self)); +end; + +procedure TRxCheckListBox.RestoreStates(IniFile: TIniFile); +begin + InternalRestoreStates(IniFile, GetDefaultSection(Self)); +end; + +function TRxCheckListBox.GetStorage: TFormPlacement; +begin + Result := FIniLink.Storage; +end; + +procedure TRxCheckListBox.SetStorage(Value: TFormPlacement); +begin + FIniLink.Storage := Value; +end; + +procedure TRxCheckListBox.IniSave(Sender: TObject); +begin + if (Name <> '') and (FIniLink.IniObject <> nil) then + InternalSaveStates(FIniLink.IniObject, FIniLink.RootSection + + GetDefaultSection(Self)); +end; + +procedure TRxCheckListBox.IniLoad(Sender: TObject); +begin + if (Name <> '') and (FIniLink.IniObject <> nil) then + InternalRestoreStates(FIniLink.IniObject, FIniLink.RootSection + + GetDefaultSection(Self)); +end; + +procedure TRxCheckListBox.ReadCheckData(Reader: TReader); +var + I: Integer; +begin + Items.BeginUpdate; + try + Reader.ReadListBegin; + Clear; + while not Reader.EndOfList do begin + I := Items.Add(Reader.ReadString); + if FReserved >= InternalVersion then begin + State[I] := TCheckBoxState(Reader.ReadInteger); + EnabledItem[I] := Reader.ReadBoolean; + end + else begin { for backward compatibility only } + Checked[I] := Reader.ReadBoolean; + EnabledItem[I] := Reader.ReadBoolean; + if FReserved > 0 then + State[I] := TCheckBoxState(Reader.ReadInteger); + end; + end; + Reader.ReadListEnd; + UpdateCheckStates; + finally + Items.EndUpdate; + end; +end; + +procedure TRxCheckListBox.WriteCheckData(Writer: TWriter); +var + I: Integer; +begin + with Writer do begin + WriteListBegin; + for I := 0 to Items.Count - 1 do begin + WriteString(Items[I]); + WriteInteger(Integer(Self.State[I])); + WriteBoolean(EnabledItem[I]); + end; + WriteListEnd; + end; +end; + +procedure TRxCheckListBox.ReadVersion(Reader: TReader); +begin + FReserved := Reader.ReadInteger; +end; + +procedure TRxCheckListBox.WriteVersion(Writer: TWriter); +begin + Writer.WriteInteger(InternalVersion); +end; + +procedure TRxCheckListBox.DefineProperties(Filer: TFiler); + +{$IFDEF WIN32} + function DoWrite: Boolean; + var + I: Integer; + Ancestor: TRxCheckListBox; + begin + Result := False; + Ancestor := TRxCheckListBox(Filer.Ancestor); + if (Ancestor <> nil) and (Ancestor.Items.Count = Items.Count) and + (Ancestor.Items.Count > 0) then + for I := 1 to Items.Count - 1 do begin + Result := (CompareText(Items[I], Ancestor.Items[I]) <> 0) or + (State[I] <> Ancestor.State[I]) or + (EnabledItem[I] <> Ancestor.EnabledItem[I]); + if Result then Break; + end + else Result := Items.Count > 0; + end; +{$ENDIF} + +begin + inherited DefineProperties(Filer); + Filer.DefineProperty('InternalVersion', ReadVersion, WriteVersion, + {$IFDEF WIN32} Filer.Ancestor = nil {$ELSE} True {$ENDIF}); + Filer.DefineProperty('Strings', ReadCheckData, WriteCheckData, + {$IFDEF WIN32} DoWrite {$ELSE} Items.Count > 0 {$ENDIF}); +end; + +procedure TRxCheckListBox.CreateWnd; +begin + inherited CreateWnd; + if FSaveStates <> nil then begin + FSaveStates.Free; + FSaveStates := nil; + end; + ResetItemHeight; +end; + +procedure TRxCheckListBox.DestroyWnd; +begin + inherited DestroyWnd; +end; + +procedure TRxCheckListBox.WMDestroy(var Msg: TWMDestroy); +var + I: Integer; +begin + if Items.Count > 0 then begin + if FSaveStates <> nil then FSaveStates.Clear + else FSaveStates := TList.Create; + for I := 0 to Items.Count - 1 do begin + FSaveStates.Add(TObject(MakeLong(Ord(EnabledItem[I]), Word(State[I])))); + FindCheckObject(I).Free; + end; + end; + inherited; +end; + +procedure TRxCheckListBox.CreateParams(var Params: TCreateParams); +begin + inherited CreateParams(Params); + with Params do + if Style and (LBS_OWNERDRAWFIXED or LBS_OWNERDRAWVARIABLE) = 0 then + Style := Style or LBS_OWNERDRAWFIXED; +end; + +procedure TRxCheckListBox.SetItems(Value: TStrings); +var + I: Integer; +begin + Items.BeginUpdate; + try + inherited SetItems(Value); + if (Value <> nil) and (Value is TRxListBoxStrings) and + (TRxListBoxStrings(Value).ListBox <> nil) and + (TRxListBoxStrings(Value).ListBox is TRxCheckListBox) then + begin + for I := 0 to Items.Count - 1 do + if I < Value.Count then begin + Self.State[I] := TRxCheckListBox(TRxListBoxStrings(Value).ListBox).State[I]; + EnabledItem[I] := TRxCheckListBox(TRxListBoxStrings(Value).ListBox).EnabledItem[I]; + end; + end; + finally + Items.EndUpdate; + end; +end; + +function TRxCheckListBox.GetItemWidth(Index: Integer): Integer; +begin + Result := inherited GetItemWidth(Index) + GetCheckWidth; +end; + +function TRxCheckListBox.GetCheckWidth: Integer; +begin + Result := FCheckWidth + 2; +end; + +function TRxCheckListBox.GetAllowGrayed: Boolean; +begin + Result := FAllowGrayed and (FCheckKind in [ckCheckBoxes, ckCheckMarks]); +end; + +procedure TRxCheckListBox.CMFontChanged(var Message: TMessage); +begin + inherited; + ResetItemHeight; +end; + +function TRxCheckListBox.GetItemHeight: Integer; +var + R: TRect; +begin + Result := FItemHeight; + if HandleAllocated and ((FStyle = lbStandard) or + ((FStyle = lbOwnerDrawFixed) and not Assigned(FOnDrawItem))) then + begin + Perform(LB_GETITEMRECT, 0, Longint(@R)); + Result := R.Bottom - R.Top; + end; +end; + +procedure TRxCheckListBox.ResetItemHeight; +var + H: Integer; +begin + if (Style = lbStandard) or ((Style = lbOwnerDrawFixed) and + not Assigned(FOnDrawItem)) then + begin + Canvas.Font := Font; + H := Max(Canvas.TextHeight('Wg'), FCheckHeight); + if Style = lbOwnerDrawFixed then H := Max(H, FItemHeight); + Perform(LB_SETITEMHEIGHT, 0, H); + if (H * Items.Count) <= ClientHeight then + SetScrollRange(Handle, SB_VERT, 0, 0, True); + end; +end; + +procedure TRxCheckListBox.DrawItem(Index: Integer; Rect: TRect; + State: TOwnerDrawState); +var + R: TRect; + SaveEvent: TDrawItemEvent; +begin + if Index < Items.Count then begin + R := Rect; +{$IFDEF RX_D4} + if not UseRightToLeftAlignment then begin + R.Right := Rect.Left; + R.Left := R.Right - GetCheckWidth; + end + else + begin + R.Left := Rect.Right; + R.Right := R.Left + GetCheckWidth; + end; +{$ELSE} + R.Right := Rect.Left; + R.Left := R.Right - GetCheckWidth; +{$ENDIF} + DrawCheck(R, GetState(Index), EnabledItem[Index]); + if not EnabledItem[Index] then + if odSelected in State then Canvas.Font.Color := clInactiveCaptionText + else Canvas.Font.Color := clGrayText; + end; + if (Style = lbStandard) and Assigned(FOnDrawItem) then begin + SaveEvent := OnDrawItem; + OnDrawItem := nil; + try + inherited DrawItem(Index, Rect, State); + finally + OnDrawItem := SaveEvent; + end; + end + else inherited DrawItem(Index, Rect, State); +end; + +procedure TRxCheckListBox.CNDrawItem(var Message: TWMDrawItem); +begin + with Message.DrawItemStruct^ do +{$IFDEF RX_D4} + if not UseRightToLeftAlignment then + rcItem.Left := rcItem.Left + GetCheckWidth + else + rcItem.Right := rcItem.Right - GetCheckWidth; +{$ELSE} + rcItem.Left := rcItem.Left + GetCheckWidth; +{$ENDIF} + inherited; +end; + +procedure TRxCheckListBox.DrawCheck(R: TRect; AState: TCheckBoxState; + Enabled: Boolean); +const + CheckImages: array[TCheckBoxState, TCheckKind, Boolean] of Integer = + (((3, 0), (9, 6), (15, 12)), { unchecked } + ((4, 1), (10, 7), (16, 13)), { checked } + ((5, 2), (11, 8), (17, 14))); { grayed } +var + DrawRect: TRect; + SaveColor: TColor; +begin + DrawRect.Left := R.Left + (R.Right - R.Left - FCheckWidth) div 2; + DrawRect.Top := R.Top + (R.Bottom - R.Top - FCheckHeight) div 2; + DrawRect.Right := DrawRect.Left + FCheckWidth; + DrawRect.Bottom := DrawRect.Top + FCheckHeight; + SaveColor := Canvas.Brush.Color; + AssignBitmapCell(CheckBitmap, FDrawBitmap, 6, 3, + CheckImages[AState, FCheckKind, Enabled]); + Canvas.Brush.Color := Self.Color; + try + Canvas.BrushCopy(DrawRect, FDrawBitmap, Bounds(0, 0, FCheckWidth, + FCheckHeight), CheckBitmap.TransparentColor and not PaletteMask); + finally + Canvas.Brush.Color := SaveColor; + end; +end; + +procedure TRxCheckListBox.ApplyState(AState: TCheckBoxState; + EnabledOnly: Boolean); +var + I: Integer; +begin + if FCheckKind in [ckCheckBoxes, ckCheckMarks] then + for I := 0 to Items.Count - 1 do + if not EnabledOnly or EnabledItem[I] then begin + State[I] := AState; + end; +end; + +function TRxCheckListBox.GetCheckedIndex: Integer; +var + I: Integer; +begin + Result := -1; + if FCheckKind = ckRadioButtons then + for I := 0 to Items.Count - 1 do + if State[I] = cbChecked then begin + Result := I; + Exit; + end; +end; + +procedure TRxCheckListBox.SetCheckedIndex(Value: Integer); +begin + if (FCheckKind = ckRadioButtons) and (Items.Count > 0) then + SetState(Max(Value, 0), cbChecked); +end; + +procedure TRxCheckListBox.UpdateCheckStates; +begin + if (FCheckKind = ckRadioButtons) and (Items.Count > 0) then begin + FInUpdateStates := True; + try + SetState(Max(GetCheckedIndex, 0), cbChecked); + finally + FInUpdateStates := False; + end; + end; +end; + +procedure TRxCheckListBox.SetCheckKind(Value: TCheckKind); +begin + if FCheckKind <> Value then begin + FCheckKind := Value; + UpdateCheckStates; + Invalidate; + end; +end; + +procedure TRxCheckListBox.SetChecked(Index: Integer; AChecked: Boolean); +const + CheckStates: array[Boolean] of TCheckBoxState = (cbUnchecked, cbChecked); +begin + SetState(Index, CheckStates[AChecked]); +end; + +procedure TRxCheckListBox.SetState(Index: Integer; AState: TCheckBoxState); +var + I: Integer; +begin + if (AState <> GetState(Index)) or FInUpdateStates then begin + if (FCheckKind = ckRadioButtons) and (AState = cbUnchecked) and + (GetCheckedIndex = Index) then Exit; + TCheckListBoxItem(GetCheckObject(Index)).State := AState; + if (FCheckKind = ckRadioButtons) and (AState = cbChecked) then + for I := Items.Count - 1 downto 0 do begin + if (I <> Index) and (GetState(I) = cbChecked) then begin + TCheckListBoxItem(GetCheckObject(I)).State := cbUnchecked; + InvalidateCheck(I); + end; + end; + InvalidateCheck(Index); + if not (csReading in ComponentState) then ChangeItemState(Index); + end; +end; + +procedure TRxCheckListBox.SetItemEnabled(Index: Integer; Value: Boolean); +begin + if Value <> GetItemEnabled(Index) then begin + TCheckListBoxItem(GetCheckObject(Index)).Enabled := Value; + InvalidateItem(Index); + end; +end; + +procedure TRxCheckListBox.InvalidateCheck(Index: Integer); +var + R: TRect; +begin + R := ItemRect(Index); +{$IFDEF RX_D4} + if not UseRightToLeftAlignment then R.Right := R.Left + GetCheckWidth + else R.Left := R.Right - GetCheckWidth; +{$ELSE} + R.Right := R.Left + GetCheckWidth; +{$ENDIF} + InvalidateRect(Handle, @R, not (csOpaque in ControlStyle)); + UpdateWindow(Handle); +end; + +procedure TRxCheckListBox.InvalidateItem(Index: Integer); +var + R: TRect; +begin + R := ItemRect(Index); + InvalidateRect(Handle, @R, not (csOpaque in ControlStyle)); + UpdateWindow(Handle); +end; + +function TRxCheckListBox.GetChecked(Index: Integer): Boolean; +begin + if IsCheckObject(Index) then + Result := TCheckListBoxItem(GetCheckObject(Index)).GetChecked + else Result := False; +end; + +function TRxCheckListBox.GetState(Index: Integer): TCheckBoxState; +begin + if IsCheckObject(Index) then + Result := TCheckListBoxItem(GetCheckObject(Index)).State + else Result := clbDefaultState; + if (FCheckKind = ckRadioButtons) and (Result <> cbChecked) then + Result := cbUnchecked; +end; + +function TRxCheckListBox.GetItemEnabled(Index: Integer): Boolean; +begin + if IsCheckObject(Index) then + Result := TCheckListBoxItem(GetCheckObject(Index)).Enabled + else Result := clbDefaultEnabled; +end; + +procedure TRxCheckListBox.KeyPress(var Key: Char); +begin + inherited KeyPress(Key); + case Key of + ' ': + begin + ToggleClickCheck(ItemIndex); + Key := #0; + end; + '+': + begin + ApplyState(cbChecked, True); + ClickCheck; + end; + '-': + begin + ApplyState(cbUnchecked, True); + ClickCheck; + end; + end; +end; + +procedure TRxCheckListBox.MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); +var + Index: Integer; +begin + inherited MouseDown(Button, Shift, X, Y); + if Button = mbLeft then begin + Index := ItemAtPos(Point(X,Y), True); + if (Index <> -1) then begin +{$IFDEF RX_D4} + if not UseRightToLeftAlignment then begin + if X - ItemRect(Index).Left < GetCheckWidth then + ToggleClickCheck(Index); + end + else begin + Dec(X, ItemRect(Index).Right - GetCheckWidth); + if (X > 0) and (X < GetCheckWidth) then + ToggleClickCheck(Index); + end; +{$ELSE} + if X - ItemRect(Index).Left < GetCheckWidth then + ToggleClickCheck(Index); +{$ENDIF} + end; + end; +end; + +procedure TRxCheckListBox.ToggleClickCheck(Index: Integer); +var + State: TCheckBoxState; +begin + if (Index >= 0) and (Index < Items.Count) and EnabledItem[Index] then begin + State := Self.State[Index]; + case State of + cbUnchecked: + if AllowGrayed then State := cbGrayed else State := cbChecked; + cbChecked: State := cbUnchecked; + cbGrayed: State := cbChecked; + end; + Self.State[Index] := State; + ClickCheck; + end; +end; + +procedure TRxCheckListBox.ChangeItemState(Index: Integer); +begin + if Assigned(FOnStateChange) then FOnStateChange(Self, Index); +end; + +procedure TRxCheckListBox.ClickCheck; +begin + if Assigned(FOnClickCheck) then FOnClickCheck(Self); +end; + +function TRxCheckListBox.GetItemData(Index: Integer): LongInt; +var + Item: TCheckListBoxItem; +begin + Result := 0; + if IsCheckObject(Index) then begin + Item := TCheckListBoxItem(GetCheckObject(Index)); + if Item <> nil then Result := Item.FData; + end; +end; + +function TRxCheckListBox.GetCheckObject(Index: Integer): TObject; +begin + Result := FindCheckObject(Index); + if Result = nil then Result := CreateCheckObject(Index); +end; + +function TRxCheckListBox.FindCheckObject(Index: Integer): TObject; +var + ItemData: Longint; +begin + Result := nil; + ItemData := inherited GetItemData(Index); + if ItemData = LB_ERR then ListIndexError(Index) + else begin + Result := TCheckListBoxItem(ItemData); + if not (Result is TCheckListBoxItem) then Result := nil; + end; +end; + +function TRxCheckListBox.CreateCheckObject(Index: Integer): TObject; +begin + Result := TCheckListBoxItem.Create; + inherited SetItemData(Index, LongInt(Result)); +end; + +function TRxCheckListBox.IsCheckObject(Index: Integer): Boolean; +begin + Result := FindCheckObject(Index) <> nil; +end; + +procedure TRxCheckListBox.SetItemData(Index: Integer; AData: LongInt); +var + Item: TCheckListBoxItem; + L: Longint; +begin + Item := TCheckListBoxItem(GetCheckObject(Index)); + Item.FData := AData; + if (FSaveStates <> nil) and (FSaveStates.Count > 0) then begin + L := Longint(Pointer(FSaveStates[0])); + Item.FState := TCheckBoxState(LongRec(L).Hi); + Item.FEnabled := LongRec(L).Lo <> 0; + FSaveStates.Delete(0); + end; +end; + +procedure TRxCheckListBox.ResetContent; +var + I: Integer; +begin + for I := Items.Count - 1 downto 0 do begin + if IsCheckObject(I) then GetCheckObject(I).Free; + inherited SetItemData(I, 0); + end; + inherited ResetContent; +end; + +procedure TRxCheckListBox.DeleteString(Index: Integer); +begin + if IsCheckObject(Index) then GetCheckObject(Index).Free; + inherited SetItemData(Index, 0); + inherited DeleteString(Index); +end; +*) +{ TRxCustomLabel } + +function DrawShadowText(DC: HDC; Str: PChar; Count: Integer; var Rect: TRect; + Format: Word; ShadowSize: Byte; ShadowColor: TColorRef; + ShadowPos: TShadowPosition): Integer; +var + RText, RShadow: TRect; + Color: TColorRef; +begin + RText := Rect; + RShadow := Rect; + Color := SetTextColor(DC, ShadowColor); + case ShadowPos of + spLeftTop: OffsetRect(RShadow, -ShadowSize, -ShadowSize); + spRightBottom: OffsetRect(RShadow, ShadowSize, ShadowSize); + spLeftBottom: + begin + {OffsetRect(RText, ShadowSize, 0);} + OffsetRect(RShadow, -ShadowSize, ShadowSize); + end; + spRightTop: + begin + {OffsetRect(RText, 0, ShadowSize);} + OffsetRect(RShadow, ShadowSize, -ShadowSize); + end; + end; { case } + Result := DrawText(DC, Str, Count, RShadow, Format); + if Result > 0 then Inc(Result, ShadowSize); + SetTextColor(DC, Color); + DrawText(DC, Str, Count, RText, Format); + UnionRect(Rect, RText, RShadow); +end; + +{ TRxRadioGroup } + +function TRxRadioGroup.GetItemEnabled(Index: integer): boolean; +var + R:TRadioButton; +begin + if (Index < -1) or (Index >= Items.Count) then + RaiseIndexOutOfBounds(Self, Items, Index); + R:=FindComponent('RadioButton'+IntToStr(Index)) as TRadioButton; + if Assigned(R) then + Result:=R.Enabled + else + Result:=False; +end; + +procedure TRxRadioGroup.SetItemEnabled(Index: integer; AValue: boolean); +var + R:TRadioButton; +begin + if (Index < -1) or (Index >= Items.Count) then + RaiseIndexOutOfBounds(Self, Items, Index); + R:=FindComponent('RadioButton'+IntToStr(Index)) as TRadioButton; + if Assigned(R) then + R.Enabled:=AValue; +end; + +constructor TRxCustomLabel.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + ControlStyle := ControlStyle + [csOpaque]; +{.$IFDEF WIN32} + ControlStyle := ControlStyle + [csReplicatable]; +{.$ENDIF} + Width := 65; + Height := 17; + FAutoSize := True; + FShowAccelChar := True; + FShadowColor := clBtnHighlight; + FShadowSize := 1; + FShadowPos := spLeftTop; +end; + +function TRxCustomLabel.GetLabelCaption: string; +begin + Result := Caption; +end; + +function TRxCustomLabel.GetDefaultFontColor: TColor; +begin + Result := Font.Color; +end; + +procedure TRxCustomLabel.DoDrawText(var Rect: TRect; Flags: Word); +var + AText: string; + PosShadow: TShadowPosition; + SizeShadow: Byte; + ColorShadow: TColor; +begin + AText := GetLabelCaption; + if (Flags and DT_CALCRECT <> 0) and ((AText = '') or FShowAccelChar and + (AText[1] = '&') and (AText[2] = #0)) then AText := AText + ' '; + if not FShowAccelChar then Flags := Flags or DT_NOPREFIX; +{$IFDEF USED_BiDi} + Flags := DrawTextBiDiModeFlags(Flags); +{$ENDIF} + Canvas.Font := Font; + Canvas.Font.Color := GetDefaultFontColor; + PosShadow := FShadowPos; + SizeShadow := FShadowSize; + ColorShadow := FShadowColor; + if not Enabled then begin + if (FShadowSize = 0) and NewStyleControls then begin + PosShadow := spRightBottom; + SizeShadow := 1; + end; + Canvas.Font.Color := clGrayText; + ColorShadow := clBtnHighlight; + end; + DrawShadowText(Canvas.Handle, PChar(AText), Length(AText), Rect, Flags, + SizeShadow, ColorToRGB(ColorShadow), PosShadow); +end; + +procedure TRxCustomLabel.Paint; +var + Rect: TRect; + DrawStyle: Integer; +begin + if not Enabled and not (csDesigning in ComponentState) then + FDragging := False; + + with Canvas do + begin + if not Transparent then + begin + Brush.Color := Self.Color; + Brush.Style := bsSolid; + FillRect(ClientRect); + end; + Brush.Style := bsClear; + Rect := ClientRect; + Inc(Rect.Left, FLeftMargin); + Dec(Rect.Right, FRightMargin); + InflateRect(Rect, -1, 0); + DrawStyle := {DT_EXPANDTABS or }WordWraps[FWordWrap] or Alignments[FAlignment]; + { Calculate vertical layout } + if FLayout <> tlTop then + begin + DoDrawText(Rect, DrawStyle or DT_CALCRECT); + Rect.Left := ClientRect.Left + FLeftMargin; + Rect.Right := ClientRect.Right - FRightMargin; + if FLayout = tlBottom then OffsetRect(Rect, 0, Height - Rect.Bottom) + else OffsetRect(Rect, 0, (Height - Rect.Bottom) div 2); + end; + DoDrawText(Rect, DrawStyle); + if FShowFocus and Assigned(FFocusControl) and FFocused and + not (csDesigning in ComponentState) then + begin + InflateRect(Rect, 1, 0); + Brush.Color := Self.Color; +// DrawFocusRect(Rect); + FrameRect(Rect); + end; + end; +end; + +procedure TRxCustomLabel.AdjustBounds; +var + DC: HDC; + X: Integer; + Rect: TRect; + AAlignment: TAlignment; +begin + if AutoSize then + begin + Rect := ClientRect; + Inc(Rect.Left, FLeftMargin); + Dec(Rect.Right, FRightMargin); + InflateRect(Rect, -1, 0); + DC := GetDC(0); + Canvas.Handle := DC; + DoDrawText(Rect, {DT_EXPANDTABS or }DT_CALCRECT or WordWraps[FWordWrap]); + Dec(Rect.Left, FLeftMargin); + Inc(Rect.Right, FRightMargin); + Canvas.Handle := 0; + ReleaseDC(0, DC); + InflateRect(Rect, 1, 0); + X := Left; + AAlignment := FAlignment; +{$IFDEF USED_BiDi} + if UseRightToLeftAlignment then ChangeBiDiModeAlignment(AAlignment); +{$ENDIF} + if AAlignment = taRightJustify then Inc(X, Width - Rect.Right); + SetBounds(X, Top, Rect.Right, Rect.Bottom); + end; +end; + +procedure TRxCustomLabel.SetAlignment(Value: TAlignment); +begin + if FAlignment <> Value then begin + FAlignment := Value; + Invalidate; + end; +end; + +procedure TRxCustomLabel.SetAutoSize(Value: Boolean); +begin + if AutoSize <> Value then begin + FAutoSize := Value; + AdjustBounds; + end; +end; + +procedure TRxCustomLabel.SetLayout(Value: TTextLayout); +begin + if FLayout <> Value then begin + FLayout := Value; + Invalidate; + end; +end; + +procedure TRxCustomLabel.SetLeftMargin(Value: Integer); +begin + if FLeftMargin <> Value then + begin + FLeftMargin := Max(Value, 0); + AdjustBounds; + Invalidate; + end; +end; + +procedure TRxCustomLabel.SetRightMargin(Value: Integer); +begin + if FRightMargin <> Value then begin + FRightMargin := Max(Value, 0); + AdjustBounds; + Invalidate; + end; +end; + +procedure TRxCustomLabel.SetShadowColor(Value: TColor); +begin + if Value <> FShadowColor then begin + FShadowColor := Value; + Invalidate; + end; +end; + +procedure TRxCustomLabel.SetShadowSize(Value: Byte); +begin + if Value <> FShadowSize then begin + FShadowSize := Value; + AdjustBounds; + Invalidate; + end; +end; + +procedure TRxCustomLabel.SetShadowPos(Value: TShadowPosition); +begin + if Value <> FShadowPos then begin + FShadowPos := Value; + Invalidate; + end; +end; + +function TRxCustomLabel.GetTransparent: Boolean; +begin + Result := not (csOpaque in ControlStyle); +end; + +procedure TRxCustomLabel.SetFocusControl(Value: TWinControl); +begin + FFocusControl := Value; +{.$IFDEF WIN32} + if Value <> nil then Value.FreeNotification(Self); +{.$ENDIF} + if FShowFocus then Invalidate; +end; + +procedure TRxCustomLabel.SetShowAccelChar(Value: Boolean); +begin + if FShowAccelChar <> Value then begin + FShowAccelChar := Value; + Invalidate; + end; +end; + +procedure TRxCustomLabel.SetTransparent(Value: Boolean); +begin + if Transparent <> Value then begin + if Value then ControlStyle := ControlStyle - [csOpaque] + else ControlStyle := ControlStyle + [csOpaque]; + Invalidate; + end; +end; + +procedure TRxCustomLabel.SetShowFocus(Value: Boolean); +begin + if FShowFocus <> Value then begin + FShowFocus := Value; + Invalidate; + end; +end; + +procedure TRxCustomLabel.SetWordWrap(Value: Boolean); +begin + if FWordWrap <> Value then begin + FWordWrap := Value; + AdjustBounds; + end; +end; + +procedure TRxCustomLabel.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation = opRemove) and (AComponent = FFocusControl) then + FocusControl := nil; +end; + +procedure TRxCustomLabel.MouseEnter; +begin + if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); +end; + +procedure TRxCustomLabel.MouseLeave; +begin + if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); +end; + +procedure TRxCustomLabel.UpdateTracking; +var + P: TPoint; + OldValue: Boolean; +begin + OldValue := FMouseInControl; + GetCursorPos(P); + FMouseInControl := Enabled and (FindDragTarget(P, True) = Self) and + IsForegroundTask; + if (FMouseInControl <> OldValue) then + if FMouseInControl then MouseEnter else MouseLeave; +end; + +procedure TRxCustomLabel.CMFocusChanged(var Message: TLMessage); +var + Active: Boolean; +begin + Active := Assigned(FFocusControl) {and (Message.Sender = FFocusControl)}; + if FFocused <> Active then + begin + FFocused := Active; + if FShowFocus then Invalidate; + end; + inherited; +end; + +procedure TRxCustomLabel.CMTextChanged(var Message: TLMessage); +begin + Invalidate; + AdjustBounds; +end; + +procedure TRxCustomLabel.CMFontChanged(var Message: TLMessage); +begin + inherited; + AdjustBounds; +end; + +procedure TRxCustomLabel.CMDialogChar(var Message: TCMDialogChar); +begin + if (FFocusControl <> nil) and Enabled and ShowAccelChar and + IsAccel(Message.CharCode, GetLabelCaption) then + with FFocusControl do + if CanFocus then begin + SetFocus; + Message.Result := 1; + end; +end; + +{procedure TRxCustomLabel.MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); +begin + inherited MouseDown(Button, Shift, X, Y); + if (Button = mbLeft) and Enabled then + begin + FDragging := True; + end; +end; + +procedure TRxCustomLabel.MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); +begin + inherited MouseUp(Button, Shift, X, Y); + if FDragging and (Button = mbLeft) then FDragging := False; + UpdateTracking; +end; +} +procedure TRxCustomLabel.MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); +begin + inherited MouseDown(Button, Shift, X,Y); + UpdateTracking; +end; + +procedure TRxCustomLabel.MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); +begin + inherited MouseUp(Button, Shift, X,Y); + UpdateTracking; +end; +(* +procedure TRxCustomLabel.WMRButtonDown(var Message: TWMRButtonDown); +begin + inherited; + UpdateTracking; +end; + +procedure TRxCustomLabel.WMRButtonUp(var Message: TWMRButtonUp); +begin + inherited; + UpdateTracking; +end; +*) +procedure TRxCustomLabel.CMEnabledChanged(var Message: TLMessage); +begin + inherited; + UpdateTracking; +end; + +procedure TRxCustomLabel.CMVisibleChanged(var Message: TLMessage); +begin + inherited; + if Visible then UpdateTracking; +end; + +procedure TRxCustomLabel.CMMouseEnter(var Message: TLMessage); +begin + inherited; + if not FMouseInControl and Enabled and IsForegroundTask then begin + FMouseInControl := True; + MouseEnter; + end; +end; + +procedure TRxCustomLabel.CMMouseLeave(var Message: TLMessage); +begin + inherited; + if FMouseInControl and Enabled and not FDragging then begin + FMouseInControl := False; + MouseLeave; + end; +end; + +{ TSecretPanel } + +constructor TSecretPanel.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FScrollCnt := 0; + FAlignment := taCenter; + FActive := False; + FTxtDivider := 1; + FGlyphLayout := glGlyphLeft; + ControlStyle := ControlStyle - [csSetCaption]; + BevelOuter := bvLowered; + FTextStyle := bvNone; + FLines := TStringList.Create; + TStringList(FLines).OnChange := @LinesChanged; + FGlyph := TBitmap.Create; + FGlyph.OnChange := @GlyphChanged; + FHiddenList := TList.Create; + FTimer := TTimer.Create(Self); + with FTimer do + begin + Enabled := False; + OnTimer := @TimerExpired; + Interval := 30; +{$IFDEF RX_D3} +// SyncEvent := False; + FAsyncDrawing := True; +{$ENDIF} + end; +end; + +destructor TSecretPanel.Destroy; +begin + SetActive(False); + FGlyph.OnChange := nil; + FGlyph.Free; + TStringList(FLines).OnChange := nil; + FLines.Free; + FHiddenList.Free; + inherited Destroy; +end; + +procedure TSecretPanel.GlyphChanged(Sender: TObject); +begin + if Active then begin + UpdateMemoryImage; + Invalidate; + end; +end; + +procedure TSecretPanel.LinesChanged(Sender: TObject); +begin + if Active then begin + FScrollCnt := 0; + UpdateMemoryImage; + Invalidate; + end; +end; + +procedure TSecretPanel.CMFontChanged(var Message: TLMessage); +begin + inherited; + if Active then UpdateMemoryImage; +end; + +procedure TSecretPanel.CMColorChanged(var Message: TLMessage); +begin + inherited; + if Active then UpdateMemoryImage; +end; + +//procedure TSecretPanel.WMSize(var Message: TLMessage); +procedure TSecretPanel.WMSize(var Message: TLMSize); +begin + inherited; + if Active then begin + UpdateMemoryImage; + Invalidate; + end; +end; + +{$IFDEF RX_D3} +procedure TSecretPanel.SetAsyncDrawing(Value: Boolean); +begin + if FAsyncDrawing <> Value then + begin +// FTimer.SyncEvent := not Value; + FAsyncDrawing := Value; + end; +end; +{$ENDIF RX_D3} + +procedure TSecretPanel.AlignControls(AControl: TControl; var Rect: TRect); +begin + inherited AlignControls(AControl, Rect); + if (AControl = nil) and Active then UpdateMemoryImage; +end; + +function TSecretPanel.GetInflateWidth: Integer; +begin + Result := BorderWidth; + if BevelOuter <> bvNone then Inc(Result, BevelWidth); + if BevelInner <> bvNone then Inc(Result, BevelWidth); +end; + +procedure TSecretPanel.RecalcDrawRect; +const + MinOffset = 3; +var + InflateWidth: Integer; + LastLine: Integer; +begin + FTxtRect := GetClientRect; + FPaintRect := FTxtRect; + InflateWidth := GetInflateWidth; + InflateRect(FPaintRect, -InflateWidth, -InflateWidth); + Inc(InflateWidth, MinOffset); + InflateRect(FTxtRect, -InflateWidth, -InflateWidth); + with FGlyphOrigin do begin + case FGlyphLayout of + glGlyphLeft: + begin + X := FTxtRect.Left; + Y := (FTxtRect.Bottom + FTxtRect.Top - Glyph.Height) div 2; + if Y < FTxtRect.Top then Y := FTxtRect.Top; + if Glyph.Width > 0 then begin + Inc(X, MinOffset); + FTxtRect.Left := X + Glyph.Width + InflateWidth; + end; + end; + glGlyphRight: + begin + Y := (FTxtRect.Bottom + FTxtRect.Top - Glyph.Height) div 2; + if Y < FTxtRect.Top then Y := FTxtRect.Top; + X := FTxtRect.Right - Glyph.Width; + if Glyph.Width > 0 then begin + Dec(X, MinOffset); + if X < FTxtRect.Left then X := FTxtRect.Left; + FTxtRect.Right := X - InflateWidth; + end; + end; + glGlyphTop: + begin + Y := FTxtRect.Top; + X := (FTxtRect.Right + FTxtRect.Left - Glyph.Width) div 2; + if X < FTxtRect.Left then X := FTxtRect.Left; + if Glyph.Height > 0 then begin + Inc(Y, MinOffset); + FTxtRect.Top := Y + Glyph.Height + (InflateWidth + MinOffset); + end; + end; + glGlyphBottom: + begin + X := (FTxtRect.Right + FTxtRect.Left - Glyph.Width) div 2; + if X < FTxtRect.Left then X := FTxtRect.Left; + Y := FTxtRect.Bottom - Glyph.Height; + if Glyph.Height > 0 then begin + Dec(Y, MinOffset); + if Y < FTxtRect.Top then Y := FTxtRect.Top; + FTxtRect.Bottom := Y - (InflateWidth + MinOffset); + end; + end; + end; + end; + if FDirection = sdHorizontal then begin + LastLine := FLines.Count - 1; + while (LastLine >= 0) and (Trim(FLines[LastLine]) = '') do + Dec(LastLine); + InflateWidth := HeightOf(FTxtRect) - + (LastLine + 1 - FFirstLine) * FTxtDivider; + if InflateWidth > 0 then + InflateRect(FTxtRect, 0, - InflateWidth div 2); + end; + with FTxtRect do + if (Left >= Right) or (Top >= Bottom) then FTxtRect := Rect(0, 0, 0, 0); +end; + +procedure TSecretPanel.PaintGlyph; +begin + if not FGlyph.Empty then + begin + RecalcDrawRect; +//alexs +{ DrawBitmapTransparent(Canvas, FGlyphOrigin.X, FGlyphOrigin.Y, + FGlyph, FGlyph.TransparentColor and not PaletteMask);} + end; +end; + +procedure TSecretPanel.PaintText; +var + STmp: array[0..255] of Char; + R: TRect; + I: Integer; + Flags: Longint; +begin + if (FLines.Count = 0) or IsRectEmpty(FTxtRect) or not HandleAllocated then + Exit; +{$IFDEF RX_D3} + FMemoryImage.Canvas.Lock; + try +{$ENDIF} + with FMemoryImage.Canvas do begin + I := SaveDC(Handle); + try + with FTxtRect do + MoveWindowOrg(Handle, -Left, -Top); + Brush.Color := Self.Color; + PaintClient(FMemoryImage.Canvas, FPaintRect); + finally + RestoreDC(Handle, I); + SetBkMode(Handle, Transparent); + end; + end; + R := Bounds(0, 0, WidthOf(FTxtRect), HeightOf(FTxtRect)); + if FDirection = sdHorizontal then begin +{$IFDEF RX_D4} + if IsRightToLeft then begin + R.Right := R.Left + FScrollCnt; + R.Left := R.Right - (FMaxScroll - WidthOf(FTxtRect)); + end + else begin + R.Left := R.Right - FScrollCnt; + R.Right := R.Left + (FMaxScroll - WidthOf(FTxtRect)); + end; +{$ELSE} + R.Left := R.Right - FScrollCnt; + R.Right := R.Left + (FMaxScroll - WidthOf(FTxtRect)); +{$ENDIF} + end + else + begin { sdVertical } + R.Top := R.Bottom - FScrollCnt; + end; + R.Bottom := R.Top + FTxtDivider; + Flags := {DT_EXPANDTABS or }Alignments[FAlignment] or DT_SINGLELINE or + DT_NOCLIP or DT_NOPREFIX; +{$IFDEF USED_BiDi} + Flags := DrawTextBiDiModeFlags(Flags); +{$ENDIF} + for I := FFirstLine to FLines.Count do begin + if I = FLines.Count then StrCopy(STmp, ' ') + else StrPLCopy(STmp, FLines[I], SizeOf(STmp) - 1); + if R.Top >= HeightOf(FTxtRect) then Break + else if R.Bottom > 0 then begin + if FTextStyle <> bvNone then begin + FMemoryImage.Canvas.Font.Color := clBtnHighlight; + case FTextStyle of + bvLowered: + begin + OffsetRect(R, 1, 1); + DrawText(FMemoryImage.Canvas.Handle, STmp, -1, R, Flags); + OffsetRect(R, -1, -1); + end; + bvRaised: + begin + OffsetRect(R, -1, -1); + DrawText(FMemoryImage.Canvas.Handle, STmp, -1, R, Flags); + OffsetRect(R, 1, 1); + end; + end; + FMemoryImage.Canvas.Font.Color := Self.Font.Color; + SetBkMode(FMemoryImage.Canvas.Handle, Transparent); + end; + DrawText(FMemoryImage.Canvas.Handle, STmp, -1, R, Flags); + end; + OffsetRect(R, 0, FTxtDivider); + end; +{$IFDEF RX_D3} + Canvas.Lock; + try +{$ENDIF} + BitBlt(Canvas.Handle, FTxtRect.Left, FTxtRect.Top, FMemoryImage.Width, + FMemoryImage.Height, FMemoryImage.Canvas.Handle, 0, 0, SRCCOPY); +// ValidateRect(Handle, @FTxtRect); +{$IFDEF RX_D3} + finally + Canvas.Unlock; + end; +{$ENDIF} +{$IFDEF RX_D3} + finally + FMemoryImage.Canvas.Unlock; + end; +{$ENDIF} +end; + +procedure TSecretPanel.PaintClient(ACanvas: TCanvas; Rect: TRect); +begin + if Assigned(FOnPaintClient) then FOnPaintClient(Self, ACanvas, Rect) + else ACanvas.FillRect(Rect); +end; + +procedure TSecretPanel.Paint; +var + Rect: TRect; + TopColor, BottomColor: TColor; + SaveIndex: Integer; + + procedure AdjustColors(Bevel: TPanelBevel); + begin + TopColor := clBtnHighlight; + if Bevel = bvLowered then TopColor := clBtnShadow; + BottomColor := clBtnShadow; + if Bevel = bvLowered then BottomColor := clBtnHighlight; + end; + +begin + Rect := GetClientRect; + if BevelOuter <> bvNone then + begin + AdjustColors(BevelOuter); +// Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth); + WidgetSet.Frame3d(Canvas.Handle, Rect, BevelWidth, BevelOuter); + end; +// Frame3D(Canvas, Rect, Color, Color, BorderWidth); + WidgetSet.Frame3d(Canvas.Handle, Rect, BorderWidth, BevelOuter); + if BevelInner <> bvNone then + begin + AdjustColors(BevelInner); +// Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth); + WidgetSet.Frame3d(Canvas.Handle, Rect, BorderWidth, BevelInner); + end; + SaveIndex := SaveDC(Canvas.Handle); + try + with Rect do + IntersectClipRect(Canvas.Handle, Left, Top, Right, Bottom); + Canvas.Brush.Color := Self.Color; + PaintClient(Canvas, Rect); + finally + RestoreDC(Canvas.Handle, SaveIndex); + end; + if Active then begin + PaintGlyph; + {PaintText;} + end; +end; + +procedure TSecretPanel.StartPlay; +begin + if Assigned(FOnStartPlay) then FOnStartPlay(Self); +end; + +procedure TSecretPanel.StopPlay; +begin + if Assigned(FOnStopPlay) then FOnStopPlay(Self); +end; + +procedure TSecretPanel.TimerExpired(Sender: TObject); +begin + if (FScrollCnt < FMaxScroll) then begin + Inc(FScrollCnt); + if Assigned(FMemoryImage) then PaintText; + end + else if Cycled then begin + FScrollCnt := 0; + if Assigned(FMemoryImage) then PaintText; + end + else + begin +{.$IFDEF RX_D3} +// FTimer.Synchronize(Stop); +{.$ELSE} + SetActive(False); +{.$ENDIF} + end; +end; + +procedure TSecretPanel.UpdateMemoryImage; +var + Metrics: TTextMetric; + I: Integer; +begin + if FMemoryImage = nil then FMemoryImage := TBitmap.Create; +{.$IFDEF RX_D3} + FMemoryImage.Canvas.Lock; + try +{.$ENDIF} + FFirstLine := 0; + while (FFirstLine < FLines.Count) and (Trim(FLines[FFirstLine]) = '') do + Inc(FFirstLine); + Canvas.Font := Self.Font; + GetTextMetrics(Canvas.Handle, Metrics); + FTxtDivider := Metrics.tmHeight + Metrics.tmExternalLeading; + if FTextStyle <> bvNone then Inc(FTxtDivider); + RecalcDrawRect; + if FDirection = sdHorizontal then begin + FMaxScroll := 0; + for I := FFirstLine to FLines.Count - 1 do + FMaxScroll := Max(FMaxScroll, Canvas.TextWidth(FLines[I])); + Inc(FMaxScroll, WidthOf(FTxtRect)); + end + else begin { sdVertical } + FMaxScroll := ((FLines.Count - FFirstLine) * FTxtDivider) + + HeightOf(FTxtRect); + end; + FMemoryImage.Width := WidthOf(FTxtRect); + FMemoryImage.Height := HeightOf(FTxtRect); + with FMemoryImage.Canvas do begin + Font := Self.Font; + Brush.Color := Self.Color; + SetBkMode(Handle, Transparent); + end; +{.$IFDEF RX_D3} + finally + FMemoryImage.Canvas.UnLock; + end; +{.$ENDIF} +end; + +function TSecretPanel.GetInterval: Cardinal; +begin + Result := FTimer.Interval; +end; + +procedure TSecretPanel.SetInterval(Value: Cardinal); +begin + FTimer.Interval := Value; +end; + +procedure TSecretPanel.Play; +begin + SetActive(True); +end; + +procedure TSecretPanel.Stop; +begin + SetActive(False); +end; + +procedure TSecretPanel.SetActive(Value: Boolean); +var + I: Integer; +begin + if Value <> FActive then + begin + FActive := Value; + if FActive then + begin + FScrollCnt := 0; + UpdateMemoryImage; + try + FTimer.Enabled := True; + StartPlay; + except + FActive := False; + FTimer.Enabled := False; + raise; + end; + end + else begin +{.$IFDEF RX_D3} + FMemoryImage.Canvas.Lock; + { ensure that canvas is locked before timer is disabled } +{.$ENDIF} + FTimer.Enabled := False; + FScrollCnt := 0; + FMemoryImage.Free; + FMemoryImage := nil; + StopPlay; + if (csDesigning in ComponentState) and + not (csDestroying in ComponentState) then + ValidParentForm(Self).Designer.Modified; + end; + if not (csDestroying in ComponentState) then + for I := 0 to Pred(ControlCount) do + begin + if FActive then + begin + if Controls[I].Visible then FHiddenList.Add(Controls[I]); + if not (csDesigning in ComponentState) then + Controls[I].Visible := False + end + else + if FHiddenList.IndexOf(Controls[I]) >= 0 then + begin + Controls[I].Visible := True; + Controls[I].Invalidate; + if (csDesigning in ComponentState) then Controls[I].Update; + end; + end; + if not FActive then FHiddenList.Clear; + Invalidate; + end; +end; + +procedure TSecretPanel.SetAlignment(Value: TAlignment); +begin + if FAlignment <> Value then + begin + FAlignment := Value; + if Active then Invalidate; + end; +end; + +procedure TSecretPanel.SetGlyph(Value: TBitmap); +begin + FGlyph.Assign(Value); +end; + +procedure TSecretPanel.SetDirection(Value: TScrollDirection); +begin + if FDirection <> Value then + begin + FDirection := Value; + if FActive then + begin + FScrollCnt := 0; + UpdateMemoryImage; + Invalidate; + end; + end; +end; + +procedure TSecretPanel.SetTextStyle(Value: TPanelBevel); +begin + if FTextStyle <> Value then + begin + FTextStyle := Value; + if FActive then + begin + UpdateMemoryImage; + Invalidate; + end; + end; +end; + +procedure TSecretPanel.SetGlyphLayout(Value: TGlyphLayout); +begin + if FGlyphLayout <> Value then + begin + FGlyphLayout := Value; + if FActive then + begin + UpdateMemoryImage; + Invalidate; + end; + end; +end; + +procedure TSecretPanel.SetLines(Value: TStrings); +begin + FLines.Assign(Value); +end; +(* +{ TGlyphList } + +type + TGlyphList = class(TImageList) + private + FUsed: TBits; + FCount: Integer; + function AllocateIndex: Integer; + public + constructor CreateSize(AWidth, AHeight: Integer); + destructor Destroy; override; + function Add(Image, Mask: TBitmap): Integer; + function AddMasked(Image: TBitmap; MaskColor: TColor): Integer; +{$IFDEF WIN32} +{$IFNDEF RX_D3} { Delphi 2.0 bug fix } + procedure ReplaceMasked(Index: Integer; NewImage: TBitmap; MaskColor: TColor); +{$ENDIF} +{$ENDIF} + procedure Delete(Index: Integer); + property Count: Integer read FCount; + end; + +{ TGlyphCache } + + TGlyphCache = class + private + FGlyphLists: TList; + public + constructor Create; + destructor Destroy; override; + function GetList(AWidth, AHeight: Integer): TGlyphList; + procedure ReturnList(List: TGlyphList); + function Empty: Boolean; + end; + +{ TGlyphList } + +constructor TGlyphList.CreateSize(AWidth, AHeight: Integer); +begin +{$IFDEF WIN32} + inherited CreateSize(AWidth, AHeight); +{$ELSE} + inherited Create(AWidth, AHeight); +{$ENDIF} + FUsed := TBits.Create; +end; + +destructor TGlyphList.Destroy; +begin + FUsed.Free; + inherited Destroy; +end; + +function TGlyphList.AllocateIndex: Integer; +begin + Result := FUsed.OpenBit; + if Result >= FUsed.Size then begin + Result := inherited Add(nil, nil); + FUsed.Size := Result + 1; + end; + FUsed[Result] := True; +end; + +{$IFDEF WIN32} +{$IFNDEF RX_D3} { Delphi 2.0 bug fix } +procedure TGlyphList.ReplaceMasked(Index: Integer; NewImage: TBitmap; MaskColor: TColor); +var + TempIndex: Integer; + Image, Mask: TBitmap; +begin + if HandleAllocated then begin + TempIndex := inherited AddMasked(NewImage, MaskColor); + if TempIndex <> -1 then + try + Image := TBitmap.Create; + Mask := TBitmap.Create; + try + with Image do begin + Height := Self.Height; + Width := Self.Width; + end; + with Mask do begin + Monochrome := True; { fix } + Height := Self.Height; + Width := Self.Width; + end; + ImageList_Draw(Handle, TempIndex, Image.Canvas.Handle, 0, 0, ILD_NORMAL); + ImageList_Draw(Handle, TempIndex, Mask.Canvas.Handle, 0, 0, ILD_MASK); + if not ImageList_Replace(Handle, Index, Image.Handle, Mask.Handle) then + raise EInvalidOperation.Create(LoadStr(SReplaceImage)); + finally + Image.Free; + Mask.Free; + end; + finally + inherited Delete(TempIndex); + end + else raise EInvalidOperation.Create(LoadStr(SReplaceImage)); + end; + Change; +end; +{$ENDIF} +{$ENDIF} + +function TGlyphList.Add(Image, Mask: TBitmap): Integer; +begin + Result := AllocateIndex; + Replace(Result, Image, Mask); + Inc(FCount); +end; + +function TGlyphList.AddMasked(Image: TBitmap; MaskColor: TColor): Integer; +begin + Result := AllocateIndex; + ReplaceMasked(Result, Image, MaskColor); + Inc(FCount); +end; + +procedure TGlyphList.Delete(Index: Integer); +begin + if FUsed[Index] then begin + Dec(FCount); + FUsed[Index] := False; + end; +end; + +{ TGlyphCache } + +constructor TGlyphCache.Create; +begin + inherited Create; + FGlyphLists := TList.Create; +end; + +destructor TGlyphCache.Destroy; +begin + FGlyphLists.Free; + inherited Destroy; +end; + +function TGlyphCache.GetList(AWidth, AHeight: Integer): TGlyphList; +var + I: Integer; +begin + for I := FGlyphLists.Count - 1 downto 0 do begin + Result := FGlyphLists[I]; + with Result do + if (AWidth = Width) and (AHeight = Height) then Exit; + end; + Result := TGlyphList.CreateSize(AWidth, AHeight); + FGlyphLists.Add(Result); +end; + +procedure TGlyphCache.ReturnList(List: TGlyphList); +begin + if List = nil then Exit; + if List.Count = 0 then begin + FGlyphLists.Remove(List); + List.Free; + end; +end; + +function TGlyphCache.Empty: Boolean; +begin + Result := FGlyphLists.Count = 0; +end; + +const + GlyphCache: TGlyphCache = nil; + +{ TRxButtonGlyph } + +constructor TRxButtonGlyph.Create; +var + I: TRxButtonState; +begin + inherited Create; + FOriginal := TBitmap.Create; + FOriginal.OnChange := GlyphChanged; + FTransparentColor := clFuchsia; + FAlignment := taCenter; + FNumGlyphs := 1; + for I := Low(I) to High(I) do FIndexs[I] := -1; + if GlyphCache = nil then GlyphCache := TGlyphCache.Create; +end; + +destructor TRxButtonGlyph.Destroy; +begin + FOriginal.Free; + Invalidate; + if Assigned(GlyphCache) and GlyphCache.Empty then begin + GlyphCache.Free; + GlyphCache := nil; + end; + inherited Destroy; +end; + +procedure TRxButtonGlyph.Invalidate; +var + I: TRxButtonState; +begin + for I := Low(I) to High(I) do begin + if Assigned(FGlyphList) then + if (FIndexs[I] <> -1) then TGlyphList(FGlyphList).Delete(FIndexs[I]); + FIndexs[I] := -1; + end; + GlyphCache.ReturnList(TGlyphList(FGlyphList)); + FGlyphList := nil; +end; + +procedure TRxButtonGlyph.GlyphChanged(Sender: TObject); +var + Glyphs: Integer; +begin + if Sender = FOriginal then begin + Invalidate; + if (FOriginal <> nil) and (FOriginal.Height > 0) then begin + FTransparentColor := FOriginal.TransparentColor and not PaletteMask; + if FOriginal.Width mod FOriginal.Height = 0 then begin + Glyphs := FOriginal.Width div FOriginal.Height; + if Glyphs > (Ord(High(TRxButtonState)) + 1) then Glyphs := 1; + SetNumGlyphs(Glyphs); + end; + end; + if Assigned(FOnChange) then FOnChange(Self); + end; +end; + +procedure TRxButtonGlyph.SetGlyph(Value: TBitmap); +begin + Invalidate; + FOriginal.Assign(Value); +end; + +procedure TRxButtonGlyph.SetNumGlyphs(Value: TRxNumGlyphs); +begin + if (Value <> FNumGlyphs) and (Value > 0) then begin + Invalidate; + FNumGlyphs := Value; + end; +end; + +function TRxButtonGlyph.MapColor(Color: TColor): TColor; +var + Index: Byte; +begin + if (Color = FTransparentColor) or (ColorToRGB(Color) = + ColorToRGB(clBtnFace)) then Result := Color + else begin + Color := ColorToRGB(Color); + Index := Byte(Longint(Word(GetRValue(Color)) * 77 + + Word(GetGValue(Color)) * 150 + Word(GetBValue(Color)) * 29) shr 8); + Result := RGB(Index, Index, Index); + end; +end; + +{$IFDEF WIN32} +function TRxButtonGlyph.CreateImageGlyph(State: TRxButtonState; + Images: TImageList; Index: Integer): Integer; +var + TmpImage, Mask: TBitmap; + IWidth, IHeight, X, Y: Integer; +begin + if (State = rbsDown) then State := rbsUp; + Result := FIndexs[State]; + if (Result <> -1) or (Images.Width = 0) or (Images.Height = 0) or + (Images.Count = 0) then Exit; + IWidth := Images.Width; + IHeight := Images.Height; + if FGlyphList = nil then begin + if GlyphCache = nil then GlyphCache := TGlyphCache.Create; + FGlyphList := GlyphCache.GetList(IWidth, IHeight); + end; + TmpImage := TBitmap.Create; + try + TmpImage.Width := IWidth; + TmpImage.Height := IHeight; + case State of + rbsUp, rbsDown, rbsExclusive: + begin + with TmpImage.Canvas do begin + FillRect(Rect(0, 0, IWidth, IHeight)); + ImageList_Draw(Images.Handle, Index, Handle, 0, 0, ILD_NORMAL); + end; + Mask := TBitmap.Create; + try + with Mask do begin + Monochrome := True; + Height := IHeight; + Width := IWidth; + end; + with Mask.Canvas do begin + FillRect(Rect(0, 0, IWidth, IHeight)); + ImageList_Draw(Images.Handle, Index, Handle, 0, 0, ILD_MASK); + end; + FIndexs[State] := TGlyphList(FGlyphList).Add(TmpImage, Mask); + finally + Mask.Free; + end; + end; + rbsDisabled: + begin + TmpImage.Canvas.Brush.Color := clBtnFace; + TmpImage.Canvas.FillRect(Rect(0, 0, IWidth, IHeight)); + ImageListDrawDisabled(Images, TmpImage.Canvas, 0, 0, Index, + clBtnHighlight, clBtnShadow, True); + FIndexs[State] := TGlyphList(FGlyphList).AddMasked(TmpImage, + ColorToRGB(clBtnFace)); + end; + rbsInactive: + begin + TmpImage.Canvas.Brush.Color := clBtnFace; + TmpImage.Canvas.FillRect(Rect(0, 0, IWidth, IHeight)); + ImageList_Draw(Images.Handle, Index, TmpImage.Canvas.Handle, 0, 0, + ILD_NORMAL); + with TmpImage do begin + for X := 0 to Width - 1 do + for Y := 0 to Height - 1 do + Canvas.Pixels[X, Y] := MapColor(Canvas.Pixels[X, Y]); + end; + FIndexs[State] := TGlyphList(FGlyphList).AddMasked(TmpImage, + ColorToRGB(clBtnFace)); + end; + end; + finally + TmpImage.Free; + end; + Result := FIndexs[State]; +end; +{$ENDIF} + +function TRxButtonGlyph.CreateButtonGlyph(State: TRxButtonState): Integer; +var + TmpImage, MonoBmp: TBitmap; + IWidth, IHeight, X, Y: Integer; + IRect, ORect: TRect; + I: TRxButtonState; +begin + if (State = rbsDown) and (NumGlyphs < 3) then State := rbsUp; + Result := FIndexs[State]; + if (Result <> -1) or (FOriginal.Width = 0) or (FOriginal.Height = 0) or + FOriginal.Empty then Exit; + IWidth := FOriginal.Width div FNumGlyphs; + IHeight := FOriginal.Height; + if FGlyphList = nil then begin + if GlyphCache = nil then GlyphCache := TGlyphCache.Create; + FGlyphList := GlyphCache.GetList(IWidth, IHeight); + end; + TmpImage := TBitmap.Create; + try + TmpImage.Width := IWidth; + TmpImage.Height := IHeight; + IRect := Rect(0, 0, IWidth, IHeight); + TmpImage.Canvas.Brush.Color := clBtnFace; + I := State; + if Ord(I) >= NumGlyphs then I := rbsUp; + ORect := Rect(Ord(I) * IWidth, 0, (Ord(I) + 1) * IWidth, IHeight); + case State of + rbsUp, rbsDown, rbsExclusive: + begin + TmpImage.Canvas.CopyRect(IRect, FOriginal.Canvas, ORect); + FIndexs[State] := TGlyphList(FGlyphList).AddMasked(TmpImage, FTransparentColor); + end; + rbsDisabled: + if NumGlyphs > 1 then begin + TmpImage.Canvas.CopyRect(IRect, FOriginal.Canvas, ORect); + FIndexs[State] := TGlyphList(FGlyphList).AddMasked(TmpImage, FTransparentColor); + end + else begin + MonoBmp := CreateDisabledBitmap(FOriginal, clBlack); + try + FIndexs[State] := TGlyphList(FGlyphList).AddMasked(MonoBmp, + ColorToRGB(clBtnFace)); + finally + MonoBmp.Free; + end; + end; + rbsInactive: + if NumGlyphs > 4 then begin + TmpImage.Canvas.CopyRect(IRect, FOriginal.Canvas, ORect); + FIndexs[State] := TGlyphList(FGlyphList).AddMasked(TmpImage, FTransparentColor); + end + else begin + with TmpImage do begin + for X := 0 to Width - 1 do + for Y := 0 to Height - 1 do + Canvas.Pixels[X, Y] := MapColor(FOriginal.Canvas.Pixels[X, Y]); + end; + FIndexs[State] := TGlyphList(FGlyphList).AddMasked(TmpImage, FTransparentColor); + end; + end; + finally + TmpImage.Free; + end; + Result := FIndexs[State]; + FOriginal.Dormant; +end; + +procedure TRxButtonGlyph.DrawPopupMark(Canvas: TCanvas; X, Y: Integer; + State: TRxButtonState); +var + AColor: TColor; + + procedure DrawMark; + var + I: Integer; + begin + with Canvas do begin + for I := 0 to 6 do begin + Pixels[X + I, Y - 1] := AColor; + if (I > 0) and (I < 6) then begin + Pixels[X + I, Y] := AColor; + if (I > 1) and (I < 5) then Pixels[X + I, Y + 1] := AColor; + end; + end; + Pixels[X + 3, Y + 2] := AColor; + end; + end; + +begin + if State = rbsDisabled then begin + AColor := clBtnHighlight; + Inc(X, 1); Inc(Y, 1); + DrawMark; + Dec(X, 1); Dec(Y, 1); + AColor := clBtnShadow; + end + else AColor := clBtnText; + DrawMark; +end; + +function TRxButtonGlyph.DrawButtonGlyph(Canvas: TCanvas; X, Y: Integer; + State: TRxButtonState): TPoint; +var + Index: Integer; +begin + Result := Point(0, 0); + if (FOriginal = nil) or (FOriginal.Width = 0) or (FOriginal.Height = 0) or + FOriginal.Empty then Exit; + Index := CreateButtonGlyph(State); + if Index >= 0 then begin +{$IFDEF WIN32} + ImageList_Draw(FGlyphList.Handle, Index, Canvas.Handle, X, Y, ILD_NORMAL); +{$ELSE} + FGlyphList.Draw(Canvas, X, Y, Index); +{$ENDIF} + Result := Point(FGlyphList.Width, FGlyphList.Height); + end; +end; + +{$IFDEF WIN32} +function TRxButtonGlyph.DrawButtonImage(Canvas: TCanvas; X, Y: Integer; + Images: TImageList; ImageIndex: Integer; State: TRxButtonState): TPoint; +var + Index: Integer; +begin + Result := Point(0, 0); + if (Images = nil) or (ImageIndex < 0) or (ImageIndex >= Images.Count) then + Exit; + if State = rbsDisabled then begin + ImageListDrawDisabled(Images, Canvas, X, Y, ImageIndex, clBtnHighlight, + clBtnShadow, True); + end + else if State = rbsInactive then begin + Index := CreateImageGlyph(State, Images, ImageIndex); + if Index >= 0 then + ImageList_Draw(FGlyphList.Handle, Index, Canvas.Handle, X, Y, ILD_NORMAL); + end + else + ImageList_Draw(Images.Handle, ImageIndex, Canvas.Handle, X, Y, ILD_NORMAL); + Result := Point(Images.Width, Images.Height); +end; +{$ENDIF} + +procedure TRxButtonGlyph.MinimizeCaption(Canvas: TCanvas; const Caption: string; + Buffer: PChar; MaxLen, Width: Integer); +var + I: Integer; +{$IFNDEF WIN32} + P: PChar; +{$ENDIF} + Lines: TStrings; +begin + StrPLCopy(Buffer, Caption, MaxLen); + if FWordWrap then Exit; + Lines := TStringList.Create; + try +{$IFDEF WIN32} + Lines.Text := Caption; + for I := 0 to Lines.Count - 1 do + Lines[I] := MinimizeText(Lines[I], Canvas, Width); + StrPLCopy(Buffer, TrimRight(Lines.Text), MaxLen); +{$ELSE} + Lines.SetText(Buffer); + for I := 0 to Lines.Count - 1 do + Lines[I] := MinimizeText(Lines[I], Canvas, Width); + P := Lines.GetText; + try + StrPLCopy(Buffer, TrimRight(StrPas(P)), MaxLen); + finally + StrDispose(P); + end; +{$ENDIF} + finally + Lines.Free; + end; +end; + +procedure TRxButtonGlyph.DrawButtonText(Canvas: TCanvas; const Caption: string; + TextBounds: TRect; State: TRxButtonState; Flags: Word); +var + CString: array[0..255] of Char; +begin + Canvas.Brush.Style := bsClear; + StrPLCopy(CString, Caption, SizeOf(CString) - 1); + Flags := DT_VCENTER or WordWraps[FWordWrap] or Flags; + if State = rbsDisabled then begin + with Canvas do begin + OffsetRect(TextBounds, 1, 1); + Font.Color := clBtnHighlight; + DrawText(Handle, CString, Length(Caption), TextBounds, Flags); + OffsetRect(TextBounds, -1, -1); + Font.Color := clBtnShadow; + DrawText(Handle, CString, Length(Caption), TextBounds, Flags); + end; + end + else DrawText(Canvas.Handle, CString, -1, TextBounds, Flags); +end; + +procedure TRxButtonGlyph.CalcButtonLayout(Canvas: TCanvas; const Client: TRect; + var Caption: string; Layout: TButtonLayout; Margin, Spacing: Integer; + PopupMark: Boolean; var GlyphPos: TPoint; var TextBounds: TRect; Flags: Word + {$IFDEF WIN32}; Images: TImageList; ImageIndex: Integer {$ENDIF}); +var + TextPos: TPoint; + MaxSize, ClientSize, GlyphSize, TextSize: TPoint; + TotalSize: TPoint; + CString: array[0..255] of Char; +begin + { calculate the item sizes } + ClientSize := Point(Client.Right - Client.Left, Client.Bottom - Client.Top); +{$IFDEF WIN32} + if Assigned(Images) and (Images.Width > 0) and (ImageIndex >= 0) and + (ImageIndex < Images.Count) then + GlyphSize := Point(Images.Width, Images.Height) + else +{$ENDIF} + if FOriginal <> nil then + GlyphSize := Point(FOriginal.Width div FNumGlyphs, FOriginal.Height) + else GlyphSize := Point(0, 0); + if Layout in [blGlyphLeft, blGlyphRight] then begin + MaxSize.X := ClientSize.X - GlyphSize.X; + if Margin <> -1 then Dec(MaxSize.X, Margin); + if Spacing <> -1 then Dec(MaxSize.X, Spacing); + if PopupMark then Dec(MaxSize.X, 9); + MaxSize.Y := ClientSize.Y; + end + else { blGlyphTop, blGlyphBottom } begin + MaxSize.X := ClientSize.X; + MaxSize.Y := ClientSize.Y - GlyphSize.Y; + if Margin <> -1 then Dec(MaxSize.Y, Margin); + if Spacing <> -1 then Dec(MaxSize.Y, Spacing); + end; + MaxSize.X := Max(0, MaxSize.X); + MaxSize.Y := Max(0, MaxSize.Y); + MinimizeCaption(Canvas, Caption, CString, SizeOf(CString) - 1, MaxSize.X); + Caption := StrPas(CString); + if Length(Caption) > 0 then begin + TextBounds := Rect(0, 0, MaxSize.X, 0); + DrawText(Canvas.Handle, CString, -1, TextBounds, DT_CALCRECT or DT_CENTER + or DT_VCENTER or WordWraps[FWordWrap] or Flags); + end + else TextBounds := Rect(0, 0, 0, 0); + TextBounds.Bottom := Max(TextBounds.Top, TextBounds.Top + + Min(MaxSize.Y, HeightOf(TextBounds))); + TextBounds.Right := Max(TextBounds.Left, TextBounds.Left + + Min(MaxSize.X, WidthOf(TextBounds))); + TextSize := Point(TextBounds.Right - TextBounds.Left, TextBounds.Bottom - + TextBounds.Top); + if PopupMark then + if ((GlyphSize.X = 0) or (GlyphSize.Y = 0)) or (Layout = blGlyphLeft) then + Inc(TextSize.X, 9) + else if (GlyphSize.X > 0) then + Inc(GlyphSize.X, 6); + { If the layout has the glyph on the right or the left, then both the + text and the glyph are centered vertically. If the glyph is on the top + or the bottom, then both the text and the glyph are centered horizontally.} + if Layout in [blGlyphLeft, blGlyphRight] then begin + GlyphPos.Y := (ClientSize.Y div 2) - (GlyphSize.Y div 2); + TextPos.Y := (ClientSize.Y div 2) - (TextSize.Y div 2); + end + else begin + GlyphPos.X := (ClientSize.X div 2) - (GlyphSize.X div 2); + TextPos.X := (ClientSize.X div 2) - (TextSize.X div 2); + end; + { if there is no text or no bitmap, then Spacing is irrelevant } + if (TextSize.X = 0) or (GlyphSize.X = 0) then Spacing := 0; + { adjust Margin and Spacing } + if Margin = -1 then begin + if Spacing = -1 then begin + TotalSize := Point(GlyphSize.X + TextSize.X, GlyphSize.Y + TextSize.Y); + if Layout in [blGlyphLeft, blGlyphRight] then + Margin := (ClientSize.X - TotalSize.X) div 3 + else Margin := (ClientSize.Y - TotalSize.Y) div 3; + Spacing := Margin; + end + else begin + TotalSize := Point(GlyphSize.X + Spacing + TextSize.X, GlyphSize.Y + + Spacing + TextSize.Y); + if Layout in [blGlyphLeft, blGlyphRight] then + Margin := (ClientSize.X div 2) - (TotalSize.X div 2) + else Margin := (ClientSize.Y div 2) - (TotalSize.Y div 2); + end; + end + else begin + if Spacing = -1 then begin + TotalSize := Point(ClientSize.X - (Margin + GlyphSize.X), ClientSize.Y - + (Margin + GlyphSize.Y)); + if Layout in [blGlyphLeft, blGlyphRight] then + Spacing := (TotalSize.X div 2) - (TextSize.X div 2) + else Spacing := (TotalSize.Y div 2) - (TextSize.Y div 2); + end; + end; + case Layout of + blGlyphLeft: + begin + GlyphPos.X := Margin; + TextPos.X := GlyphPos.X + GlyphSize.X + Spacing; + end; + blGlyphRight: + begin + GlyphPos.X := ClientSize.X - Margin - GlyphSize.X; + TextPos.X := GlyphPos.X - Spacing - TextSize.X; + end; + blGlyphTop: + begin + GlyphPos.Y := Margin; + TextPos.Y := GlyphPos.Y + GlyphSize.Y + Spacing; + end; + blGlyphBottom: + begin + GlyphPos.Y := ClientSize.Y - Margin - GlyphSize.Y; + TextPos.Y := GlyphPos.Y - Spacing - TextSize.Y; + end; + end; + { fixup the result variables } + Inc(GlyphPos.X, Client.Left); + Inc(GlyphPos.Y, Client.Top); + OffsetRect(TextBounds, TextPos.X + Client.Left, TextPos.Y + Client.Top); +end; + +{$IFDEF WIN32} +function TRxButtonGlyph.Draw(Canvas: TCanvas; const Client: TRect; + const Caption: string; Layout: TButtonLayout; Margin, Spacing: Integer; + PopupMark: Boolean; State: TRxButtonState; Flags: Word): TRect; +begin + Result := DrawEx(Canvas, Client, Caption, Layout, Margin, Spacing, + PopupMark, nil, -1, State, Flags); +end; +{$ENDIF} + +{$IFDEF WIN32} +function TRxButtonGlyph.DrawEx(Canvas: TCanvas; const Client: TRect; + const Caption: string; Layout: TButtonLayout; Margin, Spacing: Integer; + PopupMark: Boolean; Images: TImageList; ImageIndex: Integer; + State: TRxButtonState; Flags: Word): TRect; +{$ELSE} +function TRxButtonGlyph.Draw(Canvas: TCanvas; const Client: TRect; + const Caption: string; Layout: TButtonLayout; Margin, Spacing: Integer; + PopupMark: Boolean; State: TRxButtonState; Flags: Word): TRect; +{$ENDIF} +var +{$IFDEF WIN32} + UseImages: Boolean; +{$ENDIF} + GlyphPos, PopupPos: TPoint; + TextBounds: TRect; + CaptionText: string; +begin + CaptionText := Caption; + CalcButtonLayout(Canvas, Client, CaptionText, Layout, Margin, Spacing, + PopupMark, GlyphPos, TextBounds, Flags {$IFDEF WIN32}, Images, + ImageIndex {$ENDIF}); +{$IFDEF WIN32} + UseImages := False; + if Assigned(Images) and (ImageIndex >= 0) and (ImageIndex < Images.Count) and + (Images.Width > 0) then + begin + UseImages := True; + PopupPos := DrawButtonImage(Canvas, GlyphPos.X, GlyphPos.Y, Images, + ImageIndex, State); + end else +{$ENDIF} + PopupPos := DrawButtonGlyph(Canvas, GlyphPos.X, GlyphPos.Y, State); + DrawButtonText(Canvas, CaptionText, TextBounds, State, Flags); + if PopupMark then + if (Layout <> blGlyphLeft) and (((FOriginal <> nil) and + (FOriginal.Width > 0)) {$IFDEF WIN32} or UseImages {$ENDIF}) then + begin + PopupPos.X := GlyphPos.X + PopupPos.X + 1; + PopupPos.Y := GlyphPos.Y + PopupPos.Y div 2; + DrawPopupMark(Canvas, PopupPos.X, PopupPos.Y, State); + end + else begin + if CaptionText <> '' then + PopupPos.X := TextBounds.Right + 3 + else + PopupPos.X := (Client.Left + Client.Right - 7) div 2; + PopupPos.Y := TextBounds.Top + HeightOf(TextBounds) div 2; + DrawPopupMark(Canvas, PopupPos.X, PopupPos.Y, State); + end; + Result := TextBounds; +end; + +const +{$IFNDEF RX_D4} + Pattern: TBitmap = nil; +{$ENDIF} + ButtonCount: Integer = 0; + +{ DrawButtonFrame - returns the remaining usable area inside the Client rect } + +function DrawButtonFrame(Canvas: TCanvas; const Client: TRect; + IsDown, IsFlat: Boolean; Style: TButtonStyle): TRect; +var + NewStyle: Boolean; +begin + Result := Client; + NewStyle := (Style = bsNew) or (NewStyleControls and (Style = bsAutoDetect)); + if IsDown then begin + if NewStyle then begin + Frame3D(Canvas, Result, clWindowFrame, clBtnHighlight, 1); + if not IsFlat then + Frame3D(Canvas, Result, clBtnShadow, clBtnFace, 1); + end + else begin + if IsFlat then + Frame3D(Canvas, Result, clWindowFrame, clBtnHighlight, 1) + else begin + Frame3D(Canvas, Result, clWindowFrame, clWindowFrame, 1); + Canvas.Pen.Color := clBtnShadow; + Canvas.PolyLine([Point(Result.Left, Result.Bottom - 1), + Point(Result.Left, Result.Top), Point(Result.Right, Result.Top)]); + end; + end; + end + else begin + if NewStyle then begin + if IsFlat then + Frame3D(Canvas, Result, clBtnHighlight, clBtnShadow, 1) + else begin + Frame3D(Canvas, Result, clBtnHighlight, clWindowFrame, 1); + Frame3D(Canvas, Result, clBtnFace, clBtnShadow, 1); + end; + end + else begin + if IsFlat then + Frame3D(Canvas, Result, clBtnHighlight, clWindowFrame, 1) + else begin + Frame3D(Canvas, Result, clWindowFrame, clWindowFrame, 1); + Frame3D(Canvas, Result, clBtnHighlight, clBtnShadow, 1); + end; + end; + end; + InflateRect(Result, -1, -1); +end; + +{ TButtonImage } + +constructor TButtonImage.Create; +begin + FGlyph := TRxButtonGlyph.Create; + NumGlyphs := 1; + FButtonSize := Point(24, 23); +end; + +destructor TButtonImage.Destroy; +begin + FGlyph.Free; + inherited Destroy; +end; + +procedure TButtonImage.Invalidate; +begin + TRxButtonGlyph(FGlyph).Invalidate; +end; + +function TButtonImage.GetNumGlyphs: TRxNumGlyphs; +begin + Result := TRxButtonGlyph(FGlyph).NumGlyphs; +end; + +procedure TButtonImage.SetNumGlyphs(Value: TRxNumGlyphs); +begin + TRxButtonGlyph(FGlyph).NumGlyphs := Value; +end; + +function TButtonImage.GetWordWrap: Boolean; +begin + Result := TRxButtonGlyph(FGlyph).WordWrap; +end; + +procedure TButtonImage.SetWordWrap(Value: Boolean); +begin + TRxButtonGlyph(FGlyph).WordWrap := Value; +end; + +function TButtonImage.GetGlyph: TBitmap; +begin + Result := TRxButtonGlyph(FGlyph).Glyph; +end; + +procedure TButtonImage.SetGlyph(Value: TBitmap); +begin + TRxButtonGlyph(FGlyph).Glyph := Value; +end; + +function TButtonImage.GetAlignment: TAlignment; +begin + Result := TRxButtonGlyph(FGlyph).Alignment; +end; + +procedure TButtonImage.SetAlignment(Value: TAlignment); +begin + TRxButtonGlyph(FGlyph).Alignment := Value; +end; + +{$IFDEF WIN32} +procedure TButtonImage.Draw(Canvas: TCanvas; X, Y, Margin, Spacing: Integer; + Layout: TButtonLayout; AFont: TFont; Flags: Word); +begin + DrawEx(Canvas, X, Y, Margin, Spacing, Layout, AFont, nil, -1, Flags); +end; +{$ENDIF} + +{$IFDEF WIN32} +procedure TButtonImage.DrawEx(Canvas: TCanvas; X, Y, Margin, Spacing: Integer; + Layout: TButtonLayout; AFont: TFont; Images: TImageList; ImageIndex: Integer; + Flags: Word); +{$ELSE} +procedure TButtonImage.Draw(Canvas: TCanvas; X, Y, Margin, Spacing: Integer; + Layout: TButtonLayout; AFont: TFont; Flags: Word); +{$ENDIF} +var + Target: TRect; + SaveColor: Integer; + SaveFont: TFont; +begin + SaveColor := Canvas.Brush.Color; + SaveFont := TFont.Create; + SaveFont.Assign(Canvas.Font); + try + Target := Bounds(X, Y, FButtonSize.X, FButtonSize.Y); + Canvas.Brush.Color := clBtnFace; + Canvas.FillRect(Target); + Frame3D(Canvas, Target, clBtnShadow, clWindowFrame, 1); + Frame3D(Canvas, Target, clBtnHighlight, clBtnShadow, 1); + if AFont <> nil then Canvas.Font := AFont; +{$IFDEF WIN32} + TRxButtonGlyph(FGlyph).DrawEx(Canvas, Target, Caption, Layout, Margin, + Spacing, False, Images, ImageIndex, rbsUp, Flags); +{$ELSE} + TRxButtonGlyph(FGlyph).Draw(Canvas, Target, Caption, Layout, Margin, + Spacing, False, rbsUp, Flags); +{$ENDIF} + finally + Canvas.Font.Assign(SaveFont); + SaveFont.Free; + Canvas.Brush.Color := SaveColor; + end; +end; + +{$ENDIF RX_D4} + +{$IFDEF WIN32} +initialization + FCheckBitmap := nil; +finalization + DestroyLocals; +{$ELSE} +initialization + FCheckBitmap := nil; + AddExitProc(DestroyLocals); +{$ENDIF} +*) + +{ TRxSpeedButton } + +procedure TRxSpeedButton.SetAllowTimer(const AValue: Boolean); +begin + if FAllowTimer=AValue then exit; + FAllowTimer:=AValue; + if not FAllowTimer and (FRepeatTimer <> nil) then + begin + FRepeatTimer.Enabled := False; + FRepeatTimer.Free; + FRepeatTimer := nil; + end; +end; + +procedure TRxSpeedButton.TimerExpired(Sender: TObject); +begin + FRepeatTimer.Interval := RepeatInterval; + if (FState = bsDown) and MouseCapture then + try + Click; + except + FRepeatTimer.Enabled := False; + raise; + end; +end; + +procedure TRxSpeedButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, + Y: Integer); +begin + inherited MouseDown(Button, Shift, X, Y); + if (Button = mbLeft) and Enabled then + begin + if FAllowTimer then begin + if FRepeatTimer = nil then + FRepeatTimer := TTimer.Create(nil); + FRepeatTimer.Interval := InitPause; + FRepeatTimer.OnTimer := @TimerExpired; + FRepeatTimer.Enabled := True; + end; + end; +end; + +procedure TRxSpeedButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, + Y: Integer); +begin + inherited MouseUp(Button, Shift, X, Y); + if FRepeatTimer <> nil then FRepeatTimer.Enabled := False; +end; + +constructor TRxSpeedButton.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FInitRepeatPause := 500; + FRepeatPause := 100; +end; + +destructor TRxSpeedButton.Destroy; +begin + inherited Destroy; + if FRepeatTimer <> nil then FRepeatTimer.Free; +end; + +end. diff --git a/components/rx/version/2.1/rxcustomchartpanel.pas b/components/rx/version/2.1/rxcustomchartpanel.pas new file mode 100644 index 000000000..8d9cd233d --- /dev/null +++ b/components/rx/version/2.1/rxcustomchartpanel.pas @@ -0,0 +1,318 @@ +{ rxcustomchartpanel unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxcustomchartpanel; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls; + +type + TRxCustomChart = class; + TRxChartSeriesItem = class; + + { TRxChartValuesItem } + + TRxChartValuesItem = class(TCollectionItem) + private + FCaption: string; + FColor: TColor; + FVisible: boolean; + FLabel:double; + procedure SetCaption(const AValue: string); + procedure SetColor(const AValue: TColor); + procedure SetVisible(const AValue: boolean); + protected + function GetDisplayName: string; override; + public + constructor Create(ACollection: TCollection); override; + destructor Destroy; override; + published + property Caption:string read FCaption write SetCaption; + property Color:TColor read FColor write SetColor; + property Visible:boolean read FVisible write SetVisible; + property LabelAsFloat:double read FLabel write FLabel; + property LabelAsDateTime:TDateTime read FLabel write FLabel; + end; + + { TRxChartValues } + + TRxChartValues = class(TCollection) + private + FRxChartSeriesItem:TRxChartSeriesItem; + public + constructor Create(ARxChartSeriesItem:TRxChartSeriesItem); + end; + + { TRxChartSeriesItem } + + TRxChartSeriesItem = class(TCollectionItem) + private + FCaption: string; + FColor: TColor; + FVisible: boolean; + FChartValues:TRxChartValues; + function GetItems: TRxChartValues; + procedure SetCaption(const AValue: string); + procedure SetColor(const AValue: TColor); + procedure SetItems(const AValue: TRxChartValues); + procedure SetVisible(const AValue: boolean); + protected + function GetDisplayName: string; override; + public + constructor Create(ACollection: TCollection); override; + destructor Destroy; override; + published + property Values:TRxChartValues read GetItems write SetItems; + property Caption:string read FCaption write SetCaption; + property Color:TColor read FColor write SetColor; + property Visible:boolean read FVisible write SetVisible; + end; + + { TRxChartSeries } + + TRxChartSeries = class(TCollection) + private + FChart:TRxCustomChart; + function GetToolbarItem(Index: Integer): TRxChartSeriesItem; + procedure SetToolbarItem(Index: Integer; const AValue: TRxChartSeriesItem); + public + constructor Create(AChart:TRxCustomChart); + property Items[Index: Integer]: TRxChartSeriesItem read GetToolbarItem write SetToolbarItem; default; + published + end; + + { TRxCustomChart } + + TRxCustomChart = class(TCustomPanel) + private + FChartSeries:TRxChartSeries; + function GetItems: TRxChartSeries; + procedure SetItems(const AValue: TRxChartSeries); + { Private declarations } + protected + property ChartSeries:TRxChartSeries read GetItems write SetItems; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + { Published declarations } + end; + + TRxChart = class(TRxCustomChart) + published + property ChartSeries; + + property Align; + property Alignment; + property Anchors; + property AutoSize; + property BorderSpacing; + property BevelInner; + property BevelOuter; + property BevelWidth; + property BorderWidth; + property BorderStyle; + property Caption; + property Constraints; + property DragMode; + property Enabled; + property Font; + property FullRepaint; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnResize; + property OnStartDrag; + end; + +implementation + + + +{ TRxChartSeriesItem } + +procedure TRxChartSeriesItem.SetCaption(const AValue: string); +begin + if FCaption=AValue then exit; + FCaption:=AValue; +end; + +function TRxChartSeriesItem.GetItems: TRxChartValues; +begin + Result:=FChartValues; +end; + +procedure TRxChartSeriesItem.SetColor(const AValue: TColor); +begin + if FColor=AValue then exit; + FColor:=AValue; +end; + +procedure TRxChartSeriesItem.SetItems(const AValue: TRxChartValues); +begin + FChartValues.Assign(AValue); +end; + +procedure TRxChartSeriesItem.SetVisible(const AValue: boolean); +begin + if FVisible=AValue then exit; + FVisible:=AValue; +end; + +function TRxChartSeriesItem.GetDisplayName: string; +begin + if FCaption<>'' then + Result:=FCaption + else + Result:=inherited GetDisplayName; +end; + +constructor TRxChartSeriesItem.Create(ACollection: TCollection); +begin + inherited Create(ACollection); + FChartValues:=TRxChartValues.Create(Self); +end; + +destructor TRxChartSeriesItem.Destroy; +begin + FreeAndNil(FChartValues); + inherited Destroy; +end; + +{ TRxChartSeries } + +function TRxChartSeries.GetToolbarItem(Index: Integer): TRxChartSeriesItem; +begin + result := TRxChartSeriesItem( inherited Items[Index] ); +end; + +procedure TRxChartSeries.SetToolbarItem(Index: Integer; + const AValue: TRxChartSeriesItem); +begin + Items[Index].Assign( AValue ); +end; + +constructor TRxChartSeries.Create(AChart: TRxCustomChart); +begin + inherited Create(TRxChartSeriesItem); + FChart:=AChart; +end; + +{ TRxCustomChart } + +function TRxCustomChart.GetItems: TRxChartSeries; +begin + Result:=FChartSeries; +end; + +procedure TRxCustomChart.SetItems(const AValue: TRxChartSeries); +begin + FChartSeries.Assign(AValue); +end; + +constructor TRxCustomChart.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FChartSeries:=TRxChartSeries.Create(Self); +end; + +destructor TRxCustomChart.Destroy; +begin + FreeAndNil(FChartSeries); + inherited Destroy; +end; + +{ TRxChartValues } + +constructor TRxChartValues.Create(ARxChartSeriesItem: TRxChartSeriesItem); +begin + inherited Create(TRxChartValuesItem); + FRxChartSeriesItem := ARxChartSeriesItem; +end; + +{ TRxChartValuesItem } + +procedure TRxChartValuesItem.SetCaption(const AValue: string); +begin + if FCaption=AValue then exit; + FCaption:=AValue; +end; + +procedure TRxChartValuesItem.SetColor(const AValue: TColor); +begin + if FColor=AValue then exit; + FColor:=AValue; +end; + +procedure TRxChartValuesItem.SetVisible(const AValue: boolean); +begin + if FVisible=AValue then exit; + FVisible:=AValue; +end; + +function TRxChartValuesItem.GetDisplayName: string; +begin + if FCaption<>'' then + Result:=FCaption + else + Result:=inherited GetDisplayName; +end; + +constructor TRxChartValuesItem.Create(ACollection: TCollection); +begin + inherited Create(ACollection); +end; + +destructor TRxChartValuesItem.Destroy; +begin + inherited Destroy; +end; + +end. diff --git a/components/rx/version/2.1/rxdbcolorbox.pas b/components/rx/version/2.1/rxdbcolorbox.pas new file mode 100644 index 000000000..72f1ab256 --- /dev/null +++ b/components/rx/version/2.1/rxdbcolorbox.pas @@ -0,0 +1,360 @@ +{ RxDBColorBox unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RxDBColorBox; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ColorBox, + DbCtrls, DB, LMessages, LCLType; + +type + + { TRxCustomDBColorBox } + + TRxCustomDBColorBox = class(TCustomColorBox) + FDataLink: TFieldDataLink; + + procedure DataChange(Sender: TObject); + function GetDataField: string; + function GetDataSource: TDataSource; + function GetField: TField; + function GetReadOnly: Boolean; + procedure SetDataField(const AValue: string); + procedure SetDataSource(const AValue: TDataSource); + procedure SetReadOnly(const AValue: Boolean); + procedure UpdateData(Sender: TObject); + procedure FocusRequest(Sender: TObject); + procedure ActiveChange(Sender: TObject); + procedure LayoutChange(Sender: TObject); + procedure CMGetDataLink(var Message: TLMessage); message CM_GETDATALINK; + function IsReadOnly: boolean; + protected + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False; + + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure Change; override; + + procedure Loaded; override; + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; + procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Field: TField read GetField; + published + { Published declarations } + end; + + TRxDBColorBox = class(TRxCustomDBColorBox) + private + { Private declarations } + protected + { Protected declarations } + public + { Public declarations } + published + property DataField; + property DataSource; + property ReadOnly; + + property DefaultColorColor; + property NoneColorColor; + property Selected; + property Style; + property OnGetColors; + + property Align; + property Anchors; + property ArrowKeysTraverseList; + property AutoComplete; + property AutoCompleteText; + property AutoDropDown; + property AutoSelect; + property AutoSize; + property BidiMode; + property BorderSpacing; + property Color; + property Constraints; + property DragCursor; + property DragMode; + property DropDownCount; + property Enabled; + property Font; + property ItemHeight; + property ItemWidth; + property OnChange; + property OnChangeBounds; + property OnClick; + property OnCloseUp; + property OnContextPopup; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnDropDown; + property OnEditingDone; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseEnter; + property OnMouseLeave; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + property OnSelect; + property OnUTF8KeyPress; + property ParentBidiMode; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + end; + +implementation +uses + LCLVersion; + +type + TFieldDataLinkHack = class(TFieldDataLink) + end; + + +{ TRxCustomDBColorBox } + +procedure TRxCustomDBColorBox.DataChange(Sender: TObject); +begin + if Assigned(FDataLink.Field) and (FDataLink.Field.DataType in [ftString, ftInteger, ftLargeint]) then + begin + if FDatalink.Field.DataType in [ftString] then + begin + if FDatalink.Field.AsString<>'' then + try + Selected:=StringToColor(FDatalink.Field.AsString) + except + Selected:=clNone; + end + else + Selected:=clNone; + end + else + if FDataLink.Field.DataType in [ftInteger, ftLargeint] then + begin + try + Selected:=TColor(FDatalink.Field.AsInteger); + except + Selected:=clNone; + end; + end; + end + else + begin + Selected := clNone; + end; +end; + +function TRxCustomDBColorBox.GetDataField: string; +begin + Result := FDataLink.FieldName; +end; + +function TRxCustomDBColorBox.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +function TRxCustomDBColorBox.GetField: TField; +begin + Result := FDataLink.Field; +end; + +function TRxCustomDBColorBox.GetReadOnly: Boolean; +begin + Result := FDataLink.ReadOnly; +end; + +procedure TRxCustomDBColorBox.SetDataField(const AValue: string); +begin + FDataLink.FieldName := AValue; +end; + +procedure TRxCustomDBColorBox.SetDataSource(const AValue: TDataSource); +begin + ChangeDataSource(Self,FDataLink,AValue); +end; + +procedure TRxCustomDBColorBox.SetReadOnly(const AValue: Boolean); +begin + inherited; + FDataLink.ReadOnly := AValue; +end; + +procedure TRxCustomDBColorBox.UpdateData(Sender: TObject); +begin + if FDataLink.Field.DataType in [ftString] then + FDataLink.Field.AsString := ColorToString(Selected) + else + if FDataLink.Field.DataType in [ftInteger, ftLargeint] then + FDataLink.Field.AsInteger := Integer(Selected); +end; + +procedure TRxCustomDBColorBox.FocusRequest(Sender: TObject); +begin + SetFocus; +end; + +procedure TRxCustomDBColorBox.ActiveChange(Sender: TObject); +begin + if FDatalink.Active then + DataChange(Sender) + else + begin + Selected := clNone; + FDataLink.Reset; + end; +end; + +procedure TRxCustomDBColorBox.LayoutChange(Sender: TObject); +begin + DataChange(Sender); +end; + +procedure TRxCustomDBColorBox.CMGetDataLink(var Message: TLMessage); +begin + Message.Result := PtrUInt(FDataLink); +end; + +function TRxCustomDBColorBox.IsReadOnly: boolean; +begin + Result := true; + if FDatalink.Active and (not Self.ReadOnly) then + Result := (Field = nil) or Field.ReadOnly; +end; + +procedure TRxCustomDBColorBox.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + if Key=VK_ESCAPE then + begin + //cancel out of editing by reset on esc + FDataLink.Reset; + SelectAll; + Key := VK_UNKNOWN; + end + else + if Key=VK_DELETE then + begin + if not IsReadOnly then + FDatalink.Edit; + end + else + if Key=VK_TAB then + begin + if FDataLink.CanModify and FDatalink.Editing then + FDataLink.UpdateRecord; + end; +end; + +procedure TRxCustomDBColorBox.Change; +begin + FDatalink.Edit; + FDataLink.Modified; + inherited Change; +end; + +procedure TRxCustomDBColorBox.Loaded; +begin + inherited Loaded; + if (csDesigning in ComponentState) then + DataChange(Self); +end; + +procedure TRxCustomDBColorBox.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation=opRemove) then + begin + if (FDataLink<>nil) and (AComponent=DataSource) then + DataSource:=nil; + end; +end; + +procedure TRxCustomDBColorBox.WMSetFocus(var Message: TLMSetFocus); +begin + inherited WMSetFocus(Message); + if not FDatalink.Editing then + FDatalink.Reset; +end; + +procedure TRxCustomDBColorBox.WMKillFocus(var Message: TLMKillFocus); +begin + inherited WMKillFocus(Message); + if not FDatalink.Editing then + FDatalink.Reset + else + TFieldDataLinkHack(FDatalink).UpdateData; +end; + +constructor TRxCustomDBColorBox.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDataLink := TFieldDataLink.Create; + FDataLink.Control := Self; + FDataLink.OnDataChange := @DataChange; + FDataLink.OnUpdateData := @UpdateData; + FDataLink.OnActiveChange := @ActiveChange; + {$if (lcl_major = 0) and (lcl_release <= 30)} + FDataLink.OnLayoutChange := @LayoutChange; + {$endif} +end; + +destructor TRxCustomDBColorBox.Destroy; +begin + FreeAndNil(FDataLink); + inherited Destroy; +end; + +end. diff --git a/components/rx/version/2.1/rxdbcomb.pas b/components/rx/version/2.1/rxdbcomb.pas new file mode 100644 index 000000000..4a4c61f59 --- /dev/null +++ b/components/rx/version/2.1/rxdbcomb.pas @@ -0,0 +1,554 @@ +{ rxdbcomb unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxdbcomb; + +{$I rx.inc} + +interface + +uses LCLType, LCLProc, LCLIntf, LMessages, Menus, Graphics, Classes, Controls, + sysutils, DB, StdCtrls, DbCtrls; + +type + +{ TCustomDBComboBox } + + TCustomDBComboBox = class(TCustomComboBox) + private + FDataLink: TFieldDataLink; + procedure DataChange(Sender: TObject); + procedure EditingChange(Sender: TObject); + function GetDataField: string; + function GetDataSource: TDataSource; + function GetField: TField; + function GetReadOnly: Boolean; + procedure SetDataField(const Value: string); + procedure SetDataSource(Value: TDataSource); + procedure SetEditReadOnly; + procedure SetItems(const Value: TStrings); + procedure SetReadOnly(Value: Boolean); + procedure UpdateData(Sender: TObject); + function GetComboText: string; virtual; + procedure SetComboText(const Value: string); virtual; + protected + procedure EditingDone; override; + procedure Change; override; + procedure Click; override; + procedure CreateWnd; override; + procedure DropDown; override; + function GetPaintText: string; virtual; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure KeyPress(var Key: Char); override; + procedure Loaded; override; + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + procedure SetStyle(Value: TComboBoxStyle); override; + procedure WndProc(var Message: TLMessage); override; + property ComboText: string read GetComboText write SetComboText; + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function ExecuteAction(AAction: TBasicAction): Boolean; override; + function UpdateAction(AAction: TBasicAction): Boolean; override; + function UseRightToLeftAlignment: Boolean; + property Field: TField read GetField; + property Items write SetItems; + property Text; + end; + +{ TRxDBComboBox } + + TRxDBComboBox = class(TCustomDBComboBox) + private + FValues: TStrings; + FEnableValues: Boolean; + procedure SetEnableValues(Value: Boolean); + procedure SetValues(Value: TStrings); + procedure ValuesChanged(Sender: TObject); + protected + procedure SetStyle(Value: TComboBoxStyle); override; + function GetComboText: string; override; + function GetPaintText: string; override; + procedure SetComboText(const Value: string); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property Anchors; + property ArrowKeysTraverseList; + property AutoDropDown; + property AutoSize; + property BorderSpacing; + property Style; { must be published before Items } + property Color; + property DataField; + property DataSource; + property DragMode; + property DragCursor; + property DropDownCount; + property Enabled; + property EnableValues: Boolean read FEnableValues write SetEnableValues; + property Font; + property Constraints; + property DragKind; + property ItemHeight; + property Items; + property ItemWidth; + property MaxLength default -1; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ReadOnly; + property ShowHint; + property Sorted; + property TabOrder; + property TabStop; + property Values: TStrings read FValues write SetValues; + property Visible; + property OnChange; + property OnChangeBounds; + property OnClick; + property OnCloseUp; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnDrawItem; + property OnDropDown; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMeasureItem; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnSelect; + property OnStartDrag; + property OnUTF8KeyPress; + property OnContextPopup; + property OnEndDock; + property OnStartDock; + end; + +implementation + +uses DBUtils, rxdconst; + +{ TCustomDBComboBox } + +constructor TCustomDBComboBox.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + ControlStyle := ControlStyle + [csReplicatable]; + FDataLink := TFieldDataLink.Create; + FDataLink.Control := Self; + FDataLink.OnDataChange := @DataChange; + FDataLink.OnUpdateData := @UpdateData; + FDataLink.OnEditingChange := @EditingChange; +end; + +destructor TCustomDBComboBox.Destroy; +begin + FDataLink.OnDataChange := nil; + FDataLink.OnUpdateData := nil; + FDataLink.Free; + FDataLink := nil; + inherited Destroy; +end; + +procedure TCustomDBComboBox.Loaded; +begin + inherited Loaded; + if (csDesigning in ComponentState) then DataChange(Self); +end; + +procedure TCustomDBComboBox.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation = opRemove) and (FDataLink <> nil) and + (AComponent = DataSource) then DataSource := nil; +end; + +procedure TCustomDBComboBox.CreateWnd; +begin + inherited CreateWnd; + SetEditReadOnly; +end; + +procedure TCustomDBComboBox.DataChange(Sender: TObject); +begin + if DroppedDown then Exit; + if FDataLink.Field <> nil then ComboText := FDataLink.Field.AsString + else if csDesigning in ComponentState then ComboText := Name + else ComboText := ''; +end; + +procedure TCustomDBComboBox.UpdateData(Sender: TObject); +begin + if Assigned(FDataLink.Field) then + FDataLink.Field.AsString := ComboText + else + raise Exception.CreateFmt(SDBComboBoxFieldNotAssigned, [Name]); +end; + +procedure TCustomDBComboBox.SetComboText(const Value: string); +var + I: Integer; + Redraw: Boolean; +begin + if Value <> ComboText then + begin + if Style <> csDropDown then + begin + Redraw := (Style <> csSimple) and HandleAllocated; +// if Redraw then SendMessage(Handle, LM_SETREDRAW, 0, 0); + try + if Value = '' then I := -1 else I := Items.IndexOf(Value); + ItemIndex := I; + finally + if Redraw then + begin +// SendMessage(Handle, WM_SETREDRAW, 1, 0); + Invalidate; + end; + end; + if I >= 0 then Exit; + end; + if Style in [csDropDown, csSimple] then Text := Value; + end; +end; + +function TCustomDBComboBox.GetComboText: string; +var + I: Integer; +begin + if Style in [csDropDown, csSimple] then Result := Text + else + begin + I := ItemIndex; + if I < 0 then Result := '' else Result := Items[I]; + end; +end; + +procedure TCustomDBComboBox.Change; +begin + FDataLink.Edit; + FDataLink.Modified; + FDataLink.UpdateRecord; + inherited Change; +end; + +procedure TCustomDBComboBox.Click; +begin + FDataLink.Edit; + inherited Click; + FDataLink.Modified; +end; + +procedure TCustomDBComboBox.DropDown; +begin + FDataLink.Edit; + inherited DropDown; +end; + +function TCustomDBComboBox.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +procedure TCustomDBComboBox.SetDataSource(Value: TDataSource); +begin + if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + FDataLink.DataSource := Value; + if Value <> nil then Value.FreeNotification(Self); +end; + +function TCustomDBComboBox.GetDataField: string; +begin + Result := FDataLink.FieldName; +end; + +procedure TCustomDBComboBox.SetDataField(const Value: string); +begin + FDataLink.FieldName := Value; +end; + +function TCustomDBComboBox.GetReadOnly: Boolean; +begin + Result := FDataLink.ReadOnly; +end; + +procedure TCustomDBComboBox.SetReadOnly(Value: Boolean); +begin + FDataLink.ReadOnly := Value; +end; + +function TCustomDBComboBox.GetField: TField; +begin + Result := FDataLink.Field; +end; + +procedure TCustomDBComboBox.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + if (Key = VK_BACK) or (Key = VK_DELETE) or (Key = VK_UP) or + (Key = VK_DOWN) or (Key in [32..255]) then + begin + if not FDataLink.Edit and (Key in [VK_UP, VK_DOWN]) then + Key := 0; + end; +end; + +procedure TCustomDBComboBox.KeyPress(var Key: Char); +begin + inherited KeyPress(Key); + if (Key in [#32..#255]) and (FDataLink.Field <> nil) and + not FDataLink.Field.IsValidChar(Key) then + begin +// MessageBeep(0); + Key := #0; + end; + case Key of + ^H, ^V, ^X, #32..#255: + FDataLink.Edit; + #27: + begin + FDataLink.Reset; + SelectAll; + end; + end; +end; + +procedure TCustomDBComboBox.EditingChange(Sender: TObject); +begin + SetEditReadOnly; +end; + +procedure TCustomDBComboBox.SetEditReadOnly; +begin +(* if (Style in [csDropDown, csSimple]) and HandleAllocated then + SendMessage({$IFDEF WIN32} EditHandle {$ELSE} FEditHandle {$ENDIF}, + EM_SETREADONLY, Ord(not FDataLink.Editing), 0); *) +end; + + +procedure TCustomDBComboBox.WndProc(var Message: TLMessage); +begin + if not (csDesigning in ComponentState) then + case Message.Msg of + LM_COMMAND: + if TLMCommand(Message).NotifyCode = CBN_SELCHANGE then + if not FDataLink.Edit then begin +{ if Style <> csSimple then + PostMessage(Handle, LB_SHOWDROPDOWN, 0, 0);} + Exit; + end; +{ CB_SHOWDROPDOWN: + if Message.WParam <> 0 then FDataLink.Edit + else if not FDataLink.Editing then DataChange(Self); }{Restore text} +{$IFDEF WIN32} +{ LM_CREATE, + WM_WINDOWPOSCHANGED, + CM_FONTCHANGED: + FPaintControl.DestroyHandle;} +{$ENDIF} + end; + inherited WndProc(Message); +end; + +procedure TCustomDBComboBox.EditingDone; +begin + if Assigned(FDataLink.DataSet) and (FDataLink.DataSet.State in [dsinsert,dsedit]) then + begin + try + FDataLink.UpdateRecord; + except + SelectAll; + if CanFocus then SetFocus; + raise; + end; + inherited EditingDone; + end; +end; + + +function TCustomDBComboBox.GetPaintText: string; +begin + if FDataLink.Field <> nil then Result := FDataLink.Field.Text + else Result := ''; +end; + +procedure TCustomDBComboBox.SetItems(const Value: TStrings); +begin + Items.Assign(Value); + DataChange(Self); +end; + +procedure TCustomDBComboBox.SetStyle(Value: TComboBoxStyle); +begin + if (Value = csSimple) and Assigned(FDatalink) and FDatalink.DatasourceFixed then + _DBError('SNotReplicatable'); + inherited SetStyle(Value); +end; + +function TCustomDBComboBox.UseRightToLeftAlignment: Boolean; +begin +// Result := DBUseRightToLeftAlignment(Self, Field); +end; + +function TCustomDBComboBox.ExecuteAction(AAction: TBasicAction): Boolean; +begin +{ Result := inherited ExecuteAction(AAction) or (FDataLink <> nil) and + FDataLink.ExecuteAction(AAction);} +end; + +function TCustomDBComboBox.UpdateAction(AAction: TBasicAction): Boolean; +begin +{ Result := inherited UpdateAction(AAction) or (FDataLink <> nil) and + FDataLink.UpdateAction(AAction);} +end; + +{ TRxDBComboBox } + +constructor TRxDBComboBox.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FValues := TStringList.Create; + TStringList(FValues).OnChange := @ValuesChanged; + EnableValues := False; +end; + +destructor TRxDBComboBox.Destroy; +begin + TStringList(FValues).OnChange := nil; + FValues.Free; + inherited Destroy; +end; + +procedure TRxDBComboBox.ValuesChanged(Sender: TObject); +begin + if FEnableValues then DataChange(Self); +end; + +function TRxDBComboBox.GetPaintText: string; +var + I: Integer; +begin + Result := ''; + if FDataLink.Field <> nil then begin + if FEnableValues then begin + I := Values.IndexOf(FDataLink.Field.Text); + if I >= 0 then Result := Items.Strings[I] + end + else Result := FDataLink.Field.Text; + end; +end; + +function TRxDBComboBox.GetComboText: string; +var + I: Integer; +begin + if (Style in [csDropDown, csSimple]) and (not FEnableValues) then + Result := Text + else begin + I := ItemIndex; + if (I < 0) or (FEnableValues and (FValues.Count < I + 1)) then + Result := '' + else + if FEnableValues then Result := FValues[I] + else Result := Items[I]; + end; +end; + +procedure TRxDBComboBox.SetComboText(const Value: string); +var + I: Integer; + Redraw: Boolean; +begin + if Value <> ComboText then + begin + if Style <> csDropDown then + begin + Redraw := (Style <> csSimple) and HandleAllocated; +// if Redraw then SendMessage(Handle, WM_SETREDRAW, 0, 0); + try + if Value = '' then I := -1 + else + if FEnableValues then I := Values.IndexOf(Value) + else I := Items.IndexOf(Value); + if I >= Items.Count then I := -1; + ItemIndex := I; + finally + if Redraw then + begin +// SendMessage(Handle, WM_SETREDRAW, 1, 0); +// Invalidate; + end; + end; + if I >= 0 then Exit; + end; + if Style in [csDropDown, csSimple] then Text := Value; + Invalidate; + end; +end; + +procedure TRxDBComboBox.SetEnableValues(Value: Boolean); +begin + if FEnableValues <> Value then + begin + if Value and (Style in [csDropDown, csSimple]) then + Style := csDropDownList; + FEnableValues := Value; + DataChange(Self); + end; +end; + +procedure TRxDBComboBox.SetValues(Value: TStrings); +begin + FValues.Assign(Value); +end; + +procedure TRxDBComboBox.SetStyle(Value: TComboboxStyle); +begin + if (Value in [csSimple, csDropDown]) and FEnableValues then + Value := csDropDownList; + inherited SetStyle(Value); +end; + +end. diff --git a/components/rx/version/2.1/rxdbctrls.pas b/components/rx/version/2.1/rxdbctrls.pas new file mode 100644 index 000000000..2c30f03ea --- /dev/null +++ b/components/rx/version/2.1/rxdbctrls.pas @@ -0,0 +1,469 @@ +{ RxDBCtrls unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RxDBCtrls; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, ComCtrls, DB, DbCtrls, LMessages, LCLType; + +type + + { TCustomRxDBProgressBar } + + TCustomRxDBProgressBar = class(TCustomProgressBar) + private + FDataLink: TFieldDataLink; + function GetDataField: string; + function GetDataSource: TDataSource; + function GetField: TField; + procedure SetDataField(const AValue: string); + procedure SetDataSource(const AValue: TDataSource); + procedure DataChange(Sender: TObject); + procedure ActiveChange(Sender: TObject); + procedure LayoutChange(Sender: TObject); + procedure CMGetDataLink(var Message: TLMessage); message CM_GETDATALINK; + protected + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Field: TField read GetField; + end; + + TRxDBProgressBar = class(TCustomRxDBProgressBar) + published + property DataField; + property DataSource; + property Align; + property Anchors; + property BorderSpacing; + property BorderWidth; + property Constraints; + property DragCursor; + property DragKind; + property DragMode; + property Enabled; + property Hint; + property Max; + property Min; + property OnContextPopup; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDock; + property OnStartDrag; + property Orientation; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property Smooth; + property Step; + property TabOrder; + property TabStop; + property Visible; + property BarShowText; + end; + +type + + { TCustomRxDBTrackBar } + + TCustomRxDBTrackBar = class(TCustomTrackBar) + private + FDataLink: TFieldDataLink; + FInScrollEvent:boolean; + function GetDataField: string; + function GetDataSource: TDataSource; + function GetField: TField; + procedure SetDataField(const AValue: string); + procedure SetDataSource(const AValue: TDataSource); + procedure DataChange(Sender: TObject); + procedure ActiveChange(Sender: TObject); + procedure LayoutChange(Sender: TObject); + procedure CMGetDataLink(var Message: TLMessage); message CM_GETDATALINK; + procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; + procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS; + function GetReadOnly: Boolean; + procedure SetReadOnly(const AValue: Boolean); + function IsReadOnly: boolean; + procedure UpdateData(Sender: TObject); + protected + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False; + procedure DoChange(var msg); message LM_CHANGED; +// procedure Change; override; + procedure Loaded; override; + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Field: TField read GetField; + end; + + TRxDBTrackBar = class(TCustomRxDBTrackBar) + published + property DataField; + property DataSource; + property ReadOnly; + + property Align; + property Anchors; + property BorderSpacing; + property Constraints; + property DragCursor; + property DragMode; + property Enabled; + property Frequency; + property Hint; + property LineSize; + property Max; + property Min; + property OnChange; + property OnChangeBounds; + property OnClick; + property OnContextPopup; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnMouseDown; + property OnMouseEnter; + property OnMouseLeave; + property OnMouseMove; + property OnMouseUp; + property OnMouseWheel; + property OnMouseWheelDown; + property OnMouseWheelUp; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnResize; + property OnStartDrag; + property OnUTF8KeyPress; + property Orientation; + property PageSize; + property ParentShowHint; + property PopupMenu; + property ScalePos; + property ShowHint; + property TabOrder; + property TabStop; + property TickMarks; + property TickStyle; + property Visible; + end; + +type + + { TRxDBRadioGroup } + + TRxDBRadioGroup = class(TDBRadioGroup) + private + function GetItemEnabled(Index: integer): boolean; + procedure SetItemEnabled(Index: integer; AValue: boolean); + public + property ItemEnabled[Index: integer]: boolean read GetItemEnabled write SetItemEnabled; + published + property AutoSize; + end; + +implementation +uses dbutils, LCLVersion, vclutils, StdCtrls; + +{ TRxDBRadioGroup } + +function TRxDBRadioGroup.GetItemEnabled(Index: integer): boolean; +var + R:TRadioButton; +begin + if (Index < -1) or (Index >= Items.Count) then + RaiseIndexOutOfBounds(Self, Items, Index); + R:=FindComponent('RadioButton'+IntToStr(Index)) as TRadioButton; + if Assigned(R) then + Result:=R.Enabled + else + Result:=False; +end; + +procedure TRxDBRadioGroup.SetItemEnabled(Index: integer; AValue: boolean); +var + R:TRadioButton; +begin + if (Index < -1) or (Index >= Items.Count) then + RaiseIndexOutOfBounds(Self, Items, Index); + R:=FindComponent('RadioButton'+IntToStr(Index)) as TRadioButton; + if Assigned(R) then + R.Enabled:=AValue; +end; + +{ TCustomRxDBProgressBar } + +function TCustomRxDBProgressBar.GetDataField: string; +begin + Result := FDataLink.FieldName; +end; + +function TCustomRxDBProgressBar.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +function TCustomRxDBProgressBar.GetField: TField; +begin + Result := FDataLink.Field; +end; + +procedure TCustomRxDBProgressBar.ActiveChange(Sender: TObject); +begin + if FDatalink.Active then + DataChange(Sender) + else + begin + Text := ''; + FDataLink.Reset; + end; +end; + +procedure TCustomRxDBProgressBar.LayoutChange(Sender: TObject); +begin + DataChange(Sender); +end; + +procedure TCustomRxDBProgressBar.CMGetDataLink(var Message: TLMessage); +begin + Message.Result := PtrUInt(FDataLink); +end; + +procedure TCustomRxDBProgressBar.SetDataField(const AValue: string); +begin + FDataLink.FieldName := AValue; +end; + +procedure TCustomRxDBProgressBar.SetDataSource(const AValue: TDataSource); +begin + ChangeDataSource(Self,FDataLink,AValue); +end; + +procedure TCustomRxDBProgressBar.DataChange(Sender: TObject); +begin + if Assigned(FDataLink.Field) and (FDataLink.Field.DataType in IntegerDataTypes) then + Self.Position:=FDatalink.Field.AsInteger + else + Position:=Min +end; + +constructor TCustomRxDBProgressBar.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDataLink := TFieldDataLink.Create; + FDataLink.Control := Self; + FDataLink.OnDataChange := @DataChange; + FDataLink.OnActiveChange := @ActiveChange; + {$if (lcl_major = 0) and (lcl_release <= 30)} + FDataLink.OnLayoutChange := @LayoutChange; + {$endif} +end; + +destructor TCustomRxDBProgressBar.Destroy; +begin + FreeAndNil(FDataLink); + inherited Destroy; +end; + +{ TCustomRxDBTrackBar } + +function TCustomRxDBTrackBar.GetDataField: string; +begin + Result := FDataLink.FieldName; +end; + +function TCustomRxDBTrackBar.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +function TCustomRxDBTrackBar.GetField: TField; +begin + Result := FDataLink.Field; +end; + +procedure TCustomRxDBTrackBar.SetDataField(const AValue: string); +begin + FDataLink.FieldName := AValue; +end; + +procedure TCustomRxDBTrackBar.SetDataSource(const AValue: TDataSource); +begin + ChangeDataSource(Self,FDataLink,AValue); +end; + +procedure TCustomRxDBTrackBar.DataChange(Sender: TObject); +begin + FInScrollEvent:=true; + if Assigned(FDataLink.Field) and (FDataLink.Field.DataType in IntegerDataTypes) then + Self.Position:=FDatalink.Field.AsInteger + else + Self.Position:=0; + FInScrollEvent:=false; +end; + +procedure TCustomRxDBTrackBar.ActiveChange(Sender: TObject); +begin + if FDatalink.Active then + DataChange(Sender) + else + begin + Position:=0; + FDataLink.Reset; + end; +end; + +procedure TCustomRxDBTrackBar.LayoutChange(Sender: TObject); +begin + DataChange(Sender); +end; + +procedure TCustomRxDBTrackBar.CMGetDataLink(var Message: TLMessage); +begin + Message.Result := PtrUInt(FDataLink); +end; + +procedure TCustomRxDBTrackBar.WMSetFocus(var Message: TLMSetFocus); +begin + inherited WMSetFocus(Message); + if not FDatalink.Editing then + FDatalink.Reset; +end; + +procedure TCustomRxDBTrackBar.WMKillFocus(var Message: TLMKillFocus); +begin + inherited WMKillFocus(Message); + if not FDatalink.Editing then + FDatalink.Reset + else + FDatalink.UpdateRecord; +end; + +function TCustomRxDBTrackBar.GetReadOnly: Boolean; +begin + Result := FDataLink.ReadOnly; +end; + +procedure TCustomRxDBTrackBar.SetReadOnly(const AValue: Boolean); +begin + inherited; + FDataLink.ReadOnly := AValue; +end; + +function TCustomRxDBTrackBar.IsReadOnly: boolean; +begin + result := true; + if FDatalink.Active and not Self.ReadOnly then + result := (Field=nil) or Field.ReadOnly; +end; + +procedure TCustomRxDBTrackBar.UpdateData(Sender: TObject); +begin + if Assigned(FDataLink.Field) and (FDataLink.Field.DataType in IntegerDataTypes) then + FDataLink.Field.AsInteger := Self.Position; +end; + +procedure TCustomRxDBTrackBar.DoChange(var msg); +begin + inherited DoChange(Msg); + if not FInScrollEvent then + begin + FDatalink.Edit; + FDataLink.Modified; + end; +end; + +{ +procedure TCustomRxDBTrackBar.Change; +begin + FDatalink.Edit; + FDataLink.Modified; + inherited Change; +end; +} +procedure TCustomRxDBTrackBar.Loaded; +begin + inherited Loaded; + if (csDesigning in ComponentState) then + DataChange(Self); +end; + +procedure TCustomRxDBTrackBar.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation=opRemove) then + begin + if (FDataLink<>nil) and (AComponent=DataSource) then + DataSource:=nil; + end; +end; + +constructor TCustomRxDBTrackBar.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FInScrollEvent:=false; + FDataLink := TFieldDataLink.Create; + FDataLink.Control := Self; + FDataLink.OnDataChange := @DataChange; + FDataLink.OnUpdateData := @UpdateData; + FDataLink.OnActiveChange := @ActiveChange; + {$if (lcl_major = 0) and (lcl_release <= 30)} + FDataLink.OnLayoutChange := @LayoutChange; + {$endif} +end; + +destructor TCustomRxDBTrackBar.Destroy; +begin + FreeAndNil(FDataLink); + inherited Destroy; +end; + +end. + diff --git a/components/rx/version/2.1/rxdbgrid.lrs b/components/rx/version/2.1/rxdbgrid.lrs new file mode 100644 index 000000000..bcb0762b4 --- /dev/null +++ b/components/rx/version/2.1/rxdbgrid.lrs @@ -0,0 +1,25 @@ +LazarusResources.Add('rx_markerdown','XPM',[ + '/* XPM */'#10'static char *rx_mark_down[]={'#10'"10 10 3 1",'#10'". c None",' + +#10'"# c #808080",'#10'"a c #ffffff",'#10'"..........",'#10'".#######a.",'#10 + +'".#......a.",'#10'"..#....a..",'#10'"..#....a..",'#10'"...#..a...",'#10'"..' + +'.#..a...",'#10'"....#a....",'#10'"..........",'#10'".........."};'#10 +]); +LazarusResources.Add('rx_markerup','XPM',[ + '/* XPM */'#10'static char *rx_mark_up[]={'#10'"10 10 4 1",'#10'"b c None",' + +#10'". c None",'#10'"# c #808080",'#10'"a c #ffffff",'#10'"..........",'#10 + +'"....#a....",'#10'"...#..a...",'#10'"...#..a...",'#10'"..#....a..",'#10'"..' + +'#....a..",'#10'".#......a.",'#10'".aaaaaaaa.",'#10'".bbbbbbbb.",'#10'".....' + +'....."};'#10 +]); + +LazarusResources.Add('menu_grid','XPM',[ + '/* XPM */'#10'static const unsigned char * menu_grid_xpm[] = {'#10'"16 16 4 1",' + +#10'" c None",'#10'"! c black",'#10'"# c #800000",'#10'"$ c #FFFF00",' + +#10'" ",'#10'" ! ",'#10'" !#! ",' + +#10'" !###! ",'#10'" !##$##! ",'#10'" !!!#$#!!! ",' + +#10'" !#$#! ",'#10'" !#$#! ",'#10'" !#$#! ",' + +#10'" !#$#! ",'#10'" !#$#! ",'#10'" !!!#$#!!! ",' + +#10'" !##$##! ",'#10'" !###! ",'#10'" !#! ",' + +#10'" ! "};'#10 +]); + diff --git a/components/rx/version/2.1/rxdbgrid.pas b/components/rx/version/2.1/rxdbgrid.pas new file mode 100644 index 000000000..41b52aebf --- /dev/null +++ b/components/rx/version/2.1/rxdbgrid.pas @@ -0,0 +1,5428 @@ +{ rxdbgrid unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +{$I rx.inc} + +unit rxdbgrid; + +interface + +uses + Classes, SysUtils, LResources, LCLVersion, LCLType, LCLIntf, Forms, Controls, Buttons, + Graphics, Dialogs, Grids, dbutils, DBGrids, DB, PropertyStorage, vclutils, + LMessages, types, StdCtrls, Menus; + +{$if ((lcl_major = 1) and (lcl_minor = 1))} + {$DEFINE RX_USE_LCL_DEVEL} +{$ENDIF} + +const + CBadQuickSearchSymbols = [VK_UNKNOWN..VK_HELP] + [VK_LWIN..VK_SLEEP] + + [VK_NUMLOCK..VK_SCROLL] + [VK_LSHIFT..VK_OEM_102] + [VK_PROCESSKEY] + + [VK_ATTN..VK_UNDEFINED]; + CCancelQuickSearchKeys = [VK_ESCAPE, VK_CANCEL, VK_DELETE, VK_INSERT, + VK_DOWN, VK_UP, VK_NEXT, VK_PRIOR, VK_TAB, VK_RETURN, VK_HOME, + VK_END, VK_SPACE, VK_MULTIPLY]; + +type + //forward declarations + TRxDBGrid = class; + TRxColumn = class; + + + TRxQuickSearchNotifyEvent = procedure(Sender: TObject; Field: TField; + var AValue: string) of object; + + TSortMarker = (smNone, smDown, smUp); + + TGetBtnParamsEvent = procedure(Sender: TObject; Field: TField; + AFont: TFont; var Background: TColor; var SortMarker: TSortMarker; + IsDown: boolean) of object; + + TGetCellPropsEvent = procedure(Sender: TObject; Field: TField; + AFont: TFont; var Background: TColor) of object; + + TRxDBGridAllowedOperation = (aoInsert, aoUpdate, aoDelete, aoAppend); + TRxDBGridAllowedOperations = set of TRxDBGridAllowedOperation; + + TRxColumnEditButtonStyle = (ebsDropDownRx, ebsEllipsisRx, ebsGlyphRx, ebsUpDownRx, + ebsPlusRx, ebsMinusRx); + + TFooterValueType = (fvtNon, fvtSum, fvtAvg, fvtCount, fvtFieldValue, + fvtStaticText, fvtMax, fvtMin, fvtRecNo); + + TOptionRx = (rdgAllowColumnsForm, + rdgAllowDialogFind, + rdgHighlightFocusCol, //TODO: + rdgHighlightFocusRow, //TODO: + rdgDblClickOptimizeColWidth, + rdgFooterRows, + rdgXORColSizing, + rdgFilter, + rdgMultiTitleLines, + rdgMrOkOnDblClik, + rdgAllowQuickSearch, + rdgAllowQuickFilter, + rdgAllowFilterForm, + rdgAllowSortForm, + rdgAllowToolMenu, + rdgCaseInsensitiveSort, + rdgWordWrap + ); + + TOptionsRx = set of TOptionRx; + + TCreateLookup = TNotifyEvent; + TDisplayLookup = TNotifyEvent; + // TDataSetClass = class of TDataSet; + + TRxDBGridCommand = (rxgcNone, rxgcShowFindDlg, rxgcShowColumnsDlg, + rxgcShowFilterDlg, rxgcShowSortDlg, rxgcShowQuickFilter, + rxgcHideQuickFilter, rxgcSelectAll, rxgcDeSelectAll, rxgcInvertSelection, + rxgcOptimizeColumnsWidth + + ); + + TRxDSState = (rxdsInactive, rxdsActive); + + TRxFilterOpCode = (fopEQ, fopNotEQ, fopStartFrom, fopEndTo, fopLike, fopNotLike); + { TRxDBGridKeyStroke } + + TRxDBGridKeyStroke = class(TCollectionItem) + private + FCommand: TRxDBGridCommand; + FEnabled: boolean; + FShortCut: TShortCut; + FKey: word; // Virtual keycode, i.e. VK_xxx + FShift: TShiftState; + procedure SetCommand(const AValue: TRxDBGridCommand); + procedure SetShortCut(const AValue: TShortCut); + protected + function GetDisplayName: string; override; + public + procedure Assign(Source: TPersistent); override; + published + property Command: TRxDBGridCommand read FCommand write SetCommand; + property ShortCut: TShortCut read FShortCut write SetShortCut; + property Enabled: boolean read FEnabled write FEnabled; + end; + + { TRxDBGridKeyStrokes } + + TRxDBGridKeyStrokes = class(TOwnedCollection) + private + function GetItem(Index: integer): TRxDBGridKeyStroke; + procedure SetItem(Index: integer; const AValue: TRxDBGridKeyStroke); + protected + procedure Update(Item: TCollectionItem); override; + public + constructor Create(AOwner: TPersistent); + procedure Assign(Source: TPersistent); override; + function Add: TRxDBGridKeyStroke; + function AddE(ACommand: TRxDBGridCommand; AShortCut: TShortCut): TRxDBGridKeyStroke; + procedure ResetDefaults; + function FindRxCommand(AKey: word; AShift: TShiftState): TRxDBGridCommand; + function FindRxKeyStrokes(ACommand: TRxDBGridCommand): TRxDBGridKeyStroke; + public + property Items[Index: integer]: TRxDBGridKeyStroke read GetItem write SetItem; default; + end; + + { TRxDBGridFooterOptions } + + TRxDBGridFooterOptions = class(TPersistent) + private + FActive: boolean; + FColor: TColor; + FOwner: TRxDBGrid; + FRowCount: integer; + FStyle: TTitleStyle; + procedure SetActive(AValue: boolean); + procedure SetColor(AValue: TColor); + procedure SetRowCount(AValue: integer); + procedure SetStyle(AValue: TTitleStyle); + protected + procedure AssignTo(Dest: TPersistent); override; + public + constructor Create(Owner: TRxDBGrid); + destructor Destroy; override; + published + property Active: boolean read FActive write SetActive default false; + property Color: TColor read FColor write SetColor default clWindow; + property RowCount: integer read FRowCount write SetRowCount default 0; + property Style: TTitleStyle read FStyle write SetStyle default tsLazarus; + end; + + + { TRxDBGridSortEngine } + TRxSortEngineOption = (seoCaseInsensitiveSort); + TRxSortEngineOptions = set of TRxSortEngineOption; + + TRxDBGridSortEngine = class + protected + FGrid:TRxDBGrid; + procedure UpdateFooterRows(ADataSet:TDataSet; AGrid:TRxDBGrid);virtual; abstract; + function EnabledFooterRowsCalc:boolean;virtual; + public + procedure Sort(Field: TField; ADataSet: TDataSet; Asc: boolean; SortOptions: TRxSortEngineOptions); virtual; abstract; + procedure SortList(ListField: string; ADataSet: TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions); virtual; + end; + + TRxDBGridSortEngineClass = class of TRxDBGridSortEngine; + + TMLCaptionItem = class + Caption: string; + Width: integer; + Hegth: integer; + Next: TMLCaptionItem; + Prior: TMLCaptionItem; + FInvalidDraw:integer; + Col: TGridColumn; + end; + + { TRxColumnTitle } + TRxColumnTitle = class(TColumnTitle) + private + FHint: string; + FOrientation: TTextOrientation; + FShowHint: boolean; + FCaptionLines: TFPList; + function GetCaptionLinesCount: integer; + procedure SetOrientation(const AValue: TTextOrientation); + procedure ClearCaptionML; + protected + procedure SetCaption(const AValue: TCaption); override; + public + constructor Create(TheColumn: TGridColumn); override; + destructor Destroy; override; + property CaptionLinesCount: integer read GetCaptionLinesCount; + function CaptionLine(ALine: integer): TMLCaptionItem; + published + property Orientation: TTextOrientation read FOrientation write SetOrientation; + property Hint: string read FHint write FHint; + property ShowHint: boolean read FShowHint write FShowHint default False; + end; + + { TRxColumnFooter } + + TRxColumnFooter = class(TPersistent) + private + FLayout: TTextLayout; + FOwner: TRxColumn; + FAlignment: TAlignment; + FDisplayFormat: string; + FFieldName: string; + FValue: string; + FValueType: TFooterValueType; + FTestValue: double; + FCountRec:integer; + procedure SetAlignment(const AValue: TAlignment); + procedure SetDisplayFormat(const AValue: string); + procedure SetFieldName(const AValue: string); + procedure SetLayout(const AValue: TTextLayout); + procedure SetValue(const AValue: string); + procedure SetValueType(const AValue: TFooterValueType); + function DisplayText: string; + function GetFieldValue: string; + function GetRecordsCount: string; + function GetRecNo: string; + function GetStatTotal: string; + procedure ResetTestValue; + procedure UpdateTestValue; + + function DeleteTestValue: boolean; + function PostTestValue: boolean; + function ErrorTestValue: boolean; + protected + procedure UpdateTestValueFromVar(AValue:Variant); + public + constructor Create(Owner: TRxColumn); + property Owner: TRxColumn read FOwner; + property NumericValue: double read FTestValue; + published + property Alignment: TAlignment read FAlignment write SetAlignment default + taLeftJustify; + property Layout: TTextLayout read FLayout write SetLayout default tlCenter; + property DisplayFormat: string read FDisplayFormat write SetDisplayFormat; + property FieldName: string read FFieldName write SetFieldName; + property Value: string read FValue write SetValue; + property ValueType: TFooterValueType + read FValueType write SetValueType default fvtNon; + end; + + + { TRxFilterItem } + + TRxFilterItem = class + FVAlue:string; + FCol:TRxColumn; + OpCode:TRxFilterOpCode; + function TestValue:Boolean; + end; + + { TRxFilterItems } + + TRxFilterItems = class(TFPList) + function AcceptRecord:boolean; + end; + + { TRxColumnFilter } + + TRxColumnFilter = class(TPersistent) + private + FEnabled: boolean; + FOwner: TRxColumn; + FValue: string; + FValueList: TStringList; + FEmptyValue: string; + FEmptyFont: TFont; + FFont: TFont; + FAlignment: TAlignment; + FDropDownRows: integer; + FColor: TColor; + function GetItemIndex: integer; + procedure SetColor(const AValue: TColor); + procedure SetFont(const AValue: TFont); + procedure SetItemIndex(const AValue: integer); + public + constructor Create(Owner: TRxColumn); virtual; + destructor Destroy; override; + published + property Value: string read FValue write FValue; + property Font: TFont read FFont write SetFont; + property Alignment: TAlignment read FAlignment write FAlignment default + taLeftJustify; + property DropDownRows: integer read FDropDownRows write FDropDownRows; + property Color: TColor read FColor write SetColor default clWhite; + property ValueList: TStringList read FValueList write FValueList; + property EmptyValue: string read FEmptyValue write FEmptyValue; + property EmptyFont: TFont read FEmptyFont write FEmptyFont; + property ItemIndex: integer read GetItemIndex write SetItemIndex; + property Enabled:boolean read FEnabled write FEnabled default true; + end; + + { TRxColumnEditButton } + + TRxColumnEditButton = class(TCollectionItem) + private + FShortCut: TShortCut; + FStyle: TRxColumnEditButtonStyle; + FButton:TSpeedButton; + FVisible: Boolean; + function GetGlyph: TBitmap; + function GetHint: String; + function GetNumGlyphs: Integer; + function GetOnButtonClick: TNotifyEvent; + function GetWidth: Integer; + procedure SetGlyph(AValue: TBitmap); + procedure SetHint(AValue: String); + procedure SetNumGlyphs(AValue: Integer); + procedure SetOnButtonClick(AValue: TNotifyEvent); + procedure SetStyle(AValue: TRxColumnEditButtonStyle); + procedure SetVisible(AValue: Boolean); + procedure SetWidth(AValue: Integer); + protected + function GetDisplayName: string; override; + public + constructor Create(ACollection: TCollection); override; + destructor Destroy; override; + published + //property DropdownMenu: TPopupMenu read FDropdownMenu write FDropdownMenu; :TODO: + property Glyph: TBitmap read GetGlyph write SetGlyph; + property Hint: String read GetHint write SetHint; + property NumGlyphs: Integer read GetNumGlyphs write SetNumGlyphs default 1; + property ShortCut: TShortCut read FShortCut write FShortCut default scNone; + property Style: TRxColumnEditButtonStyle read FStyle write SetStyle default ebsDropDownRx; + property Visible: Boolean read FVisible write SetVisible default true; + property Width: Integer read GetWidth write SetWidth default 15; + property OnClick: TNotifyEvent read GetOnButtonClick write SetOnButtonClick; + //property OnDown: TNotifyEvent read FOnButtonDown write FOnButtonDown; + end; + + TRxColumnEditButtons = class(TCollection) + private + FOwner: TPersistent; + function GetItem(Index: integer): TRxColumnEditButton; + procedure SetItem(Index: integer; AValue: TRxColumnEditButton); + protected + procedure Update(Item: TCollectionItem); override; + public + constructor Create(AOwner: TPersistent); + function Add: TRxColumnEditButton; + public + property Items[Index: integer]: TRxColumnEditButton read GetItem write SetItem; default; + end; + + { TRxColumn } + + TRxColumn = class(TColumn) + private + FDirectInput: boolean; + FEditButtons: TRxColumnEditButtons; + FFooter: TRxColumnFooter; + FFilter: TRxColumnFilter; + FImageList: TImageList; + FKeyList: TStrings; + FNotInKeyListIndex: integer; + FOnDrawColumnCell: TDrawColumnCellEvent; + FSortOrder: TSortMarker; + FSortPosition: integer; + FWordWrap: boolean; + function GetFooter: TRxColumnFooter; + function GetKeyList: TStrings; + procedure SetEditButtons(AValue: TRxColumnEditButtons); + procedure SetFilter(const AValue: TRxColumnFilter); + procedure SetFooter(const AValue: TRxColumnFooter); + procedure SetImageList(const AValue: TImageList); + procedure SetKeyList(const AValue: TStrings); + procedure SetNotInKeyListIndex(const AValue: integer); + procedure SetWordWrap(AValue: boolean); + protected + function CreateTitle: TGridColumnTitle; override; + public + constructor Create(ACollection: TCollection); override; + destructor Destroy; override; + procedure OptimizeWidth; + property SortOrder: TSortMarker read FSortOrder write FSortOrder; + property SortPosition: integer read FSortPosition; + published + property Footer: TRxColumnFooter read GetFooter write SetFooter; + property ImageList: TImageList read FImageList write SetImageList; + property KeyList: TStrings read GetKeyList write SetKeyList; + property NotInKeyListIndex: integer read FNotInKeyListIndex + write SetNotInKeyListIndex default -1; + property Filter: TRxColumnFilter read FFilter write SetFilter; + property DirectInput : boolean read FDirectInput write FDirectInput default true; + property EditButtons:TRxColumnEditButtons read FEditButtons write SetEditButtons; + property OnDrawColumnCell: TDrawColumnCellEvent read FOnDrawColumnCell write FOnDrawColumnCell; + property WordWrap:boolean read FWordWrap write SetWordWrap default false; + end; + + { TRxDbGridColumns } + TRxDbGridColumns = class(TDbGridColumns) + protected + procedure Notify(Item: TCollectionItem;Action: TCollectionNotification); override; + public + function Add: TRxColumn; + end; + + { TRxDbGridColumnsSortList } + + TRxDbGridColumnsSortList = class(TFPList) + private + function GetCollumn(Index: Integer): TRxColumn; + public + property Collumn[Index: Integer]: TRxColumn read GetCollumn; default; + end; + + { TFilterListCellEditor } + + TFilterListCellEditor = class(TComboBox) + private + FGrid: TCustomGrid; + FCol: integer; + FMouseFlag: boolean; + protected + procedure WndProc(var TheMessage: TLMessage); override; + procedure KeyDown(var Key: word; Shift: TShiftState); override; + public + procedure Show(Grid: TCustomGrid; Col: integer); + property Grid: TCustomGrid read FGrid; + property Col: integer read FCol; + property MouseFlag: boolean read FMouseFlag write FMouseFlag; + end; + + + + { TRxDBGrid } + TRxDBGrid = class(TCustomDBGrid) + private + FrxDSState:TRxDSState; + FFooterOptions: TRxDBGridFooterOptions; + FSortColumns: TRxDbGridColumnsSortList; + FSortingNow:Boolean; + FInProcessCalc: integer; + FAllowedOperations: TRxDBGridAllowedOperations; + // + FKeyStrokes: TRxDBGridKeyStrokes; + FOnGetCellProps: TGetCellPropsEvent; + FOptionsRx: TOptionsRx; + // FTitleLines: Integer; + + FOnGetBtnParams: TGetBtnParamsEvent; + FOnFiltred: TNotifyEvent; + //auto sort support + + FMarkerUp : TBitmap; + FMarkerDown : TBitmap; + FAutoSort : boolean; + FSortEngine : TRxDBGridSortEngine; + FPressedCol : TRxColumn; + // + FPressed: boolean; + FSwapButtons: boolean; + FTracking: boolean; + FDrawFullLine: boolean; + + F_Clicked: boolean; + F_PopupMenu: TPopupMenu; + F_MenuBMP: TBitmap; + + F_EventOnFilterRec: TFilterRecordEvent; + F_EventOnBeforeDelete: TDataSetNotifyEvent; + F_EventOnBeforePost: TDataSetNotifyEvent; + F_EventOnDeleteError: TDataSetErrorEvent; + F_EventOnPostError: TDataSetErrorEvent; + F_LastFilter: TStringList; + //F_SortListField: TStringList; + F_CreateLookup: TCreateLookup; + F_DisplayLookup: TDisplayLookup; + + //storage + //Column resize + FColumnResizing: boolean; + + FFilterListEditor: TFilterListCellEditor; + + FOldPosition: Integer; + FVersion: integer; + FPropertyStorageLink: TPropertyStorageLink; + FRxDbGridLookupComboEditor: TCustomControl; + FRxDbGridDateEditor: TWinControl; + + FAfterQuickSearch: TRxQuickSearchNotifyEvent; + FBeforeQuickSearch: TRxQuickSearchNotifyEvent; + FQuickUTF8Search: string; + FOldDataSetState:TDataSetState; + + procedure DoCreateJMenu; + function GetColumns: TRxDbGridColumns; + function GetFooterColor: TColor; + function GetFooterRowCount: integer; + function GetMarkerDown: TBitmap; + function GetMarkerUp: TBitmap; + function GetPropertyStorage: TCustomPropertyStorage; + function GetSortField: string; + function GetSortOrder: TSortMarker; + function GetTitleButtons: boolean; + function IsColumnsStored: boolean; + procedure SetAutoSort(const AValue: boolean); + procedure SetColumns(const AValue: TRxDbGridColumns); + procedure SetFooterColor(const AValue: TColor); + procedure SetFooterOptions(AValue: TRxDBGridFooterOptions); + procedure SetFooterRowCount(const AValue: integer); + procedure SetKeyStrokes(const AValue: TRxDBGridKeyStrokes); + procedure SetMarkerDown(AValue: TBitmap); + procedure SetMarkerUp(AValue: TBitmap); + procedure SetOptionsRx(const AValue: TOptionsRx); + procedure SetPropertyStorage(const AValue: TCustomPropertyStorage); + procedure SetTitleButtons(const AValue: boolean); + procedure TrackButton(X, Y: integer); + function GetDrawFullLine: boolean; + procedure SetDrawFullLine(Value: boolean); + procedure StopTracking; + procedure CalcTitle; + procedure ClearMLCaptionPointers; + function getFilterRect(bRect: TRect): TRect; + function getTitleRect(bRect: TRect): TRect; + procedure OutCaptionCellText(aCol, aRow: integer; const aRect: TRect; + aState: TGridDrawState; const ACaption: string); + procedure OutCaptionCellText90(aCol, aRow: integer; const aRect: TRect; + aState: TGridDrawState; const ACaption: string; + const TextOrient: TTextOrientation); + procedure OutCaptionSortMarker(const aRect: TRect; ASortMarker: TSortMarker; ASortPosition:integer); + procedure OutCaptionMLCellText(aCol, aRow: integer; aRect: TRect; + aState: TGridDrawState; MLI: TMLCaptionItem); + procedure UpdateJMenuStates; + procedure UpdateJMenuKeys; + function SortEngineOptions: TRxSortEngineOptions; + procedure WMVScroll(var Message : TLMVScroll); message LM_VScroll; + procedure GetScrollbarParams(out aRange, aPage, aPos: Integer); + procedure RestoreEditor; + //storage + procedure OnIniSave(Sender: TObject); + procedure OnIniLoad(Sender: TObject); + + procedure CleanDSEvent; + + + function UpdateRowsHeight:integer; + procedure ResetRowHeght; + + procedure DoClearInvalidTitle; + procedure DoDrawInvalidTitle; + procedure DoSetColEdtBtn; + protected + procedure CollumnSortListUpdate; + procedure CollumnSortListClear; + procedure CollumnSortListApply; + + function DatalinkActive: boolean; + procedure AdjustEditorBounds(NewCol,NewRow:Integer); override; + procedure LinkActive(Value: Boolean); override; + + procedure DefaultDrawCellA(aCol, aRow: integer; aRect: TRect; + aState: TGridDrawState); + procedure DefaultDrawTitle(aCol, aRow: integer; aRect: TRect; + aState: TGridDrawState); + procedure DefaultDrawFilter(aCol, aRow: integer; aRect: TRect; + aState: TGridDrawState); + procedure DefaultDrawCellData(aCol, aRow: integer; aRect: TRect; + aState: TGridDrawState); + procedure DrawCell(aCol, aRow: integer; aRect: TRect; aState: TGridDrawState); + override; + procedure SetDBHandlers(Value: boolean);virtual; + + procedure DrawFooterRows; virtual; + + procedure DoTitleClick(ACol: longint; ACollumn: TRxColumn; Shift: TShiftState); virtual; + procedure MouseMove(Shift: TShiftState; X, Y: integer); override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: integer); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: integer); override; + procedure KeyDown(var Key: word; Shift: TShiftState); override; + procedure UTF8KeyPress(var UTF8Key: TUTF8Char); override; + function CreateColumns: TGridColumns; override; + procedure DrawCellBitmap(RxColumn: TRxColumn; aRect: TRect; + aState: TGridDrawState; AImageIndex: integer); virtual; + procedure SetEditText(ACol, ARow: longint; const Value: string); override; + procedure CheckNewCachedSizes(var AGCache: TGridDataCache); override; + procedure ColRowMoved(IsColumn: boolean; FromIndex, ToIndex: integer); override; + procedure Paint; override; + procedure UpdateActive; override; + procedure UpdateData; override; + procedure MoveSelection; override; +{$IFDEF RX_USE_LCL_DEVEL} + function GetBufferCount: integer; override; +{$ENDIF} + procedure CMHintShow(var Message: TLMessage); message CM_HINTSHOW; + procedure FFilterListEditorOnChange(Sender: TObject); + procedure FFilterListEditorOnCloseUp(Sender: TObject); + procedure InternalOptimizeColumnsWidth(AColList: TList); + function IsDefaultRowHeightStored: boolean; + procedure VisualChange; override; + procedure EditorWidthChanged(aCol,aWidth: Integer); override; + + procedure SetQuickUTF8Search(AValue: string); + procedure BeforeDel(DataSet: TDataSet); + procedure BeforePo(DataSet: TDataSet); + procedure ErrorDel(DataSet: TDataSet; E: EDatabaseError; + var DataAction: TDataAction); + procedure ErrorPo(DataSet: TDataSet; E: EDatabaseError; var DataAction: TDataAction); + procedure OnFind(Sender: TObject); + procedure OnFilterBy(Sender: TObject); + procedure OnFilter(Sender: TObject); + procedure OnFilterClose(Sender: TObject); + procedure OnSortBy(Sender: TObject); + procedure OnChooseVisibleFields(Sender: TObject); + procedure OnSelectAllRows(Sender: TObject); + procedure Loaded; override; + procedure UpdateFooterRowOnUpdateActive; + + procedure DoEditorHide; override; + procedure DoEditorShow; override; + + procedure EraseBackground(DC: HDC); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + + procedure FilterRec(DataSet: TDataSet; var Accept: boolean); + function EditorByStyle(Style: TColumnButtonStyle): TWinControl; override; + procedure LayoutChanged; override; + procedure SetFocus; override; + procedure ShowFindDialog; + procedure ShowColumnsDialog; + procedure ShowSortDialog; + procedure ShowFilterDialog; + function ColumnByFieldName(AFieldName: string): TRxColumn; + function ColumnByCaption(ACaption: string): TRxColumn; + procedure CalcStatTotals; + procedure OptimizeColumnsWidth(AColList: string); + procedure OptimizeColumnsWidthAll; + procedure UpdateTitleHight; + procedure GetOnCreateLookup; + procedure GetOnDisplayLookup; + procedure SelectAllRows; + procedure DeSelectAllRows; + procedure InvertSelection; + + property Canvas; + property DefaultTextStyle; + property EditorBorderStyle; + property EditorMode; + property ExtendedColSizing; + property FastEditing; + property FocusRectVisible; + property SelectedRows; + property QuickUTF8Search: string read FQuickUTF8Search write SetQuickUTF8Search; + + property SortField:string read GetSortField; + property SortOrder:TSortMarker read GetSortOrder; + + property SortColumns:TRxDbGridColumnsSortList read FSortColumns; + property MarkerUp : TBitmap read GetMarkerUp write SetMarkerUp; + property MarkerDown : TBitmap read GetMarkerDown write SetMarkerDown; + published + property AfterQuickSearch: TRxQuickSearchNotifyEvent + read FAfterQuickSearch write FAfterQuickSearch; + property BeforeQuickSearch: TRxQuickSearchNotifyEvent + read FBeforeQuickSearch write FBeforeQuickSearch; + property OnGetBtnParams: TGetBtnParamsEvent + read FOnGetBtnParams write FOnGetBtnParams; + property TitleButtons: boolean read GetTitleButtons write SetTitleButtons; + property AutoSort: boolean read FAutoSort write SetAutoSort; + property OnGetCellProps: TGetCellPropsEvent + read FOnGetCellProps write FOnGetCellProps; + property Columns: TRxDbGridColumns + read GetColumns write SetColumns stored IsColumnsStored; + property KeyStrokes: TRxDBGridKeyStrokes read FKeyStrokes write SetKeyStrokes; + property FooterOptions:TRxDBGridFooterOptions read FFooterOptions write SetFooterOptions; + + //storage + property PropertyStorage: TCustomPropertyStorage + read GetPropertyStorage write SetPropertyStorage; + property Version: integer read FVersion write FVersion default 0; + property AllowedOperations: TRxDBGridAllowedOperations + read FAllowedOperations write FAllowedOperations default + [aoInsert, aoUpdate, aoDelete, aoAppend]; + property OptionsRx: TOptionsRx read FOptionsRx write SetOptionsRx; + property FooterColor: TColor read GetFooterColor write SetFooterColor default clWindow; deprecated; + property FooterRowCount: integer read GetFooterRowCount write SetFooterRowCount default 0; deprecated; + + property OnFiltred: TNotifyEvent read FOnFiltred write FOnFiltred; + + //from DBGrid + property Align; + property AlternateColor; + property Anchors; + property AutoAdvance default aaRightDown; + property AutoFillColumns; + property AutoEdit; + property BiDiMode; + property BorderSpacing; + property BorderStyle; + property Color; + property BorderColor; + property DrawFullLine: boolean read GetDrawFullLine write SetDrawFullLine; + property FocusColor; + property FixedHotColor; + + property SelectedColor; + property GridLineColor; + property GridLineStyle; + + property Constraints; + property DataSource; + property DefaultDrawing; + property DefaultRowHeight; // stored IsDefaultRowHeightStored; + property DragCursor; + property DragKind; + property DragMode; + property Enabled; + property FixedColor; + property FixedCols; + property Flat; + property Font; + property HeaderHotZones; + property HeaderPushZones; + //property ImeMode; + //property ImeName; + property Options; + property OptionsExtra; + property ParentBiDiMode; + property ParentColor; + //property ParentCtl3D; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ReadOnly; + property Scrollbars default ssBoth; + property ShowHint; + property TabOrder; + property TabStop; + property TitleFont; + property TitleImageList; + property TitleStyle; + property UseXORFeatures; + property Visible; + + property OnCellClick; + property OnColEnter; + property OnColExit; + property OnColumnMoved; + property OnColumnSized; + property OnDragDrop; + property OnDragOver; + property OnDrawColumnCell; + property OnDblClick; + property OnEditButtonClick; + property OnEndDock; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnFieldEditMask; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnPrepareCanvas; + property OnSelectEditor; + property OnStartDock; + property OnStartDrag; + property OnTitleClick; + property OnUserCheckboxBitmap; + property OnUTF8KeyPress; + + property OnCreateLookup: TCreateLookup read F_CreateLookup write F_CreateLookup; + property OnDisplayLookup: TDisplayLookup read F_DisplayLookup write F_DisplayLookup; + end; + +procedure RegisterRxDBGridSortEngine(RxDBGridSortEngineClass: TRxDBGridSortEngineClass; + DataSetClassName: string); + +implementation + +uses Math, rxdconst, rxstrutils, rxdbgrid_findunit, rxdbgrid_columsunit, + rxlookup, tooledit, LCLProc, rxfilterby, rxsortby, variants; + +const + EditorCommandStrs: array[0..10] of TIdentMapEntry = + ( + (Value: Ord(rxgcNone); Name: 'rxcgNone'), + (Value: Ord(rxgcShowFindDlg); Name: 'rxgcShowFindDlg'), + (Value: Ord(rxgcShowColumnsDlg); Name: 'rxgcShowColumnsDlg'), + (Value: Ord(rxgcShowFilterDlg); Name: 'rxgcShowFilterDlg'), + (Value: Ord(rxgcShowSortDlg); Name: 'rxgcShowSortDlg'), + (Value: Ord(rxgcShowQuickFilter); Name: 'rxgcShowQuickFilter'), + (Value: Ord(rxgcHideQuickFilter); Name: 'rxgcHideQuickFilter'), + (Value: Ord(rxgcSelectAll); Name: 'rxgcSelectAll'), + (Value: Ord(rxgcDeSelectAll); Name: 'rxgcDeSelectAll'), + (Value: Ord(rxgcInvertSelection); Name: 'rxgcInvertSelection'), + (Value: Ord(rxgcOptimizeColumnsWidth); Name: 'rxgcOptimizeColumnsWidth') + ); + +var + RxDBGridSortEngineList: TStringList; + +procedure RegisterRxDBGridSortEngine( + RxDBGridSortEngineClass: TRxDBGridSortEngineClass; DataSetClassName: string); +var + Pos: integer; + RxDBGridSortEngine: TRxDBGridSortEngine; +begin + if not RxDBGridSortEngineList.Find(DataSetClassName, Pos) then + begin + RxDBGridSortEngine := RxDBGridSortEngineClass.Create; + RxDBGridSortEngineList.AddObject(DataSetClassName, RxDBGridSortEngine); + end; +end; + +procedure GridInvalidateRow(Grid: TRxDBGrid; Row: longint); +var + I: longint; +begin + for I := 0 to Grid.ColCount - 1 do + Grid.InvalidateCell(I, Row); +end; + +type + THackDataLink = class(TDataLink); + THackDataSet = class(TDataSet); + + +type + + { TRxDBGridLookupComboEditor } + + TRxDBGridLookupComboEditor = class(TRxCustomDBLookupCombo) + private + FGrid: TRxDBGrid; + FCol, FRow: integer; + FLDS: TDataSource; + protected + procedure WndProc(var TheMessage: TLMessage); override; + procedure KeyDown(var Key: word; Shift: TShiftState); override; + procedure msg_SetGrid(var Msg: TGridMessage); message GM_SETGRID; + procedure msg_SetValue(var Msg: TGridMessage); message GM_SETVALUE; + procedure msg_GetValue(var Msg: TGridMessage); message GM_GETVALUE; + procedure OnInternalClosePopup(AResult:boolean);override; + procedure ShowList; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + end; + + { TRxDBGridDateEditor } + TRxDBGridDateEditor = class(TCustomRxDateEdit) + private + FGrid: TRxDBGrid; + FCol, FRow: integer; + protected + procedure Change; override; + procedure KeyDown(var Key: word; Shift: TShiftState); override; + + procedure WndProc(var TheMessage: TLMessage); override; + procedure msg_SetGrid(var Msg: TGridMessage); message GM_SETGRID; + procedure msg_SetValue(var Msg: TGridMessage); message GM_SETVALUE; + procedure msg_GetValue(var Msg: TGridMessage); message GM_GETVALUE; + procedure msg_SelectAll(var Msg: TGridMessage); message GM_SELECTALL; + + public + constructor Create(Aowner : TComponent); override; + //procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override; + procedure EditingDone; override; + end; + +{ TRxFilterItems } + +function TRxFilterItems.AcceptRecord: boolean; +var + i:integer; +begin + Result:=true; + for i:=0 to Count-1 do + begin + if not TRxFilterItem(Items[i]).TestValue then + begin + Result:=false; + exit; + end; + end; +end; + +{ TRxFilterItem } + +function TRxFilterItem.TestValue: Boolean; +var + ATestValue: string; +begin + ATestValue:=FCol.Field.DisplayText; + case OpCode of + fopEQ:Result:=ATestValue = FVAlue; + fopNotEQ:Result:=ATestValue <> FVAlue; + fopStartFrom:Result:=UTF8Copy(ATestValue, 1, UTF8Length(FVAlue)) = FVAlue; + fopEndTo:Result:=Copy(ATestValue, UTF8Length(ATestValue) - UTF8Length(FVAlue), UTF8Length(FVAlue)) = FVAlue; + fopLike:Result:=UTF8Pos(FVAlue, ATestValue) > 0; + fopNotLike:Result:=UTF8Pos(FVAlue, ATestValue) = 0; + else + Result:=false; + end; +end; + +{ TRxDbGridColumnsSortList } + +function TRxDbGridColumnsSortList.GetCollumn(Index: Integer): TRxColumn; +begin + Result:=TRxColumn(Items[Index]); +end; + +{ TRxColumnEditButton } + +function TRxColumnEditButton.GetGlyph: TBitmap; +begin + Result:=FButton.Glyph; +end; + +function TRxColumnEditButton.GetHint: String; +begin + Result:=FButton.Hint; +end; + +function TRxColumnEditButton.GetNumGlyphs: Integer; +begin + Result:=FButton.NumGlyphs; +end; + +function TRxColumnEditButton.GetOnButtonClick: TNotifyEvent; +begin + Result:=FButton.OnClick; +end; + +function TRxColumnEditButton.GetWidth: Integer; +begin + Result:=FButton.Width; +end; + +procedure TRxColumnEditButton.SetGlyph(AValue: TBitmap); +begin + FButton.Glyph.Assign(AValue); + if not (csLoading in TRxDBGrid(TRxColumnEditButtons(Collection).Owner).ComponentState) then + FStyle:=ebsGlyphRx; +end; + +procedure TRxColumnEditButton.SetHint(AValue: String); +begin + FButton.Hint:=AValue; +end; + +procedure TRxColumnEditButton.SetNumGlyphs(AValue: Integer); +begin + FButton.NumGlyphs:=AValue; +end; + +procedure TRxColumnEditButton.SetOnButtonClick(AValue: TNotifyEvent); +begin + FButton.OnClick:=AValue; +end; + +procedure TRxColumnEditButton.SetStyle(AValue: TRxColumnEditButtonStyle); +begin + if FStyle=AValue then Exit; + FStyle:=AValue; +end; + +procedure TRxColumnEditButton.SetVisible(AValue: Boolean); +begin + if FVisible=AValue then Exit; + FVisible:=AValue; + FButton.Visible:=AValue; +end; + +procedure TRxColumnEditButton.SetWidth(AValue: Integer); +begin + FButton.Width:=AValue; +end; + +function TRxColumnEditButton.GetDisplayName: string; +begin + if Hint<>'' then + Result:=Hint + else + Result:='TRxColumnEditButton'; +end; + +constructor TRxColumnEditButton.Create(ACollection: TCollection); +begin + inherited Create(ACollection); + FButton:=TSpeedButton.Create(nil); + FButton.Glyph:=LoadLazResBitmapImage('rx_markerdown'); + FVisible:=true; + Width:=15; +end; + +destructor TRxColumnEditButton.Destroy; +begin + FreeAndNil(FButton); + inherited Destroy; +end; + +{ TRxColumnEditButtons } + +function TRxColumnEditButtons.GetItem(Index: integer): TRxColumnEditButton; +begin + Result:= TRxColumnEditButton(inherited Items[Index]); +end; + +procedure TRxColumnEditButtons.SetItem(Index: integer; + AValue: TRxColumnEditButton); +begin + inherited SetItem(Index, AValue); +end; + +procedure TRxColumnEditButtons.Update(Item: TCollectionItem); +begin + inherited Update(Item); +end; + +constructor TRxColumnEditButtons.Create(AOwner: TPersistent); +begin + inherited Create(TRxColumnEditButton); + FOwner:=AOwner; +end; + +function TRxColumnEditButtons.Add: TRxColumnEditButton; +begin + Result := TRxColumnEditButton(inherited Add); +end; + +{ TRxDBGridFooterOptions } + +procedure TRxDBGridFooterOptions.SetActive(AValue: boolean); +begin + if FActive=AValue then Exit; + FActive:=AValue; + + { TODO : УÑтаревший код - в Ñледующей верÑии необходимо убрать } + if FActive then + FOwner.FOptionsRx:=FOwner.FOptionsRx + [rdgFooterRows] + else + FOwner.FOptionsRx:=FOwner.FOptionsRx - [rdgFooterRows]; + + FOwner.VisualChange; +end; + +procedure TRxDBGridFooterOptions.SetColor(AValue: TColor); +begin + if FColor=AValue then Exit; + FColor:=AValue; + FOwner.Invalidate; +end; + +procedure TRxDBGridFooterOptions.SetRowCount(AValue: integer); +begin + if FRowCount=AValue then Exit; + FRowCount:=AValue; + FOwner.VisualChange; +end; + +procedure TRxDBGridFooterOptions.SetStyle(AValue: TTitleStyle); +begin + if FStyle=AValue then Exit; + FStyle:=AValue; +end; + +procedure TRxDBGridFooterOptions.AssignTo(Dest: TPersistent); +var + FO:TRxDBGridFooterOptions absolute Dest; +begin + if Dest is TRxDBGridFooterOptions then + begin + FO.Active:=Active; + FO.Color:=Color; + FO.RowCount:=RowCount; + FO.Style:=Style; + end + else + inherited AssignTo(Dest); +end; + +constructor TRxDBGridFooterOptions.Create(Owner: TRxDBGrid); +begin + inherited Create; + FOwner:=Owner; + + FColor := clWindow; + FRowCount := 0; + FStyle := tsLazarus; +end; + +destructor TRxDBGridFooterOptions.Destroy; +begin + inherited Destroy; +end; + + +{ TRxDBGridDateEditor } + +procedure TRxDBGridDateEditor.Change; +var + D:TDateTime; +begin + inherited Change; + if Assigned(FGrid) and FGrid.DatalinkActive and not FGrid.EditorIsReadOnly then + begin + if not (FGrid.DataSource.DataSet.State in dsEditModes) then + FGrid.DataSource.Edit; + if Self.Text <> '' then + FGrid.SelectedField.AsDateTime := Self.Date + else + FGrid.SelectedField.Clear; + + if FGrid <> nil then + begin + if TryStrToDate(Text, D) then + FGrid.SetEditText(FCol, FRow, Text) + else + FGrid.SetEditText(FCol, FRow, ''); + end; + end; +end; + +procedure TRxDBGridDateEditor.KeyDown(var Key: word; Shift: TShiftState); + + function AllSelected: boolean; + begin + Result := (SelLength > 0) and (SelLength = UTF8Length(Text)); + end; + + function AtStart: boolean; + begin + Result := (SelStart = 0); + end; + + function AtEnd: boolean; + begin + Result := ((SelStart + 1) > UTF8Length(Text)) or AllSelected; + end; + + procedure doEditorKeyDown; + begin + if FGrid <> nil then + FGrid.EditorkeyDown(Self, key, shift); + end; + + procedure doGridKeyDown; + begin + if FGrid <> nil then + FGrid.KeyDown(Key, shift); + end; + + function GetFastEntry: boolean; + begin + if FGrid <> nil then + Result := FGrid.FastEditing + else + Result := False; + end; + + procedure CheckEditingKey; + begin + if (FGrid = nil) or FGrid.EditorIsReadOnly then + Key := 0; + end; + +var + IntSel: boolean; +begin + inherited KeyDown(Key, Shift); + case Key of + VK_F2: + if AllSelected then + begin + SelLength := 0; + SelStart := Length(Text); + end; + VK_DELETE: + CheckEditingKey; + VK_UP, VK_DOWN: + doGridKeyDown; + VK_LEFT, VK_RIGHT: + if GetFastEntry then + begin + IntSel := + ((Key = VK_LEFT) and not AtStart) or ((Key = VK_RIGHT) and not AtEnd); + if not IntSel then + begin + doGridKeyDown; + end; + end; + VK_END, VK_HOME: + ; + else + doEditorKeyDown; + end; +end; + +procedure TRxDBGridDateEditor.WndProc(var TheMessage: TLMessage); +begin + if FGrid<>nil then + case TheMessage.Msg of + LM_CLEAR, + LM_CUT, + LM_PASTE: + begin + if FGrid.EditorIsReadOnly then + exit; + end; + end; + + if TheMessage.msg = LM_KILLFOCUS then + begin + if HWND(TheMessage.WParam) = HWND(Handle) then + begin + // lost the focus but it returns to ourselves + // eat the message. + TheMessage.Result := 0; + exit; + end; + end; + inherited WndProc(TheMessage); +end; + +procedure TRxDBGridDateEditor.msg_SetGrid(var Msg: TGridMessage); +begin + FGrid := Msg.Grid as TRxDBGrid; + Msg.Options := EO_AUTOSIZE or EO_SELECTALL + {or EO_HOOKEXIT or EO_HOOKKEYPRESS or EO_HOOKKEYUP}; +end; + +procedure TRxDBGridDateEditor.msg_SetValue(var Msg: TGridMessage); +begin + Self.Date := FGrid.SelectedField.AsDateTime; +end; + +procedure TRxDBGridDateEditor.msg_GetValue(var Msg: TGridMessage); +var + sText: string; +begin + sText := Text; + Msg.Value := sText; +end; + +procedure TRxDBGridDateEditor.msg_SelectAll(var Msg: TGridMessage); +begin + SelectAll; +end; + +constructor TRxDBGridDateEditor.Create(Aowner: TComponent); +begin + inherited Create(Aowner); + AutoSize := false; + UpdateMask; +end; + + { +procedure TRxDBGridDateEditor.SetBounds(aLeft, aTop, aWidth, aHeight: integer); +begin + Dec(aWidth, 25); //ButtonWidth); + inherited SetBounds(aLeft, aTop, aWidth, aHeight); +end; } + + +procedure TRxDBGridDateEditor.EditingDone; +begin + inherited EditingDone; + if FGrid <> nil then + FGrid.EditingDone; +end; + + +{ TRxDBGridLookupComboEditor } + +procedure TRxDBGridLookupComboEditor.WndProc(var TheMessage: TLMessage); +begin + if TheMessage.msg = LM_KILLFOCUS then + begin + if HWND(TheMessage.WParam) = HWND(Handle) then + begin + // lost the focus but it returns to ourselves + // eat the message. + TheMessage.Result := 0; + exit; + end; + end; + inherited WndProc(TheMessage); +end; + +procedure TRxDBGridLookupComboEditor.KeyDown(var Key: word; Shift: TShiftState); + + procedure doGridKeyDown; + begin + if Assigned(FGrid) then +// FGrid.EditorkeyDown(Self, key, shift); + FGrid.KeyDown(Key, shift); + end; + + procedure doEditorKeyDown; + begin + if FGrid <> nil then + FGrid.EditorkeyDown(Self, key, shift); + end; + + function GetFastEntry: boolean; + begin + if FGrid <> nil then + Result := FGrid.FastEditing + else + Result := False; + end; + procedure CheckEditingKey; + begin + if (FGrid=nil) or FGrid.EditorIsReadOnly then + Key := 0; + end; + +begin + CheckEditingKey; + case Key of + VK_UP, + VK_DOWN: + if (not PopupVisible) and (not (ssAlt in Shift)) then + begin + doGridKeyDown; + Key:=0; + exit; + end; + VK_LEFT, VK_RIGHT: + if GetFastEntry then + begin + doGridKeyDown; + exit; + end; + else + begin + inherited KeyDown(Key, Shift); + doEditorKeyDown; + exit; + end; + end; + inherited KeyDown(Key, Shift); +{ if FGrid<>nil then + FGrid.EditingDone;} +end; + +procedure TRxDBGridLookupComboEditor.msg_SetGrid(var Msg: TGridMessage); +begin + FGrid := Msg.Grid as TRxDBGrid; + Msg.Options := EO_AUTOSIZE; +end; + +procedure TRxDBGridLookupComboEditor.msg_SetValue(var Msg: TGridMessage); +var + F: TField; +begin + FCol := Msg.Col; + FRow := Msg.Row; + F := FGrid.SelectedField; + DataSource := FGrid.DataSource; + if Assigned(F) then + begin + // DataField:=F.FieldName; + DataField := F.KeyFields; + LookupDisplay := F.LookupResultField; + LookupField := F.LookupKeyFields; + FLDS.DataSet := F.LookupDataSet; + FGrid.GetOnCreateLookup; + end; +end; + +procedure TRxDBGridLookupComboEditor.msg_GetValue(var Msg: TGridMessage); +var + sText: string; + F:TField; +begin + if Assigned(FGrid.SelectedField) and Assigned(FLDS.DataSet) then + begin + F:=FLDS.DataSet.FieldByName(LookupDisplay); + if Assigned(F) then + begin + sText := F.DisplayText; + Msg.Value := sText; + end; + end; +end; + +procedure TRxDBGridLookupComboEditor.ShowList; +begin + FGrid.GetOnDisplayLookup; + inherited ShowList; +end; + +procedure TRxDBGridLookupComboEditor.OnInternalClosePopup(AResult: boolean); + procedure CheckEditingKey; + begin + if (FGrid=nil) or FGrid.EditorIsReadOnly then +// Key := 0; + end; +var + F:TField; +begin + inherited OnInternalClosePopup(AResult); + CheckEditingKey; + if (AResult) and Assigned(FGrid.SelectedField) and Assigned(FLDS.DataSet) then + begin + F:=FLDS.DataSet.FieldByName(LookupDisplay); + if Assigned(F) then + begin + //FGrid.SelectedField.Assign(F); + if (FGrid<>nil) and Visible then begin + FGrid.SetEditText(FCol, FRow, F.DisplayText); + end; + end; + end; +end; + +constructor TRxDBGridLookupComboEditor.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FLDS := TDataSource.Create(nil); + LookupSource := FLDS; + AutoSize := false; +end; + +destructor TRxDBGridLookupComboEditor.Destroy; +begin + FreeAndNil(FLDS); + inherited Destroy; +end; + +{ TRxDBGrid } +const + ALIGN_FLAGS: array[TAlignment] of integer = + (DT_LEFT or DT_SINGLELINE {or DT_EXPANDTABS} or DT_NOPREFIX, + DT_RIGHT or DT_SINGLELINE {or DT_EXPANDTABS} or DT_NOPREFIX, + DT_CENTER or DT_SINGLELINE {or DT_EXPANDTABS} or DT_NOPREFIX); + +const + ALIGN_FLAGS_HEADER: array[TAlignment] of integer = + (DT_LEFT or {DT_EXPANDTABS or} DT_NOPREFIX, + DT_RIGHT or {DT_EXPANDTABS or }DT_NOPREFIX, + DT_CENTER or {DT_EXPANDTABS or }DT_NOPREFIX); + +{ TITLE_SUBHEADER = 2; + TITLE_DEFAULT = 1; + +const + EdgeFlag: array[Boolean] of UINT = (BDR_RAISEDINNER, BDR_SUNKENINNER);} + +procedure WriteTextHeader(ACanvas: TCanvas; ARect: TRect; const Text: string; + Alignment: TAlignment); +var + DrawRect: TRect; + W, CnvW: integer; +begin + DrawRect := Rect(ARect.Left + 1, ARect.Top + 1, ARect.Right, ARect.Bottom); + + CnvW := Max(DrawRect.Right - DrawRect.Left, 1); + W := (ACanvas.TextWidth(Text) div CnvW) + 1; + + DrawRect.Top := ((ARect.Top + ARect.Bottom) div 2) - W * ACanvas.TextHeight('Wg') div 2; + if DrawRect.Top < ARect.Top + 1 then + DrawRect.Top := ARect.Top + 1; + + SetBkMode(ACanvas.Handle, TRANSPARENT); + DrawText(ACanvas.Handle, PChar(Text), Length(Text), DrawRect, + // DT_VCENTER or DT_WORDBREAK or DT_CENTER + ALIGN_FLAGS_HEADER[Alignment] {or DT_VCENTER or DT_END_ELLIPSIS } or DT_WORDBREAK + ); +end; + +procedure TRxDBGrid.SetTitleButtons(const AValue: boolean); +begin + if AValue then + Options := Options + [dgHeaderPushedLook] + else + Options := Options - [dgHeaderPushedLook]; +end; + +procedure TRxDBGrid.GetScrollbarParams(out aRange, aPage, aPos: Integer); +begin + if (DataSource.DataSet<>nil) and DataSource.DataSet.Active then begin + if DataSource.DataSet.IsSequenced then begin + aRange := DataSource.DataSet.RecordCount + VisibleRowCount - 1; + aPage := VisibleRowCount; + if aPage<1 then aPage := 1; + if DataSource.DataSet.BOF then aPos := 0 else + if DataSource.DataSet.EOF then aPos := aRange + else + aPos := DataSource.DataSet.RecNo - 1; // RecNo is 1 based + if aPos<0 then aPos:=0; + end else begin + aRange := 6; + aPage := 2; + if DataSource.DataSet.EOF then aPos := 4 else + if DataSource.DataSet.BOF then aPos := 0 + else aPos := 2; + end; + end else begin + aRange := 0; + aPage := 0; + aPos := 0; + end; +end; + +procedure TRxDBGrid.RestoreEditor; +begin + if EditorMode then + begin + EditorMode := False; + EditorMode := True; + end; +end; + +procedure TRxDBGrid.WMVScroll(var Message: TLMVScroll); +var + IsSeq: boolean; + aPos, aRange, aPage: Integer; + DeltaRec: integer; + + function MaxPos: Integer; + begin + if IsSeq then + result := DataSource.DataSet.RecordCount - 1 + else + result := 4; + end; + + procedure DsMoveBy(Delta: Integer); + begin + DataSource.DataSet.MoveBy(Delta); + GetScrollbarParams(aRange, aPage, aPos); + end; + + procedure DsGoto(BOF: boolean); + begin + if BOF then DataSource.DataSet.First + else DataSource.DataSet.Last; + GetScrollbarParams(aRange, aPage, aPos); + end; + +begin + if not DatalinkActive then exit; + IsSeq := DataSource.DataSet.IsSequenced; + case Message.ScrollCode of + SB_TOP: + DsGoto(True); + SB_BOTTOM: + DsGoto(False); + SB_PAGEUP: + DsMoveBy(-VisibleRowCount); + SB_LINEUP: + DsMoveBy(-1); + SB_LINEDOWN: + DsMoveBy(1); + SB_PAGEDOWN: + DsMoveBy(VisibleRowCount); + SB_THUMBPOSITION: + DsMoveBy(Message.Pos - FOldPosition) + else + Exit; + end; + + ScrollBarPosition(SB_VERT, aPos); + FOldPosition:=aPos; + + if EditorMode then + RestoreEditor; + {$ifdef dbgDBGrid} + DebugLn('---- Diff=',dbgs(DeltaRec), ' FinalPos=',dbgs(aPos)); + {$endif} +end; + +procedure TRxDBGrid.SetAutoSort(const AValue: boolean); +var + S: string; + Pos: integer; +begin + if FAutoSort = AValue then + exit; + FAutoSort := AValue; + if Assigned(DataSource) and Assigned(DataSource.DataSet) and + DataSource.DataSet.Active then + begin + S := DataSource.DataSet.ClassName; + if RxDBGridSortEngineList.Find(S, Pos) then + FSortEngine := RxDBGridSortEngineList.Objects[Pos] as TRxDBGridSortEngine + else + FSortEngine := nil; +{ FSortField := nil; + FSortOrder := smNone;} + FSortColumns.Clear; + end; +end; + +function TRxDBGrid.GetColumns: TRxDbGridColumns; +begin + Result := TRxDbGridColumns(TCustomDrawGrid(Self).Columns); +end; + +function TRxDBGrid.GetFooterColor: TColor; +begin + Result:=FFooterOptions.FColor; +end; + +function TRxDBGrid.GetFooterRowCount: integer; +begin + Result:=FFooterOptions.RowCount; +end; + +function TRxDBGrid.GetMarkerDown: TBitmap; +begin + Result:=FMarkerDown; +end; + +function TRxDBGrid.GetMarkerUp: TBitmap; +begin + Result:=FMarkerUp; +end; + +function TRxDBGrid.GetDrawFullLine: boolean; +begin + Result := FDrawFullLine; +end; + +procedure TRxDBGrid.SetDrawFullLine(Value: boolean); +begin + FDrawFullLine := Value; + VisualChange; +end; + +procedure TRxDBGrid.DoCreateJMenu; + + procedure CreateMenuItem(ShortCut: char; const ACaption: string; + MenuAction: TNotifyEvent); + var + R: TMenuItem; + begin + R := TMenuItem.Create(F_PopupMenu); + F_PopupMenu.Items.Add(R); + R.Caption := ACaption; + if ShortCut <> #0 then + R.ShortCut := KeyToShortCut(Ord(ShortCut), [ssCtrl]); + R.OnClick := MenuAction; + end; + +begin + F_PopupMenu := TPopupMenu.Create(Self); + F_PopupMenu.Name := 'OptionsMenu'; + CreateMenuItem('F', sRxDBGridFind, @OnFind); + CreateMenuItem('T', sRxDBGridFilter, @OnFilterBy); + CreateMenuItem('E', sRxDBGridFilterSimple, @OnFilter); + CreateMenuItem('Q', sRxDBGridFilterClear, @OnFilterClose); + CreateMenuItem(#0, '-', nil); + CreateMenuItem('C', sRxDBGridSortByColumns, @OnSortBy); + CreateMenuItem('W', sRxDBGridSelectColumns, @OnChooseVisibleFields); + CreateMenuItem('A', sRxDBGridSelectAllRows, @OnSelectAllRows); +end; + +function TRxDBGrid.GetPropertyStorage: TCustomPropertyStorage; +begin + Result := FPropertyStorageLink.Storage; +end; + +function TRxDBGrid.GetSortField: string; +begin + if FSortColumns.Count > 0 then + Result:=FSortColumns[0].FieldName + else + Result:=''; +end; + +function TRxDBGrid.GetSortOrder: TSortMarker; +begin + if FSortColumns.Count > 0 then + Result:=FSortColumns[0].SortOrder + else + Result:=smNone; +end; + +function TRxDBGrid.GetTitleButtons: boolean; +begin + Result := dgHeaderPushedLook in Options; +end; + +function TRxDBGrid.IsColumnsStored: boolean; +begin + Result := TRxDbGridColumns(TCustomDrawGrid(Self).Columns).Enabled; +end; + +procedure TRxDBGrid.SetColumns(const AValue: TRxDbGridColumns); +begin + TRxDbGridColumns(TCustomDrawGrid(Self).Columns).Assign(Avalue); +end; + +procedure TRxDBGrid.SetFooterColor(const AValue: TColor); +begin + FFooterOptions.Color := AValue; +end; + +procedure TRxDBGrid.SetFooterOptions(AValue: TRxDBGridFooterOptions); +begin + FFooterOptions.AssignTo(AValue); +end; + +procedure TRxDBGrid.SetFooterRowCount(const AValue: integer); +begin + FFooterOptions.RowCount:=AValue; +end; + +procedure TRxDBGrid.SetKeyStrokes(const AValue: TRxDBGridKeyStrokes); +begin + if Assigned(AValue) then + FKeyStrokes.Assign(AValue) + else + FKeyStrokes.Clear; + + UpdateJMenuKeys; +end; + +procedure TRxDBGrid.SetMarkerDown(AValue: TBitmap); +begin + FMarkerDown.Assign(AValue); +end; + +procedure TRxDBGrid.SetMarkerUp(AValue: TBitmap); +begin + FMarkerUp.Assign(AValue); +end; + +procedure TRxDBGrid.SetOptionsRx(const AValue: TOptionsRx); +var + OldOpt: TOptionsRx; +begin + if FOptionsRx = AValue then + exit; + BeginUpdate; + OldOpt := FOptionsRx; + FOptionsRx := AValue; + UseXORFeatures := rdgXORColSizing in AValue; + if (rdgFilter in AValue) and not (rdgFilter in OldOpt) then + begin + LayoutChanged; +{ BeginUpdate; + CalcTitle; + EndUpdate;} + end + else + if rdgFilter in OldOpt then + begin + FFilterListEditor.Hide; + LayoutChanged; +{ BeginUpdate; + CalcTitle; + EndUpdate;} + end; + + FFooterOptions.FActive:=rdgFooterRows in FOptionsRx; + + if (rdgWordWrap in OldOpt) and not (rdgWordWrap in FOptionsRx) then + ResetRowHeght; + +// VisualChange; + EndUpdate; +end; + +procedure TRxDBGrid.SetPropertyStorage(const AValue: TCustomPropertyStorage); +begin + FPropertyStorageLink.Storage := AValue; +end; + +function TRxDBGrid.DatalinkActive: boolean; +begin + Result := Assigned(DataSource) and Assigned(DataSource.DataSet) and + DataSource.DataSet.Active; +end; + +procedure TRxDBGrid.AdjustEditorBounds(NewCol, NewRow: Integer); +begin + inherited AdjustEditorBounds(NewCol, NewRow); + if EditorMode then + begin + DoSetColEdtBtn; + end; +end; + +procedure TRxDBGrid.TrackButton(X, Y: integer); +var + Cell: TGridCoord; + NewPressed: boolean; + I, Offset: integer; +begin + Cell := MouseCoord(X, Y); + Offset := RowCount;//[0]; + NewPressed := PtInRect(Rect(0, 0, ClientWidth, ClientHeight), Point(X, Y)) and + (FPressedCol = TColumn(ColumnFromGridColumn(Cell.X))) and (Cell.Y < Offset); + if FPressed <> NewPressed then + begin + FPressed := NewPressed; + for I := 0 to Offset - 1 do + GridInvalidateRow(Self, I); + end; +end; + +procedure TRxDBGrid.StopTracking; +begin + if FTracking then + begin + TrackButton(-1, -1); + FTracking := False; + MouseCapture := False; + end; +end; + +procedure TRxDBGrid.CalcTitle; +var + i, j: integer; + H, H1, W, H2, W1: integer; + rxCol, rxColNext: TRxColumn; + rxTit, rxTitleNext: TRxColumnTitle; + MLRec1, P: TMLCaptionItem; + MLRec2: TMLCaptionItem; + tmpCanvas: TCanvas; + S: string; +begin + { TODO -oalexs : need rewrite code - split to 2 step: +1. make links between column +2. calc title width for all linked column series } + if RowCount = 0 then + exit; + tmpCanvas := GetWorkingCanvas(Canvas); + try + H := 1; + ClearMLCaptionPointers; + for i := 0 to Columns.Count - 1 do + begin + rxCol := TRxColumn(Columns[i]); + if Assigned(rxCol) and rxCol.Visible then + begin + rxTit := TRxColumnTitle(rxCol.Title); + if Assigned(rxTit) then + begin + if rxTit.Orientation in [toVertical270, toVertical90] then + H := Max((tmpCanvas.TextWidth(Columns[i].Title.Caption) + + tmpCanvas.TextWidth('W')*2) div DefaultRowHeight, H) + else + begin + rxColNext := nil; + rxTitleNext := nil; + if i < Columns.Count - 1 then + begin + rxColNext := TRxColumn(Columns[i + 1]); + rxTitleNext := TRxColumnTitle(rxColNext.Title); + end; + + W := Max(rxCol.Width - 6, 1); + if rxTit.CaptionLinesCount > 0 then + begin + H2 := 0; + H1 := 0; + for j := 0 to rxTit.CaptionLinesCount - 1 do + begin + MLRec1 := rxTit.CaptionLine(j); + + if Assigned(rxTitleNext) and (rxTitleNext.CaptionLinesCount > j) then + begin + //make links to next column - and in the next column set link to prior-current + MLRec2 := rxTitleNext.CaptionLine(j); + if MLRec1.Caption = MLRec2.Caption then + begin + MLRec1.Next := MLRec2; + MLRec2.Prior := MLRec1; + end + else + break; + end; + + MLRec1.Width := tmpCanvas.TextWidth(MLRec1.Caption) + 2; + + if W > MLRec1.Width then + H2 := 1 + else + H2 := MLRec1.Width div W + 1; + + if H2 > WordCount(MLRec1.Caption, [' ']) then + H2 := WordCount(MLRec1.Caption, [' ']); + + H1 := H1 + H2; + end; + end + else + begin + H1 := Max((tmpCanvas.TextWidth(rxTit.Caption) + 2) div W + 1, H); + if H1 > WordCount(rxTit.Caption, [' ']) then + H1 := WordCount(rxTit.Caption, [' ']); + end; + H := Max(H1, H); + end; + + for j := 0 to rxTit.CaptionLinesCount - 1 do + begin + MLRec1 := rxTit.CaptionLine(j); + if MLRec1.Width < rxTit.Column.Width then + MLRec1.Width := rxTit.Column.Width; + end; + + end; + end; + end; + + //Тут раÑчёт выÑоты заголовка каждой колонки - надо обработать Ñлитые заголовки + H := 1; + for i := 0 to Columns.Count - 1 do + begin + rxCol := TRxColumn(Columns[i]); + rxTit := TRxColumnTitle(rxCol.Title); + H1 := 0; + //Ðе забудем про вертикальную ориентацию + if Assigned(rxCol) and rxCol.Visible and Assigned(rxTit) then + begin + if rxTit.Orientation in [toVertical270, toVertical90] then + H1 := Max((tmpCanvas.TextWidth(Columns[i].Title.Caption) + + tmpCanvas.TextWidth('W')) div DefaultRowHeight, H) + else + begin + if rxTit.CaptionLinesCount > H then + H := rxTit.CaptionLinesCount; + for j := 0 to rxTit.CaptionLinesCount - 1 do + begin + MLRec1 := rxTit.CaptionLine(j); + S := MLRec1.Caption; + if not Assigned(MLRec1.Prior) then + begin + W := rxCol.Width; + P := MLRec1.Next; + while Assigned(P) do + begin + Inc(W, P.Col.Width); + P := P.Next; + end; + W1 := tmpCanvas.TextWidth(MLRec1.Caption) + 2; + if W1 > W then + MLRec1.Hegth := Min(W1 div Max(W, 1) + 1, UTF8Length(MLRec1.Caption)) + else + MLRec1.Hegth := 1; + + P := MLRec1.Next; + while Assigned(P) do + begin + P.Hegth := MLRec1.Hegth; + P := P.Next; + end; + end; + H1 := H1 + MLRec1.Hegth; + end; + end; + end; + if H1 > H then + H := H1; + end; + + RowHeights[0] := DefaultRowHeight * H; + + if rdgFilter in OptionsRx then + begin + if Assigned(FFilterListEditor) then + begin + RowHeights[0] := RowHeights[0] + FFilterListEditor.Height + end + else + begin + RowHeights[0] := RowHeights[0] + DefaultRowHeight; + end; + end; + + finally + if TmpCanvas <> Canvas then + FreeWorkingCanvas(tmpCanvas); + end; +end; + +procedure TRxDBGrid.ClearMLCaptionPointers; +var + i, j: integer; + rxCol: TRxColumn; + rxTit: TRxColumnTitle; +begin + for i := 0 to Columns.Count - 1 do + begin + rxCol := TRxColumn(Columns[i]); + if Assigned(rxCol) then + begin + rxTit := TRxColumnTitle(rxCol.Title); + if Assigned(rxTit) then + begin + for j := 0 to rxTit.CaptionLinesCount - 1 do + begin + rxTit.CaptionLine(j).Next := nil; + rxTit.CaptionLine(j).Prior := nil; + end; + end; + end; + end; +end; + +function TRxDBGrid.getFilterRect(bRect: TRect): TRect; +begin + Result := bRect; + if Assigned(FFilterListEditor) then + Result.Top := bRect.Bottom - FFilterListEditor.Height + else + Result.Top := bRect.Bottom - DefaultRowHeight; +end; + +function TRxDBGrid.getTitleRect(bRect: TRect): TRect; +begin + Result := bRect; + if Assigned(FFilterListEditor) then + Result.Bottom := bRect.Bottom - FFilterListEditor.Height + else + Result.Bottom := bRect.Bottom - DefaultRowHeight; +end; + +procedure TRxDBGrid.OutCaptionCellText(aCol, aRow: integer; const aRect: TRect; + aState: TGridDrawState; const ACaption: string); +var + T1, T2: TTextStyle; +begin + if (TitleStyle = tsNative) then + DrawThemedCell(aCol, aRow, aRect, aState) + else + begin + Canvas.FillRect(aRect); + DrawCellGrid(aCol, aRow, aRect, aState); + end; + + if ACaption <> '' then + begin +{ T1:=Canvas.TextStyle; + T2:=T1; + T1.Wordbreak:=true; + Canvas.TextStyle:=T1; + DrawCellText(aCol, aRow, aRect, aState, ACaption); + Canvas.TextStyle:=T2; } + WriteTextHeader(Canvas, aRect, ACaption, GetColumnAlignment(aCol, True)); + end; +end; + +procedure TRxDBGrid.OutCaptionCellText90(aCol, aRow: integer; + const aRect: TRect; aState: TGridDrawState; const ACaption: string; + const TextOrient: TTextOrientation); +var + dW, dY: integer; +begin + if (TitleStyle = tsNative) then + DrawThemedCell(aCol, aRow, aRect, aState) + else + begin + Canvas.FillRect(aRect); + DrawCellGrid(aCol, aRow, aRect, aState); + end; + + + if TextOrient in [toVertical90, toVertical270] then + begin + dW := ((aRect.Bottom - aRect.Top) - Canvas.TextWidth(ACaption)) div 2; + dY := ((aRect.Right - aRect.Left) - Canvas.TextHeight(ACaption)) div 2; + end + else + begin + dW := 0; + dY := 0; + end; + OutTextXY90(Canvas, aRect.Left + dY, aRect.Top + dw, ACaption, TextOrient); +end; + +procedure TRxDBGrid.OutCaptionSortMarker(const aRect: TRect; + ASortMarker: TSortMarker; ASortPosition: integer); +var + X, Y, W: integer; + S:string; + F:TFont; +begin + if (dgHeaderPushedLook in Options) then + begin + if (ASortMarker <> smNone) and (ASortPosition>0) then + begin + F:=TFont.Create; + F.Assign(Font); + + if Font.Size = 0 then + Font.Size:=7 + else + Font.Size:=Font.Size-2; + S:='('+IntToStr(ASortPosition)+')'; + W:=Canvas.TextWidth(S) + 10; + end + else + begin + W:=6; + F:=nil; + end; + + if ASortMarker = smDown then + begin + X := aRect.Right - FMarkerDown.Width - W; + Y := Trunc((aRect.Top + aRect.Bottom - FMarkerDown.Height) / 2); + Canvas.Draw(X, Y, FMarkerDown); + end + else + if ASortMarker = smUp then + begin + X := aRect.Right - FMarkerUp.Width - W; + Y := Trunc((aRect.Top + aRect.Bottom - FMarkerUp.Height) / 2); + Canvas.Draw(X, Y, FMarkerUp); + end; + + if Assigned(F) then + begin + Canvas.TextOut( X + FMarkerDown.Width, Y, S); + Font.Assign(F); + FreeAndNil(F); + end; + + end; +end; + +procedure TRxDBGrid.OutCaptionMLCellText(aCol, aRow: integer; + aRect: TRect; aState: TGridDrawState; MLI: TMLCaptionItem); +var + MLINext: TMLCaptionItem; + Rgn: HRGN; +begin + MLINext := MLI.Next; + while Assigned(MLINext) do + begin + aRect.Right := aRect.Right + MLINext.Col.Width; + MLINext := MLINext.Next; + end; + + // OutCaptionCellText(aCol, aRow, aRect, aState, MLI.Caption); + Rgn := CreateRectRgn(aRect.Left, aRect.Top, aRect.Right, aRect.Bottom); + SelectClipRgn(Canvas.Handle, Rgn); + OutCaptionCellText(aCol, aRow, aRect, aState, MLI.Caption); + SelectClipRgn(Canvas.Handle, 0); + DeleteObject(Rgn); +end; + +procedure TRxDBGrid.UpdateJMenuStates; +begin + F_PopupMenu.Items[0].Visible := rdgAllowDialogFind in FOptionsRx; + F_PopupMenu.Items[1].Visible := rdgAllowFilterForm in FOptionsRx; + F_PopupMenu.Items[2].Visible := rdgAllowQuickFilter in FOptionsRx; + F_PopupMenu.Items[3].Visible := + (rdgFilter in FOptionsRx) or (rdgAllowFilterForm in FOptionsRx); + F_PopupMenu.Items[5].Visible := rdgAllowSortForm in FOptionsRx; + F_PopupMenu.Items[6].Visible := rdgAllowColumnsForm in FOptionsRx; + F_PopupMenu.Items[7].Visible := dgMultiselect in Options; +end; + +procedure TRxDBGrid.UpdateJMenuKeys; + + function DoShortCut(Cmd: TRxDBGridCommand): TShortCut; + var + K: TRxDBGridKeyStroke; + begin + K := FKeyStrokes.FindRxKeyStrokes(Cmd); + if Assigned(K) and K.Enabled then + Result := K.ShortCut + else + Result := 0; + end; + +begin + F_PopupMenu.Items[0].ShortCut := DoShortCut(rxgcShowFindDlg); + F_PopupMenu.Items[1].ShortCut := DoShortCut(rxgcShowFilterDlg); + F_PopupMenu.Items[2].ShortCut := DoShortCut(rxgcShowQuickFilter); + F_PopupMenu.Items[3].ShortCut := DoShortCut(rxgcHideQuickFilter); + F_PopupMenu.Items[5].ShortCut := DoShortCut(rxgcShowSortDlg); + F_PopupMenu.Items[6].ShortCut := DoShortCut(rxgcShowColumnsDlg); + F_PopupMenu.Items[7].ShortCut := DoShortCut(rxgcSelectAll); +end; + +function TRxDBGrid.SortEngineOptions: TRxSortEngineOptions; +begin + Result := []; + if rdgCaseInsensitiveSort in FOptionsRx then + Include(Result, seoCaseInsensitiveSort); +end; + +procedure TRxDBGrid.OnIniSave(Sender: TObject); +var + i: integer; + S, S1: string; + C: TRxColumn; +begin + S := Owner.Name + '.' + Name; + FPropertyStorageLink.Storage.WriteInteger(S + sVersion, FVersion); + FPropertyStorageLink.Storage.WriteInteger(S + sCount, Columns.Count); + S := S + sItem; + for i := 0 to Columns.Count - 1 do + begin + S1 := S + IntToStr(i); + C := TRxColumn(Columns[i]); + FPropertyStorageLink.Storage.WriteString(S1 + sCaption, + StrToHexText(C.Title.Caption)); + FPropertyStorageLink.Storage.WriteInteger(S1 + sWidth, C.Width); + FPropertyStorageLink.Storage.WriteInteger(S1 + sIndex, C.Index); + FPropertyStorageLink.Storage.WriteInteger(S1 + sVisible, Ord(C.Visible)); + end; + + { TODO : Ðеобходимо подключить Ñохранение ÑпиÑка колонок Ñортировки } +{ + FSortColumns; + if Assigned(FSortField) then + begin + FPropertyStorageLink.Storage.WriteInteger(S1 + sSortMarker, Ord(FSortOrder)); + FPropertyStorageLink.Storage.WriteString(S1 + sSortField, FSortField.FieldName); + end + else + FPropertyStorageLink.Storage.WriteInteger(S1 + sSortMarker, Ord(smNone)); +} +end; + +procedure TRxDBGrid.OnIniLoad(Sender: TObject); +var + i, ACount: integer; + S, S1, ColumName: string; + C: TRxColumn; + +begin + S := Owner.Name + '.' + Name; + ACount := FPropertyStorageLink.Storage.ReadInteger(S + sVersion, FVersion); + //Check cfg version + if ACount = FVersion then + begin + ACount := FPropertyStorageLink.Storage.ReadInteger(S + sCount, 0); + S := S + sItem; + for i := 0 to ACount - 1 do + begin + S1 := S + IntToStr(i); + ColumName := HexTextToStr(FPropertyStorageLink.Storage.ReadString(S1 + + sCaption, '')); + if ColumName <> '' then + begin + C := ColumnByCaption(ColumName); + if Assigned(C) then + begin + C.Width := FPropertyStorageLink.Storage.ReadInteger(S1 + sWidth, C.Width); + C.Visible := FPropertyStorageLink.Storage.ReadInteger(S1 + + sVisible, Ord(C.Visible)) = 1; + C.Index := Min(FPropertyStorageLink.Storage.ReadInteger(S1 + sIndex, C.Index), + Columns.Count - 1); + end; + end; + end; + + { TODO : Ðеобходимо подключить воÑтановление ÑпиÑка колонок Ñортировки } +{ FSortOrder := TSortMarker(FPropertyStorageLink.Storage.ReadInteger( + S1 + sSortMarker, Ord(smNone))); + if Assigned(FSortEngine) and (FSortOrder <> smNone) and DatalinkActive then + begin + ColumName := FPropertyStorageLink.Storage.ReadString(S1 + sSortField, ''); + if ColumName <> '' then + begin + FSortField := DataSource.DataSet.FindField(ColumName); + if Assigned(FSortField) then + FSortEngine.Sort(FSortField, DataSource.DataSet, FSortOrder = smUp, + SortEngineOptions); + end; + end;} + end; +end; + +procedure TRxDBGrid.CleanDSEvent; +begin + if Assigned(DataSource) and Assigned(DataSource.DataSet) then + begin + if DataSource.DataSet.OnPostError = @ErrorPo then + DataSource.DataSet.OnPostError := F_EventOnPostError; + + if DataSource.DataSet.OnFilterRecord = @FilterRec then + DataSource.DataSet.OnFilterRecord := F_EventOnFilterRec; + + if DataSource.DataSet.BeforeDelete = @BeforeDel then + DataSource.DataSet.BeforeDelete := F_EventOnBeforeDelete; + + if DataSource.DataSet.BeforePost = @BeforePo then + DataSource.DataSet.BeforePost:=F_EventOnBeforePost; + + if DataSource.DataSet.OnDeleteError = @ErrorDel then + DataSource.DataSet.OnDeleteError:=F_EventOnDeleteError; + + if DataSource.DataSet.OnPostError = @ErrorPo then + DataSource.DataSet.OnPostError:=F_EventOnPostError; + + F_EventOnPostError:=nil; + F_EventOnFilterRec:=nil; + F_EventOnBeforeDelete:=nil; + F_EventOnBeforePost:=nil; + F_EventOnDeleteError:=nil; + F_EventOnPostError:=nil; + end; +end; + +procedure TRxDBGrid.CollumnSortListUpdate; +var + i, J:integer; + C:TRxColumn; + +begin + FSortColumns.Clear; + for i:=0 to Columns.Count - 1 do + begin + C:=TRxColumn(Columns[i]); + if C.SortOrder <> smNone then + begin + if FSortColumns.Count <> 0 then + begin + for j:=0 to FSortColumns.Count-1 do + if FSortColumns[j].FSortPosition > C.FSortPosition then + begin + FSortColumns.Insert(j, C); + C:=nil; + Break; + end; + end; + if C<>nil then + FSortColumns.Add(C); + end; + end; + + for i:=0 to FSortColumns.Count - 1 do + FSortColumns[i].FSortPosition:=i; +end; + +procedure TRxDBGrid.CollumnSortListClear; +var + i:integer; +begin + FSortColumns.Clear; + for i:=0 to Columns.Count - 1 do + begin + TRxColumn(Columns[i]).FSortOrder:=smNone; + TRxColumn(Columns[i]).FSortPosition:=0; + end; +end; + +procedure TRxDBGrid.CollumnSortListApply; +var + i:integer; + S:string; + Asc:array of boolean; +begin + if (FSortColumns.Count = 0) then exit; + FSortingNow:=true; + if FSortColumns.Count>1 then + begin + SetLength(Asc, FSortColumns.Count); + for i := 0 to FSortColumns.Count - 1 do + begin + Asc[i]:=FSortColumns[i].FSortOrder = smUp; + if S<>'' then + S:=S+';'; + S:=S + FSortColumns[i].FieldName; + end; + { TODO : Ðеобходимо добавить опцию региÑтронезавиÑимого поиÑка } + FSortEngine.SortList(S, DataSource.DataSet, Asc, SortEngineOptions); + end + else + FSortEngine.Sort(FSortColumns[0].Field, DataSource.DataSet, FSortColumns[0].FSortOrder = smUp, SortEngineOptions); + FSortingNow:=false; +end; + +function TRxDBGrid.UpdateRowsHeight: integer; +var + i, J, H, H1, H2:integer; + B:boolean; + F:TField; + S:string; + CurActiveRecord: Integer; + R:TRxColumn; +begin + Result:=0; + if not (Assigned(DataLink) and DataLink.Active) then + exit; + + CurActiveRecord:=DataLink.ActiveRecord; + H2:=0; + for i:=GCache.VisibleGrid.Top to GCache.VisibleGrid.Bottom do + begin + DataLink.ActiveRecord:=i - FixedRows; + H:=1; + for j:=0 to Columns.Count-1 do + begin + R:=Columns[j] as TRxColumn;; + if R.WordWrap then + begin + F:=R.Field; + if Assigned(F) then + S:=F.DisplayText + else + S:=''; + + H1 := Max((Canvas.TextWidth(S) + 2) div R.Width + 1, H); + if H1 > WordCount(S, [' ']) then + H1 := WordCount(S, [' ']); + end + else + H1:=1; + H:=Max(H, H1); + end; + + if i<RowCount then + begin + RowHeights[i] := DefaultRowHeight * H; + H2:=H2 + RowHeights[i]; + if H2<=ClientHeight then + Inc(Result); + end; + end; + DataLink.ActiveRecord:=CurActiveRecord; +end; + +procedure TRxDBGrid.ResetRowHeght; +var + i:integer; +begin + for i:=1 to RowCount-1 do + RowHeights[i] := DefaultRowHeight; +end; + +procedure TRxDBGrid.DoClearInvalidTitle; +var + i, j:integer; + FTitle:TRxColumnTitle; +begin + for i:=0 to Columns.Count-1 do + begin + FTitle:=TRxColumnTitle(Columns[i].Title); + for j:=0 to FTitle.CaptionLinesCount-1 do + FTitle.CaptionLine(j).FInvalidDraw:=0; + end; +end; + +procedure TRxDBGrid.DoDrawInvalidTitle; +var + {C, }i, j{, CB, CE}:integer; + MLI:TMLCaptionItem; + FTitle:TRxColumnTitle; +begin + for i:=0 to Columns.Count-1 do + begin + FTitle:=TRxColumnTitle(Columns[i].Title); + for j:=0 to FTitle.CaptionLinesCount - 1 do + begin + MLI:=FTitle.CaptionLine(j); + if MLI.FInvalidDraw<0 then + begin + //InvalidateRow(0); + exit; + end; + end; + end; +end; + +procedure TRxDBGrid.DoSetColEdtBtn; +var + R:TRxColumn; + i, w:integer; +begin + R:=SelectedColumn as TRxColumn; + + if Assigned(Editor) and Assigned(R) then + begin + W:=0; + for i:=0 to R.EditButtons.Count-1 do + begin + if R.EditButtons[i].Visible then + W:=W+R.EditButtons[i].Width; + end; + + if W>0 then + begin + if Editor.Name = 'ButtonEditor' then + begin + Editor.Left:=Editor.Left - W; + W:=Editor.Width + Editor.Left; + end + else + begin + Editor.Width:=Editor.Width - W; + W:=Editor.Width + Editor.Left; + end; + + for i:=0 to R.EditButtons.Count-1 do + if R.EditButtons[i].Visible then + begin + R.EditButtons[i].FButton.Parent:=Self; + R.EditButtons[i].FButton.Left:=W; + R.EditButtons[i].FButton.Top:=Editor.Top; + R.EditButtons[i].FButton.Height:=Editor.Height; + R.EditButtons[i].FButton.Visible:=true; + + W:=W+R.EditButtons[i].FButton.Width; + end; + end; + end; +end; + + +procedure TRxDBGrid.DefaultDrawCellA(aCol, aRow: integer; aRect: TRect; + aState: TGridDrawState); +begin + PrepareCanvas(aCol, aRow, aState); + if rdgFilter in OptionsRx then + begin + DefaultDrawFilter(aCol, aRow, getFilterRect(aRect), aState); + DefaultDrawTitle(aCol, aRow, getTitleRect(aRect), aState); + end + else + DefaultDrawTitle(aCol, aRow, aRect, aState); +end; + +procedure TRxDBGrid.DefaultDrawTitle(aCol, aRow: integer; aRect: TRect; + aState: TGridDrawState); + +procedure DoClearMLIInvalid(MLI1: TMLCaptionItem); +begin + while Assigned(MLI1) do + begin + inc(MLI1.FInvalidDraw); + MLI1:=MLI1.Next; + end; +end; + +var + ASortMarker: TSortMarker; + ASortPosition: integer; + + Background: TColor; + i: integer; + Down: boolean; + aRect2: TRect; + + FTitle: TRxColumnTitle; + GrdCol: TRxColumn; + + MLI, MLINext, MLI1: TMLCaptionItem; + +begin + if (dgIndicator in Options) and (aCol = 0) then + begin + Canvas.FillRect(aRect); + if F_Clicked then + aState := aState + [gdPushed]; + + if (TitleStyle = tsNative) then + DrawThemedCell(aCol, aRow, aRect, aState) + else + DrawCellGrid(aCol, aRow, aRect, aState); + + if DatalinkActive and (rdgAllowToolMenu in FOptionsRx) then + Canvas.Draw((ARect.Left + ARect.Right - F_MenuBMP.Width) div 2, + (ARect.Top + ARect.Bottom - F_MenuBMP.Height) div 2, F_MenuBMP); + exit; + end; + + GrdCol := TRxColumn(ColumnFromGridColumn(aCol)); + + Down := FPressed and (dgHeaderPushedLook in Options) and + (FPressedCol = GrdCol); + + if Assigned(GrdCol) then + begin + ASortMarker := GrdCol.FSortOrder; + if FSortColumns.Count>1 then + ASortPosition:=GrdCol.FSortPosition + else + ASortPosition:=-1; + end + else + ASortMarker := smNone; + + if Assigned(FOnGetBtnParams) and Assigned(GetFieldFromGridColumn(aCol)) then + begin + Background := Canvas.Brush.Color; + FOnGetBtnParams(Self, GetFieldFromGridColumn(aCol), Canvas.Font, + Background, ASortMarker, Down); + Canvas.Brush.Color := Background; + end; + + if (gdFixed in aState) and (aRow = 0) and (ACol >= FixedCols) then + begin + + //GrdCol := ColumnFromGridColumn(aCol); + if Assigned(GrdCol) then + FTitle := TRxColumnTitle(GrdCol.Title) + else + FTitle := nil; + + if Assigned(FTitle) then + begin + if FTitle.Orientation <> toHorizontal then + begin + OutCaptionCellText90(aCol, aRow, aRect, aState, FTitle.Caption, + FTitle.Orientation); + if Down then + aState := aState + [gdPushed]; + end + else + if (FTitle.CaptionLinesCount > 0) then + begin + aRect2.Left := aRect.Left; + aRect2.Right := aRect.Right; + aRect2.Top := aRect.Top; + for i := 0 to FTitle.CaptionLinesCount - 1 do + begin + MLI := FTitle.CaptionLine(i); + aRect2.Right := aRect.Right; + + if i = FTitle.CaptionLinesCount - 1 then + begin + aRect2.Bottom := aRect.Bottom; + aRect.Top := ARect2.Top; + if Down then + aState := aState + [gdPushed] + else + aState := aState - [gdPushed] + ; + end + else + begin + aRect2.Bottom := aRect2.Top + MLI.Hegth * DefaultRowHeight; + aState := aState - [gdPushed]; + end; + + + if Assigned(MLI.Next) then + begin + if Assigned(MLI.Prior) then + begin + if aCol = LeftCol then + begin + OutCaptionMLCellText(aCol, aRow, aRect2, aState, MLI); + DoClearMLIInvalid(MLI); + end + else + Dec(MLI.FInvalidDraw); + end + else + begin + OutCaptionMLCellText(aCol, aRow, aRect2, aState, MLI); + DoClearMLIInvalid(MLI); + end; + end + else + begin + if not Assigned(MLI.Prior) then + begin + OutCaptionCellText(aCol, aRow, aRect2, aState, MLI.Caption); + DoClearMLIInvalid(MLI); + end + else + begin + if aCol = LeftCol then + begin + OutCaptionMLCellText(aCol, aRow, aRect2, aState, MLI); + DoClearMLIInvalid(MLI); + end + else + Dec(MLI.FInvalidDraw); + end; + end; + aRect2.Top := aRect2.Bottom; + end; + end + else + begin + if Down then + aState := aState + [gdPushed]; + OutCaptionCellText(aCol, aRow, aRect, aState, FTitle.Caption); + end; + end + else + begin + OutCaptionCellText(aCol, aRow, aRect, aState, GetDefaultColumnTitle(aCol)); + end; + + OutCaptionSortMarker(aRect, ASortMarker, ASortPosition+1); + end + else + begin + if Down then + aState := aState + [gdPushed]; + OutCaptionCellText(aCol, aRow, aRect, aState, ''); + end; +end; + +procedure TRxDBGrid.DefaultDrawFilter(aCol, aRow: integer; aRect: TRect; + aState: TGridDrawState); +var + bg: TColor; + al: TAlignment; + ft: TFont; + MyCol: integer; + TxS: TTextStyle; + +begin +{ if (dgIndicator in Options) and (aCol = 0) then + begin + Canvas.FillRect(aRect); + DrawCellGrid(aCol, aRow, aRect, aState); + exit; + end; + + DrawCellGrid(aCol, aRow, aRect, aState);} + if (dgIndicator in Options) and (aCol = 0) then + begin + if (TitleStyle = tsNative) then + DrawThemedCell(aCol, aRow, aRect, aState) + else + begin + Canvas.FillRect(aRect); + DrawCellGrid(aCol, aRow, aRect, aState); + end; + exit; + end; + + if (TitleStyle = tsNative) then + DrawThemedCell(aCol, aRow, aRect, aState) + else + begin + Canvas.FillRect(aRect); + DrawCellGrid(aCol, aRow, aRect, aState); + end; + + Inc(aRect.Left, 1); + Dec(aRect.Right, 1); + Inc(aRect.Top, 1); + Dec(aRect.Bottom, 1); + + if Columns.Count > (aCol - 1) then + begin + bg := Canvas.Brush.Color; + al := Canvas.TextStyle.Alignment; +// ft := Canvas.Font; + ft:=TFont.Create; + ft.Assign(Canvas.Font); + TxS := Canvas.TextStyle; + + MyCol := Columns.RealIndex(aCol - 1); + with TRxColumn(Columns[MyCol]).Filter do + begin +// Canvas.Brush.Color := Color; +// Canvas.FillRect(aRect); + if (TitleStyle <> tsNative) then + begin + Canvas.Brush.Color := Color; + Canvas.FillRect(aRect); + end; + + if Value <> '' then + begin + Canvas.Font := Font; + if (aRect.Right - aRect.Left) >= Canvas.TextWidth(Value) then + TxS.Alignment := Alignment + else + TxS.Alignment := taLeftJustify; + Canvas.TextStyle := TxS; + DrawCellText(aCol, aRow, aRect, aState, Value); + end + else + begin + Canvas.Font := TRxColumn(Columns[MyCol]).Filter.EmptyFont; + if (aRect.Right - aRect.Left) >= Canvas.TextWidth(Value) then + TxS.Alignment := Alignment + else + TxS.Alignment := taLeftJustify; + + Canvas.TextStyle := TxS; + DrawCellText(aCol, aRow, aRect, aState, + TRxColumn(Columns[MyCol]).Filter.EmptyValue); + end; + end; + +// Canvas.Font := ft; + Canvas.Font.Assign(ft); + ft.Free; + Canvas.Brush.Color := bg; + // Canvas.TextStyle.Alignment := al; + TxS.Alignment := al; + Canvas.TextStyle := TxS; + end + else + begin + bg := Canvas.Brush.Color; + Canvas.Brush.Color := Color; + Canvas.FillRect(aRect); + Canvas.Brush.Color := bg; + end; +end; + +procedure TRxDBGrid.DefaultDrawCellData(aCol, aRow: integer; aRect: TRect; + aState: TGridDrawState); +var + S: string; + F: TField; + C: TRxColumn; + j: integer; +begin + if Assigned(OnDrawColumnCell) and not (CsDesigning in ComponentState) then + OnDrawColumnCell(Self, aRect, aCol, TColumn(ColumnFromGridColumn(aCol)), aState) + else + begin + F := GetFieldFromGridColumn(aCol); + C := ColumnFromGridColumn(aCol) as TRxColumn; + if Assigned(C) and Assigned(C.FOnDrawColumnCell) then + C.OnDrawColumnCell(Self, aRect, aCol, TColumn(ColumnFromGridColumn(aCol)), aState) + else + begin + case ColumnEditorStyle(aCol, F) of + cbsCheckBoxColumn: DrawCheckBoxBitmaps(aCol, aRect, F); + else + if F <> nil then + begin + if F.dataType <> ftBlob then + begin + { if Assigned(F.LookupDataSet) and (F.LookupResultField<>'') then + S := F.LookupDataSet.FieldByName(F.LookupResultField).DisplayText + else} + S := F.DisplayText; + if Assigned(C) and (C.KeyList.Count > 0) and (C.PickList.Count > 0) then + begin + J := C.KeyList.IndexOf(S); + if (J >= 0) and (J < C.PickList.Count) then + S := C.PickList[j]; + end; + end + else + S := '(blob)'; + end + else + S := ''; + if (rdgWordWrap in FOptionsRx) and Assigned(C) and (C.WordWrap) then + WriteTextHeader(Canvas, aRect, S, C.Alignment) + else + DrawCellText(aCol, aRow, aRect, aState, S); + end; + end; + end; +end; + +procedure TRxDBGrid.DrawCell(aCol, aRow: integer; aRect: TRect; aState: TGridDrawState); +var + RxColumn: TRxColumn; + AImageIndex: integer; + FBackground: TColor; +begin + if (gdFixed in aState) and (aRow = 0) then + begin + DefaultDrawCellA(aCol, aRow, aRect, aState); + end + else + if not ((gdFixed in aState) or ((aCol = 0) and (dgIndicator in Options)) or + ((aRow = 0) and (dgTitles in Options))) then + begin + + PrepareCanvas(aCol, aRow, aState); + + if Assigned(FOnGetCellProps) and not (gdSelected in aState) then + begin + FBackground := Canvas.Brush.Color; + FOnGetCellProps(Self, GetFieldFromGridColumn(aCol), Canvas.Font, FBackground); + Canvas.Brush.Color := FBackground; + end; + + Canvas.FillRect(aRect); + DrawCellGrid(aCol, aRow, aRect, aState); + + RxColumn := TRxColumn(ColumnFromGridColumn(aCol)); + if Assigned(RxColumn) and Assigned(RxColumn.Field) and + Assigned(RxColumn.ImageList) then + begin + AImageIndex := StrToIntDef(RxColumn.KeyList.Values[RxColumn.Field.AsString], + RxColumn.FNotInKeyListIndex); + if (AImageIndex > -1) and (AImageIndex < RxColumn.ImageList.Count) then + DrawCellBitmap(RxColumn, aRect, aState, AImageIndex); + end + else + DefaultDrawCellData(aCol, aRow, aRect, aState); + // inherited DrawCell(aCol, aRow, aRect, aState); + end + else + inherited DrawCell(aCol, aRow, aRect, aState); +end; + +procedure TRxDBGrid.LinkActive(Value: Boolean); +var + S: string; + Pos: integer; +begin + if Value then + begin + S := DataSource.DataSet.ClassName; + if RxDBGridSortEngineList.Find(S, Pos) then + FSortEngine := RxDBGridSortEngineList.Objects[Pos] as TRxDBGridSortEngine + else + FSortEngine := nil; + end; + + inherited LinkActive(Value); + if not Value then +{ begin + S := DataSource.DataSet.ClassName; + if RxDBGridSortEngineList.Find(S, Pos) then + FSortEngine := RxDBGridSortEngineList.Objects[Pos] as TRxDBGridSortEngine + else + FSortEngine := nil; + end + else} + begin + FSortEngine := nil; + if SelectedRows.Count > 0 then + SelectedRows.Clear; + end; + + if not FSortingNow then + CollumnSortListClear; +{ begin + FSortField := nil; + FSortOrder := smNone; + end; + + F_SortListField.Clear; +} + if {not (csDestroying in ComponentState) and} not (csDesigning in ComponentState) then + SetDBHandlers(Value); +end; + +procedure TRxDBGrid.SetDBHandlers(Value: boolean); +begin + if Value then + begin + if DataSource.DataSet.OnFilterRecord <> @FilterRec then + begin + F_EventOnFilterRec := DataSource.DataSet.OnFilterRecord; + DataSource.DataSet.OnFilterRecord := @FilterRec; + end; + if DataSource.DataSet.BeforeDelete <> @BeforeDel then + begin + F_EventOnBeforeDelete := DataSource.DataSet.BeforeDelete; + DataSource.DataSet.BeforeDelete := @BeforeDel; + end; + if DataSource.DataSet.BeforePost <> @BeforePo then + begin + F_EventOnBeforePost := DataSource.DataSet.BeforePost; + DataSource.DataSet.BeforePost := @BeforePo; + end; + if DataSource.DataSet.OnDeleteError <> @ErrorDel then + begin + F_EventOnDeleteError := DataSource.DataSet.OnDeleteError; + DataSource.DataSet.OnDeleteError := @ErrorDel; + end; + if DataSource.DataSet.OnPostError <> @ErrorPo then + begin + F_EventOnPostError := DataSource.DataSet.OnPostError; + DataSource.DataSet.OnPostError := @ErrorPo; + end; + CalcStatTotals; + if rdgFilter in OptionsRx then + OnFilter(nil); + end + else + begin + if Assigned(DataSource) and Assigned(DataSource.DataSet) then + begin + DataSource.DataSet.OnFilterRecord := F_EventOnFilterRec; + F_EventOnFilterRec := nil; + DataSource.DataSet.BeforeDelete := F_EventOnBeforeDelete; + F_EventOnBeforeDelete := nil; + DataSource.DataSet.BeforePost := F_EventOnBeforePost; + F_EventOnBeforePost := nil; + DataSource.DataSet.OnDeleteError := F_EventOnDeleteError; + F_EventOnDeleteError := nil; + DataSource.DataSet.OnPostError := F_EventOnPostError; + F_EventOnPostError := nil; + if rdgFilter in OptionsRx then + OnFilter(nil); + end; + F_LastFilter.Clear; + end; +end; + +procedure TRxDBGrid.DrawFooterRows; +var + FooterRect: TRect; + R: TRect; + TotalYOffs: integer; + TotalWidth: integer; + i: integer; + C: TRxColumn; + Background: TColor; + ClipArea: Trect; + TxS: TTextStyle; +begin + TotalWidth := GetClientRect.Right; + if ScrollBarIsVisible(SB_HORZ) then + TotalYOffs := GCache.ClientHeight - (GetSystemMetrics(SM_CYHSCROLL) + GetSystemMetrics(SM_SWSCROLLBARSPACING)) + else + TotalYOffs := GCache.ClientHeight; + + FooterRect := Rect(0, TotalYOffs, TotalWidth, TotalYOffs + DefaultRowHeight * FFooterOptions.RowCount + 2); + + Background := Canvas.Brush.Color; + Canvas.Brush.Color := Color; + Canvas.FillRect(FooterRect); + + R.Top := TotalYOffs; + R.Bottom := TotalYOffs + DefaultRowHeight * FFooterOptions.RowCount + 2; + + Canvas.Brush.Color := FFooterOptions.FColor; + if (Columns.Count > 0) then + begin + TxS := Canvas.TextStyle; + + if FDrawFullLine then + begin + ColRowToOffset(True, True, 0, R.Left, R.Right); + Canvas.Pen.Color := GridLineColor; + Canvas.MoveTo(R.Right - 1, R.Top); + Canvas.LineTo(R.Right - 1, RowHeights[0]); + end; + + for i := GCache.VisibleGrid.Left to GCache.VisibleGrid.Right do + begin + ColRowToOffset(True, True, i, R.Left, R.Right); + Canvas.FillRect(R); + DrawCellGrid(i, 0, R, []); + + if FDrawFullLine then + begin + Canvas.MoveTo(R.Right - 1, R.Top); + Canvas.LineTo(R.Right - 1, RowHeights[0]); + end; + + C := ColumnFromGridColumn(i) as TRxColumn; + if Assigned(C) then + begin + TxS.Alignment := C.Footer.Alignment; + TxS.Layout := C.Footer.Layout; + Canvas.TextStyle := TxS; + DrawCellText(i, 0, R, [], C.Footer.DisplayText); + end; + end; + if FDrawFullLine then + begin + Canvas.MoveTo(FooterRect.Left, FooterRect.Top); + Canvas.LineTo(R.Right, FooterRect.Top); + end; + + ClipArea := Canvas.ClipRect; + for i := 0 to FixedCols - 1 do + begin + ColRowToOffset(True, True, i, R.Left, R.Right); + if FFooterOptions.FStyle = tsNative then + DrawThemedCell(i, 0, R, [gdFixed]) + else + DrawCellGrid(i, 0, R, [gdFixed]); + + if ((R.Left < ClipArea.Right) and (R.Right > ClipArea.Left)) then + begin +// DrawCell(i, 0, R, [gdFixed]); + +// PrepareCanvas(i, 0, [gdFixed]); + DefaultDrawTitle(i, 0, getTitleRect(R), [gdFixed]); + end; + end; + end; + Canvas.Brush.Color := Background; +end; + +procedure TRxDBGrid.DoTitleClick(ACol: longint; ACollumn: TRxColumn; + Shift: TShiftState); +begin + if FAutoSort and (FSortEngine <> nil) and (ACollumn.Field <> nil) then + begin + if ssCtrl in Shift then + begin + if ACollumn.FSortOrder <> smNone then + begin + if ACollumn.FSortOrder = smUp then + ACollumn.FSortOrder := smDown + else + begin + ACollumn.FSortOrder := smNone; + ACollumn.FSortPosition:=0; + end; + end + else + begin + ACollumn.FSortOrder := smUp; + ACollumn.FSortPosition:=FSortColumns.Count; + end; + end + else + begin + if (FSortColumns.Count>0) and (FSortColumns[0] = ACollumn) then + begin + if FSortColumns[0].FSortOrder = smUp then + FSortColumns[0].FSortOrder := smDown + else + FSortColumns[0].FSortOrder := smUp; + end + else + begin + CollumnSortListClear; + ACollumn.FSortOrder := smUp; + end; + end; + + CollumnSortListUpdate; + CollumnSortListApply; + end + else + HeaderClick(True, ACol); +end; + +procedure TRxDBGrid.MouseMove(Shift: TShiftState; X, Y: integer); +var + Cell: TGridCoord; + Rect: TRect; +begin + if FTracking then + TrackButton(X, Y); + inherited MouseMove(Shift, X, Y); + + if (rdgFilter in OptionsRx) and (dgColumnResize in Options) and + (Cursor = crHSplit) then + begin + Cell := MouseCoord(X, Y); + Rect := getFilterRect(CellRect(Cell.x, Cell.y)); + if (Cell.Y = 0) and (Cell.X >= Ord(dgIndicator in Options)) and (Rect.Top < Y) then + begin + Cursor := crDefault; + end; + end; + + if FColumnResizing and (MouseToGridZone(X, Y) = gzFixedCols) then + begin + CalcTitle; + if FFooterOptions.Active and (dgColumnResize in Options) and (FFooterOptions.RowCount > 0) then + DrawFooterRows; + end; +end; + +procedure TRxDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: integer); +var + Cell: TGridCoord; + Rect: TRect; + C:TRxColumn; +begin + QuickUTF8Search := ''; + + Cell := MouseCoord(X, Y); + if (DatalinkActive) and (DataSource.DataSet.State = dsBrowse) and + (Button = mbLeft) and (Cell.X = 0) and (Cell.Y = 0) and + (dgIndicator in Options) and (rdgAllowToolMenu in FOptionsRx) then + begin + F_Clicked := True; + InvalidateCell(0, 0); + end + else + if (Cell.Y = 0) and (Cell.X >= Ord(dgIndicator in Options)) then + begin + if (rdgFilter in OptionsRx) and DatalinkActive then + begin + Cell := MouseCoord(X, Y); + Rect := getFilterRect(CellRect(Cell.x, Cell.y)); + if (Cell.Y = 0) and (Cell.X >= Ord(dgIndicator in Options)) and (Rect.Top < Y) then + begin + C:=TRxColumn (Columns[Columns.RealIndex(Cell.x - 1)]); + if (C.Filter.Enabled) and (C.Filter.ValueList.Count > 0) then + begin + FFilterListEditor.Style := csDropDownList; + if C.Filter.DropDownRows>0 then + FFilterListEditor.DropDownCount := C.Filter.DropDownRows; + + FFilterListEditor.Parent := Self; + FFilterListEditor.Width := Rect.Right - Rect.Left; + FFilterListEditor.Height := Rect.Bottom - Rect.Top; + FFilterListEditor.BoundsRect := Rect; + + FFilterListEditor.Items.Assign(C.Filter.ValueList); + + FFilterListEditor.Text := C.Filter.Value; + FFilterListEditor.Show(Self, Cell.x - 1); + end; + exit; + end; + end; + + if dgColumnResize in Options then + begin + FColumnResizing := True; + end; + + if FAutoSort then + begin + Cell := MouseCoord(X, Y); + if (Cell.Y = 0) and (Cell.X >= Ord(dgIndicator in Options)) then + begin + if (dgColumnResize in Options) and (Button = mbRight) then + begin +// Button := mbLeft; +// FSwapButtons := True; +// MouseCapture := True; + Shift := Shift + [ssLeft]; + inherited MouseDown(Button, Shift, X, Y); + end + else + if Button = mbLeft then + begin + if (MouseToGridZone(X, Y) = gzFixedCols) and + (dgColumnResize in Options) and (Cursor = crHSplit) then + begin + if (ssDouble in Shift) and (rdgDblClickOptimizeColWidth in FOptionsRx) then + begin + if Assigned(ColumnFromGridColumn(Cell.X)) then + TRxColumn(ColumnFromGridColumn(Cell.X)).OptimizeWidth; + end + else + inherited MouseDown(Button, Shift, X, Y); + end + else + begin + MouseCapture := True; + FTracking := True; + FPressedCol := TRxColumn(ColumnFromGridColumn(Cell.X)); + TrackButton(X, Y); + inherited MouseDown(Button, Shift, X, Y); + end; + end; + end + else + inherited MouseDown(Button, Shift, X, Y); + end + else + inherited MouseDown(Button, Shift, X, Y); + end + else + begin + if rdgMrOkOnDblClik in FOptionsRx then + begin + if (Cell.Y > 0) and (Cell.X >= Ord(dgIndicator in Options)) and + (ssDouble in Shift) then + begin + if Owner is TCustomForm then + TCustomForm(Owner).ModalResult := mrOk; + end; + end; + inherited MouseDown(Button, Shift, X, Y); + end; +end; + +procedure TRxDBGrid.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: integer); +var + Cell: TGridCoord; + ACol: longint; + DoClick: boolean; + + ShowMenu: boolean; + MPT: TPoint; + Rct: TRect; +begin + ShowMenu := False; + + FColumnResizing := False; + + if (dgHeaderPushedLook in Options) and FTracking and (FPressedCol <> nil) then + begin + Cell := MouseCoord(X, Y); + DoClick := PtInRect(Rect(0, 0, ClientWidth, ClientHeight), Point(X, Y)) and + (Cell.Y < RowHeights[0]) and (FPressedCol = TRxColumn(ColumnFromGridColumn(Cell.X))); + StopTracking; + if DoClick then + begin + ACol := Cell.X; + if (dgIndicator in Options) then + Dec(ACol); + if DataLinkActive and (ACol >= 0) and (ACol < Columns.Count) then + begin + FPressedCol := TRxColumn(ColumnFromGridColumn(Cell.X)); + if Assigned(FPressedCol) then + DoTitleClick(FPressedCol.Index, FPressedCol, Shift); + end; + end; + end + else + if FSwapButtons then + begin + FSwapButtons := False; + MouseCapture := False; + if Button = mbRight then + Button := mbLeft; + end; + + if (DatalinkActive) and (DataSource.DataSet.State = dsBrowse) and + (rdgAllowToolMenu in FOptionsRx) then + begin + Cell := MouseCoord(X, Y); + if ((Button = mbLeft) and (Cell.X = 0) and (Cell.Y = 0) and + (dgIndicator in Options)) or (F_Clicked) then + begin + F_Clicked := False; + InvalidateCell(0, 0); + ShowMenu := True; + Button := mbRight; + end; + end; + + inherited MouseUp(Button, Shift, X, Y); + + if (DatalinkActive) and (DataSource.DataSet.State = dsBrowse) and (ShowMenu) then + begin + Rct := CellRect(0, 0); + MPT.X := Rct.Left; + if rdgFilter in FOptionsRx then + MPT.Y := Rct.Bottom - DefaultRowHeight + else + MPT.Y := Rct.Bottom; + MPT := ClientToScreen(MPT); + + UpdateJMenuStates; + F_PopupMenu.Popup(MPT.X, MPT.Y); + end; +end; + +procedure TRxDBGrid.SetQuickUTF8Search(AValue: string); +var + ClearSearchValue: boolean; + OldSearchString: string; +begin + if (rdgAllowQuickSearch in OptionsRx) then + begin + OldSearchString := Self.FQuickUTF8Search; + if (OldSearchString <> AValue) and Assigned(Self.FBeforeQuickSearch) then + Self.FBeforeQuickSearch(Self, SelectedField, AValue); + if OldSearchString <> AValue then + begin + ClearSearchValue := True; + if (Length(AValue) > 0) and (Self.DatalinkActive) then + begin + if (DataSource.DataSet.State = dsBrowse) and + (not (DataSource.DataSet.EOF and DataSource.DataSet.BOF)) then + begin + //1.Вызываем процедурку поиÑка... + if DataSetLocateThrough(Self.DataSource.DataSet, + Self.SelectedField.FieldName, AValue, [loPartialKey, loCaseInsensitive]) then + Self.FQuickUTF8Search := AValue; + ClearSearchValue := False; + end; + end; + if ClearSearchValue then + begin + Self.FQuickUTF8Search := ''; + end; + if (OldSearchString <> Self.FQuickUTF8Search) and + Assigned(Self.FAfterQuickSearch) then + Self.FAfterQuickSearch(Self, SelectedField, OldSearchString); + end; + end; + //TODO: Ñделать отображение ищущейÑÑ Ð±ÑƒÐºÐ²Ñ‹/Ñтроки. +end; + +procedure TRxDBGrid.UTF8KeyPress(var UTF8Key: TUTF8Char); +var + CheckUp: boolean; +begin + inherited UTF8KeyPress(UTF8Key); + if ReadOnly then + begin + //0. ПроверÑем что Ñто кнопка значащаÑ, увеличиваем "Ñтроку поиÑка" + if Length(UTF8Key) = 1 then + begin + //DebugLn('Ord Of Key:',IntToStr(Ord(UTF8Key[1]))); + CheckUp := not (Ord(UTF8Key[1]) in CBadQuickSearchSymbols); + end + else + CheckUp := True; + // DebugLn('RxDBGrid.UTF8KeyPress check',IfThen(CheckUp,'True','False'),'INIT UTF8Key= ',UTF8Key,' Selected Field: ', Self.SelectedField.FieldName); + if CheckUp then + QuickUTF8Search := QuickUTF8Search + Trim(UTF8Key); + end; +end; + +procedure TRxDBGrid.KeyDown(var Key: word; Shift: TShiftState); +var + FTmpReadOnly: boolean; + + procedure DoShowFindDlg; + begin + if not (rdgAllowDialogFind in OptionsRx) then + exit; + if Length(QuickUTF8Search) > 0 then + QuickUTF8Search := ''; + ShowFindDialog; + end; + + procedure DoShowColumnsDlg; + begin + if not (rdgAllowColumnsForm in OptionsRx) then + exit; + if Length(QuickUTF8Search) > 0 then + QuickUTF8Search := ''; + ShowColumnsDialog; + end; + + procedure DoShowQuickFilter; + begin + if not (rdgAllowQuickFilter in FOptionsRx) then + exit; + OnFilter(Self); + end; + +begin + //DebugLn('RxDBGrid.KeyDown ',Name,' INIT Key= ',IntToStr(Key)); + if (Key in CCancelQuickSearchKeys) then + if Length(QuickUTF8Search) > 0 then + QuickUTF8Search := ''; + case Key of + VK_DELETE: if not (aoDelete in FAllowedOperations) then + exit; + VK_INSERT: if not (aoInsert in FAllowedOperations) then + exit; + VK_RETURN: if (aoAppend in FAllowedOperations) and (EditorMode) and + (Col = ColCount - 1) and (Row = RowCount - 1) then + if DataSource.DataSet.State = dsInsert then + begin + DataSource.DataSet.Post; + Col := 0; + Key := VK_DOWN; + inherited KeyDown(Key, Shift); + exit; + end + else + begin + Col := 0; + Key := VK_DOWN; + inherited KeyDown(Key, Shift); + exit; + end; + + VK_DOWN: + if not (aoAppend in FAllowedOperations) then + begin + FTmpReadOnly := ReadOnly; + ReadOnly := True; + inherited KeyDown(Key, Shift); + ReadOnly := FTmpReadOnly; + exit; + end +{ else + UpdateRowsHeight; + VK_UP:UpdateRowsHeight}; + end; + inherited KeyDown(Key, Shift); + if Key <> 0 then + begin + case FKeyStrokes.FindRxCommand(Key, Shift) of + rxgcShowFindDlg: DoShowFindDlg; + rxgcShowColumnsDlg: DoShowColumnsDlg; + rxgcShowFilterDlg: OnFilterBy(Self); + rxgcShowQuickFilter: DoShowQuickFilter; + rxgcHideQuickFilter: OnFilterClose(Self); + rxgcShowSortDlg: OnSortBy(Self); + rxgcSelectAll: SelectAllRows; + rxgcDeSelectAll: DeSelectAllRows; + rxgcInvertSelection:InvertSelection; + rxgcOptimizeColumnsWidth:OptimizeColumnsWidthAll; + else + exit; + end; + Key := 0; + end; +end; + +function TRxDBGrid.CreateColumns: TGridColumns; +begin + Result := TRxDbGridColumns.Create(Self, TRxColumn); +end; + +procedure TRxDBGrid.DrawCellBitmap(RxColumn: TRxColumn; aRect: TRect; + aState: TGridDrawState; AImageIndex: integer); +var + ClientSize: TSize; + H, W: integer; +begin + InflateRect(aRect, -1, -1); + + H := RxColumn.ImageList.Height; + W := RxColumn.ImageList.Width; + + ClientSize.cx := Min(aRect.Right - aRect.Left, W); + ClientSize.cy := Min(aRect.Bottom - aRect.Top, H); + + if ClientSize.cx = W then + begin + aRect.Left := (aRect.Left + aRect.Right - W) div 2; + aRect.Right := aRect.Left + W; + end; + + if ClientSize.cy = H then + begin + aRect.Top := (aRect.Top + aRect.Bottom - H) div 2; + aRect.Bottom := aRect.Top + H; + end; + + RxColumn.ImageList.StretchDraw(Canvas, AImageIndex, aRect); +end; + +procedure TRxDBGrid.SetEditText(ACol, ARow: longint; const Value: string); +var + C: TRxColumn; + j: integer; + S: string; +begin + C := ColumnFromGridColumn(aCol) as TRxColumn; + S := Value; + if Assigned(C) and (C.KeyList.Count > 0) and (C.PickList.Count > 0) then + begin + J := C.PickList.IndexOf(S); + if (J >= 0) and (J < C.KeyList.Count) then + S := C.KeyList[j]; + end; + inherited SetEditText(ACol, ARow, S); +end; + +procedure TRxDBGrid.CheckNewCachedSizes(var AGCache: TGridDataCache); +begin + if FFooterOptions.Active and (FooterOptions.RowCount > 0) then + Dec(AGCache.ClientHeight, DefaultRowHeight * FooterOptions.RowCount + 2); +end; + +procedure TRxDBGrid.ColRowMoved(IsColumn: boolean; FromIndex, ToIndex: integer); +begin + inherited ColRowMoved(IsColumn, FromIndex, ToIndex); + if IsColumn then + CalcTitle; +end; + +procedure TRxDBGrid.Paint; +begin + Inc(FInProcessCalc); + if rdgWordWrap in FOptionsRx then + UpdateRowsHeight; + + DoClearInvalidTitle; + + inherited Paint; + + DoDrawInvalidTitle; + + if FFooterOptions.Active and (FFooterOptions.RowCount > 0) then + DrawFooterRows; + Dec(FInProcessCalc); +end; + +procedure TRxDBGrid.UpdateActive; +begin +{ if FInProcessCalc > 0 then + exit;} + inherited UpdateActive; +{ if FInProcessCalc < 0 then + begin + FInProcessCalc := 0; + UpdateFooterRowOnUpdateActive; + end +{ else + if FFooterOptions.Active and (FFooterOptions.RowCount > 0) then + UpdateFooterRowOnUpdateActive;} +} + // UpdateRowsHeight; +end; + +procedure TRxDBGrid.UpdateData; +begin + inherited UpdateData; +end; + +procedure TRxDBGrid.MoveSelection; +begin + inherited MoveSelection; + if Assigned(FFooterOptions) and FFooterOptions.Active and (FFooterOptions.RowCount > 0) then + DrawFooterRows; +// UpdateRowsHeight; +end; + +{$IFDEF RX_USE_LCL_DEVEL} +function TRxDBGrid.GetBufferCount: integer; +var + H:integer; +begin + Result := ClientHeight div DefaultRowHeight; + if rdgWordWrap in FOptionsRx then + begin + H:=UpdateRowsHeight; +// if H>0 then +// Result := H; + end; + if dgTitles in Options then + begin + Dec(Result, RowHeights[0] div DefaultRowHeight); + end; + if FFooterOptions.Active then + Dec(Result, FFooterOptions.RowCount); +end; +{$ENDIF} + +procedure TRxDBGrid.CMHintShow(var Message: TLMessage); +var + Cell: TGridCoord; + tCol: TRxColumn; +begin + if Assigned(TCMHintShow(Message).HintInfo) then + begin + with TCMHintShow(Message).HintInfo^ do + begin + Cell := MouseCoord(CursorPos.X, CursorPos.Y); + if (Cell.Y = 0) and (Cell.X >= Ord(dgIndicator in Options)) then + begin + tCol := TRxColumn(ColumnFromGridColumn(Cell.X)); + if Assigned(tCol) and (TRxColumnTitle(tCol.Title).Hint <> '') and + (TRxColumnTitle(tCol.Title).FShowHint) then + HintStr := TRxColumnTitle(tCol.Title).Hint; + end; + end; + end; + inherited CMHintShow(Message); +end; + +procedure TRxDBGrid.FFilterListEditorOnChange(Sender: TObject); +begin + FFilterListEditor.Hide; + with TRxColumn(Columns[Columns.RealIndex(FFilterListEditor.Col)]).Filter do + begin + if FFilterListEditor.Text = EmptyValue then + Value := '' + else + Value := FFilterListEditor.Text; + end; + + DataSource.DataSet.Refresh; + CalcStatTotals; + + if Assigned(FOnFiltred) then + FOnFiltred(Self); +end; + +procedure TRxDBGrid.FFilterListEditorOnCloseUp(Sender: TObject); +begin + FFilterListEditor.Hide; + FFilterListEditor.Changed; + SetFocus; +end; + +procedure TRxDBGrid.InternalOptimizeColumnsWidth(AColList: TList); +var + P: TBookmark; + i, W, n: integer; + WA: PIntegerArray; + S: string; +begin + GetMem(WA, SizeOf(integer) * AColList.Count); + + for I := 0 to AColList.Count - 1 do + begin + if TRxColumnTitle(TRxColumn(AColList[i]).Title).CaptionLinesCount > 1 then + WA^[i] := Max(Canvas.TextWidth( + TRxColumnTitle(TRxColumn(AColList[i]).Title).CaptionLine( + TRxColumnTitle(TRxColumn(AColList[i]).Title).CaptionLinesCount - + 1).Caption) + 8, 20) + else + WA^[i] := Max(Canvas.TextWidth(TRxColumn(AColList[i]).Title.Caption) + 8, 20); + end; + + with DataSource.DataSet do + begin + DisableControls; + P := GetBookmark; + First; + try + while not EOF do + begin + for I := 0 to AColList.Count - 1 do + begin + if Assigned(TRxColumn(AColList[i]).Field) then + S := TRxColumn(AColList[i]).Field.DisplayText + else + S:=''; + with TRxColumn(AColList[i]) do + if (KeyList.Count > 0) and (PickList.Count > 0) then + begin + n := KeyList.IndexOf(S); + if (n <> -1) and (n < PickList.Count) then + S := PickList.Strings[n]; + end; + W := Canvas.TextWidth(S) + 6; + if WA^[i] < W then + WA^[i] := W; + end; + Next; + end; + finally + GotoBookmark(p); + FreeBookmark(p); + EnableControls; + end; + end; + + for I := 0 to AColList.Count - 1 do + if WA^[i] > 0 then + TRxColumn(AColList[i]).Width := WA^[i]; + + FreeMem(WA, SizeOf(integer) * AColList.Count); +end; + +function TRxDBGrid.IsDefaultRowHeightStored: boolean; +begin + Result := DefaultRowHeight = Canvas.TextHeight('Wg'); +end; + +procedure TRxDBGrid.VisualChange; +begin + inherited VisualChange; + CalcTitle; + +{ if rdgWordWrap in FOptionsRx then + UpdateRowsHeight;} +end; + +procedure TRxDBGrid.EditorWidthChanged(aCol, aWidth: Integer); +var + R:TRect; +begin + inherited EditorWidthChanged(aCol, aWidth); + if FFilterListEditor.Visible then + begin + R:=CellRect(FFilterListEditor.Col+1,0); + FFilterListEditor.Width:=Columns[FFilterListEditor.Col].Width; + FFilterListEditor.Left:=R.Left; + end; +end; + +function TRxDBGrid.EditorByStyle(Style: TColumnButtonStyle): TWinControl; +var + F: TField; +begin + if Style = cbsAuto then + begin + F := SelectedField; + if Assigned(F) then + begin + if Assigned(F.LookupDataSet) and (F.LookupKeyFields <> '') and + (F.LookupResultField <> '') and (F.KeyFields <> '') then + begin + Result := FRxDbGridLookupComboEditor; + exit; + end + else + if F.DataType in [ftDate, ftDateTime] then + begin + Result := FRxDbGridDateEditor; + exit; + end; + end; + end; + Result := inherited EditorByStyle(Style); + + if (Style = cbsPickList) and (Result is TCustomComboBox) then + begin + if TRxColumn(SelectedColumn).DirectInput then + TCustomComboBox(Result).Style:=csDropDown + else + TCustomComboBox(Result).Style:=csDropDownList; + end; + +end; + +procedure TRxDBGrid.CalcStatTotals; +var + //P: TBookmark; + //DS: TDataSet; + i, cnt: integer; + APresent: boolean; + //SEA, SEB:TDataSetNotifyEvent; + + DHL:THackDataLink; + DHS:THackDataSet; + + SaveState:TDataSetState; + SavePos:integer; + SaveActiveRecord:integer; + + SaveAfterScroll:TDataSetNotifyEvent; + SaveBeforeScroll:TDataSetNotifyEvent; + RCol:TRxColumn; +begin + if (not (FFooterOptions.Active and DatalinkActive)) or (Columns.Count = 0) or (gsAddingAutoColumns in GridStatus) then + Exit; + //Дополнительно проверим - а Ñтоит ли делать пробег по данным - еÑть ли агрегатные функции + APresent := False; + for i := 0 to Columns.Count - 1 do + begin + APresent := TRxColumn(Columns[i]).Footer.FValueType in + [fvtSum, fvtAvg, fvtMax, fvtMin, fvtCount]; + if APresent then + break; + end; + + if not APresent then + exit; + + + Inc(FInProcessCalc); + + (* + if Assigned(FSortEngine) and (FSortEngine.EnabledFooterRowsCalc) then + begin + for i := 0 to Columns.Count - 1 do + TRxColumn(Columns[i]).Footer.ResetTestValue; + + FSortEngine.UpdateFooterRows(DataSource.DataSet, Self); + + exit; + end; + + DS := DataSource.DataSet; + ; + P := Ds.GetBookMark; + DS.DisableControls; + SEB:=DS.BeforeScroll; + SEA:=DS.AfterScroll; + DS.BeforeScroll:=nil; + DS.AfterScroll:=nil; + try + DS.First; + for i := 0 to Columns.Count - 1 do + TRxColumn(Columns[i]).Footer.ResetTestValue; + + while not DS.EOF do + begin + for i := 0 to Columns.Count - 1 do + TRxColumn(Columns[i]).Footer.UpdateTestValue; + DS.Next; + end; + finally + DS.GotoBookmark(P); + DS.FreeBookmark(P); + DS.BeforeScroll:=SEB; + DS.AfterScroll:=SEA; + DS.EnableControls; + end; +*) + + cnt:=0; + for i := 0 to Columns.Count - 1 do + TRxColumn(Columns[i]).Footer.ResetTestValue; + + if (DataSource.DataSet.RecordCount<=0) then + begin + Dec(FInProcessCalc); + exit; + end; + + DHL:=THackDataLink(Datalink); + DHS:=THackDataSet(DataSource.DataSet); + SaveState:=DHS.SetTempState(dsBrowse); + + SaveAfterScroll:=DHS.AfterScroll; + SaveBeforeScroll:=DHS.BeforeScroll; + DHS.AfterScroll:=nil; + DHS.BeforeScroll:=nil; + + SaveActiveRecord:=DHL.ActiveRecord; + DHL.ActiveRecord:=0; + SavePos:=DHS.RecNo; + + + DHS.First; + while not DHS.EOF do + begin + for i:=0 to Columns.Count-1 do + begin + RCol:=TRxColumn(Columns[i]); + if RCol.Footer.ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + RCol.Footer.UpdateTestValueFromVar( DHS.FieldByName(RCol.Footer.FieldName).Value); + end; + inc(cnt); + DHS.Next; + end; + + for i:=0 to Columns.Count-1 do + begin + RCol:=TRxColumn(Columns[i]); + if RCol.Footer.ValueType = fvtCount then + RCol.Footer.FCountRec:=Cnt; //( DHS.FieldByName(RCol.Footer.FieldName).Value); + end; + + DHS.RecNo := DHL.RecordCount + SavePos + 1; + + while not DHS.BOF do + begin + if SavePos = DHS.RecNo then + break; + DHS.Prior; + end; + + DHL.ActiveRecord:=SaveActiveRecord; + DHS.RestoreState(SaveState); + + DHS.AfterScroll := SaveAfterScroll; + DHS.BeforeScroll := SaveBeforeScroll; + + Dec(FInProcessCalc); + if FInProcessCalc < 0 then + FInProcessCalc := 0; +end; + +procedure TRxDBGrid.OptimizeColumnsWidth(AColList: string); +var + ColList: TList; + + procedure DoFillColList; + var + L: integer; + begin + L := Pos(';', AColList); + while L > 0 do + begin + if AColList <> '' then + ColList.Add(ColumnByFieldName(Copy(AColList, 1, L - 1))); + Delete(AColList, 1, L); + L := Pos(';', AColList); + end; + if AColList <> '' then + ColList.Add(ColumnByFieldName(AColList)); + end; + +begin + if (not DatalinkActive) or (Columns.Count = 0) then + Exit; + ColList := TList.Create; + DoFillColList; + InternalOptimizeColumnsWidth(ColList); + ColList.Free; + + if Assigned(OnColumnSized) then + OnColumnSized(Self); +end; + +procedure TRxDBGrid.OptimizeColumnsWidthAll; +var + ColList: TList; + i: integer; +begin + if (not DatalinkActive) or (Columns.Count = 0) then + Exit; + ColList := TList.Create; + for i := 0 to Columns.Count - 1 do + ColList.Add(Columns[i]); + InternalOptimizeColumnsWidth(ColList); + ColList.Free; +end; + +procedure TRxDBGrid.UpdateTitleHight; +begin + CalcTitle; +end; + +procedure TRxDBGrid.FilterRec(DataSet: TDataSet; var Accept: boolean); +var + i: integer; +begin + Accept := True; + for i := 0 to Columns.Count - 1 do + begin + with TRxColumn(Columns[i]) do + begin + if (Filter.Value <> '') then + begin + if (Filter.Value <> Field.DisplayText) then + begin + Accept := False; + break; + end; + end; + end; + end; + if Assigned(F_EventOnFilterRec) then + F_EventOnFilterRec(DataSet, Accept); +end; + +procedure TRxDBGrid.BeforeDel(DataSet: TDataSet); +var + i: integer; +begin + if FFooterOptions.Active and (DatalinkActive) then + for i := 0 to Columns.Count - 1 do + if not TRxColumn(Columns[i]).Footer.DeleteTestValue then + begin + FInProcessCalc := -1; + Break; + end; + if Assigned(F_EventOnBeforeDelete) then + F_EventOnBeforeDelete(DataSet); +end; + +procedure TRxDBGrid.BeforePo(DataSet: TDataSet); +var + i: integer; + C:TRxColumn; +begin + if DatalinkActive then + begin + if FooterOptions.Active then + for i := 0 to Columns.Count - 1 do + begin + if not TRxColumn(Columns[i]).Footer.PostTestValue then + begin + FInProcessCalc := -1; + Break; + end; + end; + + if rdgFilter in OptionsRx then + for i := 0 to Columns.Count - 1 do + begin + C:=TRxColumn(Columns[i]); + if Assigned(C.Field) and (C.Filter.ValueList.IndexOf(C.Field.DisplayText)< 0) then + C.Filter.ValueList.Add(C.Field.DisplayText); + end; + end; + + if Assigned(F_EventOnBeforePost) then + F_EventOnBeforePost(DataSet); +end; + +procedure TRxDBGrid.ErrorDel(DataSet: TDataSet; E: EDatabaseError; + var DataAction: TDataAction); +var + i: integer; +begin + if FFooterOptions.Active and (DatalinkActive) then + for i := 0 to Columns.Count - 1 do + if not TRxColumn(Columns[i]).Footer.ErrorTestValue then + begin + FInProcessCalc := -1; + Break; + end; + if Assigned(F_EventOnDeleteError) then + F_EventOnDeleteError(DataSet, E, DataAction); +end; + +procedure TRxDBGrid.ErrorPo(DataSet: TDataSet; E: EDatabaseError; + var DataAction: TDataAction); +var + i: integer; +begin + if FFooterOptions.Active and (DatalinkActive) then + for i := 0 to Columns.Count - 1 do + if not TRxColumn(Columns[i]).Footer.ErrorTestValue then + begin + FInProcessCalc := -1; + Break; + end; + if Assigned(F_EventOnPostError) then + F_EventOnPostError(DataSet, E, DataAction); +end; + +procedure TRxDBGrid.OnFind(Sender: TObject); +begin + if rdgAllowDialogFind in OptionsRx then + ShowFindDialog; +end; + +procedure TRxDBGrid.OnFilterBy(Sender: TObject); +var + NewFilter: string; +begin + if DataLinkActive then + begin + OptionsRx := OptionsRx - [rdgFilter]; + rxFilterByForm := TrxFilterByForm.Create(Application); + NewFilter := DataSource.DataSet.Filter; + if rxFilterByForm.Execute(Self, NewFilter, F_LastFilter) then + begin + if NewFilter <> '' then + begin + DataSource.DataSet.Filter := NewFilter; + DataSource.DataSet.Filtered := True; + end + else + begin + DataSource.DataSet.Filtered := False; + end; + CalcStatTotals; + end; + FreeAndNil(rxFilterByForm); + end; +end; + +procedure TRxDBGrid.OnFilter(Sender: TObject); +var + C: TRxColumn; + i: integer; +begin + BeginUpdate; + OptionsRx := OptionsRx + [rdgFilter]; + + for i := 0 to Columns.Count - 1 do + begin + C := TRxColumn(Columns[i]); + C.Filter.ValueList.Clear; + C.Filter.Value := ''; + C.Filter.ItemIndex := -1; + C.Filter.ValueList.Add(C.Filter.EmptyValue); + end; + + if DatalinkActive then + begin + DataSource.DataSet.DisableControls; + DataSource.DataSet.Filtered := True; + DataSource.DataSet.First; + while not DataSource.DataSet.EOF do + begin + for i := 0 to Columns.Count - 1 do + begin + C := TRxColumn(Columns[i]); + if C.Filter.Enabled and (C.Field <> nil) and (C.Filter.ValueList.IndexOf(C.Field.DisplayText) < 0) then + C.Filter.ValueList.Add(C.Field.DisplayText); + end; + DataSource.DataSet.Next; + end; + DataSource.DataSet.First; + DataSource.DataSet.EnableControls; + end; + + EndUpdate; +end; + +procedure TRxDBGrid.OnFilterClose(Sender: TObject); +var + C: TRxColumn; + i: integer; +begin + OptionsRx := OptionsRx - [rdgFilter]; + DataSource.DataSet.Filtered := False; + CalcStatTotals; +end; + +procedure TRxDBGrid.OnSortBy(Sender: TObject); +var + i: integer; + S1: string; + FSortListField:TStringList; + FColumn:TRxColumn; +begin + if DatalinkActive then + begin + FSortListField:=TStringList.Create; + try + rxSortByForm := TrxSortByForm.Create(Application); + rxSortByForm.CheckBox1.Checked := rdgCaseInsensitiveSort in FOptionsRx; + if rxSortByForm.Execute(Self, FSortListField) then + begin + for i := 0 to FSortListField.Count - 1 do + begin + S1:=FSortListField.Strings[i]; + FColumn:=TRxColumn(ColumnByFieldName(Copy(S1, 2, Length(S1)))); + if S1[1] = '1' then + FColumn.FSortOrder := smUp + else + FColumn.FSortOrder := smDown; + + FColumn.FSortPosition:=i; + end; + + CollumnSortListUpdate; + + if rxSortByForm.CheckBox1.Checked then + Include(FOptionsRx, rdgCaseInsensitiveSort) + else + Exclude(FOptionsRx, rdgCaseInsensitiveSort); + + CollumnSortListApply; + end; + + finally + FreeAndNil(rxSortByForm); + FreeAndNil(FSortListField); + end; + Invalidate; + end; +end; + +procedure TRxDBGrid.OnChooseVisibleFields(Sender: TObject); +begin + if rdgAllowColumnsForm in OptionsRx then + ShowColumnsDialog; +end; + +procedure TRxDBGrid.OnSelectAllRows(Sender: TObject); +begin + SelectAllRows; +end; + +procedure TRxDBGrid.Loaded; +begin + inherited Loaded; + UpdateJMenuKeys; +end; + +procedure TRxDBGrid.UpdateFooterRowOnUpdateActive; +begin + if Assigned(DataSource) then + begin + if DataSource.State <> FOldDataSetState then + begin + if (FOldDataSetState in dsEditModes) and (DataSource.State = dsBrowse) then + CalcStatTotals; + FOldDataSetState:=DataSource.State; + end; + end + else + FOldDataSetState:=dsInactive; +end; + +procedure TRxDBGrid.DoEditorHide; +var + R:TRxColumn; + i, w:integer; +begin + inherited DoEditorHide; + R:=SelectedColumn as TRxColumn; + + if Assigned(Editor) and Assigned(R) then + for i:=0 to R.EditButtons.Count-1 do + R.EditButtons[i].FButton.Visible:=false; +end; + +procedure TRxDBGrid.DoEditorShow; +begin + inherited DoEditorShow; + DoSetColEdtBtn; +end; + +procedure TRxDBGrid.GetOnCreateLookup; +begin + if Assigned(F_CreateLookup) then + F_CreateLookup(FRxDbGridLookupComboEditor); +end; + +procedure TRxDBGrid.GetOnDisplayLookup; +begin + if Assigned(F_DisplayLookup) then + F_DisplayLookup(FRxDbGridLookupComboEditor); +end; + +procedure TRxDBGrid.SelectAllRows; +var + P:TBookMark; +begin + if DatalinkActive then + begin + DataSource.DataSet.DisableControls; +{$IFDEF NoAutomatedBookmark} + P:=DataSource.DataSet.GetBookmark; +{$ELSE} + P:=DataSource.DataSet.Bookmark; +{$ENDIF} + try + DataSource.DataSet.First; + while not DataSource.DataSet.EOF do + begin + SelectedRows.CurrentRowSelected:=true; + DataSource.DataSet.Next; + end; + finally +{$IFDEF NoAutomatedBookmark} + DataSource.DataSet.GotoBookmark(P); + DataSource.DataSet.FreeBookmark(P); +{$ELSE} + DataSource.DataSet.Bookmark:=P; +{$ENDIF} + DataSource.DataSet.EnableControls; + end; + Invalidate; + end; +end; + +procedure TRxDBGrid.DeSelectAllRows; +var + P:TBookMark; +begin + if DatalinkActive then + begin + DataSource.DataSet.DisableControls; +{$IFDEF NoAutomatedBookmark} + P:=DataSource.DataSet.GetBookmark; +{$ELSE} + P:=DataSource.DataSet.Bookmark; +{$ENDIF} + try + DataSource.DataSet.First; + while not DataSource.DataSet.EOF do + begin + SelectedRows.CurrentRowSelected:=false; + DataSource.DataSet.Next; + end; + finally +{$IFDEF NoAutomatedBookmark} + DataSource.DataSet.GotoBookmark(P); + DataSource.DataSet.FreeBookmark(P); +{$ELSE} + DataSource.DataSet.Bookmark:=P; +{$ENDIF} + DataSource.DataSet.EnableControls; + end; + Invalidate; + end; +end; + +procedure TRxDBGrid.InvertSelection; +var + P:TBookMark; +begin + if DatalinkActive then + begin + DataSource.DataSet.DisableControls; + {$IFDEF NoAutomatedBookmark} + P:=DataSource.DataSet.GetBookmark; + {$ELSE} + P:=DataSource.DataSet.Bookmark; + {$ENDIF} + try + DataSource.DataSet.First; + while not DataSource.DataSet.EOF do + begin + SelectedRows.CurrentRowSelected:=not SelectedRows.CurrentRowSelected; + DataSource.DataSet.Next; + end; + finally + {$IFDEF NoAutomatedBookmark} + DataSource.DataSet.GotoBookmark(P); + DataSource.DataSet.FreeBookmark(P); + {$ELSE} + DataSource.DataSet.Bookmark:=P; + {$ENDIF} + DataSource.DataSet.EnableControls; + end; + Invalidate; + end; +end; + +//!!! +constructor TRxDBGrid.Create(AOwner: TComponent); +begin + FFooterOptions:=TRxDBGridFooterOptions.Create(Self); + inherited Create(AOwner); +{$IFDEF RXDBGRID_OPTIONS_WO_CANCEL_ON_EXIT} + Options := Options - [dgCancelOnExit]; +{$ENDIF} + + FSortColumns:=TRxDbGridColumnsSortList.Create; + + FMarkerUp := LoadLazResBitmapImage('rx_markerup'); + FMarkerDown := LoadLazResBitmapImage('rx_markerdown'); + + Options := Options - [dgTabs]; + OptionsRx := OptionsRx + [rdgAllowColumnsForm, rdgAllowDialogFind, + rdgAllowQuickFilter]; + + FAutoSort := True; + // FTitleButtons:=True; + + F_Clicked := False; + F_MenuBMP := LoadLazResBitmapImage('menu_grid'); + + DoCreateJMenu; + + FKeyStrokes := TRxDBGridKeyStrokes.Create(Self); + FKeyStrokes.ResetDefaults; + + F_LastFilter := TStringList.Create; + //F_SortListField := TStringList.Create; + + FPropertyStorageLink := TPropertyStorageLink.Create; + FPropertyStorageLink.OnSave := @OnIniSave; + FPropertyStorageLink.OnLoad := @OnIniLoad; + + FAllowedOperations := [aoInsert, aoUpdate, aoDelete, aoAppend]; + + FFilterListEditor := TFilterListCellEditor.Create(nil); + with FFilterListEditor do + begin + Name := 'FilterListEditor'; + Visible := False; + Items.Append(''); + ReadOnly := True; + AutoComplete := True; + OnChange := @FFilterListEditorOnChange; + OnCloseUp := @FFilterListEditorOnCloseUp; + end; + FColumnResizing := False; + + FRxDbGridLookupComboEditor := TRxDBGridLookupComboEditor.Create(nil); + FRxDbGridLookupComboEditor.Name := 'RxDBGridLookupComboEditor'; + FRxDbGridLookupComboEditor.Visible := False; + + FRxDbGridDateEditor := TRxDBGridDateEditor.Create(nil); + FRxDbGridDateEditor.Name := 'RxDbGridDateEditor'; + FRxDbGridDateEditor.Visible := False; + + UpdateJMenuKeys; + +end; + +destructor TRxDBGrid.Destroy; +begin + CleanDSEvent; + + FreeAndNil(FFooterOptions); + + FreeAndNil(FRxDbGridLookupComboEditor); + FreeAndNil(FRxDbGridDateEditor); + FreeAndNil(FMarkerDown); + FreeAndNil(FMarkerUp); + FreeAndNil(FPropertyStorageLink); + FreeAndNil(FFilterListEditor); + + FreeAndNil(F_PopupMenu); + FreeAndNil(F_MenuBMP); + FreeAndNil(F_LastFilter); + + FreeAndNil(FKeyStrokes); + inherited Destroy; + FreeAndNil(FSortColumns); +end; + +procedure TRxDBGrid.LayoutChanged; +begin + if csDestroying in ComponentState then + exit; + + inherited LayoutChanged; + if DatalinkActive and (FInProcessCalc = 0) and (Datalink.DataSet.State = dsBrowse) then + CalcStatTotals; +end; + +procedure TRxDBGrid.SetFocus; +begin + inherited SetFocus; + if FFilterListEditor.Visible then + FFilterListEditor.Hide; +end; + +procedure TRxDBGrid.ShowFindDialog; +begin + ShowRxDBGridFindForm(Self); +end; + +procedure TRxDBGrid.ShowColumnsDialog; +begin + ShowRxDBGridColumsForm(Self); +end; + +procedure TRxDBGrid.ShowSortDialog; +begin + OnSortBy(nil); +end; + +procedure TRxDBGrid.ShowFilterDialog; +begin + OnFilterBy(nil); +end; + +function TRxDBGrid.ColumnByFieldName(AFieldName: string): TRxColumn; +var + i: integer; +begin + Result := nil; + AFieldName := UpperCase(AFieldName); + for i := 0 to Columns.Count - 1 do + begin + if UpperCase(Columns[i].FieldName) = AFieldName then + begin + Result := Columns[i] as TRxColumn; + exit; + end; + end; +end; + +function TRxDBGrid.ColumnByCaption(ACaption: string): TRxColumn; +var + i: integer; +begin + Result := nil; + ACaption := UpperCase(ACaption); + for i := 0 to Columns.Count - 1 do + if ACaption = UpperCase(Columns[i].Title.Caption) then + begin + Result := TRxColumn(Columns[i]); + exit; + end; +end; + +procedure TRxDBGrid.EraseBackground(DC: HDC); +begin + // The correct implementation is doing nothing +end; + +procedure TRxDbGridColumns.Notify(Item: TCollectionItem; + Action: TCollectionNotification); +begin + inherited Notify(Item, Action); + TRxDBGrid(Grid).CollumnSortListUpdate; +end; + +{ TRxDbGridColumns } +function TRxDbGridColumns.Add: TRxColumn; +begin + Result := TRxColumn(inherited Add); +end; + +{ TRxColumn } + +function TRxColumn.GetKeyList: TStrings; +begin + if FKeyList = nil then + FKeyList := TStringList.Create; + Result := FKeyList; +end; + +procedure TRxColumn.SetEditButtons(AValue: TRxColumnEditButtons); +begin + FEditButtons.Assign(AValue); +end; + +procedure TRxColumn.SetFilter(const AValue: TRxColumnFilter); +begin + FFilter.Assign(AValue); +end; + +function TRxColumn.GetFooter: TRxColumnFooter; +begin + Result := FFooter; +end; + +procedure TRxColumn.SetFooter(const AValue: TRxColumnFooter); +begin + FFooter.Assign(AValue); +end; + +procedure TRxColumn.SetImageList(const AValue: TImageList); +begin + if FImageList = AValue then + exit; + FImageList := AValue; + if Grid <> nil then + Grid.Invalidate; +end; + +procedure TRxColumn.SetKeyList(const AValue: TStrings); +begin + if AValue = nil then + begin + if FKeyList <> nil then + FKeyList.Clear; + end + else + KeyList.Assign(AValue); +end; + +procedure TRxColumn.SetNotInKeyListIndex(const AValue: integer); +begin + if FNotInKeyListIndex = AValue then + exit; + FNotInKeyListIndex := AValue; + if Grid <> nil then + Grid.Invalidate; +end; + +procedure TRxColumn.SetWordWrap(AValue: boolean); +begin + if FWordWrap=AValue then Exit; + FWordWrap:=AValue; +end; + +function TRxColumn.CreateTitle: TGridColumnTitle; +begin + Result := TRxColumnTitle.Create(Self); +end; + +constructor TRxColumn.Create(ACollection: TCollection); +begin + inherited Create(ACollection); + FNotInKeyListIndex := -1; + FFooter := TRxColumnFooter.Create(Self); + FFilter := TRxColumnFilter.Create(Self); + FDirectInput := true; + FEditButtons:=TRxColumnEditButtons.Create(Self); +end; + +destructor TRxColumn.Destroy; +begin + FreeAndNil(FEditButtons); + if FKeyList <> nil then + begin + FKeyList.Free; + FKeyList := nil; + end; + FreeAndNil(FFooter); + FreeAndNil(FFilter); + inherited Destroy; +end; + +procedure TRxColumn.OptimizeWidth; +begin + if Grid <> nil then + TRxDBGrid(Grid).OptimizeColumnsWidth(FieldName); +end; + +{ TRxColumnTitle } +procedure TRxColumnTitle.SetOrientation(const AValue: TTextOrientation); +begin + if FOrientation = AValue then + exit; + FOrientation := AValue; + TRxDBGrid(TRxColumn(Column).Grid).CalcTitle; + TRxColumn(Column).ColumnChanged; +end; + +function TRxColumnTitle.GetCaptionLinesCount: integer; +begin + if Assigned(FCaptionLines) then + Result := FCaptionLines.Count + else + Result := 0; +end; + +function TRxColumnTitle.CaptionLine(ALine: integer): TMLCaptionItem; +begin + if Assigned(FCaptionLines) and (FCaptionLines.Count > 0) and + (ALine >= 0) and (FCaptionLines.Count > ALine) then + Result := TMLCaptionItem(FCaptionLines[ALine]) + else + Result := nil; +end; + +procedure TRxColumnTitle.ClearCaptionML; +var + i: integer; + R: TMLCaptionItem; +begin + for i := 0 to FCaptionLines.Count - 1 do + begin + R := TMLCaptionItem(FCaptionLines[i]); + R.Free; + end; + FCaptionLines.Clear; +end; + +procedure TRxColumnTitle.SetCaption(const AValue: TCaption); +var + c: integer; + s: string; + + procedure AddMLStr(AStr: string); + var + R: TMLCaptionItem; + begin + R := TMLCaptionItem.Create; + R.Caption := AStr; + R.Col := Column; + FCaptionLines.Add(R); + end; + +begin + inherited SetCaption(AValue); + ClearCaptionML; + c := Pos('|', AValue); + if C > 0 then + begin + S := AValue; + while C > 0 do + begin + AddMLStr(Copy(S, 1, C - 1)); + System.Delete(S, 1, C); + c := Pos('|', S); + end; + if S <> '' then + AddMLStr(S); + end; + if not (csLoading in Column.Grid.ComponentState) and Column.Grid.HandleAllocated then + TRxDBGrid(Column.Grid).CalcTitle; +end; + +constructor TRxColumnTitle.Create(TheColumn: TGridColumn); +begin + inherited Create(TheColumn); +{$IFDEF NEW_STYLE_TITLE_ALIGNMENT_RXDBGRID} + Alignment := taCenter; +{$ENDIF} + FCaptionLines := TFPList.Create; +end; + +destructor TRxColumnTitle.Destroy; +begin + ClearCaptionML; + FreeAndNil(FCaptionLines); + inherited Destroy; +end; + +{ TRxColumnFooter } + +procedure TRxColumnFooter.SetValue(const AValue: string); +begin + if FValue = AValue then + exit; + FValue := AValue; + FOwner.ColumnChanged; +end; + +procedure TRxColumnFooter.SetDisplayFormat(const AValue: string); +begin + if FDisplayFormat = AValue then + exit; + FDisplayFormat := AValue; + FOwner.ColumnChanged; +end; + +procedure TRxColumnFooter.SetAlignment(const AValue: TAlignment); +begin + if FAlignment = AValue then + exit; + FAlignment := AValue; + FOwner.ColumnChanged; +end; + +procedure TRxColumnFooter.SetFieldName(const AValue: string); +begin + if FFieldName = AValue then + exit; + FFieldName := AValue; + FOwner.ColumnChanged; +end; + +procedure TRxColumnFooter.SetLayout(const AValue: TTextLayout); +begin + if FLayout = AValue then + exit; + FLayout := AValue; + FOwner.ColumnChanged; +end; + +procedure TRxColumnFooter.SetValueType(const AValue: TFooterValueType); +begin + if FValueType = AValue then + exit; + FValueType := AValue; + if FValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + TRxDBGrid(FOwner.Grid).CalcStatTotals; + FOwner.ColumnChanged; +end; + +function TRxColumnFooter.DisplayText: string; +begin + case FValueType of + fvtSum, + fvtAvg, + fvtMax, + fvtMin: Result := GetStatTotal; + fvtCount: Result := GetRecordsCount; + fvtFieldValue: Result := GetFieldValue; + fvtStaticText: Result := FValue; + fvtRecNo: Result := GetRecNo; + else + Result := ''; + end; +end; + +function TRxColumnFooter.GetFieldValue: string; +begin + if (FFieldName <> '') and TRxDBGrid(FOwner.Grid).DatalinkActive then + Result := TRxDBGrid(FOwner.Grid).DataSource.DataSet.FieldByName(FFieldName).AsString + else + Result := ''; +end; + +function TRxColumnFooter.GetRecordsCount: string; +begin + if TRxDBGrid(FOwner.Grid).DatalinkActive then + begin + if DisplayFormat <> '' then + Result := Format(DisplayFormat, + [{TRxDBGrid(FOwner.Grid).DataSource.DataSet.RecordCount} FCountRec]) + else + Result := IntToStr(FCountRec); //TRxDBGrid(FOwner.Grid).DataSource.DataSet.RecordCount); + end + else + Result := ''; +end; + +function TRxColumnFooter.GetRecNo: string; +begin + if TRxDBGrid(FOwner.Grid).DatalinkActive then + begin + if DisplayFormat <> '' then + Result := Format(DisplayFormat, [TRxDBGrid(FOwner.Grid).DataSource.DataSet.RecNo]) + else + Result := IntToStr(TRxDBGrid(FOwner.Grid).DataSource.DataSet.RecNo); + end + else + Result := ''; +end; + +function TRxColumnFooter.GetStatTotal: string; +var + F: TField; +begin + if (FFieldName <> '') and TRxDBGrid(FOwner.Grid).DatalinkActive and + (TRxDBGrid(FOwner.Grid).DataSource.DataSet.RecordCount <> 0) then + begin + F := TRxDBGrid(FOwner.Grid).DataSource.DataSet.FieldByName(FFieldName); + if Assigned(F) then + begin + if F.DataType in [ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency, + ftDate, ftTime, ftDateTime, ftTimeStamp, ftLargeint, ftBCD] then + begin + if F.DataType in [ftDate, ftTime, ftDateTime, ftTimeStamp] then + begin + if FValueType in [fvtSum, fvtAvg] then + Result := '' + else + if FTestValue = 0 then + Result := '' + else + if FDisplayFormat = '' then + Result := DateToStr(FTestValue) + else + Result := FormatDateTime(FDisplayFormat, FTestValue); + end + else + if F.DataType in [ftSmallint, ftInteger, ftWord, ftLargeint] then + begin + if FDisplayFormat = '' then + Result := IntToStr(Round(FTestValue)) + else + Result := Format(FDisplayFormat, [Round(FTestValue)]); + end + else + begin + if FDisplayFormat <> '' then + Result := FormatFloat(FDisplayFormat, FTestValue) + else + if F.DataType = ftCurrency then + Result := FloatToStrF(FTestValue, ffCurrency, 12, 2) + else + Result := FloatToStr(FTestValue); + end; + end + else + Result := ''; + end + else + Result := ''; + end + else + Result := ''; +end; + +procedure TRxColumnFooter.ResetTestValue; +var + F: TField; +begin + FTestValue := 0; + FCountRec:=0; + + if (ValueType = fvtMin) and (TRxDBGrid( + FOwner.Grid).DataSource.DataSet.RecordCount <> 0) then + begin + F := TRxDBGrid(FOwner.Grid).DataSource.DataSet.FieldByName(FFieldName); + if (Assigned(F)) and not (F.IsNull) then + if F.DataType in [ftDate, ftTime, ftDateTime, ftTimeStamp] then + FTestValue := F.AsDateTime + else + FTestValue := F.AsFloat; + end; +end; + +procedure TRxColumnFooter.UpdateTestValue; +var + F: TField; +begin + if ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + begin + F := TRxDBGrid(FOwner.Grid).DataSource.DataSet.FindField(FFieldName); + if Assigned(F) then + begin + if F.DataType in [ftDate, ftTime, ftDateTime, ftTimeStamp] then + begin + case FValueType of + fvtMax: FTestValue := Max(FTestValue, F.AsDateTime); + fvtMin: FTestValue := Min(FTestValue, F.AsDateTime); + end; + end + else + begin + case FValueType of + fvtSum: FTestValue := FTestValue + F.AsFloat; + // fvtAvg: + fvtMax: FTestValue := Max(FTestValue, F.AsFloat); + fvtMin: FTestValue := Min(FTestValue, F.AsFloat); + end; + end; + end; + end; +end; + +function TRxColumnFooter.DeleteTestValue: boolean; +var + F: TField; +begin + Result := True; + if ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + begin + F := TRxDBGrid(FOwner.Grid).DataSource.DataSet.FieldByName(FFieldName); + if (Assigned(F)) and not (F.IsNull) then + if F.DataType in [ftDate, ftTime, ftDateTime, ftTimeStamp] then + Result := not ((FValueType in [fvtMax, fvtMin]) and (FTestValue = F.AsDateTime)) + else + if FValueType in [fvtMax, fvtMin] then + Result := (FTestValue <> F.AsFloat) + else + FTestValue := FTestValue - F.AsFloat; + end; +end; + +function TRxColumnFooter.PostTestValue: boolean; +var + F: TField; +begin + Result := True; + if ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + begin + F := TRxDBGrid(FOwner.Grid).DataSource.DataSet.FieldByName(FFieldName); + if Assigned(F) then + if F.DataType in [ftDate, ftTime, ftDateTime, ftTimeStamp] then + begin + if FValueType in [fvtMax, fvtMin] then + if F.DataSet.State = dsinsert then + begin + if not (F.IsNull) then + case FValueType of + fvtMax: FTestValue := Max(FTestValue, F.AsDateTime); + fvtMin: FTestValue := Min(FTestValue, F.AsDateTime); + end; + end + else + if (F.OldValue <> null) and (FTestValue = TDateTime(F.OldValue)) then + Result := False + else + if not F.IsNull then + case FValueType of + fvtMax: FTestValue := Max(FTestValue, F.AsDateTime); + fvtMin: FTestValue := Min(FTestValue, F.AsDateTime); + end; + end + else + if F.DataSet.State = dsinsert then + begin + if not F.IsNull then + case FValueType of + fvtSum: FTestValue := FTestValue + F.AsFloat; + fvtMax: FTestValue := Max(FTestValue, F.AsFloat); + fvtMin: FTestValue := Min(FTestValue, F.AsFloat); + end; + end + else + if (FValueType in [fvtMax, fvtMin]) and (F.OldValue <> null) and + (FTestValue = Float(F.OldValue)) then + Result := False + else + case FValueType of + fvtSum: + begin + if not F.IsNull then + begin + if F.OldValue <> null then + FTestValue := FTestValue - Float(F.OldValue); + FTestValue := FTestValue + F.AsFloat; + end; + end; + fvtMax: if not F.IsNull then + FTestValue := Max(FTestValue, F.AsFloat); + fvtMin: if not F.IsNull then + FTestValue := Min(FTestValue, F.AsFloat); + end; + end; +end; + +function TRxColumnFooter.ErrorTestValue: boolean; +var + F: TField; +begin + Result := True; + if ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + begin + F := TRxDBGrid(FOwner.Grid).DataSource.DataSet.FieldByName(FFieldName); + if Assigned(F) then + begin + if F.DataType in [ftDate, ftTime, ftDateTime, ftTimeStamp] then + begin + if (FValueType in [fvtMax, fvtMin]) and not (F.IsNull) then + begin + if not (F.IsNull) and (FTestValue = F.AsDateTime) then + Result := False + else + if (F.DataSet.RecordCount <> 0) and (F.OldValue <> null) then + begin + case FValueType of + fvtMax: FTestValue := Max(FTestValue, TDateTime(F.OldValue)); + fvtMin: FTestValue := Min(FTestValue, TDateTime(F.OldValue)); + end; + end; + end; + end + else + if (FValueType in [fvtMax, fvtMin]) and not (F.IsNull) and (FTestValue = F.AsFloat) then + Result := False + else + begin + case FValueType of + fvtSum: + if F.DataSet.RecordCount = 0 then + begin +{ if not F.IsNull then + FTestValue := FTestValue - F.AsFloat;} + { TODO -oalexs : need rewrite this code - where difficult! } + end + else + begin + if F.OldValue <> null then + FTestValue := FTestValue + Float(F.OldValue); + if not F.IsNull then + FTestValue := FTestValue - F.AsFloat; + end; + fvtMax: + if (F.DataSet.RecordCount <> 0) and (F.OldValue <> null) then + FTestValue := Max(FTestValue, Float(F.OldValue)); + fvtMin: + if (F.DataSet.RecordCount <> 0) and (F.OldValue <> null) then + FTestValue := Min(FTestValue, Float(F.OldValue)); + end; + end; + end; + end; +end; + +procedure TRxColumnFooter.UpdateTestValueFromVar(AValue: Variant); +var + F: TField; +begin + if ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + begin + F := TRxDBGrid(FOwner.Grid).DataSource.DataSet.FindField(FFieldName); + if (not VarIsEmpty(AValue)) and (AValue <> null) and Assigned(F) then + begin + if F.DataType in [ftDate, ftTime, ftDateTime, ftTimeStamp] then + begin + case FValueType of + fvtMax: FTestValue := Max(FTestValue, AValue); + fvtMin: FTestValue := Min(FTestValue, AValue); + end; + end + else + begin + case FValueType of + fvtSum: FTestValue := FTestValue + AValue; + // fvtAvg: + fvtMax: FTestValue := Max(FTestValue, AValue); + fvtMin: FTestValue := Min(FTestValue, AValue); + end; + end; + end; + end; +end; + +///! +constructor TRxColumnFooter.Create(Owner: TRxColumn); +begin + inherited Create; + FOwner := Owner; + FTestValue := 0; + FLayout := tlCenter; +end; + +{ TFilterListCellEditor } + +procedure TFilterListCellEditor.WndProc(var TheMessage: TLMessage); +begin + + if TheMessage.msg = LM_KILLFOCUS then + begin + Change; + Hide; + if HWND(TheMessage.WParam) = HWND(Handle) then + begin + // lost the focus but it returns to ourselves + // eat the message. + TheMessage.Result := 0; + exit; + end; + end; + inherited WndProc(TheMessage); +end; + +procedure TFilterListCellEditor.KeyDown(var Key: word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + case Key of + VK_RETURN: + begin + DroppedDown := False; + Change; + Hide; + end; + end; +end; + +procedure TFilterListCellEditor.Show(Grid: TCustomGrid; Col: integer); +begin + FGrid := Grid; + FCol := Col; + Visible := True; + // Text:=TRxColumn(TRxDBGrid(Grid).SelectedColumn).Filter.Value; + SetFocus; + // DroppedDown := true; +end; + + +{ TRxColumnFilter } + +function TRxColumnFilter.GetItemIndex: integer; +begin + Result := FValueList.IndexOf(FValue); +end; + +procedure TRxColumnFilter.SetColor(const AValue: TColor); +begin + if FColor = AValue then + exit; + FColor := AValue; + FOwner.ColumnChanged; +end; + +procedure TRxColumnFilter.SetFont(const AValue: TFont); +begin + FFont.Assign(AValue); + FOwner.ColumnChanged; +end; + +procedure TRxColumnFilter.SetItemIndex(const AValue: integer); +begin + if (AValue >= -1) and (AValue < FValueList.Count) then + begin + if AValue = -1 then + FValue := '' + else + FValue := FValueList[AValue]; + FOwner.ColumnChanged; + end; +end; + +constructor TRxColumnFilter.Create(Owner: TRxColumn); +begin + inherited Create; + FOwner := Owner; + FFont := TFont.Create; + FEmptyFont := TFont.Create; + FValueList := TStringList.Create; + FValueList.Sorted := True; + FColor := clWhite; + + FEmptyFont.Style := [fsItalic]; + FEmptyValue := sRxDBGridEmptiFilter; + FEnabled:=true; +end; + +destructor TRxColumnFilter.Destroy; +begin + FreeAndNil(FFont); + FreeAndNil(FEmptyFont); + FreeAndNil(FValueList); + inherited Destroy; +end; + +{ TExDBGridSortEngine } + +function TRxDBGridSortEngine.EnabledFooterRowsCalc: boolean; +begin + Result:=false; +end; + +procedure TRxDBGridSortEngine.SortList(ListField: string; ADataSet: TDataSet; + Asc: array of boolean; SortOptions: TRxSortEngineOptions); +begin + +end; + +{ TRxDBGridKeyStroke } + +procedure TRxDBGridKeyStroke.SetCommand(const AValue: TRxDBGridCommand); +begin + if FCommand = AValue then + exit; + FCommand := AValue; + Changed(False); +end; + +procedure TRxDBGridKeyStroke.SetShortCut(const AValue: TShortCut); +begin + if FShortCut = AValue then + exit; + FShortCut := AValue; + Menus.ShortCutToKey(FShortCut, FKey, FShift); + Changed(False); +end; + +function TRxDBGridKeyStroke.GetDisplayName: string; +begin + IntToIdent(Ord(FCommand), Result, EditorCommandStrs); + Result := Result + ' - ' + ShortCutToText(FShortCut); +end; + +procedure TRxDBGridKeyStroke.Assign(Source: TPersistent); +begin + if Source is TRxDBGridKeyStroke then + begin + Command := TRxDBGridKeyStroke(Source).Command; + ShortCut := TRxDBGridKeyStroke(Source).ShortCut; + Enabled := TRxDBGridKeyStroke(Source).Enabled; + end + else + inherited Assign(Source); +end; + +{ TRxDBGridKeyStrokes } + +function TRxDBGridKeyStrokes.GetItem(Index: integer): TRxDBGridKeyStroke; +begin + Result := TRxDBGridKeyStroke(inherited GetItem(Index)); +end; + +procedure TRxDBGridKeyStrokes.SetItem(Index: integer; const AValue: TRxDBGridKeyStroke); +begin + inherited SetItem(Index, AValue); +end; + +{function TRxDBGridKeyStrokes.GetOwner: TPersistent; +begin + Result:=FOwn; +end; +} +procedure TRxDBGridKeyStrokes.Update(Item: TCollectionItem); +begin + inherited Update(Item); + if (UpdateCount = 0) and Assigned(Owner) and + Assigned(TRxDBGrid(Owner).FKeyStrokes) then + TRxDBGrid(Owner).UpdateJMenuKeys; +end; + + +constructor TRxDBGridKeyStrokes.Create(AOwner: TPersistent); +begin + //FOwn := AOwner; + inherited Create(AOwner, TRxDBGridKeyStroke); +end; + +procedure TRxDBGridKeyStrokes.Assign(Source: TPersistent); +var + i: integer; +begin + if Source is TRxDBGridKeyStrokes then + begin + Clear; + for i := 0 to TRxDBGridKeyStrokes(Source).Count-1 do + begin + with Add do + Assign(TRxDBGridKeyStrokes(Source)[i]); + end; + end else + inherited Assign(Source); +end; + +function TRxDBGridKeyStrokes.Add: TRxDBGridKeyStroke; +begin + Result := TRxDBGridKeyStroke(inherited Add); + Result.Enabled := True; +end; + +function TRxDBGridKeyStrokes.AddE(ACommand: TRxDBGridCommand; + AShortCut: TShortCut): TRxDBGridKeyStroke; +begin + Result := nil; + Result := Add; + Result.FShortCut := AShortCut; + Result.FCommand := ACommand; +end; + +procedure TRxDBGridKeyStrokes.ResetDefaults; +begin + Clear; + AddE(rxgcShowFindDlg, Menus.ShortCut(Ord('F'), [ssCtrl])); + AddE(rxgcShowColumnsDlg, Menus.ShortCut(Ord('W'), [ssCtrl])); + AddE(rxgcShowFilterDlg, Menus.ShortCut(Ord('T'), [ssCtrl])); + AddE(rxgcShowSortDlg, Menus.ShortCut(Ord('S'), [ssCtrl])); + AddE(rxgcShowQuickFilter, Menus.ShortCut(Ord('Q'), [ssCtrl])); + AddE(rxgcHideQuickFilter, Menus.ShortCut(Ord('H'), [ssCtrl])); + AddE(rxgcSelectAll, Menus.ShortCut(Ord('A'), [ssCtrl])); + AddE(rxgcDeSelectAll, Menus.ShortCut(Ord('-'), [ssCtrl])); + AddE(rxgcInvertSelection, Menus.ShortCut(Ord('*'), [ssCtrl])); + AddE(rxgcOptimizeColumnsWidth, Menus.ShortCut(Ord('+'), [ssCtrl])); +end; + +function TRxDBGridKeyStrokes.FindRxCommand(AKey: word; + AShift: TShiftState): TRxDBGridCommand; +var + i: integer; + K: TRxDBGridKeyStroke; +begin + Result := rxgcNone; + for i := 0 to Count - 1 do + begin + K := Items[i]; + if (K.FKey = AKey) and (K.FShift = AShift) and (K.FEnabled) then + begin + Result := K.FCommand; + exit; + end; + end; +end; + +function TRxDBGridKeyStrokes.FindRxKeyStrokes(ACommand: TRxDBGridCommand): +TRxDBGridKeyStroke; +var + i: integer; +begin + Result := nil; + for i := 0 to Count - 1 do + begin + if (Items[i].Command = ACommand) then + begin + Result := Items[i]; + exit; + end; + end; +end; + +initialization + + {$I rxdbgrid.lrs} + // {$I rx_markerdown.lrs} + + RxDBGridSortEngineList := TStringList.Create; + RxDBGridSortEngineList.Sorted := True; + +finalization + + while (RxDBGridSortEngineList.Count > 0) do + begin + RxDBGridSortEngineList.Objects[0].Free; + RxDBGridSortEngineList.Delete(0); + end; + RxDBGridSortEngineList.Free; + +end. + diff --git a/components/rx/version/2.1/rxdbgrid_columsunit.lfm b/components/rx/version/2.1/rxdbgrid_columsunit.lfm new file mode 100644 index 000000000..1658f8098 --- /dev/null +++ b/components/rx/version/2.1/rxdbgrid_columsunit.lfm @@ -0,0 +1,146 @@ +object rxDBGridColumsForm: TrxDBGridColumsForm + Left = 489 + Height = 375 + Top = 248 + Width = 448 + ActiveControl = CheckListBox1 + Caption = 'Grid colums' + ClientHeight = 375 + ClientWidth = 448 + OnCreate = FormCreate + Position = poScreenCenter + ShowHint = True + LCLVersion = '0.9.31' + object CheckListBox1: TCheckListBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = ButtonPanel1 + Left = 6 + Height = 315 + Top = 6 + Width = 436 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + ItemHeight = 0 + TabOrder = 0 + TopIndex = -1 + end + object ButtonPanel1: TButtonPanel + Left = 6 + Height = 42 + Top = 327 + Width = 436 + OKButton.Name = 'OKButton' + OKButton.DefaultCaption = True + HelpButton.Name = 'HelpButton' + HelpButton.DefaultCaption = True + CloseButton.Name = 'CloseButton' + CloseButton.DefaultCaption = True + CancelButton.Name = 'CancelButton' + CancelButton.DefaultCaption = True + TabOrder = 1 + ShowButtons = [pbOK, pbCancel, pbHelp] + object SpeedButton2: TSpeedButton + AnchorSideLeft.Control = SpeedButton1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = SpeedButton1 + AnchorSideBottom.Control = SpeedButton1 + AnchorSideBottom.Side = asrBottom + Left = 143 + Height = 34 + Top = 0 + Width = 23 + Anchors = [akTop, akLeft, akBottom] + BorderSpacing.Left = 6 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000FF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000FF808000FF0000 + 00FF000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF808000FF808000FF8080 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000FF808000FF808000FF808000FF8080 + 00FF808000FF000000FF00000000000000000000000000000000000000000000 + 00000000000000000000000000FF808000FF808000FF808000FF808000FF8080 + 00FF808000FF808000FF000000FF000000000000000000000000000000000000 + 000000000000000000FF000000FF000000FF000000FF808000FF808000FF8080 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 000000000000000000000000000000000000000000FF808000FF808000FF8080 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF808000FF808000FF8080 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF808000FF808000FF8080 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000 + } + NumGlyphs = 0 + OnClick = SpeedButton2Click + end + object SpeedButton1: TSpeedButton + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ButtonPanel1 + AnchorSideBottom.Side = asrBottom + Left = 114 + Height = 34 + Top = 0 + Width = 23 + Anchors = [akTop, akLeft, akBottom] + BorderSpacing.Left = 18 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF000000FF000000FF0000 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF808000FF808000FF8080 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF808000FF808000FF8080 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF808000FF808000FF8080 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 000000000000000000FF000000FF000000FF000000FF808000FF808000FF8080 + 00FF000000FF000000FF000000FF000000FF0000000000000000000000000000 + 00000000000000000000000000FF808000FF808000FF808000FF808000FF8080 + 00FF808000FF808000FF000000FF000000000000000000000000000000000000 + 0000000000000000000000000000000000FF808000FF808000FF808000FF8080 + 00FF808000FF000000FF00000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000FF808000FF808000FF8080 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000FF808000FF0000 + 00FF000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000FF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000 + } + NumGlyphs = 0 + OnClick = SpeedButton1Click + end + end +end diff --git a/components/rx/version/2.1/rxdbgrid_columsunit.lrt b/components/rx/version/2.1/rxdbgrid_columsunit.lrt new file mode 100644 index 000000000..f8353c65b --- /dev/null +++ b/components/rx/version/2.1/rxdbgrid_columsunit.lrt @@ -0,0 +1 @@ +TRXDBGRIDCOLUMSFORM.CAPTION=Grid colums diff --git a/components/rx/version/2.1/rxdbgrid_columsunit.pas b/components/rx/version/2.1/rxdbgrid_columsunit.pas new file mode 100644 index 000000000..5a6e3a169 --- /dev/null +++ b/components/rx/version/2.1/rxdbgrid_columsunit.pas @@ -0,0 +1,166 @@ +{ rxdbgrid_columsunit unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxdbgrid_columsunit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, CheckLst, + StdCtrls, Buttons, ButtonPanel, rxdbgrid; + +type + + { TrxDBGridColumsForm } + + TrxDBGridColumsForm = class(TForm) + ButtonPanel1: TButtonPanel; + CheckListBox1: TCheckListBox; + SpeedButton1: TSpeedButton; + SpeedButton2: TSpeedButton; + procedure FormCreate(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + procedure SpeedButton2Click(Sender: TObject); + private + FGrid:TRxDBGrid; + procedure SetGrid(AGrid:TRxDBGrid); + procedure SetGridColumnsParams; + public + { public declarations } + end; + + +procedure ShowRxDBGridColumsForm(Grid:TRxDBGrid); +implementation +uses rxdconst; + +{$R *.lfm} + +procedure ShowRxDBGridColumsForm(Grid: TRxDBGrid); +var + rxDBGridColumsForm: TrxDBGridColumsForm; +begin + rxDBGridColumsForm:=TrxDBGridColumsForm.Create(Application); + rxDBGridColumsForm.SetGrid(Grid); + if rxDBGridColumsForm.ShowModal = mrOk then + begin + if Assigned(Grid) then + rxDBGridColumsForm.SetGridColumnsParams; + end; + rxDBGridColumsForm.Free; +end; + +{ TrxDBGridColumsForm } + +procedure TrxDBGridColumsForm.FormCreate(Sender: TObject); +begin + SpeedButton1.AnchorSideLeft.Control:=ButtonPanel1.HelpButton; + SpeedButton1.AnchorSideTop.Control:=ButtonPanel1.HelpButton; + SpeedButton1.AnchorSideBottom.Control:=ButtonPanel1.HelpButton; + + Caption:=sRxDbGridSelColCaption; + SpeedButton1.Hint:=sRxDbGridSelColHint1; + SpeedButton2.Hint:=sRxDbGridSelColHint2; +end; + +procedure TrxDBGridColumsForm.SpeedButton1Click(Sender: TObject); +var + S:string; + i:integer; +begin + if (CheckListBox1.Items.Count > 1) and (CheckListBox1.ItemIndex>-1) then + begin + if CheckListBox1.ItemIndex>0 then + begin + i:=CheckListBox1.ItemIndex-1; + S:=CheckListBox1.Items[CheckListBox1.ItemIndex]; + CheckListBox1.Items[CheckListBox1.ItemIndex]:=CheckListBox1.Items[i]; + CheckListBox1.Items[i]:=S; + CheckListBox1.ItemIndex:=i; + end; + end; +end; + +procedure TrxDBGridColumsForm.SpeedButton2Click(Sender: TObject); +var + S:string; + i:integer; +begin + if (CheckListBox1.Items.Count > 1) and (CheckListBox1.ItemIndex>-1) then + begin + if CheckListBox1.ItemIndex<CheckListBox1.Items.Count-1 then + begin + i:=CheckListBox1.ItemIndex+1; + S:=CheckListBox1.Items[CheckListBox1.ItemIndex]; + CheckListBox1.Items[CheckListBox1.ItemIndex]:=CheckListBox1.Items[i]; + CheckListBox1.Items[i]:=S; + CheckListBox1.ItemIndex:=i; + end; + end; +end; + +procedure TrxDBGridColumsForm.SetGrid(AGrid: TRxDBGrid); +var + i:integer; +begin + if AGrid=FGrid then exit; + FGrid:=AGrid; + CheckListBox1.Items.Clear; + if Assigned(AGrid) then + begin + for i:=0 to AGrid.Columns.Count-1 do + begin + CheckListBox1.Items.Add(AGrid.Columns[i].Title.Caption); + CheckListBox1.Checked[i]:=AGrid.Columns[i].Visible; + end; + end; +end; + +procedure TrxDBGridColumsForm.SetGridColumnsParams; +var + i:integer; + Col:TRxColumn; +begin + for i:=0 to CheckListBox1.Items.Count-1 do + begin + Col:=FGrid.ColumnByCaption(CheckListBox1.Items[i]); + if Assigned(Col) then + begin + Col.Visible:=CheckListBox1.Checked[i]; + Col.Index:=i; + end + end; +end; + +end. + diff --git a/components/rx/version/2.1/rxdbgrid_findunit.lfm b/components/rx/version/2.1/rxdbgrid_findunit.lfm new file mode 100644 index 000000000..464dc3f5d --- /dev/null +++ b/components/rx/version/2.1/rxdbgrid_findunit.lfm @@ -0,0 +1,185 @@ +object rxDBGridFindForm: TrxDBGridFindForm + Left = 688 + Height = 225 + Top = 327 + Width = 493 + ActiveControl = Edit1 + Caption = 'Find' + ClientHeight = 225 + ClientWidth = 493 + OnCreate = FormCreate + OnShow = FormShow + Position = poScreenCenter + LCLVersion = '1.1' + object Label1: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + AnchorSideBottom.Control = Edit1 + AnchorSideBottom.Side = asrBottom + Left = 6 + Height = 15 + Top = 6 + Width = 69 + BorderSpacing.Around = 6 + Caption = 'Text to find' + FocusControl = Edit1 + ParentColor = False + end + object Label2: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Edit1 + AnchorSideTop.Side = asrBottom + AnchorSideBottom.Control = ComboBox1 + AnchorSideBottom.Side = asrBottom + Left = 6 + Height = 15 + Top = 58 + Width = 73 + BorderSpacing.Around = 6 + Caption = 'Find at filed' + ParentColor = False + end + object BtnFind: TButton + AnchorSideRight.Control = Button2 + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 347 + Height = 33 + Top = 186 + Width = 81 + Anchors = [akRight, akBottom] + AutoSize = True + BorderSpacing.Around = 6 + BorderSpacing.InnerBorder = 4 + Caption = 'Find more' + Default = True + OnClick = BtnFindClick + TabOrder = 2 + end + object Button2: TButton + AnchorSideTop.Control = BtnFind + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 434 + Height = 33 + Top = 186 + Width = 53 + Anchors = [akRight, akBottom] + AutoSize = True + BorderSpacing.Top = 8 + BorderSpacing.Around = 6 + BorderSpacing.InnerBorder = 4 + Cancel = True + Caption = 'Close' + OnClick = Button2Click + TabOrder = 3 + end + object Edit1: TEdit + AnchorSideLeft.Control = ComboBox1 + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 18 + Height = 25 + Top = 27 + Width = 469 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + TabOrder = 0 + end + object ComboBox1: TComboBox + AnchorSideLeft.Control = Label2 + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 12 + Height = 27 + Top = 79 + Width = 475 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 1 + end + object RadioGroup1: TRadioGroup + AnchorSideLeft.Control = Panel1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ComboBox1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = Panel1 + AnchorSideBottom.Side = asrBottom + Left = 146 + Height = 62 + Top = 112 + Width = 341 + Anchors = [akTop, akLeft, akRight, akBottom] + AutoFill = True + AutoSize = True + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + BorderSpacing.Right = 6 + Caption = 'Direction' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 3 + ClientHeight = 45 + ClientWidth = 337 + Columns = 3 + Items.Strings = ( + 'All' + 'Forward' + 'Backward' + ) + TabOrder = 4 + end + object Panel1: TPanel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ComboBox1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 62 + Top = 112 + Width = 134 + AutoSize = True + BorderSpacing.Around = 6 + ClientHeight = 62 + ClientWidth = 134 + TabOrder = 5 + object CheckBox2: TCheckBox + AnchorSideLeft.Control = Panel1 + AnchorSideTop.Control = CheckBox1 + AnchorSideTop.Side = asrBottom + Left = 7 + Height = 21 + Top = 34 + Width = 88 + BorderSpacing.Around = 6 + Caption = 'Partial key' + TabOrder = 0 + end + object CheckBox1: TCheckBox + AnchorSideLeft.Control = Panel1 + AnchorSideTop.Control = Panel1 + Left = 7 + Height = 21 + Top = 7 + Width = 120 + BorderSpacing.Around = 6 + Caption = 'Case sensetive' + TabOrder = 1 + end + end +end diff --git a/components/rx/version/2.1/rxdbgrid_findunit.pas b/components/rx/version/2.1/rxdbgrid_findunit.pas new file mode 100644 index 000000000..60d2eb358 --- /dev/null +++ b/components/rx/version/2.1/rxdbgrid_findunit.pas @@ -0,0 +1,185 @@ +{ rxdbgrid_findunit unit + +Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxdbgrid_findunit; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons, + StdCtrls, ExtCtrls, rxdbgrid, DB; + +type + + { TrxDBGridFindForm } + + TrxDBGridFindForm = class(TForm) + BtnFind: TButton; + Button2: TButton; + CheckBox1: TCheckBox; + CheckBox2: TCheckBox; + ComboBox1: TComboBox; + Edit1: TEdit; + Label1: TLabel; + Label2: TLabel; + Panel1: TPanel; + RadioGroup1: TRadioGroup; + procedure BtnFindClick(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormShow(Sender: TObject); + private + FGrid:TRxDBGrid; + FDataSet:TDataSet; + procedure SetGrid(AGrid:TRxDBGrid); + public + { public declarations } + end; + +procedure ShowRxDBGridFindForm(Grid:TRxDBGrid); + +implementation +uses dbutils, DBGrids, rxdconst, LCLStrConsts; + +{$R *.lfm} + +procedure ShowRxDBGridFindForm(Grid: TRxDBGrid); +var + rxDBGridFindForm: TrxDBGridFindForm; +begin + rxDBGridFindForm:=TrxDBGridFindForm.Create(Application); + rxDBGridFindForm.SetGrid(Grid); + rxDBGridFindForm.ShowModal; + rxDBGridFindForm.Free; +end; + +{ TrxDBGridFindForm } + +procedure TrxDBGridFindForm.Button2Click(Sender: TObject); +begin + Close; +end; + +procedure TrxDBGridFindForm.FormCreate(Sender: TObject); +begin + Caption:=sRxDbGridFindCaption; + Label1.Caption:=sRxDbGridFindText; + Label2.Caption:=sRxDbGridFindOnField; + CheckBox1.Caption:=sRxDbGridFindCaseSens; + CheckBox2.Caption:=sRxDbGridFindPartial; + RadioGroup1.Caption:=sRxDbGridFindDirecion; + RadioGroup1.Items.Clear; + RadioGroup1.Items.Add(sRxDbGridFindRangeAll); + RadioGroup1.Items.Add(sRxDbGridFindRangeForw); + RadioGroup1.Items.Add(sRxDbGridFindRangeBack); + BtnFind.Caption:=sRxFindMore; + Button2.Caption:=rsMbClose; + + RadioGroup1.ItemIndex:=0; +end; + +procedure TrxDBGridFindForm.FormShow(Sender: TObject); +begin + Edit1.SetFocus; +end; + +procedure TrxDBGridFindForm.BtnFindClick(Sender: TObject); +var + FieldName:string; + LOptions: TLocateOptions; + SearchOrigin:TRxSearchDirection; + P:TBookMark; + R:boolean; +begin + if Edit1.Text<>'' then + begin + try + FieldName:=FGrid.Columns[ComboBox1.ItemIndex].FieldName; + LOptions:=[]; + if not CheckBox1.Checked then + LOptions:=LOptions+[loCaseInsensitive]; + + if CheckBox2.Checked then + LOptions:=LOptions+[loPartialKey]; + + SearchOrigin:=TRxSearchDirection(RadioGroup1.ItemIndex); + {$IFDEF NoAutomatedBookmark} + P:=FDataSet.GetBookmark; + {$ELSE} + P:=FDataSet.Bookmark; + {$ENDIF} + if SearchOrigin = rsdForward then + FDataSet.Next + else + if SearchOrigin = rsdBackward then + FDataSet.Prior; + R:=DataSetLocateThrough(FDataSet, FieldName, Edit1.Text, LOptions, SearchOrigin); + finally + {$IFDEF NoAutomatedBookmark} + if not R then + FDataSet.GotoBookmark(P); + FDataSet.FreeBookmark(P); + {$ELSE} + if not R then + FDataSet.Bookmark:=P; + {$ENDIF} + end; + end; +end; + +type + THckGrid = class(TCustomDBGrid) + end; + +procedure TrxDBGridFindForm.SetGrid(AGrid: TRxDBGrid); +var + i:integer; +begin + if AGrid=FGrid then exit; + FGrid:=AGrid; + ComboBox1.Items.Clear; + if Assigned(AGrid) then + begin + for i:=0 to AGrid.Columns.Count-1 do + ComboBox1.Items.Add(AGrid.Columns[i].Title.Caption); + ComboBox1.ItemIndex:=ComboBox1.Items.IndexOf(AGrid.SelectedColumn.Title.Caption); + end; + + FDataSet:=nil; + if Assigned(FGrid) and Assigned(THckGrid(FGrid).DataSource) then + FDataSet:=THckGrid(FGrid).DataSource.DataSet; + BtnFind.Enabled:=Assigned(FDataSet) and FDataSet.Active +end; + +end. + diff --git a/components/rx/version/2.1/rxdbspinedit.pas b/components/rx/version/2.1/rxdbspinedit.pas new file mode 100644 index 000000000..c1047ab01 --- /dev/null +++ b/components/rx/version/2.1/rxdbspinedit.pas @@ -0,0 +1,316 @@ +{ RxDBSpinEdit unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RxDBSpinEdit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Spin, + DbCtrls, DB, LMessages, LCLType, LCLVersion; + + +type + + { TCustomRxDBSpinEdit } + + TCustomRxDBSpinEdit = class(TCustomFloatSpinEdit) + private + FDataLink: TFieldDataLink; + + procedure DataChange(Sender: TObject); + function GetDataField: string; + function GetDataSource: TDataSource; + function GetField: TField; + procedure SetDataField(const AValue: string); + procedure SetDataSource(const AValue: TDataSource); + procedure UpdateData(Sender: TObject); + procedure FocusRequest(Sender: TObject); + procedure ActiveChange(Sender: TObject); + procedure LayoutChange(Sender: TObject); + procedure CMGetDataLink(var Message: TLMessage); message CM_GETDATALINK; + function IsReadOnly: boolean; + protected + function GetReadOnly: Boolean;override; + procedure SetReadOnly(AValue: Boolean);override; + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + //property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False; + + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure Change; override; + + procedure Loaded; override; + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; + procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Field: TField read GetField; + published + { Published declarations } + end; + + TRxDBSpinEdit = class(TCustomRxDBSpinEdit) + published + property DataField; + property DataSource; + property ReadOnly; + + property Align; + property Anchors; + property AutoSelect; + property AutoSize; + property BorderSpacing; + property Constraints; + property DecimalPlaces; + property Enabled; + property Font; + property Increment; + property MaxValue; + property MinValue; + property OnChange; + property OnChangeBounds; + property OnClick; + property OnEditingDone; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnResize; + property OnUTF8KeyPress; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabStop; + property TabOrder; + property Value; + property Visible; + end; + +implementation +uses dbutils; + +type + TFieldDataLinkHack = class(TFieldDataLink) + end; + +{ TCustomRxDBSpinEdit } + +procedure TCustomRxDBSpinEdit.DataChange(Sender: TObject); +begin + if Assigned(FDataLink.Field) and (FDataLink.Field.DataType in NumericDataTypes) then + begin + if (FDataLink.Field.DataType in IntegerDataTypes) then + DecimalPlaces:=0 + else + begin + if FDataLink.Field.DataType = ftBCD then + DecimalPlaces:=(FDatalink.Field as TBCDField).Precision + else + DecimalPlaces:=(FDatalink.Field as TFloatField).Precision; + end; + Value:=FDatalink.Field.AsFloat; + end + else + begin + Text := ''; + end; +end; + +function TCustomRxDBSpinEdit.GetDataField: string; +begin + Result := FDataLink.FieldName; +end; + +function TCustomRxDBSpinEdit.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +function TCustomRxDBSpinEdit.GetField: TField; +begin + Result := FDataLink.Field; +end; + +function TCustomRxDBSpinEdit.GetReadOnly: Boolean; +begin + Result := FDataLink.ReadOnly; +end; + +procedure TCustomRxDBSpinEdit.SetDataField(const AValue: string); +begin + FDataLink.FieldName := AValue; +end; + +procedure TCustomRxDBSpinEdit.SetDataSource(const AValue: TDataSource); +begin + ChangeDataSource(Self,FDataLink,AValue); +end; + +procedure TCustomRxDBSpinEdit.SetReadOnly(AValue: Boolean); +begin + inherited; + FDataLink.ReadOnly := AValue; +end; + +procedure TCustomRxDBSpinEdit.UpdateData(Sender: TObject); +begin + FDataLink.Field.Value := Value; +end; + +procedure TCustomRxDBSpinEdit.FocusRequest(Sender: TObject); +begin + SetFocus; +end; + +procedure TCustomRxDBSpinEdit.ActiveChange(Sender: TObject); +begin + if FDatalink.Active then + DataChange(Sender) + else + begin + Text := ''; + FDataLink.Reset; + end; +end; + +procedure TCustomRxDBSpinEdit.LayoutChange(Sender: TObject); +begin + DataChange(Sender); +end; + +procedure TCustomRxDBSpinEdit.CMGetDataLink(var Message: TLMessage); +begin + Message.Result := PtrUInt(FDataLink); +end; + +procedure TCustomRxDBSpinEdit.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + if Key=VK_ESCAPE then + begin + //cancel out of editing by reset on esc + FDataLink.Reset; + SelectAll; + Key := VK_UNKNOWN; + end + else + if Key=VK_DELETE then + begin + if not IsReadOnly then + FDatalink.Edit; + end + else + if Key=VK_TAB then + begin + if FDataLink.CanModify and FDatalink.Editing then + FDataLink.UpdateRecord; + end; +end; + +procedure TCustomRxDBSpinEdit.Change; +begin + FDatalink.Edit; + FDataLink.Modified; + inherited Change; +end; + +function TCustomRxDBSpinEdit.IsReadOnly: boolean; +begin + Result := true; + if FDatalink.Active and (not Self.ReadOnly) then + Result := (Field = nil) or Field.ReadOnly; +end; + +procedure TCustomRxDBSpinEdit.Loaded; +begin + inherited Loaded; + if (csDesigning in ComponentState) then + DataChange(Self); +end; + +procedure TCustomRxDBSpinEdit.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation=opRemove) then + begin + if (FDataLink<>nil) and (AComponent=DataSource) then + DataSource:=nil; + end; +end; + +procedure TCustomRxDBSpinEdit.WMSetFocus(var Message: TLMSetFocus); +begin + inherited WMSetFocus(Message); + if not FDatalink.Editing then + FDatalink.Reset; +end; + +procedure TCustomRxDBSpinEdit.WMKillFocus(var Message: TLMKillFocus); +begin + inherited WMKillFocus(Message); + if not FDatalink.Editing then + FDatalink.Reset + else + TFieldDataLinkHack(FDatalink).UpdateData; +end; + +constructor TCustomRxDBSpinEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDataLink := TFieldDataLink.Create; + FDataLink.Control := Self; + FDataLink.OnDataChange := @DataChange; + FDataLink.OnUpdateData := @UpdateData; + FDataLink.OnActiveChange := @ActiveChange; + {$if (lcl_major = 0) and (lcl_release <= 30)} + FDataLink.OnLayoutChange := @LayoutChange; + {$endif} +end; + +destructor TCustomRxDBSpinEdit.Destroy; +begin + FreeAndNil(FDataLink); + inherited Destroy; +end; + +end. diff --git a/components/rx/version/2.1/rxdbtimeedit.pas b/components/rx/version/2.1/rxdbtimeedit.pas new file mode 100644 index 000000000..8db776262 --- /dev/null +++ b/components/rx/version/2.1/rxdbtimeedit.pas @@ -0,0 +1,319 @@ +{ RxDBTimeEdit unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RxDBTimeEdit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, + RxTimeEdit, DB, DbCtrls, LMessages, LCLType; + +type + + { TCustomRxDBTimeEdit } + + TCustomRxDBTimeEdit = class(TCustomRxTimeEdit) + private + FDataLink: TFieldDataLink; + + procedure DataChange(Sender: TObject); + function GetDataField: string; + function GetDataSource: TDataSource; + function GetField: TField; + procedure SetDataField(const AValue: string); + procedure SetDataSource(const AValue: TDataSource); + + procedure UpdateData(Sender: TObject); + procedure FocusRequest(Sender: TObject); + procedure ActiveChange(Sender: TObject); + procedure LayoutChange(Sender: TObject); + procedure CMGetDataLink(var Message: TLMessage); message CM_GETDATALINK; + function IsReadOnly: boolean; + procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; + procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS; + protected + function GetReadOnly: Boolean;override; + procedure SetReadOnly(AValue: Boolean);override; + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + //property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure Change; override; + + procedure Loaded; override; + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Field: TField read GetField; + end; + + TRxDBTimeEdit = class(TCustomRxDBTimeEdit) + published + property DataField; + property DataSource; + property ReadOnly; + + property AutoSize; + property AutoSelect; + property Align; + property Anchors; + property BorderSpacing; + property ButtonOnlyWhenFocused; + property ButtonHint; + property CharCase; + property Color; +// property DirectInput; + property DragCursor; + property DragMode; + property EchoMode; + property Enabled; +// property Flat; + property Font; +// property Glyph; + property MaxLength; +// property NumGlyphs; + property OnButtonClick; + property OnChange; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEditingDone; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + property OnUTF8KeyPress; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PasswordChar; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + end; + + +implementation +uses dbutils, LCLVersion; + +type + TFieldDataLinkHack = class(TFieldDataLink) + end; + +{ TCustomRxDBTimeEdit } + +procedure TCustomRxDBTimeEdit.DataChange(Sender: TObject); +begin + if Assigned(FDataLink.Field) and (FDataLink.Field.DataType in DataTimeTypes) then + Self.Time:=FDatalink.Field.AsDateTime + else + Text := ''; +end; + +function TCustomRxDBTimeEdit.GetDataField: string; +begin + Result := FDataLink.FieldName; +end; + +function TCustomRxDBTimeEdit.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +function TCustomRxDBTimeEdit.GetField: TField; +begin + Result := FDataLink.Field; +end; + +function TCustomRxDBTimeEdit.GetReadOnly: Boolean; +begin + Result := FDataLink.ReadOnly; +end; + +procedure TCustomRxDBTimeEdit.SetDataField(const AValue: string); +begin + FDataLink.FieldName := AValue; +end; + +procedure TCustomRxDBTimeEdit.SetDataSource(const AValue: TDataSource); +begin + ChangeDataSource(Self,FDataLink,AValue); +end; + +procedure TCustomRxDBTimeEdit.SetReadOnly(AValue: Boolean); +begin + inherited SetReadOnly(AValue); + FDataLink.ReadOnly := AValue; +end; + +procedure TCustomRxDBTimeEdit.UpdateData(Sender: TObject); +begin + if Assigned(FDataLink.Field) and (FDataLink.Field.DataType in DataTimeTypes) then + begin + FDataLink.Field.AsDateTime := Self.Time; + end; +end; + +procedure TCustomRxDBTimeEdit.FocusRequest(Sender: TObject); +begin + SetFocus; +end; + +procedure TCustomRxDBTimeEdit.ActiveChange(Sender: TObject); +begin + if FDatalink.Active then + DataChange(Sender) + else + begin + Text := ''; + FDataLink.Reset; + end; +end; + +procedure TCustomRxDBTimeEdit.LayoutChange(Sender: TObject); +begin + DataChange(Sender); +end; + +procedure TCustomRxDBTimeEdit.CMGetDataLink(var Message: TLMessage); +begin + Message.Result := PtrUInt(FDataLink); +end; + +function TCustomRxDBTimeEdit.IsReadOnly: boolean; +begin + result := true; + if FDatalink.Active and not Self.ReadOnly then + result := (Field=nil) or Field.ReadOnly; +end; + +procedure TCustomRxDBTimeEdit.WMSetFocus(var Message: TLMSetFocus); +begin + inherited WMSetFocus(Message); + if not FDatalink.Editing then + FDatalink.Reset; +end; + +procedure TCustomRxDBTimeEdit.WMKillFocus(var Message: TLMKillFocus); +begin + inherited WMKillFocus(Message); + if not FDatalink.Editing then + FDatalink.Reset + else + TFieldDataLinkHack(FDatalink).UpdateData; +end; + +procedure TCustomRxDBTimeEdit.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + if Key=VK_ESCAPE then + begin + //cancel out of editing by reset on esc + FDataLink.Reset; + SelectAll; + Key := VK_UNKNOWN; + end + else + if Key=VK_DELETE then + begin + if not IsReadOnly then + FDatalink.Edit; + end + else + if Key=VK_TAB then + begin + if FDataLink.CanModify and FDatalink.Editing then + FDataLink.UpdateRecord; + end; +end; + +procedure TCustomRxDBTimeEdit.Change; +begin + if Assigned(FDatalink) then + begin + FDatalink.Edit; + FDataLink.Modified; + end; + inherited Change; +end; + +procedure TCustomRxDBTimeEdit.Loaded; +begin + inherited Loaded; + if (csDesigning in ComponentState) then + DataChange(Self); +end; + +procedure TCustomRxDBTimeEdit.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation=opRemove) then + begin + if (FDataLink<>nil) and (AComponent=DataSource) then + DataSource:=nil; + end; +end; + +constructor TCustomRxDBTimeEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDataLink := TFieldDataLink.Create; + FDataLink.Control := Self; + FDataLink.OnDataChange := @DataChange; + FDataLink.OnUpdateData := @UpdateData; + FDataLink.OnActiveChange := @ActiveChange; + {$if (lcl_major = 0) and (lcl_release <= 30)} + FDataLink.OnLayoutChange := @LayoutChange; + {$endif} +end; + +destructor TCustomRxDBTimeEdit.Destroy; +begin + FreeAndNil(FDataLink); + inherited Destroy; +end; + +end. diff --git a/components/rx/version/2.1/rxdconst.pas b/components/rx/version/2.1/rxdconst.pas new file mode 100644 index 000000000..c21184218 --- /dev/null +++ b/components/rx/version/2.1/rxdconst.pas @@ -0,0 +1,190 @@ +{ string const unit fo DB-aware modules + +Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxdconst; + +interface + + +resourcestring + +{ RxDBCtrl } + + SLocalDatabase = 'Unable complete this operation on local dataset'; + SRetryLogin = 'Retry to connect with database?'; + SExprNotBoolean = 'Field ''%s'' is not boolean'; + SExprBadNullTest = 'NULL-values enabled in ''='' и ''<>'''; + SExprBadField = 'Field ''%s'' not used in filter expression'; + SCaptureFilter = 'Control locked by filter'; + SNotCaptureFilter = 'Control need locked by filter'; + SInactiveData = 'inactive'; + SBrowseData = 'browse'; + SEditData = 'editing'; + SInsertData = 'append'; + SSetKeyData = 'find'; + SCalcFieldsData = 'calc'; + SRegistration = 'Register'; + SAppTitleLabel = 'Application "%s"'; + SHintLabel = 'Enter you user name and password'; + SUserNameLabel = '&User name:'; + SPasswordLabel = '&Password:'; + SMore1 = '&More >>'; + SMore2 = '&Less <<'; + SInvalidUserName = 'User name or password not valid'; + SChangePassword = 'Change password'; + SOldPasswordLabel = '&Old password:'; + SNewPasswordLabel = '&New password:'; + SConfirmPasswordLabel = '&Confirm:'; + SPasswordChanged = 'Password changed'; + SPasswordNotChanged = 'Password not changed'; + SPasswordsMismatch = 'New password and confirmation not equal'; + SDBExceptCaption = 'Error in DB engine'; + SServerErrorLabel = 'Server error'; + SErrorMsgLabel = 'Error message'; + SNextButton = '&Next'; + SPrevButton = '&Prior'; + SExprIncorrect = 'Error in filter expression'; + SExprTermination = 'Error in filter end'; + SExprNameError = 'Error in filed name'; + SExprStringError = 'Error in string const'; + SExprInvalidChar = 'Error symbol in expression: ''%s'''; + SExprNoRParen = 'Error '')'', error: %s'; + SExprExpected = 'Error %s'; + SExprBadCompare = 'Compare opertion need fielad and const'; + SConfirmSave = 'Data changed. Save?'; + SDatabaseName = 'Database loocked: %s'; + SUnlockCaption = 'Unloock'; + SUnlockHint = 'Enter you password'; + SDeleteMultipleRecords = 'Delete all selected records?'; + + SDBComboBoxFieldNotAssigned = '%s:TDBComboBox - DataField not assigned'; + + SPropDefByLookup = 'PropDefByLookup'; + SDataSourceFixed = 'SDataSourceFixed'; + SCircularDataLink = 'SCircularDataLink'; + sRxAscendign = 'Ascendign'; + sRxDescending = 'Descending'; + + + SDeleteRecordQuestion = 'Delete record?'; + SFieldTypeMismatch = 'Type mismatch for field ''%s'', expecting: %s actual: %s'; + SInvalidDate = 'Invalid Date'; + SFieldRequired = 'Field ''%s'' must have a value'; + SNotEditing = 'Dataset not in edit or insert mode'; + SUnknownFieldType = 'SUnknownFieldType %s'; + SFieldReadOnly = 'SFieldReadOnly %s'; + + //RXDBgrid + sRxDBGridFind = 'Find data'; //// 'Buscar Ctrl+F'; + sRxDBGridFilter = 'Filter data';//'Filtrar Ctrl+T'; + sRxDBGridFilterSimple = 'Filter in table';// Ctrl+E'; 'Filtrar en Encabezado Ctrl+E'; + sRxDBGridFilterClear = 'Clear filter';// Ctrl+Q';'Quitar Filtro Ctrl+Q'; + sRxDBGridSortByColumns = 'Sort data for collumns';// Ctrl+C';'Ordenar por Columnas Ctrl+C'; + sRxDBGridSelectColumns = 'Select visible collumns';// Ctrl+W';'Seleccionar Columnas Ctrl+W'; + sRxDBGridEmptiFilter = '(Empty)'; + sRxDBGridSelectAllRows = 'Select all rows';// Ctrl+W';'Seleccionar Columnas Ctrl+W'; + + //RxDBGrid filter form + sRxFilterFormSelectExp = 'Enter filter expression for data in table:'; + sRxFilterFormOnField = 'On field :'; + sRxFilterFormOperaion = 'Operation :'; + sRxFilterFormCondition = 'Condition :'; + sRxFilterFormOperand = 'Operand :'; + sRxFilterFormEnd = 'end.'; + sRxFilterFormClear = 'Clear filter'; + sRxFilterFormCancel = 'Cancel'; + sRxFilterFormApply = 'Apply'; + sRxFilterFormCaption = 'Filter conditions'; + + //TrxSortByForm + sRxSortByFormCaption = 'Sort on field'; + sRxSortByFormAllFields = '&Fields in dataset:'; + sRxSortByFormSortFields = '&Selected fields:'; + sRxSortByFormSortOrder = 'Select f&ield for sort data:'; + sRxSortByFormAddField = '&Add field'; + sRxSortByFormRemoveField = '&Remove'; + sRxSortByFormMoveUpField = '&Up'; + sRxSortByFormMoveDnField = '&Down'; + sRxSortByFormCaseInsens = '&Case insensitive sort'; + + //TRxMemoryData + SMemNoRecords = 'No data found'; + SInvalidFields = 'No fields defined'; + + //TrxDBGridFindForm + sRxDbGridFindCaption = 'Find data'; + sRxDbGridFindText = 'Text to find'; + sRxDbGridFindOnField = 'Find on field'; + sRxDbGridFindCaseSens = 'Case sensetive'; + sRxDbGridFindPartial = 'Partial key'; + sRxDbGridFindDirecion = 'Direction'; + sRxDbGridFindRangeAll = 'All'; + sRxDbGridFindRangeForw = 'Forward'; + sRxDbGridFindRangeBack = 'Backward'; + sRxFindMore = 'Find more'; + + //TrxDBGridColumsForm + sRxDbGridSelColCaption = 'Grid columns'; + sRxDbGridSelColHint1 = 'Move selected column up'; + sRxDbGridSelColHint2 = 'Move selected column down'; + + //seldsfrm + sRxBorrowStructure = 'Borrow structure...'; + sRxSelectDatasetStruct = 'Select dataset to copy to'; + sRxCopyOnlyMetadata = 'Copy only metadata'; + sRxSourseDataset = 'Sourse dataset'; + + sUnknownXMLDatasetFormat = 'Unknown XML Dataset format'; + +const + { The following strings should not be localized } + sAction = '.Action'; + sCount = '.Count'; + sVisible = '.Visible'; + sItem = '.Item'; + sWidth = '.Width'; + sTop = '.Top'; + sVersion = '.Version'; + sLeft = '.Left'; + sShowHint = '.ShowHint'; + sShowCaption = '.ShowCaption'; + sToolBarStyle = '.ToolBarStyle'; + sButtonAllign = '.ButtonAllign'; + sOptions = '.Options'; + sCaption = '.Caption'; + sIndex = '.Index'; + sSortMarker = '.SortMarker'; + sSortField = '.SortField'; + +implementation + + +end. diff --git a/components/rx/version/2.1/rxdice.inc b/components/rx/version/2.1/rxdice.inc new file mode 100644 index 000000000..971c307a5 --- /dev/null +++ b/components/rx/version/2.1/rxdice.inc @@ -0,0 +1,431 @@ +type + TRxDiceBitmap = array [0..68] of PChar; + +const + DICE1 : TRxDiceBitmap = ( +'64 64 4 1', +'. c None', +'# c #000000', +'b c #c0c0c0', +'a c #ffffff', +'................................................................', +'.............................######.............................', +'...........................##########...........................', +'.........................####aaaaaa####.........................', +'.......................####aaaaaaaaaa####.......................', +'.....................####aaaaaaaaaaaaaa####.....................', +'...................####aaaaaaaaaaaaaaaaaa####...................', +'.................####aaaaaaaaaaaaaaaaaaaaaa####.................', +'...............####aaaaaaaaaaaaaaaaaaaaaaaaaa####...............', +'.............####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.............', +'...........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####...........', +'.........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........', +'.......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.......', +'.....####aaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaa####.....', +'...####aaaaaaaaaaaaaaaaaaaaa########aaaaaaaaaaaaaaaaaaaaa####...', +'.####aaaaaaaaaaaaaaaaaaaaaa##########aaaaaaaaaaaaaaaaaaaaaa####.', +'#####aaaaaaaaaaaaaaaaaaaaaa##########aaaaaaaaaaaaaaaaaaaaaa#####', +'##b####aaaaaaaaaaaaaaaaaaaaa########aaaaaaaaaaaaaaaaaaaaa####a##', +'##bbb####aaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaa####aaa##', +'##bbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##', +'##bbbbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaaaa##', +'##bbbbbbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaa###aaaa##', +'##bbbbbbbbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaa####aaaa######aaa##', +'##bbbbbbbbbbbbbbb####aaaaaaaaaaaaaaaaaaaaaa####aaaaaa######aaa##', +'##bbbbbbbbbbbbbbbbb####aaaaaaaaaaaaaaaaaa####aaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbb####aaaaaaaaaaaaaa####aaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaa######aaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbbbbbbbbbbbbbbb###bbbb######aaaa###aaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb#######bbb##aaa#######aaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb#######bbb##aaa#######aaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbb###bbbb#######bbb##aaa#######aaaa###aaaaaaaaaaaa##', +'##bbbbbbbbbbb######bbb######bbb##aaa######aaa######aaaaaaaaaaa##', +'##bbbbbbbbbbb######bbbb####bbbb##aaaa####aaaa######aaaaaaaaaaa##', +'##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##', +'##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##', +'##bbbb###bbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaa###aaaa##', +'##bbb######bbb######bbbbbbbbbbb##aaaaaaaaaaa######aaa######aaa##', +'##bbb######bbbb####bbbbbbbbbbbb##aaaaaaaaaaaa####aaaa######aaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##', +'##bbbb######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa######aaaa##', +'###bbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa####aaaa###', +'.####bbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaa###aaaaaaaaaaaaaaaaa####.', +'...####bbbbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaaaa####...', +'.....####bbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaa####.....', +'.......####bbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaa####.......', +'.........####bbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaa####.........', +'...........####bbbbbbbbbbbbbbbb##aaa#######aaaaaa####...........', +'.............####bbbbbbbbbbbbbb##aaa######aaaaa####.............', +'...............####bbbbbbbbbbbb##aaaa####aaaa####...............', +'.................####bbbbbbbbbb##aaaaaaaaaa####.................', +'...................####bbbbbbbb##aaaaaaaa####...................', +'.....................####bbbbbb##aaaaaa####.....................', +'.......................####bbbb##aaaa####.......................', +'.........................####bb##aa####.........................', +'...........................##########...........................', +'..............................####..............................', +'................................................................'); + + + DICE2 : TRxDiceBitmap = ( +'64 64 4 1', +'. c None', +'# c #000000', +'b c #c0c0c0', +'a c #ffffff', +'................................................................', +'.............................######.............................', +'...........................##########...........................', +'.........................####aaaaaa####.........................', +'.......................####aaaaaaaaaa####.......................', +'.....................####aaaaa####aaaaa####.....................', +'...................####aaaaa########aaaaa####...................', +'.................####aaaaaa##########aaaaaa####.................', +'...............####aaaaaaaa##########aaaaaaaa####...............', +'.............####aaaaaaaaaaa########aaaaaaaaaaa####.............', +'...........####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####...........', +'.........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........', +'.......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.......', +'.....####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.....', +'...####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####...', +'.####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.', +'#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####', +'##b####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####a##', +'##bbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaa##', +'##bbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##', +'##bbbbbbbbb####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####aaaaaaaaa##', +'##bbbbbbbbbbb####aaaaaaaaaaa########aaaaaaaaaaa####aaaa###aaaa##', +'##bbbbbbbbbbbbb####aaaaaaaa##########aaaaaaaa####aaaa######aaa##', +'##bbbbbbbbbbbbbbb####aaaaaa##########aaaaaa####aaaaaa######aaa##', +'##bbbbbbbbbbbbbbbbb####aaaaa########aaaaa####aaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbb####aaaaa####aaaaa####aaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaa######aaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbb######aaaa###aaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbb###bbbbbbbbbbbbbb##aaa#######aaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbb######bbbbbbbbbbbb##aaa######aaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbb######bbbbbbbbbbbb##aaaa####aaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaa###aaaa##', +'##bbbbbbbbbbbb######bbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa######aaa##', +'##bbbbbbbbbbbbb####bbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa######aaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaa######aaaa##', +'###bbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa####aaaa###', +'.####bbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaa###aaaaaaaaaaaaaaaaa####.', +'...####bbbbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaaaa####...', +'.....####bbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaa####.....', +'.......####bbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaa####.......', +'.........####bbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaa####.........', +'...........####bbbbbbbbbbbbbbbb##aaa#######aaaaaa####...........', +'.............####bbbbbbbbbbbbbb##aaa######aaaaa####.............', +'...............####bbbbbbbbbbbb##aaaa####aaaa####...............', +'.................####bbbbbbbbbb##aaaaaaaaaa####.................', +'...................####bbbbbbbb##aaaaaaaa####...................', +'.....................####bbbbbb##aaaaaa####.....................', +'.......................####bbbb##aaaa####.......................', +'.........................####bb##aa####.........................', +'...........................##########...........................', +'..............................####..............................', +'................................................................'); + + DICE3 : TRxDiceBitmap = ( +'64 64 4 1', +'. c None', +'# c #000000', +'b c #c0c0c0', +'a c #ffffff', +'................................................................', +'.............................######.............................', +'...........................##########...........................', +'.........................####aaaaaa####.........................', +'.......................####aaaaaaaaaa####.......................', +'.....................####aaaaa####aaaaa####.....................', +'...................####aaaaa########aaaaa####...................', +'.................####aaaaaa##########aaaaaa####.................', +'...............####aaaaaaaa##########aaaaaaaa####...............', +'.............####aaaaaaaaaaa########aaaaaaaaaaa####.............', +'...........####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####...........', +'.........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........', +'.......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.......', +'.....####aaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaa####.....', +'...####aaaaaaaaaaaaaaaaaaaaa########aaaaaaaaaaaaaaaaaaaaa####...', +'.####aaaaaaaaaaaaaaaaaaaaaa##########aaaaaaaaaaaaaaaaaaaaaa####.', +'#####aaaaaaaaaaaaaaaaaaaaaa##########aaaaaaaaaaaaaaaaaaaaaa#####', +'##b####aaaaaaaaaaaaaaaaaaaaa########aaaaaaaaaaaaaaaaaaaaa####a##', +'##bbb####aaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaa####aaa##', +'##bbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##', +'##bbbbbbbbb####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####aaaaaaaaa##', +'##bbbbbbbbbbb####aaaaaaaaaaa########aaaaaaaaaaa####aaaa###aaaa##', +'##bbbbbbbbbbbbb####aaaaaaaa##########aaaaaaaa####aaaa######aaa##', +'##bbbbbbbbbbbbbbb####aaaaaa##########aaaaaa####aaaaaa######aaa##', +'##bbbbbbbbbbbbbbbbb####aaaaa########aaaaa####aaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbb####aaaaa####aaaaa####aaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaa######aaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbbbbbbbbbbbbbbb###bbbb######aaaa###aaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaa###aaaa##', +'##bbbbbbbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaa######aaa##', +'##bbbbbbbbbbbbbbbbbbb#######bbb##aaa#######aaaaaaaaaa######aaa##', +'##bbbbbbbbbbbbbbbbbbb#######bbb##aaa#######aaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbb#######bbb##aaa#######aaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbb######bbb##aaa######aaaaaaaaaa#######aaa##', +'##bbbbbbbbbbbbbbbbbbbbb####bbbb##aaaa####aaaaaaaaaaa######aaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaa###aaaaaaaaaaaaaaaaaaaa##', +'##bbbb###bbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaa###aaaa##', +'##bbb######bbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaa######aaa##', +'##bbb######bbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaa######aaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaa#######aaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaa#######aaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaa######aaaaaaaaaa#######aaa##', +'##bbbb######bbbbbbbbbbbbbbbbbbb##aaaa####aaaaaaaaaaa######aaaa##', +'###bbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaa####aaaa###', +'.####bbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaa###aaaaaaaaaaaaaaaaa####.', +'...####bbbbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaaaa####...', +'.....####bbbbbbbbbbbbbbbbbbbbbb##aaaa######aaaaaaaaaaaa####.....', +'.......####bbbbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaaaa####.......', +'.........####bbbbbbbbbbbbbbbbbb##aaa#######aaaaaaaa####.........', +'...........####bbbbbbbbbbbbbbbb##aaa#######aaaaaa####...........', +'.............####bbbbbbbbbbbbbb##aaa######aaaaa####.............', +'...............####bbbbbbbbbbbb##aaaa####aaaa####...............', +'.................####bbbbbbbbbb##aaaaaaaaaa####.................', +'...................####bbbbbbbb##aaaaaaaa####...................', +'.....................####bbbbbb##aaaaaa####.....................', +'.......................####bbbb##aaaa####.......................', +'.........................####bb##aa####.........................', +'...........................##########...........................', +'..............................####..............................', +'................................................................'); + + + DICE4 : TRxDiceBitmap = ( +'64 64 4 1', +'. c None', +'# c #000000', +'b c #c0c0c0', +'a c #ffffff', +'................................................................', +'.............................######.............................', +'...........................##########...........................', +'.........................####aaaaaa####.........................', +'.......................####aaaaaaaaaa####.......................', +'.....................####aaaaa####aaaaa####.....................', +'...................####aaaaa########aaaaa####...................', +'.................####aaaaaa##########aaaaaa####.................', +'...............####aaaaaaaa##########aaaaaaaa####...............', +'.............####aaaaaaaaaaa########aaaaaaaaaaa####.............', +'...........####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####...........', +'.........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........', +'.......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.......', +'.....####aaaaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa####.....', +'...####aaaaa########aaaaaaaaaaaaaaaaaaaaaaaa########aaaaa####...', +'.####aaaaaa##########aaaaaaaaaaaaaaaaaaaaaa##########aaaaaa####.', +'#####aaaaaa##########aaaaaaaaaaaaaaaaaaaaaa##########aaaaaa#####', +'##b####aaaaa########aaaaaaaaaaaaaaaaaaaaaaaa########aaaaa####a##', +'##bbb####aaaaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa####aaa##', +'##bbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##', +'##bbbbbbbbb####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####aaaaaaaaa##', +'##bbbb###bbbb####aaaaaaaaaaa########aaaaaaaaaaa####aaaa###aaaa##', +'##bbb######bbbb####aaaaaaaa##########aaaaaaaa####aaaa######aaa##', +'##bbb######bbbbbb####aaaaaa##########aaaaaa####aaaaaa######aaa##', +'##bbb#######bbbbbbb####aaaaa########aaaaa####aaaaaaa#######aaa##', +'##bbb#######bbbbbbbbb####aaaaa####aaaaa####aaaaaaaaa#######aaa##', +'##bbb#######bbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaa#######aaa##', +'##bbbb######bbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaa######aaaa##', +'##bbbbb####bbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbbbbbbbbbbbbbbb###bbbb######aaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbb###bbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb######bbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb######bbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbbb######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbb######bbbbbbbbbbb####bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbbb###bbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbb###bbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb######bbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb######bbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbbb######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbb######bbbbbbbbbbb####bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'###bbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaa###', +'.####bbbbbbbbbbbbbbbbb###bbbbbb##aaaaaa###aaaaaaaaaaaaaaaaa####.', +'...####bbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaaaa####...', +'.....####bbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaa####.....', +'.......####bbbbbbbbbb#######bbb##aaa#######aaaaaaaaaa####.......', +'.........####bbbbbbbb#######bbb##aaa#######aaaaaaaa####.........', +'...........####bbbbbb#######bbb##aaa#######aaaaaa####...........', +'.............####bbbbb######bbb##aaa######aaaaa####.............', +'...............####bbbb####bbbb##aaaa####aaaa####...............', +'.................####bbbbbbbbbb##aaaaaaaaaa####.................', +'...................####bbbbbbbb##aaaaaaaa####...................', +'.....................####bbbbbb##aaaaaa####.....................', +'.......................####bbbb##aaaa####.......................', +'.........................####bb##aa####.........................', +'...........................##########...........................', +'..............................####..............................', +'................................................................'); + + DICE5 : TRxDiceBitmap = ( +'64 64 4 1', +'. c None', +'# c #000000', +'b c #c0c0c0', +'a c #ffffff', +'................................................................', +'.............................######.............................', +'...........................##########...........................', +'.........................####aaaaaa####.........................', +'.......................####aaaaaaaaaa####.......................', +'.....................####aaaaa####aaaaa####.....................', +'...................####aaaaa########aaaaa####...................', +'.................####aaaaaa##########aaaaaa####.................', +'...............####aaaaaaaa##########aaaaaaaa####...............', +'.............####aaaaaaaaaaa########aaaaaaaaaaa####.............', +'...........####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####...........', +'.........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........', +'.......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.......', +'.....####aaaaa####aaaaaaaaaaaa####aaaaaaaaaaaa####aaaaa####.....', +'...####aaaaa########aaaaaaaa########aaaaaaaa########aaaaa####...', +'.####aaaaaa##########aaaaaa##########aaaaaa##########aaaaaa####.', +'#####aaaaaa##########aaaaaa##########aaaaaa##########aaaaaa#####', +'##b####aaaaa########aaaaaaaa########aaaaaaaa########aaaaa####a##', +'##bbb####aaaaa####aaaaaaaaaaaa####aaaaaaaaaaaa####aaaaa####aaa##', +'##bbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbb####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##', +'##bbbbbbbbb####aaaaaaaaaaaaaaa####aaaaaaaaaaaaaaa####aaaaaaaaa##', +'##bbbb###bbbb####aaaaaaaaaaa########aaaaaaaaaaa####aaaaaaaaaaa##', +'##bbb######bbbb####aaaaaaaa##########aaaaaaaa####aaaaaaaaaaaaa##', +'##bbb######bbbbbb####aaaaaa##########aaaaaa####aaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbb####aaaaa########aaaaa####aaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbb####aaaaa####aaaaa####aaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaa##', +'##bbbb######bbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbb####bbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbbb###bbbb######aaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb#######bbb##aaaaaaaaaaaaaa###aaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbbb######bbb##aaaaaaaaaaaa######aaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbbbb####bbbb##aaaaaaaaaaaa######aaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##', +'##bbbb###bbbbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##', +'##bbb######bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaa######aaaaaaaaaaaa##', +'##bbb######bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaa####aaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbb######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'###bbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaa###', +'.####bbbbbbbbbbbbbbbbb###bbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaa####.', +'...####bbbbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaa####...', +'.....####bbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaa####.....', +'.......####bbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaa####.......', +'.........####bbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaa####.........', +'...........####bbbbbb#######bbb##aaaaaaaaaaaaaaaa####...........', +'.............####bbbbb######bbb##aaaaaaaaaaaaaa####.............', +'...............####bbbb####bbbb##aaaaaaaaaaaa####...............', +'.................####bbbbbbbbbb##aaaaaaaaaa####.................', +'...................####bbbbbbbb##aaaaaaaa####...................', +'.....................####bbbbbb##aaaaaa####.....................', +'.......................####bbbb##aaaa####.......................', +'.........................####bb##aa####.........................', +'...........................##########...........................', +'..............................####..............................', +'................................................................'); + + DICE6 : TRxDiceBitmap = ( +'64 64 4 1', +'. c None', +'# c #000000', +'b c #c0c0c0', +'a c #ffffff', +'................................................................', +'.............................######.............................', +'...........................##########...........................', +'.........................####aaaaaa####.........................', +'.......................####aaaaaaaaaa####.......................', +'.....................####aaaaa####aaaaa####.....................', +'...................####aaaaa########aaaaa####...................', +'.................####aaaaaa##########aaaaaa####.................', +'...............####aaaaaaaa##########aaaaaaaa####...............', +'.............####aaaaaaaaaaa########aa####aaaaa####.............', +'...........####aaaaaaaaaaaaaaa####aa########aaaaa####...........', +'.........####aaaaaaaaaaaaaaaaaaaaaa##########aaaaaa####.........', +'.......####aaaaaaaaaaaaaaaaaaaaaaaa##########aaaaaaaa####.......', +'.....####aaaaa####aaaaaaaaaaaaaaaaaa########aa####aaaaa####.....', +'...####aaaaa########aaaaaaaaaaaaaaaaaa####aa########aaaaa####...', +'.####aaaaaa##########aaaaaaaaaaaaaaaaaaaaaa##########aaaaaa####.', +'#####aaaaaa##########aaaaaaaaaaaaaaaaaaaaaa##########aaaaaa#####', +'##b####aaaaa########aa####aaaaaaaaaaaaaaaaaa########aaaaa####a##', +'##bbb####aaaaa####aa########aaaaaaaaaaaaaaaaaa####aaaaa####aaa##', +'##bbbbb####aaaaaaaa##########aaaaaaaaaaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbb####aaaaaa##########aaaaaaaaaaaaaaaaaaaaaa####aaaaaaa##', +'##bbbbbbbbb####aaaaa########aa####aaaaaaaaaaaaaaa####aaaaaaaaa##', +'##bbbb###bbbb####aaaaa####aa########aaaaaaaaaaa####aaaa###aaaa##', +'##bbb######bbbb####aaaaaaaa##########aaaaaaaa####aaaa######aaa##', +'##bbb######bbbbbb####aaaaaa##########aaaaaa####aaaaaa######aaa##', +'##bbb#######bbbbbbb####aaaaa########aaaaa####aaaaaaa#######aaa##', +'##bbb#######bbbbbbbbb####aaaaa####aaaaa####aaaaaaaaa#######aaa##', +'##bbb#######bbbbbbbbbbb####aaaaaaaaaa####aaaaaaaaaaa#######aaa##', +'##bbbb######bbbbbbbbbbbbb####aaaaaa####aaaaaaaaaaaaa######aaaa##', +'##bbbbb####bbbbbbbbbbbbbbbb####aa####aaaaaaaaaaaaaaaa####aaaaa##', +'##bbbbbbbbbbbbbbbbbbbb###bbbb######aaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb######bbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbbbbbbbbb#######bbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbbbbbbbbbb###bbbb#######bbb##aaaaaaaaaaaaaa###aaaaaaaaaaaa##', +'##bbbbbbbbbbb######bbb######bbb##aaaaaaaaaaaa######aaaaaaaaaaa##', +'##bbbbbbbbbbb######bbbb####bbbb##aaaaaaaaaaaa######aaaaaaaaaaa##', +'##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##', +'##bbbbbbbbbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##', +'##bbbb###bbbb#######bbbbbbbbbbb##aaaaaaaaaaa#######aaaaaaaaaaa##', +'##bbb######bbb######bbbbbbbbbbb##aaaaaaaaaaa######aaaaaaaaaaaa##', +'##bbb######bbbb####bbbbbbbbbbbb##aaaaaaaaaaaa####aaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbb#######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'##bbbb######bbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##', +'###bbbb####bbbbbbbbbbbbbbbbbbbb##aaaaaaaaaaaaaaaaaaaaaaaaaaaa###', +'.####bbbbbbbbbbbbbbbbb###bbbbbb##aaaaaa###aaaaaaaaaaaaaaaaa####.', +'...####bbbbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaaaa####...', +'.....####bbbbbbbbbbbb######bbbb##aaaa######aaaaaaaaaaaa####.....', +'.......####bbbbbbbbbb#######bbb##aaa#######aaaaaaaaaa####.......', +'.........####bbbbbbbb#######bbb##aaa#######aaaaaaaa####.........', +'...........####bbbbbb#######bbb##aaa#######aaaaaa####...........', +'.............####bbbbb######bbb##aaa######aaaaa####.............', +'...............####bbbb####bbbb##aaaa####aaaa####...............', +'.................####bbbbbbbbbb##aaaaaaaaaa####.................', +'...................####bbbbbbbb##aaaaaaaa####...................', +'.....................####bbbbbb##aaaaaa####.....................', +'.......................####bbbb##aaaa####.......................', +'.........................####bb##aa####.........................', +'...........................##########...........................', +'..............................####..............................', +'................................................................'); diff --git a/components/rx/version/2.1/rxdice.pas b/components/rx/version/2.1/rxdice.pas new file mode 100644 index 000000000..c936f2221 --- /dev/null +++ b/components/rx/version/2.1/rxdice.pas @@ -0,0 +1,379 @@ +{ rxdice unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} +unit rxdice; + +interface + +{$I rx.inc} + +uses SysUtils, LCLType, LCLProc, LCLIntf, LMessages, Classes, Graphics, + Controls, Forms, StdCtrls, ExtCtrls, Menus, VCLUtils; + +type + TRxDiceValue = 1..6; + +{ TRxDice } + + TRxDice = class(TCustomControl) + private + { Private declarations } + FActive: Boolean; + FAutoSize: Boolean; + FBitmap: TBitmap; + FInterval: Cardinal; + FAutoStopInterval: Cardinal; + FOnChange: TNotifyEvent; + FRotate: Boolean; + FShowFocus: Boolean; + FTimer: TTimer; + FTickCount: Longint; + FValue: TRxDiceValue; + FOnStart: TNotifyEvent; + FOnStop: TNotifyEvent; + procedure CMFocusChanged(var Message: TLMessage); message CM_FOCUSCHANGED; + procedure WMSize(var Message: TLMSize); message LM_SIZE; + procedure CreateBitmap; + procedure SetAutoSize(Value: Boolean); + procedure SetInterval(Value: Cardinal); + procedure SetRotate(AValue: Boolean); + procedure SetShowFocus(AValue: Boolean); + procedure SetValue(Value: TRxDiceValue); + procedure TimerExpired(Sender: TObject); + protected + { Protected declarations } + function GetPalette: HPALETTE; override; + procedure AdjustSize; override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + procedure Paint; override; + procedure Change; dynamic; + procedure DoStart; dynamic; + procedure DoStop; dynamic; + public + { Public declarations } + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure RandomValue; + published + { Published declarations } + property Align; + property AutoSize: Boolean read FAutoSize write SetAutoSize default True; + property AutoStopInterval: Cardinal read FAutoStopInterval write FAutoStopInterval default 0; + property Color; + property Cursor; + property DragMode; + property DragCursor; + property Enabled; + property Interval: Cardinal read FInterval write SetInterval default 60; + property ParentColor; + property ParentShowHint; + property PopupMenu; + property Rotate: Boolean read FRotate write SetRotate; + property ShowFocus: Boolean read FShowFocus write SetShowFocus; + property ShowHint; + property Anchors; + property Constraints; + property DragKind; + property TabOrder; + property TabStop; + property Value: TRxDiceValue read FValue write SetValue default 1; + property Visible; + property OnClick; + property OnDblClick; + property OnEnter; + property OnExit; + property OnMouseMove; + property OnMouseDown; + property OnMouseUp; + property OnKeyDown; + property OnKeyUp; + property OnKeyPress; + property OnDragOver; + property OnDragDrop; + property OnEndDrag; + property OnStartDrag; + property OnContextPopup; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + property OnStart: TNotifyEvent read FOnStart write FOnStart; + property OnStop: TNotifyEvent read FOnStop write FOnStop; + property OnEndDock; + property OnStartDock; + end; + +{$I RXDICE.INC} + +implementation + +{ TRxDice } + +constructor TRxDice.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + Randomize; + ControlStyle := [csClickEvents, csSetCaption, csCaptureMouse, + csOpaque, csDoubleClicks]; + FValue := 1; + FInterval := 60; + CreateBitmap; + FAutoSize := True; + Width := FBitmap.Width + 2; + Height := FBitmap.Height + 2; +end; + +destructor TRxDice.Destroy; +begin + FOnChange := nil; + if FBitmap <> nil then FBitmap.Free; + inherited Destroy; +end; + +function TRxDice.GetPalette: HPALETTE; +begin + if FBitmap <> nil then Result := FBitmap.Palette + else Result := 0; +end; + +procedure TRxDice.RandomValue; +var + Val: Byte; +begin + Val := Random(6) + 1; + if Val = Byte(FValue) then + begin + if Val = 1 then Inc(Val) + else Dec(Val); + end; + SetValue(TRxDiceValue(Val)); +end; + +procedure TRxDice.DoStart; +begin + if Assigned(FOnStart) then FOnStart(Self); +end; + +procedure TRxDice.DoStop; +begin + if Assigned(FOnStop) then FOnStop(Self); +end; + +procedure TRxDice.CMFocusChanged(var Message: TLMessage); +var + Active: Boolean; +begin +{ with Message do Active := (Sender = Self); + if Active <> FActive then begin + FActive := Active; + if FShowFocus then Invalidate; + end;} + inherited; +end; + +procedure TRxDice.WMSize(var Message: TLMSize); +begin + inherited; + AdjustSize; +end; + +procedure TRxDice.CreateBitmap; +begin + if FBitmap = nil then FBitmap := TBitmap.Create; + case FValue of + 1:FBitmap.Handle := CreatePixmapIndirect(@DICE1[0], GetSysColor(COLOR_BTNFACE)); + 2:FBitmap.Handle := CreatePixmapIndirect(@DICE2[0], GetSysColor(COLOR_BTNFACE)); + 3:FBitmap.Handle := CreatePixmapIndirect(@DICE3[0], GetSysColor(COLOR_BTNFACE)); + 4:FBitmap.Handle := CreatePixmapIndirect(@DICE4[0], GetSysColor(COLOR_BTNFACE)); + 5:FBitmap.Handle := CreatePixmapIndirect(@DICE5[0], GetSysColor(COLOR_BTNFACE)); + 6:FBitmap.Handle := CreatePixmapIndirect(@DICE6[0], GetSysColor(COLOR_BTNFACE)); + end; +end; + +procedure TRxDice.AdjustSize; +var + MinSide: Integer; +begin + if not (csReading in ComponentState) then + begin + if AutoSize and Assigned(FBitmap) and (FBitmap.Width > 0) and + (FBitmap.Height > 0) then + SetBounds(Left, Top, FBitmap.Width + 2, FBitmap.Height + 2) + else + begin + { Adjust aspect ratio if control size changed } + MinSide := Width; + if Height < Width then MinSide := Height; + SetBounds(Left, Top, MinSide, MinSide); + end; + end; +end; + +procedure TRxDice.MouseDown(Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if (Button = mbLeft) and TabStop and CanFocus then SetFocus; + inherited MouseDown(Button, Shift, X, Y); +end; + +procedure TRxDice.Paint; +var + ARect: TRect; + + procedure DrawBitmap; + var + TmpImage: TBitmap; + IWidth, IHeight: Integer; + IRect: TRect; + begin + IWidth := FBitmap.Width; + IHeight := FBitmap.Height; + IRect := Rect(0, 0, IWidth, IHeight); + TmpImage := TBitmap.Create; + try + TmpImage.Width := IWidth; + TmpImage.Height := IHeight; + TmpImage.Canvas.Brush.Color := Self.Brush.Color; +// TmpImage.Canvas.BrushCopy(IRect, FBitmap, IRect, FBitmap.TransparentColor); + InflateRect(ARect, -1, -1); +// Canvas.StretchDraw(ARect, TmpImage); + Canvas.StretchDraw(ARect, FBitmap); + + finally + TmpImage.Free; + end; + end; + +begin + ARect := ClientRect; + if FBitmap <> nil then DrawBitmap; +{ if Focused and FShowFocus and TabStop and not (csDesigning in ComponentState) then + begin + Canvas.DrawFocusRect(ARect); + end;} +end; + +procedure TRxDice.TimerExpired(Sender: TObject); +var + ParentForm: TCustomForm; + Now: Longint; +begin + RandomValue; + if not FRotate then + begin + FTimer.Free; + FTimer := nil; + if (csDesigning in ComponentState) then + begin + ParentForm := GetParentForm(Self); + if ParentForm <> nil then ParentForm.Designer.Modified; + end; + DoStop; + end + else + if AutoStopInterval > 0 then + begin + Now := GetTickCount; + if (Now - FTickCount >= AutoStopInterval) or (Now < FTickCount) then + Rotate := False; + end; +end; + +procedure TRxDice.Change; +begin + if Assigned(FOnChange) then FOnChange(Self); +end; + +procedure TRxDice.SetValue(Value: TRxDiceValue); +begin + if FValue <> Value then + begin + FValue := Value; + CreateBitmap; + Invalidate; + Change; + end; +end; + +procedure TRxDice.SetAutoSize(Value: Boolean); +begin + if Value <> FAutoSize then + begin + FAutoSize := Value; + AdjustSize; + Invalidate; + end; +end; + +procedure TRxDice.SetInterval(Value: Cardinal); +begin + if FInterval <> Value then + begin + FInterval := Value; + if FTimer <> nil then FTimer.Interval := FInterval; + end; +end; + +procedure TRxDice.SetRotate(AValue: Boolean); +begin + if FRotate <> AValue then + begin + if AValue then + begin + if FTimer = nil then FTimer := TTimer.Create(Self); + try + with FTimer do + begin + OnTimer := @TimerExpired; + Interval := FInterval; + Enabled := True; + end; + FRotate := AValue; + FTickCount := GetTickCount; + DoStart; + except + FTimer.Free; + FTimer := nil; + raise; + end; + end + else + FRotate := AValue; + end; +end; + +procedure TRxDice.SetShowFocus(AValue: Boolean); +begin + if FShowFocus <> AValue then + begin + FShowFocus := AValue; + if not (csDesigning in ComponentState) then Invalidate; + end; +end; + +end. diff --git a/components/rx/version/2.1/rxfileutils.pas b/components/rx/version/2.1/rxfileutils.pas new file mode 100644 index 000000000..767483f09 --- /dev/null +++ b/components/rx/version/2.1/rxfileutils.pas @@ -0,0 +1,197 @@ +{ rxFileUtils is part of RxFPC library + + Copyright (C) 2005-2013 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxFileUtils; + +{$I rx.inc} + +interface + +uses + SysUtils; + +function GetFileOwnerUser(const SearchDomain, FileName:String):String; +procedure GetFileOwnerData(const SearchDomain, FileName:String;out UserName, DomainName:string); +function NormalizeDirectoryName(const DirName:string):string; +function GetUserName:string; + +implementation +uses +{$IFDEF WINDOWS} + Windows, +{$ELSE} +{$ENDIF} + FileUtil; + +{$IF DEFINED(WINDOWS) AND NOT DEFINED(WINCE)} +function LStrError(const Ernum: Longint; const UseUTF8: Boolean = False): string; +const + MAX_ERROR = 1024; +var + Tmp: string; + TmpW: widestring; +begin + Result := ' [' + IntToStr(Ernum) + ']: '; + if USEUtf8 then begin + SetLength(TmpW, MAX_ERROR); + SetLength(TmpW, FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM or + FORMAT_MESSAGE_IGNORE_INSERTS or + FORMAT_MESSAGE_ARGUMENT_ARRAY, + nil, Ernum, 0, @TmpW[1], MAX_ERROR, nil)); + Tmp := UTF8Encode(TmpW); + end else begin + SetLength(Tmp, MAX_ERROR); + SetLength(Tmp, FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or + FORMAT_MESSAGE_IGNORE_INSERTS or + FORMAT_MESSAGE_ARGUMENT_ARRAY, + nil, Ernum, 0, @Tmp[1], MAX_ERROR, nil)); + end; + if Length(Tmp) > 2 then + Delete(Tmp, Length(Tmp)-1, 2); + Result := Result + Tmp; +end; + +{ TODO -oalexs : In future need rewrite this code for fix mem leak } + +procedure GetFileNameOwner(const SearchDomain, FileName: String; out UserName, DomainName: string); +var + RCode, RC1:WINBOOL; + SDSize:DWORD; // Size of security descriptor + + FAccountName:PChar; // Account name + lngAccountLen:DWORD; // Length of account name + FDomainName:PChar; // Domain name + lngDomainLen:DWORD; // Length of domain name + + ptrUse:SID_NAME_USE; // Pointer to SID_NAME_USE + ptrOwner:PSID; + P:PByteArray; +begin + ptrOwner:=nil; + SDSize:=0; + P:=nil; + UserName:=''; + DomainName:=''; + + RCode := GetFileSecurity(PChar(FileName), OWNER_SECURITY_INFORMATION, nil, 0, @SDSize); + GetMem(P, SDSize); + FillChar(P^, SDSize, 0); + RCode := GetFileSecurity(PChar(FileName), OWNER_SECURITY_INFORMATION, Pointer(P), SDSize, @SDSize); + if not RCode then + raise Exception.Create(LStrError(GetLastError, true)); + + RCode := GetSecurityDescriptorOwner(Pointer(P), ptrOwner, @RC1); + if not RCode then + raise Exception.Create(LStrError(GetLastError, true)); + + lngAccountLen:=0; + lngDomainLen:=0; + RCode := LookupAccountSid(PChar(SearchDomain), ptrOwner, nil, lngAccountLen, nil, lngDomainLen, ptrUse); + //' Configure the strings' buffer sizes + GetMem(FAccountName, lngAccountLen); + FillChar(FAccountName^, lngAccountLen, 0); + GetMem(FDomainName, lngDomainLen); + FillChar(FDomainName^, lngDomainLen, 0); + + RCode:=LookupAccountSid(PChar(SearchDomain), ptrOwner, FAccountName, lngAccountLen, FDomainName, lngDomainLen, ptrUse); + + if not RCode then + raise Exception.Create(LStrError(GetLastError, true)); + + UserName:=FAccountName; + DomainName:=FDomainName; + + Freemem(P, SDSize); + Freemem(FAccountName, lngAccountLen); + Freemem(FDomainName, lngDomainLen); +end; +{$ELSE} +{$ENDIF} + +function GetFileOwnerUser(const SearchDomain, FileName: String): String; +var + S:string; +begin + {$IF DEFINED(WINDOWS) AND NOT DEFINED(WINCE)} + GetFileNameOwner(UTF8ToSys(SearchDomain), UTF8ToSys(FileName), Result, S); + Result:=UTF8Encode(Result); + {$ELSE} + Result:=''; + {$ENDIF} +end; + +procedure GetFileOwnerData(const SearchDomain, FileName: String; out UserName, + DomainName: string); +begin + {$IF DEFINED(WINDOWS) AND NOT DEFINED(WINCE)} + GetFileNameOwner(UTF8ToSys(SearchDomain), UTF8ToSys(FileName), UserName, DomainName); + UserName:=UTF8Encode(UserName); + DomainName:=UTF8Encode(DomainName); + {$ELSE} + UserName:=''; + DomainName:=''; + {$ENDIF} +end; + +{replase any dir separators '\' or '/' to system directory separator } +function NormalizeDirectoryName(const DirName: string): string; +var + i:integer; +begin + Result:=DirName; + for i:=1 to Length(Result) do + if Result[i] in ['/', '\'] then + Result[i]:=DirectorySeparator; +end; + +function GetUserName: string; +{$IF DEFINED(WINDOWS) AND NOT DEFINED(WINCE)} +var + A:array [0..256] of Char; + L:DWORD; +{$ENDIF} +begin + {$IF DEFINED(WINDOWS) AND NOT DEFINED(WINCE)} + FillChar(A, SizeOf(A), 0); + L:=SizeOf(A)-1; + if Windows.GetUserNameA(@A, L) then + begin + Result:=SysToUTF8(StrPas(@A)); + end + else + Result:=GetEnvironmentVariableUTF8('USERNAME'); + {$ELSE} + Result:=GetEnvironmentVariable('USER'); + {$ENDIF} +end; + +end. + diff --git a/components/rx/version/2.1/rxfilterby.lfm b/components/rx/version/2.1/rxfilterby.lfm new file mode 100644 index 000000000..a9f7ba09c --- /dev/null +++ b/components/rx/version/2.1/rxfilterby.lfm @@ -0,0 +1,775 @@ +object rxFilterByForm: TrxFilterByForm + Left = 464 + Height = 445 + Top = 115 + Width = 644 + ActiveControl = Edit1 + Caption = 'Filter conditions' + ClientHeight = 445 + ClientWidth = 644 + OnCreate = FormCreate + Position = poScreenCenter + LCLVersion = '1.1' + object Label1: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 15 + Top = 6 + Width = 234 + BorderSpacing.Around = 6 + Caption = 'Select filter expression for data' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object Label2: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 15 + Top = 27 + Width = 62 + BorderSpacing.Around = 6 + Caption = 'On field:' + Font.Color = clRed + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object Label3: TLabel + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + Left = 168 + Height = 15 + Top = 27 + Width = 83 + BorderSpacing.Around = 6 + Caption = 'Operation :' + Font.Color = clRed + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object Label4: TLabel + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + Left = 271 + Height = 15 + Top = 27 + Width = 88 + BorderSpacing.Around = 6 + Caption = 'Conditions :' + Font.Color = clRed + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object Label5: TLabel + AnchorSideLeft.Control = ComboBox3 + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + Left = 533 + Height = 15 + Top = 27 + Width = 74 + BorderSpacing.Around = 6 + Caption = 'Operand :' + Font.Color = clRed + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object Label6: TLabel + AnchorSideLeft.Control = ComboBox3 + AnchorSideTop.Side = asrBottom + AnchorSideBottom.Control = ComboBox25 + AnchorSideBottom.Side = asrBottom + Left = 527 + Height = 15 + Top = 340 + Width = 33 + Anchors = [akLeft, akBottom] + Caption = 'End.' + Font.Color = clRed + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object ComboBox1: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 27 + Top = 48 + Width = 153 + BorderSpacing.Around = 6 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 0 + end + object ComboBox2: TComboBox + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + Left = 168 + Height = 27 + Top = 48 + Width = 96 + BorderSpacing.Around = 6 + DropDownCount = 9 + ItemHeight = 0 + OnChange = ComboBoxChange + Style = csDropDownList + TabOrder = 1 + end + object Edit1: TEdit + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox3 + Left = 271 + Height = 25 + Top = 48 + Width = 250 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + OnChange = EditChange + TabOrder = 2 + end + object ComboBox3: TComboBox + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 527 + Height = 27 + Top = 48 + Width = 111 + Anchors = [akTop, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + Items.Strings = ( + 'And' + 'Or' + ) + Style = csDropDownList + TabOrder = 3 + end + object ComboBox4: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ComboBox1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox1 + AnchorSideRight.Side = asrBottom + Left = 8 + Height = 27 + Top = 83 + Width = 149 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + BorderSpacing.Around = 2 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 4 + end + object ComboBox5: TComboBox + AnchorSideLeft.Control = ComboBox2 + AnchorSideTop.Control = ComboBox1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox2 + AnchorSideRight.Side = asrBottom + Left = 168 + Height = 27 + Top = 81 + Width = 96 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + DropDownCount = 9 + ItemHeight = 0 + OnChange = ComboBoxChange + Style = csDropDownList + TabOrder = 5 + end + object Edit2: TEdit + AnchorSideLeft.Control = ComboBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ComboBox1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox3 + Left = 270 + Height = 25 + Top = 81 + Width = 251 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + OnChange = EditChange + TabOrder = 6 + end + object ComboBox6: TComboBox + AnchorSideTop.Control = ComboBox1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 527 + Height = 27 + Top = 81 + Width = 111 + Anchors = [akTop, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + Items.Strings = ( + 'And' + 'Or' + ) + Style = csDropDownList + TabOrder = 7 + end + object ComboBox7: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ComboBox4 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox1 + AnchorSideRight.Side = asrBottom + Left = 8 + Height = 27 + Top = 118 + Width = 149 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + BorderSpacing.Around = 2 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 8 + end + object ComboBox8: TComboBox + AnchorSideLeft.Control = ComboBox2 + AnchorSideTop.Control = ComboBox4 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox2 + AnchorSideRight.Side = asrBottom + Left = 168 + Height = 27 + Top = 116 + Width = 96 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + DropDownCount = 9 + ItemHeight = 0 + OnChange = ComboBoxChange + Style = csDropDownList + TabOrder = 9 + end + object Edit3: TEdit + AnchorSideLeft.Control = ComboBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ComboBox4 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox3 + Left = 270 + Height = 25 + Top = 116 + Width = 251 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + OnChange = EditChange + TabOrder = 10 + end + object ComboBox9: TComboBox + AnchorSideTop.Control = ComboBox4 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 527 + Height = 27 + Top = 116 + Width = 111 + Anchors = [akTop, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + Items.Strings = ( + 'And' + 'Or' + ) + Style = csDropDownList + TabOrder = 11 + end + object ComboBox10: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ComboBox7 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox1 + AnchorSideRight.Side = asrBottom + Left = 8 + Height = 27 + Top = 153 + Width = 149 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + BorderSpacing.Around = 2 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 12 + end + object ComboBox11: TComboBox + AnchorSideLeft.Control = ComboBox2 + AnchorSideTop.Control = ComboBox7 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox2 + AnchorSideRight.Side = asrBottom + Left = 168 + Height = 27 + Top = 151 + Width = 96 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + DropDownCount = 9 + ItemHeight = 0 + OnChange = ComboBoxChange + Style = csDropDownList + TabOrder = 13 + end + object Edit4: TEdit + AnchorSideLeft.Control = ComboBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ComboBox7 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox3 + Left = 270 + Height = 25 + Top = 151 + Width = 251 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + OnChange = EditChange + TabOrder = 14 + end + object ComboBox12: TComboBox + AnchorSideTop.Control = ComboBox7 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 527 + Height = 27 + Top = 151 + Width = 111 + Anchors = [akTop, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + Items.Strings = ( + 'And' + 'Or' + ) + Style = csDropDownList + TabOrder = 15 + end + object ComboBox13: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ComboBox10 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox1 + AnchorSideRight.Side = asrBottom + Left = 8 + Height = 27 + Top = 188 + Width = 149 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + BorderSpacing.Around = 2 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 16 + end + object ComboBox14: TComboBox + AnchorSideLeft.Control = ComboBox2 + AnchorSideTop.Control = ComboBox10 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox2 + AnchorSideRight.Side = asrBottom + Left = 168 + Height = 27 + Top = 186 + Width = 96 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + DropDownCount = 9 + ItemHeight = 0 + OnChange = ComboBoxChange + Style = csDropDownList + TabOrder = 17 + end + object Edit5: TEdit + AnchorSideLeft.Control = ComboBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ComboBox10 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox3 + Left = 270 + Height = 25 + Top = 186 + Width = 251 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + OnChange = EditChange + TabOrder = 18 + end + object ComboBox15: TComboBox + AnchorSideTop.Control = ComboBox10 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 527 + Height = 27 + Top = 186 + Width = 111 + Anchors = [akTop, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + Items.Strings = ( + 'And' + 'Or' + ) + Style = csDropDownList + TabOrder = 19 + end + object ComboBox16: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ComboBox13 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox1 + AnchorSideRight.Side = asrBottom + Left = 8 + Height = 27 + Top = 223 + Width = 149 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + BorderSpacing.Around = 2 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 20 + end + object ComboBox17: TComboBox + AnchorSideLeft.Control = ComboBox2 + AnchorSideTop.Control = ComboBox13 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox2 + AnchorSideRight.Side = asrBottom + Left = 168 + Height = 27 + Top = 221 + Width = 96 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + DropDownCount = 9 + ItemHeight = 0 + OnChange = ComboBoxChange + Style = csDropDownList + TabOrder = 21 + end + object Edit6: TEdit + AnchorSideLeft.Control = ComboBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ComboBox13 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox3 + Left = 270 + Height = 25 + Top = 221 + Width = 251 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + OnChange = EditChange + TabOrder = 22 + end + object ComboBox18: TComboBox + AnchorSideTop.Control = ComboBox13 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 527 + Height = 27 + Top = 221 + Width = 111 + Anchors = [akTop, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + Items.Strings = ( + 'And' + 'Or' + ) + Style = csDropDownList + TabOrder = 23 + end + object ComboBox19: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ComboBox16 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox1 + AnchorSideRight.Side = asrBottom + Left = 8 + Height = 27 + Top = 258 + Width = 149 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + BorderSpacing.Around = 2 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 24 + end + object ComboBox20: TComboBox + AnchorSideLeft.Control = ComboBox2 + AnchorSideTop.Control = ComboBox16 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox2 + AnchorSideRight.Side = asrBottom + Left = 168 + Height = 27 + Top = 256 + Width = 96 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + DropDownCount = 9 + ItemHeight = 0 + OnChange = ComboBoxChange + Style = csDropDownList + TabOrder = 25 + end + object Edit7: TEdit + AnchorSideLeft.Control = ComboBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ComboBox16 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox3 + Left = 270 + Height = 25 + Top = 256 + Width = 251 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + OnChange = EditChange + TabOrder = 26 + end + object ComboBox21: TComboBox + AnchorSideTop.Control = ComboBox16 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 527 + Height = 27 + Top = 256 + Width = 111 + Anchors = [akTop, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + Items.Strings = ( + 'And' + 'Or' + ) + Style = csDropDownList + TabOrder = 27 + end + object ComboBox22: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ComboBox19 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox1 + AnchorSideRight.Side = asrBottom + Left = 8 + Height = 27 + Top = 293 + Width = 149 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + BorderSpacing.Around = 2 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 28 + end + object ComboBox23: TComboBox + AnchorSideLeft.Control = ComboBox2 + AnchorSideTop.Control = ComboBox19 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox2 + AnchorSideRight.Side = asrBottom + Left = 168 + Height = 27 + Top = 291 + Width = 96 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + DropDownCount = 9 + ItemHeight = 0 + OnChange = ComboBoxChange + Style = csDropDownList + TabOrder = 29 + end + object Edit8: TEdit + AnchorSideLeft.Control = ComboBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ComboBox19 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox3 + Left = 270 + Height = 25 + Top = 291 + Width = 251 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + OnChange = EditChange + TabOrder = 30 + end + object ComboBox24: TComboBox + AnchorSideTop.Control = ComboBox19 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 527 + Height = 27 + Top = 291 + Width = 111 + Anchors = [akTop, akRight] + BorderSpacing.Around = 6 + ItemHeight = 0 + Items.Strings = ( + 'And' + 'Or' + ) + Style = csDropDownList + TabOrder = 31 + end + object ComboBox25: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = ComboBox22 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox1 + AnchorSideRight.Side = asrBottom + Left = 8 + Height = 27 + Top = 328 + Width = 149 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + BorderSpacing.Around = 2 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 32 + end + object ComboBox26: TComboBox + AnchorSideLeft.Control = ComboBox2 + AnchorSideTop.Control = ComboBox22 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox2 + AnchorSideRight.Side = asrBottom + Left = 168 + Height = 27 + Top = 326 + Width = 96 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + DropDownCount = 9 + ItemHeight = 0 + OnChange = ComboBoxChange + Style = csDropDownList + TabOrder = 33 + end + object Edit9: TEdit + AnchorSideLeft.Control = ComboBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = ComboBox22 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ComboBox3 + Left = 270 + Height = 25 + Top = 326 + Width = 251 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + OnChange = EditChange + TabOrder = 34 + end + object ComboBox27: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 6 + Height = 27 + Top = 412 + Width = 58 + Anchors = [akLeft, akBottom] + BorderSpacing.Around = 6 + ItemHeight = 0 + Items.Strings = ( + 'And' + 'Or' + ) + Style = csDropDownList + TabOrder = 35 + Visible = False + end + object Button1: TButton + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 593 + Height = 25 + Top = 414 + Width = 45 + Anchors = [akRight, akBottom] + AutoSize = True + BorderSpacing.Around = 6 + Caption = 'Apply' + Default = True + OnClick = Button1Click + TabOrder = 36 + end + object Button2: TButton + AnchorSideRight.Control = Button1 + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 534 + Height = 25 + Top = 414 + Width = 53 + Anchors = [akRight, akBottom] + AutoSize = True + BorderSpacing.Around = 6 + Cancel = True + Caption = 'Cancel' + OnClick = Button2Click + TabOrder = 37 + end + object Button3: TButton + AnchorSideRight.Control = Button2 + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 453 + Height = 25 + Top = 414 + Width = 75 + Anchors = [akRight, akBottom] + AutoSize = True + BorderSpacing.Around = 6 + Caption = 'Clear filter' + OnClick = Button3Click + TabOrder = 38 + end +end diff --git a/components/rx/version/2.1/rxfilterby.lrt b/components/rx/version/2.1/rxfilterby.lrt new file mode 100644 index 000000000..237bf239f --- /dev/null +++ b/components/rx/version/2.1/rxfilterby.lrt @@ -0,0 +1,10 @@ +TRXFILTERBYFORM.CAPTION=Filter conditions +TRXFILTERBYFORM.LABEL1.CAPTION=Select filter expression for data +TRXFILTERBYFORM.LABEL2.CAPTION=On field: +TRXFILTERBYFORM.LABEL3.CAPTION=Operation : +TRXFILTERBYFORM.LABEL4.CAPTION=Conditions : +TRXFILTERBYFORM.LABEL5.CAPTION=Operand : +TRXFILTERBYFORM.LABEL6.CAPTION=End. +TRXFILTERBYFORM.BUTTON1.CAPTION=Apply +TRXFILTERBYFORM.BUTTON2.CAPTION=Cancel +TRXFILTERBYFORM.BUTTON3.CAPTION=Clear filter diff --git a/components/rx/version/2.1/rxfilterby.pas b/components/rx/version/2.1/rxfilterby.pas new file mode 100644 index 000000000..17e6e46ce --- /dev/null +++ b/components/rx/version/2.1/rxfilterby.pas @@ -0,0 +1,384 @@ +{ rxfilterby unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxfilterby; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, rxdbgrid, LResources, Forms, Controls, Graphics, + Dialogs, StdCtrls, db; + +type + + { TrxFilterByForm } + + TrxFilterByForm = class(TForm) + Button1: TButton; + Button2: TButton; + Button3: TButton; + ComboBox1: TComboBox; + ComboBox10: TComboBox; + ComboBox11: TComboBox; + ComboBox12: TComboBox; + ComboBox13: TComboBox; + ComboBox14: TComboBox; + ComboBox15: TComboBox; + ComboBox16: TComboBox; + ComboBox17: TComboBox; + ComboBox18: TComboBox; + ComboBox19: TComboBox; + ComboBox2: TComboBox; + ComboBox20: TComboBox; + ComboBox21: TComboBox; + ComboBox22: TComboBox; + ComboBox23: TComboBox; + ComboBox24: TComboBox; + ComboBox25: TComboBox; + ComboBox26: TComboBox; + ComboBox27: TComboBox; + ComboBox3: TComboBox; + ComboBox4: TComboBox; + ComboBox5: TComboBox; + ComboBox6: TComboBox; + ComboBox7: TComboBox; + ComboBox8: TComboBox; + ComboBox9: TComboBox; + Edit1: TEdit; + Edit2: TEdit; + Edit3: TEdit; + Edit4: TEdit; + Edit5: TEdit; + Edit6: TEdit; + Edit7: TEdit; + Edit8: TEdit; + Edit9: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Label6: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure ComboBoxChange(Sender: TObject); + procedure EditChange(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + Combo_1 : Array[1..9] of TComboBox; + Combo_2 : Array[1..9] of TComboBox; + Edit_1 : Array[1..9] of TEdit; + Combo_3 : Array[1..9] of TComboBox; + + FGrid : TRxDBGrid; + procedure ClearALL(AGrid : TRxDBGrid); + function FindCombo(CB:TComboBox):Integer; + function FindEdit(ED:TEdit):Integer; + public + function Execute(AGrid : TRxDBGrid; var FilterStr : String; var LastFilter : TstringList):Boolean; + end; + +var + rxFilterByForm: TrxFilterByForm; + +implementation +uses rxdconst, rxstrutils, DBGrids; + +{$R *.lfm} + +{ TrxFilterByForm } + +procedure TrxFilterByForm.Button2Click(Sender: TObject); +begin + ModalResult := mrCancel; +end; + +procedure TrxFilterByForm.Button3Click(Sender: TObject); +begin + ClearALL(FGrid); +end; + +procedure TrxFilterByForm.ComboBoxChange(Sender: TObject); +Var + CBN : Integer; + CB : TComboBox; +begin + CB := (Sender AS TComboBox); + CBN := FindCombo(CB); + if CBN=0 Then Exit; + if (CB.Text=' IS NULL ') Or (CB.Text=' IS NOT NULL ') Then + Begin + Edit_1[CBN].Text := ''; + Edit_1[CBN].Enabled := False; + Edit_1[CBN].Color := clInactiveCaption; + End + Else + Begin + Edit_1[CBN].Enabled := True; + Edit_1[CBN].Color := clWindow; + End; +end; + +procedure TrxFilterByForm.EditChange(Sender: TObject); +Var + EDN : Integer; + ED : TEdit; +begin + ED := (Sender AS TEdit); + EDN := FindEdit(ED); + if EDN=0 Then Exit; + if ED.Text='' Then Combo_1[EDN].ItemIndex:=-1; +end; + +procedure TrxFilterByForm.FormCreate(Sender: TObject); +begin + Label1.Caption:=sRxFilterFormSelectExp; + Label2.Caption:=sRxFilterFormOnField; + Label3.Caption:=sRxFilterFormOperaion; + Label4.Caption:=sRxFilterFormCondition; + Label5.Caption:=sRxFilterFormOperand; + Label6.Caption:=sRxFilterFormEnd; + Button3.Caption:=sRxFilterFormClear; + Button2.Caption:=sRxFilterFormCancel; + Button1.Caption:=sRxFilterFormApply; +end; + +procedure TrxFilterByForm.Button1Click(Sender: TObject); +begin + ModalResult := mrOK; +end; + +procedure TrxFilterByForm.ClearALL(AGrid: TRxDBGrid); +var + i : Integer; +begin + //***************************************************************************** + Combo_1[1].Items.Clear; + Combo_1[1].Items.Add(''); + for i := 0 To AGrid.Columns.Count-1 do + begin + if (AGrid.Columns[i].Field.FieldKind=fkData) and (AGrid.Columns[i].Visible) then + Combo_1[1].Items.Objects[Combo_1[1].Items.Add(AGrid.Columns[i].Title.Caption)]:=AGrid.Columns[i].Field; + end; + + Combo_1[1].ItemIndex := 0; + for i := 2 To 9 do + Begin + Combo_1[i].Items.Assign(Combo_1[1].Items); + Combo_1[i].ItemIndex := 0; + End; + + Combo_2[1].Items.Clear; + Combo_2[1].Items.Add(' = '); + Combo_2[1].Items.Add(' > '); + Combo_2[1].Items.Add(' < '); + Combo_2[1].Items.Add(' >= '); + Combo_2[1].Items.Add(' <= '); + Combo_2[1].Items.Add(' <> '); + Combo_2[1].Items.Add(' LIKE '); + Combo_2[1].Items.Add(' IS NULL '); + Combo_2[1].Items.Add(' IS NOT NULL '); + Combo_2[1].ItemIndex := 0; + for i := 2 To 9 do + begin + Combo_2[i].Items.Assign(Combo_2[1].Items); + Combo_2[i].ItemIndex := 0; + end; + for i := 1 To 9 do + begin + Combo_3[i].ItemIndex := 0; + end; + for i := 1 To 9 do Edit_1[i].Text := ''; + //***************************************************************************** +end; + +function TrxFilterByForm.Execute(AGrid: TRxDBGrid; var FilterStr: String; + var LastFilter: TstringList): Boolean; +Var + X : Integer; + P : Integer; + S, S1 : String; + SD : String; + C : TColumn; +Begin + Result := False; + //***************************************************************************** + Combo_1[1]:= ComboBox1; + Combo_1[2]:= ComboBox4; + Combo_1[3]:= ComboBox7; + Combo_1[4]:= ComboBox10; + Combo_1[5]:= ComboBox13; + Combo_1[6]:= ComboBox16; + Combo_1[7]:= ComboBox19; + Combo_1[8]:= ComboBox22; + Combo_1[9]:= ComboBox25; + + Combo_2[1]:= ComboBox2; + Combo_2[2]:= ComboBox5; + Combo_2[3]:= ComboBox8; + Combo_2[4]:= ComboBox11; + Combo_2[5]:= ComboBox14; + Combo_2[6]:= ComboBox17; + Combo_2[7]:= ComboBox20; + Combo_2[8]:= ComboBox23; + Combo_2[9]:= ComboBox26; + + Combo_3[1]:= ComboBox3; + Combo_3[2]:= ComboBox6; + Combo_3[3]:= ComboBox9; + Combo_3[4]:= ComboBox12; + Combo_3[5]:= ComboBox15; + Combo_3[6]:= ComboBox18; + Combo_3[7]:= ComboBox21; + Combo_3[8]:= ComboBox24; + Combo_3[9]:= ComboBox27; + Combo_3[9].Visible := False; + + Edit_1[1] := Edit1; + Edit_1[2] := Edit2; + Edit_1[3] := Edit3; + Edit_1[4] := Edit4; + Edit_1[5] := Edit5; + Edit_1[6] := Edit6; + Edit_1[7] := Edit7; + Edit_1[8] := Edit8; + Edit_1[9] := Edit9; + + //***************************************************************************** + FGrid := AGrid; + ClearALL(FGrid); + if LastFilter.Count > 0 Then + begin + for X := 0 To LastFilter.Count-1 do + begin + S := LastFilter.Strings[X]; + P := Pos('|||',S); + if P > 0 Then + begin + S1:=System.Copy(S,1,P-1); + C:=FGrid.ColumnByFieldName(S1); + Combo_1[X+1].ItemIndex := Combo_1[X+1].Items.IndexOf(C.Title.Caption); + System.Delete(S,1,P+2); + end; + + P := Pos('|||',S); + if P > 0 Then + begin + SD:=System.Copy(S,1,P-1); + Combo_2[X+1].ItemIndex := Combo_2[X+1].Items.IndexOf(System.Copy(S,1,P-1)); + System.Delete(S,1,P+2); + if (SD=' IS NULL ') or (SD=' IS NOT NULL ') Then + Begin + Edit_1[X+1].Text:= ''; + Edit_1[X+1].Enabled := False; + Edit_1[X+1].Color := clInactiveCaption; + End; + end; + + P := Pos('|||',S); + if P > 0 then + begin + Edit_1[X+1].Text := System.Copy(S,1,P-1); + System.Delete(S,1,P+2); + end; + Combo_3[X+1].ItemIndex := Combo_3[X+1].Items.IndexOf(S); + + if Combo_3[X+1].ItemIndex = -1 Then Combo_3[X+1].ItemIndex := 0; + end; + end; + + if ShowModal = mrOK Then + begin + Result := True; + FilterStr := ''; + LastFilter.Clear; + for X := 1 to 9 Do + begin + if (Combo_1[X].Text <> '') and (Combo_2[X].Text <> '') then + begin + if (Edit_1[X].Enabled=False) or (Edit_1[X].Text <> '') Then + begin + if X>1 Then + FilterStr := FilterStr+Combo_3[X-1].Text+' '; + + C:=FGrid.ColumnByCaption(Combo_1[X].Text); + case C.Field.DataType of + ftDateTime , + ftDate : FilterStr := FilterStr+'('+C.FieldName+Combo_2[X].Text+Char(39)+Copy(Edit_1[X].Text,7,4)+Copy(Edit_1[X].Text,3,4)+Copy(Edit_1[X].Text,1,2)+Copy(Edit_1[X].Text,11,9)+Char(39)+') '; + ftUnknown : FilterStr := FilterStr+'('+C.FieldName+Combo_2[X].Text+Edit_1[X].Text+') '; + ftTime, + ftString, + ftMemo : FilterStr := FilterStr+'('+C.FieldName+Combo_2[X].Text+QuotedString(Edit_1[X].Text, '''')+') '; + else + FilterStr := FilterStr+'('+C.FieldName+Combo_2[X].Text+Edit_1[X].Text+') '; + end; + LastFilter.Add(C.FieldName+'|||'+Combo_2[X].Text+'|||'+Edit_1[X].Text+'|||'+Combo_3[X].Text); + end; + end; + end; + end; +end; + +Function TrxFilterByForm.FindCombo(CB:TComboBox):Integer; +var + X : Integer; +begin + Result :=0; + for X := 1 to 9 do + begin + if Combo_2[X]=CB Then + begin + Result := X; + Exit; + end; + end; +end; + +function TrxFilterByForm.FindEdit(ED:TEdit):Integer; +var + X : Integer; +begin + Result :=0; + for X := 1 to 9 do + begin + if Edit_1[X]=ED then + begin + Result := X; + Exit; + end; + end; +end; + +end. + diff --git a/components/rx/version/2.1/rxhistory.pas b/components/rx/version/2.1/rxhistory.pas new file mode 100644 index 000000000..2f92a1f66 --- /dev/null +++ b/components/rx/version/2.1/rxhistory.pas @@ -0,0 +1,191 @@ +unit RXHistory; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, + rxtoolbar; + +type + TToolbarButtonStyleCntrl = (tbrcNotChange, tbrcDropDown, tbrcDropDownExtra); + + PNavigateRec = ^TNavigateRec; + TNavigateRec = packed record + Name:string; + Cond:string; + Next:PNavigateRec; + end; + + TOnNavigateEvent = procedure(Sender:TObject; const EventName, EventMacro:string) of object; + { TRXHistory } + + TRXHistory = class(TComponent) + private + FButtonNext: string; + FButtonPrior: string; + FButtonStyle: TToolbarButtonStyleCntrl; + FNextButton: TToolbarItem; + FNextButtonName: string; + FOnNavigateEvent: TOnNavigateEvent; + FPriorButton: TToolbarItem; + FPriorButtonName: string; + FToolPanel: TToolPanel; + function GetNextButtonName: string; + function GetPriorButtonName: string; + procedure SetButtonStyle(const AValue: TToolbarButtonStyleCntrl); + procedure SetNextButtonName(const AValue: string); + procedure SetPriorButtonName(const AValue: string); + procedure SetToolPanel(const AValue: TToolPanel); + function SetBtn(const ABtnName: string;var Button:TToolbarItem):boolean; + protected + procedure Loaded; override; + public + constructor Create(AOwner: TComponent); override; + property PriorButton:TToolbarItem read FPriorButton; + property NextButton:TToolbarItem read FNextButton; + published + property ToolPanel:TToolPanel read FToolPanel write SetToolPanel; + property PriorButtonName:string read GetPriorButtonName write SetPriorButtonName; + property NextButtonName:string read GetNextButtonName write SetNextButtonName; + property ButtonStyle:TToolbarButtonStyleCntrl read FButtonStyle write SetButtonStyle default tbrcNotChange; + property OnNavigateEvent:TOnNavigateEvent read FOnNavigateEvent write FOnNavigateEvent; + end; + +procedure Register; + +implementation +uses PropEdits, Componenteditors, TypInfo; + +type + + { TTRXHistoryBtnNameProperty } + + TTRXHistoryBtnNameProperty = class(TStringPropertyEditor) + public + function GetAttributes: TPropertyAttributes; override; + procedure GetValues(Proc: TGetStrProc); override; + end; + +{ TTRXHistoryBtnNameProperty } + +function TTRXHistoryBtnNameProperty.GetAttributes: TPropertyAttributes; +begin + Result:=inherited GetAttributes; + Result:=Result + [paValueList, paSortList, paMultiSelect]; +end; + +procedure TTRXHistoryBtnNameProperty.GetValues(Proc: TGetStrProc); +var + ToolPanel:TToolPanel; + i:integer; +begin + ToolPanel := GetObjectProp(GetComponent(0), 'ToolPanel') as TToolPanel; + if Assigned(ToolPanel) then + for I := 0 to ToolPanel.Items.Count - 1 do + begin + if Assigned(ToolPanel.Items[i].Action) then + Proc(ToolPanel.Items[i].Action.Name); + end; +end; + +procedure Register; +begin + RegisterComponents('RX',[TRXHistory]); + + RegisterPropertyEditor(TypeInfo(string), TRXHistory, 'PriorButtonName', TTRXHistoryBtnNameProperty); + RegisterPropertyEditor(TypeInfo(string), TRXHistory, 'NextButtonName', TTRXHistoryBtnNameProperty); +end; + +{ TRXHistory } + +procedure TRXHistory.SetToolPanel(const AValue: TToolPanel); +begin + if FToolPanel=AValue then exit; + FToolPanel:=AValue; +end; + +function TRXHistory.SetBtn(const ABtnName: string;var Button:TToolbarItem):boolean; +var + i:integer; +begin + Result:=false; + if not Assigned(FToolPanel) then exit; + Button:=FToolPanel.Items.ByActionName[ABtnName]; + Result:=Assigned(Button); + if Result then + begin + case FButtonStyle of + tbrcDropDown:Button.ButtonStyle:=tbrDropDown; + tbrcDropDownExtra:Button.ButtonStyle:=tbrDropDownExtra; + end; + end; +end; + +procedure TRXHistory.Loaded; +begin + inherited Loaded; + if not SetBtn(FNextButtonName, FNextButton) then + FNextButtonName:=''; + if not SetBtn(FPriorButtonName, FPriorButton) then + FPriorButtonName:=''; +end; + +constructor TRXHistory.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FButtonStyle:=tbrcNotChange; +end; + +procedure TRXHistory.SetNextButtonName(const AValue: string); +begin + if FNextButtonName=AValue then exit; + if csLoading in ComponentState then + FNextButtonName:=AValue + else + begin + if SetBtn(AValue, FNextButton) then + FNextButtonName:=AValue + else + FNextButtonName:=''; + end; +end; + +procedure TRXHistory.SetButtonStyle(const AValue: TToolbarButtonStyleCntrl); +begin + if FButtonStyle=AValue then exit; + FButtonStyle:=AValue; +end; + +function TRXHistory.GetNextButtonName: string; +begin + if Assigned(NextButton) and Assigned(NextButton.Action) then + Result:=NextButton.Action.Name + else + Result:=''; +end; + +function TRXHistory.GetPriorButtonName: string; +begin + if Assigned(PriorButton) and Assigned(PriorButton.Action) then + Result:=PriorButton.Action.Name + else + Result:=''; +end; + +procedure TRXHistory.SetPriorButtonName(const AValue: string); +begin + if FPriorButtonName=AValue then exit; + if csLoading in ComponentState then + FPriorButtonName:=AValue + else + begin + if SetBtn(AValue, FPriorButton) then + FPriorButtonName:=AValue + else + FPriorButtonName:=''; + end; +end; + +end. diff --git a/components/rx/version/2.1/rxhistorynavigator.pas b/components/rx/version/2.1/rxhistorynavigator.pas new file mode 100644 index 000000000..1ed51a173 --- /dev/null +++ b/components/rx/version/2.1/rxhistorynavigator.pas @@ -0,0 +1,463 @@ +{ RxHistoryNavigator unit + + Copyright (C) 2005-2011 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RxHistoryNavigator; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, rxtoolbar, + Menus; + +type + PNavigateRec = ^TNavigateRec; + TNavigateRec = record + Name:string; + Cond:string; + Next:PNavigateRec; + end; + +type + TRxHistoryNavigator = class; + THistoryNavigateEvent = procedure(Sender:TRxHistoryNavigator; AInfo:string; AProcessed:boolean) of object; + + { TRxHistoryNavigator } + + TRxHistoryNavigator = class(TComponent) + private + FForwardBtnItem:TToolbarItem; + FForwardBtn: string; + + FBackBtnItem:TToolbarItem; + FBackBtn: string; + First:PNavigateRec; + Curr:PNavigateRec; + FMaxPopupItems: integer; + + FOnHistoryNavigate: THistoryNavigateEvent; + FToolPanel: TToolPanel; + PMBack:TPopupMenu; + PMForw:TPopupMenu; + function GetBackBtn: string; + function GetForwardBtn: string; + procedure SetBackBtn(AValue: string); + procedure SetForwardBtn(AValue: string); + procedure SetToolPanel(AValue: TToolPanel); + procedure ClearFromCurrent(var C:PNavigateRec); + + procedure CreateBackMenu; + procedure CreateRetrMenu; + + function Last:PNavigateRec; + function Prior(R:PNavigateRec):PNavigateRec; + procedure CheckTop; + procedure CheckBottom; + procedure EnableAction(ActName:byte; Enable:boolean); + procedure BackProc(Sender: TObject); + procedure ForwardProc(Sender: TObject); + procedure DoSetItems; + protected + function Navigate(ToTop:boolean; Count:integer):boolean; + procedure Loaded; override; + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure ClearHistory; + procedure AddToHistory(AHistoryCaption, AInfo:string); + published + property ToolPanel: TToolPanel read FToolPanel write SetToolPanel; + property BackBtn:string read GetBackBtn write SetBackBtn; + property ForwardBtn:string read GetForwardBtn write SetForwardBtn; + property OnHistoryNavigate:THistoryNavigateEvent read FOnHistoryNavigate write FOnHistoryNavigate; + property MaxPopupItems:integer read FMaxPopupItems write FMaxPopupItems default 10; + end; + + +implementation +uses ActnList, rxconst; + + { TRxHistoryNavigator } + +procedure TRxHistoryNavigator.SetToolPanel(AValue: TToolPanel); +begin + if FToolPanel=AValue then Exit; + FToolPanel:=AValue; +end; + +procedure TRxHistoryNavigator.ClearFromCurrent(var C: PNavigateRec); +var + R:PNavigateRec; +begin + while C<>nil do + begin + R:=C; + C:=C^.Next; + Dispose(R); + end; +end; + +procedure TRxHistoryNavigator.CreateRetrMenu; +var i:integer; + S:PNavigateRec; + Item:TMenuItem; +begin + if Curr=nil then exit; + PMForw.Items.Clear; + i:=0; + S:=Curr^.Next; + while (i<FMaxPopupItems) and (S<>nil) do + begin + Item := TMenuItem.Create(Self); + Item.Caption := S^.Name; + Item.OnClick := @ForwardProc; + Item.Hint:=Format(sHistoryDesc, [S^.Cond]); + Item.Tag:=i; + PMForw.Items.Add(Item); + inc(i); + S:=S^.Next; + end; +end; + +function TRxHistoryNavigator.Last: PNavigateRec; +begin + if First=nil then Result:=nil + else + begin + Result:=First; + while Result^.Next<>nil do Result:=Result^.Next; + end; +end; + +function TRxHistoryNavigator.Prior(R: PNavigateRec): PNavigateRec; +var + L:PNavigateRec; +begin + if First=nil then Result:=nil + else + begin + L:=First; + while (L^.Next<>nil) and (L^.Next<>R) do + begin + L:=L^.Next; + end; + if L^.Next=nil then Result:=nil else Result:=l; + end; +end; + +procedure TRxHistoryNavigator.CheckTop; +begin + EnableAction(0, (Curr<>nil) and (Curr<>First)); +end; + + +procedure TRxHistoryNavigator.CheckBottom; +begin + EnableAction(1, (Curr<>nil) and (Curr^.Next<>nil)); +end; + +procedure TRxHistoryNavigator.EnableAction(ActName: byte; Enable: boolean); +begin + if First=nil then Enable:=false; + if ActName = 0 then + begin + if Assigned(FBackBtnItem) then + (FBackBtnItem.Action as TAction).Enabled:=Enable + end + else + if Assigned(FForwardBtnItem) then + (FForwardBtnItem.Action as TAction).Enabled:=Enable +end; + +procedure TRxHistoryNavigator.BackProc(Sender: TObject); +begin + Navigate(true, (Sender as TComponent).Tag); +end; + +procedure TRxHistoryNavigator.ForwardProc(Sender: TObject); +begin + Navigate(false, (Sender as TComponent).Tag); +end; + +procedure TRxHistoryNavigator.DoSetItems; +begin + if Assigned(FToolPanel) then + begin + FForwardBtnItem:=FToolPanel.Items.ByActionName[FForwardBtn]; + if Assigned(FForwardBtnItem) then + begin + FForwardBtnItem.DropDownMenu:=PMForw; + FForwardBtnItem.Action.OnExecute:=@ForwardProc; + end; + + FBackBtnItem:=FToolPanel.Items.ByActionName[FBackBtn]; + if Assigned(FBackBtnItem) then + begin + FBackBtnItem.DropDownMenu:=PMBack; + FBackBtnItem.Action.OnExecute:=@BackProc; + end; + end; +end; + +function TRxHistoryNavigator.Navigate(ToTop: boolean; Count: integer): boolean; +var + F:boolean; + Condit: string; +begin + Result:=false; + if First=nil then exit; + if ToTop then + begin + inc(Count); + repeat + Curr:=Prior(Curr); + if Curr=nil then Curr:=First; + Dec(Count); + until (Count=0) or (Curr=First); + Result:=true; + Condit:=Curr^.Cond; + CreateBackMenu; + CreateRetrMenu; + end + else + begin + inc(Count); + repeat + if Curr^.Next<>nil then Curr:=Curr^.Next; + Dec(Count); + until (Count=0) or (Curr^.Next=nil); + Result:=true; + Condit:=Curr^.Cond; + CreateRetrMenu; + CreateBackMenu; + end; + CheckTop; + CheckBottom; + F:=true; + if Assigned(FOnHistoryNavigate) and Assigned(Curr) then + FOnHistoryNavigate(Self, Condit, F); +end; + +procedure TRxHistoryNavigator.Loaded; +begin + inherited Loaded; + DoSetItems; + CheckTop; + CheckBottom; +end; + +procedure TRxHistoryNavigator.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if Operation = opRemove then + begin + if AComponent = FToolPanel then + begin + if Assigned(FForwardBtnItem) then + begin + FForwardBtnItem.Action.OnExecute:=nil; + FForwardBtnItem:=nil; + end; + + if Assigned(FBackBtnItem) then + begin + FBackBtnItem.Action.OnExecute:=nil; + FBackBtnItem:=nil; + end; + end + else + if AComponent = Self then + begin + if Assigned(FForwardBtnItem) then + begin + FForwardBtnItem.Action.OnExecute:=nil; + FForwardBtnItem.DropDownMenu:=nil; + FForwardBtnItem:=nil; + end; + + if Assigned(FBackBtnItem) then + begin + FBackBtnItem.Action.OnExecute:=nil; + FBackBtnItem.DropDownMenu:=nil; + FBackBtnItem:=nil; + end; + end; + end; +end; + +procedure TRxHistoryNavigator.CreateBackMenu; +var i:integer; + S:PNavigateRec; + Item:TMenuItem; +begin + if Curr=nil then exit; + PMBack.Items.Clear; + i:=0; + S:=Curr; + while (i<FMaxPopupItems) and (S<>First) do + begin + Item := TMenuItem.Create(Self); + Item.Caption := S^.Name; + Item.OnClick := @BackProc; + Item.Hint:=Format(sHistoryDesc, [S^.Cond]); + Item.Tag:=i; + PMBack.Items.Add(Item); + inc(i); + S:=Prior(S); + end; +end; + +constructor TRxHistoryNavigator.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + PMBack:=TPopupMenu.Create(Self); + PMBack.Parent:=Self; + PMForw:=TPopupMenu.Create(Self); + PMForw.Parent:=Self; + FMaxPopupItems:=10; +end; + +destructor TRxHistoryNavigator.Destroy; +begin + Curr:=nil; + ClearFromCurrent(First); + inherited Destroy; +end; + +procedure TRxHistoryNavigator.ClearHistory; +begin + +end; + +procedure TRxHistoryNavigator.AddToHistory(AHistoryCaption, AInfo: string); +var + R, L:PNavigateRec; +begin + New(R); + FillChar(R^, SizeOf(TNavigateRec), 0); + R^.Name:=AHistoryCaption; + R^.Cond:=AInfo; + if First<>nil then + begin + L:=Last; + if Curr<>L then ClearFromCurrent(Curr^.Next); + Curr^.Next:=R; + Curr:=R; + end + else + begin + First:=R; + Curr:=R; + end; + CreateBackMenu; + CreateRetrMenu; + CheckTop; + CheckBottom; +end; + +procedure TRxHistoryNavigator.SetBackBtn(AValue: string); +begin + if FBackBtn=AValue then Exit; + + if ForwardBtn = AValue then + ForwardBtn:=''; + + FBackBtn:=AValue; + + if Assigned(FBackBtnItem) then + begin + FBackBtnItem.DropDownMenu:=nil; + FBackBtnItem.Action.OnExecute:=nil; + end; + + if Assigned(FToolPanel) and (FBackBtn<>'') then + begin + FBackBtnItem:=FToolPanel.Items.ByActionName[FBackBtn]; + if Assigned(FBackBtnItem) then + begin + FBackBtnItem.DropDownMenu:=PMBack; + FBackBtnItem.Action.OnExecute:=@BackProc; + end; + end + else + FBackBtnItem:=nil; +end; + +function TRxHistoryNavigator.GetBackBtn: string; +begin + if Assigned(FBackBtnItem) then + Result:=FBackBtnItem.Action.Name + else + Result:=FBackBtn; +end; + +function TRxHistoryNavigator.GetForwardBtn: string; +begin + if Assigned(FForwardBtnItem) then + Result:=FForwardBtnItem.Action.Name + else + Result:=FForwardBtn; +end; + +procedure TRxHistoryNavigator.SetForwardBtn(AValue: string); +begin + if FForwardBtn=AValue then Exit; + + if BackBtn = AValue then + BackBtn:=''; + + FForwardBtn:=AValue; + + + if Assigned(FForwardBtnItem) then + begin + FForwardBtnItem.DropDownMenu:=nil; + FForwardBtnItem.Action.OnExecute:=nil; + end; + + if Assigned(FToolPanel) and (AValue <>'') then + begin + FForwardBtnItem:=FToolPanel.Items.ByActionName[FForwardBtn]; + if Assigned(FForwardBtnItem) then + begin + FForwardBtnItem.DropDownMenu:=PMForw; + FForwardBtnItem.Action.OnExecute:=@ForwardProc; + end; + end + else + FForwardBtnItem:=nil; +end; + +end. diff --git a/components/rx/version/2.1/rxiconv.pas b/components/rx/version/2.1/rxiconv.pas new file mode 100644 index 000000000..b9619247a --- /dev/null +++ b/components/rx/version/2.1/rxiconv.pas @@ -0,0 +1,439 @@ +(* + A.Voitov zprokuror(cyka)narod.ru + LAZARUS-FPC-LINUX codeset conversion routines + + The goal is easy-and-on-fly *.lrs conversion from codeset used by developer to + user's system codeset without gettext, without separate message files etc. + + Now I only have to set my codeset below (by default it's mine - UTF-8) - + DON'T FORGET ABOUT IT - + and call LocalizeForm('TFormClassName') right after {$I TFormClassName.lrs} - + see example below. + This way form resource file will be converted to system codeset when form is + creating. + + For gtk/gnome there's only one conversion routine + function Localize(source:string):ansistring; + For gtk2 resource MUST, I guess, be converted to UTF-8 anyway (if it's not yet), + so I set current_codeset to UTF-8 with FORCE_UTF8 definition. Though if + developer's codeset is UTF-8 then no form resource conversion needed. + + Localize is published function so it can be used again to convert string constants, + resource strings in most cases with no care about user's and developer's codeset. + But it's not enough sometime (file names, inifiles etc. can be wrong when gtk2 + works in koi8-r locale). + That's why we've got some stuff th handle it without care. + 1. First one is TIconv object (I'm not sure it's best way to do maybe it would class? + if so uncomment $DEFINE OBJ_IS_CLASS below) + 2. Second are uiconv_xxx functions + They can be used to easy implement any valid conversions. + + EXAMPLES: + 1. Auto form conversion + - set my codeset below: {$DEFINE DC_UTF8} + - add LocalizeForm('TFormClassName') after {$I TFormClassName.lrs} + <CODE> + unit1; + [...] + initialization + {$I unit1.lrs} + LocalizeForm('TForm1'); + end. + </CODE> + 2. TIconv object example: + object is local variable here, but it can be global (create at startup, + dead in the end) if it's always in-use. + <CODE> + function koi8r_to_utf8(S:string):string; + var iConverter:pIconv; + begin + iConverter:=NewIconv('CP1251', 'UTF-8'); + Result:=iConverter.iconv(S); + iConverter.Free; + end; + </CODE> + 3. uiconv_xxx example - obvious. + + APPENDIX + i. KNOWN DEVELOPER'S CODESET DEFENITIONS: + $DC_KOI8 (obvious) + $DC_UTF8 (obvious) - default + $DC_WIN (CP1251) - not tested yet + ii. GTK2 NOTES + As I found there's something wrong with some strings when gtk2 is used under + koi8-r locale. OpenDialog.FileName is stored in my inifile as koi8-r string + and then can't be loaded in MRU menu. + So I've got a couple of functions here for that case: str2gtk and gtk2str. + 'str' means current codeset (locale) + iii. This unit tested with dc_utf8 and user's locale koi8-r only +*) + +unit rxiconv; +{* Developer's codeset. Must be set on design-time. Default is UTF8} +{.$DEFINE DC_KOI8} +{$DEFINE DC_WIN} +{.$DEFINE DC_UTF8} //nothing defined so DC_UTF8 will be defined here +{$IFNDEF DC_UTF8} + {$IFNDEF DC_KOI8} + {$IFNDEF DC_WIN} + {$DEFINE DC_UTF8} + {$ENDIF DC_WIN} + {$ENDIF DC_KOI8} +{$ENDIF DC_UTF8} + +{* user acces to iconv functions} +{$DEFINE USER_ICONV} +{* TIconv object} +{$DEFINE USE_OBJECT} +{* Ticonv is class(TObject)} +{$DEFINE OBJ_IS_CLASS} + +{* form-localization needed only with gtk1 or with gtk2 if developer's codeset +is not utf-8. First turn it of.} +{$UNDEF USE_LOCALIZE} +{* if widgetset is GTK2 ($IFDEF LCLGtk2) and developer's codeset is not DC_UTF8 + then we'd FORCE_UTF8 and turn on USE_LOCALIZE. And if widgetset is GTK1 then + we USE_LOCALIZE too.} +{$IFDEF LCLGtk2} + {$IFNDEF DC_UTF8} + {$DEFINE USE_LOCALIZE} + {$DEFINE FORCE_UTF8} + {$ENDIF DC_UTF8} +{$ELSE LCLGtk2} + {$DEFINE USE_LOCALIZE} +{$ENDIF LCLGtk2} + +{$mode objfpc} +interface + +{$IFNDEF WINDOWS} +uses + {$IFDEF USE_LOCALIZE} LResources, Classes,{$ENDIF} initc, SysUtils; + + {* returns current codeset} + function GetCodeset():ansistring; + {$IFDEF USE_LOCALIZE} + {* returns true if current codeset<>developer's codeset} + function InvalidCodeset():boolean; + {$ENDIF USE_LOCALIZE} + {* basic string conversion - enough for localization. + conversion from developer's codeset 2 user's codeset} + function Localize(source:ansistring):ansistring; + {with gtk2 converts utf8 to locale codeset and back} + {$IFDEF LCLGtk2} + function str2gtk(source:ansistring):ansistring; + function gtk2str(source:ansistring):ansistring; + {$ENDIF LCLGtk2} + {* public access 2 iconv} + {$IFDEF USER_ICONV} + function uiconv(ic_usr:pointer; source:ansistring):ansistring ; + function uiconv_open(ic_from, ic_to:ansistring):pointer ; + procedure uiconv_close(ic_usr:pointer) ; + {$ENDIF USER_ICONV} + {* form conversion} + procedure LocalizeForm(form_classname:ansistring); + procedure LocalizeAllForm; + +{* iconv object/class} +{$IFDEF USE_OBJECT} + type + {$IFDEF OBJ_IS_CLASS} + Ticonv=class(TObject) + {$ELSE OBJ_IS_CLASS} + pIconv=^Ticonv; + Ticonv=object + protected + {$ENDIF OBJ_IS_CLASS} + hIconv:pointer; + public + destructor Destroy;{$IFDEF OBJ_IS_CLASS}virtual;{$ENDIF OBJ_IS_CLASS} + {$IFNDEF OBJ_IS_CLASS} + procedure Free; + {$ENDIF OBJ_IS_CLASS} + constructor Create{$IFDEF OBJ_IS_CLASS}(cs_from, cs_to:ansistring){$ENDIF OBJ_IS_CLASS}; + function iconv(source:ansistring):ansistring; + end; + {$IFNDEF OBJ_IS_CLASS} + function NewIconv(cs_from, cs_to:ansistring):TIconv ; + {$ENDIF OBJ_IS_CLASS} +{$ENDIF USE_OBJECT} +{$ENDIF} +implementation +{$IFNDEF WINDOWS} +uses dialogs; +{$linklib c} + +const + libiconvname='c'; + __LC_CTYPE = 0; + _NL_CTYPE_CLASS = (__LC_CTYPE shl 16); + _NL_CTYPE_CODESET_NAME = (_NL_CTYPE_CLASS)+14; + CODESET = _NL_CTYPE_CODESET_NAME; +{developer's codeset names} +{$IFDEF DC_KOI8} + DEV_CODESET='KOI8-R'; + DC_NAME='KOI'; + DC_NAME_EXT='R'; +{$ENDIF DC_KOI8} +{$IFDEF DC_UTF8} + DEV_CODESET='UTF-8'; + DC_NAME='UTF'; + DC_NAME_EXT='8'; +{$ENDIF DC_UTF8} +{$IFDEF DC_WIN} + DEV_CODESET='CP1251'; + DC_NAME='1251'; + DC_NAME_EXT='1251'; +{$ENDIF DC_WIN} + +type + size_t = cardinal; + pSize = ^size_t; + psize_t = pSize; + cInt = longint; + piconv_t = ^iconv_t; + iconv_t = pointer; + nl_item = cint; + +var //iconv pointers + {$IFDEF LCLGtk2} + ic_str2gtk, ic_gtk2str, + {$ENDIF LCLGtk2} + ic_localize : iconv_t; + +function nl_langinfo(__item:nl_item):pchar;cdecl;external libiconvname name 'nl_langinfo'; +function iconv_open(__tocode:pchar; __fromcode:pchar):iconv_t;cdecl;external libiconvname name 'iconv_open'; +function iconv(__cd:iconv_t; __inbuf:ppchar; __inbytesleft:psize_t; __outbuf:ppchar; __outbytesleft:psize_t):size_t;cdecl;external libiconvname name 'iconv'; +function iconv_close(__cd:iconv_t):cint;cdecl;external libiconvname name 'iconv_close'; + +{* common procedures} +function GetCodeset():ansistring; +begin +Result:= ansistring(nl_langinfo(CODESET)); +end; + +function CodesetIs(CSNAME, CSEXT:ansistring):boolean ; +var CS:ansistring; +begin + CS:=UpperCase(GetCodeSet); + if ((pos(CSNAME,CS)<>0) and (pos(CSEXT,CS)<>0)) then Result:=true else Result:=false; +end; + +{* main conversion procedure} +function _iconv(hiconv:iconv_t; source:ansistring):ansistring; + const + ESysEILSEQ = 84; + ESysE2BIG = 7; + var + len:SizeInt; + outlength, + outoffset, + outleft : size_t; + srcpos, + destpos: pchar; + mynil : pchar; + my0 : size_t; +begin + mynil:=nil; + my0:=0; + // extra space + len:=length(source); + outlength:=len*3+1; //setlength(result,outlength); + Result:=StringOfChar(#0, outlength); + //outlength:=len+1; + srcpos:=pChar(source); + destpos:=pchar(result); + outleft:=outlength*2; + while iconv(hiconv,@srcpos,@len,@destpos,@outleft)=size_t(-1) do + begin + case fpgetCerrno of + ESysEILSEQ: + begin + { skip and set to '?' } + inc(srcpos); + pwidechar(destpos)^:='?'; + inc(destpos,2); + dec(outleft,2); + { reset } + iconv(hiconv,@mynil,@my0,@mynil,@my0); + end; + ESysE2BIG: + begin + outoffset:=destpos-pchar(result); + { extend } + setlength(result,outlength+len); + inc(outleft,len*2); + inc(outlength,len); + { string could have been moved } + destpos:=pchar(result)+outoffset; + end; + else + raise EConvertError.Create('iconv error '+IntToStr(fpgetCerrno)); + end; + end; + //setlength(result,length(result)-outleft div 2); // truncate string + Result:=TrimRight(Result);// not shure it always works right +end; + +{$IFDEF USE_OBJECT} +{* Ticonv *} +{$IFNDEF OBJ_IS_CLASS} +function _NewIconv(cs_from, cs_to:ansistring):pIconv ; +begin + New( Result, Create); + Result^.hIconv:=Pointer(iconv_open(pChar(cs_to), pChar(cs_from))); +end; + +function NewIconv(cs_from, cs_to:ansistring):TIconv ; +begin + Result:=_NewIconv(cs_from, cs_to)^; +end; + +procedure Ticonv.Free(); +begin + if @Self<>nil then Self.Destroy; +end; +{$ENDIF OBJ_IS_CLASS} + +constructor Ticonv.Create{$IFDEF OBJ_IS_CLASS}(cs_from, cs_to:ansistring){$ENDIF OBJ_IS_CLASS}; +begin {$IFDEF OBJ_IS_CLASS} +inherited Create; +hIconv:=Pointer(iconv_open(pChar(cs_to), pChar(cs_from))); +{$ENDIF OBJ_IS_CLASS} +end; + +destructor Ticonv.Destroy; +begin + iconv_close(hIconv); + Inherited; +end; + +function Ticonv.iconv(source:ansistring):ansistring; +begin + Result:=_iconv(hIconv, source); +end; +{$ENDIF USE_OBJECT} + +{$IFDEF USER_ICONV} +function uiconv(ic_usr:pointer; source:ansistring):ansistring ; +begin + Result:=_iconv(iconv_t(ic_usr), pchar(source)); +end; + +function uiconv_open(ic_from, ic_to:ansistring):pointer ; +begin + Result:= iconv_open(pchar(ic_to), pchar(ic_from)); +end; + +procedure uiconv_close(ic_usr:pointer) ; +begin + iconv_close(iconv_t(ic_usr)); +end; +{$ENDIF USER_ICONV} + +function Localize(source:ansistring):ansistring; +begin + Result:=_iconv(ic_localize, source); +end; + +{$IFDEF LCLGtk2} +function str2gtk(source:ansistring):ansistring; +begin + Result:=_iconv(ic_str2gtk, source); +end; + +function gtk2str(source:ansistring):ansistring; +begin + Result:=_iconv(ic_gtk2str, source); +end; +{$ENDIF LCLGtk2} + +{* form localization - only if use_localize} +{$IFDEF USE_LOCALIZE} +function InvalidCodeset():boolean; +begin +Result:=False; +{$IFNDEF FORCE_UTF8} Result:= not (CodesetIs(DC_NAME, DC_NAME_EXT));{$ENDIF FORCE_UTF8} +end; + +{* converts form resource from developer's codeset to env codeset. + it's empty procedure if widgetSet is gtk2 and dev's codeset is utf8. + So USE_LOCCALIZE definition used } +procedure LocalizeForm(form_classname:ansistring); + var res : TLResource; + S : ansistring; + RS, MS : TMemoryStream; +begin + {$IFNDEF FORCE_UTF8} //always convert to utf8 + if not InvalidCodeset then exit; + {$ENDIF FORCE_UTF8} + {find resource} + res:=LazarusResources.Find(form_classname); + RS:=TMemoryStream.create; + MS:=TMemoryStream.create; + {read form 2 RS} + RS.Write(res.Value[1],length(res.Value)); + RS.Position:=0; + {convert 2 text} + LRSObjectBinaryToText( RS, MS); + MS.Position:=0; + {copy 2 string} + SetLength(S, MS.Size); + MS.Read(S[1], MS.Size); + {convert 2 ccs or utf8 - under gtk2} + S:=Localize(S); + {copy back to ms} + S:=Trim(S) + #0#0#0#0; //doesn't work without it... + MS.Position:=0; + MS.Write(S[1],length(S)); + MS.Position:=0; + RS.SetSize(0); + {convert 2 binary RS} + LRSObjectTextToBinary(MS, RS); + RS.Position:=0; + SetLength(S, RS.Size); + {write 2 resource} + RS.Read(S[1],RS.Size); + res.Value:=S; + MS.Free; RS.Free; +end; + +procedure LocalizeAllForm; +var + i:integer; +begin + for i:=0 to LazarusResources.Count - 1 do + begin + if LazarusResources.Items[i].ValueType = 'FORMDATA' then + LocalizeForm(LazarusResources.Items[i].Name); + end; +end; + +{$ELSE USE_LOCALIZE} +{* dummy proc for easy testing} +procedure LocalizeForm(form_classname:ansistring);begin {*} end; + +procedure LocalizeAllForm; +begin +end; + +{$ENDIF USE_LOCALIZE} + +initialization +{$IFNDEF FORCE_UTF8} + ic_localize := iconv_open(nl_langinfo(CODESET), DEV_CODESET); //main +{$ELSE FORCE_UTF8} + ic_localize := iconv_open('UTF-8', DEV_CODESET); +{$ENDIF FORCE_UTF8} +{$IFDEF LCLGtk2} + ic_str2gtk:= iconv_open('UTF-8', nl_langinfo(CODESET)); + ic_gtk2str:= iconv_open(nl_langinfo(CODESET), 'UTF-8'); +{$ENDIF LCLGtk2} +finalization + iconv_close(ic_localize); +{$IFDEF LCLGtk2} + iconv_close(ic_str2gtk); + iconv_close(ic_gtk2str); +{$ENDIF LCLGtk2} +{$ENDIF} +end. diff --git a/components/rx/version/2.1/rxinipropstorage.pas b/components/rx/version/2.1/rxinipropstorage.pas new file mode 100644 index 000000000..570af65b3 --- /dev/null +++ b/components/rx/version/2.1/rxinipropstorage.pas @@ -0,0 +1,82 @@ +{ RegisterRxTools unit + + Copyright (C) 2005-2013 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RxIniPropStorage; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, IniPropStorage; + +type + + { TRxIniPropStorage } + + TRxIniPropStorage = class(TIniPropStorage) + private + FSeparateFiles: boolean; + protected + function GetIniFileName: string; override; + public + { Public declarations } + published + property SeparateFiles:boolean read FSeparateFiles write FSeparateFiles; + end; + +implementation +uses rxapputils, LazUTF8, FileUtil; + +{ TRxIniPropStorage } + +function TRxIniPropStorage.GetIniFileName: string; +var + S:string; +begin + if ExtractFileDir(IniFileName) <> '' then + Result:=IniFileName + else + begin + S:=GetDefaultIniName; + if IniFileName <> '' then + Result:=AppendPathDelim(ExtractFileDir(S)) + IniFileName + else + begin + if FSeparateFiles then + Result:=AppendPathDelim(ExtractFileDir(S)) + RootSection + '.cfg' + else + Result:=S; + end; + end; +end; + +end. diff --git a/components/rx/version/2.1/rxlogin.lfm b/components/rx/version/2.1/rxlogin.lfm new file mode 100644 index 000000000..420c45215 --- /dev/null +++ b/components/rx/version/2.1/rxlogin.lfm @@ -0,0 +1,376 @@ +object RxLoginForm: TRxLoginForm + Cursor = crArrow + Left = 458 + Height = 203 + Top = 193 + Width = 455 + ActiveControl = UserNameEdit + BorderIcons = [biSystemMenu, biHelp] + Caption = 'RxLoginForm' + ClientHeight = 203 + ClientWidth = 455 + FormStyle = fsStayOnTop + OnCreate = FormCreate + OnShow = FormShow + Position = poScreenCenter + LCLVersion = '0.9.29' + object AppIcon: TImage + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 32 + Top = 6 + Width = 32 + AutoSize = True + BorderSpacing.Around = 6 + end + object KeyImage: TImage + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 32 + Top = 6 + Width = 32 + AutoSize = True + BorderSpacing.Around = 6 + Picture.Data = { + 055449636F6EBE1000000000010001002020000001002000A810000016000000 + 2800000020000000400000000100200000000000001000006400000064000000 + 0000000000000000000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FF000000FF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FFFFFFFFFF + 000000FF000000FFFFFFFFFFFFFFFFFF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FFFFFFFFFFFFFFFFFF808080FF000000FF000000FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FFFFFFFFFF + 000000FF000000FFFFFFFFFFFFFFFFFF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FFFFFFFFFF808080FF000000FF808080FF000000FF + 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FFFFFFFFFF + 000000FF000000FFFFFFFFFFFFFFFFFF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FFFFFFFFFF000000FF000000FFFFFFFFFFFFFFFFFF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FFFFFFFFFF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FFFFFFFFFF000000FF000000FFFFFFFFFFFFFFFFFF + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF + 000000FF000000FF000000FFFFFFFFFF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FFFFFFFFFF808080FF000000FF808080FF000000FF + 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FFFFFFFFFFFFFFFFFF808080FF000000FF000000FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000808080FF808080FF808080FF808080FF808080FF808080FF + 808080FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF + 808080FF808080FF808080FF808080FF000000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000 + } + end + object HintLabel: TLabel + AnchorSideLeft.Control = AppIcon + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Owner + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 44 + Height = 18 + Top = 6 + Width = 405 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + Caption = 'HintLabel' + ParentColor = False + ShowAccelChar = False + end + object UserNameLabel: TLabel + AnchorSideLeft.Control = Owner + AnchorSideBottom.Control = UserNameEdit + AnchorSideBottom.Side = asrBottom + Left = 6 + Height = 18 + Top = 65 + Width = 73 + Anchors = [akLeft, akBottom] + BorderSpacing.Left = 6 + Caption = 'UserName' + FocusControl = UserNameEdit + ParentColor = False + end + object PasswordLabel: TLabel + AnchorSideLeft.Control = Owner + AnchorSideBottom.Control = PasswordEdit + AnchorSideBottom.Side = asrBottom + Left = 6 + Height = 18 + Top = 100 + Width = 67 + Anchors = [akLeft, akBottom] + BorderSpacing.Left = 6 + Caption = 'Password' + FocusControl = PasswordEdit + ParentColor = False + end + object AppTitleLabel: TLabel + AnchorSideLeft.Control = AppIcon + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = HintLabel + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 44 + Height = 18 + Top = 30 + Width = 405 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 6 + Caption = 'AppTitleLabel' + ParentColor = False + ShowAccelChar = False + end + object DataBaseLabel: TLabel + AnchorSideLeft.Control = Owner + AnchorSideBottom.Control = CustomCombo + AnchorSideBottom.Side = asrBottom + Left = 6 + Height = 18 + Top = 137 + Width = 67 + Anchors = [akLeft, akBottom] + BorderSpacing.Left = 6 + Caption = 'Database' + FocusControl = CustomCombo + ParentColor = False + end + object UserNameEdit: TEdit + AnchorSideLeft.Control = UserNameLabel + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = AppTitleLabel + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Cursor = crIBeam + Left = 97 + Height = 29 + Top = 54 + Width = 352 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 12 + BorderSpacing.Around = 6 + TabOrder = 0 + end + object PasswordEdit: TEdit + AnchorSideLeft.Control = UserNameEdit + AnchorSideTop.Control = UserNameEdit + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = UserNameEdit + AnchorSideRight.Side = asrBottom + Cursor = crIBeam + Left = 97 + Height = 29 + Top = 89 + Width = 352 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + EchoMode = emPassword + PasswordChar = '*' + TabOrder = 1 + end + object CustomCombo: TComboBox + AnchorSideLeft.Control = UserNameEdit + AnchorSideTop.Control = PasswordEdit + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = UserNameEdit + AnchorSideRight.Side = asrBottom + Left = 97 + Height = 31 + Top = 124 + Width = 352 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + ItemHeight = 0 + Style = csDropDownList + TabOrder = 2 + end + object btnOK: TBitBtn + AnchorSideLeft.Control = PasswordEdit + AnchorSideTop.Control = btnCancel + AnchorSideRight.Control = btnCancel + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 187 + Height = 36 + Top = 161 + Width = 60 + Anchors = [akTop, akRight, akBottom] + AutoSize = True + BorderSpacing.Right = 6 + BorderSpacing.Bottom = 6 + BorderSpacing.InnerBorder = 2 + Caption = '&ОК' + Default = True + Kind = bkOK + ModalResult = 1 + OnClick = btnOKClick + TabOrder = 3 + end + object btnCancel: TBitBtn + AnchorSideTop.Control = CustomCombo + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = btnHelp + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 253 + Height = 36 + Top = 161 + Width = 95 + Anchors = [akRight, akBottom] + AutoSize = True + BorderSpacing.Around = 6 + BorderSpacing.InnerBorder = 2 + Cancel = True + Caption = 'Отмена' + Kind = bkCancel + ModalResult = 2 + TabOrder = 4 + end + object btnHelp: TBitBtn + AnchorSideTop.Control = btnCancel + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 354 + Height = 36 + Top = 161 + Width = 95 + Anchors = [akTop, akRight, akBottom] + AutoSize = True + BorderSpacing.Right = 6 + BorderSpacing.Bottom = 6 + Caption = '&Справка' + Kind = bkHelp + TabOrder = 5 + end + object btnMore: TBitBtn + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = btnCancel + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 6 + Height = 36 + Top = 161 + Width = 78 + Anchors = [akTop, akLeft, akBottom] + AutoSize = True + BorderSpacing.Left = 6 + BorderSpacing.Bottom = 6 + Caption = 'More >>' + OnClick = btnMoreClick + TabOrder = 6 + end +end diff --git a/components/rx/version/2.1/rxlogin.lrs b/components/rx/version/2.1/rxlogin.lrs new file mode 100644 index 000000000..70f85c67d --- /dev/null +++ b/components/rx/version/2.1/rxlogin.lrs @@ -0,0 +1,219 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TRxLoginForm','FORMDATA',[ + 'TPF0'#12'TRxLoginForm'#11'RxLoginForm'#6'Cursor'#7#7'crArrow'#4'Left'#3#202#1 + +#6'Height'#3#203#0#3'Top'#3#193#0#5'Width'#3#199#1#13'ActiveControl'#7#12'Us' + +'erNameEdit'#11'BorderIcons'#11#12'biSystemMenu'#6'biHelp'#0#7'Caption'#6#11 + +'RxLoginForm'#12'ClientHeight'#3#203#0#11'ClientWidth'#3#199#1#9'FormStyle'#7 + +#11'fsStayOnTop'#8'OnCreate'#7#10'FormCreate'#6'OnShow'#7#8'FormShow'#8'Posi' + +'tion'#7#14'poScreenCenter'#10'LCLVersion'#6#6'0.9.29'#0#6'TImage'#7'AppIcon' + +#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#4 + +'Left'#2#6#6'Height'#2' '#3'Top'#2#6#5'Width'#2' '#8'AutoSize'#9#20'BorderSp' + +'acing.Around'#2#6#0#0#6'TImage'#8'KeyImage'#22'AnchorSideLeft.Control'#7#5 + +'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#2#6#6'Height'#2' '#3'To' + +'p'#2#6#5'Width'#2' '#8'AutoSize'#9#20'BorderSpacing.Around'#2#6#12'Picture.' + +'Data'#10#200#16#0#0#5'TIcon'#190#16#0#0#0#0#1#0#1#0' '#0#0#1#0' '#0#168#16 + +#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0' '#0#0#0#0#0#0#16#0#0'd'#0#0#0 + +'d'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#128#128#128#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#0#0#0#255#0#0#0#255#255#255#255#255#0#0#0#255#0#0#0#255#255#255 + +#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128 + +#255#255#255#255#255#255#255#255#255#128#128#128#255#0#0#0#255#0#0#0#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#0#0#0#255#0#0#0#255#255#255#255#255#0#0#0#255#0#0#0#255#255#255#255#255#255 + +#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#255#255#255 + +#255#255#128#128#128#255#0#0#0#255#128#128#128#255#0#0#0#255#0#0#0#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0 + +#255#255#255#255#255#0#0#0#255#0#0#0#255#255#255#255#255#255#255#255#255#0#0 + +#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#255#255#255#255#255#0#0#0#255 + +#0#0#0#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#255#255 + +#255#255#255#0#0#0#255#0#0#0#255#255#255#255#255#255#255#255#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#128#128#128#255#255#255#255#255#128#128#128#255#0#0#0#255#128#128#128#255 + +#0#0#0#255#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#128#128#128#255#255#255#255#255#255#255#255#255#128#128#128#255#0#0#0 + +#255#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#0#0#0#255#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#128#128#128#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + ,#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 + +#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#0#0#0#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 + +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#6'TLabel'#9'HintLabel'#22 + +'AnchorSideLeft.Control'#7#7'AppIcon'#19'AnchorSideLeft.Side'#7#9'asrBottom' + +#21'AnchorSideTop.Control'#7#5'Owner'#23'AnchorSideRight.Control'#7#5'Owner' + +#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#2','#6'Height'#2#18#3'Top'#2 + +#6#5'Width'#3#149#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#20'BorderS' + +'pacing.Around'#2#6#7'Caption'#6#9'HintLabel'#11'ParentColor'#8#13'ShowAccel' + +'Char'#8#0#0#6'TLabel'#13'UserNameLabel'#22'AnchorSideLeft.Control'#7#5'Owne' + +'r'#24'AnchorSideBottom.Control'#7#12'UserNameEdit'#21'AnchorSideBottom.Side' + +#7#9'asrBottom'#4'Left'#2#6#6'Height'#2#18#3'Top'#2'A'#5'Width'#2'I'#7'Ancho' + +'rs'#11#6'akLeft'#8'akBottom'#0#18'BorderSpacing.Left'#2#6#7'Caption'#6#8'Us' + +'erName'#12'FocusControl'#7#12'UserNameEdit'#11'ParentColor'#8#0#0#6'TLabel' + +#13'PasswordLabel'#22'AnchorSideLeft.Control'#7#5'Owner'#24'AnchorSideBottom' + +'.Control'#7#12'PasswordEdit'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Lef' + +'t'#2#6#6'Height'#2#18#3'Top'#2'd'#5'Width'#2'C'#7'Anchors'#11#6'akLeft'#8'a' + +'kBottom'#0#18'BorderSpacing.Left'#2#6#7'Caption'#6#8'Password'#12'FocusCont' + +'rol'#7#12'PasswordEdit'#11'ParentColor'#8#0#0#6'TLabel'#13'AppTitleLabel'#22 + +'AnchorSideLeft.Control'#7#7'AppIcon'#19'AnchorSideLeft.Side'#7#9'asrBottom' + +#21'AnchorSideTop.Control'#7#9'HintLabel'#18'AnchorSideTop.Side'#7#9'asrBott' + +'om'#23'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asr' + +'Bottom'#4'Left'#2','#6'Height'#2#18#3'Top'#2#30#5'Width'#3#149#1#7'Anchors' + +#11#5'akTop'#6'akLeft'#7'akRight'#0#20'BorderSpacing.Around'#2#6#7'Caption'#6 + +#13'AppTitleLabel'#11'ParentColor'#8#13'ShowAccelChar'#8#0#0#6'TLabel'#13'Da' + +'taBaseLabel'#22'AnchorSideLeft.Control'#7#5'Owner'#24'AnchorSideBottom.Cont' + +'rol'#7#11'CustomCombo'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#2#6 + +#6'Height'#2#18#3'Top'#3#137#0#5'Width'#2'C'#7'Anchors'#11#6'akLeft'#8'akBot' + +'tom'#0#18'BorderSpacing.Left'#2#6#7'Caption'#6#8'Database'#12'FocusControl' + +#7#11'CustomCombo'#11'ParentColor'#8#0#0#5'TEdit'#12'UserNameEdit'#22'Anchor' + +'SideLeft.Control'#7#13'UserNameLabel'#19'AnchorSideLeft.Side'#7#9'asrBottom' + +#21'AnchorSideTop.Control'#7#13'AppTitleLabel'#18'AnchorSideTop.Side'#7#9'as' + +'rBottom'#23'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9 + +'asrBottom'#6'Cursor'#7#7'crIBeam'#4'Left'#2'a'#6'Height'#2#29#3'Top'#2'6'#5 + +'Width'#3'`'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#18'BorderSpacin' + +'g.Left'#2#12#20'BorderSpacing.Around'#2#6#8'TabOrder'#2#0#0#0#5'TEdit'#12'P' + +'asswordEdit'#22'AnchorSideLeft.Control'#7#12'UserNameEdit'#21'AnchorSideTop' + +'.Control'#7#12'UserNameEdit'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'Ancho' + +'rSideRight.Control'#7#12'UserNameEdit'#20'AnchorSideRight.Side'#7#9'asrBott' + +'om'#6'Cursor'#7#7'crIBeam'#4'Left'#2'a'#6'Height'#2#29#3'Top'#2'Y'#5'Width' + +#3'`'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2 + +#6#8'EchoMode'#7#10'emPassword'#12'PasswordChar'#6#1'*'#8'TabOrder'#2#1#0#0#9 + +'TComboBox'#11'CustomCombo'#22'AnchorSideLeft.Control'#7#12'UserNameEdit'#21 + +'AnchorSideTop.Control'#7#12'PasswordEdit'#18'AnchorSideTop.Side'#7#9'asrBot' + +'tom'#23'AnchorSideRight.Control'#7#12'UserNameEdit'#20'AnchorSideRight.Side' + +#7#9'asrBottom'#4'Left'#2'a'#6'Height'#2#31#3'Top'#2'|'#5'Width'#3'`'#1#7'An' + +'chors'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#6#10'Item' + +'Height'#2#0#5'Style'#7#14'csDropDownList'#8'TabOrder'#2#2#0#0#7'TBitBtn'#5 + +'btnOK'#22'AnchorSideLeft.Control'#7#12'PasswordEdit'#21'AnchorSideTop.Contr' + +'ol'#7#9'btnCancel'#23'AnchorSideRight.Control'#7#9'btnCancel'#24'AnchorSide' + +'Bottom.Control'#7#5'Owner'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left' + +#3#187#0#6'Height'#2'$'#3'Top'#3#161#0#5'Width'#2'<'#7'Anchors'#11#5'akTop'#7 + +'akRight'#8'akBottom'#0#8'AutoSize'#9#19'BorderSpacing.Right'#2#6#20'BorderS' + ,'pacing.Bottom'#2#6#25'BorderSpacing.InnerBorder'#2#2#7'Caption'#6#5'&'#208 + +#158#208#154#7'Default'#9#4'Kind'#7#4'bkOK'#11'ModalResult'#2#1#7'OnClick'#7 + +#10'btnOKClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#9'btnCancel'#21'AnchorSideTop' + +'.Control'#7#11'CustomCombo'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'Anchor' + +'SideRight.Control'#7#7'btnHelp'#24'AnchorSideBottom.Control'#7#5'Owner'#21 + +'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3#253#0#6'Height'#2'$'#3'Top' + +#3#161#0#5'Width'#2'_'#7'Anchors'#11#7'akRight'#8'akBottom'#0#8'AutoSize'#9 + +#20'BorderSpacing.Around'#2#6#25'BorderSpacing.InnerBorder'#2#2#6'Cancel'#9#7 + +'Caption'#6#12#208#158#209#130#208#188#208#181#208#189#208#176#4'Kind'#7#8'b' + +'kCancel'#11'ModalResult'#2#2#8'TabOrder'#2#4#0#0#7'TBitBtn'#7'btnHelp'#21'A' + +'nchorSideTop.Control'#7#9'btnCancel'#23'AnchorSideRight.Control'#7#5'Owner' + +#20'AnchorSideRight.Side'#7#9'asrBottom'#24'AnchorSideBottom.Control'#7#5'Ow' + +'ner'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3'b'#1#6'Height'#2'$' + +#3'Top'#3#161#0#5'Width'#2'_'#7'Anchors'#11#5'akTop'#7'akRight'#8'akBottom'#0 + +#8'AutoSize'#9#19'BorderSpacing.Right'#2#6#20'BorderSpacing.Bottom'#2#6#7'Ca' + +'ption'#6#15'&'#208#161#208#191#209#128#208#176#208#178#208#186#208#176#4'Ki' + +'nd'#7#6'bkHelp'#8'TabOrder'#2#5#0#0#7'TBitBtn'#7'btnMore'#22'AnchorSideLeft' + +'.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#9'btnCancel'#24'AnchorSide' + +'Bottom.Control'#7#5'Owner'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left' + +#2#6#6'Height'#2'$'#3'Top'#3#161#0#5'Width'#2'N'#7'Anchors'#11#5'akTop'#6'ak' + +'Left'#8'akBottom'#0#8'AutoSize'#9#18'BorderSpacing.Left'#2#6#20'BorderSpaci' + +'ng.Bottom'#2#6#7'Caption'#6#7'More >>'#7'OnClick'#7#12'btnMoreClick'#8'TabO' + +'rder'#2#6#0#0#0 +]); diff --git a/components/rx/version/2.1/rxlogin.pas b/components/rx/version/2.1/rxlogin.pas new file mode 100644 index 000000000..92cf0d49e --- /dev/null +++ b/components/rx/version/2.1/rxlogin.pas @@ -0,0 +1,770 @@ +{ rxlogin unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxlogin; + +{$I RX.INC} + +interface + +uses LResources, LCLType, LCLIntf, SysUtils, LMessages, Classes, Graphics, + Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons; + +type + TUpdateCaption = (ucNoChange, ucAppTitle, ucFormCaption); + + TRxLoginOption = (rloCustomSelect, rloMoreBtn, rloHelpBtn); + + TRxLoginOptions = set of TRxLoginOption; + + TRxLoginStorageParam = (rlsUserName, rlsTop, rlsLeft, rlsDetailStatus, + rlsDetailItem); + TRxLoginStorageParams = set of TRxLoginStorageParam; + + TRxLoginEvent = procedure(Sender: TObject; const UserName, Password: string; + var AllowLogin: Boolean) of object; + TCheckUnlockEvent = function(const Password: string): Boolean of object; + TUnlockAppEvent = procedure(Sender: TObject; const UserName, + Password: string; var AllowUnlock: Boolean) of object; + + TRxLoginForm = class; + +{ TRxCustomLogin } + + TRxCustomLogin = class(TComponent) + private + FActive: Boolean; + FAttemptNumber: Integer; + FDetailItem: integer; + FDetailItems: TStrings; + FLoggedUser: string; + FMaxPasswordLen: Integer; + FAllowEmpty: Boolean; + FLoginOptions: TRxLoginOptions; + FShowDetails: boolean; + FStorageParams: TRxLoginStorageParams; + FUpdateCaption: TUpdateCaption; + FIniFileName: string; + FUseRegistry: Boolean; + FLocked: Boolean; + FUnlockDlgShowing: Boolean; + FSaveOnRestore: TNotifyEvent; + FAfterLogin: TNotifyEvent; + FBeforeLogin: TNotifyEvent; + FOnUnlock: TCheckUnlockEvent; + FOnUnlockApp: TUnlockAppEvent; + FOnIconDblClick: TNotifyEvent; + function GetIniFileName: string; + procedure SetDetailItems(const AValue: TStrings); + procedure SetLoginOptions(const AValue: TRxLoginOptions); + procedure SetShowDetails(const AValue: boolean); + function UnlockHook(var Message: TLMessage): Boolean; + protected + function CheckUnlock(const UserName, Password: string): Boolean; dynamic; + function CreateLoginForm(UnlockMode: Boolean): TRxLoginForm; virtual; + procedure DoAfterLogin; dynamic; + procedure DoBeforeLogin; dynamic; + procedure DoIconDblCLick(Sender: TObject); dynamic; + function DoLogin(var UserName: string): Boolean; virtual; abstract; + function DoUnlockDialog: Boolean; virtual; + procedure SetLoggedUser(const Value: string); + procedure DoUpdateCaption; + procedure UnlockOkClick(Sender: TObject); + property Active: Boolean read FActive write FActive default True; + property AllowEmptyPassword: Boolean read FAllowEmpty write FAllowEmpty default True; + property AttemptNumber: Integer read FAttemptNumber write FAttemptNumber default 3; + property IniFileName: string read GetIniFileName write FIniFileName; + property MaxPasswordLen: Integer read FMaxPasswordLen write FMaxPasswordLen default 0; + property UpdateCaption: TUpdateCaption read FUpdateCaption write FUpdateCaption default ucNoChange; + property UseRegistry: Boolean read FUseRegistry write FUseRegistry default False; + property ShowDetails: boolean read FShowDetails write SetShowDetails; + property StorageParams:TRxLoginStorageParams read FStorageParams write FStorageParams default [rlsUserName]; + property DetailItems:TStrings read FDetailItems write SetDetailItems; + property DetailItem:integer read FDetailItem write FDetailItem; + property LoginOptions:TRxLoginOptions read FLoginOptions write SetLoginOptions default [rloCustomSelect, rloMoreBtn, rloHelpBtn]; + + property AfterLogin: TNotifyEvent read FAfterLogin write FAfterLogin; + property BeforeLogin: TNotifyEvent read FBeforeLogin write FBeforeLogin; + property OnUnlock: TCheckUnlockEvent read FOnUnlock write FOnUnlock; { obsolete } + property OnUnlockApp: TUnlockAppEvent read FOnUnlockApp write FOnUnlockApp; + property OnIconDblClick: TNotifyEvent read FOnIconDblClick write FOnIconDblClick; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function Login: Boolean; virtual; + procedure TerminateApplication; + procedure Lock; + property LoggedUser: string read FLoggedUser; + end; + +{ TRxLoginDialog } + + TRxLoginDialog = class(TRxCustomLogin) + private + FOnCheckUser: TRxLoginEvent; + FUserName:string; + FFormTop:integer; + FFormLeft:integer; + procedure OkButtonClick(Sender: TObject); + procedure WriteParams; + procedure LoadParams; + protected + function DoCheckUser(const UserName, Password: string): Boolean; dynamic; + function DoLogin(var UserName: string): Boolean; override; + procedure Loaded; override; + published + property Active; + property AttemptNumber; + property IniFileName; + property DetailItems; + property DetailItem; + property MaxPasswordLen; + property UpdateCaption; + property UseRegistry; + property ShowDetails; + property LoginOptions; + property StorageParams; + property OnCheckUser: TRxLoginEvent read FOnCheckUser write FOnCheckUser; + property AfterLogin; + property BeforeLogin; + property OnUnlockApp; + property OnIconDblClick; + end; + +{ TRxLoginForm } + + TRxLoginForm = class(TForm) + AppIcon: TImage; + btnHelp: TBitBtn; + btnMore: TBitBtn; + btnCancel: TBitBtn; + KeyImage: TImage; + HintLabel: TLabel; + btnOK: TBitBtn; + UserNameLabel: TLabel; + PasswordLabel: TLabel; + UserNameEdit: TEdit; + PasswordEdit: TEdit; + AppTitleLabel: TLabel; + DataBaseLabel: TLabel; + CustomCombo: TComboBox; + procedure btnMoreClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure btnOKClick(Sender: TObject); + procedure FormShow(Sender: TObject); + private + FSelectDatabase: Boolean; + FUnlockMode: Boolean; + FAttempt: Integer; + FOnFormShow: TNotifyEvent; + FOnOkClick: TNotifyEvent; + function GetShowDetailParams: boolean; + procedure SetLoginOptions(const AValue: TRxLoginOptions); + procedure SetShowDetailParams(const AValue: boolean); + public + { Public declarations } + AttemptNumber: Integer; + property Attempt: Integer read FAttempt; + property SelectDatabase: Boolean read FSelectDatabase write FSelectDatabase; + property OnFormShow: TNotifyEvent read FOnFormShow write FOnFormShow; + property OnOkClick: TNotifyEvent read FOnOkClick write FOnOkClick; + property ShowDetailParams:boolean read GetShowDetailParams write SetShowDetailParams; + property LoginOptions:TRxLoginOptions write SetLoginOptions; + end; + +function CreateLoginDialog(UnlockMode, ASelectDatabase: Boolean; + FormShowEvent, OkClickEvent: TNotifyEvent): TRxLoginForm; + +implementation + +uses + Registry, IniFiles, RxAppUtils, RxDConst, VclUtils, RxConst; + +const + keyLoginSection = 'Login Dialog'; + keyLastLoginUserName = 'Last Logged User'; + keyLastLoginFormTop = 'Last Logged Form Top'; + keyLastLoginFormLeft = 'Last Logged Form Left'; + keyLastLoginFormDetailStatus = 'Last Logged Detail Status'; + keyLastLoginFormDetailSelected = 'Last Logged Selected Detail'; + + +function CreateLoginDialog(UnlockMode, ASelectDatabase: Boolean; + FormShowEvent, OkClickEvent: TNotifyEvent): TRxLoginForm; +begin + Result := TRxLoginForm.Create(Application); + with Result do + begin + FSelectDatabase := ASelectDatabase; + FUnlockMode := UnlockMode; + if FUnlockMode then + begin + FormStyle := fsNormal; + FSelectDatabase := False; + end + else + begin + FormStyle := fsStayOnTop; + end; + OnFormShow := FormShowEvent; + OnOkClick := OkClickEvent; + end; +end; + +{ TRxCustomLogin } + +constructor TRxCustomLogin.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDetailItems:=TStringList.Create; + FActive := True; + FAttemptNumber := 3; + FAllowEmpty := True; + FUseRegistry := False; + FStorageParams:=[rlsUserName]; + FLoginOptions:=[rloCustomSelect, rloMoreBtn, rloHelpBtn]; +end; + +destructor TRxCustomLogin.Destroy; +begin + if FLocked then + begin +// Application.UnhookMainWindow(UnlockHook); + FLocked := False; + end; + FreeAndNil(FDetailItems); + inherited Destroy; +end; + +function TRxCustomLogin.GetIniFileName: string; +begin + Result := FIniFileName; + if (Result = '') and not (csDesigning in ComponentState) then + begin + if UseRegistry then + Result := GetDefaultIniRegKey + else + Result := GetDefaultIniName; + end; +end; + +procedure TRxCustomLogin.SetDetailItems(const AValue: TStrings); +begin + if Assigned(AValue) then + FDetailItems.Assign(AValue); +end; + +procedure TRxCustomLogin.SetLoginOptions(const AValue: TRxLoginOptions); +begin + if FLoginOptions=AValue then exit; + FLoginOptions:=AValue; +end; + +procedure TRxCustomLogin.SetShowDetails(const AValue: boolean); +begin + if FShowDetails=AValue then exit; + FShowDetails:=AValue; +end; + +procedure TRxCustomLogin.SetLoggedUser(const Value: string); +begin + FLoggedUser := Value; +end; + +procedure TRxCustomLogin.DoAfterLogin; +begin + if Assigned(FAfterLogin) then FAfterLogin(Self); +end; + +procedure TRxCustomLogin.DoBeforeLogin; +begin + if Assigned(FBeforeLogin) then FBeforeLogin(Self); +end; + +procedure TRxCustomLogin.DoIconDblCLick(Sender: TObject); +begin + if Assigned(FOnIconDblClick) then FOnIconDblClick(Self); +end; + +procedure TRxCustomLogin.DoUpdateCaption; +var + F: TForm; +begin + F := Application.MainForm; + if (F = nil) and (Owner is TForm) then F := Owner as TForm; + if (F <> nil) and (LoggedUser <> '') then + case UpdateCaption of + ucAppTitle: + F.Caption := Format('%s (%s)', [Application.Title, LoggedUser]); + ucFormCaption: + begin + F.Caption := Format('%s (%s)', [F.Caption, LoggedUser]); + UpdateCaption := ucNoChange; + end; + end; +end; + +function TRxCustomLogin.Login: Boolean; +var + LoginName: string; +begin + LoginName := EmptyStr; + DoBeforeLogin; + Result := DoLogin(LoginName); + if Result then + begin + SetLoggedUser(LoginName); + DoUpdateCaption; + DoAfterLogin; + end; +end; + +procedure TRxCustomLogin.Lock; +begin +// FSaveOnRestore := Application.OnRestore; + Application.Minimize; +// Application.HookMainWindow(UnlockHook); + FLocked := True; +end; + +procedure TRxCustomLogin.TerminateApplication; +begin + with Application do + begin + ShowMainForm := False; +{ if Application.Handle <> 0 then + ShowOwnedPopups(Handle, False);} + Terminate; + end; + CallTerminateProcs; + Halt(10); +end; + +procedure TRxCustomLogin.UnlockOkClick(Sender: TObject); +var + Ok: Boolean; +begin + with TRxLoginForm(Sender) do begin + Ok := False; + try + Ok := CheckUnlock(UserNameEdit.Text, PasswordEdit.Text); + except + Application.HandleException(Self); + end; + if Ok then ModalResult := mrOk + else ModalResult := mrCancel; + end; +end; + +function TRxCustomLogin.CheckUnlock(const UserName, Password: string): Boolean; +begin + Result := True; + if Assigned(FOnUnlockApp) then + FOnUnlockApp(Self, UserName, Password, Result) + else if Assigned(FOnUnlock) then + Result := FOnUnlock(Password); +end; + +function TRxCustomLogin.CreateLoginForm(UnlockMode: Boolean): TRxLoginForm; +begin + Result := TRxLoginForm.Create(Application); + with Result do + begin + FUnlockMode := UnlockMode; + if FUnlockMode then + begin + FormStyle := fsNormal; + FSelectDatabase := False; + end + else + FormStyle := fsStayOnTop; + if Assigned(Self.FOnIconDblClick) then + begin + with AppIcon do + begin + OnDblClick := @DoIconDblClick; + Cursor := crHand; + end; + with KeyImage do + begin + OnDblClick := @DoIconDblClick; + Cursor := crHand; + end; + end; + PasswordEdit.MaxLength := FMaxPasswordLen; + AttemptNumber := Self.AttemptNumber; + end; +end; + +function TRxCustomLogin.DoUnlockDialog: Boolean; +begin + with CreateLoginForm(True) do + try + OnFormShow := nil; + OnOkClick := @UnlockOkClick; + with UserNameEdit do + begin + Text := LoggedUser; + ReadOnly := True; + Font.Color := clGrayText; + end; + Result := ShowModal = mrOk; + finally + Free; + end; +end; + +function TRxCustomLogin.UnlockHook(var Message: TLMessage): Boolean; + + function DoUnlock: Boolean; + var + Popup: HWnd; + begin +(* with Application do + if IsWindowVisible(Application.Handle) and IsWindowEnabled(Handle) then +{$IFDEF WIN32} + SetForegroundWindow(Handle); +{$ELSE} + BringWindowToTop(Handle); +{$ENDIF} + if FUnlockDlgShowing then begin + Popup := GetLastActivePopup(Application.Handle); + if (Popup <> 0) and IsWindowVisible(Popup) and + (WindowClassName(Popup) = TRxLoginForm.ClassName) then + begin +{$IFDEF WIN32} + SetForegroundWindow(Popup); +{$ELSE} + BringWindowToTop(Popup); +{$ENDIF} + end; //*) + Result := False; +(* Exit; + end; + FUnlockDlgShowing := True; + try + Result := DoUnlockDialog; + finally + FUnlockDlgShowing := False; + end; + if Result then begin + Application.UnhookMainWindow(UnlockHook); + FLocked := False; + end;*) + end; + +begin + Result := False; + if not FLocked then Exit; + with Message do begin + case Msg of +{ LM_QUERYOPEN: + begin + UnlockHook := not DoUnlock; + end;} + LM_SHOWWINDOW: + if Bool(WParam) then begin + UnlockHook := not DoUnlock; + end; + LM_SYSCOMMAND: + if (WParam and $FFF0 = SC_RESTORE) +{ or (WParam and $FFF0 = SC_ZOOM) }then + begin + UnlockHook := not DoUnlock; + end; + end; + end; +end; + +{ TRxLoginDialog } + +procedure TRxLoginDialog.Loaded; +var + FLoading: Boolean; +begin + FLoading := csLoading in ComponentState; + inherited Loaded; + if not (csDesigning in ComponentState) and FLoading then + begin + if Active and not Login then + TerminateApplication; + end; +end; + +procedure TRxLoginDialog.OkButtonClick(Sender: TObject); +var + SC: Boolean; +begin + with TRxLoginForm(Sender) do + begin +{$IFDEF WIN32} + SC := GetCurrentThreadID = MainThreadID; +{$ELSE} + SC := True; +{$ENDIF} + try + if SC then + Screen.Cursor := crHourGlass; + try + if DoCheckUser(UserNameEdit.Text, PasswordEdit.Text) then + ModalResult := mrOk + else + ModalResult := mrNone; + finally + if SC then Screen.Cursor := crDefault; + end; + except + Application.HandleException(Self); + end; + end; +end; + +function TRxLoginDialog.DoCheckUser(const UserName, Password: string): Boolean; +begin + Result := True; + if Assigned(FOnCheckUser) then + FOnCheckUser(Self, UserName, Password, Result); +end; + +procedure TRxLoginDialog.WriteParams; +var + Ini: TObject; +begin + try + if UseRegistry then Ini := TRegIniFile.Create(IniFileName) + else Ini := TIniFile.Create(IniFileName); + try + if rlsUserName in FStorageParams then + IniWriteString(Ini, keyLoginSection, keyLastLoginUserName, FUserName); + if rlsTop in FStorageParams then + IniWriteInteger(Ini, keyLoginSection, keyLastLoginFormTop, FFormTop); + if rlsLeft in FStorageParams then + IniWriteInteger(Ini, keyLoginSection, keyLastLoginFormLeft, FFormLeft); + if rlsDetailStatus in FStorageParams then + IniWriteInteger(Ini, keyLoginSection, keyLastLoginFormDetailStatus, ord(FShowDetails)); + if rlsDetailItem in FStorageParams then + IniWriteInteger(Ini, keyLoginSection, keyLastLoginFormDetailSelected, FDetailItem); + finally + Ini.Free; + end; + except + end; +end; + +procedure TRxLoginDialog.LoadParams; +var + Ini: TObject; +begin + try + if UseRegistry then + begin + Ini := TRegIniFile.Create(IniFileName); + TRegIniFile(Ini).Access := KEY_READ; + end + else + Ini := TIniFile.Create(IniFileName); + try + if rlsUserName in FStorageParams then + FUserName:=IniReadString(Ini, keyLoginSection, keyLastLoginUserName, FUserName); + if rlsTop in FStorageParams then + FFormTop:=IniReadInteger(Ini, keyLoginSection, keyLastLoginFormTop, FFormTop); + if rlsLeft in FStorageParams then + FFormLeft:=IniReadInteger(Ini, keyLoginSection, keyLastLoginFormLeft, FFormLeft); + if rlsDetailStatus in FStorageParams then + FShowDetails:=IniReadInteger(Ini, keyLoginSection, keyLastLoginFormDetailStatus, ord(FShowDetails))=1; + if rlsDetailItem in FStorageParams then + FDetailItem:=IniReadInteger(Ini, keyLoginSection, keyLastLoginFormDetailSelected, FDetailItem); + finally + Ini.Free; + end; + except + end; +end; + +function TRxLoginDialog.DoLogin(var UserName: string): Boolean; +var + LoginForm:TRxLoginForm; +begin + try + LoginForm:=CreateLoginForm(False); + try + FUserName:=UserName; + LoginForm.OnOkClick := @Self.OkButtonClick; + LoadParams; + LoginForm.LoginOptions:=FLoginOptions; + + if rlsUserName in StorageParams then + LoginForm.UserNameEdit.Text := FUserName; + if rlsTop in StorageParams then + LoginForm.Top:=FFormTop; + if rlsLeft in StorageParams then + LoginForm.Left:=FFormLeft; + + if rloCustomSelect in LoginOptions then + begin + LoginForm.CustomCombo.Items.Assign(DetailItems); + if (FDetailItem>=0) and (FDetailItem<DetailItems.Count) then + LoginForm.CustomCombo.ItemIndex:=FDetailItem; + end; + + LoginForm.ShowDetailParams:=ShowDetails; + + Result := (LoginForm.ShowModal = mrOk); + if Result then + begin + if rlsTop in StorageParams then + FFormTop:=LoginForm.Top; + if rlsLeft in StorageParams then + FFormLeft:=LoginForm.Left; + + if rloCustomSelect in LoginOptions then + FDetailItem:=LoginForm.CustomCombo.ItemIndex; + + ShowDetails:=LoginForm.ShowDetailParams; + UserName := LoginForm.UserNameEdit.Text; + FUserName:=UserName; + WriteParams; + end; + finally + LoginForm.Free; + end; + except + Application.HandleException(Self); + Result := False; + end; +end; + +{ TRxLoginForm } + +procedure TRxLoginForm.FormCreate(Sender: TObject); +begin + Icon.Assign(Application.Icon); +// if Icon.Empty then Icon.Handle := LoadIcon(0, IDI_APPLICATION); + AppIcon.Picture.Assign(Icon); + AppTitleLabel.Caption := Format(SAppTitleLabel, [Application.Title]); + PasswordLabel.Caption := SPasswordLabel; + UserNameLabel.Caption := SUserNameLabel; +end; + +procedure TRxLoginForm.btnMoreClick(Sender: TObject); +begin + ShowDetailParams:=not ShowDetailParams; +end; + +procedure TRxLoginForm.btnOKClick(Sender: TObject); +begin + Inc(FAttempt); + if Assigned(FOnOkClick) then FOnOkClick(Self) + else ModalResult := mrOk; + if (ModalResult <> mrOk) and (FAttempt >= AttemptNumber) then + ModalResult := mrCancel; +end; + +procedure TRxLoginForm.FormShow(Sender: TObject); +var + I: Integer; + S: string; +begin + if FSelectDatabase then + begin + ClientHeight := CustomCombo.Top + PasswordEdit.Top - UserNameEdit.Top; + S := SDatabaseName; + I := Pos(':', S); + if I = 0 then I := Length(S); + DataBaseLabel.Caption := '&' + Copy(S, 1, I); + end + else + begin + DataBaseLabel.Visible := False; + CustomCombo.Visible := False; + btnMore.Visible := False; + end; + + SetShowDetailParams(ShowDetailParams); + + if not FUnlockMode then + begin + HintLabel.Caption := SHintLabel; + Caption := SRegistration; + end + else + begin + HintLabel.Caption := SUnlockHint; + Caption := SUnlockCaption; + end; + + if (UserNameEdit.Text = EmptyStr) and not FUnlockMode then + ActiveControl := UserNameEdit + else + ActiveControl := PasswordEdit; + if Assigned(FOnFormShow) then FOnFormShow(Self); + FAttempt := 0; +end; + +procedure TRxLoginForm.SetShowDetailParams(const AValue: boolean); +begin + DataBaseLabel.Visible:=AValue; + CustomCombo.Visible:=AValue; + if AValue then + begin + btnMore.Caption:=SMore2; + btnCancel.AnchorSideTop.Control:=CustomCombo; + Height := CustomCombo.Top + CustomCombo.Height + btnCancel.Height + 12; + end + else + begin + btnMore.Caption:=SMore1; + btnCancel.AnchorSideTop.Control:=PasswordEdit; + Height := PasswordEdit.Top + PasswordEdit.Height + btnCancel.Height + 12; + end; +end; + +function TRxLoginForm.GetShowDetailParams: boolean; +begin + Result:=CustomCombo.Visible; +end; + +procedure TRxLoginForm.SetLoginOptions(const AValue: TRxLoginOptions); +begin + btnHelp.Visible:=rloHelpBtn in AValue; + if not btnHelp.Visible then + begin + btnCancel.AnchorSideLeft.Side:=asrBottom; + btnCancel.AnchorSideLeft.Control:=Self; + end; + + btnMore.Visible:=rloMoreBtn in AValue; + FSelectDatabase:=rloCustomSelect in AValue; +end; + +initialization + {$I rxlogin.lrs} +end. diff --git a/components/rx/version/2.1/rxlookup.pas b/components/rx/version/2.1/rxlookup.pas new file mode 100644 index 000000000..acbbcaeea --- /dev/null +++ b/components/rx/version/2.1/rxlookup.pas @@ -0,0 +1,1696 @@ +{ rxlookup unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxlookup; + +{$I rx.inc} + +interface + +uses + LCLType, LCLProc, LCLIntf, Classes, SysUtils, LResources, Forms, types, + Controls, Graphics, Dialogs, DB, EditBtn, DBGrids, Buttons, + LMessages, DbCtrls, GraphType, dbutils, RxDbGrid, rxpopupunit, Themes; + +const + TextMargin = 5; + +type + TRxCustomDBLookupCombo = class; + TRxCustomDBLookupEdit = class; + + TClosePopup = procedure(Sender: TObject; SearchResult:boolean) of object; + + {For deciding, what we need to show in combobox in case we cannot find curvalue in lookup table.} + TRxDBValueVariant = (rxufNone, rxufLastSuccessful, rxufOriginal); + + { TLookupSourceLink } + TDataSourceLink = class(TDataLink) + private + FDataControl:TRxCustomDBLookupCombo; + protected + procedure ActiveChanged; override; + procedure LayoutChanged; override; + procedure FocusControl(Field: TFieldRef); override; + procedure RecordChanged(Field: TField); override; + procedure UpdateData; override; + end; + + { TLookupSourceLink } + + TLookupSourceLink = class(TDataLink) + private + FOnActiveChanged:TNotifyEvent; + FOnLayoutChanged:TNotifyEvent; + FOnDataSetChanged:TNotifyEvent; + protected + procedure ActiveChanged; override; + procedure LayoutChanged; override; + procedure DataSetChanged; override; + end; + + { TRxCustomDBLookupEdit } + + TRxCustomDBLookupEdit = class(TEditButton) + private + FLookupDisplayIndex: Integer; + FLookupField: string; + FLookupDisplay: string; + FKeyField:TField; + // + FLookupDataLink:TLookupSourceLink; + FLocateObject:TLocateObject; + FOnClosePopup: TClosePopup; + // + FRxPopUpForm:TPopUpForm; + + FFieldList:TStringList; + FPopUpFormOptions:TPopUpFormOptions; + function GetDropDownCount: Integer; + function GetDropDownWidth: Integer; + function GetLookupSource: TDataSource; + function GetPopupVisible: boolean; + procedure SetDropDownCount(const AValue: Integer); + procedure SetDropDownWidth(const AValue: Integer); + procedure SetLookupDisplay(const AValue: string); + procedure SetLookupDisplayIndex(const AValue: Integer); + procedure SetLookupField(const AValue: string); + procedure SetLookupSource(AValue: TDataSource); + procedure SetPopUpFormOptions(const AValue: TPopUpFormOptions); + // + procedure ShowList; + procedure HideList; + procedure ShowPopUp; + procedure UpdateKeyValue; + protected + property PopUpFormOptions:TPopUpFormOptions read FPopUpFormOptions write SetPopUpFormOptions; + procedure DoButtonClick (Sender: TObject); override; + function GetDefaultGlyphName: String; override; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure InternalClosePopup(AResult:boolean);virtual; + // + procedure LookupDataSetChanged(Sender: TObject); virtual; + procedure ListLinkActiveChanged(Sender: TObject); virtual; + // + property OnClosePopup:TClosePopup read FOnClosePopup write FOnClosePopup; + property DropDownCount: Integer read GetDropDownCount write SetDropDownCount default 8; + property DropDownWidth: Integer read GetDropDownWidth write SetDropDownWidth default 0; + property LookupDisplay: string read FLookupDisplay write SetLookupDisplay; + property LookupDisplayIndex: Integer read FLookupDisplayIndex write SetLookupDisplayIndex default 0; + property LookupField: string read FLookupField write SetLookupField; + property LookupSource: TDataSource read GetLookupSource write SetLookupSource; + property PopupVisible:boolean read GetPopupVisible; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + end; + + TRxLookupEdit = class(TRxCustomDBLookupEdit) + published + property DropDownCount; + property DropDownWidth; + property LookupDisplay; + property LookupDisplayIndex; + property LookupField; + property LookupSource; + property PopUpFormOptions; + property OnClosePopup; + end; + + { TRxCustomDBLookupCombo } + TRxCustomDBLookupCombo = class (TCustomControl) + private + //FDataLink:TFieldDataLink; + FDataLink:TDataSourceLink; + FDataFieldName: string; + FDataField :TField; + // + FLookupDataLink:TLookupSourceLink; + FLocateObject:TLocateObject; + FLookupField: string; + FLookupDisplay: string; + FDisplayField:TField; + FKeyField:TField; + FLookupDisplayIndex: Integer; + FListActive:boolean; + // + FEmptyItemColor: TColor; + FEmptyValue: string; + FOnChange: TNotifyEvent; + FOnClosePopup: TClosePopup; + FPopUpFormOptions: TPopUpFormOptions; + // + FRxPopUpForm:TPopUpForm; + FFieldList:TStringList; + FValuesList:TStringList; + FValue:string; + //Visual + FButton: TSpeedButton; + FButtonNeedsFocus: Boolean; + FDirectInput : Boolean; + FOnButtonClick : TNotifyEvent; + FReadOnly: boolean; + FDisplayAll: boolean; + FUnfindedValue: TRxDBValueVariant; + FSuccesfullyFind : boolean; + + FOnSelect : TNotifyEvent; + procedure SetValue(const Value: string); + function GetKeyValue: Variant; + procedure SetKeyValue(const Value: Variant); + + function GetDataSource: TDataSource; + function GetDisplayAll: Boolean; + function GetDropDownCount: Integer; + function GetDropDownWidth: Integer; + function GetLookupSource: TDataSource; + function GetMinHeight: Integer; + function GetBorderSize: Integer; + procedure CheckButtonVisible; + function GetButtonWidth: Integer; + function GetFlat: Boolean; + function GetGlyph: TBitmap; + function GetNumGlyphs: Integer; + function GetOnGetGridCellProps: TGetCellPropsEvent; + function GetPopupVisible: boolean; + procedure SetButtonNeedsFocus(const AValue: Boolean); + procedure SetButtonWidth(const AValue: Integer); + procedure SetDataFieldName(const AValue: string); + procedure SetDataSource(const AValue: TDataSource); + procedure SetDisplayAll(const AValue: Boolean); + procedure SetDropDownCount(const AValue: Integer); + procedure SetDropDownWidth(const AValue: Integer); + procedure SetEmptyItemColor(const AValue: TColor); + procedure SetEmptyValue(const AValue: string); + procedure SetFlat(const AValue: Boolean); + procedure SetGlyph(const AValue: TBitmap); + procedure SetLookupDisplay(const AValue: string); + procedure SetLookupDisplayIndex(const AValue: Integer); + procedure SetLookupField(const AValue: string); + procedure SetLookupSource(const AValue: TDataSource); + procedure SetNumGlyphs(const AValue: Integer); + procedure SetOnGetGridCellProps(const AValue: TGetCellPropsEvent); + procedure SetPopUpFormOptions(const AValue: TPopUpFormOptions); + procedure SetReadOnly(const AValue: boolean); + function StoreEmpty: boolean; + procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; + procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS; + procedure CMExit(var Message:TLMessage); message CM_EXIT; + procedure PaintDisplayValues(ACanvas: TCanvas; R: TRect; ALeft: Integer); + procedure CheckNotCircular; + procedure DisplayValueChanged; + procedure DataLinkActiveChanged; + procedure DataLinkRecordChanged(Field: TField); + procedure UpdateFieldValues; + procedure SetValueKey(const Value: string); + procedure UpdateKeyValue; + procedure KeyValueChanged; + procedure UpdateData; + procedure NeedUpdateData; + protected + procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; + WithThemeSpace: Boolean); override; + {procedure GetPreferredSize(var PreferredWidth, PreferredHeight: integer; + Raw: boolean = false; + WithThemeSpace: boolean = true); override; + class function GetControlClassDefaultSize: TSize; override;} + procedure ShowList; virtual; + procedure OnInternalClosePopup(AResult:boolean);virtual; + procedure SetEnabled(Value: Boolean); override; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure UTF8KeyPress(var UTF8Key: TUTF8Char); override; + procedure SetParent(AParent: TWinControl); override; + procedure DoSetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; + procedure DoPositionButton; virtual; + procedure DoChange; virtual; + procedure DoButtonClick(Sender: TObject); virtual; + Procedure Loaded; override; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure CMVisibleChanged(var Msg: TLMessage); message CM_VISIBLECHANGED; + procedure CMEnabledChanged(var Msg: TLMessage); message CM_ENABLEDCHANGED; + procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; + procedure Click; override; + function RealGetText: TCaption; override; + procedure RealSetText(const Value: TCaption); override; + + procedure Paint; override; + + procedure LookupDataSetChanged(Sender: TObject); virtual; + procedure ListLinkActiveChanged(Sender: TObject); virtual; + + // + property Button: TSpeedButton read FButton; + property ButtonWidth : Integer read GetButtonWidth write SetButtonWidth; + property ButtonOnlyWhenFocused : Boolean Read FButtonNeedsFocus Write SetButtonNeedsFocus; + property DirectInput : Boolean read FDirectInput write FDirectInput Default True; + property DisplayAllFields: Boolean read GetDisplayAll write SetDisplayAll default False; + property Flat : Boolean read GetFlat write SetFlat; + property Glyph : TBitmap read GetGlyph write SetGlyph; + property NumGlyphs : Integer read GetNumGlyphs write SetNumGlyphs; + property OnButtonClick : TNotifyEvent read FOnButtonClick write FOnButtonClick; + property OnChange : TNotifyEvent read FOnChange write FOnChange; + property ReadOnly:boolean read FReadOnly write SetReadOnly; + property EmptyValue: string read FEmptyValue write SetEmptyValue stored StoreEmpty; + property EmptyItemColor: TColor read FEmptyItemColor write SetEmptyItemColor default clWindow; + //data + property PopUpFormOptions:TPopUpFormOptions read FPopUpFormOptions write SetPopUpFormOptions; + property DataField: string read FDataFieldName write SetDataFieldName; + property DataSource: TDataSource read GetDataSource write SetDataSource; + property DropDownCount: Integer read GetDropDownCount write SetDropDownCount default 8; + property DropDownWidth: Integer read GetDropDownWidth write SetDropDownWidth default 0; + property LookupDisplay: string read FLookupDisplay write SetLookupDisplay; + property LookupDisplayIndex: Integer read FLookupDisplayIndex write SetLookupDisplayIndex default 0; + property LookupField: string read FLookupField write SetLookupField; + property LookupSource: TDataSource read GetLookupSource write SetLookupSource; + property OnGetGridCellProps: TGetCellPropsEvent read GetOnGetGridCellProps + write SetOnGetGridCellProps; + + property Value: string read FValue write SetValue stored False; + property KeyValue: Variant read GetKeyValue write SetKeyValue stored False; + property OnSelect: TNotifyEvent read FOnSelect write FOnSelect; + property OnClosePopup:TClosePopup read FOnClosePopup write FOnClosePopup; + + property UnfindedValue : TRxDBValueVariant read FUnfindedValue write FUnfindedValue default rxufNone; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property PopupVisible:boolean read GetPopupVisible; + end; + + { TRxDBLookupCombo } + TRxDBLookupCombo = class(TRxCustomDBLookupCombo) + protected + procedure OnInternalClosePopup(AResult:boolean);override; + public + property Value; + property KeyValue; + property Text; + published + property AutoSize; + property Align; + property Anchors; + property BorderSpacing; + property ButtonOnlyWhenFocused; + Property ButtonWidth; + property Color; + property DataField; + property DataSource; + Property DirectInput; + property DragCursor; + property DragMode; + property Enabled; + property PopUpFormOptions; + Property Flat; + property Font; + property Glyph; + property EmptyValue; + property EmptyItemColor; +// property MaxLength; + property NumGlyphs; + Property OnButtonClick; + property OnChange; + property OnClick; + property OnClosePopup; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + property OnGetGridCellProps; + property OnSelect; + + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ReadOnly; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; +{ property Width default 100; + property Height default 23;} + + property DisplayAllFields; + property DropDownCount; + property DropDownWidth; + property LookupDisplay; + property LookupDisplayIndex; + property LookupField; + property LookupSource; + property UnfindedValue; + end; + +implementation +uses VCLUtils, Math, rxdconst; + +type + TDbGridAccess = class(TDbGrid) + end; + TPopUpFormAccess = class(TPopUpForm) + end; + + +{ TRxCustomDBLookupEdit } + +function TRxCustomDBLookupEdit.GetLookupSource: TDataSource; +begin + Result:=FLookupDataLink.DataSource; +end; + +function TRxCustomDBLookupEdit.GetPopupVisible: boolean; +begin + Result:=Assigned(FRxPopUpForm); +end; + +function TRxCustomDBLookupEdit.GetDropDownCount: Integer; +begin + Result:=FPopUpFormOptions.DropDownCount; +end; + +function TRxCustomDBLookupEdit.GetDropDownWidth: Integer; +begin + Result:=FPopUpFormOptions.DropDownWidth; +end; + +procedure TRxCustomDBLookupEdit.SetDropDownCount(const AValue: Integer); +begin + FPopUpFormOptions.DropDownCount:=AValue; +end; + +procedure TRxCustomDBLookupEdit.SetDropDownWidth(const AValue: Integer); +begin + FPopUpFormOptions.DropDownWidth:=AValue; +end; + +procedure TRxCustomDBLookupEdit.SetLookupDisplay(const AValue: string); +var + S1, S2:string; + K:integer; +begin + if FLookupDisplay=AValue then exit; + FLookupDisplay:=AValue; + FFieldList.Clear; + S2:=AValue; + while S2<>'' do + begin + K:=Pos(';', S2); + if K>0 then + begin + S1:=Copy(S2, 1, K-1); + Delete(S2, 1, K); + end + else + begin + S1:=S2; + S2:=''; + end; + FFieldList.Add(S1); + end; +end; + +procedure TRxCustomDBLookupEdit.SetLookupDisplayIndex(const AValue: Integer); +begin + if FLookupDisplayIndex=AValue then exit; + FLookupDisplayIndex:=AValue; +end; + +procedure TRxCustomDBLookupEdit.SetLookupField(const AValue: string); +begin + if FLookupField = AValue then exit; + FLookupField:=AValue; +end; + +procedure TRxCustomDBLookupEdit.SetLookupSource(AValue: TDataSource); +begin + FLookupDataLink.DataSource:=AValue; +end; + +procedure TRxCustomDBLookupEdit.SetPopUpFormOptions( + const AValue: TPopUpFormOptions); +begin + FPopUpFormOptions.Assign(AValue); +end; + +procedure TRxCustomDBLookupEdit.ShowList; +{var + i,W:integer; + GC:TColumn;} +begin + if FLookupDataLink.Active and not PopupVisible then + begin + ShowPopUp; + end; +end; + +procedure TRxCustomDBLookupEdit.HideList; +begin + +end; + +procedure TRxCustomDBLookupEdit.ShowPopUp; +var + R:TPoint; + FValue:string; + {$IFDEF LINUX} + TempF:TPopUpForm; + {$ENDIF} +begin + + if FLookupDataLink.Active then + if not PopupVisible then + begin + + FValue := Text; + + FLocateObject.Locate(FLookupField, FValue, true, false); + +(* FRxPopUpForm:=ShowRxDBPopUpForm(Self, FLookupDataLink.DataSet, @OnClosePopup, + FPopUpFormOptions, FLookupDisplay, LookupDisplayIndex, 0 {ButtonWidth}, Font);*) + + FRxPopUpForm:=ShowRxDBPopUpForm(Self, FLookupDataLink.DataSet, @InternalClosePopup, + FPopUpFormOptions, FLookupDisplay, LookupDisplayIndex, 0 {ButtonWidth}, Font); + {$IFDEF LINUX} + TempF:=FRxPopUpForm; + if FRxPopUpForm.ShowModal = mrOk then + InternalClosePopup(true); + TempF.Free; + FRxPopUpForm:=nil + {$ENDIF} + + end +end; + + +procedure TRxCustomDBLookupEdit.UpdateKeyValue; +var + S:string; +begin + S:=FFieldList[FLookupDisplayIndex]; + if FLookupDataLink.Active then + Text:=FLookupDataLink.DataSet.FieldByName(S).AsString; +end; + +procedure TRxCustomDBLookupEdit.DoButtonClick(Sender: TObject); +begin + inherited DoButtonClick(Sender); + if PopupVisible then + HideList + else + ShowList; +end; + +function TRxCustomDBLookupEdit.GetDefaultGlyphName: String; +begin + Result:='rxbtn_downarrow'; +end; + +procedure TRxCustomDBLookupEdit.KeyDown(var Key: Word; Shift: TShiftState); +begin + if (Key in [VK_PRIOR, VK_NEXT, VK_UP, VK_DOWN, VK_RETURN]) and PopupVisible then + begin +{ if Key=VK_RETURN then HideList + else + TDbGridAccess(Flist).KeyDown(Key, Shift); + Key := 0;} + end + else + if (Key = VK_DOWN) and ((ssAlt in Shift) or (ssCtrl in Shift)) then + begin + ShowList; + Key := 0; + end; + inherited KeyDown(Key, Shift); +{ FIgnoreChange := (SelLength > 0) or (Key = VK_BACK);} + if not (PopupVisible or ReadOnly) and (Key in [VK_UP, VK_DOWN]) and (Shift = []) then + begin + case Key of + VK_UP: if not FLookupDataLink.DataSet.BOF then FLookupDataLink.DataSet.Prior; + VK_DOWN: if not FLookupDataLink.DataSet.EOF then FLookupDataLink.DataSet.Next; + end; + Text:=FLookupDataLink.DataSet.FieldByName(FFieldList[FLookupDisplayIndex]).AsString; + Key:=0; + end; +end; + +procedure TRxCustomDBLookupEdit.InternalClosePopup(AResult: boolean); +begin + if Assigned(FOnClosePopup) then + FOnClosePopup(Self, AResult); + +{$IFDEF WINDOWS} + FRxPopUpForm:=nil; +{$ENDIF} +end; + +procedure TRxCustomDBLookupEdit.LookupDataSetChanged(Sender: TObject); +begin + UpdateKeyValue; + Invalidate; +end; + +procedure TRxCustomDBLookupEdit.ListLinkActiveChanged(Sender: TObject); +var + DataSet: TDataSet; +begin + FKeyField := nil; + DataSet:=nil; + if FLookupDataLink.Active and (FLookupField <> '') then + begin + DataSet := FLookupDataLink.DataSet; + FKeyField := DataSet.FieldByName(FLookupField); + end; + FLocateObject.DataSet := DataSet; + + UpdateKeyValue +end; + +constructor TRxCustomDBLookupEdit.Create(AOwner: TComponent); +var + P:TBitmap; +begin + inherited Create(AOwner); + FLocateObject:=CreateLocate(nil); + + //Lookup + FLookupDataLink:=TLookupSourceLink.Create; + FLookupDataLink.FOnActiveChanged:=@ListLinkActiveChanged; + FLookupDataLink.FOnLayoutChanged:=@ListLinkActiveChanged; + FLookupDataLink.FOnDataSetChanged:=@LookupDataSetChanged; + + +// FDropDownCount:=8; + FFieldList:=TStringList.Create; + P:=CreateArrowBitmap; + Glyph.Assign(P); + P.Free; + ButtonWidth:=15; + FPopUpFormOptions:=TPopUpFormOptions.Create(Self); +end; + +destructor TRxCustomDBLookupEdit.Destroy; +begin + FreeAndNil(FLocateObject); + FreeAndNil(FPopUpFormOptions); + FFieldList.Clear; + FreeAndNil(FFieldList); + FreeAndNil(FLookupDataLink); + inherited Destroy; +end; + + +{ TRxCustomDBLookupCombo } + +function TRxCustomDBLookupCombo.GetMinHeight: Integer; +begin + Result := 15{DefaultTextHeight} + GetBorderSize + 3; +end; + +function TRxCustomDBLookupCombo.GetDisplayAll: Boolean; +begin + Result := FDisplayAll; +end; + +function TRxCustomDBLookupCombo.GetDropDownCount: Integer; +begin + Result:=FPopUpFormOptions.DropDownCount +end; + +function TRxCustomDBLookupCombo.GetDropDownWidth: Integer; +begin + Result:=FPopUpFormOptions.DropDownWidth; +end; + +function TRxCustomDBLookupCombo.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +function TRxCustomDBLookupCombo.GetLookupSource: TDataSource; +begin + Result:=FLookupDataLink.DataSource; +end; + +function TRxCustomDBLookupCombo.GetBorderSize: Integer; +{var + Params: TCreateParams; + R: TRect;} +begin +{ CreateParams(Params); + SetRect(R, 0, 0, 0, 0); + AdjustWindowRectEx(R, Params.Style, False, Params.ExStyle); + Result := R.Bottom - R.Top;} + Result := 3; +end; + +procedure TRxCustomDBLookupCombo.CheckButtonVisible; +begin + if Assigned(FButton) then + FButton.Visible:=(csdesigning in ComponentState) or + (Visible and (Focused or not FButtonNeedsFocus)); +end; + +function TRxCustomDBLookupCombo.GetButtonWidth: Integer; +begin + if Assigned(FButton) then Result:=FButton.Width + else Result:=0; +end; + +function TRxCustomDBLookupCombo.GetFlat: Boolean; +begin + if Assigned(FButton) then Result:=FButton.Flat + else Result:=false; +end; + +function TRxCustomDBLookupCombo.GetGlyph: TBitmap; +begin + if Assigned(FButton) then Result:=FButton.Glyph + else Result:=nil; +end; + +function TRxCustomDBLookupCombo.GetNumGlyphs: Integer; +begin + if Assigned(FButton) then Result:=FButton.NumGlyphs + else Result:=0; +end; + +function TRxCustomDBLookupCombo.GetOnGetGridCellProps: TGetCellPropsEvent; +begin + Result:=FPopUpFormOptions.OnGetCellProps; +end; + +function TRxCustomDBLookupCombo.GetPopupVisible: boolean; +begin + Result:=Assigned(FRxPopUpForm); +end; + +procedure TRxCustomDBLookupCombo.SetButtonNeedsFocus(const AValue: Boolean); +begin + if FButtonNeedsFocus<>AValue then + begin + FButtonNeedsFocus:=AValue; + CheckButtonVisible; + end; +end; + +procedure TRxCustomDBLookupCombo.SetButtonWidth(const AValue: Integer); +begin + if Assigned(FButton) then + FButton.Width:=AValue; +end; + +procedure TRxCustomDBLookupCombo.SetDataFieldName(const AValue: string); +begin + if FDataFieldName <> AValue then + begin + FDataFieldName := AValue; + DataLinkActiveChanged; + end; +end; + +procedure TRxCustomDBLookupCombo.SetDataSource(const AValue: TDataSource); +begin + FDataLink.DataSource := AValue; + if AValue <> nil then AValue.FreeNotification(Self); +end; + +procedure TRxCustomDBLookupCombo.SetDisplayAll(const AValue: Boolean); +begin + if FDisplayAll <> AValue then + begin + FDisplayAll := AValue; + Invalidate; + end; +end; + +procedure TRxCustomDBLookupCombo.SetDropDownCount(const AValue: Integer); +begin + FPopUpFormOptions.DropDownCount:=AValue; +end; + +procedure TRxCustomDBLookupCombo.SetDropDownWidth(const AValue: Integer); +begin + FPopUpFormOptions.DropDownWidth:=AValue; +end; + +procedure TRxCustomDBLookupCombo.SetEmptyItemColor(const AValue: TColor); +begin + if FEmptyItemColor=AValue then exit; + FEmptyItemColor:=AValue; + if not (csReading in ComponentState) then + Invalidate; +end; + +procedure TRxCustomDBLookupCombo.SetEmptyValue(const AValue: string); +begin + if FEmptyValue=AValue then exit; + FEmptyValue:=AValue; +end; + +procedure TRxCustomDBLookupCombo.SetFlat(const AValue: Boolean); +begin + if Assigned(FButton) then + FButton.Flat:=AValue; + Invalidate; +end; + +procedure TRxCustomDBLookupCombo.SetGlyph(const AValue: TBitmap); +begin + if Assigned(FButton) then + FButton.Glyph:=AValue; +end; + +procedure TRxCustomDBLookupCombo.SetLookupDisplay(const AValue: string); +var + S1, S2:string; + K:integer; +begin + if FLookupDisplay=AValue then exit; + FLookupDisplay:=AValue; + FFieldList.Clear; + S2:=AValue; + while S2<>'' do + begin + K:=Pos(';', S2); + if K>0 then + begin + S1:=Copy(S2, 1, K-1); + Delete(S2, 1, K); + end + else + begin + S1:=S2; + S2:=''; + end; + FFieldList.Add(S1); + end; + DisplayValueChanged; +end; + +procedure TRxCustomDBLookupCombo.SetLookupDisplayIndex(const AValue: Integer); +begin + if FLookupDisplayIndex=AValue then exit; + FLookupDisplayIndex:=AValue; +end; + +procedure TRxCustomDBLookupCombo.SetLookupField(const AValue: string); +begin + FLookupField:=AValue; +end; + +procedure TRxCustomDBLookupCombo.SetLookupSource(const AValue: TDataSource); +begin + FLookupDataLink.DataSource:=AValue; + FLocateObject.DataSet:=FLookupDataLink.DataSet; + FPopUpFormOptions.DataSource:=AValue; +end; + +procedure TRxCustomDBLookupCombo.SetNumGlyphs(const AValue: Integer); +begin + if Assigned(FButton) then + FButton.NumGlyphs:=AValue; +end; + +procedure TRxCustomDBLookupCombo.SetOnGetGridCellProps( + const AValue: TGetCellPropsEvent); +begin + FPopUpFormOptions.OnGetCellProps:=AValue; +end; + +procedure TRxCustomDBLookupCombo.SetPopUpFormOptions( + const AValue: TPopUpFormOptions); +begin + FPopUpFormOptions.Assign(AValue); +end; + +procedure TRxCustomDBLookupCombo.SetReadOnly(const AValue: boolean); +begin + if FReadOnly=AValue then exit; + FReadOnly:=AValue; +end; + +function TRxCustomDBLookupCombo.StoreEmpty: boolean; +begin + Result:=true; +end; + +procedure TRxCustomDBLookupCombo.WMSetFocus(var Message: TLMSetFocus); +begin + FButton.Visible:=True; + inherited WMSetFocus(Message); + Invalidate; +end; + +procedure TRxCustomDBLookupCombo.WMKillFocus(var Message: TLMKillFocus); +begin + if FButtonNeedsFocus then + FButton.Visible:=false; + inherited WMKillFocus(Message); + Invalidate; +end; + +procedure TRxCustomDBLookupCombo.CMExit(var Message: TLMessage); +begin + inherited; +end; + +procedure TRxCustomDBLookupCombo.PaintDisplayValues(ACanvas: TCanvas; R: TRect; + ALeft: Integer); +var + I, LastIndex, TxtWidth: Integer; + X, W, ATop, ARight: Integer; + S: string; + F:TField; +begin + if (FValuesList.Count=0) or (not LookupSource.DataSet.Active) then exit; + if ColorToRGB(Self.Color) <> ColorToRGB(clBtnFace) then + ACanvas.Pen.Color := clBtnFace + else + ACanvas.Pen.Color := clBtnShadow; + LastIndex := FValuesList.Count-1; + TxtWidth := ACanvas.TextWidth('W'); + ATop := Max(0, (HeightOf(R) - ACanvas.TextHeight('Xy')) div 2); + ARight := R.Right; + Inc(R.Left, ALeft); + for I := 0 to LastIndex do + begin + F:=LookupSource.DataSet.FieldByName(FFieldList[i]); + S := FValuesList[i]; + + if (FPopUpFormOptions.Columns.Count>i) and (I<LastIndex) then + W := FPopUpFormOptions.Columns[i].Width + else + begin + W := F.DisplayWidth; + if I < LastIndex then + W := W * TxtWidth + 4 + else + W := ARight - R.Left; + end; + + X := 2; + R.Right := R.Left + W; + case F.AlignMent of + taRightJustify: X := W - ACanvas.TextWidth(S) - 3; + taCenter: X := (W - ACanvas.TextWidth(S)) div 2; + end; + ACanvas.TextRect(R, R.Left + Max(0, X), ATop, S); + Inc(R.Left, W); + if I < LastIndex then + begin + ACanvas.MoveTo(R.Right, R.Top); + ACanvas.LineTo(R.Right, R.Bottom); + Inc(R.Left); + end; + if R.Left >= ARight then + Break; + end; +end; + +procedure TRxCustomDBLookupCombo.CheckNotCircular; +begin + if FDataLink.Active and ((DataSource = LookupSource) or + (FDataLink.DataSet = FLookupDataLink.DataSet)) then + _DBError(SCircularDataLink); +end; + +procedure TRxCustomDBLookupCombo.DisplayValueChanged; +begin + FDisplayField:=nil; + if FLookupDataLink.Active and (FLookupDisplay <> '') then + begin + FDisplayField := FLookupDataLink.DataSet.FieldByName(FFieldList[FLookupDisplayIndex]); + if PopupVisible then + begin +// UpdateData; + UpdateFieldValues; + end; + end; +end; + + +procedure TRxCustomDBLookupCombo.DataLinkActiveChanged; +begin + if FDataLink.Active and (FDataFieldName <> '') then + begin + CheckNotCircular; + FDataField := FDataLink.DataSet.FieldByName(FDataFieldName); + end + else + begin + FDataField := nil; + end; + DataLinkRecordChanged(nil); +end; + +procedure TRxCustomDBLookupCombo.DataLinkRecordChanged(Field: TField); +begin + if (Field = nil) or (Field = FDataField) then + begin + if FDataField <> nil then + begin + SetValueKey(FDataField.AsString); + end + else + SetValueKey(FEmptyValue); + end +end; + +procedure TRxCustomDBLookupCombo.UpdateFieldValues; +var + i, k:integer; + F:TField; +begin + FValuesList.Clear; + if not Assigned(FDataField) then + begin + if FLookupDataLink.Active then + if (Self.FSuccesfullyFind) or (Self.UnfindedValue = rxufLastSuccessful) then + begin + for i:=0 to FFieldList.Count-1 do + begin + F:=FLookupDataLink.DataSet.FieldByName(FFieldList[i]); + k:=FValuesList.Add(F.DisplayText); + FValuesList.Objects[k]:=TObject(PtrInt(F.DisplayWidth)); + end; + end + else + case Self.UnfindedValue of + rxufNone : {Do nothing}; + rxufOriginal : FValuesList.Add(FValue);//Show original field value... + end; + end + else + if Assigned(FDataField) then + begin + if FDataField.IsNull then + FValuesList.Add(FEmptyValue) + else + if FLookupDataLink.Active then + if (Self.FSuccesfullyFind) or (Self.UnfindedValue = rxufLastSuccessful) then + begin + for i:=0 to FFieldList.Count-1 do + begin + F:=FLookupDataLink.DataSet.FieldByName(FFieldList[i]); + k:=FValuesList.Add(F.DisplayText); + FValuesList.Objects[k]:=TObject(PtrInt(F.DisplayWidth)); + end; + end + else + case Self.UnfindedValue of + rxufNone : {Do nothing}; + rxufOriginal : FValuesList.Add(FValue);//Show original field value... + end; + end; +end; + +procedure TRxCustomDBLookupCombo.ShowList; +{$IFDEF LINUX} +var + TempF:TPopUpForm; +{$ENDIF} +begin + if Assigned(FLookupDataLink.DataSet) and (FLookupDataLink.DataSet.Active) then + if not PopupVisible then + begin + if FDataField<>nil then + if FDataField <> nil then + FValue := FDataField.AsString + else + FValue := FEmptyValue; + + if not Assigned(FDataField) then + begin + if not FLocateObject.Locate(FLookupField, FValue, true, false) then + FLookupDataLink.DataSet.First; + end + else + if Assigned(FDataField) and not FDataField.IsNull then + begin + if not FLocateObject.Locate(FLookupField, FValue, true, false) then + FLookupDataLink.DataSet.First;//In case we cannot find curvalue... + end + else + if FLookupDataLink.Active then + FLookupDataLink.DataSet.First; + + FRxPopUpForm:=ShowRxDBPopUpForm(Self, FLookupDataLink.DataSet, @OnInternalClosePopup, + FPopUpFormOptions, FLookupDisplay, LookupDisplayIndex, 0 {ButtonWidth}, Font); +{$IFDEF LINUX} + TempF:=FRxPopUpForm; + if FRxPopUpForm.ShowModal = mrOk then + {OnInternalClosePopup(true)}; + TempF.Free; + FRxPopUpForm:=nil +{$ENDIF} + end +end; + + +procedure TRxCustomDBLookupCombo.SetValueKey(const Value: string); +begin + if FValue <> Value then + begin + FValue := Value; + if Assigned(FLookupDataLink.DataSet) and (FLookupDataLink.DataSet.Active) then + begin + FSuccesfullyFind := FLocateObject.Locate(FLookupField, FValue, true, false); + KeyValueChanged; + end; + end; +end; + +procedure TRxCustomDBLookupCombo.UpdateKeyValue; +begin + if Assigned(FDataField) then + if FDataField <> nil then + FValue := FDataField.AsString + else + FValue := FEmptyValue; + + if not Assigned(FDataField) then + begin + if FValue=FEmptyValue then + FSuccesfullyFind := false + else + FSuccesfullyFind := FLocateObject.Locate(FLookupField, FValue, true, false); + end + else + if FDataField.IsNull then + FSuccesfullyFind := false + else + if not FDataField.IsNull then + FSuccesfullyFind := FLocateObject.Locate(FLookupField, FValue, true, false); + KeyValueChanged; +end; + +procedure TRxCustomDBLookupCombo.KeyValueChanged; +begin + UpdateFieldValues; + Invalidate; + DoChange; +end; + +procedure TRxCustomDBLookupCombo.UpdateData; +begin + //We have nothing to do here... +end; + +procedure TRxCustomDBLookupCombo.NeedUpdateData; +begin + if FLookupDataLink.Active and Assigned(FDataField) then + begin ; + if FKeyField.IsNull then FDataField.Clear + else FDataField.AsString:=FKeyField.AsString + end; +end; + +procedure TRxCustomDBLookupCombo.CalculatePreferredSize(var PreferredWidth, + PreferredHeight: integer; WithThemeSpace: Boolean); +var + tmpCanvas: TCanvas; +begin + inherited CalculatePreferredSize(PreferredWidth, PreferredHeight, + WithThemeSpace); + // ignore width + PreferredWidth:=0; + tmpCanvas := GetWorkingCanvas(Canvas); + try + PreferredHeight:=Canvas.TextHeight('Wg')+12; + //PreferredWidth:=Canvas.TextWidth('W')*12; + finally + if TmpCanvas<>Canvas then + FreeWorkingCanvas(tmpCanvas); + end; +end; + +{procedure TRxCustomDBLookupCombo.GetPreferredSize(var PreferredWidth, + PreferredHeight: integer; Raw: boolean; WithThemeSpace: boolean); +begin + inherited GetPreferredSize(PreferredWidth, PreferredHeight, Raw, + WithThemeSpace); +end; + + +class function TRxCustomDBLookupCombo.GetControlClassDefaultSize: TSize; +begin + Result.CX := 170; + Result.CY := 50; +end; +} +procedure TRxCustomDBLookupCombo.OnInternalClosePopup(AResult: boolean); +begin + if Assigned(FRxPopUpForm) and AResult and (pfgColumnResize in FPopUpFormOptions.Options) then + FillPopupWidth(FPopUpFormOptions, FRxPopUpForm); + + if Assigned(FOnClosePopup) then + FOnClosePopup(Self, AResult); + + if FRxPopUpForm=nil then + begin + SetFocus; + Exit; + end; + + FRxPopUpForm:=nil; + if not AResult then + UpdateKeyValue + else + if AResult and not Assigned(FDataLink.DataSource) and (FLookupDataLink.Active) then + begin + if FKeyField.IsNull then + SetValueKey(FEmptyValue) + else + SetValueKey(FKeyField.AsString); + end + else + + if AResult and Assigned(FDataLink.DataSource) then + begin + FDataLink.Edit; + Visible:=true; + NeedUpdateData;//We need to update DataField; + end; + + if (AResult) and (Assigned(FOnSelect)) then + FOnSelect(Self); +end; + +procedure TRxCustomDBLookupCombo.SetEnabled(Value: Boolean); +begin + inherited SetEnabled(Value); + Invalidate; +end; + +procedure TRxCustomDBLookupCombo.KeyDown(var Key: Word; Shift: TShiftState); +begin + if (Key in [VK_PRIOR, VK_NEXT, VK_UP, VK_DOWN, VK_RETURN, VK_HOME, VK_END]) and PopupVisible then + begin + TPopUpFormAccess(FRxPopUpForm).KeyDown(Key, Shift); + end + else + if not PopupVisible then + begin + if (Key = VK_DOWN) and ((ssAlt in Shift) or (ssCtrl in Shift)) then + begin + ShowList; + Key := 0; + end + else + if (Key = VK_ESCAPE) and not (Assigned(FDataField)) then + begin + SetValueKey(FEmptyValue); + if Assigned(FOnSelect) then + FOnSelect(Self); + Key:=0; + end + else + if (Key = VK_ESCAPE) and (not FDataField.IsNull) and (FDataLink.Edit) then + begin + FDataField.Clear; + UpdateKeyValue; + if Assigned(FOnSelect) then + FOnSelect(Self); + Key:=0; + end; + end; + inherited KeyDown(Key, Shift); + if FLookupDataLink.Active and FDataLink.Active and not (PopupVisible or ReadOnly) then + begin + if (Key in [VK_UP, VK_DOWN]) and (Shift = []) then + begin + FDataLink.Edit; + if not FDataField.IsNull then + begin + //FLocateObject.Locate(FLookupField, FDataField.AsString, true, false); + If not FLocateObject.Locate(FLookupField, FDataField.AsString, true, false) then FLookupDataLink.DataSet.First; + case Key of + VK_UP: if not FLookupDataLink.DataSet.BOF then + FLookupDataLink.DataSet.Prior; + VK_DOWN: if not FLookupDataLink.DataSet.EOF then + FLookupDataLink.DataSet.Next; + end; + end; + //FDataLink.UpdateRecord; -- no need more... + Self.NeedUpdateData; + if Assigned(FOnSelect) then + FOnSelect(Self); + KeyValueChanged; + Key:=0; + end + end + else + if FLookupDataLink.Active and not (PopupVisible or ReadOnly) then + begin + if (Key in [VK_UP, VK_DOWN]) and (Shift = []) then + begin + case Key of + VK_UP: if not FLookupDataLink.DataSet.BOF then + FLookupDataLink.DataSet.Prior; + VK_DOWN: if not FLookupDataLink.DataSet.EOF then + FLookupDataLink.DataSet.Next; + end; + SetValueKey(FKeyField.AsString); + if Assigned(FOnSelect) then + FOnSelect(Self); + Key:=0; + end + end; + +end; + +procedure TRxCustomDBLookupCombo.UTF8KeyPress(var UTF8Key: TUTF8Char); +begin + if not (PopupVisible) and ((UTF8Key >= #32) or (UTF8Key = #8)) then + ShowList; + inherited UTF8KeyPress(UTF8Key); + if PopupVisible then + FRxPopUpForm.UTF8KeyPress(UTF8Key); +end; + +procedure TRxCustomDBLookupCombo.SetParent(AParent: TWinControl); +begin + inherited SetParent(AParent); + if FButton <> nil then + begin +// FButton.Parent := Parent; + CheckButtonVisible; + end; +end; + +procedure TRxCustomDBLookupCombo.DoSetBounds(ALeft, ATop, AWidth, + AHeight: Integer); +begin + if not (csReading in ComponentState) and (Height < GetMinHeight) then + AHeight := GetMinHeight + else + begin + if (csDesigning in ComponentState) then + if (Height < GetMinHeight) then + AHeight := GetMinHeight; + end; + + inherited DoSetBounds(ALeft, ATop, AWidth, AHeight); +// DoPositionButton; +end; + +procedure TRxCustomDBLookupCombo.DoPositionButton; +begin + if FButton <> nil then + FButton.SetBounds(Left+Width, Top, FButton.Width, Height); +end; + +procedure TRxCustomDBLookupCombo.DoChange; +begin + if Assigned(FOnChange) then + FOnChange(Self); +end; + +procedure TRxCustomDBLookupCombo.DoButtonClick(Sender: TObject); +begin + if not FReadOnly then//We can do something if and only if that's not ReadOnly field... + Begin + if Assigned(FOnButtonClick) then + FOnButtonClick(Self); +{ if PopupVisible then + HideList + else} + ShowList; + End; +end; + +procedure TRxCustomDBLookupCombo.Loaded; +begin + inherited Loaded; + CheckButtonVisible; +end; + +procedure TRxCustomDBLookupCombo.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (AComponent = FButton) and (Operation = opRemove) then + FButton := nil; +end; + +procedure TRxCustomDBLookupCombo.CMVisibleChanged(var Msg: TLMessage); +begin + inherited CMVisibleChanged(Msg); + CheckButtonVisible; +end; + +procedure TRxCustomDBLookupCombo.CMEnabledChanged(var Msg: TLMessage); +begin + inherited CMEnabledChanged(Msg); + if FButton<>nil then + FButton.Enabled:=Enabled; +end; + +procedure TRxCustomDBLookupCombo.MouseDown(Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + inherited MouseDown(Button,Shift, X, Y); +{ If not Self.PopupVisible then + DoButtonClick(Self);} +end; + +procedure TRxCustomDBLookupCombo.Click; +begin + inherited Click; + If not Self.PopupVisible then + DoButtonClick(Self); +end; + +function TRxCustomDBLookupCombo.RealGetText: TCaption; +begin + if PopupVisible then + Result:=inherited RealGetText + else + if (FLookupDisplayIndex>=0) and (FLookupDisplayIndex < FValuesList.Count) then + Result:=FValuesList[FLookupDisplayIndex] + else + Result:=''; +end; + +procedure TRxCustomDBLookupCombo.RealSetText(const Value: TCaption); +var + LookFieldName:string; +begin + inherited RealSetText(Value); + if not PopupVisible then + begin + if Assigned(FLookupDataLink.DataSet) and (FLookupDataLink.DataSet.Active) then + begin + if (FLookupDisplayIndex>=0) and (FLookupDisplayIndex<FFieldList.Count) then + begin + LookFieldName:=FFieldList[FLookupDisplayIndex]; + FSuccesfullyFind := FLocateObject.Locate(LookFieldName, Value, true, false); + if FSuccesfullyFind and Assigned(FKeyField) then + SetValue(FKeyField.AsString); + KeyValueChanged; + end; + end; + end; +end; + +procedure TRxCustomDBLookupCombo.Paint; +var + Selected:boolean; + R, R1: TRect; + AText: string; +begin + Canvas.Font := Font; + Canvas.Brush.Color := Color; + Selected := Focused and (not (csPaintCopy in ControlState)) and (not PopupVisible); + if Selected then + begin + Canvas.Font.Color := clHighlightText; + Canvas.Brush.Color := clHighlight; + end + else + if not Enabled {and NewStyleControls }then + begin + Canvas.Font.Color := clInactiveCaption; + end; + + SetRect(R, 0, 0, ClientWidth, ClientHeight); + if Flat then + begin + Canvas.Frame3d(R, 3, bvLowered); + end + else + begin + RxFrame3D(Canvas, R, clWindowFrame, clBtnHighlight, 1); + RxFrame3D(Canvas, R, clBtnShadow, clBtnFace, 1); + end; + + if ClientWidth > 6 then + begin + SetRect(R1, 3, 3, ClientWidth - 3, ClientHeight - 3); + Canvas.FillRect(R1); + R.Right:=R.Right - GetButtonWidth; + if PopupVisible and (Caption<>'') then + begin + AText:=Caption; + Canvas.TextRect(R, TextMargin, Max(0, (HeightOf(R) - Canvas.TextHeight('Wg')) div 2), AText); + end + else + if FDisplayAll then + PaintDisplayValues(Canvas, R, TextMargin) + else + begin + if Assigned(FDataField) and FDataField.IsNull then + begin + SetRect(R1, 6, 6, ClientWidth - 6 - GetButtonWidth, ClientHeight - 6); + Canvas.Brush.Color:=FEmptyItemColor; + Canvas.FillRect(R1); + AText:=FEmptyValue + end + else + if FValuesList.Count>0 then + AText:=FValuesList[FLookupDisplayIndex] + else + AText:=''; + Canvas.TextRect(R, TextMargin, Max(0, (HeightOf(R) - Canvas.TextHeight('Wg')) div 2), AText); + end + end; +end; + +procedure TRxCustomDBLookupCombo.LookupDataSetChanged(Sender: TObject); +begin + if PopupVisible then + begin + FSuccesfullyFind := true; + UpdateFieldValues; + Invalidate; + end; +end; + +procedure TRxCustomDBLookupCombo.ListLinkActiveChanged(Sender: TObject); +var + DataSet: TDataSet; +begin + FListActive := False; + FKeyField := nil; + FDisplayField := nil; + DataSet:=nil; + if FLookupDataLink.Active and (FLookupField <> '') and (FFieldList.Count>FLookupDisplayIndex) and (FLookupDisplayIndex>=0) then + begin + CheckNotCircular; + DataSet := FLookupDataLink.DataSet; + FKeyField := DataSet.FieldByName(FLookupField); + FListActive := True; + FDisplayField := FLookupDataLink.DataSet.FieldByName(FFieldList[FLookupDisplayIndex]); + end; + FLocateObject.DataSet := DataSet; + + if not (csDestroying in ComponentState) then + begin + if FListActive and Assigned(FDataField) then UpdateKeyValue +// else KeyValueChanged; + end; +end; + +procedure TRxCustomDBLookupCombo.SetValue(const Value: string); +begin + if (Value <> FValue) then + begin + if FListActive and not ReadOnly and (FDataLink.DataSource <> nil) and FDataLink.Edit then + FDataField.AsString := Value + else + SetValueKey(Value); + if Assigned(FOnSelect) then + FOnSelect(Self); + end; +end; + +function TRxCustomDBLookupCombo.GetKeyValue: Variant; +begin + if Value = FEmptyValue then + Result := null + else + Result := Value; +end; + +procedure TRxCustomDBLookupCombo.SetKeyValue(const Value: Variant); +begin + Self.Value := Value; +end; + +constructor TRxCustomDBLookupCombo.Create(AOwner: TComponent); +var + ArrowBmp:TBitmap; +begin + inherited Create(AOwner); + Width := 100; + AutoSize:=true; + FUnfindedValue:=rxufNone; + FFieldList := TStringList.Create; + FValuesList:= TStringList.Create; + FLocateObject:=CreateLocate(nil); + FPopUpFormOptions:=TPopUpFormOptions.Create(Self); + //Lookup + FLookupDataLink:=TLookupSourceLink.Create; +// FLookupDataLink.FDataControl:=Self; + FLookupDataLink.FOnActiveChanged:=@ListLinkActiveChanged; + FLookupDataLink.FOnLayoutChanged:=@ListLinkActiveChanged; + FLookupDataLink.FOnDataSetChanged:=@LookupDataSetChanged; + + //Data + FDataLink:=TDataSourceLink.Create; + FDataLink.FDataControl:=Self; + + + FButton := TSpeedButton.Create(Self); + FButton.Width := Self.Height; + FButton.Height := Self.Height; + FButton.FreeNotification(Self); + FButton.Parent:=Self; + CheckButtonVisible; + FButton.OnClick := @DoButtonClick; + FButton.Cursor := crArrow; + FButton.ControlStyle := FButton.ControlStyle + [csNoDesignSelectable]; + FButton.Align:=alRight; + FButton.BorderSpacing.Around:=2; + //FButton.TabStop:=true; + + ControlStyle := ControlStyle - [csSetCaption]; + FDirectInput := True; + ParentColor:=false; + // + Color:=clWindow; + FEmptyItemColor:=clWindow; +// Glyph:=CreateArrowBitmap; + ArrowBmp:=CreateArrowBitmap; + Glyph:=ArrowBmp; + FreeAndNil(ArrowBmp); //free bitmap as TSpeedButton setter takes a copy of bitmap + + ButtonWidth:=15; + TabStop:=true; +end; + +destructor TRxCustomDBLookupCombo.Destroy; +begin + FreeAndNil(FLocateObject); + FreeAndNil(FDataLink); + FreeAndNil(FLookupDataLink); + FreeAndNil(FButton); + FFieldList.Clear; + FreeAndNil(FFieldList); + FreeAndNil(FValuesList); + FreeAndNil(FPopUpFormOptions); + inherited Destroy; +end; + + +{ TDataSourceLink } + +procedure TDataSourceLink.ActiveChanged; +begin + if FDataControl <> nil then + FDataControl.DataLinkActiveChanged; +end; + +procedure TDataSourceLink.LayoutChanged; +begin + inherited LayoutChanged; +end; + +procedure TDataSourceLink.FocusControl(Field: TFieldRef); +begin + if Assigned(Field) and (FDataControl.FDataField = Field^) then + if FDataControl.CanFocus then + begin + Field^ := nil; + FDataControl.SetFocus; + end; +end; + +procedure TDataSourceLink.RecordChanged(Field: TField); +begin + if FDataControl <> nil then + FDataControl.DataLinkRecordChanged(Field); +end; + +procedure TDataSourceLink.UpdateData; +begin + if FDataControl <> nil then + FDataControl.UpdateData; +end; + +{ TLookupSourceLink } + +procedure TLookupSourceLink.ActiveChanged; +begin +{ if FDataControl <> nil then + FDataControl.ListLinkActiveChanged;} + if Assigned(FOnActiveChanged) then + FOnActiveChanged(DataSet); +end; + +procedure TLookupSourceLink.LayoutChanged; +begin +{ if FDataControl <> nil then + FDataControl.ListLinkActiveChanged;} + if Assigned(FOnLayoutChanged) then + FOnLayoutChanged(DataSet); +end; + +procedure TLookupSourceLink.DataSetChanged; +begin +{ if FDataControl <> nil then + FDataControl.LookupDataSetChanged;} + if Assigned(FOnDataSetChanged) then + FOnDataSetChanged(DataSet); +end; + +{ TRxDBLookupCombo } + +procedure TRxDBLookupCombo.OnInternalClosePopup(AResult: boolean); +begin + inherited OnInternalClosePopup(AResult); +// SetFocus; +{ if (Owner is TWinControl) then + TWinControl(Owner).Repaint + else + Parent.Repaint;} +end; + +end. + diff --git a/components/rx/version/2.1/rxmdi.pas b/components/rx/version/2.1/rxmdi.pas new file mode 100644 index 000000000..f55966240 --- /dev/null +++ b/components/rx/version/2.1/rxmdi.pas @@ -0,0 +1,773 @@ +{ Free DB Manager + + Copyright (C) 2005-2012 Lagunov Aleksey alexs75 at hotbox.ru + + This source is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This code is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + details. + + A copy of the GNU General Public License is available on the World Wide Web + at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing + to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. +} +unit RxMDI; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, Forms, Buttons, Menus, ExtCtrls, Graphics, Controls; + +type + TRxMDIPanel = class; + TRxMDITasks = class; + + { TRxMDIButton } + + TRxMDIButton = class(TSpeedButton) + private + FNavForm: TForm; + FActiveControl:TWinControl; + FNavPanel:TRxMDITasks; + FSaveClose:TCloseEvent; + procedure SetRxMDIForm(AValue: TForm); + procedure DoCreateMenuItems; + + procedure DoCloseMenu(Sender: TObject); + procedure DoCloseAllMenu(Sender: TObject); + procedure DoCloseAllExcepThisMenu(Sender: TObject); + procedure DoActivateMenu(Sender: TObject); + procedure DoCreateButtonImage; + private + FMenu:TPopupMenu; + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); + public + constructor CreateButton(AOwner:TRxMDITasks; AForm:TForm); + procedure Click; override; // make Click public + procedure UpdateCaption; + property NavForm:TForm read FNavForm write SeTRxMDIForm; + end; + + { TRxMDITasks } + + TRxMDITasks = class(TCustomPanel) + private + FBtnScrollLeft:TSpeedButton; + FBtnScrollRigth:TSpeedButton; + FMainPanel: TRxMDIPanel; + procedure UpdateScrollBtnStatus; + procedure ScrollLeftExecute(Sender: TObject); + procedure ScrollRigthExecute(Sender: TObject); + procedure ShowHiddenBtnOnResize; + procedure ChildWindowsShowLast; + procedure DoCloseAll(AIgnoreBtn:TRxMDIButton); + protected + procedure Paint; override; + procedure Resize; override; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + public + constructor Create(TheOwner: TComponent); override; + destructor Destroy; override; + procedure AddButton(Btn:TRxMDIButton); + procedure ShowWindow(F:TForm); + property MainPanel:TRxMDIPanel read FMainPanel write FMainPanel; + published + property Align; + end; + + { TRxMDICloseButton } + + TRxMDICloseButton = class(TCustomSpeedButton) + private + FInfoLabel:TBoundLabel; + FLabelSpacing:integer; + FMDIPanel:TRxMDIPanel; + protected + procedure SetParent(AParent: TWinControl); override; + procedure Loaded; override; + procedure DoPositionLabel; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure CreateInternalLabel; + public + constructor Create(AOwner: TComponent); override; + published + property Align; + property Anchors; + property Glyph; + property Flat; + end; + + { TRxMDIPanel } + + TRxMDIPanel = class(TCustomPanel) + private + FCurrentChildWindow: TForm; + FCloseButton: TRxMDICloseButton; + FTaskPanel: TRxMDITasks; + procedure SetCurrentChildWindow(AValue: TForm); + procedure navCloseButtonClick(Sender: TObject); + procedure SetRxMDICloseButton(AValue: TRxMDICloseButton); + procedure SetTaskPanel(AValue: TRxMDITasks); + function MDIButtonByForm(AForm:TForm):TRxMDIButton; + procedure HideCurrentWindow; + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure Loaded; override; + public + constructor Create(TheOwner: TComponent); override; + destructor Destroy; override; + procedure ShowWindow(F:TForm); + + procedure ChildWindowsAdd(F:TForm); + procedure ChildWindowsCreate(var AForm; FC:TFormClass); + procedure ChildWindowsUpdateCaption(F:TForm); + procedure CloseAll; + + property CurrentChildWindow:TForm read FCurrentChildWindow write SetCurrentChildWindow; + published + property CloseButton:TRxMDICloseButton read FCloseButton write SetRxMDICloseButton; + property TaskPanel:TRxMDITasks read FTaskPanel write SetTaskPanel; + + property Align; + property BevelInner; + property BevelOuter; + end; + +implementation +uses LResources, vclutils, rxconst; +// LCLProc; + + +{ TRxMDICloseButton } + +procedure TRxMDICloseButton.SetParent(AParent: TWinControl); +begin + inherited SetParent(AParent); + DoPositionLabel; +end; + +procedure TRxMDICloseButton.Loaded; +begin + inherited Loaded; + DoPositionLabel; +end; + +procedure TRxMDICloseButton.DoPositionLabel; +begin + if FInfoLabel = nil then exit; + if Parent<>nil then + Parent.DisableAlign; + //DebugLn(['TCustomLabeledEdit.DoPositionLabel ']); + FInfoLabel.Parent := Parent; + FInfoLabel.Visible := Visible; +{ case FLabelPosition of + lpAbove: + begin + FInfoLabel.AnchorParallel(akLeft,0,Self); + FInfoLabel.AnchorToCompanion(akBottom,FLabelSpacing,Self); + end; + lpBelow: + begin + FInfoLabel.AnchorParallel(akLeft,0,Self); + FInfoLabel.AnchorToCompanion(akTop,FLabelSpacing,Self); + end; + lpLeft : + begin} + FInfoLabel.AnchorToCompanion(akRight,FLabelSpacing,Self); + FInfoLabel.AnchorVerticalCenterTo(Self); +{ end; + lpRight: + begin + FInfoLabel.AnchorToCompanion(akLeft,FLabelSpacing,Self); + FInfoLabel.AnchorVerticalCenterTo(Self); + end; + end;} + if Parent<>nil then + Parent.EnableAlign; +end; + +procedure TRxMDICloseButton.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (AComponent = FInfoLabel) and (Operation = opRemove) then + FInfoLabel := nil + else + if (AComponent = FMDIPanel) and (Operation = opRemove) then + begin + FMDIPanel:=nil; + OnClick:=nil; + end; +end; + +procedure TRxMDICloseButton.CreateInternalLabel; +begin + if FInfoLabel<>nil then exit; + FInfoLabel := TBoundLabel.Create(Self); + FInfoLabel.ControlStyle := FInfoLabel.ControlStyle + [csNoDesignSelectable]; + //FInfoLabel.FocusControl := Self; +end; + +constructor TRxMDICloseButton.Create(AOwner: TComponent); +begin + inherited Create(AOwner); +// FLabelPosition := lpAbove; + FLabelSpacing := 3; + CreateInternalLabel; + Glyph:=LoadLazResBitmapImage('RxMDICloseIcon'); +end; + +{ TRxMDIPanel } + +procedure TRxMDIPanel.SetCurrentChildWindow(AValue: TForm); +begin + FCurrentChildWindow:=AValue; + if Assigned(FCloseButton) then + begin + FCloseButton.Enabled:=Assigned(FCurrentChildWindow); + if FCloseButton.Enabled then + FCloseButton.FInfoLabel.Caption:=FCurrentChildWindow.Caption + else + FCloseButton.FInfoLabel.Caption:=''; + end; + + if Assigned(TaskPanel) then + TaskPanel.Visible:=Assigned(FCurrentChildWindow); +end; + +procedure TRxMDIPanel.navCloseButtonClick(Sender: TObject); +begin + if Assigned(FCurrentChildWindow) then + FCurrentChildWindow.Close; +end; + +procedure TRxMDIPanel.SetRxMDICloseButton(AValue: TRxMDICloseButton); +begin + if FCloseButton=AValue then Exit; + if Assigned(FCloseButton) then + begin + FCloseButton.OnClick:=nil; + FCloseButton.FMDIPanel:=nil; + end; + + FCloseButton:=AValue; + + if Assigned(FCloseButton) then + begin + FCloseButton.OnClick:=@navCloseButtonClick; + FCloseButton.FMDIPanel:=Self; + end; +end; + +procedure TRxMDIPanel.SetTaskPanel(AValue: TRxMDITasks); +begin + if FTaskPanel=AValue then Exit; + FTaskPanel:=AValue; + if Assigned(FTaskPanel) then + FTaskPanel.FMainPanel:=Self; +end; + +function TRxMDIPanel.MDIButtonByForm(AForm: TForm): TRxMDIButton; +var + i:integer; +begin + Result:=nil; + if not Assigned(FTaskPanel) then + exit; + for i:=0 to FTaskPanel.ComponentCount -1 do + begin + if (FTaskPanel.Components[i] is TRxMDIButton) and (TRxMDIButton(FTaskPanel.Components[i]).NavForm = AForm) then + begin + Result:=TRxMDIButton(FTaskPanel.Components[i]); + exit; + end; + end; +end; + +procedure TRxMDIPanel.HideCurrentWindow; +var + MB:TRxMDIButton; +begin + if Assigned(FCurrentChildWindow) and (FCurrentChildWindow.Visible) then + begin + MB:=MDIButtonByForm(FCurrentChildWindow); + if Assigned(MB) then + MB.FActiveControl:=Application.MainForm.ActiveControl; + FCurrentChildWindow.Hide; + end; +end; + +procedure TRxMDIPanel.Notification(AComponent: TComponent; Operation: TOperation + ); +begin + inherited Notification(AComponent, Operation); + if (AComponent = FCloseButton) and (Operation = opRemove) then + FCloseButton := nil + else + if (AComponent = FTaskPanel) and (Operation = opRemove) then + FTaskPanel:=nil; +end; + +procedure TRxMDIPanel.Loaded; +begin + inherited Loaded; + CurrentChildWindow:=nil; +end; + +constructor TRxMDIPanel.Create(TheOwner: TComponent); +begin + inherited Create(TheOwner); + Caption:=''; + Align:=alClient; + BevelOuter:=bvLowered; +end; + +destructor TRxMDIPanel.Destroy; +begin + inherited Destroy; +end; + +procedure TRxMDIPanel.ShowWindow(F: TForm); +begin + TaskPanel.ShowWindow(F); +end; + +procedure TRxMDIPanel.ChildWindowsAdd(F: TForm); +var + B:TRxMDIButton; +begin + HideCurrentWindow; + F.BorderStyle:=bsNone; + F.Align:=alClient; + F.Parent:=Self; + F.Visible:=true; + F.BringToFront; + Application.MainForm.ActiveControl:=F; + + B:=TRxMDIButton.CreateButton(TaskPanel, F); + +end; + +procedure TRxMDIPanel.ChildWindowsCreate(var AForm; FC: TFormClass); +var + FForm:TForm absolute AForm; +begin + if not Assigned(FForm) then + begin + HideCurrentWindow; + FForm:=FC.Create(Self); + ChildWindowsAdd(FForm); + end + else + ShowWindow(FForm) +end; + +procedure TRxMDIPanel.ChildWindowsUpdateCaption(F: TForm); +var + i:integer; + B:TRxMDIButton; +begin + for i:=0 to TaskPanel.ComponentCount -1 do + begin + if TRxMDIButton(TaskPanel.Components[i]).NavForm = F then + begin + TRxMDIButton(TaskPanel.Components[i]).UpdateCaption; + exit; + end; + end; +end; + +procedure TRxMDIPanel.CloseAll; +begin + if Assigned(FTaskPanel) then + FTaskPanel.DoCloseAll(nil); +end; + + +{ TRxMDITasks } + +procedure TRxMDITasks.UpdateScrollBtnStatus; +var + i, W:Integer; + B:TRxMDIButton; +begin + W:=FBtnScrollLeft.Width + FBtnScrollRigth.Width; + FBtnScrollLeft.Enabled:=false; + for i:=0 to ComponentCount-1 do + begin + B:=TRxMDIButton(Components[i]); + if not B.Visible then + FBtnScrollLeft.Enabled:=true + else + W:=W+B.Width + 2; + end; + + FBtnScrollRigth.Enabled:=W > Width; +end; + +procedure TRxMDITasks.ScrollLeftExecute(Sender: TObject); +var + i:Integer; + B:TRxMDIButton; +begin + for i:=0 to ComponentCount-1 do + begin + if (Components[i] is TRxMDIButton) then + begin + B:=TRxMDIButton(Components[i]); + if not B.Visible then + begin + B.Visible:=true; + B.Left:=FBtnScrollLeft.Width; + break; + end; + end; + end; + + UpdateScrollBtnStatus; + Invalidate; +end; + +procedure TRxMDITasks.ScrollRigthExecute(Sender: TObject); +var + i:Integer; + B:TRxMDIButton; +begin + for i:=0 to ComponentCount - 1 do + begin + if (Components[i] is TRxMDIButton) then + begin + B:=TRxMDIButton(Components[i]); + if B.Visible then + begin + B.Visible:=false; + break; + end; + end; + end; + + UpdateScrollBtnStatus; + Invalidate; +end; + +procedure TRxMDITasks.ShowHiddenBtnOnResize; +begin + +end; + +procedure TRxMDITasks.ChildWindowsShowLast; +var + CC:TControl; + i:integer; +begin +{ + DebugLn(['FMainPanel.ControlCount = ', FMainPanel.ControlCount]); + for i:=0 to FMainPanel.ControlCount-1 do + DebugLn(['FMainPanel.Controls[',i,'].Name = ', FMainPanel.Controls[i].Name]); +} + + + + if (FMainPanel.ControlCount>1) then + begin + CC:=FMainPanel.Controls[FMainPanel.ControlCount-2]; + if Assigned(CC) then + ShowWindow(CC as TForm) + end + else + FMainPanel.CurrentChildWindow:=nil; + Invalidate; +end; + +procedure TRxMDITasks.DoCloseAll(AIgnoreBtn: TRxMDIButton); +var + i:integer; +begin +// DebugLn('DoCloseAll'); + + for i:=ComponentCount-1 downto 0 do + begin + if (Components[i] is TRxMDIButton) and (TRxMDIButton(Components[i]) <> AIgnoreBtn) then + TRxMDIButton(Components[i]).DoCloseMenu(nil); + end; +end; + +procedure TRxMDITasks.Paint; +var + i:integer; + H:integer; + B:TRxMDIButton; +begin + inherited Paint; + Canvas.Pen.Color:=clBlack; + H:=Height - 2; + for i:=0 to ComponentCount - 1 do + begin + if (Components[i] is TRxMDIButton) then + begin + B:=TRxMDIButton(Components[i]); + if (B.Visible) and (B.Left > B.Width) then + begin + Canvas.Pen.Color:=clBtnShadow; + Canvas.Line(B.Left - 2, 2, B.Left - 2, H); + Canvas.Pen.Color:=clWindow; + Canvas.Line(B.Left - 1, 2, B.Left - 1, H); + end; + end; + end; +end; + +procedure TRxMDITasks.Resize; +begin + inherited Resize; + if Assigned(FBtnScrollLeft) and Assigned(FBtnScrollRigth) then + UpdateScrollBtnStatus; +end; + +procedure TRxMDITasks.Notification(AComponent: TComponent; Operation: TOperation + ); +begin + inherited Notification(AComponent, Operation); + if (AComponent = FMainPanel) and (Operation = opRemove) then + FMainPanel := nil +end; + +constructor TRxMDITasks.Create(TheOwner: TComponent); +begin + inherited Create(TheOwner); + Caption:=''; + + FBtnScrollLeft:=TSpeedButton.Create(Self); + FBtnScrollLeft.Parent:=Self; + FBtnScrollLeft.Align:=alLeft; + FBtnScrollLeft.AnchorSide[akLeft].Control:=Self; + FBtnScrollLeft.Anchors:=[akLeft, akTop, akBottom]; + FBtnScrollLeft.OnClick:=@ScrollLeftExecute; + FBtnScrollLeft.Caption:='<'; + FBtnScrollLeft.ShowCaption:=true; + FBtnScrollLeft.AutoSize:=true; + FBtnScrollLeft.Flat:=true; + FBtnScrollLeft.Transparent:=false; + + FBtnScrollRigth:=TSpeedButton.Create(Self); + FBtnScrollRigth.Parent:=Self; + FBtnScrollRigth.Align:=alRight; + FBtnScrollRigth.Anchors:=[akRight, akTop, akBottom]; + FBtnScrollRigth.AnchorSide[akRight].Control:=Self; + FBtnScrollRigth.OnClick:=@ScrollRigthExecute; + FBtnScrollRigth.Caption:='>'; + FBtnScrollRigth.ShowCaption:=true; + FBtnScrollRigth.AutoSize:=true; + FBtnScrollRigth.Flat:=true; + FBtnScrollRigth.Transparent:=false; + + Align:=alBottom; + Height:=25; +end; + +destructor TRxMDITasks.Destroy; +begin + FBtnScrollRigth:=nil; + FBtnScrollLeft:=nil; + inherited Destroy; +end; + +procedure TRxMDITasks.AddButton(Btn: TRxMDIButton); +begin + Btn.Parent:=Self; + Btn.Left:=Width-1; + Btn.Down:=true; + Btn.BorderSpacing.Left:=3; + Btn.BorderSpacing.Right:=3; + + FBtnScrollRigth.BringToFront; + FBtnScrollLeft.BringToFront; + + UpdateScrollBtnStatus; +end; + +procedure TRxMDITasks.ShowWindow(F: TForm); +var + i:integer; +begin + for i:=0 to ComponentCount -1 do + begin + if (Components[i] is TRxMDIButton) and (TRxMDIButton(Components[i]).NavForm = F) then + begin + TRxMDIButton(Components[i]).Click; + TRxMDIButton(Components[i]).Visible:=true; + exit; + end; + end; +end; + + +{ TRxMDIButton } + +procedure TRxMDIButton.SetRxMDIForm(AValue: TForm); +var + FImageIndex:integer; + B:TBitmap; +begin + if FNavForm=AValue then Exit; + FNavForm:=AValue; + if Assigned(FNavForm) then + begin + FSaveClose:=FNavForm.OnClose; + //FSaveDeactivate:=FNavForm.OnDeactivate; + FNavForm.OnClose:=@FormClose; + //FNavForm.OnDeactivate:=@FormDeactivate; + + Caption:=' '+FNavForm.Caption+' '; + DoCreateButtonImage; + + if Assigned(FNavPanel) then + FNavPanel.FMainPanel.CurrentChildWindow:=NavForm; + end; +end; + +procedure TRxMDIButton.DoCreateMenuItems; +var + Item: TMenuItem; +begin + Item:=TMenuItem.Create(Self); + Item.Caption:=Caption; + Item.OnClick:=@DoActivateMenu; + FMenu.Items.Add(Item); + + Item:=TMenuItem.Create(Self); + Item.Caption:='-'; + FMenu.Items.Add(Item); + + Item:=TMenuItem.Create(Self); + Item.Caption:=sCloseWindows; + Item.OnClick:=@DoCloseMenu; + FMenu.Items.Add(Item); + + Item:=TMenuItem.Create(Self); + Item.Caption:='-'; + FMenu.Items.Add(Item); + + + Item:=TMenuItem.Create(Self); + Item.Caption:=sCloseAllExceptThis; + Item.OnClick:=@DoCloseAllExcepThisMenu; + FMenu.Items.Add(Item); + + Item:=TMenuItem.Create(Self); + Item.Caption:=sCloseAllWindows; + Item.OnClick:=@DoCloseAllMenu; + FMenu.Items.Add(Item); +end; + +procedure TRxMDIButton.DoCloseMenu(Sender: TObject); +begin + if Assigned(FNavForm) then + FNavForm.Close; + Application.ProcessMessages; +end; + +procedure TRxMDIButton.DoCloseAllMenu(Sender: TObject); +begin + FNavPanel.DoCloseAll(nil); +end; + +procedure TRxMDIButton.DoCloseAllExcepThisMenu(Sender: TObject); +begin + FNavPanel.DoCloseAll(Self); +end; + +procedure TRxMDIButton.DoActivateMenu(Sender: TObject); +begin + Click; +end; + +procedure TRxMDIButton.DoCreateButtonImage; +var + FImageIndex:integer; + B:TBitmap; +begin + if Assigned(NavForm.Icon) and (NavForm.Icon.Count>0) then + begin + B:=TBitmap.Create; + try + B.Width:=NavForm.Icon.Width; + B.Height:=NavForm.Icon.Height; + + B.Canvas.Brush.Color:=Color; + B.Canvas.FillRect(0,0, B.Width, B.Height); + B.Canvas.Draw(0, 0, NavForm.Icon); + + Glyph.Assign(B); + finally + B.Free; + end; + end; +end; + +procedure TRxMDIButton.FormClose(Sender: TObject; var CloseAction: TCloseAction); +begin + if Assigned(FSaveClose) then + FSaveClose(Sender, CloseAction); + FNavPanel.ChildWindowsShowLast; + FNavPanel.ShowHiddenBtnOnResize; + CloseAction:=caFree; + Owner.RemoveComponent(Self); + Free; +end; + +constructor TRxMDIButton.CreateButton(AOwner: TRxMDITasks; AForm: TForm); +begin + inherited Create(AOwner); + FNavPanel:=AOwner; + Align:=alLeft; + NavForm:=AForm; + AutoSize:=true; + Flat:=true; + GroupIndex:=1; + + FMenu:=TPopupMenu.Create(Self); + FMenu.Parent:=Self; + PopupMenu:=FMenu; + DoCreateMenuItems; + + AOwner.AddButton(Self); +end; + +procedure TRxMDIButton.Click; +begin + inherited Click; + if Assigned(FNavForm) then + begin + FNavPanel.FMainPanel.HideCurrentWindow; + FNavForm.Show; + //FNavForm.BringToFront; + FNavPanel.FMainPanel.CurrentChildWindow:=NavForm; + //Application.MainForm.ActiveControl:=NavForm.ActiveControl; + if Assigned(FActiveControl) then + FActiveControl.SetFocus; + end; + Down:=true; +end; + +procedure TRxMDIButton.UpdateCaption; +begin + if Assigned(FNavForm) then + Caption:=' '+FNavForm.Caption+' ' + else + Caption:='---'; + AdjustSize; +end; + +initialization + {$I RxMDICloseIcon.lrs} +end. + diff --git a/components/rx/version/2.1/rxmemds.pas b/components/rx/version/2.1/rxmemds.pas new file mode 100644 index 000000000..4fb3d3e77 --- /dev/null +++ b/components/rx/version/2.1/rxmemds.pas @@ -0,0 +1,2097 @@ +{ rxmemds unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxmemds; + + +{$I rx.inc} + +interface + + +uses SysUtils, Classes, DB, ex_rx_datapacket; + +{ TRxMemoryData } + +type + TMemBlobData = string; + TMemBlobArray = array[0..256] of TMemBlobData; + PMemBlobArray = ^TMemBlobArray; + TMemoryRecord = class; + TLoadMode = (lmCopy, lmAppend); + TCompareRecords = function (Item1, Item2: TMemoryRecord): Integer of object; + + TRxMemoryData = class(TDataSet) + private + {$IFDEF FIX_TRxMemoryData_Filter} + FOnFilterRecordEx: TFilterRecordEvent; + {$ENDIF} + FRecordPos: Integer; + FRecordSize: Integer; + FBookmarkOfs: Integer; + FBlobOfs: Integer; + FRecBufSize: Integer; + FOffsets: PWordArray; + FLastID: Integer; + FAutoInc: Longint; + FActive: Boolean; + FRecords: TList; + FIndexList: TList; + FCaseInsensitiveSort: Boolean; + FDescendingSort: Boolean; + + FFileName: string; + FFileStream : TFileStream; + FDatasetReader : TRxDataPacketReader; + FPacketRecords: Integer; + FFilterBuffer : pchar; + FNullmaskSize : byte; + FBRecordCount : integer; + function IntAllocRecordBuffer: PChar; + procedure IntLoadFielddefsFromFile; + procedure IntLoadRecordsFromFile; + procedure SetPacketRecords(const AValue: Integer); + + function AddRecord: TMemoryRecord; + procedure CopyRecord(RecordData, Buffer: PChar); + function GetOnFilterRecordEx: TFilterRecordEvent; + function InsertRecord(Index: Integer): TMemoryRecord; + function FindRecordID(ID: Integer): TMemoryRecord; + procedure CreateIndexList(const FieldNames: string); + procedure FreeIndexList; + procedure QuickSort(L, R: Integer; Compare: TCompareRecords); + procedure SetOnFilterRecordEx(const AValue: TFilterRecordEvent); + procedure Sort; + function CalcRecordSize: Integer; + function FindFieldData(Buffer: Pointer; Field: TField): Pointer;overload; + function FindFieldData(Buffer: Pointer; FieldNo:Integer): Pointer;overload; + function GetMemoryRecord(Index: Integer): TMemoryRecord; + function GetCapacity: Integer; + function RecordFilter: Boolean; + procedure SetCapacity(Value: Integer); + procedure ClearRecords; + procedure InitBufferPointers(GetProps: Boolean); + protected + procedure AssignMemoryRecord(Rec: TMemoryRecord; Buffer: PChar); + function GetActiveRecBuf(var RecBuf: PChar): Boolean; virtual; + procedure InitFieldDefsFromFields; + procedure RecordToBuffer(Rec: TMemoryRecord; Buffer: PChar); + procedure SetMemoryRecordData(Buffer: PChar; Pos: Integer); virtual; + procedure SetAutoIncFields(Buffer: PChar); virtual; + function CompareRecords(Item1, Item2: TMemoryRecord): Integer; virtual; + function GetBlobData(Field: TField; Buffer: PChar): TMemBlobData; + procedure SetBlobData(Field: TField; Buffer: PChar; Value: TMemBlobData); + function AllocRecordBuffer: PChar; override; + procedure FreeRecordBuffer(var Buffer: PChar); override; + function BCDToCurr(BCD: Pointer; var Curr: Currency): Boolean; + function CurrToBCD(const Curr: Currency; BCD: Pointer; + Precision, Decimals: Integer): Boolean; + procedure InternalInitRecord(Buffer: PChar); override; + procedure ClearCalcFields(Buffer: PChar); override; + function GetRecord(Buffer: PChar; GetMode: TGetMode; + DoCheck: Boolean): TGetResult; override; + function GetRecordSize: Word; override; + procedure SetFiltered(Value: Boolean); override; + procedure SetOnFilterRecord(const Value: TFilterRecordEvent); override; + procedure SetFieldData(Field: TField; Buffer: Pointer); override; + procedure CloseBlob(Field: TField); override; + procedure GetBookmarkData(Buffer: PChar; Data: Pointer); override; + function GetBookmarkFlag(Buffer: PChar): TBookmarkFlag; override; + {$IFDEF NoAutomatedBookmark} + procedure InternalGotoBookmark(ABookmark: TBookmark); override; + {$ELSE} + procedure InternalGotoBookmark(ABookmark: Pointer); override; + {$ENDIF} + procedure InternalSetToRecord(Buffer: PChar); override; + procedure SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag); override; + procedure SetBookmarkData(Buffer: PChar; Data: Pointer); override; + function GetIsIndexField(Field: TField): Boolean; override; + procedure InternalFirst; override; + procedure InternalLast; override; + procedure InitRecord(Buffer: PChar); override; + procedure InternalAddRecord(Buffer: Pointer; DoAppend: Boolean); override; + procedure InternalDelete; override; + procedure InternalPost; override; + procedure InternalClose; override; + procedure InternalHandleException; override; + procedure InternalInitFieldDefs; override; + procedure InternalOpen; override; + procedure OpenCursor(InfoQuery: Boolean); override; + function IsCursorOpen: Boolean; override; + function GetRecordCount: Integer; override; + function GetRecNo: Integer; override; + procedure SetRecNo(Value: Integer); override; + property Records[Index: Integer]: TMemoryRecord read GetMemoryRecord; + function GetAnyRecField(SrcRecNo:integer; AField:TField):variant; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function BookmarkValid(ABookmark: TBookmark): Boolean; override; + function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer; override; + function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override; + function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override; + function GetCurrentRecord(Buffer: PChar): Boolean; override; + function IsSequenced: Boolean; override; + function Locate(const KeyFields: string; const KeyValues: Variant; + Options: TLocateOptions): Boolean; override; + procedure SortOnFields(const FieldNames: string; + CaseInsensitive: Boolean = True; Descending: Boolean = False); + procedure SortOnFieldsEx(const FieldNames: string; + CaseInsensitive: Boolean = True; Asc: array of boolean); + procedure EmptyTable; + procedure CloseOpen; + procedure CopyStructure(Source: TDataSet); + function LoadFromDataSet(Source: TDataSet; ARecordCount: Integer; + Mode: TLoadMode): Integer; + function SaveToDataSet(Dest: TDataSet; ARecordCount: Integer): Integer; + procedure AppendRecord(const Values: array of const); + + procedure SetDatasetPacket(AReader : TRxDataPacketReader); + procedure GetDatasetPacket(AWriter : TRxDataPacketReader); + procedure LoadFromStream(AStream : TStream; Format: TRxDataPacketFormat = dfBinary); + procedure SaveToStream(AStream : TStream; Format: TRxDataPacketFormat = dfBinary); + procedure LoadFromFile(AFileName: string = ''; Format: TRxDataPacketFormat = dfAny); + procedure SaveToFile(AFileName: string = ''; Format: TRxDataPacketFormat = dfAny); + published + property Capacity: Integer read GetCapacity write SetCapacity default 0; + property Active; + property AutoCalcFields; + property Filtered; + property FieldDefs; +// property ObjectView default False; + property BeforeOpen; + property AfterOpen; + property BeforeClose; + property AfterClose; + property BeforeInsert; + property AfterInsert; + property BeforeEdit; + property AfterEdit; + property BeforePost; + property AfterPost; + property BeforeCancel; + property AfterCancel; + property BeforeDelete; + property AfterDelete; + property BeforeScroll; + property AfterScroll; + property OnCalcFields; + property OnDeleteError; + property OnEditError; + property OnFilterRecord; + property OnFilterRecordEx: TFilterRecordEvent read GetOnFilterRecordEx write SetOnFilterRecordEx; + property OnNewRecord; + property OnPostError; + + property FileName : string read FFileName write FFileName; + property PacketRecords : Integer read FPacketRecords write SetPacketRecords default 10; + end; + +{ TMemBlobStream } + + TMemBlobStream = class(TStream) + private + FField: TBlobField; + FDataSet: TRxMemoryData; + FBuffer: PChar; + FMode: TBlobStreamMode; + FOpened: Boolean; + FModified: Boolean; + FPosition: Longint; + FCached: Boolean; + function GetBlobSize: Longint; + function GetBlobFromRecord(Field: TField): TMemBlobData; + public + constructor Create(Field: TBlobField; Mode: TBlobStreamMode); + destructor Destroy; override; + function Read(var Buffer; Count: Longint): Longint; override; + function Write(const Buffer; Count: Longint): Longint; override; + function Seek(Offset: Longint; Origin: Word): Longint; override; + procedure Truncate; + end; + +{ TMemoryRecord } + + TMemoryRecord = class(TPersistent) + private + FMemoryData: TRxMemoryData; + FID: Integer; + FData: Pointer; + FBlobs: PMemBlobArray; + function GetIndex: Integer; + procedure SetMemoryData(Value: TRxMemoryData; UpdateParent: Boolean); + protected + procedure SetIndex(Value: Integer); virtual; + public + constructor Create(MemoryData: TRxMemoryData); virtual; + constructor CreateEx(MemoryData: TRxMemoryData; UpdateParent: Boolean); virtual; + destructor Destroy; override; + property MemoryData: TRxMemoryData read FMemoryData; + property ID: Integer read FID write FID; + property Index: Integer read GetIndex write SetIndex; + property Data: Pointer read FData; + end; + + +implementation + + +uses CustApp, rxdconst, LazUTF8, dbconst, Variants, math; + +const + ftBlobTypes = [ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, + ftDBaseOle, ftTypedBinary, ftOraBlob, ftOraClob]; + + ftSupported = [ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, + ftCurrency, ftDate, ftTime, ftDateTime, ftAutoInc, ftBCD, ftBytes, + ftVarBytes, ftADT, ftFixedChar, ftWideString, ftLargeint, ftVariant, ftGuid] + + ftBlobTypes; + + fkStoredFields = [fkData]; + + GuidSize = 38; + +{ Utility routines } + +procedure FinalizeBlobFields(BlobArray:PMemBlobArray; BlobFieldCount:integer); +var + i:integer; +begin + for i:=0 to BlobFieldCount-1 do + BlobArray^[i]:=''; +end; + +function CompareFields(Data1, Data2: Pointer; FieldType: TFieldType; + CaseInsensitive: Boolean): Integer; +begin + Result := 0; + case FieldType of + ftString: + if CaseInsensitive then + Result := UTF8CompareText(PChar(Data1), PChar(Data2)) + else + Result := UTF8CompareStr(PChar(Data1), PChar(Data2)); + ftSmallint: + if SmallInt(Data1^) > SmallInt(Data2^) then Result := 1 + else if SmallInt(Data1^) < SmallInt(Data2^) then Result := -1; + ftInteger, ftDate, ftTime, ftAutoInc: + if Longint(Data1^) > Longint(Data2^) then Result := 1 + else if Longint(Data1^) < Longint(Data2^) then Result := -1; + ftWord: + if Word(Data1^) > Word(Data2^) then Result := 1 + else if Word(Data1^) < Word(Data2^) then Result := -1; + ftBoolean: + if WordBool(Data1^) and not WordBool(Data2^) then Result := 1 + else if not WordBool(Data1^) and WordBool(Data2^) then Result := -1; + ftFloat, ftCurrency: + if Double(Data1^) > Double(Data2^) then Result := 1 + else if Double(Data1^) < Double(Data2^) then Result := -1; + ftDateTime: + if TDateTime(Data1^) > TDateTime(Data2^) then Result := 1 + else if TDateTime(Data1^) < TDateTime(Data2^) then Result := -1; + ftFixedChar: + if CaseInsensitive then + Result := UTF8CompareText(PChar(Data1), PChar(Data2)) + else + Result := UTF8CompareStr(PChar(Data1), PChar(Data2)); + ftWideString: + if CaseInsensitive then + Result := UTF8CompareText(WideCharToString(PWideChar(Data1)), + WideCharToString(PWideChar(Data2))) + else + Result := UTF8CompareStr(WideCharToString(PWideChar(Data1)), + WideCharToString(PWideChar(Data2))); + ftLargeint: + if Int64(Data1^) > Int64(Data2^) then Result := 1 + else if Int64(Data1^) < Int64(Data2^) then Result := -1; + ftVariant: + Result := 0; + ftGuid: + Result := UTF8CompareText(PChar(Data1), PChar(Data2)); + end; +end; + +function CalcFieldLen(FieldType: TFieldType; Size: Word): Word; +begin + if not (FieldType in ftSupported) then + Result := 0 + else + if (FieldType in ftBlobTypes) then + Result := SizeOf(Longint) + else + begin + Result := Size; + case FieldType of + ftString: Inc(Result); + ftSmallint: Result := SizeOf(SmallInt); + ftInteger: Result := SizeOf(Longint); + ftWord: Result := SizeOf(Word); + ftBoolean: Result := SizeOf(WordBool); + ftFloat: Result := SizeOf(Double); + ftCurrency: Result := SizeOf(Double); + ftBCD: Result := 34; + ftDate, ftTime: Result := SizeOf(Longint); + ftDateTime: Result := SizeOf(TDateTime); + ftBytes: Result := Size; + ftVarBytes: Result := Size + 2; + ftAutoInc: Result := SizeOf(Longint); + ftADT: Result := 0; + ftFixedChar: Inc(Result); + ftWideString: Result := (Result + 1) * 2; + ftLargeint: Result := SizeOf(Int64); + ftVariant: Result := SizeOf(Variant); + ftGuid: Result := GuidSize + 1; + end; + end; +end; + +procedure CalcDataSize(FieldDef: TFieldDef; var DataSize: Integer); +var + I: Integer; +begin + with FieldDef do begin + if (DataType in ftSupported - ftBlobTypes) then + Inc(DataSize, CalcFieldLen(DataType, Size) + 1); +{$IFDEF ENABLE_Child_Defs} + for I := 0 to ChildDefs.Count - 1 do + CalcDataSize(ChildDefs[I], DataSize); +{$ENDIF} + end; +end; + +procedure Error(const Msg: string); +begin + DatabaseError(Msg); +end; + +procedure ErrorFmt(const Msg: string; const Args: array of const); +begin + DatabaseErrorFmt(Msg, Args); +end; + +type + TBookmarkData = Integer; + PMemBookmarkInfo = ^TMemBookmarkInfo; + TMemBookmarkInfo = packed record + BookmarkData: TBookmarkData; + BookmarkFlag: TBookmarkFlag; + end; + +{ TMemoryRecord } + +constructor TMemoryRecord.Create(MemoryData: TRxMemoryData); +begin + CreateEx(MemoryData, True); +end; + +constructor TMemoryRecord.CreateEx(MemoryData: TRxMemoryData; + UpdateParent: Boolean); +begin + inherited Create; + SetMemoryData(MemoryData, UpdateParent); +end; + +destructor TMemoryRecord.Destroy; +begin + SetMemoryData(nil, True); + inherited Destroy; +end; + +function TMemoryRecord.GetIndex: Integer; +begin + if FMemoryData <> nil then Result := FMemoryData.FRecords.IndexOf(Self) + else Result := -1; +end; + +procedure TMemoryRecord.SetMemoryData(Value: TRxMemoryData; UpdateParent: Boolean); +var + I: Integer; + DataSize: Integer; +begin + if FMemoryData <> Value then + begin + if FMemoryData <> nil then + begin + FMemoryData.FRecords.Remove(Self); + if FMemoryData.BlobFieldCount > 0 then + begin + FinalizeBlobFields(FBlobs, FMemoryData.BlobFieldCount); + Freemem(FBlobs, FMemoryData.BlobFieldCount * SizeOf(TMemBlobData)); + end; + FBlobs:=nil; + ReallocMem(FData, 0); + FMemoryData := nil; + end; + if Value <> nil then + begin + if UpdateParent then + begin + Value.FRecords.Add(Self); + Inc(Value.FLastID); + FID := Value.FLastID; + end; + FMemoryData := Value; + if Value.BlobFieldCount > 0 then + begin + GetMem(FBlobs, Value.BlobFieldCount * SizeOf(TMemBlobData)); + FillChar(FBlobs^, Value.BlobFieldCount * SizeOf(Pointer), 0); + FinalizeBlobFields(FBlobs, Value.BlobFieldCount); +// Initialize(PMemBlobArray(FBlobs)^[0]);//, Value.BlobFieldCount); + end; + DataSize := 0; + for I := 0 to Value.FieldDefs.Count - 1 do + CalcDataSize(Value.FieldDefs[I], DataSize); + ReallocMem(FData, DataSize); + FillChar(FData^, DataSize, 0); + end; + end; +end; + +procedure TMemoryRecord.SetIndex(Value: Integer); +var + CurIndex: Integer; +begin + CurIndex := GetIndex; + if (CurIndex >= 0) and (CurIndex <> Value) then + FMemoryData.FRecords.Move(CurIndex, Value); +end; + +{ TRxMemoryData } + +constructor TRxMemoryData.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FRecordPos := -1; + FLastID := Low(Integer); + FAutoInc := 1; + FRecords := TList.Create; +end; + +destructor TRxMemoryData.Destroy; +begin + inherited Destroy; + FreeIndexList; + ClearRecords; + FRecords.Free; + ReallocMem(FOffsets, 0); +end; + +{ Records Management } + +function TRxMemoryData.GetCapacity: Integer; +begin + if FRecords <> nil then Result := FRecords.Capacity + else Result := 0; +end; + +procedure TRxMemoryData.SetCapacity(Value: Integer); +begin + if FRecords <> nil then FRecords.Capacity := Value; +end; + +function TRxMemoryData.AddRecord: TMemoryRecord; +begin + Result := TMemoryRecord.Create(Self); +end; + +function TRxMemoryData.GetOnFilterRecordEx: TFilterRecordEvent; +begin + {$IFDEF FIX_TRxMemoryData_Filter} + Result:=FOnFilterRecordEx; + {$ELSE} + Result:=OnFilterRecord; + {$ENDIF} +end; + +function TRxMemoryData.FindRecordID(ID: Integer): TMemoryRecord; +var + I: Integer; +begin + for I := 0 to FRecords.Count - 1 do begin + Result := TMemoryRecord(FRecords[I]); + if Result.ID = ID then Exit; + end; + Result := nil; +end; + +function TRxMemoryData.InsertRecord(Index: Integer): TMemoryRecord; +begin + Result := AddRecord; + Result.Index := Index; +end; + +function TRxMemoryData.GetMemoryRecord(Index: Integer): TMemoryRecord; +begin + Result := TMemoryRecord(FRecords[Index]); +end; + +{ Field Management } + +function TRxMemoryData.BCDToCurr(BCD: Pointer; var Curr: Currency): Boolean; +begin + Move(BCD^, Curr, SizeOf(Currency)); + Result := True; +end; + +function TRxMemoryData.CurrToBCD(const Curr: Currency; BCD: Pointer; Precision, + Decimals: Integer): Boolean; +begin + Move(Curr, BCD^, SizeOf(Currency)); + Result := True; +end; + +procedure TRxMemoryData.InitFieldDefsFromFields; +var + I: Integer; + Offset: Word; + FD:TFieldDef; +begin + if FieldDefs.Count = 0 then + begin + for I := 0 to FieldCount - 1 do + begin + with Fields[I] do + if (FieldKind in fkStoredFields) and not (DataType in ftSupported) then + ErrorFmt(SUnknownFieldType, [DisplayName]); + end; + FreeIndexList; + end; + Offset := 0; + { Create FieldDefs from persistent fields if needed } + if FieldDefs.Count = 0 then + for I := 0 to FieldCount - 1 do + begin + FD:=FieldDefs.AddFieldDef; +// FD.DisplayName:=Fields[I].DisplayName; + FD.Name:=Fields[I].FieldName; + FD.Size:=Fields[I].Size; + FD.DataType:=Fields[I].DataType; + if Fields[I].Required then + FD.Attributes:= FD.Attributes + [faRequired]; + if Fields[I] is TFloatField then + FD.Precision:=TFloatField(Fields[I]).Precision; + end; + { Calculate fields offsets } + ReallocMem(FOffsets, FieldDefs.Count * SizeOf(Word)); + for I := 0 to FieldDefs.Count - 1 do + begin + FOffsets^[I] := Offset; + with FieldDefs[I] do + begin + if (DataType in ftSupported - ftBlobTypes) then + Inc(Offset, CalcFieldLen(DataType, Size) + 1); + end; + end; +end; + +function TRxMemoryData.FindFieldData(Buffer: Pointer; Field: TField): Pointer; +var + Index: Integer; +begin + Index := FieldDefs.IndexOf(Field.FieldName); + Result:=FindFieldData(Buffer, Index); +end; + +function TRxMemoryData.FindFieldData(Buffer: Pointer; FieldNo: Integer): Pointer; +begin + Result := nil; + if (FieldNo >= 0) and (Buffer <> nil) and (FieldDefs[FieldNo].DataType in ftSupported - ftBlobTypes) then + Result := Pointer(PtrInt(PChar(Buffer)) + FOffsets^[FieldNo]); +end; + +{ Buffer Manipulation } + +function TRxMemoryData.CalcRecordSize: Integer; +var + I: Integer; +begin + Result := 0; + for I := 0 to FieldDefs.Count - 1 do + CalcDataSize(FieldDefs[I], Result); +end; + +procedure TRxMemoryData.InitBufferPointers(GetProps: Boolean); +begin + if GetProps then FRecordSize := CalcRecordSize; + FBookmarkOfs := FRecordSize + CalcFieldsSize; + FBlobOfs := FBookmarkOfs + SizeOf(TMemBookmarkInfo); + FRecBufSize := FBlobOfs + BlobFieldCount * SizeOf(TMemBlobData);//Pointer); +end; + +procedure TRxMemoryData.ClearRecords; +begin + while FRecords.Count > 0 do TObject(FRecords.Last).Free; + FLastID := Low(Integer); + FRecordPos := -1; +end; + +function TRxMemoryData.AllocRecordBuffer: PChar; +begin + Result := StrAlloc(FRecBufSize); + InternalInitRecord(Result); +{ FillChar(Result^, FRecBufSize, 0); + if BlobFieldCount > 0 then + begin +// Initialize(PMemBlobArray(Result + FBlobOfs)^[0]);//, BlobFieldCount); +// FillChar(PMemBlobArray(Result + FBlobOfs)^, BlobFieldCount * SizeOf(Pointer),0);//, BlobFieldCount); + FinalizeBlobFields(PMemBlobArray(Result + FBlobOfs), BlobFieldCount); + + end;} +end; + +procedure TRxMemoryData.FreeRecordBuffer(var Buffer: PChar); +var + n:integer; + FieldPtr:PChar; +begin + //correctly release field memory for complex types + for n:=0 to FieldDefs.Count-1 do + if FieldDefs.Items[n].DataType = ftVariant then + begin + FieldPtr:=FindFieldData(Buffer, n); + if FieldPtr <> nil then + begin + PBoolean(FieldPtr)^:=False; + Inc(FieldPtr); + Finalize( PVariant(FieldPtr)^ ); + end; + end; + + if BlobFieldCount > 0 then + FinalizeBlobFields(PMemBlobArray(Buffer + FBlobOfs), BlobFieldCount); + + StrDispose(Buffer); + Buffer := nil; +end; + +procedure TRxMemoryData.ClearCalcFields(Buffer: PChar); +begin + FillChar(Buffer[FRecordSize], CalcFieldsSize, 0); +end; + +procedure TRxMemoryData.InternalInitRecord(Buffer: PChar); +var + I: Integer; +begin + FillChar(Buffer^, FBlobOfs, 0); + FillChar(PByteArray(Buffer + FBlobOfs)^, BlobFieldCount * SizeOf(Pointer), 0); + for I := 0 to BlobFieldCount - 1 do + begin + PMemBlobArray(Buffer + FBlobOfs)^[I] := ''; + end; +end; + +procedure TRxMemoryData.InitRecord(Buffer: PChar); +begin + inherited InitRecord(Buffer); + with PMemBookmarkInfo(Buffer + FBookmarkOfs)^ do + begin + BookmarkData := Low(Integer); + BookmarkFlag := bfInserted; + end; +end; + +procedure TRxMemoryData.CopyRecord(RecordData, Buffer:PChar); +var + n, FieldSize:Integer; + FieldPtr, BufPtr:PChar; + DataType:TFieldType; +begin + for n:=0 to FieldDefs.Count-1 do + begin + FieldPtr:=FindFieldData(RecordData, n); + BufPtr:=FindFieldData(Buffer, n); + if FieldPtr = nil then Continue; + + PBoolean(BufPtr)^:=PBoolean(FieldPtr)^; + Inc(FieldPtr); + Inc(BufPtr); + + DataType:=FieldDefs.Items[n].DataType; + if DataType = ftVariant then + begin + PVariant(BufPtr)^:=PVariant(FieldPtr)^; + end + else + begin + FieldSize:=FieldDefs.Items[n].Size; + Move( FieldPtr^, BufPtr^, CalcFieldLen(DataType, FieldSize) ); + end; + end; +end; + +function TRxMemoryData.GetCurrentRecord(Buffer: PChar): Boolean; +begin + Result := False; + if not IsEmpty and (GetBookmarkFlag(ActiveBuffer) = bfCurrent) then + begin + UpdateCursorPos; + if (FRecordPos >= 0) and (FRecordPos < RecordCount) then + begin + //Move(Records[FRecordPos].Data^, Buffer^, FRecordSize); + CopyRecord(Records[FRecordPos].Data, Buffer); + + Result := True; + end; + end; +end; + +procedure TRxMemoryData.RecordToBuffer(Rec: TMemoryRecord; Buffer: PChar); +var + I: Integer; +begin + //Move(Rec.Data^, Buffer^, FRecordSize); + CopyRecord(Rec.Data, Buffer); + with PMemBookmarkInfo(Buffer + FBookmarkOfs)^ do + begin + BookmarkData := Rec.ID; + BookmarkFlag := bfCurrent; + end; + for I := 0 to BlobFieldCount - 1 do + PMemBlobArray(Buffer + FBlobOfs)^[I] := PMemBlobArray(Rec.FBlobs)^[I]; + GetCalcFields(Buffer); +end; + +function TRxMemoryData.GetRecord(Buffer: PChar; GetMode: TGetMode; + DoCheck: Boolean): TGetResult; +var + Accept: Boolean; +begin + Result := grOk; + Accept := True; + case GetMode of + gmPrior: + if FRecordPos <= 0 then begin + Result := grBOF; + FRecordPos := -1; + end + else begin + repeat + Dec(FRecordPos); + if Filtered then Accept := RecordFilter; + until Accept or (FRecordPos < 0); + if not Accept then begin + Result := grBOF; + FRecordPos := -1; + end; + end; + gmCurrent: + if (FRecordPos < 0) or (FRecordPos >= RecordCount) then + Result := grError + else if Filtered then begin + if not RecordFilter then Result := grError; + end; + gmNext: + if FRecordPos >= RecordCount - 1 then Result := grEOF + else begin + repeat + Inc(FRecordPos); + if Filtered then Accept := RecordFilter; + until Accept or (FRecordPos > RecordCount - 1); + if not Accept then begin + Result := grEOF; + FRecordPos := RecordCount - 1; + end; + end; + end; + if Result = grOk then RecordToBuffer(Records[FRecordPos], Buffer) + else if (Result = grError) and DoCheck then Error(SMemNoRecords); +end; + +function TRxMemoryData.GetRecordSize: Word; +begin + Result := FRecordSize; +end; + +function TRxMemoryData.GetActiveRecBuf(var RecBuf: PChar): Boolean; +begin + case State of + dsBrowse: + if IsEmpty then RecBuf := nil + else RecBuf := ActiveBuffer; + dsEdit, dsInsert: RecBuf := ActiveBuffer; + dsCalcFields: RecBuf := CalcBuffer; + dsFilter: RecBuf := TempBuffer; + else RecBuf := nil; + end; + Result := RecBuf <> nil; +end; + +{$IFDEF FIX_BUG_FieldNo} +function GetFieldNo(DS:TDataSet; Field:TField):integer; +var + i:integer; +begin + for i:=0 to DS.FieldDefs.Count-1 do + if DS.FieldDefs[i].Name = Field.FieldName then + begin + Result:=i+1; + exit; + end; + Result:=0; +end; +{$ENDIF} + +function TRxMemoryData.GetFieldData(Field: TField; Buffer: Pointer): Boolean; +var + RecBuf, Data: PChar; + VarData: Variant; +begin + Result := False; + if not GetActiveRecBuf(RecBuf) then Exit; +{$IFDEF FIX_BUG_FieldNo} + if GetFieldNo(Self, Field) > 0 then +{$ELSE} + if Field.FieldNo > 0 then +{$ENDIF} + begin + Data := FindFieldData(RecBuf, Field); + if Data <> nil then begin + Result := Boolean(Data[0]); + Inc(Data); + if Field.DataType in [ftString, ftFixedChar, ftWideString, ftGuid] then + Result := Result and (StrLen(Data) > 0); + if Result and (Buffer <> nil) then + if Field.DataType = ftVariant then + begin + VarData := PVariant(Data)^; + PVariant(Buffer)^ := VarData; + end + else + Move(Data^, Buffer^, CalcFieldLen(Field.DataType, Field.Size)); + end; + end + else + begin + if State in [dsBrowse, dsEdit, dsInsert, dsCalcFields] then + begin + Inc(RecBuf, FRecordSize + Field.Offset); + Result := Boolean(RecBuf[0]); + if Result and (Buffer <> nil) then + Move(RecBuf[1], Buffer^, Field.DataSize); + end; + end; +end; + +procedure TRxMemoryData.SetFieldData(Field: TField; Buffer: Pointer); +var + RecBuf, Data: PChar; + VarData: Variant; + PBl:PBoolean; +begin + if not (State in dsWriteModes) then ErrorFmt(SNotEditing, [Name]); + GetActiveRecBuf(RecBuf); + with Field do + begin +{$IFDEF FIX_BUG_FieldNo} + if GetFieldNo(Self, Field) > 0 then +{$ELSE} + if Field.FieldNo > 0 then +{$ENDIF} + begin + if State in [dsCalcFields, dsFilter] then ErrorFmt(SNotEditing, [Name]); + if ReadOnly and not (State in [dsSetKey, dsFilter]) then + ErrorFmt(SFieldReadOnly, [DisplayName]); + Validate(Buffer); + if FieldKind <> fkInternalCalc then + begin + Data := FindFieldData(RecBuf, Field); + if Data <> nil then + begin + if DataType = ftVariant then + begin + if (Buffer = nil) or VarIsNull(PVariant(Buffer)^) or VarIsEmpty(PVariant(Buffer)^) or + VarIsEmptyParam(PVariant(Buffer)^) then + FillChar(Data^, CalcFieldLen(DataType, Size), 0) + else + begin + Boolean(Data[0]):=True; + Inc(Data); + PVariant(Data)^ := PVariant(Buffer)^; + end; + end + else + begin + PBl:=Pointer(Data); +// Boolean(Data^{[0]}) := Assigned(Buffer);//LongBool(Buffer); +// Pbl^:=Assigned(Buffer); + PBoolean(Pointer(Data))^:= Assigned(Buffer); + Inc(Data); + if Assigned(Buffer) then + Move(Buffer^, Data^, CalcFieldLen(DataType, Size)) + else + FillChar(Data^, CalcFieldLen(DataType, Size), 0); + end; + end; + end; + end else {fkCalculated, fkLookup} + begin + Inc(RecBuf, FRecordSize + Offset); + Boolean(RecBuf[0]) := LongBool(Buffer); + if Boolean(RecBuf[0]) then Move(Buffer^, RecBuf[1], DataSize); + end; + if not (State in [dsCalcFields, dsFilter, dsNewValue]) then + DataEvent(deFieldChange, ptrint(Field)); + end; +end; + +{ Filter } + +procedure TRxMemoryData.SetFiltered(Value: Boolean); +begin + if Active then + begin + CheckBrowseMode; + if Filtered <> Value then + begin + inherited SetFiltered(Value); + First; + end; + end + else + inherited SetFiltered(Value); +end; + +procedure TRxMemoryData.SetOnFilterRecord(const Value: TFilterRecordEvent); +begin + if Active then + begin + CheckBrowseMode; + inherited SetOnFilterRecord(Value); + if Filtered then First; + end + else + inherited SetOnFilterRecord(Value); +end; + +function TRxMemoryData.RecordFilter: Boolean; +var + SaveState: TDataSetState; +begin + Result := True; + {$IFDEF FIX_TRxMemoryData_Filter} + if Assigned(OnFilterRecordEx) then + {$ELSE} + if Assigned(OnFilterRecord) then + {$ENDIF} + begin + if (FRecordPos >= 0) and (FRecordPos < RecordCount) then + begin + SaveState := SetTempState(dsFilter); + try + RecordToBuffer(Records[FRecordPos], TempBuffer); + {$IFDEF FIX_TRxMemoryData_Filter} + OnFilterRecordEx(Self, Result); + {$ELSE} + OnFilterRecord(Self, Result); + {$ENDIF} + except +// Application.HandleException(Self); + CustomApplication.HandleException(Self); + end; + RestoreState(SaveState); + end + else + Result := False; + end; +end; + +{ Blobs } + +function TRxMemoryData.GetBlobData(Field: TField; Buffer: PChar): TMemBlobData; +begin + Result := PMemBlobArray(Buffer + FBlobOfs)^[Field.Offset]; +end; + +procedure TRxMemoryData.SetBlobData(Field: TField; Buffer: PChar; + Value: TMemBlobData); +begin + if (Buffer = ActiveBuffer) then begin + if State = dsFilter then Error(SNotEditing); + PMemBlobArray(Buffer + FBlobOfs)^[Field.Offset] := Value; + end; +end; + +procedure TRxMemoryData.CloseBlob(Field: TField); +begin + if (FRecordPos >= 0) and (FRecordPos < FRecords.Count) and + (State = dsEdit) then + PMemBlobArray(ActiveBuffer + FBlobOfs)^[Field.Offset] := + PMemBlobArray(Records[FRecordPos].FBlobs)^[Field.Offset] + else PMemBlobArray(ActiveBuffer + FBlobOfs)^[Field.Offset] := ''; +end; + +function TRxMemoryData.CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; +begin + Result := TMemBlobStream.Create(Field as TBlobField, Mode); +end; + +{ Bookmarks } + +function TRxMemoryData.BookmarkValid(ABookmark: TBookmark): Boolean; +begin + {$IFDEF NoAutomatedBookmark} + Result := FActive and (TBookmarkData(ABookmark^) > Low(Integer)) and + (TBookmarkData(ABookmark^) <= FLastID); + {$ELSE} + Result := FActive and (TBookmarkData(pointer(ABookmark)^) > Low(Integer)) and + (TBookmarkData(pointer(ABookmark)^) <= FLastID); + {$ENDIF} +end; + +function TRxMemoryData.CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer; +begin + if (Bookmark1 = nil) and (Bookmark2 = nil) then Result := 0 + else + if (Bookmark1 <> nil) and (Bookmark2 = nil) then Result := 1 + else + if (Bookmark1 = nil) and (Bookmark2 <> nil) then Result := -1 + {$IFDEF NoAutomatedBookmark} + else + if TBookmarkData(Bookmark1^) > TBookmarkData(Bookmark2^) then + {$ELSE} + else + if TBookmarkData(pointer(Bookmark1)^) > TBookmarkData(pointer(Bookmark2)^) then + {$ENDIF} + Result := 1 + {$IFDEF NoAutomatedBookmark} + else + if TBookmarkData(Bookmark1^) < TBookmarkData(Bookmark2^) then + {$ELSE} + else + if TBookmarkData(pointer(Bookmark1)^) < TBookmarkData(pointer(Bookmark2)^) then + {$ENDIF} + Result := -1 + else Result := 0; +end; + +procedure TRxMemoryData.GetBookmarkData(Buffer: PChar; Data: Pointer); +begin + Move(PMemBookmarkInfo(Buffer + FBookmarkOfs)^.BookmarkData, Data^, + SizeOf(TBookmarkData)); +end; + +procedure TRxMemoryData.SetBookmarkData(Buffer: PChar; Data: Pointer); +begin + Move(Data^, PMemBookmarkInfo(Buffer + FBookmarkOfs)^.BookmarkData, + SizeOf(TBookmarkData)); +end; + +function TRxMemoryData.GetBookmarkFlag(Buffer: PChar): TBookmarkFlag; +begin + Result := PMemBookmarkInfo(Buffer + FBookmarkOfs)^.BookmarkFlag; +end; + +procedure TRxMemoryData.SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag); +begin + PMemBookmarkInfo(Buffer + FBookmarkOfs)^.BookmarkFlag := Value; +end; + +{$IFDEF NoAutomatedBookmark} +procedure TRxMemoryData.InternalGotoBookmark(ABookmark: TBookmark); +{$ELSE} +procedure TRxMemoryData.InternalGotoBookmark(ABookmark: Pointer); +{$ENDIF} +var + Rec: TMemoryRecord; + SavePos: Integer; + Accept: Boolean; +begin + Rec := FindRecordID(TBookmarkData(ABookmark^)); + if Rec <> nil then + begin + Accept := True; + SavePos := FRecordPos; + try + FRecordPos := Rec.Index; + if Filtered then Accept := RecordFilter; + finally + if not Accept then FRecordPos := SavePos; + end; + end; +end; + +{ Navigation } + +procedure TRxMemoryData.InternalSetToRecord(Buffer: PChar); +begin + InternalGotoBookmark(@PMemBookmarkInfo(Buffer + FBookmarkOfs)^.BookmarkData); +end; + +procedure TRxMemoryData.InternalFirst; +begin + FRecordPos := -1; +end; + +procedure TRxMemoryData.InternalLast; +begin + FRecordPos := FRecords.Count; +end; + +{ Data Manipulation } + +procedure TRxMemoryData.AssignMemoryRecord(Rec: TMemoryRecord; Buffer: PChar); +var + I: Integer; +begin + //Move(Buffer^, Rec.Data^, FRecordSize); + CopyRecord(Buffer, PChar(Rec.Data)); + + for I := 0 to BlobFieldCount - 1 do + PMemBlobArray(Rec.FBlobs)^[I] := PMemBlobArray(Buffer + FBlobOfs)^[I]; +end; + +procedure TRxMemoryData.SetMemoryRecordData(Buffer: PChar; Pos: Integer); +var + Rec: TMemoryRecord; +begin + if State = dsFilter then Error(SNotEditing); + Rec := Records[Pos]; + AssignMemoryRecord(Rec, Buffer); +end; + +procedure TRxMemoryData.SetAutoIncFields(Buffer: PChar); +var + I, Count: Integer; + Data: PChar; +begin + Count := 0; + for I := 0 to FieldCount - 1 do + if (Fields[I].FieldKind in fkStoredFields) and + (Fields[I].DataType = ftAutoInc) then + begin + Data := FindFieldData(Buffer, Fields[I]); + if Data <> nil then begin + Boolean(Data[0]) := True; + Inc(Data); + Move(FAutoInc, Data^, SizeOf(Longint)); + Inc(Count); + end; + end; + if Count > 0 then Inc(FAutoInc); +end; + +procedure TRxMemoryData.InternalAddRecord(Buffer: Pointer; DoAppend: Boolean); +var + RecPos: Integer; + Rec: TMemoryRecord; +begin + if DoAppend then + begin + Rec := AddRecord; + FRecordPos := FRecords.Count - 1; + end + else + begin + if FRecordPos = -1 then + RecPos := 0 + else + RecPos := FRecordPos; + Rec := InsertRecord(RecPos); + FRecordPos := RecPos; + end; + SetAutoIncFields(Buffer); + SetMemoryRecordData(Buffer, Rec.Index); +end; + +procedure TRxMemoryData.InternalDelete; +var + Accept: Boolean; +begin + Records[FRecordPos].Free; + if FRecordPos >= FRecords.Count then Dec(FRecordPos); + Accept := True; + repeat + if Filtered then Accept := RecordFilter; + if not Accept then Dec(FRecordPos); + until Accept or (FRecordPos < 0); + if FRecords.Count = 0 then FLastID := Low(Integer); +end; + +procedure TRxMemoryData.InternalPost; +var + RecPos: Integer; +begin + if State = dsEdit then + SetMemoryRecordData(ActiveBuffer, FRecordPos) + else begin + if State in [dsInsert] then SetAutoIncFields(ActiveBuffer); + if FRecordPos >= FRecords.Count then begin + SetMemoryRecordData(ActiveBuffer, AddRecord.Index); + FRecordPos := FRecords.Count - 1; + end + else begin + if FRecordPos = -1 then RecPos := 0 + else RecPos := FRecordPos; + SetMemoryRecordData(ActiveBuffer, InsertRecord(RecPos).Index); + FRecordPos := RecPos; + end; + end; +end; + +procedure TRxMemoryData.OpenCursor(InfoQuery: Boolean); +begin + if not InfoQuery then begin + if FieldCount > 0 then FieldDefs.Clear; + InitFieldDefsFromFields; + end; + FActive := True; + inherited OpenCursor(InfoQuery); +end; + +procedure TRxMemoryData.InternalOpen; +begin + BookmarkSize := SizeOf(TBookmarkData); + if DefaultFields then CreateFields; + BindFields(True); + InitBufferPointers(True); + InternalFirst; +end; + +procedure TRxMemoryData.InternalClose; +begin + ClearRecords; + FAutoInc := 1; + BindFields(False); + if DefaultFields then DestroyFields; + FreeIndexList; + FActive := False; +end; + +procedure TRxMemoryData.InternalHandleException; +begin + CustomApplication.HandleException(Self); +end; + +procedure TRxMemoryData.InternalInitFieldDefs; +begin +end; + +function TRxMemoryData.IsCursorOpen: Boolean; +begin + Result := FActive; +end; + +{ Informational } + +function TRxMemoryData.GetRecordCount: Integer; +begin + Result := FRecords.Count; +end; + +function TRxMemoryData.GetRecNo: Integer; +begin + CheckActive; + UpdateCursorPos; + if (FRecordPos = -1) and (RecordCount > 0) then Result := 1 + else Result := FRecordPos + 1; +end; + +procedure TRxMemoryData.SetRecNo(Value: Integer); +begin + if (Value > 0) and (Value <= FRecords.Count) then + begin + FRecordPos := Value - 1; + Resync([]); + end; +end; + +function TRxMemoryData.GetAnyRecField(SrcRecNo: integer; AField: TField + ): variant; +var + Data1: PChar; + I: Integer; + Item:TMemoryRecord; +begin + Item:=Records[SrcRecNo]; + Data1 := FindFieldData(Item.Data, AField); + Inc(Data1); //Skip null flag + + case AField.DataType of + ftString:Result := PChar(Data1); + ftSmallint:Result:=SmallInt(Data1^); + ftInteger, + ftDate, + ftTime, + ftAutoInc:Result:=Longint(Data1^); + ftWord:Result:=Word(Data1^); + ftBoolean:Result:=WordBool(Data1^); + ftFloat, ftCurrency:Result:=PDouble(Data1)^; + ftDateTime:Result:=PDateTime(Data1)^; + ftFixedChar:Result:=PChar(Data1); + ftWideString:Result:=PWideChar(Data1); + ftLargeint:Result:=Int64(Data1^); + ftVariant: + begin + Result := PVariant(Data1)^; + end; + ftGuid:Result:=PChar(Data1); + else + Result:=null; + end; +end; + +function TRxMemoryData.IsSequenced: Boolean; +begin + Result := not Filtered; +end; + +{ DataSet locate routines } +function DataSetLocateThrough(DataSet: TDataSet; const KeyFields: string; + const KeyValues: Variant; Options: TLocateOptions): Boolean; +var + FieldCount: Integer; + Fields: TList; + + function CompareField(Field: TField; Value: Variant): Boolean; + var + S,S1: string; + + begin + if Field.DataType = ftString then + begin + S := Field.AsString; + S1:=Value; + if (loPartialKey in Options) then + Delete(S, Length(S1) + 1, MaxInt); + + if (loCaseInsensitive in Options) then + Result := UTF8CompareText(S, S1) = 0 + else + Result := UTF8CompareStr(S, S1) = 0; + end + else Result := (Field.Value = Value); + end; + + function CompareRecord: Boolean; + var + I: Integer; + begin + if FieldCount = 1 then + Result := CompareField(TField(Fields.First), KeyValues) + else begin + Result := True; + for I := 0 to FieldCount - 1 do + Result := Result and CompareField(TField(Fields[I]), KeyValues[I]); + end; + end; +var + Bookmark: TBookmark; +begin + Result := False; + with DataSet do begin + CheckBrowseMode; + if BOF and EOF then Exit; + end; + Fields := TList.Create; + try + DataSet.GetFieldList(Fields, KeyFields); + FieldCount := Fields.Count; + Result := CompareRecord; + if Result then Exit; + DataSet.DisableControls; + try + Bookmark := DataSet.GetBookmark; + try + with DataSet do begin + First; + while not EOF do begin + Result := CompareRecord; + if Result then Break; + Next; + end; + end; + finally +{$IFDEF NoAutomatedBookmark} + if not Result and DataSet.BookmarkValid(PChar(Bookmark)) then +{$ELSE} + if not Result and DataSet.BookmarkValid(Bookmark) then +{$ENDIF} + DataSet.GotoBookmark(Bookmark); + end; + finally + DataSet.FreeBookmark(Bookmark); + DataSet.EnableControls; + end; + finally + Fields.Free; + end; +end; + +function TRxMemoryData.Locate(const KeyFields: string; + const KeyValues: Variant; Options: TLocateOptions): Boolean; +begin + DoBeforeScroll; + Result := DataSetLocateThrough(Self, KeyFields, KeyValues, Options); + if Result then + begin + DataEvent(deDataSetChange, 0); + DoAfterScroll; + end; +end; + +{ Table Manipulation } + +procedure TRxMemoryData.EmptyTable; +begin + if Active then + begin + CheckBrowseMode; + ClearRecords; + ClearBuffers; + DataEvent(deDataSetChange, 0); + end; +end; + +procedure TRxMemoryData.CloseOpen; +begin + Close; + Open; +end; + +procedure TRxMemoryData.CopyStructure(Source: TDataSet); + + procedure CheckDataTypes(FieldDefs: TFieldDefs); + var + I: Integer; + begin + for I := FieldDefs.Count - 1 downto 0 do begin + if not (FieldDefs.Items[I].DataType in ftSupported) then + FieldDefs.Items[I].Free +{$IFDEF ENABLE_Child_Defs} + else CheckDataTypes(FieldDefs[I].ChildDefs); +{$ENDIF} + end; + end; + +var + I: Integer; +begin + CheckInactive; + for I := FieldCount - 1 downto 0 do Fields[I].Free; + if (Source = nil) then Exit; + Source.FieldDefs.Update; +// FieldDefs.Assign(Source.FieldDefs); +// FieldDefs := Source.FieldDefs; + FieldDefs.Clear; + for i:=0 to Source.FieldDefs.Count-1 do + FieldDefs.Add(Source.FieldDefs[i].Name, Source.FieldDefs[i].DataType, Source.FieldDefs[i].Size, Source.FieldDefs[i].Required); + + CheckDataTypes(FieldDefs); + CreateFields; +end; +procedure AssignRecord(Source, Dest: TDataSet; ByName: Boolean); +var + I: Integer; + F, FSrc: TField; +begin +// if not (Dest.State in dsEditModes) then DBError(SNotEditing); + if ByName then begin + for I := 0 to Source.FieldCount - 1 do begin + F := Dest.FindField(Source.Fields[I].FieldName); + if F <> nil then begin + if (F.DataType = Source.Fields[I].DataType) and + (F.DataSize = Source.Fields[I].DataSize) then + F.Assign(Source.Fields[I]) + else F.AsString := Source.Fields[I].AsString; + end; + end; + end + else begin + for I := 0 to Min(Source.FieldDefs.Count - 1, Dest.FieldDefs.Count - 1) do + begin + F := Dest.FindField(Dest.FieldDefs[I].Name); + FSrc := Source.FindField(Source.FieldDefs[I].Name); + if (F <> nil) and (FSrc <> nil) then begin + if F.DataType = FSrc.DataType then F.Assign(FSrc) + else F.AsString := FSrc.AsString; + end; + end; + end; +end; + +function TRxMemoryData.LoadFromDataSet(Source: TDataSet; ARecordCount: Integer; + Mode: TLoadMode): Integer; +var + SourceActive: Boolean; + MovedCount: Integer; +begin + Result := 0; + if Source = Self then Exit; + SourceActive := Source.Active; + Source.DisableControls; + try + DisableControls; + try + Filtered := False; + with Source do begin + Open; + CheckBrowseMode; + UpdateCursorPos; + end; + if Mode = lmCopy then begin + Close; + CopyStructure(Source); + end; + FreeIndexList; + if not Active then Open; + Resync([]); + CheckBrowseMode; + if ARecordCount > 0 then MovedCount := ARecordCount + else begin + Source.First; + MovedCount := MaxInt; + end; + try + while not Source.EOF do + begin + Append; + AssignRecord(Source, Self, True); + Post; + Inc(Result); + if Result >= MovedCount then Break; + Source.Next; + end; + finally + First; + end; + finally + EnableControls; + end; + finally + if not SourceActive then Source.Close; + Source.EnableControls; + end; +end; + +function TRxMemoryData.SaveToDataSet(Dest: TDataSet; ARecordCount: Integer): Integer; +var + MovedCount: Integer; +begin + Result := 0; + if Dest = Self then Exit; + CheckBrowseMode; + UpdateCursorPos; + Dest.DisableControls; + try + DisableControls; + try + if not Dest.Active then Dest.Open + else Dest.CheckBrowseMode; + if ARecordCount > 0 then MovedCount := ARecordCount + else + begin + First; + MovedCount := MaxInt; + end; + try + while not EOF do begin + Dest.Append; + AssignRecord(Self, Dest, True); + Dest.Post; + Inc(Result); + if Result >= MovedCount then Break; + Next; + end; + finally + Dest.First; + end; + finally + EnableControls; + end; + finally + Dest.EnableControls; + end; +end; + +procedure TRxMemoryData.AppendRecord(const Values: array of const); +var + I: Integer; +begin + if State <> dsInsert then + Append; + for I := 0 to High(Values) do Fields[I].AssignValue(Values[I]); + Post; +end; + +{ Index Related } + +procedure TRxMemoryData.SortOnFields(const FieldNames: string; + CaseInsensitive: Boolean = True; Descending: Boolean = False); +begin + CreateIndexList(FieldNames); + FCaseInsensitiveSort := CaseInsensitive; + FDescendingSort := Descending; + try + Sort; + except + FreeIndexList; + raise; + end; +end; + +procedure TRxMemoryData.SortOnFieldsEx(const FieldNames: string; + CaseInsensitive: Boolean; Asc: array of boolean); +begin + +end; + +procedure TRxMemoryData.Sort; +var + Pos: TBookmark; +begin + if Active and (FRecords <> nil) and (FRecords.Count > 0) then + begin + Pos := GetBookmark; + try + QuickSort(0, FRecords.Count - 1, @CompareRecords); + SetBufListSize(0); + InitBufferPointers(False); + try + RecalcBufListSize; +// SetBufListSize(BufferCount + 1); + except + SetState(dsInactive); + CloseCursor; + raise; + end; + finally + GotoBookmark(Pos); + FreeBookmark(Pos); + end; + Resync([]); + end; +end; + +procedure TRxMemoryData.QuickSort(L, R: Integer; Compare: TCompareRecords); +var + I, J: Integer; + P: TMemoryRecord; +begin + repeat + I := L; + J := R; + P := Records[(L + R) shr 1]; + repeat + while Compare(Records[I], P) < 0 do Inc(I); + while Compare(Records[J], P) > 0 do Dec(J); + if I <= J then begin + FRecords.Exchange(I, J); + Inc(I); + Dec(J); + end; + until I > J; + if L < J then QuickSort(L, J, Compare); + L := I; + until I >= R; +end; + +procedure TRxMemoryData.SetOnFilterRecordEx(const AValue: TFilterRecordEvent); +begin + {$IFDEF FIX_TRxMemoryData_Filter} + CheckBiDirectional; + FOnFilterRecordEx:=AValue; + {$ELSE} + OnFilterRecord:=AValue; + {$ENDIF} +end; + +function TRxMemoryData.CompareRecords(Item1, Item2: TMemoryRecord): Integer; +var + Data1, Data2: PChar; + F: TField; + I: Integer; +begin + Result := 0; + if FIndexList <> nil then begin + for I := 0 to FIndexList.Count - 1 do begin + F := TField(FIndexList[I]); + Data1 := FindFieldData(Item1.Data, F); + if Data1 <> nil then begin + Data2 := FindFieldData(Item2.Data, F); + if Data2 <> nil then begin + if Boolean(Data1[0]) and Boolean(Data2[0]) then begin + Inc(Data1); + Inc(Data2); + Result := CompareFields(Data1, Data2, F.DataType, + FCaseInsensitiveSort); + end + else if Boolean(Data1[0]) then Result := 1 + else if Boolean(Data2[0]) then Result := -1; + if FDescendingSort then Result := -Result; + end; + end; + if Result <> 0 then Exit; + end; + end; + if (Result = 0) then begin + if Item1.ID > Item2.ID then Result := 1 + else if Item1.ID < Item2.ID then Result := -1; + if FDescendingSort then Result := -Result; + end; +end; + +function TRxMemoryData.GetIsIndexField(Field: TField): Boolean; +begin + if FIndexList <> nil then + Result := FIndexList.IndexOf(Field) >= 0 + else Result := False; +end; + +procedure TRxMemoryData.CreateIndexList(const FieldNames: string); +var + Pos: Integer; + F: TField; +begin + if FIndexList = nil then FIndexList := TList.Create + else FIndexList.Clear; + Pos := 1; + while Pos <= Length(FieldNames) do begin + F := FieldByName(ExtractFieldName(FieldNames, Pos)); + if (F.FieldKind = fkData) and + (F.DataType in ftSupported - ftBlobTypes) then + FIndexList.Add(F) + else ErrorFmt(SFieldTypeMismatch, [F.DisplayName]); + end; +end; + +procedure TRxMemoryData.FreeIndexList; +begin + FIndexList.Free; + FIndexList := nil; +end; + +function TRxMemoryData.IntAllocRecordBuffer: PChar; +begin + // do nothing +end; + +procedure TRxMemoryData.IntLoadFielddefsFromFile; +begin + FDatasetReader.LoadFielddefs(FieldDefs); + if DefaultFields then CreateFields; +end; + +procedure TRxMemoryData.IntLoadRecordsFromFile; +var StoreState : TDataSetState; + AddRecordBuffer : boolean; + ARowState : TRowState; + AUpdOrder : integer; + +begin + FDatasetReader.InitLoadRecords; + StoreState:=SetTempState(dsFilter); + + while FDatasetReader.GetCurrentRecord do + begin + ARowState := FDatasetReader.GetRecordRowState(AUpdOrder); + + FDatasetReader.RestoreRecord(self); + inc(FBRecordCount); + + FDatasetReader.GotoNextRecord; + end; + + RestoreState(StoreState); + + if assigned(FFileStream) then + begin + FreeAndNil(FFileStream); + FreeAndNil(FDatasetReader); + end; + +end; + +procedure TRxMemoryData.SetPacketRecords(const AValue: Integer); +begin + if FPacketRecords=AValue then exit; + FPacketRecords:=AValue; +end; + +procedure TRxMemoryData.SetDatasetPacket(AReader: TRxDataPacketReader); +var + StoreDSState : TDataSetState; + ARowState : TRowState; + AUpdOrder : integer; +begin + FDatasetReader := AReader; + + DisableControls; + try + Filtered := False; + + Close; // must be inactive to do IntLoadFielddefsFromFile + // load fields defs + IntLoadFielddefsFromFile; + + FreeIndexList; + + if not Active then Open; + Resync([]); // clears buffers if empty dataset + CheckBrowseMode; + + FDatasetReader.InitLoadRecords; + + try + while FDatasetReader.GetCurrentRecord do + begin + Append; + + ARowState := FDatasetReader.GetRecordRowState(AUpdOrder); // added for binary export + + FDatasetReader.RestoreRecord(TRxMemoryData(Self)); + + Post; + + FDatasetReader.GotoNextRecord; + inc(FBRecordCount); + + end; + finally + First; + end; + + finally + EnableControls; + end; + + if assigned(FFileStream) then + begin + FreeAndNil(FFileStream); + FreeAndNil(FDatasetReader); + end; + +end; + +procedure TRxMemoryData.GetDatasetPacket(AWriter: TRxDataPacketReader); +var + StoreDSState : TDataSetState; +begin + + CheckBrowseMode; + UpdateCursorPos; + + FDatasetReader := AWriter; + try + DisableControls; + try + + FDatasetReader.StoreFieldDefs(FieldDefs); + + First; + while not EOF do + begin + // ** NOTE ** had to cast self to TRxMemoryData just save current values + // otherwise the as string value in ex_rx_datapacket would not write. + FDatasetReader.StoreRecord(TRxMemoryData(Self),[]); + Next; + end; + + FDatasetReader.FinalizeStoreRecords; + finally + EnableControls; + end; + finally + FDatasetReader := nil; + end; +end; + +procedure TRxMemoryData.LoadFromStream(AStream: TStream; + Format: TRxDataPacketFormat); +var APacketReaderReg : TRxDatapacketReaderRegistration; + APacketReader : TRxDataPacketReader; +begin + if GetRegisterDatapacketReader(AStream,format,APacketReaderReg) then + APacketReader := APacketReaderReg.ReaderClass.create(AStream) + else + DatabaseError(SStreamNotRecognised); + try + SetDatasetPacket(APacketReader); + finally + APacketReader.Free; + end; +end; + +procedure TRxMemoryData.SaveToStream(AStream: TStream; + Format: TRxDataPacketFormat); +var APacketReaderReg : TRxDatapacketReaderRegistration; + APacketWriter : TRxDataPacketReader; +begin + if GetRegisterDatapacketReader(Nil,format,APacketReaderReg) then + APacketWriter := APacketReaderReg.ReaderClass.create(AStream) + else + DatabaseError(SNoReaderClassRegistered); + try + GetDatasetPacket(APacketWriter); + finally + APacketWriter.Free; + end; +end; + +procedure TRxMemoryData.LoadFromFile(AFileName: string; + Format: TRxDataPacketFormat); +var AFileStream : TFileStream; +begin + if AFileName='' then AFileName := FFileName; + AFileStream := TFileStream.Create(AFileName,fmOpenRead); + try + LoadFromStream(AFileStream, Format); + finally + AFileStream.Free; + end; +end; + +procedure TRxMemoryData.SaveToFile(AFileName: string; + Format: TRxDataPacketFormat); +var AFileStream : TFileStream; +begin + if AFileName='' then AFileName := FFileName; + AFileStream := TFileStream.Create(AFileName,fmCreate); + try + SaveToStream(AFileStream, Format); + finally + AFileStream.Free; + end; +end; + +{ TMemBlobStream } + +constructor TMemBlobStream.Create(Field: TBlobField; Mode: TBlobStreamMode); +begin + FMode := Mode; + FField := Field; + FDataSet := FField.DataSet as TRxMemoryData; + if not FDataSet.GetActiveRecBuf(FBuffer) then Exit; + if not FField.Modified and (Mode <> bmRead) then begin + if FField.ReadOnly then ErrorFmt(SFieldReadOnly, [FField.DisplayName]); + if not (FDataSet.State in [dsEdit, dsInsert]) then Error(SNotEditing); + FCached := True; + end + else FCached := (FBuffer = FDataSet.ActiveBuffer); + FOpened := True; + if Mode = bmWrite then Truncate; +end; + +destructor TMemBlobStream.Destroy; +begin + if FOpened and FModified then FField.Modified := True; + if FModified then + try + FDataSet.DataEvent(deFieldChange, ptrint(FField)); + except + CustomApplication.HandleException(Self); +// Application.HandleException(Self); + end; +end; + +function TMemBlobStream.GetBlobFromRecord(Field: TField): TMemBlobData; +var + Rec: TMemoryRecord; + Pos: Integer; +begin + Result := ''; + Pos := FDataSet.FRecordPos; + if (Pos < 0) and (FDataSet.RecordCount > 0) then Pos := 0 + else if Pos >= FDataSet.RecordCount then Pos := FDataSet.RecordCount - 1; + if (Pos >= 0) and (Pos < FDataSet.RecordCount) then begin + Rec := FDataSet.Records[Pos]; + if Rec <> nil then + Result := PMemBlobArray(Rec.FBlobs)^[FField.Offset]; + end; +end; + +function TMemBlobStream.Read(var Buffer; Count: Longint): Longint; +begin + Result := 0; + if FOpened then begin + if Count > Size - FPosition then Result := Size - FPosition + else Result := Count; + if Result > 0 then begin + if FCached then begin + Move(PChar(FDataSet.GetBlobData(FField, FBuffer))[FPosition], Buffer, + Result); + Inc(FPosition, Result); + end + else begin + Move(PChar(GetBlobFromRecord(FField))[FPosition], Buffer, + Result); + Inc(FPosition, Result); + end; + end; + end; +end; + +function TMemBlobStream.Write(const Buffer; Count: Longint): Longint; +var + Temp: TMemBlobData; +begin + Result := 0; + if FOpened and FCached and (FMode <> bmRead) then begin + Temp := FDataSet.GetBlobData(FField, FBuffer); + if Length(Temp) < FPosition + Count then + SetLength(Temp, FPosition + Count); + Move(Buffer, PChar(Temp)[FPosition], Count); + FDataSet.SetBlobData(FField, FBuffer, Temp); + Inc(FPosition, Count); + Result := Count; + FModified := True; + end; +end; + +function TMemBlobStream.Seek(Offset: Longint; Origin: Word): Longint; +begin + case Origin of + 0: FPosition := Offset; + 1: Inc(FPosition, Offset); + 2: FPosition := GetBlobSize + Offset; + end; + Result := FPosition; +end; + +procedure TMemBlobStream.Truncate; +begin + if FOpened and FCached and (FMode <> bmRead) then begin + FDataSet.SetBlobData(FField, FBuffer, ''); + FModified := True; + end; +end; + +function TMemBlobStream.GetBlobSize: Longint; +begin + Result := 0; + if FOpened then + if FCached then + Result := Length(FDataSet.GetBlobData(FField, FBuffer)) + else + Result := Length(GetBlobFromRecord(FField)) +end; + +end. diff --git a/components/rx/version/2.1/rxnew.lpk b/components/rx/version/2.1/rxnew.lpk new file mode 100644 index 000000000..081388420 --- /dev/null +++ b/components/rx/version/2.1/rxnew.lpk @@ -0,0 +1,336 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <Package Version="4"> + <PathDelim Value="\"/> + <Name Value="rxnew"/> + <AddToProjectUsesSection Value="True"/> + <Author Value="Lagunov Aleksey"/> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <SearchPaths> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <CStyleOperator Value="False"/> + <UseAnsiStrings Value="False"/> + </SyntaxOptions> + </Parsing> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Description Value="Delphi VCL Extensions (RX) +Copyright (c) 1998 Master-Bank +translate to Lazarus by alexs in 2005 - 2012 +"/> + <License Value="LGPL"/> + <Version Major="2" Minor="5" Release="2" Build="134"/> + <Files Count="68"> + <Item1> + <Filename Value="autopanel.pas"/> + <UnitName Value="AutoPanel"/> + </Item1> + <Item2> + <Filename Value="boxprocs.pas"/> + <UnitName Value="boxprocs"/> + </Item2> + <Item3> + <Filename Value="curredit.pas"/> + <UnitName Value="curredit"/> + </Item3> + <Item4> + <Filename Value="dateutil.pas"/> + <UnitName Value="dateutil"/> + </Item4> + <Item5> + <Filename Value="dbcurredit.pas"/> + <UnitName Value="dbcurredit"/> + </Item5> + <Item6> + <Filename Value="dbdateedit.pas"/> + <UnitName Value="dbdateedit"/> + </Item6> + <Item7> + <Filename Value="dbutils.pas"/> + <UnitName Value="dbutils"/> + </Item7> + <Item8> + <Filename Value="duallist.pas"/> + <UnitName Value="duallist"/> + </Item8> + <Item9> + <Filename Value="fduallst.pas"/> + <UnitName Value="fduallst"/> + </Item9> + <Item10> + <Filename Value="folderlister.pas"/> + <UnitName Value="folderlister"/> + </Item10> + <Item11> + <Filename Value="pagemngr.pas"/> + <UnitName Value="pagemngr"/> + </Item11> + <Item12> + <Filename Value="pickdate.pas"/> + <UnitName Value="pickdate"/> + </Item12> + <Item13> + <Filename Value="pickdate.lrs"/> + <Type Value="LRS"/> + </Item13> + <Item14> + <Filename Value="registerrx.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="registerrx"/> + </Item14> + <Item15> + <Filename Value="registerrxdb.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="RegisterRxDB"/> + </Item15> + <Item16> + <Filename Value="registerrxtools.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="RegisterRxTools"/> + </Item16> + <Item17> + <Filename Value="rx.inc"/> + <Type Value="Include"/> + </Item17> + <Item18> + <Filename Value="rxaboutdialog.pas"/> + <UnitName Value="RxAboutDialog"/> + </Item18> + <Item19> + <Filename Value="rxaboutformunit.pas"/> + <UnitName Value="rxAboutFormUnit"/> + </Item19> + <Item20> + <Filename Value="rxappicon.pas"/> + <UnitName Value="rxappicon"/> + </Item20> + <Item21> + <Filename Value="rxapputils.pas"/> + <UnitName Value="rxapputils"/> + </Item21> + <Item22> + <Filename Value="rxceeditlookupfields.pas"/> + <UnitName Value="rxceEditLookupFields"/> + </Item22> + <Item23> + <Filename Value="rxclock.pas"/> + <UnitName Value="rxclock"/> + </Item23> + <Item24> + <Filename Value="rxconfigvalues.pas"/> + <UnitName Value="rxConfigValues"/> + </Item24> + <Item25> + <Filename Value="rxconst.pas"/> + <UnitName Value="rxconst"/> + </Item25> + <Item26> + <Filename Value="rxctrls.pas"/> + <UnitName Value="rxctrls"/> + </Item26> + <Item27> + <Filename Value="rxcustomchartpanel.pas"/> + <UnitName Value="rxcustomchartpanel"/> + </Item27> + <Item28> + <Filename Value="rxdbcolorbox.pas"/> + <UnitName Value="RxDBColorBox"/> + </Item28> + <Item29> + <Filename Value="rxdbcomb.pas"/> + <UnitName Value="rxdbcomb"/> + </Item29> + <Item30> + <Filename Value="rxdbctrls.pas"/> + <UnitName Value="RxDBCtrls"/> + </Item30> + <Item31> + <Filename Value="rxdbgrid.pas"/> + <UnitName Value="rxdbgrid"/> + </Item31> + <Item32> + <Filename Value="rxdbgrid.lrs"/> + <Type Value="LRS"/> + </Item32> + <Item33> + <Filename Value="rxdbgrid_columsunit.pas"/> + <UnitName Value="rxdbgrid_columsunit"/> + </Item33> + <Item34> + <Filename Value="rxdbgrid_findunit.pas"/> + <UnitName Value="rxdbgrid_findunit"/> + </Item34> + <Item35> + <Filename Value="rxdbspinedit.pas"/> + <UnitName Value="RxDBSpinEdit"/> + </Item35> + <Item36> + <Filename Value="rxdbtimeedit.pas"/> + <UnitName Value="RxDBTimeEdit"/> + </Item36> + <Item37> + <Filename Value="rxdconst.pas"/> + <UnitName Value="rxdconst"/> + </Item37> + <Item38> + <Filename Value="rxdice.pas"/> + <UnitName Value="rxdice"/> + </Item38> + <Item39> + <Filename Value="rxfileutils.pas"/> + <UnitName Value="rxFileUtils"/> + </Item39> + <Item40> + <Filename Value="rxfilterby.pas"/> + <UnitName Value="rxfilterby"/> + </Item40> + <Item41> + <Filename Value="rxiconv.pas"/> + <UnitName Value="rxiconv"/> + </Item41> + <Item42> + <Filename Value="rxlogin.pas"/> + <UnitName Value="rxlogin"/> + </Item42> + <Item43> + <Filename Value="rxlookup.pas"/> + <UnitName Value="rxlookup"/> + </Item43> + <Item44> + <Filename Value="rxmemds.pas"/> + <UnitName Value="rxmemds"/> + </Item44> + <Item45> + <Filename Value="rxpopupunit.pas"/> + <UnitName Value="rxpopupunit"/> + </Item45> + <Item46> + <Filename Value="rxsortmemds.pas"/> + <UnitName Value="rxsortmemds"/> + </Item46> + <Item47> + <Filename Value="rxspin.pas"/> + <UnitName Value="rxspin"/> + </Item47> + <Item48> + <Filename Value="rxstrutils.pas"/> + <UnitName Value="rxstrutils"/> + </Item48> + <Item49> + <Filename Value="rxswitch.pas"/> + <UnitName Value="rxswitch"/> + </Item49> + <Item50> + <Filename Value="rxsystemservices.pas"/> + <UnitName Value="RxSystemServices"/> + </Item50> + <Item51> + <Filename Value="rxtbrsetup.pas"/> + <UnitName Value="rxtbrsetup"/> + </Item51> + <Item52> + <Filename Value="rxtimeedit.pas"/> + <UnitName Value="RxTimeEdit"/> + </Item52> + <Item53> + <Filename Value="rxtoolbar.pas"/> + <UnitName Value="rxtoolbar"/> + </Item53> + <Item54> + <Filename Value="rxversinfo.pas"/> + <UnitName Value="RxVersInfo"/> + </Item54> + <Item55> + <Filename Value="rxviewspanel.pas"/> + <UnitName Value="RxViewsPanel"/> + </Item55> + <Item56> + <Filename Value="rxxpman.pas"/> + <UnitName Value="rxxpman"/> + </Item56> + <Item57> + <Filename Value="seldsfrm.pas"/> + <UnitName Value="seldsfrm"/> + </Item57> + <Item58> + <Filename Value="tooledit.pas"/> + <UnitName Value="tooledit"/> + </Item58> + <Item59> + <Filename Value="vclutils.pas"/> + <UnitName Value="vclutils"/> + </Item59> + <Item60> + <Filename Value="rxcloseformvalidator.pas"/> + <UnitName Value="RxCloseFormValidator"/> + </Item60> + <Item61> + <Filename Value="rxhistorynavigator.pas"/> + <UnitName Value="RxHistoryNavigator"/> + </Item61> + <Item62> + <Filename Value="ex_rx_bin_datapacket.pas"/> + <UnitName Value="ex_rx_bin_datapacket"/> + </Item62> + <Item63> + <Filename Value="ex_rx_datapacket.pas"/> + <UnitName Value="ex_rx_datapacket"/> + </Item63> + <Item64> + <Filename Value="ex_rx_xml_datapacket.pas"/> + <UnitName Value="ex_rx_xml_datapacket"/> + </Item64> + <Item65> + <Filename Value="rxsortby.lfm"/> + <Type Value="LFM"/> + </Item65> + <Item66> + <Filename Value="rxsortby.pas"/> + <UnitName Value="rxsortby"/> + </Item66> + <Item67> + <Filename Value="rxmdi.pas"/> + <UnitName Value="RxMDI"/> + </Item67> + <Item68> + <Filename Value="rxinipropstorage.pas"/> + <UnitName Value="RxIniPropStorage"/> + </Item68> + </Files> + <LazDoc Paths="docs;\usr\local\share\lazarus\components\rxnew\docs"/> + <i18n> + <EnableI18N Value="True"/> + <OutDir Value="languages"/> + </i18n> + <Type Value="RunAndDesignTime"/> + <RequiredPkgs Count="4"> + <Item1> + <PackageName Value="FCL"/> + <MinVersion Major="1" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="IDEIntf"/> + </Item2> + <Item3> + <PackageName Value="LCL"/> + </Item3> + <Item4> + <PackageName Value="rx"/> + </Item4> + </RequiredPkgs> + <UsageOptions> + <UnitPath Value="$(PkgOutDir)"/> + </UsageOptions> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + </PublishOptions> + </Package> +</CONFIG> diff --git a/components/rx/version/2.1/rxnew.pas b/components/rx/version/2.1/rxnew.pas new file mode 100644 index 000000000..3008ac2a6 --- /dev/null +++ b/components/rx/version/2.1/rxnew.pas @@ -0,0 +1,34 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit rxnew; + +interface + +uses + AutoPanel, boxprocs, curredit, dateutil, dbcurredit, dbdateedit, dbutils, + duallist, fduallst, folderlister, pagemngr, pickdate, registerrx, + RegisterRxDB, RegisterRxTools, RxAboutDialog, rxAboutFormUnit, rxappicon, + rxapputils, rxceEditLookupFields, rxclock, rxConfigValues, rxconst, rxctrls, + rxcustomchartpanel, RxDBColorBox, rxdbcomb, RxDBCtrls, rxdbgrid, + rxdbgrid_columsunit, rxdbgrid_findunit, RxDBSpinEdit, RxDBTimeEdit, + rxdconst, rxdice, rxFileUtils, rxfilterby, rxiconv, rxlogin, rxlookup, + rxmemds, rxpopupunit, rxsortmemds, rxspin, rxstrutils, rxswitch, + RxSystemServices, rxtbrsetup, RxTimeEdit, rxtoolbar, RxVersInfo, + RxViewsPanel, rxxpman, seldsfrm, tooledit, vclutils, RxCloseFormValidator, + RxHistoryNavigator, ex_rx_bin_datapacket, ex_rx_datapacket, + ex_rx_xml_datapacket, rxsortby, RxMDI, RxIniPropStorage, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('registerrx', @registerrx.Register); + RegisterUnit('RegisterRxDB', @RegisterRxDB.Register); + RegisterUnit('RegisterRxTools', @RegisterRxTools.Register); +end; + +initialization + RegisterPackage('rxnew', @Register); +end. diff --git a/components/rx/version/2.1/rxpopupunit.pas b/components/rx/version/2.1/rxpopupunit.pas new file mode 100644 index 000000000..84cab8bf7 --- /dev/null +++ b/components/rx/version/2.1/rxpopupunit.pas @@ -0,0 +1,971 @@ +{ rxpopupunit unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxpopupunit; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, DB, Forms, DBGrids, rxdbgrid, LCLType, Controls, ComCtrls, + Buttons, Grids, Graphics, vclutils; + +type + TPopUpCloseEvent = procedure(AResult:boolean) of object; + TPopUpFormOptions = class; + + { TPopUpGrid } + + TPopUpGrid = class(TRxDBGrid) + private + FFindLine:string; + FLookupDisplayIndex: integer; + FLookupDisplayField:string; + procedure ClearFind; + procedure FindNextChar(var UTF8Key: TUTF8Char); + procedure FindPriorChar; + procedure SetLookupDisplayIndex(const AValue: integer); + protected + procedure SetDBHandlers(Value: boolean);override; + procedure UTF8KeyPress(var UTF8Key: TUTF8Char); override; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + property LookupDisplayIndex:integer read FLookupDisplayIndex write SetLookupDisplayIndex; + end; + + TPopUpGridOption = (pfgIndicator, pfgColLines, pfgRowLines, pfgColumnResize, + pfgColumnMove); + + TPopUpGridOptions = set of TPopUpGridOption; + + { TPopUpColumnTitle } + + TPopUpColumnTitle = class(TPersistent) + private + FAlignment: TAlignment; + FCaption: string; + FColor: TColor; + FLayout: TTextLayout; + FOrientation: TTextOrientation; + procedure SetAlignment(const AValue: TAlignment); + procedure SetCaption(const AValue: string); + procedure SetColor(const AValue: TColor); + procedure SetLayout(const AValue: TTextLayout); + procedure SetOrientation(const AValue: TTextOrientation); + public + constructor Create; + procedure Assign(Source: TPersistent); override; + published + property Orientation:TTextOrientation read FOrientation write SetOrientation; + property Alignment: TAlignment read FAlignment write SetAlignment; + property Layout: TTextLayout read FLayout write SetLayout; + property Caption: string read FCaption write SetCaption; + property Color: TColor read FColor write SetColor; + end; + + TPopUpColumn = class(TCollectionItem) + private + FAlignment: TAlignment; + FColor: TColor; + FDisplayFormat: string; + FFieldName: string; + FFont: TFont; + FImageList: TImageList; + FSizePriority: Integer; + FTitle: TPopUpColumnTitle; + FValueChecked: string; + FValueUnchecked: string; + FWidth: Integer; + procedure SetAlignment(const AValue: TAlignment); + procedure SetColor(const AValue: TColor); + procedure SetDisplayFormat(const AValue: string); + procedure SetFieldName(const AValue: string); + procedure SetFont(const AValue: TFont); + procedure SetImageList(const AValue: TImageList); + procedure SetSizePriority(AValue: Integer); + procedure SetTitle(const AValue: TPopUpColumnTitle); + procedure SetValueChecked(const AValue: string); + procedure SetValueUnchecked(const AValue: string); + procedure SetWidth(const AValue: Integer); + protected + function GetDisplayName: string; override; + public + constructor Create(ACollection: TCollection); override; + destructor Destroy; override; + published + property Alignment: TAlignment read FAlignment write SetAlignment; + property Color: TColor read FColor write SetColor; + property DisplayFormat: string read FDisplayFormat write SetDisplayFormat; + property Font: TFont read FFont write SetFont; + property FieldName:string read FFieldName write SetFieldName; + property ImageList:TImageList read FImageList write SetImageList; + property ValueChecked: string read FValueChecked write SetValueChecked; + property ValueUnchecked: string read FValueUnchecked write SetValueUnchecked; + property SizePriority: Integer read FSizePriority write SetSizePriority default 1; + property Title:TPopUpColumnTitle read FTitle write SetTitle; + property Width: Integer read FWidth write SetWidth; + end; + + { TPopUpFormColumns } + + TPopUpFormColumns = class(TOwnedCollection) + private + FPopUpFormOptions: TPopUpFormOptions; + function GetPopUpColumn(Index: Integer): TPopUpColumn; + procedure SetPopUpColumn(Index: Integer; const AValue: TPopUpColumn); + public + Constructor Create(AOwner: TPersistent); + procedure Assign(Source: TPersistent); override; + property PopUpFormOptions:TPopUpFormOptions read FPopUpFormOptions write FPopUpFormOptions; + property Items[Index: Integer]: TPopUpColumn read GetPopUpColumn write SetPopUpColumn; default; + end; + + { TPopUpFormOptions } + + TPopUpFormOptions = class(TPersistent) + private + FAutoFillColumns: boolean; + FAutoSort: boolean; + FBorderStyle: TBorderStyle; + FColumns: TPopUpFormColumns; + FDataSource: TDataSource; + FDropDownCount: integer; + FDropDownWidth: integer; + FOnGetCellProps: TGetCellPropsEvent; + FOptions: TPopUpGridOptions; + FShowTitles: boolean; + FTitleButtons: boolean; + FTitleStyle: TTitleStyle; + FOwner:TPersistent; + function GetColumns: TPopUpFormColumns; + procedure SetAutoFillColumns(const AValue: boolean); + procedure SetAutoSort(const AValue: boolean); + procedure SetColumns(const AValue: TPopUpFormColumns); + procedure SetDropDownCount(const AValue: integer); + procedure SetDropDownWidth(const AValue: integer); + procedure SetOptions(const AValue: TPopUpGridOptions); + procedure SetShowTitles(const AValue: boolean); + procedure SetTitleButtons(const AValue: boolean); + procedure SetTitleStyle(const AValue: TTitleStyle); + protected + function GetOwner: TPersistent; dynamic; + public + constructor Create(AOwner:TPersistent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + property DataSource:TDataSource read FDataSource write FDataSource; + published + property AutoFillColumns:boolean read FAutoFillColumns write SetAutoFillColumns default false; + property AutoSort:boolean read FAutoSort write SetAutoSort default false; + property BorderStyle: TBorderStyle read FBorderStyle write FBorderStyle default bsNone; + property Columns:TPopUpFormColumns read GetColumns write SetColumns; + property DropDownCount:integer read FDropDownCount write SetDropDownCount default 8; + property DropDownWidth:integer read FDropDownWidth write SetDropDownWidth default 0; + property Options:TPopUpGridOptions read FOptions write SetOptions default [pfgColLines, pfgRowLines]; + property ShowTitles:boolean read FShowTitles write SetShowTitles default false; + property TitleButtons:boolean read FTitleButtons write SetTitleButtons default false; + property TitleStyle:TTitleStyle read FTitleStyle write SetTitleStyle default tsLazarus; + property OnGetCellProps: TGetCellPropsEvent read FOnGetCellProps + write FOnGetCellProps; + end; + + { TPopUpForm } + TPopUpForm = class(TForm) + private + CloseBtn: TBitBtn; + FFindResult:boolean; + FGrid:TPopUpGrid; + FDataSource:TDataSource; + FOnPopUpCloseEvent:TPopUpCloseEvent; + FPopUpFormOptions:TPopUpFormOptions; + FRowCount:word; + WControl:TWinControl; + function GetDataSet: TDataSet; + function GetLookupDisplayIndex: integer; + procedure SetDataSet(const AValue: TDataSet); + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); + procedure SetLookupDisplayIndex(const AValue: integer); + protected + FFieldList:string; + procedure Deactivate; override; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure GridDblClick(Sender: TObject); + procedure GridClickEvent(Column: TColumn); + procedure CloseOk; + procedure Paint;override; + procedure CreateWnd;override; + // + procedure DoSetFieldsFromString(FL:string); + procedure DoSetFieldsFromColList; + public + procedure UTF8KeyPress(var UTF8Key: TUTF8Char); override; + constructor CreatePopUp(AOwner: TComponent; + APopUpFormOptions:TPopUpFormOptions; AFieldList:string; BtnWidtn:integer); + destructor Destroy; override; + property DataSet:TDataSet read GetDataSet write SetDataSet; + property LookupDisplayIndex:integer read GetLookupDisplayIndex write SetLookupDisplayIndex; + end; + +function ShowRxDBPopUpForm(AControl:TWinControl; ADataSet:TDataSet; + AOnPopUpCloseEvent:TPopUpCloseEvent; APopUpFormOptions:TPopUpFormOptions; + AFieldList:string; ALookupDisplayIndex, BtnWidtn: integer; const Font:TFont):TPopUpForm; + +procedure FillPopupWidth(APopUpFormOptions:TPopUpFormOptions; ARxPopUpForm:TPopUpForm); + +implementation +uses dbutils, math, LCLProc; + +function ShowRxDBPopUpForm(AControl:TWinControl; ADataSet:TDataSet; + AOnPopUpCloseEvent:TPopUpCloseEvent; APopUpFormOptions:TPopUpFormOptions; + AFieldList:string; ALookupDisplayIndex, BtnWidtn: integer; const Font:TFont):TPopUpForm; +begin + Result:=TPopUpForm.CreatePopUp(AControl, APopUpFormOptions, AFieldList, BtnWidtn); + Result.FOnPopUpCloseEvent:=AOnPopUpCloseEvent; + Result.DataSet:=ADataSet; + Result.LookupDisplayIndex:=ALookupDisplayIndex; + + Result.WControl:=AControl; + + if Assigned(Font) then + begin + Result.FGrid.Font.Assign(Font); + end; + +{$IFDEF LINUX} +{ if Result.ShowModal = mrOk then + if Assigned(AOnPopUpCloseEvent) then + AOnPopUpCloseEvent(true); + Result.Free; + Result:=nil;} +{$ELSE LINUX} + Result.Show; + Result.FGrid.UpdateActive; +{$ENDIF LINUX} +end; + +procedure FillPopupWidth(APopUpFormOptions: TPopUpFormOptions; + ARxPopUpForm: TPopUpForm); +var + i, w:integer; +begin + w:=Min(APopUpFormOptions.Columns.Count, ARxPopUpForm.FGrid.Columns.Count); + for i:=0 to w-1 do + begin + APopUpFormOptions.Columns[i].Width:=ARxPopUpForm.FGrid.Columns[i].Width; + end; +end; + +{ TPopUpForm } +procedure TPopUpForm.SetDataSet(const AValue: TDataSet); +begin + if FDataSource.DataSet=AValue then exit; + FDataSource.DataSet:=AValue; + if FPopUpFormOptions.Columns.Count>0 then + DoSetFieldsFromColList + else + DoSetFieldsFromString(FFieldList); +end; + +procedure TPopUpForm.FormClose(Sender: TObject; var CloseAction: TCloseAction); +begin + CloseAction:=caFree; + if (ModalResult <> mrOk) and Assigned(FOnPopUpCloseEvent) then + FOnPopUpCloseEvent(FFindResult); +end; + +procedure TPopUpForm.SetLookupDisplayIndex(const AValue: integer); +begin + FGrid.LookupDisplayIndex:=AValue; +end; + +function TPopUpForm.GetDataSet: TDataSet; +begin + Result:=FDataSource.DataSet; +end; + +function TPopUpForm.GetLookupDisplayIndex: integer; +begin + Result:=FGrid.FLookupDisplayIndex; +end; + +procedure TPopUpForm.Deactivate; +begin + inherited Deactivate; + if (ModalResult = mrOk) and Assigned(FOnPopUpCloseEvent) then + FOnPopUpCloseEvent(FFindResult); + Close; +end; + +procedure TPopUpForm.KeyDown(var Key: Word; Shift: TShiftState); +begin + case Key of + VK_ESCAPE:Deactivate; + VK_RETURN:begin + Key:=0; + Shift:=[]; + CloseOk; + exit;{In that case we need to exit away.} + end; + else + inherited KeyDown(Key, Shift); + end; + FGrid.KeyDown(Key, Shift); +// Key:=0; + Invalidate; +end; + +procedure TPopUpForm.UTF8KeyPress(var UTF8Key: TUTF8Char); +begin + inherited UTF8KeyPress(UTF8Key); + FGrid.UTF8KeyPress(UTF8Key); +end; + +procedure TPopUpForm.GridDblClick(Sender: TObject); +begin + CloseOk; +end; + +procedure TPopUpForm.GridClickEvent(Column: TColumn); +begin + CloseOk; +end; + +procedure TPopUpForm.CloseOk; +begin + FFindResult:=true; +{$IFDEF LINUX} + ModalResult:=mrOk; +{$ELSE LINUX} + Deactivate; +{$ENDIF LINUX} +end; + +procedure TPopUpForm.Paint; +var + CR:TRect; +begin + inherited Paint; + if FPopUpFormOptions.BorderStyle<>bsNone then + begin + CR:=ClientRect; + RxFrame3D(Canvas, CR, clBtnHighlight, clWindowFrame, 1); + RxFrame3D(Canvas, CR, clBtnFace, clBtnShadow, 1); + end + else + begin + Canvas.Pen.Color:=clWindowText; + Canvas.Pen.Style := psSolid; + Canvas.Rectangle(0, 0, Width-1, Height-1) + end; +end; + +procedure TPopUpForm.CreateWnd; +begin + inherited CreateWnd; + Height:=FGrid.DefaultRowHeight * FRowCount; +end; + +procedure TPopUpForm.DoSetFieldsFromString(FL: string); +var + FieldName:string; + GK:TRxColumn; + K:integer; +begin + while (FL<>'') do + begin + K:=Pos(';', FL); + if K<>0 then + begin + FieldName:=Copy(FL, 1, K-1); + Delete(FL, 1, K); + end + else + begin + FieldName:=FL; + FL:=''; + end; + GK:=FGrid.Columns.Add as TRxColumn; + GK.Field:=FGrid.DataSource.DataSet.FieldByName(FieldName); + end; +end; + +procedure TPopUpForm.DoSetFieldsFromColList; +var + GK:TRxColumn; + i:integer; + Column:TPopUpColumn; +begin + FGrid.BeginUpdate; + for i:=0 to FPopUpFormOptions.Columns.Count - 1 do + begin + GK:=FGrid.Columns.Add as TRxColumn; + Column:=FPopUpFormOptions.Columns[i]; + GK.Field:=FGrid.DataSource.DataSet.FieldByName(Column.FieldName); + GK.Alignment:=Column.Alignment; + GK.Color:=Column.Color; + GK.DisplayFormat:=Column.DisplayFormat; +// GK.Font:=Column.Font; + GK.ImageList:=Column.ImageList; + GK.SizePriority:=Column.SizePriority; + GK.ValueChecked:=Column.ValueChecked; + GK.ValueUnchecked:=Column.ValueUnchecked; + + if Column.Width<>0 then + GK.Width:=Column.Width; + + GK.Title.Color:=Column.Title.Color; + (GK.Title as TRxColumnTitle).Orientation:=Column.Title.Orientation; + GK.Title.Alignment:=Column.Title.Alignment; + GK.Title.Layout:=Column.Title.Layout; + GK.Title.Caption:=Column.Title.Caption; + end; + FGrid.EndUpdate; +end; + +constructor TPopUpForm.CreatePopUp(AOwner: TComponent; + APopUpFormOptions:TPopUpFormOptions; AFieldList:string; BtnWidtn:integer); +var + PopupOrigin:TPoint; +begin + inherited CreateNew(nil); +// inherited Create(AOwner); + BorderStyle := bsNone; + Caption:='RxPopUp'; + KeyPreview:=true; + Visible := false; + FDataSource:=TDataSource.Create(Self); + FPopUpFormOptions:=APopUpFormOptions; + FFieldList:=AFieldList; + OnClose := @FormClose; + +{$IFDEF LINUX} + PopupOrigin:=TCustomControl(AOwner).Parent.ControlToScreen(Point(TCustomControl(AOwner).Left, TCustomControl(AOwner).Height + TCustomControl(AOwner).Top)); +{$ELSE} + PopupOrigin:=TCustomControl(AOwner).ControlToScreen(Point(0, TCustomControl(AOwner).Height)); +{$ENDIF} + Top:=PopupOrigin.y; + Left:=PopupOrigin.x; + + if FPopUpFormOptions.DropDownWidth = 0 then + Width:=TCustomControl(AOwner).Width + BtnWidtn + else + Width:=FPopUpFormOptions.DropDownWidth; + +{$IFDEF LINUX} + CloseBtn:=TBitBtn.Create(Self); + CloseBtn.Parent:=Self; + CloseBtn.Align:=alBottom; + CloseBtn.Kind:=bkCancel; +{$ENDIF} + FGrid:=TPopUpGrid.Create(Self); + FGrid.Parent:=Self; + FGrid.ReadOnly:=true; + FGrid.Options:=FGrid.Options - [dgEditing]; + FGrid.DataSource:=FDataSource; + FGrid.OnDblClick:=@GridDblClick; + FGrid.OnCellClick:=@GridClickEvent; + if FPopUpFormOptions.BorderStyle = bsSingle then + begin + FGrid.Top:=2; + FGrid.Left:=2; + FGrid.Width:=Width - 4; +{$IFDEF LINUX} + FGrid.Height:=Height - CloseBtn.Height - 2; +{$ELSE} + FGrid.Height:=Height - 4; +{$ENDIF} + FGrid.Anchors:=[akLeft, akRight, akTop, akBottom]; + end + else + begin + FGrid.Top:=1; + FGrid.Left:=1; + FGrid.Width:=Width - 3; +{$IFDEF LINUX} + FGrid.Height:=Height - CloseBtn.Height - 2; +{$ELSE} + FGrid.Height:=Height - 3; +{$ENDIF} + FGrid.Anchors:=[akLeft, akRight, akTop, akBottom]; + end; + //Set options + if not (pfgIndicator in FPopUpFormOptions.FOptions) then + begin + FGrid.Options:=FGrid.Options - [dgIndicator]; + FGrid.FixedCols:=0; + end; + + if not (pfgColLines in FPopUpFormOptions.FOptions) then + FGrid.Options:=FGrid.Options - [dgColLines]; + + if not (pfgRowLines in FPopUpFormOptions.FOptions) then + FGrid.Options:=FGrid.Options - [dgRowLines]; + + if not (pfgColumnResize in FPopUpFormOptions.FOptions) then + FGrid.Options:=FGrid.Options - [dgColumnResize]; + + if not (pfgColumnMove in FPopUpFormOptions.FOptions) then + FGrid.Options:=FGrid.Options - [dgColumnMove]; + + if FPopUpFormOptions.ShowTitles then + FGrid.Options:=FGrid.Options + [dgTitles] + else + FGrid.Options:=FGrid.Options - [dgTitles]; + + FGrid.AutoSort:=FPopUpFormOptions.AutoSort; + FGrid.TitleButtons:=FPopUpFormOptions.TitleButtons; + FGrid.TitleStyle:=FPopUpFormOptions.TitleStyle; + FGrid.BorderStyle:=FPopUpFormOptions.BorderStyle; + FGrid.OnGetCellProps:=FPopUpFormOptions.OnGetCellProps; + FGrid.AutoFillColumns:=FPopUpFormOptions.AutoFillColumns; + if FPopUpFormOptions.DropDownCount < 1 then + FRowCount:=10 + ord(dgTitles in FGrid.Options) + else + FRowCount:=FPopUpFormOptions.DropDownCount + 2 + ord(dgTitles in FGrid.Options); +end; + +destructor TPopUpForm.Destroy; +begin + FGrid.DataSource:=nil; + inherited Destroy; +end; + +{ TPopUpFormOptions } + +procedure TPopUpFormOptions.SetAutoSort(const AValue: boolean); +begin + if FAutoSort=AValue then exit; + FAutoSort:=AValue; +end; + +function TPopUpFormOptions.GetColumns: TPopUpFormColumns; +begin + Result:=FColumns; +end; + +procedure TPopUpFormOptions.SetAutoFillColumns(const AValue: boolean); +begin + if FAutoFillColumns=AValue then exit; + FAutoFillColumns:=AValue; +end; + +procedure TPopUpFormOptions.SetColumns(const AValue: TPopUpFormColumns); +begin + FColumns.Assign(AValue); +end; + +procedure TPopUpFormOptions.SetDropDownCount(const AValue: integer); +begin + if FDropDownCount=AValue then exit; + FDropDownCount:=AValue; +end; + +procedure TPopUpFormOptions.SetDropDownWidth(const AValue: integer); +begin + if FDropDownWidth=AValue then exit; + FDropDownWidth:=AValue; +end; + +procedure TPopUpFormOptions.SetOptions(const AValue: TPopUpGridOptions); +begin + if FOptions=AValue then exit; + FOptions:=AValue; +end; + +procedure TPopUpFormOptions.SetShowTitles(const AValue: boolean); +begin + if FShowTitles=AValue then exit; + FShowTitles:=AValue; +end; + +procedure TPopUpFormOptions.SetTitleButtons(const AValue: boolean); +begin + if FTitleButtons=AValue then exit; + FTitleButtons:=AValue; +end; + +procedure TPopUpFormOptions.SetTitleStyle(const AValue: TTitleStyle); +begin + if FTitleStyle=AValue then exit; + FTitleStyle:=AValue; +end; + +function TPopUpFormOptions.GetOwner: TPersistent; +begin + Result:=FOwner; +end; + +constructor TPopUpFormOptions.Create(AOwner: TPersistent); +begin + FOwner:=AOwner; + inherited Create; + FAutoSort:=false; + FDropDownCount:=8; + FDropDownWidth:=0; + FOptions:=[pfgColLines, pfgRowLines]; + FShowTitles:=false; + FTitleButtons:=false; + FTitleStyle:=tsLazarus; + FBorderStyle:=bsNone; + FColumns:=TPopUpFormColumns.Create(AOwner); + FColumns.FPopUpFormOptions:=Self; +end; + +destructor TPopUpFormOptions.Destroy; +begin + FreeAndNil(FColumns); + inherited Destroy; +end; + +procedure TPopUpFormOptions.Assign(Source: TPersistent); +begin + if Source is TPopUpFormOptions then + begin + FAutoSort:=TPopUpFormOptions(Source).FAutoSort; + FDropDownCount:=TPopUpFormOptions(Source).FDropDownCount; + FDropDownWidth:=TPopUpFormOptions(Source).FDropDownWidth; + FOptions:=TPopUpFormOptions(Source).FOptions; + FShowTitles:=TPopUpFormOptions(Source).FShowTitles; + FTitleButtons:=TPopUpFormOptions(Source).FTitleButtons; + FTitleStyle:=TPopUpFormOptions(Source).FTitleStyle; + FBorderStyle:=TPopUpFormOptions(Source).FBorderStyle; + end + else + inherited Assign(Source); +end; + +{ TPopUpColumnTitle } + + +procedure TPopUpColumnTitle.SetAlignment(const AValue: TAlignment); +begin + FAlignment:=AValue; +end; + +procedure TPopUpColumnTitle.SetCaption(const AValue: string); +begin + FCaption:=AValue; +end; + +procedure TPopUpColumnTitle.SetColor(const AValue: TColor); +begin + FColor:=AValue; +end; + +procedure TPopUpColumnTitle.SetLayout(const AValue: TTextLayout); +begin + FLayout:=AValue; +end; + +procedure TPopUpColumnTitle.SetOrientation(const AValue: TTextOrientation); +begin + if FOrientation=AValue then exit; + FOrientation:=AValue; +end; + +constructor TPopUpColumnTitle.Create; +begin + inherited Create; + FColor:=clBtnFace; +{$IFDEF NEW_STYLE_TITLE_ALIGNMENT_RXDBGRID} + Alignment:=taCenter; +{$ENDIF} +end; + +procedure TPopUpColumnTitle.Assign(Source: TPersistent); +begin + if Source is TPopUpColumnTitle then + begin + FAlignment:=TPopUpColumnTitle(Source).FAlignment; + FCaption:=TPopUpColumnTitle(Source).FCaption; + FColor:=TPopUpColumnTitle(Source).FColor; + FLayout:=TPopUpColumnTitle(Source).FLayout; + FOrientation:=TPopUpColumnTitle(Source).FOrientation; + end + else + inherited Assign(Source); +end; + +{ TPopUpColumn } + +procedure TPopUpColumn.SetAlignment(const AValue: TAlignment); +begin + if FAlignment=AValue then exit; + FAlignment:=AValue; +end; + +procedure TPopUpColumn.SetColor(const AValue: TColor); +begin + if FColor=AValue then exit; + FColor:=AValue; +end; + +procedure TPopUpColumn.SetDisplayFormat(const AValue: string); +begin + if FDisplayFormat=AValue then exit; + FDisplayFormat:=AValue; +end; + +procedure TPopUpColumn.SetFieldName(const AValue: string); +begin + if FFieldName=AValue then exit; + if (FTitle.Caption = '') or (FTitle.Caption = FFieldName) then + FTitle.Caption:=AValue; + FFieldName:=AValue; +end; + +procedure TPopUpColumn.SetFont(const AValue: TFont); +begin + if FFont=AValue then exit; + FFont:=AValue; +end; + +procedure TPopUpColumn.SetImageList(const AValue: TImageList); +begin + if FImageList=AValue then exit; + FImageList:=AValue; +end; + +procedure TPopUpColumn.SetSizePriority(AValue: Integer); +begin + if FSizePriority=AValue then Exit; + FSizePriority:=AValue; +end; + +procedure TPopUpColumn.SetTitle(const AValue: TPopUpColumnTitle); +begin + FTitle.Assign(AValue); +end; + +procedure TPopUpColumn.SetValueChecked(const AValue: string); +begin + if FValueChecked=AValue then exit; + FValueChecked:=AValue; +end; + +procedure TPopUpColumn.SetValueUnchecked(const AValue: string); +begin + if FValueUnchecked=AValue then exit; + FValueUnchecked:=AValue; +end; + +procedure TPopUpColumn.SetWidth(const AValue: Integer); +begin + if FWidth=AValue then exit; + FWidth:=AValue; +end; + +function TPopUpColumn.GetDisplayName: string; +begin + if FFieldName<>'' then + begin + Result:=FFieldName; + if FTitle.Caption<>'' then + Result:=FTitle.Caption+' -> '+FFieldName; + end + else + Result:=inherited GetDisplayName; +end; + +constructor TPopUpColumn.Create(ACollection: TCollection); +begin + inherited Create(ACollection); + FTitle:=TPopUpColumnTitle.Create; + FColor:=clWindow; + FWidth:=65; + FSizePriority:=1; +end; + +destructor TPopUpColumn.Destroy; +begin + FreeAndNil(FTitle); + inherited Destroy; +end; + +{ TPopUpFormColumns } + +function TPopUpFormColumns.GetPopUpColumn(Index: Integer): TPopUpColumn; +begin + Result := TPopUpColumn( inherited Items[Index] ); +end; + +procedure TPopUpFormColumns.SetPopUpColumn(Index: Integer; + const AValue: TPopUpColumn); +begin + Items[Index].Assign( AValue ); +end; + +constructor TPopUpFormColumns.Create(AOwner: TPersistent); +begin + inherited Create(AOwner, TPopUpColumn); +end; + +procedure TPopUpFormColumns.Assign(Source: TPersistent); +var + i: integer; +begin + if Source is TPopUpFormColumns then + begin + Clear; + for i := 0 to TPopUpFormColumns(Source).Count-1 do + begin + with Add do + Assign(TPopUpFormColumns(Source)[i]); + end; + end else + inherited Assign(Source); +end; + +{ TPopUpGrid } + +procedure TPopUpGrid.ClearFind; +begin + TPopUpForm(Owner).WControl.Caption:=' '; + TPopUpForm(Owner).WControl.Repaint; + FFindLine:=''; + if DatalinkActive then + DataSource.DataSet.First; +end; + +procedure TPopUpGrid.FindNextChar(var UTF8Key: TUTF8Char); +var + F:TField; + V:boolean; +begin + if DatalinkActive then + begin + F:=Columns[FLookupDisplayIndex].Field; + if F.DataType in StringTypes then + V:=true + else + begin + if Length(UTF8Key) = 1 then + V:=F.IsValidChar(UTF8Key[1]) + else + V:=false; + end; + if V then + begin + if DataSetLocateThrough(DataSource.DataSet, FLookupDisplayField, FFindLine + UTF8Key, [loCaseInsensitive, loPartialKey]) then + begin +// TPopUpForm(Owner).WControl.Caption:=FFindLine; +// TPopUpForm(Owner).WControl.Repaint; + end; + + FFindLine:=FFindLine + UTF8Key; + TPopUpForm(Owner).WControl.Caption:=FFindLine; + TPopUpForm(Owner).WControl.Repaint; + end; + UTF8Key:=''; + end; +end; + +procedure TPopUpGrid.FindPriorChar; +var + F:string; +begin + if (FFindLine = '') or (not DatalinkActive) then exit; + F:=FFindLine; + UTF8Delete(FFindLine, UTF8Length(FFindLine), 1); + if (FFindLine<>'') then + begin + if DataSetLocateThrough(DataSource.DataSet, FLookupDisplayField, FFindLine, [loCaseInsensitive, loPartialKey]) then + begin +// TPopUpForm(Owner).WControl.Caption:=FFindLine; +// TPopUpForm(Owner).WControl.Repaint; + end; +// else +// FFindLine:=F; + + //FFindLine:=FFindLine + UTF8Key; + TPopUpForm(Owner).WControl.Caption:=FFindLine; + TPopUpForm(Owner).WControl.Repaint; + + end + else + begin + TPopUpForm(Owner).WControl.Caption:=' '; + TPopUpForm(Owner).WControl.Repaint; + DataSource.DataSet.First; + end; +end; + +procedure TPopUpGrid.SetLookupDisplayIndex(const AValue: integer); +begin + FLookupDisplayIndex:=AValue; + FLookupDisplayField:=Columns[FLookupDisplayIndex].FieldName; +end; + +procedure TPopUpGrid.SetDBHandlers(Value: boolean); +begin + // +end; + +procedure TPopUpGrid.UTF8KeyPress(var UTF8Key: TUTF8Char); +begin + inherited UTF8KeyPress(UTF8Key); + if UTF8Key>=#32 then + FindNextChar(UTF8Key) + else + if UTF8Key = #8 then + ClearFind + else + exit; + UTF8Key:=''; +end; + +procedure TPopUpGrid.KeyDown(var Key: Word; Shift: TShiftState); +begin + if Key = VK_DELETE then + begin + ClearFind; + Key:=0; + end + else + if Key = VK_BACK then + begin + FindPriorChar; + Key:=0; + end + else + begin + if Key in [VK_UP,VK_DOWN,VK_PRIOR,VK_NEXT] then + begin + FFindLine:=''; + TPopUpForm(Owner).WControl.Caption:=''; + TPopUpForm(Owner).WControl.Repaint; + end; + inherited KeyDown(Key, Shift); + end; +end; + +end. + diff --git a/components/rx/version/2.1/rxsortby.lfm b/components/rx/version/2.1/rxsortby.lfm new file mode 100644 index 000000000..b670be3b7 --- /dev/null +++ b/components/rx/version/2.1/rxsortby.lfm @@ -0,0 +1,233 @@ +object rxSortByForm: TrxSortByForm + Left = 450 + Height = 398 + Top = 243 + Width = 684 + ActiveControl = AddBtn + Caption = 'Sort by fields' + ClientHeight = 398 + ClientWidth = 684 + OnCreate = FormCreate + Position = poScreenCenter + LCLVersion = '1.1' + object Label1: TLabel + AnchorSideLeft.Control = AddBtn + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Owner + Left = 417 + Height = 15 + Top = 6 + Width = 105 + BorderSpacing.Around = 6 + Caption = '&Fields for sorting:' + FocusControl = ListBox1 + ParentColor = False + end + object Label2: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 15 + Top = 6 + Width = 55 + BorderSpacing.Around = 6 + Caption = '&All fields:' + FocusControl = ListBox2 + ParentColor = False + end + object ListBox2: TListBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = AddBtn + AnchorSideBottom.Control = CheckBox1 + Left = 6 + Height = 289 + Top = 27 + Width = 262 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + ItemHeight = 0 + OnDblClick = ListBox2DblClick + ScrollWidth = 260 + TabOrder = 0 + TopIndex = -1 + end + object RemoveBtn: TBitBtn + AnchorSideLeft.Control = AddBtn + AnchorSideTop.Control = AddBtn + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = AddBtn + AnchorSideRight.Side = asrBottom + Left = 274 + Height = 35 + Top = 68 + Width = 137 + Anchors = [akTop, akLeft, akRight] + AutoSize = True + BorderSpacing.Top = 6 + Caption = '&Remove' + Glyph.Data = { + 8A010000424D8A01000000000000760000002800000018000000170000000100 + 0400000000001401000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + C80000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777777777777777777877777777777777777777770077777777777777 + 7777777090777777777777777777770990777777777777777777709990777777 + 7777777777770999907777777777777777709999900000008777777777099999 + 999999990777777770999999999999990777777709999999999999990777777F + 999999999999999907777777F999999999999999077777777F99999999999999 + 0777777777F999999999999907777777777F999998FFFFFF877777777777F999 + 987777777777777777777F999877777777777777777777F99877777777777777 + 7777777F987777777777777777777777F877777777777777777777777F777777 + 7777777777777777777777777777 + } + OnClick = RemoveBtnClick + TabOrder = 2 + end + object UpBtn: TBitBtn + AnchorSideLeft.Control = AddBtn + AnchorSideTop.Control = RemoveBtn + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = AddBtn + AnchorSideRight.Side = asrBottom + Left = 274 + Height = 36 + Top = 109 + Width = 137 + Anchors = [akTop, akLeft, akRight] + AutoSize = True + BorderSpacing.Top = 6 + Caption = 'M&ove up' + Glyph.Data = { + 96010000424D9601000000000000760000002800000017000000180000000100 + 0400000000002001000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + C80000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777707777777777777777777777707777777777777777777777707777 + 77780000000877777770777777709999999F77777770777777709999999F7777 + 7770777777709999999F77777770777777709999999F77777770777777709999 + 999F77777770777777709999999F77777770780000009999999888888F707709 + 9999999999999999F7707770999999999999999F7770777709999999999999F7 + 777077777099999999999F7777707777770999999999F7777770777777709999 + 999F7777777077777777099999F7777777707777777770999F77777777707777 + 77777709F7777777777077777777777F77777777777077777777777777777777 + 7770777777777777777777777770777777777777777777777770 + } + OnClick = UpBtnClick + TabOrder = 3 + end + object DownBtn: TBitBtn + AnchorSideLeft.Control = AddBtn + AnchorSideTop.Control = UpBtn + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = AddBtn + AnchorSideRight.Side = asrBottom + Left = 274 + Height = 36 + Top = 151 + Width = 137 + Anchors = [akTop, akLeft, akRight] + AutoSize = True + BorderSpacing.Top = 6 + Caption = '&Move down' + Glyph.Data = { + 96010000424D9601000000000000760000002800000017000000180000000100 + 0400000000002001000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + C80000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777707777777777777777777777707777777777777777777777707777 + 7777777F777777777770777777777709F777777777707777777770999F777777 + 777077777777099999F777777770777777709999999F77777770777777099999 + 9999F777777077777099999999999F777770777709999999999999F777707770 + 999999999999999F777077099999999999999999F77078000000999999988888 + 8F70777777709999999F77777770777777709999999F77777770777777709999 + 999F77777770777777709999999F77777770777777709999999F777777707777 + 77709999999F7777777077777778000000087777777077777777777777777777 + 7770777777777777777777777770777777777777777777777770 + } + OnClick = DownBtnClick + TabOrder = 4 + end + object ListBox1: TListBox + AnchorSideLeft.Control = AddBtn + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = CheckBox1 + Left = 417 + Height = 289 + Top = 27 + Width = 261 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + ItemHeight = 0 + OnDblClick = SpeedButton1Click + OnDrawItem = ListBox1DrawItem + ScrollWidth = 259 + Style = lbOwnerDrawFixed + TabOrder = 5 + TopIndex = -1 + end + object AddBtn: TBitBtn + AnchorSideLeft.Control = Owner + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = ListBox1 + Left = 274 + Height = 35 + Top = 27 + Width = 137 + AutoSize = True + Caption = '&Add field to sort' + Glyph.Data = { + 8A010000424D8A01000000000000760000002800000018000000170000000100 + 0400000000001401000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + C80000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777777777777777877777777777777777777777007777777777777777 + 7777770907777777777777777777770990777777777777777777770999077777 + 7777777777777709999077777777777800000009999907777777777099999999 + 9999907777777770999999999999990777777770999999999999999077777770 + 9999999999999999F7777770999999999999999F7777777099999999999999F7 + 777777709999999999999F7777777778FFFFFF899999F7777777777777777789 + 999F7777777777777777778999F7777777777777777777899F77777777777777 + 77777789F7777777777777777777778F7777777777777777777777F777777777 + 7777777777777777777777777777 + } + Layout = blGlyphRight + OnClick = AddBtnClick + TabOrder = 1 + end + object ButtonPanel1: TButtonPanel + Left = 6 + Height = 42 + Top = 350 + Width = 672 + OKButton.Name = 'OKButton' + OKButton.DefaultCaption = True + HelpButton.Name = 'HelpButton' + HelpButton.DefaultCaption = True + CloseButton.Name = 'CloseButton' + CloseButton.DefaultCaption = True + CancelButton.Name = 'CancelButton' + CancelButton.DefaultCaption = True + TabOrder = 6 + ShowButtons = [pbOK, pbCancel, pbHelp] + end + object CheckBox1: TCheckBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Side = asrBottom + AnchorSideBottom.Control = ButtonPanel1 + Left = 6 + Height = 22 + Top = 322 + Width = 151 + Anchors = [akLeft, akBottom] + BorderSpacing.Around = 6 + Caption = 'Case insensitive sort' + Enabled = False + TabOrder = 7 + end +end diff --git a/components/rx/version/2.1/rxsortby.lrt b/components/rx/version/2.1/rxsortby.lrt new file mode 100644 index 000000000..2f77b671d --- /dev/null +++ b/components/rx/version/2.1/rxsortby.lrt @@ -0,0 +1,10 @@ +TRXSORTBYFORM.CAPTION=rxSortByForm +TRXSORTBYFORM.LABEL1.CAPTION=&Orden de Ordenamiento : +TRXSORTBYFORM.LABEL2.CAPTION=&Campos Disponibles : +TRXSORTBYFORM.LABEL4.CAPTION=Seleccionar Dirección de Ordenamiento : +TRXSORTBYFORM.REMOVEBTN.CAPTION=&Eliminar +TRXSORTBYFORM.UPBTN.CAPTION=A&rriba +TRXSORTBYFORM.DOWNBTN.CAPTION=A&bajo +TRXSORTBYFORM.OKBUTTON.CAPTION=Aceptar +TRXSORTBYFORM.CANCELBUTTON.CAPTION=Cancelar +TRXSORTBYFORM.ADDBTN.CAPTION=&Adicionar diff --git a/components/rx/version/2.1/rxsortby.pas b/components/rx/version/2.1/rxsortby.pas new file mode 100644 index 000000000..b6f00e1e6 --- /dev/null +++ b/components/rx/version/2.1/rxsortby.pas @@ -0,0 +1,272 @@ +{ RXDBGrid unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxsortby; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, ButtonPanel, rxdbgrid, db, types; + +type + + { TrxSortByForm } + + TrxSortByForm = class(TForm) + AddBtn: TBitBtn; + ButtonPanel1: TButtonPanel; + CheckBox1: TCheckBox; + DownBtn: TBitBtn; + Label1: TLabel; + Label2: TLabel; + ListBox1: TListBox; + ListBox2: TListBox; + RemoveBtn: TBitBtn; + UpBtn: TBitBtn; + procedure AddBtnClick(Sender: TObject); + procedure DownBtnClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure ListBox1DblClick(Sender: TObject); + procedure ListBox1DrawItem(Control: TWinControl; Index: Integer; + ARect: TRect; State: TOwnerDrawState); + procedure ListBox2DblClick(Sender: TObject); + procedure RemoveBtnClick(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + procedure UpBtnClick(Sender: TObject); + private + FDBGrid:TRxDBGrid; + public + { public declarations } + function Execute(ADBGrid:TRxDBGrid; SortNames:TStringList):Boolean; + end; + +var + rxSortByForm: TrxSortByForm; + +implementation +uses rxdconst, DBGrids; + +{$R *.lfm} + +{ TrxSortByForm } + +procedure TrxSortByForm.DownBtnClick(Sender: TObject); +var + TmpField:String; + C1:TObject; + Poz: Integer; +begin + if ListBox1.ItemIndex < ListBox1.Items.Count-1 Then + begin + Poz:=ListBox1.ItemIndex; + + TmpField:=ListBox1.Items[Poz+1]; + C1:=ListBox1.Items.Objects[Poz+1]; + + ListBox1.Items[Poz+1]:=ListBox1.Items[Poz]; + ListBox1.Items.Objects[Poz+1]:=ListBox1.Items.Objects[Poz]; + + ListBox1.Items[Poz]:=TmpField; + ListBox1.Items.Objects[Poz]:=C1; + ListBox1.ItemIndex:=Poz+1; + end; +end; + +procedure TrxSortByForm.FormCreate(Sender: TObject); +begin +{ ComboBox1.Clear; + ComboBox1.Items.Add(sRxAscendign); + ComboBox1.Items.Add(sRxDescending);} + Caption:=sRxSortByFormCaption; + Label2.Caption:=sRxSortByFormAllFields; + Label1.Caption:=sRxSortByFormSortFields; +// Label4.Caption:=sRxSortByFormSortOrder; + AddBtn.Caption:=sRxSortByFormAddField; + RemoveBtn.Caption:=sRxSortByFormRemoveField; + UpBtn.Caption:=sRxSortByFormMoveUpField; + DownBtn.Caption:=sRxSortByFormMoveDnField; + CheckBox1.Caption:=sRxSortByFormCaseInsens; +end; + +procedure TrxSortByForm.ListBox1DblClick(Sender: TObject); +begin + RemoveBtn.Click; +end; + +procedure TrxSortByForm.ListBox1DrawItem(Control: TWinControl; Index: Integer; + ARect: TRect; State: TOwnerDrawState); +var + X, Y:integer; + P:TRxColumn; + S1, S2:string; + Cnv:TCanvas; +begin + Cnv:=ListBox1.Canvas; + Cnv.FillRect(ARect); { clear the rectangle } + P:=TRxColumn(ListBox1.Items.Objects[Index]); + S1:=ListBox1.Items[Index]; + S2:=Copy(S1, 1, 1); + Delete(S1, 1, 1); + + X := aRect.Left + 2; + Y := Trunc((aRect.Top + aRect.Bottom - UpBtn.Glyph.Height) / 2); + + if S2 = '1' then + Cnv.Draw(X, Y, UpBtn.Glyph) + else + Cnv.Draw(X, Y, DownBtn.Glyph); + + Cnv.TextOut(ARect.Left + UpBtn.Glyph.Width + 6, (ARect.Top + ARect.Bottom - Cnv.TextHeight('Wg')) div 2, S1); +end; + +procedure TrxSortByForm.ListBox2DblClick(Sender: TObject); +begin + AddBtn.Click; +end; + + +procedure TrxSortByForm.AddBtnClick(Sender: TObject); +var + S:string; +begin + if ListBox2.ItemIndex <> -1 Then + begin + S:='1'+ListBox2.Items[ListBox2.ItemIndex]; + ListBox1.Items.Objects[ListBox1.Items.Add(S)]:=ListBox2.Items.Objects[ListBox2.ItemIndex]; + ListBox2.Items.Delete(ListBox2.ItemIndex); + ListBox1.ItemIndex:=ListBox1.Items.Count-1; + end; +end; + +procedure TrxSortByForm.RemoveBtnClick(Sender: TObject); +var + S:string; +begin + if ListBox1.ItemIndex <> -1 Then + begin + S:=TRxColumn(ListBox1.Items.Objects[ListBox1.ItemIndex]).Title.Caption; + ListBox2.Items.Objects[ListBox2.Items.Add(S)]:=ListBox1.Items.Objects[ListBox1.ItemIndex]; + ListBox1.Items.Delete(ListBox1.ItemIndex); + end; +end; + +procedure TrxSortByForm.SpeedButton1Click(Sender: TObject); +var + S:string; +begin + if (ListBox1.ItemIndex <> -1) then + begin + S:=ListBox1.Items[ListBox1.ItemIndex]; + if S[1] = '1' then + S[1] := '0' + else + S[1] := '1'; + ListBox1.Items[ListBox1.ItemIndex]:=S; + end; +end; + +procedure TrxSortByForm.UpBtnClick(Sender: TObject); +var + TmpField:String; + Poz : Integer; + C1:TObject; +begin + if ListBox1.ItemIndex > 0 Then + begin + Poz:=ListBox1.ItemIndex; + TmpField:=ListBox1.Items[Poz-1]; + C1:=ListBox1.Items.Objects[Poz-1]; + + ListBox1.Items[Poz-1]:=ListBox1.Items[Poz]; + ListBox1.Items.Objects[Poz-1]:=ListBox1.Items.Objects[Poz]; + + ListBox1.Items[Poz]:=TmpField; + ListBox1.Items.Objects[Poz]:=C1; + + ListBox1.ItemIndex:=Poz-1; + end; +end; + + +function TrxSortByForm.Execute(ADBGrid: TRxDBGrid; SortNames: TStringList + ): Boolean; +var + i, j : Integer; + S : String; + C:TRxColumn; +begin + Result:=False; + if not (Assigned(ADBGrid.DataSource) and Assigned(ADBGrid.DataSource.DataSet) and ADBGrid.DataSource.DataSet.Active) then exit; + + FDBGrid:=ADBGrid; + + ListBox1.Clear; + ListBox2.Clear; + + + for i:=0 to ADBGrid.Columns.Count-1 do + begin + C:=TRxColumn(ADBGrid.Columns[i]); + if C.SortOrder = smNone then + ListBox2.Items.Objects[ListBox2.Items.Add(C.Title.Caption)]:=C; + end; + + for i:=0 to ADBGrid.SortColumns.Count-1 do + begin + C:=ADBGrid.SortColumns[i]; + + if C.SortOrder = smUp then + S:='1'+C.Title.Caption + else + S:='0'+C.Title.Caption; + + ListBox1.Items.Objects[ListBox1.Items.Add(S)]:=C + end; + + if ShowModal = mrOK Then + begin + SortNames.Clear; + for i:=0 to ListBox1.Items.Count-1 do + begin + C:=ListBox1.Items.Objects[i] as TRxColumn; + SortNames.Add(Copy(ListBox1.Items[i], 1, 1) + C.FieldName); + end; + + Result:=True; + end; +end; + +end. + + diff --git a/components/rx/version/2.1/rxsortfbdataset.pas b/components/rx/version/2.1/rxsortfbdataset.pas new file mode 100644 index 000000000..24f73c65f --- /dev/null +++ b/components/rx/version/2.1/rxsortfbdataset.pas @@ -0,0 +1,32 @@ +unit RxSortFBDataSet; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils; + +type + TRxSortFBDataSet = class(TComponent) + private + { Private declarations } + protected + { Protected declarations } + public + { Public declarations } + published + { Published declarations } + end; + +procedure Register; + +implementation +uses exsortfb; + +procedure Register; +begin + RegisterComponents('RX DBAware',[TRxSortFBDataSet]); +end; + +end. diff --git a/components/rx/version/2.1/rxsortmemds.pas b/components/rx/version/2.1/rxsortmemds.pas new file mode 100644 index 000000000..b90e3640c --- /dev/null +++ b/components/rx/version/2.1/rxsortmemds.pas @@ -0,0 +1,136 @@ +{ This module from FPC port of RX components library + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxsortmemds; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, DB, RxDBGrid; + +type + + { TRxMemoryDataSortEngine } + + TRxMemoryDataSortEngine = class(TRxDBGridSortEngine) + protected + procedure UpdateFooterRows(ADataSet:TDataSet; AGrid:TRxDBGrid);override; + function EnabledFooterRowsCalc:boolean;override; + public + procedure Sort(Field:TField; ADataSet:TDataSet; Asc:boolean; SortOptions:TRxSortEngineOptions);override; + procedure SortList(ListField:string; ADataSet:TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions);override; + end; + +implementation +uses rxmemds; + +type + THackRxMemoryData = class(TRxMemoryData); + THackRxColumnFooter = class(TRxColumnFooter); + THackDataLink = class(TDataLink); + THackDataSet = class(TDataSet); + THackRxDBGrid = class(TRxDBGrid); + +procedure TRxMemoryDataSortEngine.UpdateFooterRows(ADataSet: TDataSet; + AGrid: TRxDBGrid); +var + i:integer; + Col:TRxColumn; + + DHL:THackDataLink; + DHS:THackDataSet; + SaveState:TDataSetState; + SavePos:integer; + SaveActiveRecord:integer; +begin + if not Assigned(ADataSet) then exit; + + DHL:=THackDataLink(THackRxDBGrid(AGrid).Datalink); + DHS:=THackDataSet(ADataSet); + SaveState:=DHS.SetTempState(dsBrowse); + + SaveActiveRecord:=DHL.ActiveRecord; + DHL.ActiveRecord:=0; + SavePos:=ADataSet.RecNo; + + + ADataSet.First; + while not ADataSet.EOF do + begin + + for i:=0 to AGrid.Columns.Count-1 do + begin + Col:=TRxColumn(AGrid.Columns[i]); + if THackRxColumnFooter(Col.Footer).ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then + THackRxColumnFooter(Col.Footer).UpdateTestValueFromVar( ADataSet.FieldByName(Col.Footer.FieldName).Value); + end; + + ADataSet.Next; + end; + + DHS.RecNo := DHL.RecordCount + SavePos + 1; + + while not ADataSet.BOF do + begin + if SavePos = ADataSet.RecNo then + break; + ADataSet.Prior; + end; + + DHL.ActiveRecord:=SaveActiveRecord; + DHS.RestoreState(SaveState); +end; + +function TRxMemoryDataSortEngine.EnabledFooterRowsCalc: boolean; +begin + Result:=true; +end; + +procedure TRxMemoryDataSortEngine.Sort(Field:TField; ADataSet:TDataSet; + Asc:boolean; SortOptions:TRxSortEngineOptions); +begin + if Assigned(ADataSet) then + (ADataSet as TRxMemoryData).SortOnFields(Field.FieldName, seoCaseInsensitiveSort in SortOptions, not Asc); +end; + +procedure TRxMemoryDataSortEngine.SortList(ListField: string; + ADataSet: TDataSet; Asc: array of boolean; SortOptions: TRxSortEngineOptions); +begin + if Assigned(ADataSet) then + (ADataSet as TRxMemoryData).SortOnFieldsEx(ListField, seoCaseInsensitiveSort in SortOptions, Asc); +end; + +initialization + RegisterRxDBGridSortEngine(TRxMemoryDataSortEngine, 'TRxMemoryData'); +end. + diff --git a/components/rx/version/2.1/rxsortsqldb.pas b/components/rx/version/2.1/rxsortsqldb.pas new file mode 100644 index 000000000..bee0b6b17 --- /dev/null +++ b/components/rx/version/2.1/rxsortsqldb.pas @@ -0,0 +1,32 @@ +unit RxSortSqlDB; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs; + +type + TRxSortSqlDB = class(TComponent) + private + { Private declarations } + protected + { Protected declarations } + public + { Public declarations } + published + { Published declarations } + end; + +procedure Register; + +implementation +uses exsortsql; + +procedure Register; +begin + RegisterComponents('RX DBAware',[TRxSortSqlDB]); +end; + +end. diff --git a/components/rx/version/2.1/rxsortzeos.pas b/components/rx/version/2.1/rxsortzeos.pas new file mode 100644 index 000000000..f34038ee9 --- /dev/null +++ b/components/rx/version/2.1/rxsortzeos.pas @@ -0,0 +1,32 @@ +unit RxSortZeos; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils; + +type + TRxSortZeos = class(TComponent) + private + { Private declarations } + protected + { Protected declarations } + public + { Public declarations } + published + { Published declarations } + end; + +procedure Register; + +implementation +uses exsortzeos; + +procedure Register; +begin + RegisterComponents('RX DBAware',[TRxSortZeos]); +end; + +end. diff --git a/components/rx/version/2.1/rxspin.lrs b/components/rx/version/2.1/rxspin.lrs new file mode 100644 index 000000000..16b19f766 --- /dev/null +++ b/components/rx/version/2.1/rxspin.lrs @@ -0,0 +1,10 @@ +LazarusResources.Add('rxspindown','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#6#0#0#0#6#8#6#0#0#0#224#204#239'H' + +#0#0#0#30'IDATx'#218'cd@'#128#255'P'#154#17'N'#144','#241#159#1#11'`DS'#13#23 + +#199'i'#20#0#211';'#6#6#176#30'g'#27#0#0#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('rxspinup','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#6#0#0#0#6#8#6#0#0#0#224#204#239'H' + +#0#0#0' IDATx'#218'cd@'#128#255'P'#154#17'N '#9#194#0'##'#22'A'#6'd'#29'8' + +#141'"^'#2#0#211'"'#6#6'Q'#1#226#220#0#0#0#0'IEND'#174'B`'#130 +]); diff --git a/components/rx/version/2.1/rxspin.pas b/components/rx/version/2.1/rxspin.pas new file mode 100644 index 000000000..1a6f60b74 --- /dev/null +++ b/components/rx/version/2.1/rxspin.pas @@ -0,0 +1,982 @@ +{ rxspin unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxspin; + +interface + +{$I rx.inc} + +uses ComCtrls, LCLIntf, LCLType, Controls, ExtCtrls, Classes, + Graphics, LMessages, Forms, StdCtrls, Menus, SysUtils, Messages; + +type + +{ TRxSpinButton } + + TSpinButtonState = (sbNotDown, sbTopDown, sbBottomDown); + + TRxSpinButton = class(TGraphicControl) + private + FDown: TSpinButtonState; + FUpBitmap: TBitmap; + FDownBitmap: TBitmap; + FDragging: Boolean; + FInvalidate: Boolean; + FTopDownBtn: TBitmap; + FBottomDownBtn: TBitmap; + FRepeatTimer: TTimer; + FNotDownBtn: TBitmap; + FLastDown: TSpinButtonState; + FFocusControl: TWinControl; + FOnTopClick: TNotifyEvent; + FOnBottomClick: TNotifyEvent; + procedure TopClick; + procedure BottomClick; + procedure GlyphChanged(Sender: TObject); + function GetUpGlyph: TBitmap; + function GetDownGlyph: TBitmap; + procedure SetUpGlyph(Value: TBitmap); + procedure SetDownGlyph(Value: TBitmap); + procedure SetDown(Value: TSpinButtonState); + procedure SetFocusControl(Value: TWinControl); + procedure DrawAllBitmap; + procedure DrawBitmap(ABitmap: TBitmap; ADownState: TSpinButtonState); + procedure TimerExpired(Sender: TObject); + procedure CMEnabledChanged(var Message: TLMessage); message CM_ENABLEDCHANGED; + protected + procedure Paint; override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Down: TSpinButtonState read FDown write SetDown default sbNotDown; + published + property DragCursor; + property DragMode; + property Enabled; + property Visible; + property DownGlyph: TBitmap read GetDownGlyph write SetDownGlyph; + property UpGlyph: TBitmap read GetUpGlyph write SetUpGlyph; + property FocusControl: TWinControl read FFocusControl write SetFocusControl; + property ShowHint; + property ParentShowHint; +{$IFDEF RX_D4} + property Anchors; + property Constraints; + property DragKind; +{$ENDIF} + property OnBottomClick: TNotifyEvent read FOnBottomClick write FOnBottomClick; + property OnTopClick: TNotifyEvent read FOnTopClick write FOnTopClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; +{$IFDEF RX_D4} + property OnEndDock; + property OnStartDock; +{$ENDIF} + end; + +{ TRxSpinEdit } + + TValueType = (vtInteger, vtFloat, vtHex); + + TRxSpinEdit = class(TCustomEdit) + private + FAlignment: TAlignment; + FMinValue: Extended; + FMaxValue: Extended; + FIncrement: Extended; + FDecimal: Byte; + FChanging: Boolean; + FEditorEnabled: Boolean; + FValueType: TValueType; + FButton: TRxSpinButton; + FBtnWindow: TWinControl; + FArrowKeys: Boolean; + FOnTopClick: TNotifyEvent; + FOnBottomClick: TNotifyEvent; + function GetMinHeight: Integer; + procedure GetTextHeight(var SysHeight, aHeight: Integer); + function GetValue: Extended; + function CheckValue(NewValue: Extended): Extended; + function GetAsInteger: Longint; + function IsIncrementStored: Boolean; + function IsMaxStored: Boolean; + function IsMinStored: Boolean; + function IsValueStored: Boolean; + procedure SetArrowKeys(Value: Boolean); + procedure SetAsInteger(NewValue: Longint); + procedure SetValue(NewValue: Extended); + procedure SetValueType(NewType: TValueType); + procedure SetDecimal(NewValue: Byte); + function GetButtonWidth: Integer; + procedure RecreateButton; + procedure ResizeButton; + procedure SetAlignment(Value: TAlignment); + procedure LMSize(var Message: TLMSize); message LM_SIZE; + procedure CMEnter(var Message: TLMessage); message CM_ENTER; + procedure CMExit(var Message: TLMExit); message CM_EXIT; + procedure WMPaste(var Message: TLMessage); message LM_PASTE; + procedure WMCut(var Message: TLMessage); message LM_CUT; +// procedure CMCtl3DChanged(var Message: TLMessage); message CM_CTL3DCHANGED; + procedure CMEnabledChanged(var Message: TLMessage); message CM_ENABLEDCHANGED; + procedure CMFontChanged(var Message: TLMessage); message CM_FONTCHANGED; + procedure CheckButtonVisible; + procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; + protected + procedure Change; override; + function IsValidChar(Key: Char): Boolean; virtual; + procedure UpClick(Sender: TObject); virtual; + procedure DownClick(Sender: TObject); virtual; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure KeyPress(var Key: Char); override; + procedure CreateParams(var Params: TCreateParams); override; + procedure CreateWnd; override; + // Added from TEditButton + procedure SetParent(AParent: TWinControl); override; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure Loaded; override; + procedure CMVisibleChanged(var Msg: TLMessage); message CM_VISIBLECHANGED; + // + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property AsInteger: Longint read GetAsInteger write SetAsInteger default 0; + property Text; + published + property Alignment: TAlignment read FAlignment write SetAlignment + default taLeftJustify; + property ArrowKeys: Boolean read FArrowKeys write SetArrowKeys default True; + property Decimal: Byte read FDecimal write SetDecimal default 2; + property EditorEnabled: Boolean read FEditorEnabled write FEditorEnabled default True; + property Increment: Extended read FIncrement write FIncrement stored IsIncrementStored; + property MaxValue: Extended read FMaxValue write FMaxValue stored IsMaxStored; + property MinValue: Extended read FMinValue write FMinValue stored IsMinStored; + property ValueType: TValueType read FValueType write SetValueType default vtInteger; + property Value: Extended read GetValue write SetValue stored IsValueStored; + property AutoSelect; + property AutoSize; + property BorderStyle; + property Color; +// property Ctl3D; + property DragCursor; + property DragMode; + property Enabled; + property Font; +//{$IFDEF RX_D4} + property Anchors; + property BiDiMode; + property Constraints; + property DragKind; + property ParentBiDiMode; +//{$ENDIF} + property MaxLength; + property ParentColor; +// property ParentCtl3D; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ReadOnly; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + property OnBottomClick: TNotifyEvent read FOnBottomClick write FOnBottomClick; + property OnTopClick: TNotifyEvent read FOnTopClick write FOnTopClick; + property OnChange; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; +//{$IFDEF RX_D5} + property OnContextPopup; +//{$ENDIF} +//{$IFDEF RX_D4} + property OnMouseWheelDown; + property OnMouseWheelUp; + property OnEndDock; + property OnStartDock; +//{$ENDIF} + end; + +implementation + +uses + VCLUtils, LResources; + +const + sSpinUpBtn = 'RXSPINUP'; + sSpinDownBtn = 'RXSPINDOWN'; + +const + InitRepeatPause = 400; { pause before repeat timer (ms) } + RepeatPause = 100; + +{ TRxSpinButton } + +constructor TRxSpinButton.Create(AOwner: TComponent); +begin + inherited Create(AOwner); +{ FUpBitmap := TBitmap.Create; + FDownBitmap := TBitmap.Create;} + FUpBitmap := LoadBitmapFromLazarusResource(sSpinUpBtn); + FDownBitmap := LoadBitmapFromLazarusResource(sSpinDownBtn); + FUpBitmap.OnChange := @GlyphChanged; + FDownBitmap.OnChange := @GlyphChanged; + Height := 20; + Width := 20; + FTopDownBtn := TBitmap.Create; + FBottomDownBtn := TBitmap.Create; + FNotDownBtn := TBitmap.Create; + DrawAllBitmap; + FLastDown := sbNotDown; +end; + +destructor TRxSpinButton.Destroy; +begin + FTopDownBtn.Free; + FBottomDownBtn.Free; + FNotDownBtn.Free; + FUpBitmap.Free; + FDownBitmap.Free; + FRepeatTimer.Free; + inherited Destroy; +end; + +procedure TRxSpinButton.GlyphChanged(Sender: TObject); +begin + FInvalidate := True; + Invalidate; +end; + +function TRxSpinButton.GetUpGlyph: TBitmap; +begin + Result := FUpBitmap; +end; + +procedure TRxSpinButton.SetUpGlyph(Value: TBitmap); +begin + if Value <> nil then FUpBitmap.Assign(Value) + else + FUpBitmap := LoadBitmapFromLazarusResource(sSpinUpBtn); +end; + +function TRxSpinButton.GetDownGlyph: TBitmap; +begin + Result := FDownBitmap; +end; + +procedure TRxSpinButton.SetDownGlyph(Value: TBitmap); +begin + if Value <> nil then FDownBitmap.Assign(Value) + else + FDownBitmap := LoadBitmapFromLazarusResource(sSpinDownBtn); +end; + +procedure TRxSpinButton.SetDown(Value: TSpinButtonState); +var + OldState: TSpinButtonState; +begin + OldState := FDown; + FDown := Value; + if OldState <> FDown then Repaint; +end; + +procedure TRxSpinButton.SetFocusControl(Value: TWinControl); +begin + FFocusControl := Value; + if Value <> nil then + Value.FreeNotification(Self); +end; + +procedure TRxSpinButton.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation = opRemove) and (AComponent = FFocusControl) then + FFocusControl := nil; +end; + +procedure TRxSpinButton.Paint; +begin + if not Enabled and not (csDesigning in ComponentState) then + FDragging := False; + if (FNotDownBtn.Height <> Height) or (FNotDownBtn.Width <> Width) or + FInvalidate then DrawAllBitmap; + FInvalidate := False; + with Canvas do + case FDown of + sbNotDown: Draw(0, 0, FNotDownBtn); + sbTopDown: Draw(0, 0, FTopDownBtn); + sbBottomDown: Draw(0, 0, FBottomDownBtn); + end; +end; + +procedure TRxSpinButton.DrawAllBitmap; +begin + DrawBitmap(FTopDownBtn, sbTopDown); + DrawBitmap(FBottomDownBtn, sbBottomDown); + DrawBitmap(FNotDownBtn, sbNotDown); +end; + +procedure TRxSpinButton.DrawBitmap(ABitmap: TBitmap; ADownState: TSpinButtonState); +var + R, RSrc: TRect; + dRect: Integer; + {Temp: TBitmap;} +begin + ABitmap.Height := Height; + ABitmap.Width := Width; + with ABitmap.Canvas do begin + R := Bounds(0, 0, Width, Height); + Pen.Width := 1; + Brush.Color := clBtnFace; + Brush.Style := bsSolid; + FillRect(R); + { buttons frame } + Pen.Color := clWindowFrame; + Rectangle(0, 0, Width, Height); + MoveTo(-1, Height); + LineTo(Width, -1); + { top button } + if ADownState = sbTopDown then Pen.Color := clBtnShadow + else Pen.Color := clBtnHighlight; + MoveTo(1, Height - 4); + LineTo(1, 1); + LineTo(Width - 3, 1); + if ADownState = sbTopDown then Pen.Color := clBtnHighlight + else Pen.Color := clBtnShadow; + if ADownState <> sbTopDown then begin + MoveTo(1, Height - 3); + LineTo(Width - 2, 0); + end; + { bottom button } + if ADownState = sbBottomDown then Pen.Color := clBtnHighlight + else Pen.Color := clBtnShadow; + MoveTo(2, Height - 2); + LineTo(Width - 2, Height - 2); + LineTo(Width - 2, 1); + if ADownState = sbBottomDown then Pen.Color := clBtnShadow + else Pen.Color := clBtnHighlight; + MoveTo(2, Height - 2); + LineTo(Width - 1, 1); + { top glyph } + dRect := 1; + if ADownState = sbTopDown then Inc(dRect); + R := Bounds(Round((Width / 4) - (FUpBitmap.Width / 2)) + dRect, + Round((Height / 4) - (FUpBitmap.Height / 2)) + dRect, FUpBitmap.Width, + FUpBitmap.Height); + RSrc := Bounds(0, 0, FUpBitmap.Width, FUpBitmap.Height); + { + if Self.Enabled or (csDesigning in ComponentState) then + BrushCopy(R, FUpBitmap, RSrc, FUpBitmap.TransparentColor) + else begin + Temp := CreateDisabledBitmap(FUpBitmap, clBlack); + try + BrushCopy(R, Temp, RSrc, Temp.TransparentColor); + finally + Temp.Free; + end; + end; + } + //BrushCopy(R, FUpBitmap, RSrc, FUpBitmap.TransparentColor); + StretchDraw(R, FUpBitmap); + { bottom glyph } + R := Bounds(Round((3 * Width / 4) - (FDownBitmap.Width / 2)) - 1, + Round((3 * Height / 4) - (FDownBitmap.Height / 2)) - 1, + FDownBitmap.Width, FDownBitmap.Height); + RSrc := Bounds(0, 0, FDownBitmap.Width, FDownBitmap.Height); + { + if Self.Enabled or (csDesigning in ComponentState) then + BrushCopy(R, FDownBitmap, RSrc, FDownBitmap.TransparentColor) + else begin + Temp := CreateDisabledBitmap(FDownBitmap, clBlack); + try + BrushCopy(R, Temp, RSrc, Temp.TransparentColor); + finally + Temp.Free; + end; + end; + } + //BrushCopy(R, FDownBitmap, RSrc, FDownBitmap.TransparentColor); + StretchDraw(R, FDownBitmap); + if ADownState = sbBottomDown then begin + Pen.Color := clBtnShadow; + MoveTo(3, Height - 2); + LineTo(Width - 1, 2); + end; + end; +end; + +procedure TRxSpinButton.CMEnabledChanged(var Message: TMessage); +begin + inherited; + FInvalidate := True; + Invalidate; +end; + +procedure TRxSpinButton.TopClick; +begin + if Assigned(FOnTopClick) then begin + FOnTopClick(Self); + if not (csLButtonDown in ControlState) then FDown := sbNotDown; + end; +end; + +procedure TRxSpinButton.BottomClick; +begin + if Assigned(FOnBottomClick) then begin + FOnBottomClick(Self); + if not (csLButtonDown in ControlState) then FDown := sbNotDown; + end; +end; + +procedure TRxSpinButton.MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); +begin + inherited MouseDown(Button, Shift, X, Y); + if (Button = mbLeft) and Enabled then begin + if (FFocusControl <> nil) and FFocusControl.TabStop and + FFocusControl.CanFocus and (GetFocus <> FFocusControl.Handle) then + FFocusControl.SetFocus; + if FDown = sbNotDown then begin + FLastDown := FDown; + if Y > (-(Height/Width) * X + Height) then begin + FDown := sbBottomDown; + BottomClick; + end + else begin + FDown := sbTopDown; + TopClick; + end; + if FLastDown <> FDown then begin + FLastDown := FDown; + Repaint; + end; + if FRepeatTimer = nil then FRepeatTimer := TTimer.Create(Self); + FRepeatTimer.OnTimer := @TimerExpired; + FRepeatTimer.Interval := InitRepeatPause; + FRepeatTimer.Enabled := True; + end; + FDragging := True; + end; +end; + +procedure TRxSpinButton.MouseMove(Shift: TShiftState; X, Y: Integer); +var + NewState: TSpinButtonState; +begin + inherited MouseMove(Shift, X, Y); + if FDragging then begin + if (X >= 0) and (X <= Width) and (Y >= 0) and (Y <= Height) then begin + NewState := FDown; + if Y > (-(Width / Height) * X + Height) then begin + if (FDown <> sbBottomDown) then begin + if FLastDown = sbBottomDown then FDown := sbBottomDown + else FDown := sbNotDown; + if NewState <> FDown then Repaint; + end; + end + else begin + if (FDown <> sbTopDown) then begin + if (FLastDown = sbTopDown) then FDown := sbTopDown + else FDown := sbNotDown; + if NewState <> FDown then Repaint; + end; + end; + end else + if FDown <> sbNotDown then begin + FDown := sbNotDown; + Repaint; + end; + end; +end; + +procedure TRxSpinButton.MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); +begin + inherited MouseUp(Button, Shift, X, Y); + if FDragging then begin + FDragging := False; + if (X >= 0) and (X <= Width) and (Y >= 0) and (Y <= Height) then begin + FDown := sbNotDown; + FLastDown := sbNotDown; + Repaint; + end; + end; +end; + +procedure TRxSpinButton.TimerExpired(Sender: TObject); +begin + FRepeatTimer.Interval := RepeatPause; + if (FDown <> sbNotDown) and MouseCapture then begin + try + if FDown = sbBottomDown then BottomClick else TopClick; + except + FRepeatTimer.Enabled := False; + raise; + end; + end; +end; + +function DefBtnWidth: Integer; +begin + Result := GetSystemMetrics(SM_CXVSCROLL); + if Result > 15 then Result := 15; +end; + +{ TRxSpinEdit } + +constructor TRxSpinEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + Text := '0'; + ControlStyle := ControlStyle - [csSetCaption]; + FIncrement := 1.0; + FDecimal := 2; + FEditorEnabled := True; + FArrowKeys := True; + RecreateButton; + CheckButtonVisible +end; + +destructor TRxSpinEdit.Destroy; +begin + Destroying; + FChanging := True; + if FButton <> nil then + FreeAndNil(FButton); + if FBtnWindow <> nil then + FreeAndNil(FBtnWindow); + inherited Destroy; +end; + +procedure TRxSpinEdit.RecreateButton; +begin + if (csDestroying in ComponentState) then + Exit; + if FButton <> nil then + FreeAndNil(FButton); + + if FBtnWindow <> nil then + FreeAndNil(FBtnWindow); + + FBtnWindow := TWinControl.Create(Self); +// FBtnWindow.ComponentStyle:=FBtnWindow.ComponentStyle + csSubComponent; + with FBtnWindow do + begin + FreeNotification(Self); + Height := Self.Height; + Width := Self.Height; + ControlStyle := ControlStyle + [csNoDesignSelectable]; + end; + + if FBtnWindow <> nil then + begin + FButton := TRxSpinButton.Create(Self); + with FButton do + begin + FocusControl := Self; + OnTopClick := @UpClick; + OnBottomClick := @DownClick; + Width := FBtnWindow.Height; + Height := FBtnWindow.Height; + FreeNotification(FBtnWindow); + end; + end; + CheckButtonVisible; +end; + +procedure TRxSpinEdit.SetArrowKeys(Value: Boolean); +begin + FArrowKeys := Value; + ResizeButton; +end; + +function TRxSpinEdit.GetButtonWidth: Integer; +begin + if FBtnWindow <> nil then + Result := FBtnWindow.Width + else + Result := DefBtnWidth; +end; + +procedure TRxSpinEdit.ResizeButton; +begin + if FBtnWindow <> nil then begin + FBtnWindow.Parent := Parent; + FBtnWindow.SetBounds(Width, Top, Height, Height); + if FButton <> nil then + FButton.SetBounds(0, 0, FBtnWindow.Width, FBtnWindow.Height); + end; +end; + +procedure TRxSpinEdit.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + if ArrowKeys and (Key in [VK_UP, VK_DOWN]) then begin + if Key = VK_UP then UpClick(Self) + else if Key = VK_DOWN then DownClick(Self); + Key := 0; + end; +end; + +procedure TRxSpinEdit.Change; +begin + if not FChanging then inherited Change; +end; + +procedure TRxSpinEdit.KeyPress(var Key: Char); +begin + if not IsValidChar(Key) then begin + Key := #0; + Beep; + end; + if Key <> #0 then begin + inherited KeyPress(Key); + if (Key = Char(VK_RETURN)) or (Key = Char(VK_ESCAPE)) then begin + { must catch and remove this, since is actually multi-line } + GetParentForm(Self).Perform(CM_DIALOGKEY, Byte(Key), 0); + if Key = Char(VK_RETURN) then Key := #0; + end; + end; +end; + +function TRxSpinEdit.IsValidChar(Key: Char): Boolean; +var + ValidChars: set of Char; +begin + ValidChars := ['+', '-', '0'..'9']; + if ValueType = vtFloat then begin + if Pos(DefaultFormatSettings.DecimalSeparator, Text) = 0 then + ValidChars := ValidChars + [DefaultFormatSettings.DecimalSeparator]; + if Pos('E', AnsiUpperCase(Text)) = 0 then + ValidChars := ValidChars + ['e', 'E']; + end + else if ValueType = vtHex then begin + ValidChars := ValidChars + ['A'..'F', 'a'..'f']; + end; + Result := (Key in ValidChars) or (Key < #32); + if not FEditorEnabled and Result and ((Key >= #32) or + (Key = Char(VK_BACK)) or (Key = Char(VK_DELETE))) then Result := False; +end; + +procedure TRxSpinEdit.CreateParams(var Params: TCreateParams); +begin + inherited CreateParams(Params); +end; + +procedure TRxSpinEdit.SetParent(AParent: TWinControl); +begin + inherited SetParent(AParent); + if FBtnWindow <> nil then begin + FBtnWindow.Parent := AParent; + FBtnWindow.AnchorToCompanion(akLeft, 0, Self); + FBtnWindow.Visible := True; + if FButton <> nil then begin + FButton.Parent := FBtnWindow; + FButton.Visible:= True; + end; + end; +end; + +procedure TRxSpinEdit.Notification(AComponent: TComponent; Operation: TOperation + ); +begin + inherited Notification(AComponent, Operation); + if (AComponent = FBtnWindow) and (Operation = opRemove) then begin + if FButton <> nil then + FreeAndNil(FButton); + FreeAndNil(FBtnWindow); + end; +end; + +procedure TRxSpinEdit.Loaded; +begin + inherited Loaded; + CheckButtonVisible; + ResizeButton; +end; + +procedure TRxSpinEdit.CMVisibleChanged(var Msg: TLMessage); +begin + inherited CMVisibleChanged(Msg); + CheckButtonVisible; +end; + +procedure TRxSpinEdit.CreateWnd; +begin + inherited CreateWnd; +end; + +procedure TRxSpinEdit.SetAlignment(Value: TAlignment); +begin + if FAlignment <> Value then begin + FAlignment := Value; + RecreateWnd(Self); + end; +end; + +procedure TRxSpinEdit.LMSize(var Message: TLMSize); +var + MinHeight: Integer; +begin + inherited; + ResizeButton; +end; + +procedure TRxSpinEdit.GetTextHeight(var SysHeight, aHeight: Integer); +var + DC: HDC; + SaveFont: HFont; + SysMetrics, Metrics: TTextMetric; +begin + DC := GetDC(0); + GetTextMetrics(DC, SysMetrics); + SaveFont := SelectObject(DC, Font.Handle); + GetTextMetrics(DC, Metrics); + SelectObject(DC, SaveFont); + ReleaseDC(0, DC); + SysHeight := SysMetrics.tmHeight; + Height := Metrics.tmHeight; +end; + +function TRxSpinEdit.GetMinHeight: Integer; +var + I, H: Integer; +begin + GetTextHeight(I, H); + if I > H then I := H; + Result := H + (GetSystemMetrics(SM_CYBORDER) * 4) + 1; +end; + +procedure TRxSpinEdit.UpClick(Sender: TObject); +var + OldText: string; +begin + if ReadOnly then Beep + else begin + FChanging := True; + try + OldText := inherited Text; + Value := Value + FIncrement; + finally + FChanging := False; + end; + if CompareText(inherited Text, OldText) <> 0 then begin + Modified := True; + Change; + end; + if Assigned(FOnTopClick) then FOnTopClick(Self); + end; +end; + +procedure TRxSpinEdit.DownClick(Sender: TObject); +var + OldText: string; +begin + if ReadOnly then Beep + else begin + FChanging := True; + try + OldText := inherited Text; + Value := Value - FIncrement; + finally + FChanging := False; + end; + if CompareText(inherited Text, OldText) <> 0 then begin + Modified := True; + Change; + end; + if Assigned(FOnBottomClick) then FOnBottomClick(Self); + end; +end; + +procedure TRxSpinEdit.CMFontChanged(var Message: TLMessage); +begin + inherited; + ResizeButton; +end; + +procedure TRxSpinEdit.CheckButtonVisible; +begin + if FBtnWindow <> nil then begin + FBtnWindow.Visible := (csDesigning in ComponentState) or Visible; + if FButton <> nil then + FButton.Visible := FBtnWindow.Visible; + end; +end; + +procedure TRxSpinEdit.WMSetFocus(var Message: TLMSetFocus); +begin + inherited; +end; + +{procedure TRxSpinEdit.CMCtl3DChanged(var Message: TLMessage); +begin + inherited; + ResizeButton; +end;} + +procedure TRxSpinEdit.CMEnabledChanged(var Message: TLMessage); +begin + inherited; + if FBtnWindow <> nil then + FBtnWindow.Enabled := Enabled; +end; + +procedure TRxSpinEdit.WMPaste(var Message: TLMessage); +begin + if not FEditorEnabled or ReadOnly then Exit; + inherited; +end; + +procedure TRxSpinEdit.WMCut(var Message: TLMessage); +begin + if not FEditorEnabled or ReadOnly then Exit; + inherited; +end; + +procedure TRxSpinEdit.CMExit(var Message: TLMExit); +begin + inherited; + if CheckValue(Value) <> Value then SetValue(Value); +end; + +procedure TRxSpinEdit.CMEnter(var Message: TLMessage); +begin + if AutoSelect and not (csLButtonDown in ControlState) then SelectAll; + inherited; +end; + +function TRxSpinEdit.GetValue: Extended; +begin + try + if ValueType = vtFloat then Result := StrToFloat(Text) + else if ValueType = vtHex then Result := StrToInt('$' + Text) + else Result := StrToInt(Text); + except + if ValueType = vtFloat then Result := FMinValue + else Result := Trunc(FMinValue); + end; +end; + +procedure TRxSpinEdit.SetValue(NewValue: Extended); +begin + if ValueType = vtFloat then + Text := FloatToStrF(CheckValue(NewValue), ffFixed, 15, FDecimal) + else if ValueType = vtHex then + Text := IntToHex(Round(CheckValue(NewValue)), 1) + else + Text := IntToStr(Round(CheckValue(NewValue))); +end; + +function TRxSpinEdit.GetAsInteger: Longint; +begin + Result := Trunc(GetValue); +end; + +procedure TRxSpinEdit.SetAsInteger(NewValue: Longint); +begin + SetValue(NewValue); +end; + +procedure TRxSpinEdit.SetValueType(NewType: TValueType); +begin + if FValueType <> NewType then begin + FValueType := NewType; + Value := GetValue; + if FValueType in [vtInteger, vtHex] then + begin + FIncrement := Round(FIncrement); + if FIncrement = 0 then FIncrement := 1; + end; + end; +end; + +function TRxSpinEdit.IsIncrementStored: Boolean; +begin + Result := FIncrement <> 1.0; +end; + +function TRxSpinEdit.IsMaxStored: Boolean; +begin + Result := (MaxValue <> 0.0); +end; + +function TRxSpinEdit.IsMinStored: Boolean; +begin + Result := (MinValue <> 0.0); +end; + +function TRxSpinEdit.IsValueStored: Boolean; +begin + Result := (GetValue <> 0.0); +end; + +procedure TRxSpinEdit.SetDecimal(NewValue: Byte); +begin + if FDecimal <> NewValue then begin + FDecimal := NewValue; + Value := GetValue; + end; +end; + +function TRxSpinEdit.CheckValue(NewValue: Extended): Extended; +begin + Result := NewValue; + if (FMaxValue <> FMinValue) then begin + if NewValue < FMinValue then + Result := FMinValue + else if NewValue > FMaxValue then + Result := FMaxValue; + end; +end; + +initialization + {$I rxspin.lrs} +end. diff --git a/components/rx/version/2.1/rxstrutils.pas b/components/rx/version/2.1/rxstrutils.pas new file mode 100644 index 000000000..6590a1f5f --- /dev/null +++ b/components/rx/version/2.1/rxstrutils.pas @@ -0,0 +1,1138 @@ +{ RxStrUtils unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +{*******************************************************} +{ This unit based on AlexGraf String Library } +{ by Alexei Lukin (c) 1992 } +{ } +{*******************************************************} + +unit rxstrutils; + +{$I rx.inc} + +interface + +uses SysUtils, Classes; + +type +{$IFNDEF RX_D4} + TSysCharSet = set of Char; +{$ENDIF} + TCharSet = TSysCharSet; + +{ ** Common string handling routines ** } + +function StrToOem(const AnsiStr: string): string; +{ StrToOem translates a string from the Windows character set into the + OEM character set. } + +function OemToAnsiStr(const OemStr: string): string; +{ OemToAnsiStr translates a string from the OEM character set into the + Windows character set. } + +function IsEmptyStr(const S: string; const EmptyChars: TCharSet): Boolean; deprecated; //use this function from fcl strutils +{ EmptyStr returns true if the given string contains only character + from the EmptyChars. } + +function ReplaceStr(const S, Srch, Replace: string): string; +{ Returns string with every occurrence of Srch string replaced with + Replace string. } + +function DelSpace(const S: string): string; deprecated; //use this function from fcl strutils +{ DelSpace return a string with all white spaces removed. } + +function DelChars(const S: string; Chr: Char): string; deprecated; //use this function from fcl strutils +{ DelChars return a string with all Chr characters removed. } + +function DelBSpace(const S: string): string; +{ DelBSpace trims leading spaces from the given string. } + +function DelESpace(const S: string): string; +{ DelESpace trims trailing spaces from the given string. } + +function DelRSpace(const S: string): string; +{ DelRSpace trims leading and trailing spaces from the given string. } + +function DelSpace1(const S: string): string; deprecated; //use this function from fcl strutils +{ DelSpace1 return a string with all non-single white spaces removed. } + +function Tab2Space(const S: string; Numb: Byte): string; deprecated; //use this function from fcl strutils +{ Tab2Space converts any tabulation character in the given string to the + Numb spaces characters. } + +function NPos(const C: string; S: string; N: Integer): Integer; deprecated; //use this function from fcl strutils +{ NPos searches for a N-th position of substring C in a given string. } + +function MakeStr(C: Char; N: Integer): string; +function MS(C: Char; N: Integer): string; +{ MakeStr return a string of length N filled with character C. } + +function AddChar(C: Char; const S: string; N: Integer): string; deprecated; //use this function from fcl strutils +{ AddChar return a string left-padded to length N with characters C. } + +function AddCharR(C: Char; const S: string; N: Integer): string; deprecated; //use this function from fcl strutils +{ AddCharR return a string right-padded to length N with characters C. } + +function LeftStr(const S: string; N: Integer): string; +{ LeftStr return a string right-padded to length N with blanks. } + +function RightStr(const S: string; N: Integer): string; +{ RightStr return a string left-padded to length N with blanks. } + +function CenterStr(const S: string; Len: Integer): string; +{ CenterStr centers the characters in the string based upon the + Len specified. } + +function CompStr(const S1, S2: string): Integer; +{ CompStr compares S1 to S2, with case-sensitivity. The return value is + -1 if S1 < S2, 0 if S1 = S2, or 1 if S1 > S2. } + +function CompText(const S1, S2: string): Integer; +{ CompText compares S1 to S2, without case-sensitivity. The return value + is the same as for CompStr. } + +{$IFDEF USE_DEPRECATES} +function Copy2Symb(const S: string; Symb: Char): string; deprecated; //use this function from fcl strutils +{ Copy2Symb returns a substring of a string S from begining to first + character Symb. } + +function Copy2SymbDel(var S: string; Symb: Char): string; deprecated; //use this function from fcl strutils +{ Copy2SymbDel returns a substring of a string S from begining to first + character Symb and removes this substring from S. } + +function Copy2Space(const S: string): string; deprecated; //use this function from fcl strutils +{ Copy2Symb returns a substring of a string S from begining to first + white space. } + +function Copy2SpaceDel(var S: string): string; deprecated; //use this function from fcl strutils +{ Copy2SpaceDel returns a substring of a string S from begining to first + white space and removes this substring from S. } +{$ENDIF} +function AnsiProperCase(const S: string; const WordDelims: TCharSet): string; deprecated; //use this function from fcl strutils +{ Returns string, with the first letter of each word in uppercase, + all other letters in lowercase. Words are delimited by WordDelims. } + +function WordCount(const S: string; const WordDelims: TCharSet): Integer; deprecated; //use this function from fcl strutils +{ WordCount given a set of word delimiters, returns number of words in S. } + +function WordPosition(const N: Integer; const S: string; + const WordDelims: TCharSet): Integer; deprecated; //use this function from fcl strutils +{ Given a set of word delimiters, returns start position of N'th word in S. } + +function ExtractWord(N: Integer; const S: string; + const WordDelims: TCharSet): string; deprecated; //use this function from fcl strutils +function ExtractWordPos(N: Integer; const S: string; + const WordDelims: TCharSet; var Pos: Integer): string; deprecated; //use this function from fcl strutils +function ExtractDelimited(N: Integer; const S: string; + const Delims: TCharSet): string; deprecated; //use this function from fcl strutils +{ ExtractWord, ExtractWordPos and ExtractDelimited given a set of word + delimiters, return the N'th word in S. } + +function ExtractSubstr(const S: string; var Pos: Integer; + const Delims: TCharSet): string; deprecated; //use this function from fcl strutils +{ ExtractSubstr given a set of word delimiters, returns the substring from S, + that started from position Pos. } + +function IsWordPresent(const W, S: string; const WordDelims: TCharSet): Boolean; deprecated; //use this function from fcl strutils +{ IsWordPresent given a set of word delimiters, returns True if word W is + present in string S. } + +function QuotedString(const S: string; Quote: Char): string; +{ QuotedString returns the given string as a quoted string, using the + provided Quote character. } + +function ExtractQuotedString(const S: string; Quote: Char): string; +{ ExtractQuotedString removes the Quote characters from the beginning and + end of a quoted string, and reduces pairs of Quote characters within + the quoted string to a single character. } + +function FindPart(const HelpWilds, InputStr: string): Integer; deprecated; //use this function from fcl strutils +{ FindPart compares a string with '?' and another, returns the position of + HelpWilds in InputStr. } + +function IsWild(InputStr, Wilds: string; IgnoreCase: Boolean): Boolean; deprecated; //use this function from fcl strutils +{ IsWild compares InputString with WildCard string and returns True + if corresponds. } + +function XorString(const Key, Src: ShortString): ShortString; deprecated; //use this function from fcl strutils +function XorEncode(const Key, Source: string): string; deprecated; //use this function from fcl strutils +function XorDecode(const Key, Source: string): string; deprecated; //use this function from fcl strutils + +//by alexs +function StrToHexText(S:string):string; +function HexTextToStr(S:string):string; + +{ ** Command line routines ** } + +{$IFNDEF RX_D4} +function FindCmdLineSwitch(const Switch: string; SwitchChars: TCharSet; + IgnoreCase: Boolean): Boolean; +{$ENDIF} +function GetCmdLineArg(const Switch: string; SwitchChars: TCharSet): string; deprecated; //use this function from fcl strutils + +{ ** Numeric string handling routines ** } + +function Numb2USA(const S: string): string; deprecated; //use this function from fcl strutils +{ Numb2USA converts numeric string S to USA-format. } + +function Dec2Hex(N: Longint; A: Byte): string; deprecated; //use this function from fcl strutils +function D2H(N: Longint; A: Byte): string; deprecated; //use this function from fcl strutils +{ Dec2Hex converts the given value to a hexadecimal string representation + with the minimum number of digits (A) specified. } + +function Hex2Dec(const S: string): Longint; deprecated; //use this function from fcl strutils +function H2D(const S: string): Longint; deprecated; //use this function from fcl strutils +{ Hex2Dec converts the given hexadecimal string to the corresponding integer + value. } + +function Dec2Numb(N: Longint; A, B: Byte): string; deprecated; //use this function from fcl strutils +{ Dec2Numb converts the given value to a string representation with the + base equal to B and with the minimum number of digits (A) specified. } + +function Numb2Dec(S: string; B: Byte): Longint; deprecated; //use this function from fcl strutils +{ Numb2Dec converts the given B-based numeric string to the corresponding + integer value. } + +function IntToBin(Value: Longint; Digits, Spaces: Integer): string; deprecated; //use this function from fcl strutils +{ IntToBin converts the given value to a binary string representation + with the minimum number of digits specified. } + +function IntToRoman(Value: Longint): string; deprecated; //use this function from fcl strutils +{ IntToRoman converts the given value to a roman numeric string + representation. } + +function RomanToInt(const S: string): Longint; deprecated; //use this function from fcl strutils +{ RomanToInt converts the given string to an integer value. If the string + doesn't contain a valid roman numeric value, the 0 value is returned. } + +procedure StrToStrings(const S:string; const List:TStrings; const Delims:Char); + +const +// CRLF = #13#10; + DigitChars = ['0'..'9']; +{$IFNDEF CBUILDER} + Brackets = ['(',')','[',']','{','}']; + StdWordDelims = [#0..' ',',','.',';','/','\',':','''','"','`'] + Brackets; +{$ENDIF} + +implementation + +{$IFDEF WINDOWS} +uses Windows; +{$ENDIF} + +function StrToOem(const AnsiStr: string): string; +begin +{$IFDEF WINDOWS} + SetLength(Result, Length(AnsiStr)); + if Length(Result) > 0 then + CharToOemBuff(PChar(AnsiStr), PChar(Result), Length(Result)); +{$ELSE} + Result:=AnsiStr; +{$ENDIF} +end; + +function OemToAnsiStr(const OemStr: string): string; +begin +{$IFDEF WINDOWS} + SetLength(Result, Length(OemStr)); + if Length(Result) > 0 then + OemToCharBuff(PChar(OemStr), PChar(Result), Length(Result)); +{$ELSE} + Result:=OemStr; +{$ENDIF} +end; + +function IsEmptyStr(const S: string; const EmptyChars: TCharSet): Boolean; +var + I, SLen: Integer; +begin + SLen := Length(S); + I := 1; + while I <= SLen do begin + if not (S[I] in EmptyChars) then begin + Result := False; + Exit; + end + else Inc(I); + end; + Result := True; +end; + +function ReplaceStr(const S, Srch, Replace: string): string; +var + I: Integer; + Source: string; +begin + Source := S; + Result := ''; + repeat + I := Pos(Srch, Source); + if I > 0 then begin + Result := Result + Copy(Source, 1, I - 1) + Replace; + Source := Copy(Source, I + Length(Srch), MaxInt); + end + else Result := Result + Source; + until I <= 0; +end; + +function DelSpace(const S: String): string; +begin + Result := DelChars(S, ' '); +end; + +function DelChars(const S: string; Chr: Char): string; +var + I: Integer; +begin + Result := S; + for I := Length(Result) downto 1 do begin + if Result[I] = Chr then Delete(Result, I, 1); + end; +end; + +function DelBSpace(const S: string): string; +var + I, L: Integer; +begin + L := Length(S); + I := 1; + while (I <= L) and (S[I] = ' ') do Inc(I); + Result := Copy(S, I, MaxInt); +end; + +function DelESpace(const S: string): string; +var + I: Integer; +begin + I := Length(S); + while (I > 0) and (S[I] = ' ') do Dec(I); + Result := Copy(S, 1, I); +end; + +function DelRSpace(const S: string): string; +begin + Result := DelBSpace(DelESpace(S)); +end; + +function DelSpace1(const S: string): string; +var + I: Integer; +begin + Result := S; + for I := Length(Result) downto 2 do begin + if (Result[I] = ' ') and (Result[I - 1] = ' ') then + Delete(Result, I, 1); + end; +end; + +function Tab2Space(const S: string; Numb: Byte): string; +var + I: Integer; +begin + I := 1; + Result := S; + while I <= Length(Result) do begin + if Result[I] = Chr(9) then begin + Delete(Result, I, 1); + Insert(MakeStr(' ', Numb), Result, I); + Inc(I, Numb); + end + else Inc(I); + end; +end; + +function MakeStr(C: Char; N: Integer): string; +begin + if N < 1 then Result := '' + else + begin + SetLength(Result, N); + FillChar(Result[1], Length(Result), C); + end; +end; + +function MS(C: Char; N: Integer): string; +begin + Result := MakeStr(C, N); +end; + +function NPos(const C: string; S: string; N: Integer): Integer; +var + I, P, K: Integer; +begin + Result := 0; + K := 0; + for I := 1 to N do begin + P := Pos(C, S); + Inc(K, P); + if (I = N) and (P > 0) then begin + Result := K; + Exit; + end; + if P > 0 then Delete(S, 1, P) + else Exit; + end; +end; + +function AddChar(C: Char; const S: string; N: Integer): string; +begin + if Length(S) < N then + Result := MakeStr(C, N - Length(S)) + S + else Result := S; +end; + +function AddCharR(C: Char; const S: string; N: Integer): string; +begin + if Length(S) < N then + Result := S + MakeStr(C, N - Length(S)) + else Result := S; +end; + +function LeftStr(const S: string; N: Integer): string; +begin + Result := AddCharR(' ', S, N); +end; + +function RightStr(const S: string; N: Integer): string; +begin + Result := AddChar(' ', S, N); +end; + +function CompStr(const S1, S2: string): Integer; +begin +{$IFDEF WIN32} + Result := CompareString(GetThreadLocale, SORT_STRINGSORT, PChar(S1), + Length(S1), PChar(S2), Length(S2)) - 2; +{$ELSE} + Result := CompareStr(S1, S2); +{$ENDIF} +end; + +function CompText(const S1, S2: string): Integer; +begin +{$IFDEF WIN32} + Result := CompareString(GetThreadLocale, SORT_STRINGSORT or NORM_IGNORECASE, + PChar(S1), Length(S1), PChar(S2), Length(S2)) - 2; +{$ELSE} + Result := CompareText(S1, S2); +{$ENDIF} +end; + +{$IFDEF USE_DEPRECATES} +function Copy2Symb(const S: string; Symb: Char): string; +var + P: Integer; +begin + P := Pos(Symb, S); + if P = 0 then P := Length(S) + 1; + Result := Copy(S, 1, P - 1); +end; + +function Copy2SymbDel(var S: string; Symb: Char): string; +begin + Result := Copy2Symb(S, Symb); + S := DelBSpace(Copy(S, Length(Result) + 1, Length(S))); +end; + +function Copy2Space(const S: string): string; +begin + Result := Copy2Symb(S, ' '); +end; + +function Copy2SpaceDel(var S: string): string; +begin + Result := Copy2SymbDel(S, ' '); +end; +{$ENDIF} + +function AnsiProperCase(const S: string; const WordDelims: TCharSet): string; +var + SLen, I: Cardinal; +begin + Result := AnsiLowerCase(S); + I := 1; + SLen := Length(Result); + while I <= SLen do begin + while (I <= SLen) and (Result[I] in WordDelims) do Inc(I); + if I <= SLen then Result[I] := AnsiUpperCase(Result[I])[1]; + while (I <= SLen) and not (Result[I] in WordDelims) do Inc(I); + end; +end; + +function WordCount(const S: string; const WordDelims: TCharSet): Integer; +var + SLen, I: Cardinal; +begin + Result := 0; + I := 1; + SLen := Length(S); + while I <= SLen do begin + while (I <= SLen) and (S[I] in WordDelims) do Inc(I); + if I <= SLen then Inc(Result); + while (I <= SLen) and not(S[I] in WordDelims) do Inc(I); + end; +end; + +function WordPosition(const N: Integer; const S: string; + const WordDelims: TCharSet): Integer; +var + Count, I: Integer; +begin + Count := 0; + I := 1; + Result := 0; + while (I <= Length(S)) and (Count <> N) do begin + { skip over delimiters } + while (I <= Length(S)) and (S[I] in WordDelims) do Inc(I); + { if we're not beyond end of S, we're at the start of a word } + if I <= Length(S) then Inc(Count); + { if not finished, find the end of the current word } + if Count <> N then + while (I <= Length(S)) and not (S[I] in WordDelims) do Inc(I) + else Result := I; + end; +end; + +function ExtractWord(N: Integer; const S: string; + const WordDelims: TCharSet): string; +var + I: Integer; + Len: Integer; +begin + Len := 0; + I := WordPosition(N, S, WordDelims); + if I <> 0 then + { find the end of the current word } + while (I <= Length(S)) and not(S[I] in WordDelims) do begin + { add the I'th character to result } + Inc(Len); + SetLength(Result, Len); + Result[Len] := S[I]; + Inc(I); + end; + SetLength(Result, Len); +end; + +function ExtractWordPos(N: Integer; const S: string; + const WordDelims: TCharSet; var Pos: Integer): string; +var + I, Len: Integer; +begin + Len := 0; + I := WordPosition(N, S, WordDelims); + Pos := I; + if I <> 0 then + { find the end of the current word } + while (I <= Length(S)) and not(S[I] in WordDelims) do begin + { add the I'th character to result } + Inc(Len); + SetLength(Result, Len); + Result[Len] := S[I]; + Inc(I); + end; + SetLength(Result, Len); +end; + +function ExtractDelimited(N: Integer; const S: string; + const Delims: TCharSet): string; +var + CurWord: Integer; + I, Len, SLen: Integer; +begin + CurWord := 0; + I := 1; + Len := 0; + SLen := Length(S); + SetLength(Result, 0); + while (I <= SLen) and (CurWord <> N) do begin + if S[I] in Delims then Inc(CurWord) + else begin + if CurWord = N - 1 then begin + Inc(Len); + SetLength(Result, Len); + Result[Len] := S[I]; + end; + end; + Inc(I); + end; +end; + +function ExtractSubstr(const S: string; var Pos: Integer; + const Delims: TCharSet): string; +var + I: Integer; +begin + I := Pos; + while (I <= Length(S)) and not (S[I] in Delims) do Inc(I); + Result := Copy(S, Pos, I - Pos); + if (I <= Length(S)) and (S[I] in Delims) then Inc(I); + Pos := I; +end; + +function IsWordPresent(const W, S: string; const WordDelims: TCharSet): Boolean; +var + Count, I: Integer; +begin + Result := False; + Count := WordCount(S, WordDelims); + for I := 1 to Count do + if ExtractWord(I, S, WordDelims) = W then begin + Result := True; + Exit; + end; +end; + +{$IFDEF WIN32} + {$IFNDEF VER90} + { C++Builder or Delphi 3.0 } + {$DEFINE MBCS} + {$ENDIF} +{$ENDIF} + +function QuotedString(const S: string; Quote: Char): string; +{$IFDEF MBCS} +begin + Result := AnsiQuotedStr(S, Quote); +{$ELSE} +var + I: Integer; +begin + Result := S; + for I := Length(Result) downto 1 do + if Result[I] = Quote then Insert(Quote, Result, I); + Result := Quote + Result + Quote; +{$ENDIF MBCS} +end; + +function ExtractQuotedString(const S: string; Quote: Char): string; +var +{$IFDEF MBCS} + P: PChar; +begin + P := PChar(S); + if P^ = Quote then Result := AnsiExtractQuotedStr(P, Quote) + else Result := S; +{$ELSE} + I: Integer; +begin + Result := S; + I := Length(Result); + if (I > 0) and (Result[1] = Quote) and + (Result[I] = Quote) then + begin + Delete(Result, I, 1); + Delete(Result, 1, 1); + for I := Length(Result) downto 2 do begin + if (Result[I] = Quote) and (Result[I - 1] = Quote) then + Delete(Result, I, 1); + end; + end; +{$ENDIF MBCS} +end; + +function Numb2USA(const S: string): string; +var + I, NA: Integer; +begin + I := Length(S); + Result := S; + NA := 0; + while (I > 0) do begin + if ((Length(Result) - I + 1 - NA) mod 3 = 0) and (I <> 1) then + begin + Insert(',', Result, I); + Inc(NA); + end; + Dec(I); + end; +end; + +function CenterStr(const S: string; Len: Integer): string; +begin + if Length(S) < Len then begin + Result := MakeStr(' ', (Len div 2) - (Length(S) div 2)) + S; + Result := Result + MakeStr(' ', Len - Length(Result)); + end + else Result := S; +end; + +function Dec2Hex(N: LongInt; A: Byte): string; +begin + Result := IntToHex(N, A); +end; + +function D2H(N: LongInt; A: Byte): string; +begin + Result := IntToHex(N, A); +end; + +function Hex2Dec(const S: string): Longint; +var + HexStr: string; +begin + if Pos('$', S) = 0 then HexStr := '$' + S + else HexStr := S; + Result := StrToIntDef(HexStr, 0); +end; + +function H2D(const S: string): Longint; +begin + Result := Hex2Dec(S); +end; + +function Dec2Numb(N: Longint; A, B: Byte): string; +var + C: Integer; +{$IFDEF RX_D4} + Number: Cardinal; +{$ELSE} + Number: Longint; +{$ENDIF} +begin + if N = 0 then Result := '0' + else begin +{$IFDEF RX_D4} + Number := Cardinal(N); +{$ELSE} + Number := N; +{$ENDIF} + Result := ''; + while Number > 0 do begin + C := Number mod B; + if C > 9 then C := C + 55 + else C := C + 48; + Result := Chr(C) + Result; + Number := Number div B; + end; + end; + if Result <> '' then Result := AddChar('0', Result, A); +end; + +function Numb2Dec(S: string; B: Byte): Longint; +var + I, P: Longint; +begin + I := Length(S); + Result := 0; + S := UpperCase(S); + P := 1; + while (I >= 1) do begin + if S[I] > '@' then Result := Result + (Ord(S[I]) - 55) * P + else Result := Result + (Ord(S[I]) - 48) * P; + Dec(I); + P := P * B; + end; +end; + +function RomanToInt(const S: string): Longint; +const + RomanChars = ['C','D','I','L','M','V','X']; + RomanValues: array['C'..'X'] of Word = + (100,500,0,0,0,0,1,0,0,50,1000,0,0,0,0,0,0,0,0,5,0,10); +var + Index, Next: Char; + I: Integer; + Negative: Boolean; +begin + Result := 0; + I := 0; + Negative := (Length(S) > 0) and (S[1] = '-'); + if Negative then Inc(I); + while (I < Length(S)) do begin + Inc(I); + Index := UpCase(S[I]); + if Index in RomanChars then begin + if Succ(I) <= Length(S) then Next := UpCase(S[I + 1]) + else Next := #0; + if (Next in RomanChars) and (RomanValues[Index] < RomanValues[Next]) then + begin + Inc(Result, RomanValues[Next]); + Dec(Result, RomanValues[Index]); + Inc(I); + end + else Inc(Result, RomanValues[Index]); + end + else begin + Result := 0; + Exit; + end; + end; + if Negative then Result := -Result; +end; + +function IntToRoman(Value: Longint): string; +Label + A500, A400, A100, A90, A50, A40, A10, A9, A5, A4, A1; +begin + Result := ''; + while Value >= 1000 do begin + Dec(Value, 1000); Result := Result + 'M'; + end; + if Value < 900 then goto A500 + else begin + Dec(Value, 900); Result := Result + 'CM'; + end; + goto A90; +A400: + if Value < 400 then goto A100 + else begin + Dec(Value, 400); Result := Result + 'CD'; + end; + goto A90; +A500: + if Value < 500 then goto A400 + else begin + Dec(Value, 500); Result := Result + 'D'; + end; +A100: + while Value >= 100 do begin + Dec(Value, 100); Result := Result + 'C'; + end; +A90: + if Value < 90 then goto A50 + else begin + Dec(Value, 90); Result := Result + 'XC'; + end; + goto A9; +A40: + if Value < 40 then goto A10 + else begin + Dec(Value, 40); Result := Result + 'XL'; + end; + goto A9; +A50: + if Value < 50 then goto A40 + else begin + Dec(Value, 50); Result := Result + 'L'; + end; +A10: + while Value >= 10 do begin + Dec(Value, 10); Result := Result + 'X'; + end; +A9: + if Value < 9 then goto A5 + else begin + Result := Result + 'IX'; + end; + Exit; +A4: + if Value < 4 then goto A1 + else begin + Result := Result + 'IV'; + end; + Exit; +A5: + if Value < 5 then goto A4 + else begin + Dec(Value, 5); Result := Result + 'V'; + end; + goto A1; +A1: + while Value >= 1 do begin + Dec(Value); Result := Result + 'I'; + end; +end; + +function IntToBin(Value: Longint; Digits, Spaces: Integer): string; +begin + Result := ''; + if Digits > 32 then Digits := 32; + while Digits > 0 do begin + if (Digits mod Spaces) = 0 then Result := Result + ' '; + Dec(Digits); + Result := Result + IntToStr((Value shr Digits) and 1); + end; +end; + +function FindPart(const HelpWilds, InputStr: string): Integer; +var + I, J: Integer; + Diff: Integer; +begin + I := Pos('?', HelpWilds); + if I = 0 then begin + { if no '?' in HelpWilds } + Result := Pos(HelpWilds, InputStr); + Exit; + end; + { '?' in HelpWilds } + Diff := Length(InputStr) - Length(HelpWilds); + if Diff < 0 then begin + Result := 0; + Exit; + end; + { now move HelpWilds over InputStr } + for I := 0 to Diff do begin + for J := 1 to Length(HelpWilds) do begin + if (InputStr[I + J] = HelpWilds[J]) or + (HelpWilds[J] = '?') then + begin + if J = Length(HelpWilds) then begin + Result := I + 1; + Exit; + end; + end + else Break; + end; + end; + Result := 0; +end; + +function IsWild(InputStr, Wilds: string; IgnoreCase: Boolean): Boolean; + + function SearchNext(var Wilds: string): Integer; + { looking for next *, returns position and string until position } + begin + Result := Pos('*', Wilds); + if Result > 0 then Wilds := Copy(Wilds, 1, Result - 1); + end; + +var + CWild, CInputWord: Integer; { counter for positions } + I, LenHelpWilds: Integer; + MaxInputWord, MaxWilds: Integer; { Length of InputStr and Wilds } + HelpWilds: string; +begin + if Wilds = InputStr then begin + Result := True; + Exit; + end; + repeat { delete '**', because '**' = '*' } + I := Pos('**', Wilds); + if I > 0 then + Wilds := Copy(Wilds, 1, I - 1) + '*' + Copy(Wilds, I + 2, MaxInt); + until I = 0; + if Wilds = '*' then begin { for fast end, if Wilds only '*' } + Result := True; + Exit; + end; + MaxInputWord := Length(InputStr); + MaxWilds := Length(Wilds); + if IgnoreCase then begin { upcase all letters } + InputStr := AnsiUpperCase(InputStr); + Wilds := AnsiUpperCase(Wilds); + end; + if (MaxWilds = 0) or (MaxInputWord = 0) then begin + Result := False; + Exit; + end; + CInputWord := 1; + CWild := 1; + Result := True; + repeat + if InputStr[CInputWord] = Wilds[CWild] then begin { equal letters } + { goto next letter } + Inc(CWild); + Inc(CInputWord); + Continue; + end; + if Wilds[CWild] = '?' then begin { equal to '?' } + { goto next letter } + Inc(CWild); + Inc(CInputWord); + Continue; + end; + if Wilds[CWild] = '*' then begin { handling of '*' } + HelpWilds := Copy(Wilds, CWild + 1, MaxWilds); + I := SearchNext(HelpWilds); + LenHelpWilds := Length(HelpWilds); + if I = 0 then begin + { no '*' in the rest, compare the ends } + if HelpWilds = '' then Exit; { '*' is the last letter } + { check the rest for equal Length and no '?' } + for I := 0 to LenHelpWilds - 1 do begin + if (HelpWilds[LenHelpWilds - I] <> InputStr[MaxInputWord - I]) and + (HelpWilds[LenHelpWilds - I]<> '?') then + begin + Result := False; + Exit; + end; + end; + Exit; + end; + { handle all to the next '*' } + Inc(CWild, 1 + LenHelpWilds); + I := FindPart(HelpWilds, Copy(InputStr, CInputWord, MaxInt)); + if I= 0 then begin + Result := False; + Exit; + end; + CInputWord := I + LenHelpWilds; + Continue; + end; + Result := False; + Exit; + until (CInputWord > MaxInputWord) or (CWild > MaxWilds); + { no completed evaluation } + if CInputWord <= MaxInputWord then Result := False; + if (CWild <= MaxWilds) and (Wilds[MaxWilds] <> '*') then Result := False; +end; + +function XorString(const Key, Src: ShortString): ShortString; +var + I: Integer; +begin + Result := Src; + if Length(Key) > 0 then + for I := 1 to Length(Src) do + Result[I] := Chr(Byte(Key[1 + ((I - 1) mod Length(Key))]) xor Ord(Src[I])); +end; + +function XorEncode(const Key, Source: string): string; +var + I: Integer; + C: Byte; +begin + Result := ''; + for I := 1 to Length(Source) do begin + if Length(Key) > 0 then + C := Byte(Key[1 + ((I - 1) mod Length(Key))]) xor Byte(Source[I]) + else + C := Byte(Source[I]); + Result := Result + AnsiLowerCase(IntToHex(C, 2)); + end; +end; + +function XorDecode(const Key, Source: string): string; +var + I: Integer; + C: Char; +begin + Result := ''; + for I := 0 to Length(Source) div 2 - 1 do begin + C := Chr(StrToIntDef('$' + Copy(Source, (I * 2) + 1, 2), Ord(' '))); + if Length(Key) > 0 then + C := Chr(Byte(Key[1 + (I mod Length(Key))]) xor Byte(C)); + Result := Result + C; + end; +end; + +{$IFNDEF RX_D4} +function FindCmdLineSwitch(const Switch: string; SwitchChars: TCharSet; + IgnoreCase: Boolean): Boolean; +var + I: Integer; + S: string; +begin + for I := 1 to ParamCount do begin + S := ParamStr(I); + if (SwitchChars = []) or ((S[1] in SwitchChars) and (Length(S) > 1)) then + begin + S := Copy(S, 2, MaxInt); + if IgnoreCase then begin + if (AnsiCompareText(S, Switch) = 0) then begin + Result := True; + Exit; + end; + end + else begin + if (AnsiCompareStr(S, Switch) = 0) then begin + Result := True; + Exit; + end; + end; + end; + end; + Result := False; +end; +{$ENDIF RX_D4} + +function GetCmdLineArg(const Switch: string; SwitchChars: TCharSet): string; +var + I: Integer; + S: string; +begin + I := 1; + while I <= ParamCount do begin + S := ParamStr(I); + if (SwitchChars = []) or ((S[1] in SwitchChars) and (Length(S) > 1)) then + begin + if (AnsiCompareText(Copy(S, 2, MaxInt), Switch) = 0) then begin + Inc(I); + if I <= ParamCount then begin + Result := ParamStr(I); + Exit; + end; + end; + end; + Inc(I); + end; + Result := ''; +end; + +function StrToHexText(S:string):string; +var + i:integer; +begin + Result:=''; + for i:=1 to Length(S) do + Result:=Result+IntToHex(Byte(S[i]), 2); +end; + +function HexTextToStr(S:string):string; +var + i:integer; + b:byte; +begin + Result:=''; + for i:=1 to (Length(S) div 2) do + begin + B:=StrToInt('$'+S[i*2-1]+S[i*2]); + Result:=Result+Char(B); + end; +end; + +procedure StrToStrings(const S:string; const List:TStrings; const Delims:Char); +var + i,j:integer; +begin + if S<>'' then + begin + j:=1; + for i:=1 to Length(S) do + begin + if S[i] = Delims then + begin + if i>j+1 then + begin + List.Add(Copy(S, j, i-j)); + end; + j:=i+1; + end; + end; + if j<Length(S) then + List.Add(Copy(S, j, Length(S))); + end; +end; + +end. diff --git a/components/rx/version/2.1/rxswitch.inc b/components/rx/version/2.1/rxswitch.inc new file mode 100644 index 000000000..a6a35aa40 --- /dev/null +++ b/components/rx/version/2.1/rxswitch.inc @@ -0,0 +1,117 @@ +type + TRxSwithBitmap1 = array [0..52] of PChar; + TRxSwithBitmap2 = array [0..53] of PChar; +const + RXSWITCH_OFF : TRxSwithBitmap1 = + ( +'32 48 4 1', +'. c None', +'# c #000000', +'b c #808080', +'a c #ffffff', +'................................', +'................................', +'................................', +'................................', +'....########################....', +'....#aaaaaaaaaaaaaaaaaaaaaa#....', +'....#a####################a#....', +'....#a####################a#....', +'....#a##aaaaaaaaaaaaaaa#b#a#....', +'....#a#################bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#################bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....##aaa#########aaa#bbb#a#....', +'....##aa#aaaaaaaa#aaa#bbb#a#....', +'....#aaa#aaaaaaa#aaa#bbbb#a#....', +'....#aa#aaaaaaaa#aaa#bbbb#a#....', +'...#aaa#########aaa#bbbbb#a#....', +'...#aaaaaaaaaaaaaaa#bbbbb#a#....', +'..#aaaaaaaaaaaaaaa#bbbbbb#a#....', +'..#################bbbbbb#a#....', +'..#aaaaaaaaaaaaaaa#bbbbbb#a#....', +'...#aaaaaaaaaaaaaaa#bbbbb#a#....', +'....#aaaaaaaaaaaaaaa#bbbb#a#....', +'....##aaaaaaaaaaaaaaa#bbb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a##aaaaaaaaaaaaaaa#b#a#....', +'....#a####################a#....', +'....#a####################a#....', +'....#aaaaaaaaaaaaaaaaaaaaaa#....', +'...########################.....', +'................................', +'................................', +'................................', +'................................', +'................................'); + + + RXSWITCH_ON : TRxSwithBitmap2 = + ( +'32 48 5 1', +'. c None', +'# c #000000', +'b c #808080', +'c c #ff0000', +'a c #ffffff', +'................................', +'................................', +'................................', +'................................', +'....########################....', +'....#aaaaaaaaaaaaaaaaaaaaaa#....', +'....#a####################a#....', +'....#a####################a#....', +'....#a##aaaaaaaaaaaaaaa#b#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....##aaaaaaaaaaaaaaa#bbb#a#....', +'....#aaaaaaaaaaaaaaa#bbbb#a#....', +'...#aaaaaaaaaaaaaaa#bbbbb#a#....', +'..#aaaaaaaaaaaaaaa#bbbbbb#a#....', +'..#################bbbbbb#a#....', +'..#aaaaaaaaaaaaaaa#bbbbbb#a#....', +'...#aaaaaaaaaaaaaaa#bbbbb#a#....', +'...#aaaaaaaaaaaaaaa#bbbbb#a#....', +'....#aaaaaaaaaaaaaaa#bbbb#a#....', +'....#aaaaaaaaaaaaaaa#bbbb#a#....', +'....##aaaaaaaaaaaaaaa#bbb#a#....', +'....##aaaaaaaaaaaaaaa#bbb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#################bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaa#########aaa#bb#a#....', +'....#a#aaa#ccccccc#aaa#bb#a#....', +'....#a#aaa#ccccccc#aaa#bb#a#....', +'....#a#aaa#ccccccc#aaa#bb#a#....', +'....#a#aaa#ccccccc#aaa#bb#a#....', +'....#a#aaa#########aaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#aaaaaaaaaaaaaaa#bb#a#....', +'....#a#################bb#a#....', +'....#a#bbbbbbbbbbbbbbbb#b#a#....', +'....#a##bbbbbbbbbbbbbbbb##a#....', +'....#a####################a#....', +'....#aaaaaaaaaaaaaaaaaaaaaa#....', +'....########################....', +'................................', +'................................', +'................................', +'................................', +'................................'); diff --git a/components/rx/version/2.1/rxswitch.pas b/components/rx/version/2.1/rxswitch.pas new file mode 100644 index 000000000..8aff100a2 --- /dev/null +++ b/components/rx/version/2.1/rxswitch.pas @@ -0,0 +1,518 @@ +{ rxswitch unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxswitch; + +{$I rx.inc} + +interface + +uses SysUtils, LCLType, LCLProc, LCLIntf, LMessages, Classes, Graphics, + Controls, Forms, {StdCtrls,} ExtCtrls, Menus; + +type + +{ TRxSwitch } + + TTextPos = (tpNone, tpLeft, tpRight, tpAbove, tpBelow); + TSwithState = (sw_off, sw_on); + TSwitchBitmaps = set of TSwithState; + + TRxSwitch = class(TCustomControl) + private + FActive: Boolean; + FBitmaps: array [TSwithState] of TBitmap; + FDisableBitmaps: array [TSwithState] of TBitmap; + FOnOn: TNotifyEvent; + FOnOff: TNotifyEvent; + FStateOn: TSwithState; + FTextPosition: TTextPos; + FBorderStyle: TBorderStyle; + FToggleKey: TShortCut; + FShowFocus: Boolean; + FUserBitmaps: TSwitchBitmaps; + function GetSwitchGlyphOff: TBitmap; + function GetSwitchGlyphOn: TBitmap; + procedure GlyphChanged(Sender: TObject); + procedure SetStateOn(Value: TSwithState); + procedure SetSwitchGlyphOff(const AValue: TBitmap); + procedure SetSwitchGlyphOn(const AValue: TBitmap); + procedure SetTextPosition(Value: TTextPos); + procedure SetBorderStyle(Value: TBorderStyle); + function GetSwitchGlyph(Index: TSwithState): TBitmap; + procedure SetSwitchGlyph(Index: TSwithState; Value: TBitmap); + function StoreBitmap(Index: TSwithState): Boolean; + procedure SetShowFocus(Value: Boolean); + procedure CreateDisabled(Index: TSwithState); + procedure ReadBinaryData(Stream: TStream); + function StoreBitmapOff: boolean; + function StoreBitmapOn: boolean; + procedure WriteBinaryData(Stream: TStream); + procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR; + procedure CMFocusChanged(var Message: TLMessage); message CM_FOCUSCHANGED; + procedure CMTextChanged(var Message: TLMessage); message CM_TEXTCHANGED; + procedure CMEnabledChanged(var Message: TLMessage); message CM_ENABLEDCHANGED; + protected + procedure CreateParams(var Params: TCreateParams); override; + procedure DefineProperties(Filer: TFiler); override; + function GetPalette: HPALETTE; override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure Paint; override; + procedure DoOn; dynamic; + procedure DoOff; dynamic; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure ToggleSwitch; + published + property Align; + property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle + default bsNone; + property Caption; + property Color; + property Cursor; + property DragMode; + property DragCursor; + property Enabled; + property Font; + property GlyphOff: TBitmap read GetSwitchGlyphOff write SetSwitchGlyphOff + stored StoreBitmapOff; + property GlyphOn: TBitmap read GetSwitchGlyphOn write SetSwitchGlyphOn + stored StoreBitmapOn; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowFocus: Boolean read FShowFocus write SetShowFocus default True; + property ToggleKey: TShortCut read FToggleKey write FToggleKey + default VK_SPACE; + property ShowHint; + property StateOn: TSwithState read FStateOn write SetStateOn default sw_off; + property TabOrder; + property TabStop default True; + property TextPosition: TTextPos read FTextPosition write SetTextPosition + default tpNone; + property Anchors; + property Constraints; + property DragKind; + property Visible; + property OnClick; + property OnDblClick; + property OnEnter; + property OnExit; + property OnMouseMove; + property OnMouseDown; + property OnMouseUp; + property OnKeyDown; + property OnKeyUp; + property OnKeyPress; + property OnDragOver; + property OnDragDrop; + property OnEndDrag; + property OnStartDrag; + property OnContextPopup; + property OnEndDock; + property OnStartDock; + property OnOn: TNotifyEvent read FOnOn write FOnOn; + property OnOff: TNotifyEvent read FOnOff write FOnOff; + end; + +{$I RXSWITCH.INC} + +implementation + +uses VCLUtils; + +const + BorderStyles: array[TBorderStyle] of Longint = (0, WS_BORDER); + +{ TRxSwitch component } + +constructor TRxSwitch.Create(AOwner: TComponent); +var + I : TSwithState; +begin + inherited Create(AOwner); + ControlStyle := [csClickEvents, csSetCaption, csCaptureMouse, + csOpaque, csDoubleClicks]; + Width := 50; + Height := 60; + for I := sw_off to sw_on do + begin + FBitmaps[I] := TBitmap.Create; + SetSwitchGlyph(I, nil); + FBitmaps[I].OnChange := @GlyphChanged; + end; + FUserBitmaps := []; + FShowFocus := True; + FStateOn := sw_off; + FTextPosition := tpNone; + FBorderStyle := bsNone; + FToggleKey := VK_SPACE; + TabStop := True; +end; + +destructor TRxSwitch.Destroy; +var + I: Byte; +begin + for I := 0 to 1 do + begin + FBitmaps[TSwithState(I)].OnChange := nil; + FDisableBitmaps[TSwithState(I)].Free; + FBitmaps[TSwithState(I)].Free; + end; + inherited Destroy; +end; + +procedure TRxSwitch.CreateParams(var Params: TCreateParams); +begin + inherited CreateParams(Params); + with Params do begin + WindowClass.Style := WindowClass.Style or CS_HREDRAW or CS_VREDRAW; + Style := Style or Longword(BorderStyles[FBorderStyle]); + end; +end; + +procedure TRxSwitch.DefineProperties(Filer: TFiler); + + function DoWrite: Boolean; + begin + if Assigned(Filer.Ancestor) then + Result := FUserBitmaps <> TRxSwitch(Filer.Ancestor).FUserBitmaps + else Result := FUserBitmaps <> []; + end; + +begin + inherited DefineProperties(Filer); + Filer.DefineBinaryProperty('Data', @ReadBinaryData, @WriteBinaryData, + DoWrite); +end; + +function TRxSwitch.GetPalette: HPALETTE; +begin + if Enabled then Result := FBitmaps[FStateOn].Palette else Result := 0; +end; + +procedure TRxSwitch.ReadBinaryData(Stream: TStream); +begin + Stream.ReadBuffer(FUserBitmaps, SizeOf(FUserBitmaps)); +end; + +function TRxSwitch.StoreBitmapOff: boolean; +begin + Result:=StoreBitmap(sw_off); +end; + +function TRxSwitch.StoreBitmapOn: boolean; +begin + Result:=StoreBitmap(sw_on); +end; + +procedure TRxSwitch.WriteBinaryData(Stream: TStream); +begin + Stream.WriteBuffer(FUserBitmaps, SizeOf(FUserBitmaps)); +end; + +function TRxSwitch.StoreBitmap(Index: TSwithState): Boolean; +begin + Result := Index in FUserBitmaps; +end; + +function TRxSwitch.GetSwitchGlyph(Index: TSwithState): TBitmap; +begin + if csLoading in ComponentState then Include(FUserBitmaps, Index); + Result := FBitmaps[Index] +end; + +procedure TRxSwitch.CreateDisabled(Index: TSwithState); +begin + if FDisableBitmaps[Index] <> nil then + FDisableBitmaps[Index].Free; + try + FDisableBitmaps[Index] :=nil; +// CreateDisabledBitmap(FBitmaps[Index], clBlack); + except + FDisableBitmaps[Index] := nil; + raise; + end; +end; + +procedure TRxSwitch.GlyphChanged(Sender: TObject); +var + I: TSwithState; +begin + for I := sw_off to sw_on do + if Sender = FBitmaps[I] then + begin + CreateDisabled(I); + end; + Invalidate; +end; + +function TRxSwitch.GetSwitchGlyphOff: TBitmap; +begin + Result:=GetSwitchGlyph(sw_off); +end; + +function TRxSwitch.GetSwitchGlyphOn: TBitmap; +begin + Result:=GetSwitchGlyph(sw_on); +end; + +procedure TRxSwitch.SetSwitchGlyph(Index: TSwithState; Value: TBitmap); +begin + if Value <> nil then + begin + FBitmaps[Index].Assign(Value); + Include(FUserBitmaps, Index); + end + else + begin + case Index of + sw_off: FBitmaps[Index].Handle:=CreatePixmapIndirect(@RXSWITCH_OFF[0], + GetSysColor(COLOR_BTNFACE)); + sw_on: FBitmaps[Index].Handle:=CreatePixmapIndirect(@RXSWITCH_ON[0], + GetSysColor(COLOR_BTNFACE)); + end; + Exclude(FUserBitmaps, Index); + end; +end; + +procedure TRxSwitch.CMFocusChanged(var Message: TLMessage); +var + Active: Boolean; +begin +{ with Message do Active := (Sender = Self); + if Active <> FActive then + begin + FActive := Active; + if FShowFocus then Invalidate; + end;} + inherited; +end; + +procedure TRxSwitch.CMEnabledChanged(var Message: TLMessage); +begin + inherited; + Invalidate; +end; + +procedure TRxSwitch.CMTextChanged(var Message: TLMessage); +begin + inherited; + Invalidate; +end; + +procedure TRxSwitch.CMDialogChar(var Message: TCMDialogChar); +begin + if IsAccel(Message.CharCode, Caption) and CanFocus then begin + SetFocus; + Message.Result := 1; + end; +end; + +procedure TRxSwitch.MouseDown(Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if Button = mbLeft then + begin + if TabStop and CanFocus then SetFocus; + ToggleSwitch; + end; + inherited MouseDown(Button, Shift, X, Y); +end; + +procedure TRxSwitch.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + if FToggleKey = ShortCut(Key, Shift) then begin + ToggleSwitch; + Key := 0; + end; +end; + +procedure TRxSwitch.Paint; +var + ARect: TRect; + Text1: array[0..255] of Char; + FontHeight: Integer; + + procedure DrawBitmap(Bmp: TBitmap); + var + TmpImage: TBitmap; + IWidth, IHeight, X, Y: Integer; + IRect: TRect; + begin + IWidth := Bmp.Width; + IHeight := Bmp.Height; + IRect := Rect(0, 0, IWidth, IHeight); + TmpImage := TBitmap.Create; + try + TmpImage.Width := IWidth; + TmpImage.Height := IHeight; + TmpImage.Canvas.Brush.Color := Self.Brush.Color; +// TmpImage.Canvas.BrushCopy(IRect, Bmp, IRect, Bmp.TransparentColor); + X := 0; Y := 0; + case FTextPosition of + tpNone: + begin + X := ((Width - IWidth) div 2); + Y := ((Height - IHeight) div 2); + end; + tpLeft: + begin + X := Width - IWidth; + Y := ((Height - IHeight) div 2); + Dec(ARect.Right, IWidth); + end; + tpRight: + begin + X := 0; + Y := ((Height - IHeight) div 2); + Inc(ARect.Left, IWidth); + end; + tpAbove: + begin + X := ((Width - IWidth) div 2); + Y := Height - IHeight; + Dec(ARect.Bottom, IHeight); + end; + tpBelow: + begin + X := ((Width - IWidth) div 2); + Y := 0; + Inc(ARect.Top, IHeight); + end; + end; +// Canvas.Draw(X, Y, TmpImage); + Canvas.Draw(X, Y, Bmp); +// if Focused and FShowFocus and TabStop and not (csDesigning in ComponentState) then +// Canvas.DrawFocusRect(Rect(X, Y, X + IWidth, Y + IHeight)); +// Canvas.FrameRect(Rect(X, Y, X + IWidth, Y + IHeight)); + finally + TmpImage.Free; + end; + end; + +begin + ARect := GetClientRect; + with Canvas do + begin + Font := Self.Font; + Brush.Color := Self.Color; + FillRect(ARect); + if not Enabled and (FDisableBitmaps[FStateOn] <> nil) then + DrawBitmap(FDisableBitmaps[FStateOn]) + else + DrawBitmap(FBitmaps[FStateOn]); + if FTextPosition <> tpNone then + begin + FontHeight := TextHeight('W'); + with ARect do + begin + Top := ((Bottom + Top) - FontHeight) shr 1; + Bottom := Top + FontHeight; + end; + StrPCopy(Text1, Caption); + DrawText(Handle, Text1, StrLen(Text1), ARect, {DT_EXPANDTABS or }DT_VCENTER or DT_CENTER); + end; + end; +end; + +procedure TRxSwitch.DoOn; +begin + if Assigned(FOnOn) then FOnOn(Self); +end; + +procedure TRxSwitch.DoOff; +begin + if Assigned(FOnOff) then FOnOff(Self); +end; + +procedure TRxSwitch.ToggleSwitch; +begin + StateOn := TSwithState(not boolean(StateOn)); +end; + +procedure TRxSwitch.SetBorderStyle(Value: TBorderStyle); +begin + if FBorderStyle <> Value then + begin + FBorderStyle := Value; + RecreateWnd(Self); + end; +end; + +procedure TRxSwitch.SetStateOn(Value: TSwithState); +begin + if FStateOn <> Value then + begin + FStateOn := Value; + Invalidate; + if Value = sw_on then + DoOn + else + DoOff; + end; +end; + +procedure TRxSwitch.SetSwitchGlyphOff(const AValue: TBitmap); +begin + SetSwitchGlyph(sw_off, AValue); +end; + +procedure TRxSwitch.SetSwitchGlyphOn(const AValue: TBitmap); +begin + SetSwitchGlyph(sw_on, AValue); +end; + +procedure TRxSwitch.SetTextPosition(Value: TTextPos); +begin + if FTextPosition <> Value then + begin + FTextPosition := Value; + Invalidate; + end; +end; + +procedure TRxSwitch.SetShowFocus(Value: Boolean); +begin + if FShowFocus <> Value then + begin + FShowFocus := Value; + if not (csDesigning in ComponentState) then Invalidate; + end; +end; + +end. diff --git a/components/rx/version/2.1/rxsystemservices.pas b/components/rx/version/2.1/rxsystemservices.pas new file mode 100644 index 000000000..0d35f3532 --- /dev/null +++ b/components/rx/version/2.1/rxsystemservices.pas @@ -0,0 +1,112 @@ +unit RxSystemServices; + +{$mode objfpc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs; + +type + TRxServiceType = (sstAll, sstService, sstDrivers); + TRxServiceStatus = (sssAll, sssActive, sssInactive); + TRxServiceState = (srsStoped, //SERVICE_STOPPED : S := 'Ð¡ÐµÑ€Ð²Ð¸Ñ Ð½Ðµ запущен' + srsStartPending, //SERVICE_START_PENDING : S := 'Ð¡ÐµÑ€Ð²Ð¸Ñ Ð² процеÑÑе запуÑка'; + srsStopPending, //SERVICE_STOP_PENDING : S := 'Ð¡ÐµÑ€Ð²Ð¸Ñ Ð² процеÑÑе завершениÑ'; + srsRunning, //SERVICE_RUNNING : S := 'Ð¡ÐµÑ€Ð²Ð¸Ñ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½'; + srsContinuePending, //SERVICE_CONTINUE_PENDING : S := 'Ð¡ÐµÑ€Ð²Ð¸Ñ Ð² процеÑÑе запуÑка поÑле временной оÑнановки'; + srsPausePending, //SERVICE_PAUSE_PENDING : S := 'Ð¡ÐµÑ€Ð²Ð¸Ñ Ð² процеÑÑе временной оÑнановки'; + srsPaused //SERVICE_PAUSED : S := 'Ð¡ÐµÑ€Ð²Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾ оÑнановлен'; + ); + + TRxServiceItem = record + Name:string; + Description:string; + Status:TRxServiceState; + end; + +type + + { TRxSystemServices } + + TRxSystemServices = class(TComponent) + private + FItemCount: integer; + FServerName: string; + FServiceStatus: TRxServiceStatus; + FServiceType: TRxServiceType; + function GetItems(Index: integer): TRxServiceItem; + procedure SetItemCount(const AValue: integer); + procedure SetItems(Index: integer; const AValue: TRxServiceItem); + procedure SetServerName(const AValue: string); + procedure SetServiceStatus(const AValue: TRxServiceStatus); + procedure SetServiceType(const AValue: TRxServiceType); + protected + procedure ClearItems; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Items[Index:integer]:TRxServiceItem read GetItems write SetItems; + property ItemCount:integer read FItemCount write SetItemCount; + published + property ServerName:string read FServerName write SetServerName; + property ServiceType:TRxServiceType read FServiceType write SetServiceType; //(sstAll, sstService, sstDrivers); + property ServiceStatus:TRxServiceStatus read FServiceStatus write SetServiceStatus; //(sssAll, sssActive, sssInactive); + end; + +implementation + +{ TRxSystemServices } + +procedure TRxSystemServices.SetServerName(const AValue: string); +begin + if FServerName=AValue then exit; + FServerName:=AValue; +end; + +function TRxSystemServices.GetItems(Index: integer): TRxServiceItem; +begin + +end; + +procedure TRxSystemServices.SetItemCount(const AValue: integer); +begin + if FItemCount=AValue then exit; + FItemCount:=AValue; +end; + +procedure TRxSystemServices.SetItems(Index: integer; + const AValue: TRxServiceItem); +begin + +end; + +procedure TRxSystemServices.SetServiceStatus(const AValue: TRxServiceStatus); +begin + if FServiceStatus=AValue then exit; + FServiceStatus:=AValue; +end; + +procedure TRxSystemServices.SetServiceType(const AValue: TRxServiceType); +begin + if FServiceType=AValue then exit; + FServiceType:=AValue; +end; + +procedure TRxSystemServices.ClearItems; +begin + FItemCount:=0; +end; + +constructor TRxSystemServices.Create(AOwner: TComponent); +begin + inherited Create(AOwner); +end; + +destructor TRxSystemServices.Destroy; +begin + ClearItems; + inherited Destroy; +end; + +end. diff --git a/components/rx/version/2.1/rxtbrsetup.lfm b/components/rx/version/2.1/rxtbrsetup.lfm new file mode 100644 index 000000000..12b57c242 --- /dev/null +++ b/components/rx/version/2.1/rxtbrsetup.lfm @@ -0,0 +1,332 @@ +object ToolPanelSetupForm: TToolPanelSetupForm + Left = 383 + Height = 487 + Top = 176 + Width = 657 + ActiveControl = PageControl1 + Caption = 'Tool panel setup' + ClientHeight = 487 + ClientWidth = 657 + FormStyle = fsStayOnTop + OnClose = FormClose + OnDestroy = FormDestroy + OnResize = FormResize + Position = poScreenCenter + LCLVersion = '1.1' + object PageControl1: TPageControl + Left = 0 + Height = 433 + Top = 0 + Width = 657 + ActivePage = TabSheet1 + Align = alClient + TabIndex = 0 + TabOrder = 0 + object TabSheet1: TTabSheet + Caption = 'Visible buttons' + ClientHeight = 400 + ClientWidth = 651 + object Label1: TLabel + AnchorSideLeft.Control = BitBtn3 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = TabSheet1 + Left = 349 + Height = 15 + Top = 6 + Width = 102 + BorderSpacing.Around = 6 + Caption = 'Avaliable buttons' + FocusControl = ListBtnAvaliable + ParentColor = False + end + object Label2: TLabel + AnchorSideTop.Control = TabSheet1 + Left = 8 + Height = 15 + Top = 6 + Width = 89 + BorderSpacing.Around = 6 + Caption = 'Visible buttons' + FocusControl = ListBtnVisible + ParentColor = False + end + object BitBtn3: TBitBtn + AnchorSideLeft.Control = BitBtn6 + AnchorSideTop.Control = BitBtn4 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = BitBtn6 + AnchorSideRight.Side = asrBottom + Left = 307 + Height = 30 + Top = 145 + Width = 36 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + BorderSpacing.InnerBorder = 2 + Caption = '<<' + OnClick = BitBtn3Click + TabOrder = 0 + end + object BitBtn4: TBitBtn + AnchorSideLeft.Control = BitBtn6 + AnchorSideTop.Control = BitBtn5 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = BitBtn6 + AnchorSideRight.Side = asrBottom + Left = 307 + Height = 31 + Top = 108 + Width = 36 + Anchors = [akTop, akLeft, akRight] + AutoSize = True + BorderSpacing.Top = 6 + BorderSpacing.InnerBorder = 2 + Caption = '<' + OnClick = BitBtn4Click + TabOrder = 1 + end + object BitBtn5: TBitBtn + AnchorSideLeft.Control = BitBtn6 + AnchorSideTop.Control = BitBtn6 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = BitBtn6 + AnchorSideRight.Side = asrBottom + Left = 307 + Height = 38 + Top = 64 + Width = 36 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + BorderSpacing.InnerBorder = 2 + Caption = '>' + OnClick = BitBtn5Click + TabOrder = 2 + end + object BitBtn6: TBitBtn + AnchorSideLeft.Control = TabSheet1 + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = ListBtnAvaliable + Left = 307 + Height = 31 + Top = 27 + Width = 36 + AutoSize = True + BorderSpacing.InnerBorder = 2 + Caption = '>>' + OnClick = BitBtn6Click + TabOrder = 3 + end + object ListBtnAvaliable: TListBox + AnchorSideLeft.Control = BitBtn3 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = TabSheet1 + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = cbShowCaption + Left = 349 + Height = 271 + Top = 27 + Width = 296 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + IntegralHeight = True + Items.Strings = ( + '111' + '222' + '333' + '44' + '555' + '666' + '777' + ) + ItemHeight = 0 + OnClick = ListBtnAvaliableClick + OnDrawItem = ListBox1DrawItem + ScrollWidth = 294 + Style = lbOwnerDrawFixed + TabOrder = 4 + end + object ListBtnVisible: TListBox + AnchorSideLeft.Control = Label2 + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = BitBtn6 + AnchorSideBottom.Control = cbShowCaption + Left = 14 + Height = 271 + Top = 27 + Width = 287 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + ItemHeight = 0 + OnClick = ListBtnAvaliableClick + OnDrawItem = ListBox1DrawItem + ScrollWidth = 285 + Style = lbOwnerDrawFixed + TabOrder = 5 + TopIndex = -1 + end + object Panel1: TPanel + AnchorSideBottom.Control = TabSheet1 + AnchorSideBottom.Side = asrBottom + Left = 3 + Height = 62 + Top = 332 + Width = 639 + Alignment = taLeftJustify + Anchors = [akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + BevelOuter = bvLowered + FullRepaint = False + TabOrder = 6 + end + object cbShowCaption: TCheckBox + AnchorSideLeft.Control = TabSheet1 + AnchorSideBottom.Control = Panel1 + Left = 6 + Height = 22 + Top = 304 + Width = 105 + Anchors = [akLeft, akBottom] + BorderSpacing.Around = 6 + Caption = 'Show caption' + OnChange = cbShowCaptionChange + TabOrder = 7 + end + end + object TabSheet2: TTabSheet + Caption = 'Options' + ClientHeight = 400 + ClientWidth = 651 + object cbShowHint: TCheckBox + AnchorSideLeft.Control = TabSheet2 + AnchorSideTop.Control = cbTransp + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 22 + Top = 163 + Width = 82 + BorderSpacing.Around = 6 + Caption = 'Show hint' + TabOrder = 0 + end + object cbTransp: TCheckBox + AnchorSideLeft.Control = TabSheet2 + AnchorSideTop.Control = cbFlatBtn + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 22 + Top = 135 + Width = 94 + BorderSpacing.Around = 6 + Caption = 'Transparent' + TabOrder = 1 + end + object cbFlatBtn: TCheckBox + AnchorSideLeft.Control = TabSheet2 + AnchorSideTop.Control = RadioGroup1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 22 + Top = 107 + Width = 93 + BorderSpacing.Around = 6 + Caption = 'Flat buttons' + TabOrder = 2 + end + object RadioGroup1: TRadioGroup + AnchorSideLeft.Control = Panel2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = TabSheet2 + AnchorSideRight.Control = TabSheet2 + AnchorSideRight.Side = asrBottom + Left = 333 + Height = 95 + Top = 6 + Width = 312 + Anchors = [akTop, akLeft, akRight] + AutoFill = False + AutoSize = True + BorderSpacing.Around = 6 + Caption = 'Button align' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 78 + ClientWidth = 308 + Items.Strings = ( + 'None' + 'Left' + 'Rignt' + ) + TabOrder = 3 + TabStop = True + end + object RadioGroup2: TRadioGroup + AnchorSideLeft.Control = TabSheet2 + AnchorSideTop.Control = TabSheet2 + AnchorSideRight.Control = Panel2 + Left = 6 + Height = 95 + Top = 6 + Width = 312 + Anchors = [akTop, akLeft, akRight] + AutoFill = True + AutoSize = True + BorderSpacing.Around = 6 + Caption = 'Tool bar style' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 78 + ClientWidth = 308 + Items.Strings = ( + 'Standart' + 'Windows XP' + 'Native' + ) + TabOrder = 4 + TabStop = True + end + object Panel2: TPanel + AnchorSideLeft.Control = TabSheet2 + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = TabSheet2 + AnchorSideBottom.Control = TabSheet2 + AnchorSideBottom.Side = asrBottom + Left = 324 + Height = 388 + Top = 6 + Width = 3 + Anchors = [akTop, akLeft, akBottom] + BorderSpacing.Around = 6 + TabOrder = 5 + end + end + end + object ButtonPanel1: TButtonPanel + Left = 6 + Height = 42 + Top = 439 + Width = 645 + OKButton.Name = 'OKButton' + OKButton.DefaultCaption = True + HelpButton.Name = 'HelpButton' + HelpButton.DefaultCaption = True + CloseButton.Name = 'CloseButton' + CloseButton.DefaultCaption = True + CancelButton.Name = 'CancelButton' + CancelButton.DefaultCaption = True + TabOrder = 1 + ShowButtons = [pbClose, pbHelp] + end +end diff --git a/components/rx/version/2.1/rxtbrsetup.lrt b/components/rx/version/2.1/rxtbrsetup.lrt new file mode 100644 index 000000000..9025b32b3 --- /dev/null +++ b/components/rx/version/2.1/rxtbrsetup.lrt @@ -0,0 +1,15 @@ +TTOOLPANELSETUPFORM.CAPTION=Tool panel setup +TTOOLPANELSETUPFORM.TABSHEET1.CAPTION=Visible buttons +TTOOLPANELSETUPFORM.LABEL1.CAPTION=Avaliable buttons +TTOOLPANELSETUPFORM.LABEL2.CAPTION=Visible buttons +TTOOLPANELSETUPFORM.BITBTN3.CAPTION=<< +TTOOLPANELSETUPFORM.BITBTN4.CAPTION=< +TTOOLPANELSETUPFORM.BITBTN5.CAPTION=> +TTOOLPANELSETUPFORM.BITBTN6.CAPTION=>> +TTOOLPANELSETUPFORM.CBSHOWCAPTION.CAPTION=Show caption +TTOOLPANELSETUPFORM.TABSHEET2.CAPTION=Options +TTOOLPANELSETUPFORM.CBSHOWHINT.CAPTION=Show hint +TTOOLPANELSETUPFORM.CBTRANSP.CAPTION=Transparent +TTOOLPANELSETUPFORM.CBFLATBTN.CAPTION=Flat buttons +TTOOLPANELSETUPFORM.RADIOGROUP1.CAPTION=Button align +TTOOLPANELSETUPFORM.RADIOGROUP2.CAPTION=Tool bar style diff --git a/components/rx/version/2.1/rxtbrsetup.pas b/components/rx/version/2.1/rxtbrsetup.pas new file mode 100644 index 000000000..216b4e322 --- /dev/null +++ b/components/rx/version/2.1/rxtbrsetup.pas @@ -0,0 +1,319 @@ +{ rxtbrsetup unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxtbrsetup; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons, + rxtoolbar, StdCtrls, ComCtrls, ExtCtrls, ButtonPanel; + +type + + { TToolPanelSetupForm } + + TToolPanelSetupForm = class(TForm) + BitBtn3: TBitBtn; + BitBtn4: TBitBtn; + BitBtn5: TBitBtn; + BitBtn6: TBitBtn; + ButtonPanel1: TButtonPanel; + cbShowHint: TCheckBox; + cbTransp: TCheckBox; + cbFlatBtn: TCheckBox; + cbShowCaption: TCheckBox; + Label1: TLabel; + Label2: TLabel; + ListBtnAvaliable: TListBox; + ListBtnVisible: TListBox; + PageControl1: TPageControl; + Panel1: TPanel; + Panel2: TPanel; + RadioGroup1: TRadioGroup; + RadioGroup2: TRadioGroup; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + procedure BitBtn3Click(Sender: TObject); + procedure BitBtn4Click(Sender: TObject); + procedure BitBtn5Click(Sender: TObject); + procedure BitBtn6Click(Sender: TObject); + procedure CheckBox1Change(Sender: TObject); + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); + procedure FormDestroy(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure ListBox1DrawItem(Control: TWinControl; Index: Integer; + ARect: TRect; State: TOwnerDrawState); + procedure ListBtnAvaliableClick(Sender: TObject); + procedure cbShowCaptionChange(Sender: TObject); + private + procedure FillItems(List:TStrings; AVisible:boolean); + procedure UpdateStates; + procedure Localize; + public + FToolPanel:TToolPanel; + constructor CreateSetupForm(AToolPanel:TToolPanel); + end; + +var + ToolPanelSetupForm: TToolPanelSetupForm; + +implementation +uses vclutils, ActnList, boxprocs, rxconst; + +{$R *.lfm} + +type + THackToolPanel = class(TToolPanel); +{ TToolPanelSetupForm } + +procedure TToolPanelSetupForm.FormDestroy(Sender: TObject); +begin + if Assigned(FToolPanel) then + begin + THackToolPanel(FToolPanel).SetCustomizing(false); + THackToolPanel(FToolPanel).FCustomizer:=nil; + end; +end; + +procedure TToolPanelSetupForm.FormResize(Sender: TObject); +begin + ListBtnVisible.Width:=BitBtn6.Left - 4 - ListBtnVisible.Left; + ListBtnAvaliable.Left:=BitBtn6.Left + BitBtn6.Width + 4; + ListBtnAvaliable.Width:=Width - ListBtnAvaliable.Left - 4; + Label1.Left:=ListBtnAvaliable.Left; +end; + +procedure TToolPanelSetupForm.ListBox1DrawItem(Control: TWinControl; + Index: Integer; ARect: TRect; State: TOwnerDrawState); +var + Offset:integer; + P:TToolbarItem; + BtnRect:TRect; + Cnv:TCanvas; +begin + Cnv:=(Control as TListBox).Canvas; + Cnv.FillRect(ARect); { clear the rectangle } + P:=TToolbarItem((Control as TListBox).Items.Objects[Index]); + if Assigned(P) then + begin + if Assigned(FToolPanel.ImageList) and Assigned(P.Action) then + begin + if (P.Action is TCustomAction) and + (TCustomAction(P.Action).ImageIndex>-1) and + (TCustomAction(P.Action).ImageIndex < FToolPanel.ImageList.Count) then + begin + Offset := 2; + BtnRect.Top:=ARect.Top + 2; + BtnRect.Left:=ARect.Left + Offset; + BtnRect.Right:=BtnRect.Left + FToolPanel.BtnWidth; + BtnRect.Bottom:=BtnRect.Top + FToolPanel.BtnHeight; + Cnv.Brush.Color := clBtnFace; + Cnv.FillRect(BtnRect); + DrawButtonFrame(Cnv, BtnRect, false, false); + FToolPanel.ImageList.Draw(Cnv, BtnRect.Left + (FToolPanel.BtnWidth - FToolPanel.ImageList.Width) div 2, + BtnRect.Top + (FToolPanel.BtnHeight - FToolPanel.ImageList.Height) div 2, + TCustomAction(P.Action).ImageIndex, True); + Offset:=BtnRect.Right; + end; + Offset := Offset + 6; + Cnv.TextOut(ARect.Left + Offset, (ARect.Top + ARect.Bottom - Cnv.TextHeight('W')) div 2, TCustomAction(P.Action).Caption); { display the text } + end; + end; +end; + +procedure TToolPanelSetupForm.ListBtnAvaliableClick(Sender: TObject); +begin + with (Sender as TListBox) do + begin + if (ItemIndex>-1) and (ItemIndex<Items.Count) then + begin + Panel1.Caption:=TCustomAction(TToolbarItem(Items.Objects[ItemIndex]).Action).Hint; + if Sender = ListBtnVisible then + cbShowCaption.Checked:=TToolbarItem(Items.Objects[ItemIndex]).ShowCaption; + end; + end; +end; + +procedure TToolPanelSetupForm.cbShowCaptionChange(Sender: TObject); +begin + if (ListBtnVisible.ItemIndex>-1) and (ListBtnVisible.ItemIndex<ListBtnVisible.Items.Count) then + TToolbarItem(ListBtnVisible.Items.Objects[ListBtnVisible.ItemIndex]).ShowCaption:=cbShowCaption.Checked; +end; + +procedure TToolPanelSetupForm.FillItems(List: TStrings; AVisible: boolean); +var + i, p:integer; +begin + List.Clear; + for i:=0 to FToolPanel.Items.Count - 1 do + begin + if (FToolPanel.Items[i].Visible = AVisible) and Assigned(FToolPanel.Items[i].Action) then + begin + P:=List.Add(FToolPanel.Items[i].Action.Name); + List.Objects[P]:=FToolPanel.Items[i]; + end; + end; +end; + +procedure TToolPanelSetupForm.UpdateStates; +var + i:integer; +begin + for I:=0 to ListBtnVisible.Items.Count - 1 do + TToolbarItem(ListBtnVisible.Items.Objects[i]).Visible:=true; + + for I:=0 to ListBtnAvaliable.Items.Count - 1 do + TToolbarItem(ListBtnAvaliable.Items.Objects[i]).Visible:=false; + + BitBtn6.Enabled:=ListBtnVisible.Items.Count>0; + BitBtn5.Enabled:=ListBtnVisible.Items.Count>0; + cbShowCaption.Enabled:=ListBtnVisible.Items.Count>0; + + BitBtn4.Enabled:=ListBtnAvaliable.Items.Count>0; + BitBtn3.Enabled:=ListBtnAvaliable.Items.Count>0; + cbFlatBtn.Checked:=tpTransparentBtns in FToolPanel.Options; +end; + +procedure TToolPanelSetupForm.Localize; +begin + Caption:=sToolPanelSetup; + TabSheet1.Caption:=sVisibleButtons; + TabSheet2.Caption:=sOptions; + Label2.Caption:=sVisibleButtons; + Label2.Caption:=sVisibleButtons; + Label1.Caption:=sAvaliableButtons; + cbShowCaption.Caption:=sShowCaption; + RadioGroup2.Caption:=sToolBarStyle; + RadioGroup2.Items.Clear; + RadioGroup2.Items.Add(sToolBarStyle1); + RadioGroup2.Items.Add(sToolBarStyle2); + RadioGroup2.Items.Add(sToolBarStyle3); + cbFlatBtn.Caption:=sFlatButtons; + cbTransp.Caption:=sTransparent; + cbShowHint.Caption:=sShowHint; + RadioGroup1.Caption:=sButtonAlign; + RadioGroup1.Items.Clear; + RadioGroup1.Items.Add(sButtonAlign1); + RadioGroup1.Items.Add(sButtonAlign2); + RadioGroup1.Items.Add(sButtonAlign3); +end; + +procedure TToolPanelSetupForm.FormClose(Sender: TObject; + var CloseAction: TCloseAction); +begin + CloseAction:=caFree; +end; + +procedure TToolPanelSetupForm.CheckBox1Change(Sender: TObject); +var + tpo:TToolPanelOptions; +begin + tpo:=FToolPanel.Options; + if cbTransp.Checked then + tpo:=tpo + [tpTransparentBtns] + else + tpo:=tpo - [tpTransparentBtns]; + + FToolPanel.ToolBarStyle:=TToolBarStyle(RadioGroup2.ItemIndex); + + if cbFlatBtn.Checked then + tpo:=tpo + [tpFlatBtns] + else + tpo:=tpo - [tpFlatBtns]; + + FToolPanel.ShowHint:=cbShowHint.Checked; + FToolPanel.Options:=tpo; + + FToolPanel.ButtonAllign:=TToolButtonAllign(RadioGroup1.ItemIndex); + cbFlatBtn.Checked:=tpFlatBtns in FToolPanel.Options; +end; + +procedure TToolPanelSetupForm.BitBtn4Click(Sender: TObject); +begin + BoxMoveSelectedItems(ListBtnAvaliable, ListBtnVisible); + UpdateStates; +end; + +procedure TToolPanelSetupForm.BitBtn3Click(Sender: TObject); +begin + BoxMoveAllItems(ListBtnAvaliable, ListBtnVisible); + UpdateStates; +end; + +procedure TToolPanelSetupForm.BitBtn5Click(Sender: TObject); +begin + BoxMoveSelectedItems(ListBtnVisible, ListBtnAvaliable); + UpdateStates; +end; + +procedure TToolPanelSetupForm.BitBtn6Click(Sender: TObject); +begin + BoxMoveAllItems(ListBtnVisible, ListBtnAvaliable); + UpdateStates; +end; + +constructor TToolPanelSetupForm.CreateSetupForm(AToolPanel: TToolPanel); +begin + inherited Create(AToolPanel); + Localize; + PageControl1.ActivePageIndex:=0; + FormResize(nil); + FToolPanel:=AToolPanel; + + + cbFlatBtn.Checked:=tpFlatBtns in FToolPanel.Options; + cbTransp.Checked:=tpTransparentBtns in FToolPanel.Options; + cbShowHint.Checked:=FToolPanel.ShowHint; + + ListBtnAvaliable.ItemHeight:=FToolPanel.BtnHeight + 4; + ListBtnVisible.ItemHeight:=FToolPanel.BtnHeight + 4; + + FillItems(ListBtnVisible.Items, true); + FillItems(ListBtnAvaliable.Items, false); + + RadioGroup1.ItemIndex:=Ord(FToolPanel.ButtonAllign); + RadioGroup2.ItemIndex:=Ord(FToolPanel.ToolBarStyle); + + UpdateStates; + + cbFlatBtn.OnChange:=@CheckBox1Change; + cbTransp.OnChange:=@CheckBox1Change; + cbShowHint.OnChange:=@CheckBox1Change; + RadioGroup1.OnClick:=@CheckBox1Change; + RadioGroup2.OnClick:=@CheckBox1Change; + +end; + +end. + diff --git a/components/rx/version/2.1/rxtimeedit.pas b/components/rx/version/2.1/rxtimeedit.pas new file mode 100644 index 000000000..ae1ee0cea --- /dev/null +++ b/components/rx/version/2.1/rxtimeedit.pas @@ -0,0 +1,306 @@ +{ RxTimeEdit unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RxTimeEdit; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, rxspin, + MaskEdit, LMessages, LCLType; + +type + + { TCustomRxTimeEdit } + + TCustomRxTimeEdit = class(TCustomMaskEdit) + private + FButton: TRxSpinButton; + FButtonNeedsFocus: Boolean; + FOnButtonClick : TNotifyEvent; + procedure CheckButtonVisible; + function GetButtonHint: TTranslateString; + function GetTime: TTime; + procedure SetButtonHint(const AValue: TTranslateString); + procedure SetButtonNeedsFocus(const AValue: Boolean); + procedure SetTime(const AValue: TTime); + procedure DoChangeValue(AValue:integer); + procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; + procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS; + protected + procedure SetParent(AParent: TWinControl); override; + procedure DoPositionButton; virtual; + procedure UpClick(Sender: TObject); virtual; + procedure DownClick(Sender: TObject); virtual; + property ButtonOnlyWhenFocused: Boolean read FButtonNeedsFocus write SetButtonNeedsFocus default False; + property OnButtonClick : TNotifyEvent read FOnButtonClick write FOnButtonClick; + property ButtonHint: TTranslateString read GetButtonHint write SetButtonHint; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Time:TTime read GetTime write SetTime; + end; + +type + TRxTimeEdit = class(TCustomRxTimeEdit) + published + property AutoSize; + property AutoSelect; + property Align; + property Anchors; + property BorderSpacing; + property ButtonOnlyWhenFocused; + property ButtonHint; + property CharCase; + property Color; +// property DirectInput; + property DragCursor; + property DragMode; + property EchoMode; + property Enabled; +// property Flat; + property Font; +// property Glyph; + property MaxLength; +// property NumGlyphs; + property OnButtonClick; + property OnChange; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEditingDone; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + property OnUTF8KeyPress; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PasswordChar; + property PopupMenu; + property ReadOnly; + property ShowHint; + property TabOrder; + property TabStop; + property Text; + property Visible; + end; + +implementation + + +{ TCustomRxTimeEdit } + +procedure TCustomRxTimeEdit.CheckButtonVisible; +begin + If Assigned(FButton) then + FButton.Visible:=(csdesigning in ComponentState) or + (Visible and (Focused or not FButtonNeedsFocus)); +end; + +function TCustomRxTimeEdit.GetButtonHint: TTranslateString; +begin + Result:=FButton.Hint; +end; + +function TCustomRxTimeEdit.GetTime: TTime; +begin + Result:=StrToTimeDef(Text, 0); +end; + +procedure TCustomRxTimeEdit.SetButtonHint(const AValue: TTranslateString); +begin + if AValue = '' then + FButton.Hint:=Hint + else + FButton.Hint:=AValue; +end; + +procedure TCustomRxTimeEdit.SetButtonNeedsFocus(const AValue: Boolean); +begin + if FButtonNeedsFocus<>AValue then + begin + FButtonNeedsFocus:=AValue; + CheckButtonVisible; + end; +end; + +procedure TCustomRxTimeEdit.SetTime(const AValue: TTime); +begin + Text:=TimeToStr(AValue); +end; + +procedure TCustomRxTimeEdit.DoChangeValue(AValue: integer); +var + S:ShortString; + H1, M2, S3:Integer; + i,p:integer; + +procedure IncHour; +begin + H1:=H1+AValue; + if H1>23 then + H1:=0 + else + if H1<0 then + H1:=23; +end; + +procedure IncMin; +begin + M2:=M2+AValue; + if M2>59 then + M2:=0 + else + if M2<0 then + M2:=59 + else + exit; + IncHour; +end; + +procedure IncSec; +begin + S3:=S3+AValue; + if S3>59 then + S3:=0 + else + if S3<0 then + S3:=59 + else + exit; + IncMin; +end; + +begin + S:=Text; + for i:=1 to Length(S) do + if S[i]=' ' then + S[i]:='0'; + + H1:=StrToInt(S[1]+S[2]); + M2:=StrToInt(S[4]+S[5]); + S3:=StrToInt(S[7]+S[8]); + P:=GetSelStart; + if P < 3 then IncHour + else + if P < 6 then IncMin + else IncSec; + Text:=Format('%2.2d'+ DefaultFormatSettings.TimeSeparator +'%2.2d'+ DefaultFormatSettings.TimeSeparator +'%2.2d', [H1, M2, S3]); + SetSelStart(P); +end; + +procedure TCustomRxTimeEdit.WMSetFocus(var Message: TLMSetFocus); +begin + FButton.Visible:=True; + inherited; +end; + +procedure TCustomRxTimeEdit.WMKillFocus(var Message: TLMKillFocus); +begin + if FButtonNeedsFocus then + FButton.Visible:=False; + inherited; +end; + +procedure TCustomRxTimeEdit.SetParent(AParent: TWinControl); +begin + inherited SetParent(AParent); + if FButton <> nil then + begin + DoPositionButton; + CheckButtonVisible; + end; +end; + +procedure TCustomRxTimeEdit.DoPositionButton; +begin + if FButton = nil then exit; + FButton.Parent := Parent; + FButton.Visible := Visible; + FButton.AnchorToCompanion(akLeft,0,Self); +// if FButton.Width = 0 then + FButton.Width:=26;//Height; +end; + +procedure TCustomRxTimeEdit.UpClick(Sender: TObject); +begin + if not ReadOnly then + begin + DoChangeValue(1); + if Assigned(FOnButtonClick) then + FOnButtonClick(Self); + end; +end; + +procedure TCustomRxTimeEdit.DownClick(Sender: TObject); +begin + if not ReadOnly then + begin + DoChangeValue(-1); + if Assigned(FOnButtonClick) then + FOnButtonClick(Self); + end; +end; + +constructor TCustomRxTimeEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FButton := TRxSpinButton.Create(Self); + FButton.FocusControl := Self; + FButton.Width := Self.Height; + FButton.Height := Self.Height; + FButton.FreeNotification(Self); + FButton.ControlStyle := FButton.ControlStyle + [csNoDesignSelectable]; + FButton.OnTopClick := @UpClick; + FButton.OnBottomClick := @DownClick; + + EditMask:='!#0'+DefaultFormatSettings.TimeSeparator + '00'+DefaultFormatSettings.TimeSeparator + '00;1;_'; +end; + +destructor TCustomRxTimeEdit.Destroy; +begin + if FButton <> nil then + FreeAndNil(FButton); + inherited Destroy; +end; + +end. diff --git a/components/rx/version/2.1/rxtoolbar.pas b/components/rx/version/2.1/rxtoolbar.pas new file mode 100644 index 000000000..e7a637d5c --- /dev/null +++ b/components/rx/version/2.1/rxtoolbar.pas @@ -0,0 +1,1450 @@ +{ rxtoolbar unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxtoolbar; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LCLType, LCLIntf, Buttons, Controls, ExtCtrls, ActnList, + PropertyStorage, Menus, Forms, types, Graphics; + +const + DefButtonWidth = 24; + DefButtonHeight = 23; +const + DropDownExtraBtnWidth = 15; + +type + TToolPanel = class; + TToolbarItem = class; + TToolbarButtonStyle = (tbrButton, tbrCheck, tbrDropDown, tbrSeparator, + tbrDivider, tbrDropDownExtra); + TToolBarStyle = (tbsStandart, tbsWindowsXP, tbsNative); + TToolButtonAllign = (tbaNone, tbaLeft, tbaRignt); + + TToolPanelOption = (tpFlatBtns, tpTransparentBtns, tpStretchBitmap, + tpCustomizable, tpGlyphPopup, tpCaptionPopup); + TToolPanelOptions = set of TToolPanelOption; + + { TToolbarButtonActionLink } + + TToolbarButtonActionLink = class(TSpeedButtonActionLink) + protected + procedure SetImageIndex(Value: Integer); override; + function IsImageIndexLinked: Boolean; override; + procedure SetEnabled(Value: Boolean); override; + procedure SetCaption(const Value: string); override; + end; + + TToolbarButtonActionLinkClass = class of TToolbarButtonActionLink; + + { TToolbarButton } + TToolbarButton = class(TCustomSpeedButton) + private + FDesign:boolean; + FDesignX, + FDesignY:integer; + FDrag:boolean; + FImageList:TImageList; + FImageListSelected:TImageList; + FDropDownMenu:TPopupMenu; +// FShowCaption:boolean; + FToolbarButtonStyle:TToolbarButtonStyle; + FLastDrawFlagsA:integer; + //FAutoSize:boolean; + FOwnerItem:TToolbarItem; + FFullPush:boolean; + function IsDesignMode:boolean; + procedure PaintSeparator; + protected + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + procedure MouseLeave; override; + procedure Paint; override; + procedure Click; override; + procedure UpdateState(InvalidateOnChange: boolean); override; + procedure SetDesign(AValue:boolean; AToolbarItem:TToolbarItem); + //procedure SetAutoSize(AValue:boolean); + procedure UpdateSize; + procedure SetEnabled(NewEnabled: boolean); override; + function GetActionLinkClass: TControlActionLinkClass; override; + function GetDrawFlagsA: integer; + public + procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override; + destructor Destroy; override; + end; + + { TToolbarItem } + + TToolbarItem = class(TCollectionItem) + private + FButton: TToolbarButton; + FSaveLeft:integer; +// FActionLink:TActionLink; + function GetAction: TBasicAction; + //function GetAutoSize: boolean; + function GetButtonStyle: TToolbarButtonStyle; + function GetDropDownMenu: TPopupMenu; + function GetGroupIndex: Integer; + function GetHeight: Integer; + function GetLayout: TButtonLayout; + function GetLeft: Integer; + function GetShowCaption: boolean; + function GetTag: Longint; + function GetTop: Integer; + function GetVisible: boolean; + function GetWidth: Integer; +// procedure OnActionChanges(Sender: TObject); + procedure SetAction(const AValue: TBasicAction); + //procedure SetAutoSize(const AValue: boolean); + procedure SetButtonStyle(const AValue: TToolbarButtonStyle); + procedure SetDropDownMenu(const AValue: TPopupMenu); + procedure SetGroupIndex(const AValue: Integer); + procedure SetHeight(const AValue: Integer); + procedure SetLayout(const AValue: TButtonLayout); + procedure SetLeft(const AValue: Integer); + procedure SetShowCaption(const AValue: boolean); + procedure SetTag(const AValue: Longint); + procedure SetTop(const AValue: Integer); + procedure SetVisible(const AValue: boolean); + procedure SetWidth(const AValue: Integer); + + procedure UpdateLeftAfterLoad; + protected + function GetDisplayName: string; override; + public + constructor Create(ACollection: TCollection); override; + destructor Destroy; override; + published + property Action:TBasicAction read GetAction write SetAction; + //property AutoSize:boolean read GetAutoSize write SetAutoSize default true; + property Visible:boolean read GetVisible write SetVisible; + property Left: Integer read GetLeft write SetLeft; + property Height: Integer read GetHeight write SetHeight; + property Top: Integer read GetTop write SetTop; + property Width: Integer read GetWidth write SetWidth; + property DropDownMenu: TPopupMenu read GetDropDownMenu write SetDropDownMenu; + property ShowCaption:boolean read GetShowCaption write SetShowCaption; + property GroupIndex: Integer read GetGroupIndex write SetGroupIndex default 0; + property Layout: TButtonLayout read GetLayout write SetLayout default blGlyphLeft; + property ButtonStyle:TToolbarButtonStyle read GetButtonStyle write SetButtonStyle default tbrButton; + property Tag: Longint read GetTag write SetTag default 0; + end; + + { TToolbarItems } + + TToolbarItems = class(TOwnedCollection) + private + FToolPanel:TToolPanel; + function GetByActionName(ActionName: string): TToolbarItem; + function GetToolbarItem(Index: Integer): TToolbarItem; + procedure SetToolbarItem(Index: Integer; const AValue: TToolbarItem); + public + constructor Create(ToolPanel: TToolPanel); + property Items[Index: Integer]: TToolbarItem read GetToolbarItem write SetToolbarItem; default; + property ByActionName[ActionName:string]:TToolbarItem read GetByActionName; + end; + + { TToolPanel } + + TToolPanel = class(TCustomPanel) + private + FButtonAllign: TToolButtonAllign; + FImageList: TImageList; + FImageListSelected: TImageList; + FOptions: TToolPanelOptions; + FPropertyStorageLink:TPropertyStorageLink; + FToolbarItems:TToolbarItems; + FDefButtonWidth:integer; + FDefButtonHeight:integer; + FToolBarStyle: TToolBarStyle; + FVersion: Integer; + FArrowBmp:TBitmap; + function GetBtnHeight: Integer; + function GetBtnWidth: Integer; + function GetItems: TToolbarItems; + function GetPropertyStorage: TCustomPropertyStorage; + procedure SetBtnHeight(const AValue: Integer); + procedure SetBtnWidth(const AValue: Integer); + procedure SetButtonAllign(const AValue: TToolButtonAllign); + procedure SetImageList(const AValue: TImageList); + procedure SetImageListSelected(const AValue: TImageList); + procedure SetItems(const AValue: TToolbarItems); + procedure SetOptions(const AValue: TToolPanelOptions); + procedure SetPropertyStorage(const AValue: TCustomPropertyStorage); + procedure OnIniSave(Sender: TObject); + procedure OnIniLoad(Sender: TObject); + procedure SetToolBarStyle(const AValue: TToolBarStyle); + procedure ReAlignToolBtn; + protected + FCustomizer:TForm; + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + procedure SetCustomizing(AValue:boolean); + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + procedure RequestAlign; override; + procedure Loaded; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Customize(HelpCtx: Longint); + procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override; + published + property Items:TToolbarItems read GetItems write SetItems; + property ImageList:TImageList read FImageList write SetImageList; + property ImageListSelected:TImageList read FImageListSelected write SetImageListSelected; + property PropertyStorage:TCustomPropertyStorage read GetPropertyStorage write SetPropertyStorage; + property BtnWidth: Integer read GetBtnWidth write SetBtnWidth default DefButtonWidth; + property BtnHeight: Integer read GetBtnHeight write SetBtnHeight default DefButtonHeight; + property ToolBarStyle:TToolBarStyle read FToolBarStyle write SetToolBarStyle default tbsStandart; + property Options:TToolPanelOptions read FOptions write SetOptions; + property Version: Integer read FVersion write FVersion default 0; + property ButtonAllign:TToolButtonAllign read FButtonAllign write SetButtonAllign default tbaLeft; + + property Align; + property Alignment; + property Anchors; + //property AutoSize; + property BorderSpacing; + property BevelInner; + property BevelOuter; + property BevelWidth; + property BorderWidth; + property BorderStyle; + property ChildSizing; + property ClientHeight; + property ClientWidth; + property Color; + property Constraints; + property DragMode; + property Enabled; + property Font; + property FullRepaint; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnResize; + property OnStartDrag; + end; + +implementation +uses Math, RxTBRSetup, LCLProc, vclutils, Dialogs, typinfo, rxdconst, GraphType, + LResources; + +const + BtnAl2Align:array [TToolButtonAllign] of TAlign = (alNone, alLeft, alRight); + +{ TToolbarButton } + +function TToolbarButton.IsDesignMode: boolean; +begin + Result:=(Assigned(Parent) and (csDesigning in Parent.ComponentState)) or (FDesign); +end; + +procedure TToolbarButton.PaintSeparator; +var + PaintRect: TRect; + X, H:integer; +begin + PaintRect:=ClientRect; + Canvas.Brush.Color := Color; + Canvas.FillRect(PaintRect); + if FToolbarButtonStyle = tbrSeparator then + begin + X:=Width div 2 - 1; + H:=TToolPanel(Parent).Height; + if X>0 then + begin + Canvas.Pen.Color:=clBtnShadow; + Canvas.Line(X, 1, X, H); + Canvas.Pen.Color:=clWindow; + Canvas.Line(X+1, 1, X+1, H); + end; + end; +end; + +procedure TToolbarButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, + Y: Integer); +begin + if IsDesignMode then + begin + FDrag:=true; + FDesignX:=Max(X-1, 1); + FDesignY:=Max(Y-1, 1); + end + else + begin + FFullPush:=X < (Width - DropDownExtraBtnWidth - 5); + inherited MouseDown(Button, Shift, X, Y); + end; +end; + +procedure TToolbarButton.MouseMove(Shift: TShiftState; X, Y: Integer); +begin + if IsDesignMode and FDrag then + begin + Top:=Max(0, Min(Y+Top-FDesignY, Parent.Height - Height)); + Left:=Max(0, Min(X+Left-FDesignX, Parent.Width - Width)); + end + else + begin +// FFullPuch:=(X-Left) < (Width - DropDownExtraBtnWidth); + inherited MouseMove(Shift, X, Y); + end +end; + +procedure TToolbarButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, + Y: Integer); +begin + if IsDesignMode then + begin + FDrag:=false; + Top:=4; + end + else + inherited MouseUp(Button, Shift, X, Y); +end; + +procedure TToolbarButton.MouseLeave; +begin + inherited MouseLeave; + FFullPush:=true; +end; + +procedure TToolbarButton.Paint; +var + PaintRect, PaintRect1: TRect; + GlyphWidth, GlyphHeight: Integer; + Offset, OffsetCap: TPoint; + ClientSize, TotalSize, TextSize: TSize; + //BrushStyle : TBrushStyle; + M, S : integer; + TXTStyle : TTextStyle; + SIndex : Longint; + TMP : String; +begin + if FToolbarButtonStyle in [tbrSeparator, tbrDivider] then + begin + PaintSeparator; + exit; + end; + inherited Paint; + + UpdateState(false); + if (not Assigned(Action)) or (TToolbarItems(FOwnerItem.Collection).FToolPanel.FToolBarStyle = tbsNative) then + exit; + + PaintRect:=ClientRect; + if (Action is TCustomAction) and Assigned(FImageList) and + (TCustomAction(Action).ImageIndex>-1) and + (TCustomAction(Action).ImageIndex < FImageList.Count) then + begin + + FLastDrawFlagsA:=GetDrawFlagsA; +// FLastDrawFlagsA:=GetDrawDetails; + + if not Transparent then + begin + Canvas.Brush.Color := Color; + Canvas.FillRect(PaintRect); + end; + + if FLastDrawFlagsA <> 0 then + begin + if TToolbarItems(FOwnerItem.Collection).FToolPanel.FToolBarStyle = tbsWindowsXP then + begin + + if FToolbarButtonStyle = tbrDropDownExtra then + begin + PaintRect1:=PaintRect; + Dec(PaintRect1.Right, DropDownExtraBtnWidth); + if FFullPush then + begin + DrawButtonFrameXP(Canvas, PaintRect1, (FLastDrawFlagsA and DFCS_PUSHED) <> 0, + (FLastDrawFlagsA and DFCS_FLAT) <> 0); + end + else + DrawButtonFrameXP(Canvas, PaintRect1, false, + (FLastDrawFlagsA and DFCS_FLAT) <> 0); + ; + + PaintRect1:=PaintRect; + PaintRect1.Left:=PaintRect1.Right - DropDownExtraBtnWidth; + DrawButtonFrameXP(Canvas, PaintRect1, (FLastDrawFlagsA and DFCS_PUSHED) <> 0, + (FLastDrawFlagsA and DFCS_FLAT) <> 0); + end + else + DrawButtonFrameXP(Canvas, PaintRect, (FLastDrawFlagsA and DFCS_PUSHED) <> 0, + (FLastDrawFlagsA and DFCS_FLAT) <> 0) + end + else + begin + if FToolbarButtonStyle = tbrDropDownExtra then + begin + PaintRect1:=PaintRect; + Dec(PaintRect1.Right, DropDownExtraBtnWidth); + + if FFullPush then + begin + DrawButtonFrame(Canvas, PaintRect1, (FLastDrawFlagsA and DFCS_PUSHED) <> 0, + (FLastDrawFlagsA and DFCS_FLAT) <> 0); + end + else + begin + DrawButtonFrame(Canvas, PaintRect1, false, + (FLastDrawFlagsA and DFCS_FLAT) <> 0); + end; + + PaintRect1:=PaintRect; + PaintRect1.Left:=PaintRect1.Right - DropDownExtraBtnWidth; + DrawButtonFrame(Canvas, PaintRect1, (FLastDrawFlagsA and DFCS_PUSHED) <> 0, + (FLastDrawFlagsA and DFCS_FLAT) <> 0); + end + else + DrawButtonFrame(Canvas, PaintRect, (FLastDrawFlagsA and DFCS_PUSHED) <> 0, + (FLastDrawFlagsA and DFCS_FLAT) <> 0); + end; + end; + + if FToolbarButtonStyle = tbrDropDownExtra then + begin + Canvas.Draw(PaintRect.Right - 10, Height div 2, TToolbarItems(FOwnerItem.Collection).FToolPanel.FArrowBmp); + Dec(PaintRect.Right, DropDownExtraBtnWidth); + end; + + GlyphWidth:= FImageList.Width; + GlyphHeight:=FImageList.Height; + + ClientSize.cx:= PaintRect.Right - PaintRect.Left; + ClientSize.cy:= PaintRect.Bottom - PaintRect.Top; + + if (Caption <> '') and ShowCaption then + begin + TMP := Caption; + SIndex := DeleteAmpersands(TMP); + TextSize:= Canvas.TextExtent(TMP); +(* If SIndex > 0 then + If SIndex <= Length(TMP) then + begin + FShortcut := Ord(TMP[SIndex]); + end;*) + end + else + begin + TextSize.cx:= 0; + TextSize.cy:= 0; + end; + + if (GlyphWidth = 0) or (GlyphHeight = 0) or (TextSize.cx = 0) or (TextSize.cy = 0) then + S:= 0 + else + S:= Spacing; + + // Calculate caption and glyph layout + + if Margin = -1 then + begin + if S = -1 then + begin + TotalSize.cx:= TextSize.cx + GlyphWidth; + TotalSize.cy:= TextSize.cy + GlyphHeight; + if Layout in [blGlyphLeft, blGlyphRight] then + M:= (ClientSize.cx - TotalSize.cx) div 3 + else + M:= (ClientSize.cy - TotalSize.cy) div 3; + S:= M; + end + else + begin + TotalSize.cx:= GlyphWidth + S + TextSize.cx; + TotalSize.cy:= GlyphHeight + S + TextSize.cy; + if Layout in [blGlyphLeft, blGlyphRight] then + M:= (ClientSize.cx - TotalSize.cx + 1) div 2 + else + M:= (ClientSize.cy - TotalSize.cy + 1) div 2 + end; + end + else + begin + if S = -1 then + begin + TotalSize.cx:= ClientSize.cx - (Margin + GlyphWidth); + TotalSize.cy:= ClientSize.cy - (Margin + GlyphHeight); + if Layout in [blGlyphLeft, blGlyphRight] then + S:= (TotalSize.cx - TextSize.cx) div 2 + else + S:= (TotalSize.cy - TextSize.cy) div 2; + end; + M:= Margin + end; + + case Layout of + blGlyphLeft : + begin + Offset.X:= M; + Offset.Y:= (ClientSize.cy - GlyphHeight + 1) div 2; + OffsetCap.X:= Offset.X + GlyphWidth + S; + OffsetCap.Y:= (ClientSize.cy - TextSize.cy) div 2; + end; + blGlyphRight : begin + Offset.X:= ClientSize.cx - M - GlyphWidth; + Offset.Y:= (ClientSize.cy - GlyphHeight + 1) div 2; + OffsetCap.X:= Offset.X - S - TextSize.cx; + OffsetCap.Y:= (ClientSize.cy - TextSize.cy) div 2; + end; + blGlyphTop : begin + Offset.X:= (ClientSize.cx - GlyphWidth + 1) div 2; + Offset.Y:= M; + OffsetCap.X:= (ClientSize.cx - TextSize.cx + 1) div 2; + OffsetCap.Y:= Offset.Y + GlyphHeight + S; + end; + blGlyphBottom : begin + Offset.X:= (ClientSize.cx - GlyphWidth + 1) div 2; + Offset.Y:= ClientSize.cy - M - GlyphHeight; + OffsetCap.X:= (ClientSize.cx - TextSize.cx + 1) div 2; + OffsetCap.Y:= Offset.Y - S - TextSize.cy; + end; + end; + + if ((FLastDrawFlagsA and DFCS_FLAT) <> 0) and ((FLastDrawFlagsA and DFCS_PUSHED) = 0) + and (tpGlyphPopup in TToolbarItems(FOwnerItem.Collection).FToolPanel.Options) and FFullPush then + begin + FImageList.Draw(Canvas, Offset.X, Offset.Y, TCustomAction(Action).ImageIndex, false); +// FImageList.Draw(Canvas, Offset.X, Offset.Y, TCustomAction(Action).ImageIndex, gdeDisabled); + Dec(Offset.X, 2); + Dec(Offset.Y, 2); + end; + + if Assigned(FImageListSelected) and (FImageListSelected.Count>TCustomAction(Action).ImageIndex) and + ((FLastDrawFlagsA and DFCS_FLAT) <> 0) and ((FLastDrawFlagsA and DFCS_PUSHED) = 0) then + FImageListSelected.Draw(Canvas, Offset.X, Offset.Y, TCustomAction(Action).ImageIndex, TCustomAction(Action).Enabled) + else + FImageList.Draw(Canvas, Offset.X, Offset.Y, TCustomAction(Action).ImageIndex, TCustomAction(Action).Enabled); + end; + if (Caption <> '') and ShowCaption then + begin + TXTStyle := Canvas.TextStyle; + TXTStyle.Opaque := False; + TXTStyle.Clipping := True; + TXTStyle.ShowPrefix := True; + TXTStyle.Alignment := taLeftJustify; + TXTStyle.Layout := tlTop; + TXTStyle.SystemFont := Canvas.Font.IsDefault;//Match System Default Style + With PaintRect, OffsetCap do + begin + Left := Left + X; + Top := Top + Y; + end; + If not Enabled then + begin + Canvas.Font.Color := clBtnHighlight; + OffsetRect(PaintRect, 1, 1); + Canvas.TextRect(PaintRect, PaintRect.Left, PaintRect.Top, Caption, TXTStyle); + Canvas.Font.Color := clBtnShadow; + OffsetRect(PaintRect, -1, -1); + end + else + begin + Canvas.Font.Color := clWindowText; + if ((FLastDrawFlagsA and DFCS_FLAT) <> 0) and ((FLastDrawFlagsA and DFCS_PUSHED) = 0) and (TToolPanel(Parent).FToolBarStyle <> tbsWindowsXP) + and (tpCaptionPopup in TToolbarItems(FOwnerItem.Collection).FToolPanel.Options) then + OffsetRect(PaintRect, -2, -2); + end; + Canvas.TextRect(PaintRect, PaintRect.Left, PaintRect.Top, Caption, TXTStyle); + + end; +end; + +procedure TToolbarButton.Click; +var + P:TPoint; +begin + if (csDesigning in ComponentState) or FDesign then exit; + if FToolbarButtonStyle = tbrDropDown then + begin + if Assigned(FDropDownMenu) then + begin + P.X:=0; + P.Y:=Height; + P:=ClientToScreen(P); + FDropDownMenu.PopUp(P.X, P.Y); + end; + end + else + if (FToolbarButtonStyle = tbrDropDownExtra) and (not FFullPush) then + begin + if Assigned(FDropDownMenu) then + begin + P.X:=Width - DropDownExtraBtnWidth; + P.Y:=Height; + P:=ClientToScreen(P); + FDropDownMenu.PopUp(P.X, P.Y); + end; + end + else + inherited Click; +end; + +procedure TToolbarButton.UpdateState(InvalidateOnChange: boolean); +var + OldState: TButtonState; +begin + OldState:=FState; + inherited UpdateState(InvalidateOnChange); + if InvalidateOnChange and ((FState<>OldState) or (FLastDrawFlagsA<>GetDrawFlagsA)) then + Invalidate; +end; + +procedure TToolbarButton.SetDesign(AValue:boolean; AToolbarItem:TToolbarItem); +begin + FDesign:=AValue; + if FDesign then + begin + Enabled:=true; + Flat:=false; + end + else + begin + Flat:=tpFlatBtns in TToolbarItems(AToolbarItem.Collection).FToolPanel.Options; + ActionChange(Action, true); + end; +end; + +{ +procedure TToolbarButton.SetAutoSize(AValue: boolean); +begin + FAutoSize:=AValue; + if csLoading in ComponentState then exit; + UpdateSize; + //Invalidate; +end; +} +procedure TToolbarButton.UpdateSize; +var + AWidth:integer; +begin +{ if csLoading in TToolbarItems(FOwnerItem.Collection).FToolPanel.ComponentState then exit; + + if Assigned(TToolbarItems(FOwnerItem.Collection).FToolPanel.FImageList) then + begin + AWidth:=TToolbarItems(FOwnerItem.Collection).FToolPanel.FImageList.Width + 8; + if ShowCaption then + AWidth:= AWidth + Canvas.TextWidth(Caption) + Spacing; + end + else + AWidth:=Canvas.TextWidth(Caption);} + + SetBounds(Left, Top, Width, Height); + Invalidate; +end; + +procedure TToolbarButton.SetEnabled(NewEnabled: boolean); +begin + if FToolbarButtonStyle = tbrDropDown then + NewEnabled :=true; + if (not NewEnabled) and Enabled then + begin + FState := bsDisabled; + MouseLeave; +// Flat:=false; + end; + inherited SetEnabled(NewEnabled); +end; + +function TToolbarButton.GetActionLinkClass: TControlActionLinkClass; +begin + Result:=TToolbarButtonActionLink; +end; + +function TToolbarButton.GetDrawFlagsA: integer; +begin + // if flat and not mouse in control and not down, don't draw anything + if (Flat and not MouseInControl and not (FState in [bsDown, bsExclusive])) or (not Enabled) then + begin + Result := 0; + end + else + begin + Result:=DFCS_BUTTONPUSH; + if FState in [bsDown, bsExclusive] then + inc(Result,DFCS_PUSHED); + if not Enabled then + inc(Result,DFCS_INACTIVE); + if Flat then + inc(Result,DFCS_FLAT); + end; +end; + + +procedure TToolbarButton.SetBounds(aLeft, aTop, aWidth, aHeight: integer); +var + TextSize:TSize; + ImgH, ImgW:integer; + tmpCanvas: TCanvas; +begin + if Assigned(Parent) and not (csLoading in TToolPanel(Parent).ComponentState) then + begin + if FToolbarButtonStyle in [tbrSeparator, tbrDivider] then + begin + aWidth:=7; + if Assigned(FImageList) then + aHeight:=FImageList.Height+8 + else + aHeight:=TToolPanel(Parent).BtnHeight; + end + else + //if FAutoSize and Assigned(Canvas) then + begin + if Assigned(FImageList) then + begin + ImgW:=FImageList.Width+8; + ImgH:=FImageList.Height+8; + end + else + begin + ImgH:=TToolPanel(Parent).BtnHeight; + ImgW:=TToolPanel(Parent).BtnWidth; + end; + + if FToolbarButtonStyle = tbrDropDownExtra then + begin + ImgW:=ImgW + DropDownExtraBtnWidth; + end; + + if aLeft < TToolPanel(Parent).BorderWidth then + aLeft:=TToolPanel(Parent).BorderWidth; + + if ShowCaption then + begin + tmpCanvas := GetWorkingCanvas(Canvas); + + try + TextSize:=tmpCanvas.TextExtent(Caption); + if (Layout in [blGlyphLeft, blGlyphRight]) and Assigned(FImageList) then + begin + aWidth:=ImgW + 4 + TextSize.cx; + aHeight:=Max(TextSize.cy + 8, ImgH); + end + else + begin + aWidth:=Max(8 + TextSize.cx, ImgW); + aHeight:=ImgH + TextSize.cy + 4; + end; + if aHeight < TToolPanel(Parent).BtnHeight then + aHeight:=TToolPanel(Parent).BtnHeight; + finally + if TmpCanvas<>Canvas then + FreeWorkingCanvas(tmpCanvas); + end; + end + else + begin + aWidth:=Max(ImgW, TToolPanel(Parent).BtnWidth); + aHeight:=Max(ImgH, TToolPanel(Parent).BtnHeight);; + end; + end; + // if IsDesignMode then + aTop:=TToolPanel(Parent).BorderWidth; + + end; + inherited SetBounds(aLeft, aTop, aWidth, aHeight); +end; + +destructor TToolbarButton.Destroy; +begin + if Assigned(FOwnerItem) then + begin + FOwnerItem.FButton:=nil; + FOwnerItem.Free; + end; + inherited Destroy; +end; + + +{ TToolbarItems } + +function TToolbarItems.GetToolbarItem(Index: Integer): TToolbarItem; +begin + result := TToolbarItem( inherited Items[Index] ); +end; + +function TToolbarItems.GetByActionName(ActionName: string): TToolbarItem; +var + i:integer; +begin + Result:=nil; + for i:=0 to Count-1 do + if Assigned(Items[i].Action) and (Items[i].Action.Name = ActionName) then + begin + Result:=Items[i]; + end; +end; + +procedure TToolbarItems.SetToolbarItem(Index: Integer; + const AValue: TToolbarItem); +begin + Items[Index].Assign( AValue ); +end; + +constructor TToolbarItems.Create(ToolPanel: TToolPanel); +begin + inherited Create(ToolPanel, TToolbarItem); + FToolPanel:=ToolPanel; +end; + +{ TToolPanel } + +function TToolPanel.GetItems: TToolbarItems; +begin + Result:=FToolbarItems; +end; + +function TToolPanel.GetBtnHeight: Integer; +begin + Result:=FDefButtonHeight; +end; + +function TToolPanel.GetBtnWidth: Integer; +begin + Result:=FDefButtonWidth; +end; + +function TToolPanel.GetPropertyStorage: TCustomPropertyStorage; +begin + Result:=FPropertyStorageLink.Storage; +end; + +procedure TToolPanel.SetBtnHeight(const AValue: Integer); +var + i:integer; +begin + if FDefButtonHeight<>AValue then + begin + FDefButtonHeight:=AValue; + if csLoading in ComponentState then exit; + + for i:=0 to FToolbarItems.Count - 1 do + FToolbarItems[i].FButton.UpdateSize; + end; +end; + +procedure TToolPanel.SetBtnWidth(const AValue: Integer); +var + i:integer; +begin + if FDefButtonWidth<>AValue then + begin + FDefButtonWidth:=AValue; + if csLoading in ComponentState then exit; + + for i:=0 to FToolbarItems.Count - 1 do + FToolbarItems[i].FButton.UpdateSize; + end; +end; + +procedure TToolPanel.SetButtonAllign(const AValue: TToolButtonAllign); +var + i:integer; +begin + if FButtonAllign=AValue then exit; + FButtonAllign:=AValue; + + if not (csLoading in ComponentState) then + for i:=0 to FToolbarItems.Count - 1 do + begin +// if Assigned(FToolbarItems[i]) then +// if Assigned(FToolbarItems[i].FButton) then + FToolbarItems[i].FButton.Align:=BtnAl2Align[AValue]; + end; +end; + +procedure TToolPanel.SetImageList(const AValue: TImageList); +var + i:integer; +begin + if FImageList=AValue then exit; + FImageList:=AValue; + for i:=0 to FToolbarItems.Count - 1 do + FToolbarItems[i].FButton.FImageList:=AValue; + + ReAlignToolBtn; +end; + +procedure TToolPanel.SetImageListSelected(const AValue: TImageList); +var + i:integer; +begin + if FImageListSelected=AValue then exit; + FImageListSelected:=AValue; + for i:=0 to FToolbarItems.Count - 1 do + FToolbarItems[i].FButton.FImageListSelected:=AValue; +end; + +procedure TToolPanel.SetItems(const AValue: TToolbarItems); +begin + FToolbarItems.Assign(AValue); +end; + +procedure TToolPanel.SetOptions(const AValue: TToolPanelOptions); +var + i:integer; +begin + if FOptions=AValue then exit; + FOptions:=AValue; + + for i:=0 to FToolbarItems.Count - 1 do + begin + FToolbarItems[i].FButton.Transparent:=tpTransparentBtns in FOptions; + FToolbarItems[i].FButton.Flat:=tpFlatBtns in FOptions; + end; + + Invalidate; +end; + +procedure TToolPanel.SetPropertyStorage(const AValue: TCustomPropertyStorage); +begin + FPropertyStorageLink.Storage:=AValue; +end; + + +procedure TToolPanel.OnIniSave(Sender: TObject); +var + i:integer; + S, S1:string; + tpo:TToolPanelOptions; + tpo1:integer absolute tpo; +begin + S:=Owner.Name+'.'+Name; + FPropertyStorageLink.Storage.WriteInteger(S+sVersion, FVersion); + FPropertyStorageLink.Storage.WriteInteger(S+sShowHint, ord(ShowHint)); + tpo:=FOptions; + FPropertyStorageLink.Storage.WriteString(S+sOptions, SetToString(GetPropInfo(Self, 'Options'), tpo1)); + FPropertyStorageLink.Storage.WriteString(S+sToolBarStyle, GetEnumProp(Self, 'ToolBarStyle')); + FPropertyStorageLink.Storage.WriteString(S+sButtonAllign, GetEnumProp(Self, 'ButtonAllign')); + FPropertyStorageLink.Storage.WriteInteger(S+sCount, FToolbarItems.Count); + S:=S+sItem; + for i:=0 to FToolbarItems.Count-1 do + begin + S1:=S+IntToStr(i); + if Assigned(FToolbarItems[i].Action) then + begin + FPropertyStorageLink.Storage.WriteString(S1+sAction, FToolbarItems[i].Action.Name); + FPropertyStorageLink.Storage.WriteInteger(S1+sVisible, ord(FToolbarItems[i].Visible)); + FPropertyStorageLink.Storage.WriteInteger(S1+sShowCaption, ord(FToolbarItems[i].ShowCaption)); + FPropertyStorageLink.Storage.WriteInteger(S1+sTop, FToolbarItems[i].Top); + FPropertyStorageLink.Storage.WriteInteger(S1+sLeft, FToolbarItems[i].Left); + FPropertyStorageLink.Storage.WriteInteger(S1+sWidth, FToolbarItems[i].Width); + end; + end; +end; + +procedure TToolPanel.OnIniLoad(Sender: TObject); +var + i, ACount:integer; + S, S1, AActionName, S2:string; + AItem:TToolbarItem; + tpo:TToolPanelOptions; + tpo1:integer absolute tpo; +begin + S:=Owner.Name+'.'+Name; + ACount:=FPropertyStorageLink.Storage.ReadInteger(S+sVersion, FVersion); //Check cfg version + if ACount = FVersion then + begin + ShowHint:=FPropertyStorageLink.Storage.ReadInteger(S+sShowHint, ord(ShowHint))<>0; + + tpo:=FOptions; + tpo1:=StringToSet(GetPropInfo(Self, 'Options'), FPropertyStorageLink.Storage.ReadString(S+sOptions, SetToString(GetPropInfo(Self, 'Options'), tpo1))); + SetOptions(tpo); + + SetEnumProp(Self, 'ToolBarStyle', FPropertyStorageLink.Storage.ReadString(S+sToolBarStyle, GetEnumProp(Self, 'ToolBarStyle'))); + SetEnumProp(Self, 'ButtonAllign', FPropertyStorageLink.Storage.ReadString(S+sButtonAllign, GetEnumProp(Self, 'ButtonAllign'))); + + ACount:=FPropertyStorageLink.Storage.ReadInteger(S+sCount, 0); + S:=S+sItem; + for i:=0 to ACount-1 do + begin + S1:=S+IntToStr(i); + AActionName:=FPropertyStorageLink.Storage.ReadString(S1+sAction, ''); + AItem:=FToolbarItems.ByActionName[AActionName]; + if Assigned(AItem) then + begin + AItem.Top:=FPropertyStorageLink.Storage.ReadInteger(S1+sTop, AItem.Top); + AItem.Left:=FPropertyStorageLink.Storage.ReadInteger(S1+sLeft, AItem.Left); + AItem.Width:=FPropertyStorageLink.Storage.ReadInteger(S1+sWidth, AItem.Width); + AItem.Visible:=FPropertyStorageLink.Storage.ReadInteger(S1+sVisible, ord(AItem.Visible)) <> 0; + AItem.ShowCaption:=FPropertyStorageLink.Storage.ReadInteger(S1+sShowCaption, ord(AItem.ShowCaption)) <> 0; + end; + end; + end; + Invalidate; +end; + +procedure TToolPanel.SetToolBarStyle(const AValue: TToolBarStyle); +begin + if FToolBarStyle=AValue then exit; + FToolBarStyle:=AValue; + if FToolBarStyle = tbsWindowsXP then + SetOptions(FOptions + [tpFlatBtns]); + Invalidate; +end; + +procedure TToolPanel.ReAlignToolBtn; +var + i, L:integer; +begin + L:=BorderWidth; + for i:=0 to FToolbarItems.Count - 1 do + begin + FToolbarItems[i].FButton.Left:=L; + FToolbarItems[i].FButton.UpdateSize; + L:=L + FToolbarItems[i].FButton.Width; + end; +end; + +procedure TToolPanel.Notification(AComponent: TComponent; Operation: TOperation); +var + i:integer; +begin + inherited Notification(AComponent, Operation); + if Operation = opRemove then + begin + if AComponent = FImageList then + SetImageList(nil) + else + if AComponent is TPopupMenu then + begin + for i:=0 to FToolbarItems.Count - 1 do + if FToolbarItems[i].DropDownMenu = AComponent then + FToolbarItems[i].DropDownMenu:=nil; + end + else + if AComponent is TBasicAction then + begin + for i:=0 to FToolbarItems.Count - 1 do + if FToolbarItems[i].Action = AComponent then + FToolbarItems[i].Action:=nil; + end; + end; +end; + +procedure TToolPanel.SetCustomizing(AValue: boolean); +var + i:integer; +begin + for i:=0 to FToolbarItems.Count - 1 do + FToolbarItems[i].FButton.SetDesign(AValue, FToolbarItems[i]); +end; + +procedure TToolPanel.MouseUp(Button: TMouseButton; Shift: TShiftState; X, + Y: Integer); +begin + inherited MouseUp(Button, Shift, X, Y); + if (Button = mbRight) and (ssCtrl in Shift) and (tpCustomizable in FOptions) then + Customize(HelpContext); +end; + +procedure TToolPanel.RequestAlign; +{var + i, L:integer;} +begin + inherited RequestAlign; + if (Parent = nil) or (csDestroying in ComponentState) or (csLoading in ComponentState) {or (not Parent.HandleAllocated) }then + exit; +// if not Parent.HandleAllocated then exit; +// ReAlignToolBtn;} +end; + +procedure TToolPanel.Loaded; +var + i, L:integer; + B:TToolbarItem; +begin +{ if csDesigning in ComponentState then + begin + for i:=0 to FToolbarItems.Count - 1 do + FToolbarItems[i].UpdateLeftAfterLoad; + end; } + inherited Loaded; + for i:=0 to FToolbarItems.Count - 1 do + begin + B:=FToolbarItems[i]; + B.UpdateLeftAfterLoad; + B.FButton.Align:=BtnAl2Align[FButtonAllign]; + end; + //ReAlignToolBtn; +end; + +constructor TToolPanel.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FArrowBmp:=CreateArrowBitmap; + AutoSize:=false; + FButtonAllign:=tbaLeft; + FToolbarItems:=TToolbarItems.Create(Self); + if Assigned(AOwner) and not (csLoading in AOwner.ComponentState) then + Align:=alTop; + Height:=DefButtonHeight; + FPropertyStorageLink:=TPropertyStorageLink.Create; + FPropertyStorageLink.OnSave:=@OnIniSave; + FPropertyStorageLink.OnLoad:=@OnIniLoad; + FDefButtonWidth:=DefButtonWidth; + FDefButtonHeight:=DefButtonHeight; + FToolBarStyle:=tbsStandart; + BorderWidth:=4; + ControlStyle:=ControlStyle - [csSetCaption] + [csAcceptsControls]; + Caption:=''; +end; + +destructor TToolPanel.Destroy; +begin + if Assigned(FCustomizer) then + begin + TToolPanelSetupForm(FCustomizer).FToolPanel:=nil; + FreeAndNil(FCustomizer); + end; + FreeAndNil(FToolbarItems); + FreeAndNil(FPropertyStorageLink); + FreeAndNil(FArrowBmp); + inherited Destroy; +end; + +procedure TToolPanel.Customize(HelpCtx: Longint); +begin + if not Assigned(FCustomizer) then + FCustomizer:=TToolPanelSetupForm.CreateSetupForm(Self); + FCustomizer.HelpContext:=HelpCtx; + FCustomizer.Show; + SetCustomizing(true); +end; + +procedure TToolPanel.SetBounds(aLeft, aTop, aWidth, aHeight: integer); +begin + if not (csLoading in ComponentState) then + begin + if Assigned(FImageList) then + aHeight:=FImageList.Height+8 + BorderWidth * 2 + else + aHeight:=FDefButtonHeight + BorderWidth * 2; + end; + inherited SetBounds(aLeft, aTop, aWidth, aHeight); +end; + +{ TToolbarItem } + +procedure TToolbarItem.SetAction(const AValue: TBasicAction); +begin + if FButton.Action<>AValue then + begin +{ if Assigned(FButton.Action) then + FButton.Action.UnRegisterChanges(FActionLink);} + FButton.Action:=AValue; + if csLoading in TToolbarItems(Collection).FToolPanel.ComponentState then exit; + FButton.UpdateSize; +{ if Assigned(AValue) then + AValue.RegisterChanges(FActionLink);} + end; +end; + +{procedure TToolbarItem.SetAutoSize(const AValue: boolean); +begin + if FButton.FAutoSize<>AValue then + FButton.SetAutoSize(AValue); +end; +} +procedure TToolbarItem.SetButtonStyle(const AValue: TToolbarButtonStyle); +begin + if FButton.FToolbarButtonStyle<>AValue then + begin + FButton.FToolbarButtonStyle:=AValue; +{ if AValue = tbrDropDown then + FButton.Enabled :=true;} + FButton.UpdateSize; + FButton.Invalidate; + end; +end; + +procedure TToolbarItem.SetDropDownMenu(const AValue: TPopupMenu); +begin + if FButton.FDropDownMenu<>AValue then + begin + FButton.FDropDownMenu:=AValue; + FButton.Invalidate; + end; +end; + +procedure TToolbarItem.SetGroupIndex(const AValue: Integer); +begin + FButton.GroupIndex:=AValue; +end; + +procedure TToolbarItem.SetHeight(const AValue: Integer); +begin + FButton.Height:=AValue; +end; + +procedure TToolbarItem.SetLayout(const AValue: TButtonLayout); +begin + FButton.Layout:=AValue; + FButton.UpdateSize; +end; + +procedure TToolbarItem.SetLeft(const AValue: Integer); +begin + if csLoading in TToolbarItems(Collection).FToolPanel.ComponentState then + FSaveLeft:=AValue + else + FButton.Left:=AValue; +end; + +procedure TToolbarItem.SetShowCaption(const AValue: boolean); +begin + if FButton.ShowCaption<>AValue then + begin + FButton.ShowCaption:=AValue; + if not (csLoading in TToolbarItems(Collection).FToolPanel.ComponentState) then + FButton.UpdateSize; +// FButton.Invalidate; + end; +end; + +procedure TToolbarItem.SetTag(const AValue: Longint); +begin + FButton.Tag:=AValue; +end; + +procedure TToolbarItem.SetTop(const AValue: Integer); +begin + FButton.Top:=AValue; +end; + +function TToolbarItem.GetAction: TBasicAction; +begin + Result:=FButton.Action; +end; + +{ +function TToolbarItem.GetAutoSize: boolean; +begin + Result:=FButton.FAutoSize; +end; +} +function TToolbarItem.GetButtonStyle: TToolbarButtonStyle; +begin + Result:=FButton.FToolbarButtonStyle; +end; + +function TToolbarItem.GetDropDownMenu: TPopupMenu; +begin + Result:=FButton.FDropDownMenu; +end; + +function TToolbarItem.GetGroupIndex: Integer; +begin + Result:=FButton.GroupIndex; +end; + +function TToolbarItem.GetHeight: Integer; +begin + Result:=FButton.Height; +end; + +function TToolbarItem.GetLayout: TButtonLayout; +begin + Result:=FButton.Layout; +end; + +function TToolbarItem.GetLeft: Integer; +begin + Result:=FButton.Left; +end; + +function TToolbarItem.GetShowCaption: boolean; +begin + Result:=FButton.ShowCaption; +end; + +function TToolbarItem.GetTag: Longint; +begin + Result:=FButton.Tag; +end; + +function TToolbarItem.GetTop: Integer; +begin + Result:=FButton.Top; +end; + +function TToolbarItem.GetVisible: boolean; +begin + Result:=FButton.Visible; +end; + +function TToolbarItem.GetWidth: Integer; +begin + Result:=FButton.Width; +end; + +procedure TToolbarItem.SetVisible(const AValue: boolean); +begin + if FButton.Visible<>AValue then + begin + FButton.Visible:=AValue; + FButton.Invalidate; + end; +end; + +procedure TToolbarItem.SetWidth(const AValue: Integer); +begin + FButton.Width:=AValue; +end; + +procedure TToolbarItem.UpdateLeftAfterLoad; +begin + FButton.Left:=FSaveLeft; +end; + +function TToolbarItem.GetDisplayName: string; +begin + if ButtonStyle in [tbrSeparator, tbrDivider] then + begin + Result:='Separator' + end + else + if Assigned(Action) then + begin + if (Action is TCustomAction) then + Result:=TCustomAction(Action).Name + ' - ' +TCustomAction(Action).Caption + else + Result:=TCustomAction(Action).Name; + end + else + Result:=inherited GetDisplayName; +end; + +constructor TToolbarItem.Create(ACollection: TCollection); +var + i, W:integer; + TB:TToolPanel; +begin + inherited Create(ACollection); + TB:=TToolbarItems(ACollection).FToolPanel; + + FButton:=TToolbarButton.Create(TToolbarItems(ACollection).FToolPanel); + + FButton.Align:=BtnAl2Align[TToolbarItems(ACollection).FToolPanel.ButtonAllign]; + + FButton.Parent:=TToolbarItems(ACollection).FToolPanel; + FButton.FImageList:=TToolbarItems(ACollection).FToolPanel.ImageList; + FButton.Flat:=tpFlatBtns in TToolbarItems(ACollection).FToolPanel.Options; + FButton.Transparent:=tpTransparentBtns in TToolbarItems(ACollection).FToolPanel.Options; + FButton.ShowCaption:=false; + FButton.AutoSize:=false; + FButton.FOwnerItem:=Self; + FButton.FFullPush:=true; + FButton.ParentColor:=true; +// if not (csLoading in TToolbarItems(ACollection).FToolPanel.ComponentState) then +// FButton.Align:=BtnAl2Align[TToolbarItems(ACollection).FToolPanel.ButtonAllign]; + + if (not (csLoading in TB.ComponentState)) and (csDesigning in TB.ComponentState) then + begin + if TToolbarItems(ACollection).FToolPanel.ButtonAllign = tbaLeft then + begin + W:=0; + for i:=0 to ACollection.Count - 1 do + begin + W:=Max(W, TToolbarItems(ACollection).Items[I].Width + TToolbarItems(ACollection).Items[I].Left); + end; + Left:=W+1; + end; + end; +end; + +destructor TToolbarItem.Destroy; +begin + FButton.FOwnerItem:=nil; + FreeAndNil(FButton); + inherited Destroy; +end; + +{ TToolbarButtonActionLink } + +procedure TToolbarButtonActionLink.SetImageIndex(Value: Integer); +begin + FClient.Invalidate; +end; + +function TToolbarButtonActionLink.IsImageIndexLinked: Boolean; +begin + Result:=true; +end; + +procedure TToolbarButtonActionLink.SetEnabled(Value: Boolean); +begin + if (FClient as TToolbarButton).FToolbarButtonStyle = tbrDropDown then + FClient.Enabled:=true + else + inherited SetEnabled(Value); +end; + +procedure TToolbarButtonActionLink.SetCaption(const Value: string); +begin + inherited SetCaption(Value); + (FClient as TToolbarButton).UpdateSize; +end; + +initialization + //DebugLn('controls.pp - initialization'); + RegisterPropertyToSkip(TToolbarButton, 'AutoSize', 'Old stile AutoSize in button', ''); + RegisterPropertyToSkip(TToolbarItem, 'AutoSize', 'Old stile AutoSize in button', ''); + RegisterPropertyToSkip(TToolPanel, 'AutoSize', 'Old stile AutoSize in button', ''); +end. + diff --git a/components/rx/version/2.1/rxversinfo.pas b/components/rx/version/2.1/rxversinfo.pas new file mode 100644 index 000000000..83f1f9936 --- /dev/null +++ b/components/rx/version/2.1/rxversinfo.pas @@ -0,0 +1,310 @@ +{ RxVersInfo is part of RxFPC library + + Copyright (C) 2010 Lagunov A.A. alexs75@hotbox.ru + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit RxVersInfo; + +{$mode objfpc} + +interface + +uses + Classes, SysUtils, versionresource; + +type + TLongVersion = string; + TVersionCharSet = string; + TVersionLanguage = string; + + { TRxVersionInfo } + + TRxVersionInfo = class(TComponent) + private + FValid: Boolean; + FValues:TStringList; + function GetComments: string; + function GetCompanyName: string; + function GetFileDescription: string; + function GetFileLongVersion: TLongVersion; + function GetFileName: string; + function GetFileVersion: string; + //function GetFixedFileInfo: PVSFixedFileInfo; + function GetInternalName: string; + function GetLegalCopyright: string; + function GetLegalTrademarks: string; + function GetOriginalFilename: string; + function GetPrivateBuild: string; + function GetProductLongVersion: TLongVersion; + function GetProductName: string; + function GetProductVersion: string; + function GetSpecialBuild: string; + function GetTranslation: Pointer; + function GetVerFileDate: TDateTime; + function GetVersionCharSet: TVersionCharSet; + function GetVersionLanguage: TVersionLanguage; + function GetVersionNum: Longint; + function GetVerValue(const VerName: string): string; + function GetWidgetName: string; + procedure SetFileName(const AValue: string); + procedure DoVersionInfo(V:TVersionResource); + protected + { Protected declarations } + public + constructor Create(AOwner: TComponent);override; + destructor Destroy; override; + procedure LoadFromFile(const AFileName:string); + + property FileName: string read GetFileName write SetFileName; + property Valid: Boolean read FValid; + //property FixedFileInfo: PVSFixedFileInfo read GetFixedFileInfo; + property FileLongVersion: TLongVersion read GetFileLongVersion; + property ProductLongVersion: TLongVersion read GetProductLongVersion; + property Translation: Pointer read GetTranslation; + property VersionLanguage: TVersionLanguage read GetVersionLanguage; + property VersionCharSet: TVersionCharSet read GetVersionCharSet; + property VersionNum: Longint read GetVersionNum; + property Comments: string read GetComments; + property CompanyName: string read GetCompanyName; + property FileDescription: string read GetFileDescription; + property FileVersion: string read GetFileVersion; + property InternalName: string read GetInternalName; + property LegalCopyright: string read GetLegalCopyright; + property LegalTrademarks: string read GetLegalTrademarks; + property OriginalFilename: string read GetOriginalFilename; + property ProductVersion: string read GetProductVersion; + property ProductName: string read GetProductName; + property SpecialBuild: string read GetSpecialBuild; + property PrivateBuild: string read GetPrivateBuild; + property Values[const VerName: string]: string read GetVerValue; + property VerFileDate: TDateTime read GetVerFileDate; + published + property WidgetName:string read GetWidgetName; + end; + + +implementation +uses FileUtil, resource, resreader, InterfaceBase, rxconst, +{$IFDEF WINDOWS} + winpeimagereader +{$ENDIF} +{$IFDEF LINUX} + elfreader +{$ENDIF} + ; + +{ TRxVersionInfo } + +function TRxVersionInfo.GetComments: string; +begin + Result:=FValues.Values['Comments']; +end; + +function TRxVersionInfo.GetCompanyName: string; +begin + Result:=FValues.Values['CompanyName']; +end; + +function TRxVersionInfo.GetFileDescription: string; +begin + Result:=FValues.Values['FileDescription']; +end; + +function TRxVersionInfo.GetFileLongVersion: TLongVersion; +begin + Result:=FValues.Values['FileVersion']; +end; + +function TRxVersionInfo.GetFileName: string; +begin + Result:=FValues.Values['OriginalFilename']; +end; + +function TRxVersionInfo.GetFileVersion: string; +begin + Result:=FValues.Values['FileVersion']; +end; + +{function TRxVersionInfo.GetFixedFileInfo: PVSFixedFileInfo; +begin + Result:=''; +end;} + +function TRxVersionInfo.GetInternalName: string; +begin + Result:=FValues.Values['InternalName']; +end; + +function TRxVersionInfo.GetLegalCopyright: string; +begin + Result:=FValues.Values['LegalCopyright']; +end; + +function TRxVersionInfo.GetLegalTrademarks: string; +begin + Result:=FValues.Values['LegalTrademarks']; +end; + +function TRxVersionInfo.GetOriginalFilename: string; +begin + Result:=FValues.Values['LegalTrademarks']; +end; + +function TRxVersionInfo.GetPrivateBuild: string; +begin + Result:=''; +end; + +function TRxVersionInfo.GetProductLongVersion: TLongVersion; +begin + Result:=''; +end; + +function TRxVersionInfo.GetProductName: string; +begin + Result:=FValues.Values['ProductName']; +end; + +function TRxVersionInfo.GetProductVersion: string; +begin + Result:=FValues.Values['ProductVersion']; +end; + +function TRxVersionInfo.GetSpecialBuild: string; +begin + Result:=''; +end; + +function TRxVersionInfo.GetTranslation: Pointer; +begin + Result:=nil; +end; + +function TRxVersionInfo.GetVerFileDate: TDateTime; +begin + Result:=0; +end; + +function TRxVersionInfo.GetVersionCharSet: TVersionCharSet; +begin + Result:=''; +end; + +function TRxVersionInfo.GetVersionLanguage: TVersionLanguage; +begin + Result:=''; +end; + +function TRxVersionInfo.GetVersionNum: Longint; +begin + Result:=0; +end; + +procedure TRxVersionInfo.SetFileName(const AValue: string); +begin + +end; + +procedure TRxVersionInfo.DoVersionInfo(V: TVersionResource); +var + i,j:integer; +begin + for i:=0 to V.StringFileInfo.Count-1 do + begin + for j:=0 to V.StringFileInfo[i].Count-1 do + FValues.Values[V.StringFileInfo[i].Keys[j]]:=SysToUTF8(V.StringFileInfo[i].ValuesByIndex[j]); + end; +end; + +constructor TRxVersionInfo.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FValues:=TStringList.Create; + LoadFromFile(ParamStr(0)); +end; + +destructor TRxVersionInfo.Destroy; +begin + FreeAndNil(FValues); + inherited Destroy; +end; + +procedure TRxVersionInfo.LoadFromFile(const AFileName: string); +var + Res:TResources; + i:integer; + Reader:TAbstractResourceReader; + V:TVersionResource; +begin + FValues.Clear; + FValid:=false; + {$IFDEF WINDOWS} + Reader:=TWinPEImageResourceReader.Create; + {$ENDIF} + {$IFDEF LINUX} + Reader:=TElfResourceReader.Create; + {$ENDIF} + Res:=TResources.Create; + V:=nil; + try + Res.LoadFromFile(ParamStr(0), Reader); + for i:=0 to Res.Count-1 do + begin + if Res[i] is TVersionResource then + V:=Res[i] as TVersionResource; + end; + FValid:=Assigned(V); + if FValid then + DoVersionInfo(V); + finally + Res.Free; + Reader.Free; + end; +end; + +function TRxVersionInfo.GetVerValue(const VerName: string): string; +begin + Result:=FValues.Values[VerName]; +end; + +function TRxVersionInfo.GetWidgetName: string; +begin + case WidgetSet.LCLPlatform of + lpGtk:Result:=sGTKWidgetSet; + lpGtk2:Result:=sGTK2WidgetSet; + lpWin32:Result:=sWin32_64WidgetSet; + lpWinCE:Result:=sWinCEWidgetSet; + lpCarbon:Result:=sCarbonWidgetSet; + lpQT:Result:=sQTWidgetSet; + lpfpGUI:Result:=sFpGUIWidgetSet; + else + Result:=sOtherGUIWidgetSet; + end; +end; + +end. diff --git a/components/rx/version/2.1/rxviewspanel.pas b/components/rx/version/2.1/rxviewspanel.pas new file mode 100644 index 000000000..74aa79b31 --- /dev/null +++ b/components/rx/version/2.1/rxviewspanel.pas @@ -0,0 +1,509 @@ +{ RxViewsPanel unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + + +unit RxViewsPanel; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, + Buttons, StdCtrls, LCLType; + +type + TRxViewsPanel = class; + TRxViewsPanelItem = class; + + TSelectViewEvent = procedure (Sender: TObject; ItemIndex:integer; const Item:TRxViewsPanelItem) of object; + { TRxViewsPanelItem } + + TRxViewsPanelItem = class(TCollectionItem) + private + FButton: TSpeedButton; + FImageIndex: integer; + FLabel:TLabel; + function GetAction: TBasicAction; + function GetCaption: string; + function GetEnabled: Boolean; + function GetHint: TTranslateString; + function GetImageIndex: integer; + function GetTag: Longint; + function GetVisible: boolean; + procedure SetAction(const AValue: TBasicAction); + procedure SetCaption(const AValue: string); + procedure SetEnabled(const AValue: Boolean); + procedure SetHint(const AValue: TTranslateString); + procedure SetImageIndex(const AValue: integer); + procedure SetTag(const AValue: Longint); + procedure SetVisible(const AValue: boolean); + procedure UpdatePosition; + procedure UpdateImage; + procedure DoViewButtonClick(Sender:TObject); + protected + function GetDisplayName: string; override; + public + constructor Create(ACollection: TCollection); override; + destructor Destroy; override; + published + property Action:TBasicAction read GetAction write SetAction; + property Visible:boolean read GetVisible write SetVisible; + property Caption:string read GetCaption Write SetCaption; + property Tag: Longint read GetTag write SetTag default 0; + property ImageIndex:integer read GetImageIndex write SetImageIndex; + property Hint:TTranslateString read GetHint write SetHint; + property Enabled: Boolean read GetEnabled write SetEnabled default True; + end; + + + { TRxViewsPanelItems } + + TRxViewsPanelItems = class(TCollection) + private + FRxViewsPanel:TRxViewsPanel; + function GetPanelItem(Index: Integer): TRxViewsPanelItem; + procedure SetPanelItem(Index: Integer; const AValue: TRxViewsPanelItem); + protected + procedure Update(Item: TCollectionItem);override; + public + constructor Create(ARxViewsPanel: TRxViewsPanel); + property Items[Index: Integer]: TRxViewsPanelItem read GetPanelItem write SetPanelItem; default; + procedure UpdateImages; + end; + + { TRxViewsPanel } + + TRxViewsPanel = class(TCustomPanel) + private + FButtonHeght: integer; + FImageList: TImageList; + FItemIndex: integer; + FItems:TRxViewsPanelItems; + FOnSelectViewEvent: TSelectViewEvent; + function GetItems: TRxViewsPanelItems; + procedure SetButtonHeght(const AValue: integer); + procedure SetImageList(const AValue: TImageList); + procedure SetItemIndex(const AValue: integer); + procedure SetItems(const AValue: TRxViewsPanelItems); + procedure InternalSelectView(Item:TRxViewsPanelItem); + protected + procedure Loaded; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property Align; + property Anchors; + property ButtonHeght:integer read FButtonHeght write SetButtonHeght; + property Color default clGrayText; + property Items:TRxViewsPanelItems read GetItems write SetItems; + property ImageList:TImageList read FImageList write SetImageList; + property OnSelectViewEvent:TSelectViewEvent read FOnSelectViewEvent write FOnSelectViewEvent; + property ItemIndex:integer read FItemIndex write SetItemIndex; + + property Alignment; + property AutoSize; + property BorderSpacing; + property BevelInner; + property BevelOuter; + property BevelWidth; + property BidiMode; + property BorderWidth; + property BorderStyle; + property Caption; + property ChildSizing; + property ClientHeight; + property ClientWidth; + property Constraints; + property DockSite; + property DragCursor; + property DragKind; + property DragMode; + property Enabled; + property Font; + property FullRepaint; + property ParentBidiMode; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property UseDockManager default True; + property Visible; + property OnClick; + property OnContextPopup; + property OnDockDrop; + property OnDockOver; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDock; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnGetSiteInfo; + property OnGetDockCaption; + property OnMouseDown; + property OnMouseEnter; + property OnMouseLeave; + property OnMouseMove; + property OnMouseUp; + property OnResize; + property OnStartDock; + property OnStartDrag; + property OnUnDock; + + end; + + +implementation + + +{ TRxViewsPanel } + +function TRxViewsPanel.GetItems: TRxViewsPanelItems; +begin + Result:=FItems; +end; + +procedure TRxViewsPanel.SetButtonHeght(const AValue: integer); +var + I:integer; +begin + if FButtonHeght=AValue then exit; + FButtonHeght:=AValue; + for i:=0 to FItems.Count - 1 do + Items[i].FButton.Height:=AValue; +end; + +procedure TRxViewsPanel.SetImageList(const AValue: TImageList); +begin + if FImageList=AValue then exit; + FImageList:=AValue; + FItems.UpdateImages; +end; + +procedure TRxViewsPanel.SetItemIndex(const AValue: integer); +begin + if FItemIndex=AValue then exit; + if (AValue < 0) or (AValue > FItems.Count - 1) then exit; + FItemIndex:=AValue; + Items[AValue].FButton.Click; + Items[AValue].FButton.Down:=true; +end; + +procedure TRxViewsPanel.SetItems(const AValue: TRxViewsPanelItems); +begin + FItems.Assign(AValue); +end; + +procedure TRxViewsPanel.InternalSelectView(Item: TRxViewsPanelItem); +begin + FItemIndex:=Item.Index; + if Assigned(FOnSelectViewEvent) then + FOnSelectViewEvent(Self, Item.Index, Item); +end; + +procedure TRxViewsPanel.Loaded; +begin + inherited Loaded; + FItems.Update(nil); + FItems.UpdateImages; + if (FItems.Count>0) and (FItemIndex>-1) and (FItemIndex < FItems.Count) then + FItems[FItemIndex].FButton.Down:=true; +end; + +constructor TRxViewsPanel.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + BevelOuter:=bvLowered; + Caption:=''; + if Assigned(AOwner) then + Align:=alLeft; + Color:=clGrayText; + FItems:=TRxViewsPanelItems.Create(Self); + + ControlStyle:=ControlStyle - [csSetCaption, csAcceptsControls]; + FButtonHeght:=50; +end; + +destructor TRxViewsPanel.Destroy; +begin + FreeAndNil(FItems); + inherited Destroy; +end; + +{ TRxViewsPanelItem } + +function TRxViewsPanelItem.GetAction: TBasicAction; +begin + Result:=FButton.Action; +end; + +function TRxViewsPanelItem.GetCaption: string; +begin + Result:=FLabel.Caption; +end; + +function TRxViewsPanelItem.GetEnabled: Boolean; +begin + Result:=FButton.Enabled; +end; + +function TRxViewsPanelItem.GetHint: TTranslateString; +begin + Result:=FButton.Hint; +end; + +function TRxViewsPanelItem.GetImageIndex: integer; +begin +{ if Assigned(FButton.Action) then + Result:=FButton.Action.;} + Result:=FImageIndex; +// FButton.Glyph.; +end; + +function TRxViewsPanelItem.GetTag: Longint; +begin + Result:=FButton.Tag; +end; + +function TRxViewsPanelItem.GetVisible: boolean; +begin + Result:=FButton.Visible; +end; + +procedure TRxViewsPanelItem.SetAction(const AValue: TBasicAction); +begin + FButton.Action:=AValue; +end; + +procedure TRxViewsPanelItem.SetCaption(const AValue: string); +begin + FLabel.Caption:=AValue; +end; + +procedure TRxViewsPanelItem.SetEnabled(const AValue: Boolean); +begin + FButton.Enabled:=AValue; + FLabel.Enabled:=AValue; +end; + +procedure TRxViewsPanelItem.SetHint(const AValue: TTranslateString); +begin + FButton.Hint:=AValue; +end; + +procedure TRxViewsPanelItem.SetImageIndex(const AValue: integer); +begin + if FImageIndex=AValue then exit; + FImageIndex:=AValue; + UpdateImage; +end; + +procedure TRxViewsPanelItem.SetTag(const AValue: Longint); +begin + FButton.Tag:=AValue; +end; + +procedure TRxViewsPanelItem.SetVisible(const AValue: boolean); +begin + FButton.Visible:=AValue; + FLabel.Visible:=AValue; +end; + +procedure TRxViewsPanelItem.UpdatePosition; +var + PP:TRxViewsPanelItem; +begin + if Index <> 0 then + begin + PP:=TRxViewsPanelItems(Collection).GetPanelItem(Index - 1); + if Assigned(PP.FLabel) then + begin + FButton.Top:=PP.FLabel.Top + PP.FLabel.Height; + end; + end; + FLabel.Top:=FButton.Top + FButton.Height; +end; + +procedure TRxViewsPanelItem.UpdateImage; +var + VP:TRxViewsPanel; +begin + VP:=TRxViewsPanelItems(Collection).FRxViewsPanel; + if Assigned(VP.FImageList) then + VP.FImageList.GetBitmap(FImageIndex, FButton.Glyph); +end; + +procedure TRxViewsPanelItem.DoViewButtonClick(Sender: TObject); +begin + TRxViewsPanelItems(Collection).FRxViewsPanel.InternalSelectView(Self); +end; + +function TRxViewsPanelItem.GetDisplayName: string; +begin + if FLabel.Caption<> '' then + Result:=FLabel.Caption + else + Result:=inherited GetDisplayName; +end; + +constructor TRxViewsPanelItem.Create(ACollection: TCollection); +var + VP:TRxViewsPanel; +begin + inherited Create(ACollection); + VP:=TRxViewsPanelItems(ACollection).FRxViewsPanel; + FImageIndex:=-1; + + FButton:=TSpeedButton.Create(VP); +// FButton.Align:=alTop; + FButton.ShowCaption:=false; + FButton.Transparent:=true; + FButton.GroupIndex:=1; + FButton.Height:=VP.FButtonHeght; + FButton.Parent:=VP; + + + FLabel:=TLabel.Create(VP); +// FLabel.Align:=alTop; + FLabel.WordWrap:=true; + FLabel.Alignment:=taCenter; + FLabel.AutoSize:=true; + FLabel.Parent:=VP; + + FButton.BorderSpacing.Around:=6; + FLabel.BorderSpacing.Around:=6; + + FButton.AnchorSide[akLeft].Control:=VP; + FButton.AnchorSide[akRight].Control:=VP; + FButton.AnchorSide[akRight].Side:=asrBottom; + FButton.Anchors:=[akTop, akLeft, akRight]; + FButton.OnClick:=@DoViewButtonClick; + + FLabel.AnchorSide[akTop].Control:=FButton; + FLabel.AnchorSide[akLeft].Control:=VP; + FLabel.AnchorSide[akRight].Control:=VP; + FLabel.AnchorSide[akRight].Side:=asrBottom; + FLabel.Anchors:=[akTop, akLeft, akRight]; + FLabel.Top:=FButton.Top + FButton.Height; + + UpdatePosition; +end; + +destructor TRxViewsPanelItem.Destroy; +begin + FreeAndNil(FButton); + FreeAndNil(FLabel); + inherited Destroy; +end; + +{ TRxViewsPanelItems } + +function TRxViewsPanelItems.GetPanelItem(Index: Integer): TRxViewsPanelItem; +begin + result := TRxViewsPanelItem( inherited Items[Index] ); + +end; + +procedure TRxViewsPanelItems.SetPanelItem(Index: Integer; + const AValue: TRxViewsPanelItem); +begin + Items[Index].Assign( AValue ); +end; + +procedure TRxViewsPanelItems.Update(Item: TCollectionItem); +var + i:integer; + P, P1:TRxViewsPanelItem; +begin + inherited Update(Item); + if not Assigned(Item) then + begin + for i:=0 to Count - 1 do + begin + P:=GetPanelItem(I); + if Assigned(P.FButton) and Assigned(P.FLabel) then + begin + if i=0 then + begin + P.FButton.AnchorSide[akTop].Control:=FRxViewsPanel; + P.FButton.AnchorSide[akTop].Side:=asrTop; + + P.FLabel.AnchorSide[akTop].Control:=P.FButton; + P.FLabel.AnchorSide[akTop].Side:=asrBottom; + + + end + else + begin + P1:=GetPanelItem(I-1); + if Assigned(P1.FButton) and Assigned(P1.FLabel) then + begin + P.FButton.AnchorSide[akTop].Control:=P1.FLabel; + P.FButton.AnchorSide[akTop].Side:=asrBottom; + + P.FLabel.AnchorSide[akTop].Control:=P.FButton; + P.FLabel.AnchorSide[akTop].Side:=asrBottom; + end; + end; + P.FButton.AnchorSide[akLeft].Control:=FRxViewsPanel; + P.FButton.AnchorSide[akRight].Control:=FRxViewsPanel; + P.FButton.AnchorSide[akRight].Side:=asrBottom; + + P.FLabel.AnchorSide[akTop].Control:=P.FButton; + P.FLabel.AnchorSide[akLeft].Control:=FRxViewsPanel; + P.FLabel.AnchorSide[akRight].Control:=FRxViewsPanel; + P.FLabel.AnchorSide[akRight].Side:=asrBottom; + end; + end; + end; +end; + +constructor TRxViewsPanelItems.Create(ARxViewsPanel: TRxViewsPanel); +begin + inherited Create(TRxViewsPanelItem); + FRxViewsPanel:=ARxViewsPanel; +end; + +procedure TRxViewsPanelItems.UpdateImages; +var + i:integer; +begin + for I:=0 to Count - 1 do + Items[i].UpdateImage; +end; + +end. diff --git a/components/rx/version/2.1/rxxpman.pas b/components/rx/version/2.1/rxxpman.pas new file mode 100644 index 000000000..b24ac1943 --- /dev/null +++ b/components/rx/version/2.1/rxxpman.pas @@ -0,0 +1,59 @@ +{ rxxpman unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit rxxpman; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs; + +type + TRXXPManifest = class(TComponent) + private + { Private declarations } + protected + { Protected declarations } + public + { Public declarations } + published + { Published declarations } + end; + +implementation + +{$IFDEF WIN32} +{.$R WindowsXP.RES} +{$ENDIF} + +end. diff --git a/components/rx/version/2.1/seldsfrm.lfm b/components/rx/version/2.1/seldsfrm.lfm new file mode 100644 index 000000000..04276bd6c --- /dev/null +++ b/components/rx/version/2.1/seldsfrm.lfm @@ -0,0 +1,65 @@ +object SelectDataSetForm: TSelectDataSetForm + Left = 445 + Height = 315 + Top = 197 + Width = 400 + ActiveControl = CheckBox1 + Caption = 'Select dataset to copy to' + ClientHeight = 315 + ClientWidth = 400 + OnCreate = FormCreate + Position = poScreenCenter + LCLVersion = '0.9.29' + object Label1: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = CheckBox1 + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 18 + Top = 31 + Width = 106 + BorderSpacing.Around = 6 + Caption = 'Sourse dataset' + FocusControl = DataSetList + ParentColor = False + end + object CheckBox1: TCheckBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 6 + Height = 19 + Top = 6 + Width = 156 + BorderSpacing.Around = 6 + Caption = 'Copy only metadata' + OnChange = CheckBox1Change + TabOrder = 0 + end + object DataSetList: TListBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = ButtonPanel1 + Left = 6 + Height = 208 + Top = 55 + Width = 388 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 6 + ItemHeight = 0 + OnDblClick = ListBox1DblClick + OnKeyPress = ListBox1KeyPress + TabOrder = 1 + TopIndex = -1 + end + object ButtonPanel1: TButtonPanel + Left = 6 + Height = 40 + Top = 269 + Width = 388 + TabOrder = 2 + ShowButtons = [pbOK, pbCancel, pbHelp] + end +end diff --git a/components/rx/version/2.1/seldsfrm.lrs b/components/rx/version/2.1/seldsfrm.lrs new file mode 100644 index 000000000..3164ac634 --- /dev/null +++ b/components/rx/version/2.1/seldsfrm.lrs @@ -0,0 +1,26 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TSelectDataSetForm','FORMDATA',[ + 'TPF0'#18'TSelectDataSetForm'#17'SelectDataSetForm'#4'Left'#3#189#1#6'Height' + +#3';'#1#3'Top'#3#197#0#5'Width'#3#144#1#13'ActiveControl'#7#9'CheckBox1'#7'C' + +'aption'#6#25'Select dataset to copy to'#12'ClientHeight'#3';'#1#11'ClientWi' + +'dth'#3#144#1#8'OnCreate'#7#10'FormCreate'#8'Position'#7#14'poScreenCenter' + +#10'LCLVersion'#6#6'0.9.29'#0#6'TLabel'#6'Label1'#22'AnchorSideLeft.Control' + +#7#5'Owner'#21'AnchorSideTop.Control'#7#9'CheckBox1'#18'AnchorSideTop.Side'#7 + +#9'asrBottom'#4'Left'#2#6#6'Height'#2#18#3'Top'#2#31#5'Width'#2'j'#20'Border' + +'Spacing.Around'#2#6#7'Caption'#6#14'Sourse dataset'#12'FocusControl'#7#11'D' + +'ataSetList'#11'ParentColor'#8#0#0#9'TCheckBox'#9'CheckBox1'#22'AnchorSideLe' + +'ft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#2#6#6'H' + +'eight'#2#19#3'Top'#2#6#5'Width'#3#156#0#20'BorderSpacing.Around'#2#6#7'Capt' + +'ion'#6#18'Copy only metadata'#8'OnChange'#7#15'CheckBox1Change'#8'TabOrder' + +#2#0#0#0#8'TListBox'#11'DataSetList'#22'AnchorSideLeft.Control'#7#5'Owner'#21 + +'AnchorSideTop.Control'#7#6'Label1'#18'AnchorSideTop.Side'#7#9'asrBottom'#23 + +'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom' + +#24'AnchorSideBottom.Control'#7#12'ButtonPanel1'#4'Left'#2#6#6'Height'#3#208 + +#0#3'Top'#2'7'#5'Width'#3#132#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8 + +'akBottom'#0#20'BorderSpacing.Around'#2#6#10'ItemHeight'#2#0#10'OnDblClick'#7 + +#16'ListBox1DblClick'#10'OnKeyPress'#7#16'ListBox1KeyPress'#8'TabOrder'#2#1#8 + +'TopIndex'#2#255#0#0#12'TButtonPanel'#12'ButtonPanel1'#4'Left'#2#6#6'Height' + +#2'('#3'Top'#3#13#1#5'Width'#3#132#1#8'TabOrder'#2#2#11'ShowButtons'#11#4'pb' + +'OK'#8'pbCancel'#6'pbHelp'#0#0#0#0 +]); diff --git a/components/rx/version/2.1/seldsfrm.lrt b/components/rx/version/2.1/seldsfrm.lrt new file mode 100644 index 000000000..0fbff53db --- /dev/null +++ b/components/rx/version/2.1/seldsfrm.lrt @@ -0,0 +1,3 @@ +TSELECTDATASETFORM.CAPTION=Select dataset to copy to +TSELECTDATASETFORM.LABEL1.CAPTION=Sourse dataset +TSELECTDATASETFORM.CHECKBOX1.CAPTION=Copy only metadata diff --git a/components/rx/version/2.1/seldsfrm.pas b/components/rx/version/2.1/seldsfrm.pas new file mode 100644 index 000000000..2127d4153 --- /dev/null +++ b/components/rx/version/2.1/seldsfrm.pas @@ -0,0 +1,293 @@ +{ seldsfrm unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru and Lazarus team + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit seldsfrm; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, + Buttons, ComponentEditors, DB, ButtonPanel; + +type + + { TSelectDataSetForm } + + TSelectDataSetForm = class(TForm) + ButtonPanel1: TButtonPanel; + CheckBox1: TCheckBox; + Label1: TLabel; + DataSetList: TListBox; + procedure CheckBox1Change(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure ListBox1DblClick(Sender: TObject); + procedure ListBox1KeyPress(Sender: TObject; var Key: char); + private + FDesigner: TComponentEditorDesigner; + FExclude: string; + procedure FillDataSetList(ExcludeDataSet: TDataSet); + procedure AddDataSet(const S: string); + public + { public declarations } + end; + + { TMemDataSetEditor } + + TMemDataSetEditor = class(TComponentEditor) + private + DefaultEditor: TBaseComponentEditor; + function UniqueName(Field: TField): string; + procedure BorrowStructure; + protected + function CopyStructure(Source, Dest: TDataSet): Boolean; virtual; + public + constructor Create(AComponent: TComponent; ADesigner: TComponentEditorDesigner); override; + destructor Destroy; override; + procedure ExecuteVerb(Index: Integer); override; + function GetVerb(Index: Integer): string; override; + function GetVerbCount: Integer; override; + end; + +function SelectDataSet(ADesigner: TComponentEditorDesigner; const ACaption: string; + ExcludeDataSet: TDataSet): TDataSet; + +var + SelectDataSetForm: TSelectDataSetForm; + +implementation +uses rxmemds, rxdconst; + +function SelectDataSet(ADesigner: TComponentEditorDesigner; const ACaption: string; + ExcludeDataSet: TDataSet): TDataSet; +begin + Result := nil; + with TSelectDataSetForm.Create(Application) do + try + if ACaption <> '' then Caption := ACaption; + FDesigner := ADesigner; + FillDataSetList(ExcludeDataSet); + if ShowModal = mrOk then + if DataSetList.ItemIndex >= 0 then + begin + with DataSetList do + Result := FDesigner.Form.FindComponent(Items[ItemIndex]) as TDataSet; + end; + finally + Free; + end; +end; + +{ TSelectDataSetForm } + +procedure TSelectDataSetForm.CheckBox1Change(Sender: TObject); +begin + Label1.Enabled:=not CheckBox1.Checked; + DataSetList.Enabled:=not CheckBox1.Checked; +end; + +procedure TSelectDataSetForm.FormCreate(Sender: TObject); +begin + Caption:=sRxSelectDatasetStruct; + CheckBox1.Caption:=sRxCopyOnlyMetadata; + Label1.Caption:=sRxSourseDataset; +end; + +procedure TSelectDataSetForm.ListBox1DblClick(Sender: TObject); +begin + if DataSetList.ItemIndex >= 0 then ModalResult := mrOk; +end; + +procedure TSelectDataSetForm.ListBox1KeyPress(Sender: TObject; var Key: char); +begin + if (Key = #13) and (DataSetList.ItemIndex >= 0) then + ModalResult := mrOk; +end; + +procedure TSelectDataSetForm.FillDataSetList(ExcludeDataSet: TDataSet); +var + I: Integer; + Component: TComponent; +begin + DataSetList.Items.BeginUpdate; + try + DataSetList.Clear; + FExclude := ''; + if ExcludeDataSet <> nil then FExclude := ExcludeDataSet.Name; + for I := 0 to FDesigner.Form.ComponentCount - 1 do + begin + Component := FDesigner.Form.Components[I]; + if (Component is TDataSet) and (Component <> ExcludeDataSet) then + AddDataSet(Component.Name); + end; + with DataSetList do + begin + if Items.Count > 0 then ItemIndex := 0; + Enabled := Items.Count > 0; + ButtonPanel1.OKButton.Enabled:= (ItemIndex >= 0); + end; + finally + DataSetList.Items.EndUpdate; + end; +end; + +procedure TSelectDataSetForm.AddDataSet(const S: string); +begin + if (S <> '') and (S <> FExclude) then DataSetList.Items.Add(S); +end; + +{ TMemDataSetEditor } + +function TMemDataSetEditor.UniqueName(Field: TField): string; +const + AlphaNumeric = ['A'..'Z', 'a'..'z', '_'] + ['0'..'9']; +var + Temp: string; + Comp: TComponent; + I: Integer; +begin + Result := ''; + if (Field <> nil) then begin + Temp := Field.FieldName; + for I := Length(Temp) downto 1 do + if not (Temp[I] in AlphaNumeric) then System.Delete(Temp, I, 1); + if (Temp = '') or not IsValidIdent(Temp) then begin + Temp := Field.ClassName; + if (UpCase(Temp[1]) = 'T') and (Length(Temp) > 1) then + System.Delete(Temp, 1, 1); + end; + end + else Exit; + Temp := Component.Name + Temp; + I := 0; + repeat + Result := Temp; + if I > 0 then Result := Result + IntToStr(I); + Comp := Designer.Form.FindComponent(Result); + Inc(I); + until (Comp = nil) or (Comp = Field); +end; + +procedure TMemDataSetEditor.BorrowStructure; +var + DataSet: TDataSet; + I: Integer; + Caption: string; +begin + Caption := Component.Name; + if (Component.Owner <> nil) and (Component.Owner.Name <> '') then + Caption := Format('%s.%s', [Component.Owner.Name, Caption]); + DataSet := SelectDataSet(Designer, Caption, TDataSet(Component)); + if DataSet <> nil then + begin +// StartWait; + try + if not CopyStructure(DataSet, Component as TDataSet) then Exit; + with TDataSet(Component) do + begin + for I := 0 to FieldCount - 1 do + if Fields[I].Name = '' then + Fields[I].Name := UniqueName(Fields[I]); + end; + Modified; + finally +// StopWait; + end; + Designer.Modified; + end; +end; + +function TMemDataSetEditor.CopyStructure(Source, Dest: TDataSet): Boolean; +begin + Result := Dest is TRxMemoryData; + if Result then + TRxMemoryData(Dest).CopyStructure(Source); +end; + +type + PClass = ^TClass; + +constructor TMemDataSetEditor.Create(AComponent: TComponent; + ADesigner: TComponentEditorDesigner); +var + CompClass: TClass; +begin + inherited Create(AComponent, ADesigner); + CompClass := PClass(Acomponent)^; + try + PClass(AComponent)^ := TDataSet; + DefaultEditor := GetComponentEditor(AComponent, ADesigner); + finally + PClass(AComponent)^ := CompClass; + end; +end; + +destructor TMemDataSetEditor.Destroy; +begin + DefaultEditor.Free; + inherited Destroy; +end; + +procedure TMemDataSetEditor.ExecuteVerb(Index: Integer); +begin + if Index < DefaultEditor.GetVerbCount then + DefaultEditor.ExecuteVerb(Index) + else + begin + case Index - DefaultEditor.GetVerbCount of + 0:BorrowStructure; + end; + end; +end; + +function TMemDataSetEditor.GetVerb(Index: Integer): string; +begin + if Index < DefaultEditor.GetVerbCount then + Result := DefaultEditor.GetVerb(Index) + else + begin + case Index - DefaultEditor.GetVerbCount of + 0:Result:=sRxBorrowStructure; + end; + end; +end; + +function TMemDataSetEditor.GetVerbCount: Integer; +begin + Result:=DefaultEditor.GetVerbCount + 1; +end; + +initialization + {$I seldsfrm.lrs} + +end. + diff --git a/components/rx/version/2.1/tooledit.pas b/components/rx/version/2.1/tooledit.pas new file mode 100644 index 000000000..0cb006545 --- /dev/null +++ b/components/rx/version/2.1/tooledit.pas @@ -0,0 +1,904 @@ +{ tooledit unit + + Copyright (C) 2005-2010 Lagunov Aleksey alexs@hotbox.ru + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit tooledit; + +{$I rx.inc} + +interface + +uses + Classes, SysUtils, LCLType, LMessages, Graphics, MaskEdit, Controls, EditBtn, + pickdate, dateutil; + +type + { TCustomDateEdit } + + TYearDigits = (dyDefault, dyFour, dyTwo); + TPopupAlign = (epaRight, epaLeft); + TCalendarStyle = (csPopup, csDialog); + +const +{$IFDEF DEFAULT_POPUP_CALENDAR} + dcsDefault = csPopup; +{$ELSE} + dcsDefault = csDialog; +{$ENDIF DEFAULT_POPUP_CALENDAR} + +type + + { TCustomRxDateEdit } + + TCustomRxDateEdit = class(TCustomEditButton) + private + FCalendarHints: TStrings; + FBlanksChar: Char; + FCancelCaption: TCaption; + FDefaultToday: Boolean; + FDialogTitle: TCaption; + FPopupColor: TColor; + FNotInThisMonthColor:TColor; + FOKCaption: TCaption; + FOnAcceptDAte: TAcceptDateEvent; + FStartOfWeek: TDayOfWeekName; + FWeekendColor: TColor; + FWeekends: TDaysOfWeek; + FYearDigits: TYearDigits; + FDateFormat: string[10]; + FFormatting: Boolean; + FPopupVisible: Boolean; + FPopupAlign: TPopupAlign; + FCalendarStyle: TCalendarStyle; + //function GetCalendarStyle: TCalendarStyle; + function GetDate: TDateTime; + function GetPopupColor: TColor; + function GetPopupVisible: Boolean; + function GetValidDate: boolean; + function IsStoreTitle: boolean; + procedure SetBlanksChar(const AValue: Char); + procedure SetCalendarStyle(const AValue: TCalendarStyle); + procedure SetDate(const AValue: TDateTime); + procedure SetPopupColor(const AValue: TColor); + procedure SetStartOfWeek(const AValue: TDayOfWeekName); + procedure SetWeekendColor(const AValue: TColor); + procedure SetWeekends(const AValue: TDaysOfWeek); + procedure SetYearDigits(const AValue: TYearDigits); + procedure CalendarHintsChanged(Sender: TObject); + + function AcceptPopup(var Value: TDateTime): Boolean; + procedure AcceptValue(const AValue: TDateTime); +// procedure SetPopupValue(const Value: Variant); + protected + FPopup: TPopupCalendar; + procedure UpdateFormat; + procedure UpdatePopup; + function TextStored: Boolean; + procedure PopupDropDown(DisableEdit: Boolean); virtual; + procedure PopupCloseUp(Sender: TObject; Accept: Boolean); + procedure HidePopup; virtual; + procedure ShowPopup(AOrigin: TPoint); virtual; + procedure ApplyDate(Value: TDateTime); virtual; + procedure Change; override; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure KeyPress(var Key: Char); override; + procedure DoButtonClick (Sender: TObject); override; + function GetDefaultGlyphName: String; override; + function CreatePopupForm:TPopupCalendar; + + property BlanksChar: Char read FBlanksChar write SetBlanksChar default ' '; + property DialogTitle:TCaption Read FDialogTitle Write FDialogTitle Stored IsStoreTitle; + Property OnAcceptDate : TAcceptDateEvent Read FOnAcceptDAte Write FOnAcceptDate; + property OKCaption:TCaption Read FOKCaption Write FOKCaption; + property CancelCaption:TCaption Read FCancelCaption Write FCancelCaption; + property DefaultToday: Boolean read FDefaultToday write FDefaultToday + default False; + property StartOfWeek: TDayOfWeekName read FStartOfWeek write SetStartOfWeek default Mon; + property Weekends: TDaysOfWeek read FWeekends write SetWeekends default [Sun]; + property WeekendColor: TColor read FWeekendColor write SetWeekendColor default clRed; + property YearDigits: TYearDigits read FYearDigits write SetYearDigits default dyDefault; + property PopupColor: TColor read GetPopupColor write SetPopupColor + default clBtnFace; + property CalendarStyle: TCalendarStyle read FCalendarStyle//GetCalendarStyle + write SetCalendarStyle default dcsDefault; + property PopupVisible: Boolean read GetPopupVisible; + property PopupAlign: TPopupAlign read FPopupAlign write FPopupAlign default epaLeft; + property NotInThisMonthColor:TColor read FNotInThisMonthColor write FNotInThisMonthColor default clSilver; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure CheckValidDate; + function GetDateMask: string; + procedure UpdateMask; virtual; + property Date: TDateTime read GetDate write SetDate; + property Formatting: Boolean read FFormatting; + property ValidDate:boolean read GetValidDate; + end; + +type + + { TRxDateEdit } + + TRxDateEdit = class(TCustomRxDateEdit) + public + constructor Create(AOwner: TComponent); override; + property PopupVisible; + published + property Action; + property Align; + property Anchors; + property AutoSelect; + property AutoSize; + property BlanksChar; + property BorderSpacing; + property ButtonOnlyWhenFocused; + property ButtonWidth; + property CalendarStyle; + property CancelCaption; + property CharCase; + property Color; + property Constraints; + property DefaultToday; + property DialogTitle; + property DirectInput; + property DragMode; + property EchoMode; + property Enabled; + property Font; + property Glyph; + property MaxLength; + property NotInThisMonthColor; + property NumGlyphs; + property OKCaption; + property ParentFont; + property ParentShowHint; + property PasswordChar; + property PopupAlign; + property PopupColor; + property PopupMenu; + property ReadOnly; + property ShowHint; + property StartOfWeek; + property TabOrder; + property TabStop; + property Text; + property Visible; + property WeekendColor; + property Weekends; + property YearDigits; + + property OnAcceptDate; + property OnChange; + property OnChangeBounds; + property OnClick; + property OnEditingDone; + property OnEnter; + property OnExit; + Property OnKeyDown; + property OnKeyPress; + Property OnKeyUp; + Property OnMouseDown; + Property OnMouseMove; + property OnMouseUp; + property OnResize; + end; + + +function PaintComboEdit(Editor: TCustomMaskEdit; const AText: string; + AAlignment: TAlignment; StandardPaint: Boolean; + var ACanvas: TControlCanvas; var Message: TLMPaint): Boolean; +function EditorTextMargins(Editor: TCustomMaskEdit): TPoint; + +implementation +uses lclintf, LCLStrConsts, rxconst, rxstrutils, LResources, Forms, LCLProc, + variants; + +{$R tooledit.res} + +type + TPopupCalendarAccess = class(TPopupCalendar) + end; + +function EditorTextMargins(Editor: TCustomMaskEdit): TPoint; +var + DC: HDC; + SaveFont: HFont; + I: Integer; + SysMetrics, Metrics: TTextMetric; +begin + with Editor do + begin +(* if NewStyleControls then + begin + if BorderStyle = bsNone then + I := 0 + else +{ if Ctl3D then + I := 1 + else} + I := 2; + Result.X := {SendMessage(Handle, LM_GETMARGINS, 0, 0) and $0000FFFF} + I; + Result.Y := I; + end + else *) + begin + if BorderStyle = bsNone then + I := 0 + else + begin + DC := GetDC(0); + GetTextMetrics(DC, SysMetrics); + SaveFont := SelectObject(DC, Font.Handle); + GetTextMetrics(DC, Metrics); + SelectObject(DC, SaveFont); + ReleaseDC(0, DC); + I := SysMetrics.tmHeight; + if I > Metrics.tmHeight then + I := Metrics.tmHeight; + I := I div 4; + end; + Result.X := I; + Result.Y := I div 4; + end; + end; +end; + +function PaintComboEdit(Editor: TCustomMaskEdit; const AText: string; + AAlignment: TAlignment; StandardPaint: Boolean; + var ACanvas: TControlCanvas; var Message: TLMPaint): Boolean; +var + AWidth, ALeft: Integer; + Margins: TPoint; + R: TRect; + DC: HDC; + PS: TPaintStruct; + S: string; +{$IFDEF USED_BiDi} + ExStyle: DWORD; +const + AlignStyle: array[Boolean, TAlignment] of DWORD = + ((WS_EX_LEFT, WS_EX_RIGHT, WS_EX_LEFT), + (WS_EX_RIGHT, WS_EX_LEFT, WS_EX_LEFT)); +{$ENDIF} +begin + Result := True; + with Editor do + begin +{$IFDEF USED_BiDi} + if UseRightToLeftAlignment then ChangeBiDiModeAlignment(AAlignment); +{$ENDIF} + if StandardPaint and not(csPaintCopy in ControlState) then + begin +{$IFDEF USED_BiDi} + if SysLocale.MiddleEast and HandleAllocated and (IsRightToLeft) then + begin { This keeps the right aligned text, right aligned } + ExStyle := DWORD(GetWindowLong(Handle, GWL_EXSTYLE)) and (not WS_EX_RIGHT) and + (not WS_EX_RTLREADING) and (not WS_EX_LEFTSCROLLBAR); + if UseRightToLeftReading then + ExStyle := ExStyle or WS_EX_RTLREADING; + if UseRightToLeftScrollbar then + ExStyle := ExStyle or WS_EX_LEFTSCROLLBAR; + ExStyle := ExStyle or + AlignStyle[UseRightToLeftAlignment, AAlignment]; + if DWORD(GetWindowLong(Handle, GWL_EXSTYLE)) <> ExStyle then + SetWindowLong(Handle, GWL_EXSTYLE, ExStyle); + end; +{$ENDIF USED_BiDi} + Result := False; + { return false if we need to use standard paint handler } + Exit; + end; + { Since edit controls do not handle justification unless multi-line (and + then only poorly) we will draw right and center justify manually unless + the edit has the focus. } + if ACanvas = nil then + begin + ACanvas := TControlCanvas.Create; + ACanvas.Control := Editor; + end; + + DC := Message.DC; + if DC = 0 then DC := BeginPaint(Handle, PS); + ACanvas.Handle := DC; + + try + ACanvas.Font := Font; + if not Enabled and NewStyleControls and not + (csDesigning in ComponentState) and + (ColorToRGB(Color) <> ColorToRGB(clGrayText)) then + ACanvas.Font.Color := clGrayText; + with ACanvas do + begin + R := ClientRect; + Brush.Color := Color; + S := AText; + AWidth := TextWidth(S); + Margins := EditorTextMargins(Editor); + case AAlignment of + taLeftJustify: ALeft := Margins.X; + taRightJustify: ALeft := ClientWidth - AWidth - Margins.X - 2; + else + ALeft := (ClientWidth - AWidth) div 2; + end; +{$IFDEF USED_BiDi} + if SysLocale.MiddleEast then UpdateTextFlags; +{$ENDIF} + Brush.Style := bsClear; + TextRect(R, ALeft, Margins.Y, S); + end; + finally + ACanvas.Handle := 0; + if Message.DC = 0 then EndPaint(Handle, PS); + end; + end; +end; + +{ TRxDateEdit } + +constructor TRxDateEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + UpdateMask; +end; + +{ TCustomRxDateEdit } + +function TCustomRxDateEdit.IsStoreTitle: boolean; +begin + Result:=DialogTitle<>rsPickDate; +end; + +procedure TCustomRxDateEdit.SetBlanksChar(const AValue: Char); +begin + if FBlanksChar=AValue then exit; + if (AValue < ' ') then + FBlanksChar:=' ' + else + FBlanksChar:=AValue; + UpdateMask; +end; + +{ +function TCustomRxDateEdit.GetCalendarStyle: TCalendarStyle; +begin + if FPopup <> nil then + Result := csPopup + else + Result := csDialog; +end; +} +function TCustomRxDateEdit.GetDate: TDateTime; +begin + if DefaultToday then Result := SysUtils.Date + else Result := NullDate; + if Text<>'' then + Result := StrToDateFmtDef(FDateFormat, Text, Result); +end; + +function TCustomRxDateEdit.GetPopupColor: TColor; +begin + if FPopup <> nil then Result := TPopupCalendar(FPopup).Color + else Result := FPopupColor; +end; + +function TCustomRxDateEdit.GetPopupVisible: Boolean; +begin + Result := (FPopup <> nil) and FPopupVisible; +end; + +function TCustomRxDateEdit.GetValidDate: boolean; +begin + try + StrToDateFmt(FDateFormat, Text); + Result:=true; + except + Result:=false; + end; +end; + +procedure TCustomRxDateEdit.SetCalendarStyle(const AValue: TCalendarStyle); +begin + if AValue <> FCalendarStyle then + begin + FCalendarStyle:=AValue; +(* case AValue of + csPopup: + begin + if FPopup = nil then + begin + FPopup := CreatePopupCalendar(Self{$IFDEF USED_BiDi}, BiDiMode {$ENDIF}); + end; + FPopup.OnCloseUp := @PopupCloseUp; + FPopup.Color := FPopupColor; + TRxCalendarGrid(FPopup.Calendar).NotInThisMonthColor:=FNotInThisMonthColor; + end; + csDialog: + begin + FPopup.Free; + FPopup := nil; + end; + end;*) + end; +end; + +procedure TCustomRxDateEdit.SetDate(const AValue: TDateTime); +var + D: TDateTime; +begin + D := Date; + if AValue = NullDate then + Text := '' + else + Text := FormatDateTime(FDateFormat, AValue); + Modified := D <> Date; +end; + +procedure TCustomRxDateEdit.SetPopupColor(const AValue: TColor); +begin + if AValue <> FPopupColor then + begin + if FPopup <> nil then FPopup.Color := AValue; + FPopupColor := AValue; + UpdatePopup; + end; +end; + +procedure TCustomRxDateEdit.SetStartOfWeek(const AValue: TDayOfWeekName); +begin + if FStartOfWeek=AValue then exit; + FStartOfWeek:=AValue; + UpdatePopup; + UpdateMask; +end; + +procedure TCustomRxDateEdit.SetWeekendColor(const AValue: TColor); +begin + if FWeekendColor=AValue then exit; + FWeekendColor:=AValue; + UpdatePopup; +end; + +procedure TCustomRxDateEdit.SetWeekends(const AValue: TDaysOfWeek); +begin + if FWeekends=AValue then exit; + FWeekends:=AValue; + UpdatePopup; +end; + +procedure TCustomRxDateEdit.SetYearDigits(const AValue: TYearDigits); +begin + if FYearDigits=AValue then exit; + FYearDigits:=AValue; +// UpdateFormat; + UpdateMask; +end; + +procedure TCustomRxDateEdit.CalendarHintsChanged(Sender: TObject); +begin + TStringList(FCalendarHints).OnChange := nil; + try + while (FCalendarHints.Count > 4) do + FCalendarHints.Delete(FCalendarHints.Count - 1); + finally + TStringList(FCalendarHints).OnChange := @CalendarHintsChanged; + end; + if not (csDesigning in ComponentState) then UpdatePopup; +end; + +function TCustomRxDateEdit.AcceptPopup(var Value: TDateTime): Boolean; +var + D: TDateTime; +begin + Result := True; + if Assigned(FOnAcceptDate) then + begin + D :=Value; + FOnAcceptDate(Self, D, Result); + if Result then + Value := D; + end; +end; + +procedure TCustomRxDateEdit.AcceptValue(const AValue: TDateTime); +begin + SetDate(AValue); +// UpdatePopupVisible; + if Modified then + inherited Change; +end; + +{procedure TCustomRxDateEdit.SetPopupValue(const Value: Variant); +begin + +end;} + +procedure TCustomRxDateEdit.UpdateFormat; +begin + case YearDigits of + dyDefault:FDateFormat :=DefDateFormat(FourDigitYear); + dyFour:FDateFormat := DefDateFormat(true); + dyTwo:FDateFormat := DefDateFormat(false);//DefDateMask(FBlanksChar, false); + end; +end; + +procedure TCustomRxDateEdit.UpdatePopup; +begin + if FPopup <> nil then SetupPopupCalendar(FPopup, FStartOfWeek, + FWeekends, FWeekendColor, FCalendarHints, FourDigitYear); +end; + +function TCustomRxDateEdit.TextStored: Boolean; +begin + Result := not IsEmptyStr(Text, [#0, ' ', DateSeparator, FBlanksChar]); +end; + +procedure TCustomRxDateEdit.PopupDropDown(DisableEdit: Boolean); +var + P: TPoint; + Y: Integer; + +procedure DoTrySetDate; +var + D:TDateTime; +begin + if Text<>'' then + begin + try + D:=StrToDate(Text); + FPopup.Date:=D; + except + if FDefaultToday then + FPopup.Date:=sysutils.Date; + end; + end + else + if FDefaultToday then + FPopup.Date:=sysutils.Date; +end; + +begin + if not Assigned(FPopup) then + FPopup:=CreatePopupForm; + + UpdatePopup; + + if (FPopup <> nil) and not (ReadOnly {or FPopupVisible}) then + begin + P := Parent.ClientToScreen(Point(Left, Top)); + Y := P.Y + Height; + if Y + FPopup.Height > Screen.Height then + Y := P.Y - FPopup.Height; + case FPopupAlign of + epaRight: + begin + Dec(P.X, FPopup.Width - Width); + if P.X < 0 then Inc(P.X, FPopup.Width - Width); + end; + epaLeft: + begin + if P.X + FPopup.Width > Screen.Width then + Dec(P.X, FPopup.Width - Width); + end; + end; + if P.X < 0 then P.X := 0 + else if P.X + FPopup.Width > Screen.Width then + P.X := Screen.Width - FPopup.Width; + + DoTrySetDate; + + ShowPopup(Point(P.X, Y)); +// FPopupVisible := True; +{ if DisableEdit then + begin + inherited ReadOnly := True; + HideCaret(Handle); + end;} + end; +end; + +procedure TCustomRxDateEdit.PopupCloseUp(Sender: TObject; Accept: Boolean); +var + AValue: Variant; +begin +(* + if (FPopup <> nil) and FPopupVisible then + begin +{ if GetCapture <> 0 then + SendMessage(GetCapture, WM_CANCELMODE, 0, 0);} +// AValue := GetPopupValue; + HidePopup; + try + try + if CanFocus then + begin + SetFocus; +// if GetFocus = Handle then SetShowCaret; + end; + except + { ignore exceptions } + end; +// DirectInput:=DirectInput; + Invalidate; +{ if Accept and AcceptPopup(AValue) and EditCanModify then + begin + AcceptValue(AValue); + if FFocused then inherited SelectAll; + end;} + finally + FPopupVisible := False; + end; + end; +*) +end; + +procedure TCustomRxDateEdit.HidePopup; +begin + FPopup.Hide; +end; + +procedure TCustomRxDateEdit.ShowPopup(AOrigin: TPoint); +var + FAccept:boolean; + D:TDateTime; +begin + if not Assigned(FPopup) then + FPopup:=CreatePopupForm; + FPopup.Left:=AOrigin.X; + FPopup.Top:=AOrigin.Y; + FPopup.AutoSizeForm; + TRxCalendarGrid(FPopup.Calendar).NotInThisMonthColor := FNotInThisMonthColor; + FAccept:=FPopup.ShowModal = mrOk; + if CanFocus then SetFocus; + + if FAccept and EditCanModify then + begin + D:=FPopup.Date; + if AcceptPopup(D) then + begin + FPopup.Date:=D; + AcceptValue(D); + if Focused then inherited SelectAll; + end; + end; + +{ FPopup.Show(AOrigin); + SetWindowPos(Handle, HWND_TOP, Origin.X, Origin.Y, 0, 0, + SWP_NOACTIVATE or SWP_SHOWWINDOW or SWP_NOSIZE); + Visible := True;} +end; + +procedure TCustomRxDateEdit.ApplyDate(Value: TDateTime); +begin + SetDate(Value); + SelectAll; +end; + +procedure TCustomRxDateEdit.Change; +begin + if not FFormatting then inherited Change; +end; + +procedure TCustomRxDateEdit.KeyDown(var Key: Word; Shift: TShiftState); +begin + if (Key in [VK_PRIOR, VK_NEXT, VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN, + VK_ADD, VK_SUBTRACT]) and + PopupVisible then + begin + TPopupCalendarAccess(FPopup).KeyDown(Key, Shift); + Key := 0; + end + else + if (Shift = []) and DirectInput then + begin + case Key of + VK_ADD: + begin + ApplyDate(NvlDate(Date, Now) + 1); + Key := 0; + end; + VK_SUBTRACT: + begin + ApplyDate(NvlDate(Date, Now) - 1); + Key := 0; + end; + end; + end; + inherited KeyDown(Key, Shift); +end; + +procedure TCustomRxDateEdit.KeyPress(var Key: Char); +begin + if (Key in ['T', 't', '+', '-']) and PopupVisible then + begin +// FPopup.KeyPress(Key); + Key := #0; + end + else + if DirectInput then + begin + case Key of + 'T', 't': + begin + ApplyDate(Trunc(Now)); + Key := #0; + end; + '+', '-': + begin + Key := #0; + end; + end; + end; + inherited KeyPress(Key); +end; + +procedure TCustomRxDateEdit.DoButtonClick(Sender: TObject); +var + D: TDateTime; + A: Boolean; +begin + inherited DoButtonClick(Sender); + if CalendarStyle <> csDialog then +// if FPopup <> nil then + begin +{ if FPopupVisible then + PopupCloseUp(FPopup, True) + else} + PopupDropDown(True); + end + else + if CalendarStyle = csDialog then + begin + D := Self.Date; + A := SelectDate(D, DialogTitle, FStartOfWeek, FWeekends, + FWeekendColor, FCalendarHints); + if CanFocus then SetFocus; + if A then + begin + if Assigned(FOnAcceptDate) then FOnAcceptDate(Self, D, A); + if A then + begin + Self.Date := D; +// if FFocused then + inherited SelectAll; + end; + end; + end; +end; + +function TCustomRxDateEdit.GetDefaultGlyphName: String; +begin + Result:='picDateEdit'; +end; + +function TCustomRxDateEdit.CreatePopupForm: TPopupCalendar; +begin + Result := CreatePopupCalendar(Self {$IFDEF USED_BiDi}, BiDiMode {$ENDIF}); + Result.OnCloseUp := @PopupCloseUp; + Result.Color := FPopupColor; + TRxCalendarGrid(Result.Calendar).NotInThisMonthColor:=FNotInThisMonthColor; +end; + +constructor TCustomRxDateEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FBlanksChar := ' '; + FDialogTitle := sDateDlgTitle; + FPopupColor := clWindow; + FNotInThisMonthColor := clSilver; + FPopupAlign := epaLeft; + FStartOfWeek := Mon; + FWeekends := [Sun]; + FWeekendColor := clRed; + FYearDigits := dyDefault; + FCalendarHints := TStringList.Create; + TStringList(FCalendarHints).OnChange := @CalendarHintsChanged; + ControlState := ControlState + [csCreating]; + try + UpdateFormat; +(* +{$IFDEF DEFAULT_POPUP_CALENDAR} + FPopup := CreatePopupCalendar(Self {$IFDEF USED_BiDi}, BiDiMode {$ENDIF}); + FPopup.OnCloseUp := @PopupCloseUp; + FPopup.Color := FPopupColor; + FPopup.Visible:=false; +{$ELSE} + FPopup:=nil; +{$ENDIF DEFAULT_POPUP_CALENDAR} +*) + FPopup:=nil; +// GlyphKind := gkDefault; { force update } + finally + ControlState := ControlState - [csCreating]; + end; +// Glyph:=LoadBitmapFromLazarusResource('picDateEdit'); + NumGlyphs := 2; +end; + +destructor TCustomRxDateEdit.Destroy; +begin + if Assigned(FPopup) then + begin + FPopup.OnCloseUp := nil; + FreeAndNil(FPopup); + end; + TStringList(FCalendarHints).OnChange := nil; + FreeAndNil(FCalendarHints); + inherited Destroy; +end; + +procedure TCustomRxDateEdit.CheckValidDate; +begin + if TextStored then + try + FFormatting := True; + try + SetDate(StrToDateFmt(FDateFormat, Text)); + finally + FFormatting := False; + end; + except + if CanFocus then SetFocus; + raise; + end; +end; + +function TCustomRxDateEdit.GetDateMask: string; +begin + case YearDigits of + dyDefault:Result :=DefDateMask(FBlanksChar, FourDigitYear); + dyFour:Result := DefDateMask(FBlanksChar, true); + dyTwo:Result := DefDateMask(FBlanksChar, false); + end; +end; + +procedure TCustomRxDateEdit.UpdateMask; +var + DateValue: TDateTime; + OldFormat: string[10]; +begin + DateValue := GetDate; + OldFormat := FDateFormat; + UpdateFormat; + if (GetDateMask <> EditMask) or (OldFormat <> FDateFormat) then + begin + { force update } + EditMask := ''; + EditMask := GetDateMask; + end; + UpdatePopup; + SetDate(DateValue); +end; + +(* +initialization + {$I tooledit.lrs} +*) +end. + diff --git a/components/rx/version/2.1/tooledit.res b/components/rx/version/2.1/tooledit.res new file mode 100644 index 0000000000000000000000000000000000000000..c4e05c0d2d3adaa3036bdd8cb237ad2c2a941fed GIT binary patch literal 388 zcmZQzU|>)H;{X347|28c28;|0CP0z@|G5|f7(5xA8C)0~8A2FbfzSoW4}q!{5I|__ z4DfU3<&xq8itu`RxC8-d86f6iVFr@TUk}&-DWL$L5ZC_<KwB9)Iy(OU|9|Gp86eY3 zV)H?u5Mz?Jy9=`*kIyF{C(F~tF@)o~Z{I=Q0}33j^)FbCe922-)XfVJU*Y*ZeyPIr zI{r_Glo<+GR3>uuSU%r-LW%25ePFZth7!HLsY|TBU0PhNx%5r!{9La|n<7tet(HFS z(Q-^D|EJKT$J<Z*vHbLT-kwid$8~}>@o$qAtNL|+Umws`)e_f;l9a@fRIB8oR3OD* zWMF8lYhbBsWD#O$X=MsT#@YrZRt5&q_xqDjH00)|WTsU@HJIrdnuHh`S(%tx8CyU! UNM64v4%EQl>FVdQ&MBb@01}{b$N&HU literal 0 HcmV?d00001 diff --git a/components/rx/version/2.1/vclutils.pas b/components/rx/version/2.1/vclutils.pas new file mode 100644 index 000000000..5c6eb065e --- /dev/null +++ b/components/rx/version/2.1/vclutils.pas @@ -0,0 +1,659 @@ +{ vclutils unit + + Copyright (C) 2005-2013 Lagunov Aleksey alexs@hotbox.ru + original conception from rx library for Delphi (c) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +} + +unit vclutils; + +{$I rx.inc} + +interface + +uses +{$IFDEF WIN32} + windows, +{$ENDIF} + Classes, SysUtils, Graphics, Controls, Forms, LResources + ; + +type + TTextOrientation = (toHorizontal, toVertical90, toHorizontal180, toVertical270, toHorizontal360); + +function WidthOf(R: TRect): Integer; inline; +function HeightOf(R: TRect): Integer; inline; + +procedure RxFrame3D(Canvas: TCanvas; var Rect: TRect; TopColor, BottomColor: TColor; + Width: Integer); +function DrawButtonFrame(Canvas: TCanvas; const Client: TRect; + IsDown, IsFlat: Boolean): TRect; +function DrawButtonFrameXP(Canvas: TCanvas; const Client: TRect; + IsDown, IsFlat: Boolean): TRect; + +//Code from TAChartUtils +procedure RotateLabel(Canvas: TCanvas; x, y: Integer; const St: String; RotDegree: Integer); +procedure OutTextXY90(Canvas:TCanvas; X,Y:integer; Text:string; Orientation:TTextOrientation); + +function IsForegroundTask: Boolean; +function ValidParentForm(Control: TControl): TCustomForm; +function CreateArrowBitmap:TBitmap; +function LoadLazResBitmapImage(const ResName: string): TBitmap; + +{functions from DBGrid} +function GetWorkingCanvas(const Canvas: TCanvas): TCanvas; +procedure FreeWorkingCanvas(canvas: TCanvas); + +{ +function AllocMemo(Size: Longint): Pointer; +function ReallocMemo(fpBlock: Pointer; Size: Longint): Pointer; +procedure FreeMemo(var fpBlock: Pointer); +} + +procedure RaiseIndexOutOfBounds(Control: TControl; Items:TStrings; Index: integer); + +{$IFDEF WIN32} +type + PCursorOrIcon = ^TCursorOrIcon; + TCursorOrIcon = packed record + Reserved: Word; + wType: Word; + Count: Word; + end; + + PIconRec = ^TIconRec; + TIconRec = packed record + Width: Byte; + Height: Byte; + Colors: Word; + Reserved1: Word; + Reserved2: Word; + DIBSize: Longint; + DIBOffset: Longint; + end; + +procedure ReadIcon(Stream: TStream; var Icon: HICON; ImageCount: Integer; + StartOffset: Integer; const RequestedSize: TPoint; var IconSize: TPoint); +procedure OutOfResources; +{$ENDIF} + +implementation +uses LCLProc, LCLIntf, LCLType, LCLStrConsts; + +function WidthOf(R: TRect): Integer; +begin + Result := R.Right - R.Left; +end; + +function HeightOf(R: TRect): Integer; +begin + Result := R.Bottom - R.Top; +end; + +procedure RxFrame3D(Canvas: TCanvas; var Rect: TRect; TopColor, BottomColor: TColor; + Width: Integer); + +procedure DoRect; +var + TopRight, BottomLeft: TPoint; +begin + TopRight.X := Rect.Right; + TopRight.Y := Rect.Top; + BottomLeft.X := Rect.Left; + BottomLeft.Y := Rect.Bottom; + Canvas.Pen.Color := TopColor; + Canvas.PolyLine([BottomLeft, Rect.TopLeft, TopRight]); + Canvas.Pen.Color := BottomColor; + Dec(BottomLeft.X); + Canvas.PolyLine([TopRight, Rect.BottomRight, BottomLeft]); +end; + +begin + Canvas.Pen.Width := 1; + Dec(Rect.Bottom); Dec(Rect.Right); + while Width > 0 do + begin + Dec(Width); + DoRect; + InflateRect(Rect, -1, -1); + end; + Inc(Rect.Bottom); Inc(Rect.Right); +end; + +function DrawButtonFrame(Canvas: TCanvas; const Client: TRect; + IsDown, IsFlat: Boolean): TRect; +begin + Result := Client; + if IsDown then + begin + RxFrame3D(Canvas, Result, clWindowFrame, clBtnHighlight, 1); + if not IsFlat then + RxFrame3D(Canvas, Result, clBtnShadow, clBtnFace, 1); + end + else + begin + if IsFlat then + RxFrame3D(Canvas, Result, clBtnHighlight, clBtnShadow, 1) + else + begin + RxFrame3D(Canvas, Result, clBtnHighlight, clWindowFrame, 1); + RxFrame3D(Canvas, Result, clBtnFace, clBtnShadow, 1); + end; + end; + InflateRect(Result, -1, -1); +end; + +function DrawButtonFrameXP(Canvas: TCanvas; const Client: TRect; IsDown, + IsFlat: Boolean): TRect; +begin + Result := Client; + Canvas.Brush.Color := $00EFD3C6; + Canvas.FillRect(Client); + RxFrame3D(Canvas, Result, $00C66931, $00C66931, 1); +end; + +{$IFDEF WIN32} +type + PCheckTaskInfo = ^TCheckTaskInfo; + TCheckTaskInfo = packed record + FocusWnd: HWnd; + Found: Boolean; + end; +//function CheckTaskWindow(Window: HWnd; Data: Longint): WordBool; stdcall; +function CheckTaskWindow(Window:HWND; Data:LPARAM):WINBOOL;stdcall; +begin + Result := True; + if PCheckTaskInfo(Data)^.FocusWnd = Window then begin + Result := False; + PCheckTaskInfo(Data)^.Found := True; + end; +end; +{$ENDIF} + +function IsForegroundTask: Boolean; +{$IFDEF WIN32} +var + Info: TCheckTaskInfo; +{$ENDIF} +begin +{$IFDEF WIN32} + Info.FocusWnd := GetActiveWindow; + Info.Found := False; + EnumThreadWindows(GetCurrentThreadID, @CheckTaskWindow, Longint(@Info)); + Result := Info.Found; +{$ELSE} + Result:=true; +{$ENDIF} +end; + +function ValidParentForm(Control: TControl): TCustomForm; +begin + Result := GetParentForm(Control); + if Result = nil then + raise EInvalidOperation.CreateFmt('ParentRequired %s', [Control.Name]); +end; + +procedure RotateLabel(Canvas: TCanvas; x, y: Integer; const St: String; RotDegree: Integer); +var + L:integer; +begin + L:=Canvas.Font.Orientation; + + SetBkMode(Canvas.Handle, TRANSPARENT); + + Canvas.Font.Orientation:=RotDegree * 10; + Canvas.TextOut(X, Y, St); + +{ DrawText(ACanvas.Handle, PChar(Text), Length(Text), DrawRect, + ALIGN_FLAGS_HEADER[Alignment] or DT_WORDBREAK + );} + + Canvas.Font.Orientation:=L; +end; + + +procedure OutTextXY90(Canvas:TCanvas; X,Y:integer; Text:string; Orientation:TTextOrientation); +{$IFDEF OLD_STYLE_TEXT_ROTATE} +var + W,H, i,j:integer; + Bmp:TBitmap; +begin + if Orientation = toHorizontal then + Canvas.TextOut(X, Y, Text) + else + begin + W:=Canvas.TextWidth(Text); + H:=Canvas.TextHeight(Text); + Bmp:=TBitMap.Create; + try + Bmp.Width:=W; + Bmp.Height:=H; + Bmp.Canvas.Brush.Style:=bsSolid; + Bmp.Canvas.Brush.Color:=clWhite; + Bmp.Canvas.FillRect(Rect(0,0,W,H)); + Bmp.Canvas.Font:=Canvas.Font; + Bmp.Canvas.TextOut(0, 0, Text); + Canvas.Lock; + if Orientation = toVertical90 then + begin + for i:=0 to W-1 do + for j:=0 to H-1 do + if Bmp.Canvas.Pixels[i,j]<>clWhite then + Canvas.Pixels[(H-j)+X,i+Y]:=Bmp.Canvas.Pixels[i,j]; + end + else + if Orientation = toVertical270 then + begin + for i:=0 to W-1 do + for j:=0 to H-1 do + if Bmp.Canvas.Pixels[i,j]<>clWhite then + Canvas.Pixels[j+X,(W-i)+Y]:=Bmp.Canvas.Pixels[i,j]; + end + else + if Orientation = toHorizontal180 then + begin + for i:=0 to W-1 do + for j:=0 to H-1 do + if Bmp.Canvas.Pixels[i,j]<>clWhite then + Canvas.Pixels[i+X,(H-j)+Y]:=Bmp.Canvas.Pixels[i,j]; + end + else + if Orientation = toHorizontal360 then + begin + for i:=0 to W-1 do + for j:=0 to H-1 do + if Bmp.Canvas.Pixels[i,j]<>clWhite then + Canvas.Pixels[(W-i)+X,j+Y]:=Bmp.Canvas.Pixels[i,j]; + end; + Canvas.Unlock; + finally + Bmp.Free; + end; + end; +end; +{$ELSE} +const + TextAngle: array [TTextOrientation] of integer = + (0 {toHorizontal}, 90 {toVertical90}, + 180 {toHorizontal180}, 270 {toVertical270}, 0 {toHorizontal360}); +var + W, H:integer; +begin + W:=0; + H:=0; + case Orientation of + toVertical90: + begin + H:=Canvas.TextWidth(Text); + end; + toVertical270: + begin + W:=Canvas.TextHeight(Text); + end; + toHorizontal180: + begin + H:=Canvas.TextHeight(Text); + W:=Canvas.TextWidth(Text); + end; + end; + RotateLabel(Canvas, X+W, Y+H, Text, TextAngle[Orientation]); +end; +{$ENDIF} + +{ +function AllocMemo(Size: Longint): Pointer; +begin + if Size > 0 then + Result := GlobalAllocPtr(HeapAllocFlags or GMEM_ZEROINIT, Size) + else Result := nil; +end; + +function ReallocMemo(fpBlock: Pointer; Size: Longint): Pointer; +begin + Result := GlobalReallocPtr(fpBlock, Size, + HeapAllocFlags or GMEM_ZEROINIT); +end; + +procedure FreeMemo(var fpBlock: Pointer); +begin + if fpBlock <> nil then begin + GlobalFreePtr(fpBlock); + fpBlock := nil; + end; +end; +} +{$IFDEF WIN32} +function CreateIcon(hInstance: HINST; nWidth, nHeight: Integer; + cPlanes, cBitsPixel: Byte; lpbANDbits, lpbXORbits: Pointer): HICON; stdcall; external user32 name 'CreateIcon'; + +procedure GDIError; +var + ErrorCode: Integer; + Buf: array [Byte] of Char; +begin + ErrorCode := GetLastError; + if (ErrorCode <> 0) and (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, + ErrorCode, LOCALE_USER_DEFAULT, Buf, sizeof(Buf), nil) <> 0) then + raise EOutOfResources.Create(Buf) + else + OutOfResources; +end; + +function DupBits(Src: HBITMAP; Size: TPoint; Mono: Boolean): HBITMAP; +var + DC, Mem1, Mem2: HDC; + Old1, Old2: HBITMAP; + Bitmap: Windows.TBitmap; +begin + Mem1 := CreateCompatibleDC(0); + Mem2 := CreateCompatibleDC(0); + + try + GetObject(Src, SizeOf(Bitmap), @Bitmap); + if Mono then + Result := CreateBitmap(Size.X, Size.Y, 1, 1, nil) + else + begin + DC := GetDC(0); + if DC = 0 then GDIError; + try + Result := CreateCompatibleBitmap(DC, Size.X, Size.Y); + if Result = 0 then GDIError; + finally + ReleaseDC(0, DC); + end; + end; + + if Result <> 0 then + begin + Old1 := SelectObject(Mem1, Src); + Old2 := SelectObject(Mem2, Result); + + StretchBlt(Mem2, 0, 0, Size.X, Size.Y, Mem1, 0, 0, Bitmap.bmWidth, + Bitmap.bmHeight, SrcCopy); + if Old1 <> 0 then SelectObject(Mem1, Old1); + if Old2 <> 0 then SelectObject(Mem2, Old2); + end; + finally + DeleteDC(Mem1); + DeleteDC(Mem2); + end; +end; + +function GDICheck(Value: Integer): Integer; +begin + if Value = 0 then GDIError; + Result := Value; +end; + +function GetDInColors(BitCount: Word): Integer; +begin + case BitCount of + 1, 4, 8: Result := 1 shl BitCount; + else + Result := 0; + end; +end; + +function BytesPerScanline(PixelsPerScanline, BitsPerPixel, Alignment: Longint): Longint; +begin + Dec(Alignment); + Result := ((PixelsPerScanline * BitsPerPixel) + Alignment) and not Alignment; + Result := Result div 8; +end; + +procedure TwoBitsFromDIB(var BI: TBitmapInfoHeader; var XorBits, AndBits: HBITMAP; + const IconSize: TPoint); +type + PLongArray = ^TLongArray; + TLongArray = array[0..1] of Longint; +var + Temp: HBITMAP; + NumColors: Integer; + DC: HDC; + Bits: Pointer; + Colors: PLongArray; +begin + with BI do + begin + biHeight := biHeight shr 1; { Size in record is doubled } + biSizeImage := BytesPerScanline(biWidth, biBitCount, 32) * biHeight; + NumColors := GetDInColors(biBitCount); + end; + DC := GetDC(0); + if DC = 0 then OutOfResources; + try + Bits := Pointer(Longint(@BI) + SizeOf(BI) + NumColors * SizeOf(TRGBQuad)); + Temp := GDICheck(CreateDIBitmap(DC, BI, CBM_INIT, Bits, PBitmapInfo(@BI)^, DIB_RGB_COLORS)); + try + XorBits := DupBits(Temp, IconSize, False); + finally + DeleteObject(Temp); + end; + with BI do + begin + Inc(Longint(Bits), biSizeImage); + biBitCount := 1; + biSizeImage := BytesPerScanline(biWidth, biBitCount, 32) * biHeight; + biClrUsed := 2; + biClrImportant := 2; + end; + Colors := Pointer(Longint(@BI) + SizeOf(BI)); + Colors^[0] := 0; + Colors^[1] := $FFFFFF; + Temp := GDICheck(CreateDIBitmap(DC, BI, CBM_INIT, Bits, PBitmapInfo(@BI)^, DIB_RGB_COLORS)); + try + AndBits := DupBits(Temp, IconSize, True); + finally + DeleteObject(Temp); + end; + finally + ReleaseDC(0, DC); + end; +end; + +procedure ReadIcon(Stream: TStream; var Icon: HICON; ImageCount: Integer; + StartOffset: Integer; const RequestedSize: TPoint; var IconSize: TPoint); +type + PIconRecArray = ^TIconRecArray; + TIconRecArray = array[0..300] of TIconRec; +var + List: PIconRecArray; + HeaderLen, Length: Integer; + BitsPerPixel: Word; + Colors, BestColor, C1, N, Index: Integer; + DC: HDC; + BI: PBitmapInfoHeader; + ResData: Pointer; + XorBits, AndBits: HBITMAP; + XorInfo, AndInfo: Windows.TBitmap; + XorMem, AndMem: Pointer; + XorLen, AndLen: Integer; + + function AdjustColor(I: Integer): Integer; + begin + if I = 0 then + Result := MaxInt + else + Result := I; + end; + + function BetterSize(const Old, New: TIconRec): Boolean; + var + NewX, NewY, OldX, OldY: Integer; + begin + NewX := New.Width - IconSize.X; + NewY := New.Height - IconSize.Y; + OldX := Old.Width - IconSize.X; + OldY := Old.Height - IconSize.Y; + Result := (Abs(NewX) <= Abs(OldX)) and ((NewX <= 0) or (NewX <= OldX)) and + (Abs(NewY) <= Abs(OldY)) and ((NewY <= 0) or (NewY <= OldY)); + end; + +begin + HeaderLen := SizeOf(TIconRec) * ImageCount; + List := AllocMem(HeaderLen); + try + Stream.Read(List^, HeaderLen); + if (RequestedSize.X or RequestedSize.Y) = 0 then + begin + IconSize.X := GetSystemMetrics(SM_CXICON); + IconSize.Y := GetSystemMetrics(SM_CYICON); + end + else + IconSize := RequestedSize; + DC := GetDC(0); + if DC = 0 then OutOfResources; + try + BitsPerPixel := GetDeviceCaps(DC, PLANES) * GetDeviceCaps(DC, BITSPIXEL); + if BitsPerPixel > 8 then + Colors := MaxInt + else + Colors := 1 shl BitsPerPixel; + finally + ReleaseDC(0, DC); + end; + + { Find the image that most closely matches (<=) the current screen color + depth and the requested image size. } + Index := 0; + BestColor := AdjustColor(List^[0].Colors); + for N := 1 to ImageCount-1 do + begin + C1 := AdjustColor(List^[N].Colors); + if (C1 <= Colors) and (C1 >= BestColor) and + BetterSize(List^[Index], List^[N]) then + begin + Index := N; + BestColor := C1; + end; + end; + + with List^[Index] do + begin + IconSize.X := Width; + IconSize.Y := Height; + BI := AllocMem(DIBSize); + try + Stream.Seek(DIBOffset - (HeaderLen + StartOffset), 1); + Stream.Read(BI^, DIBSize); + TwoBitsFromDIB(BI^, XorBits, AndBits, IconSize); + GetObject(AndBits, SizeOf(Windows.TBitmap), @AndInfo); + GetObject(XorBits, SizeOf(Windows.TBitmap), @XorInfo); + with AndInfo do + AndLen := bmWidthBytes * bmHeight * bmPlanes; + with XorInfo do + XorLen := bmWidthBytes * bmHeight * bmPlanes; + Length := AndLen + XorLen; + ResData := AllocMem(Length); + try + AndMem := ResData; + with AndInfo do + XorMem := Pointer(Longint(ResData) + AndLen); + GetBitmapBits(AndBits, AndLen, AndMem); + GetBitmapBits(XorBits, XorLen, XorMem); + DeleteObject(XorBits); + DeleteObject(AndBits); + Icon := CreateIcon(HInstance, IconSize.X, IconSize.Y, + XorInfo.bmPlanes, XorInfo.bmBitsPixel, AndMem, XorMem); + if Icon = 0 then GDIError; + finally + FreeMem(ResData, Length); + end; + finally + FreeMem(BI, DIBSize); + end; + end; + finally + FreeMem(List, HeaderLen); + end; +end; + +procedure OutOfResources; +begin + raise Exception.Create('SOutOfResources'); +end; +{$ENDIF} + +function CreateArrowBitmap:TBitmap; +begin + Result:=LoadLazResBitmapImage('rxbtn_downarrow') +{ Result:=Graphics.TBitmap.Create; + Result.LoadFromLazarusResource('rxbtn_downarrow');} +end; + +//Code from DBGrid +function LoadLazResBitmapImage(const ResName: string): TBitmap; +var + C: TCustomBitmap; +begin + C := CreateBitmapFromLazarusResource(ResName); + if C<>nil then + begin + Result := TBitmap.Create; + Result.Assign(C); + C.Free; + end + else + Result:=nil; +end; + +function GetWorkingCanvas(const Canvas: TCanvas): TCanvas; +var + DC: HDC; +begin + if (Canvas=nil) or (not Canvas.HandleAllocated) then + begin + DC := GetDC(0); + Result := TCanvas.Create; + Result.Handle := DC; + end + else + Result := Canvas; +end; + + +procedure FreeWorkingCanvas(canvas: TCanvas); +begin + ReleaseDC(0, Canvas.Handle); + Canvas.Free; +end; + +procedure RaiseIndexOutOfBounds(Control: TControl; Items:TStrings; Index: integer); +begin + raise Exception.CreateFmt(rsIndexOutOfBounds, + [Control.Name, Index, Items.Count - 1]); +end; + +initialization + LazarusResources.Add('rxbtn_downarrow','XPM',[ + '/* XPM */'#13#10'static char * btn_downarrow_xpm[] = {'#13#10'"5 3 2 1",'#13 + +#10'" '#9'c None",'#13#10'".'#9'c #000000",'#13#10'".....",'#13#10'" ... ",' + +#13#10'" . "};'#13#10]); +end. + +