ShInstUtil/0000775000000000000000000000000012642233654011633 5ustar rootrootShInstUtil/ShInstUtil.vcproj0000664000000000000000000001053512167520112015120 0ustar rootroot ShInstUtil/ShInstUtil.rc0000664000000000000000000000533412670010676014232 0ustar rootroot// Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // German (Germany) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) #ifdef _WIN32 LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // German (Germany) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 2,32,0,0 PRODUCTVERSION 2,32,0,0 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x4L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "CompanyName", "Dominik Reichl" VALUE "FileDescription", "ShInstUtil - KeePass Helper Utility" VALUE "FileVersion", "2.32.0.0" VALUE "InternalName", "ShInstUtil" VALUE "LegalCopyright", "Copyright (c) 2007-2016 Dominik Reichl" VALUE "OriginalFilename", "ShInstUtil.exe" VALUE "ProductName", "ShInstUtil - KeePass Helper Utility" VALUE "ProductVersion", "2.32.0.0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED ShInstUtil/ShInstUtil.h0000664000000000000000000000572312641463000014046 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef ___SH_INST_UTIL_H___ #define ___SH_INST_UTIL_H___ #pragma once #ifndef VC_EXTRALEAN #define VC_EXTRALEAN #endif #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #ifndef WINVER #define WINVER 0x0501 #endif #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0501 #endif #ifndef _WIN32_WINDOWS #define _WIN32_WINDOWS 0x0410 #endif #ifndef _WIN32_IE #define _WIN32_IE 0x0600 #endif #ifndef MMNOMIDI #define MMNOMIDI #endif #ifndef MMNOAUX #define MMNOAUX #endif #ifndef MMNOMIXER #define MMNOMIXER #endif #if (_MSC_VER >= 1400) // Manifest linking #if defined(_M_IX86) #pragma comment(linker, "/manifestdependency:\"type='win32' " \ "name='Microsoft.Windows.Common-Controls' " \ "version='6.0.0.0' " \ "processorArchitecture='x86' " \ "publicKeyToken='6595b64144ccf1df' " \ "language='*'\"") #elif defined(_M_AMD64) #pragma comment(linker, "/manifestdependency:\"type='win32' " \ "name='Microsoft.Windows.Common-Controls' " \ "version='6.0.0.0' " \ "processorArchitecture='amd64' " \ "publicKeyToken='6595b64144ccf1df' " \ "language='*'\"") #elif defined(_M_IA64) #pragma comment(linker, "/manifestdependency:\"type='win32' " \ "name='Microsoft.Windows.Common-Controls' " \ "version='6.0.0.0' " \ "processorArchitecture='ia64' " \ "publicKeyToken='6595b64144ccf1df' " \ "language='*'\"") #endif #endif // (_MSC_VER >= 1400) #include #include #include #include #include #include #include typedef std::basic_string std_string; int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow); void UpdateNativeImage(bool bInstall); void RegisterPreLoad(bool bRegister); std_string GetNetInstallRoot(); std_string GetKeePassExePath(); void EnsureTerminatingSeparator(std_string& strPath); std_string FindNGen(); void FindNGenRec(const std_string& strPath, std_string& strNGenPath, ULONGLONG& ullVersion); ULONGLONG SiuGetFileVersion(const std_string& strFilePath); void CheckDotNetInstalled(); #endif // ___SH_INST_UTIL_H___ ShInstUtil/Resource.h0000664000000000000000000000062711247000604013563 0ustar rootroot//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by ShInstUtil.rc // Nchste Standardwerte fr neue Objekte // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif ShInstUtil/ShInstUtil.cpp0000664000000000000000000002203012641463000014367 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "ShInstUtil.h" #pragma warning(push) #pragma warning(disable: 4996) // SCL warning #include #include #pragma warning(pop) static const std_string g_strNGenInstall = _T("ngen_install"); static const std_string g_strNGenUninstall = _T("ngen_uninstall"); static const std_string g_strNetCheck = _T("net_check"); static const std_string g_strPreLoadRegister = _T("preload_register"); static const std_string g_strPreLoadUnregister = _T("preload_unregister"); static LPCTSTR g_lpPathTrimChars = _T("\"' \t\r\n"); int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hInstance); UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); UNREFERENCED_PARAMETER(nCmdShow); INITCOMMONCONTROLSEX icc; ZeroMemory(&icc, sizeof(INITCOMMONCONTROLSEX)); icc.dwSize = sizeof(INITCOMMONCONTROLSEX); icc.dwICC = ICC_STANDARD_CLASSES; InitCommonControlsEx(&icc); std_string strCmdLine = GetCommandLine(); boost::trim_if(strCmdLine, boost::is_any_of(g_lpPathTrimChars)); std::transform(strCmdLine.begin(), strCmdLine.end(), strCmdLine.begin(), tolower); if((strCmdLine.size() >= g_strNGenInstall.size()) && (strCmdLine.substr( strCmdLine.size() - g_strNGenInstall.size()) == g_strNGenInstall)) { UpdateNativeImage(false); Sleep(200); UpdateNativeImage(true); } if((strCmdLine.size() >= g_strNGenUninstall.size()) && (strCmdLine.substr( strCmdLine.size() - g_strNGenUninstall.size()) == g_strNGenUninstall)) { UpdateNativeImage(false); } if((strCmdLine.size() >= g_strPreLoadRegister.size()) && (strCmdLine.substr( strCmdLine.size() - g_strPreLoadRegister.size()) == g_strPreLoadRegister)) { RegisterPreLoad(true); } if((strCmdLine.size() >= g_strPreLoadUnregister.size()) && (strCmdLine.substr( strCmdLine.size() - g_strPreLoadUnregister.size()) == g_strPreLoadUnregister)) { RegisterPreLoad(false); } if((strCmdLine.size() >= g_strNetCheck.size()) && (strCmdLine.substr( strCmdLine.size() - g_strNetCheck.size()) == g_strNetCheck)) { CheckDotNetInstalled(); } return 0; } void UpdateNativeImage(bool bInstall) { const std_string strNGen = FindNGen(); if(strNGen.size() == 0) return; const std_string strKeePassExe = GetKeePassExePath(); if(strKeePassExe.size() == 0) return; std_string strParam = (bInstall ? _T("") : _T("un")); strParam += _T("install \""); strParam += strKeePassExe + _T("\""); SHELLEXECUTEINFO sei; ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO)); sei.cbSize = sizeof(SHELLEXECUTEINFO); sei.fMask = SEE_MASK_NOCLOSEPROCESS; sei.lpVerb = _T("open"); sei.lpFile = strNGen.c_str(); sei.lpParameters = strParam.c_str(); sei.nShow = SW_HIDE; ShellExecuteEx(&sei); if(sei.hProcess != NULL) { WaitForSingleObject(sei.hProcess, 16000); CloseHandle(sei.hProcess); } } void RegisterPreLoad(bool bRegister) { const std_string strPath = GetKeePassExePath(); if(strPath.size() == 0) return; HKEY hKey = NULL; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_WRITE, &hKey) != ERROR_SUCCESS) return; if(hKey == NULL) return; const std_string strItemName = _T("KeePass 2 PreLoad"); std_string strItemValue = _T("\""); strItemValue += strPath; strItemValue += _T("\" --preload"); if(bRegister) RegSetValueEx(hKey, strItemName.c_str(), 0, REG_SZ, (const BYTE*)strItemValue.c_str(), static_cast((strItemValue.size() + 1) * sizeof(TCHAR))); else RegDeleteValue(hKey, strItemName.c_str()); RegCloseKey(hKey); } std_string GetNetInstallRoot() { std_string str; HKEY hNet = NULL; LONG lRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\.NETFramework"), 0, KEY_READ, &hNet); if((lRes != ERROR_SUCCESS) || (hNet == NULL)) return str; const DWORD cbData = 2050; BYTE pbData[cbData]; ZeroMemory(pbData, cbData * sizeof(BYTE)); DWORD dwData = cbData - 2; lRes = RegQueryValueEx(hNet, _T("InstallRoot"), NULL, NULL, pbData, &dwData); if(lRes == ERROR_SUCCESS) str = (LPCTSTR)(LPTSTR)pbData; RegCloseKey(hNet); return str; } std_string GetKeePassExePath() { const DWORD cbData = 2050; TCHAR tszName[cbData]; ZeroMemory(tszName, cbData * sizeof(TCHAR)); GetModuleFileName(NULL, tszName, cbData - 2); for(int i = static_cast(_tcslen(tszName)) - 1; i >= 0; --i) { if(tszName[i] == _T('\\')) break; else tszName[i] = 0; } std_string strPath = tszName; boost::trim_if(strPath, boost::is_any_of(g_lpPathTrimChars)); if(strPath.size() == 0) return strPath; return strPath + _T("KeePass.exe"); } void EnsureTerminatingSeparator(std_string& strPath) { if(strPath.size() == 0) return; if(strPath.c_str()[strPath.size() - 1] == _T('\\')) return; strPath += _T("\\"); } std_string FindNGen() { std_string strNGen; std_string strRoot = GetNetInstallRoot(); if(strRoot.size() == 0) return strNGen; EnsureTerminatingSeparator(strRoot); ULONGLONG ullVersion = 0; FindNGenRec(strRoot, strNGen, ullVersion); return strNGen; } #pragma warning(push) #pragma warning(disable: 4127) // Conditional expression is constant void FindNGenRec(const std_string& strPath, std_string& strNGenPath, ULONGLONG& ullVersion) { const std_string strSearch = strPath + _T("*.*"); const std_string strNGen = _T("ngen.exe"); WIN32_FIND_DATA wfd; ZeroMemory(&wfd, sizeof(WIN32_FIND_DATA)); HANDLE hFind = FindFirstFile(strSearch.c_str(), &wfd); if(hFind == INVALID_HANDLE_VALUE) return; while(true) { if((wfd.cFileName[0] == 0) || (_tcsicmp(wfd.cFileName, _T(".")) == 0) || (_tcsicmp(wfd.cFileName, _T("..")) == 0)) { } else if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) FindNGenRec((strPath + wfd.cFileName) + _T("\\"), strNGenPath, ullVersion); else if(_tcsicmp(wfd.cFileName, strNGen.c_str()) == 0) { const std_string strFullPath = strPath + strNGen; const ULONGLONG ullThisVer = SiuGetFileVersion(strFullPath); if(ullThisVer >= ullVersion) { strNGenPath = strFullPath; ullVersion = ullThisVer; } } if(FindNextFile(hFind, &wfd) == FALSE) break; } FindClose(hFind); } #pragma warning(pop) ULONGLONG SiuGetFileVersion(const std_string& strFilePath) { DWORD dwDummy = 0; const DWORD dwVerSize = GetFileVersionInfoSize( strFilePath.c_str(), &dwDummy); if(dwVerSize == 0) return 0; boost::scoped_array vVerInfo(new BYTE[dwVerSize]); if(vVerInfo.get() == NULL) return 0; // Out of memory if(GetFileVersionInfo(strFilePath.c_str(), 0, dwVerSize, vVerInfo.get()) == FALSE) return 0; VS_FIXEDFILEINFO* pFileInfo = NULL; UINT uFixedInfoLen = 0; if(VerQueryValue(vVerInfo.get(), _T("\\"), (LPVOID*)&pFileInfo, &uFixedInfoLen) == FALSE) return 0; if(pFileInfo == NULL) return 0; return ((static_cast(pFileInfo->dwFileVersionMS) << 32) | static_cast(pFileInfo->dwFileVersionLS)); } void CheckDotNetInstalled() { OSVERSIONINFO osv; ZeroMemory(&osv, sizeof(OSVERSIONINFO)); osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osv); if(osv.dwMajorVersion >= 6) return; // .NET ships with Vista and higher const std_string strNGen = FindNGen(); if(strNGen.size() == 0) { std_string strMsg = _T("KeePass 2.x requires the Microsoft .NET Framework >= 2.0, "); strMsg += _T("however this framework currently doesn't seem to be installed "); strMsg += _T("on your computer. Without this framework, KeePass will not run.\r\n\r\n"); strMsg += _T("The Microsoft .NET Framework is available as free download from the "); strMsg += _T("Microsoft website.\r\n\r\n"); strMsg += _T("Do you want to visit the Microsoft website now?"); const int nRes = MessageBox(NULL, strMsg.c_str(), _T("KeePass Setup"), MB_ICONQUESTION | MB_YESNO); if(nRes == IDYES) { SHELLEXECUTEINFO sei; ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO)); sei.cbSize = sizeof(SHELLEXECUTEINFO); sei.lpVerb = _T("open"); sei.lpFile = _T("http://msdn.microsoft.com/en-us/netframework/aa569263.aspx"); sei.nShow = SW_SHOW; ShellExecuteEx(&sei); } } } ShInstUtil/ShInstUtil.sln0000664000000000000000000000156511632635050014420 0ustar rootroot Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShInstUtil", "ShInstUtil.vcproj", "{C9FBA6FD-04AC-4B2F-8277-B852B8013DAE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C9FBA6FD-04AC-4B2F-8277-B852B8013DAE}.Debug|Win32.ActiveCfg = Debug|Win32 {C9FBA6FD-04AC-4B2F-8277-B852B8013DAE}.Debug|Win32.Build.0 = Debug|Win32 {C9FBA6FD-04AC-4B2F-8277-B852B8013DAE}.Release|Win32.ActiveCfg = Release|Win32 {C9FBA6FD-04AC-4B2F-8277-B852B8013DAE}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ShInstUtil/Resources/0000775000000000000000000000000012606740442013603 5ustar rootrootShInstUtil/Resources/TrustInfoManifest.xml0000664000000000000000000000064411247225200017743 0ustar rootroot Ext/0000775000000000000000000000000012606740432010322 5ustar rootrootExt/Icons_04_CB/0000775000000000000000000000000012606740430012242 5ustar rootrootExt/Icons_04_CB/lockgreen.ico0000664000000000000000000006117610062522356014721 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pwwpwvpxhnvhv~7vxpw~wjfh犆zv~wfxxvvz~fpww~znzvhxxx  vv福~~vvnh pxpvggx`~vj~xvfxgvvzzpwvwggp~zvgfp0~wgpxx`hzwp~7gowwghh~w~w~vx與xx~wwwxxhfx xxx~~zxp wwwp(~~px燨 xp~w pw~p`xxp`xxppHx hphpxvgxvp`p%p??( @pwwpgwhwhggfhp~wfxx~zw~f`px~#%&zvh ~vvx`v~popvvwhxrvp莂gwgg興w~z~w~z~` w~vp`~x~xpp~zpg$ppxxzxox爆xp` hxxwwpp pgpvvppw??( pwwfxwxggnpvh`w vwp~xw(~o`wwxx 8pwwpp(0`        "#$&+4.5!! #$ %%#%%%./*/2(3:#49'01.6<*333461666897;=6::9=>:>I$>B4?@=O_(GN5HP4OY9PX<^l>BBBOVAV^CPSKSTOTWOUWPVWTXXW[\Z\\[\\\^jAmAitPknbmmmpvbttt|*~,x@}\~wx/2558<<>ABFFJMOP\QUVY]ocbwx~syecaseijjmr}rvwz}~ƒƂƄȇɈˋˌ̎̐ΔʡųИҜʮԠ֥اרկةڭĹ۰ܱ׾ܲݵ޸߹B2 2B$%D9JJ7D%{ʶ{$26űʜ52%ѼpYUURPR]ʜ% ̤t_]]WWUURPPLLW{Ѯtnk__]]WWUURPPLLFPȜ$Ŗrppnk__]]WWUURPLLLLFW̿ ձtwtppnk__]]WWUURRPLLKFFʸ 2ծwtuppnk__]]WWUURRPLLKFEt̝2ռwtu  RRLLLLFE{+ўyyuURRPLLKFF%Dԩyw>,UURRPLLKFW̜D9ŢyiGWUURRLLLLF5ةy ZWWUURRRLLKP̜$%ȩ.)]]YWUURRPLLK#$ؼH?_]]YUUURRPLLWfԱ[__]]YWUURRLLL̫Bʼnk__]]WWUURRRLB2=ż@1pnn__]]WWUURRO^72}sjppn_k_^]WWUURRRJttpppn__^]WWUURR̈ 40ywtppn_k_^]YVUUR̎gcwttpppn__^]YWUU̎ wwuppn_k_]]WWÜ }hlwttpppn__]]YYJ2=*4wwuppn_k_^]p92B-wuupppn__]BCbwttppn_k_Ѷ!wwtpppnu{$%wwtrnn$%ywwuptѝ =wtt5D3wԨD2ň+AaԀ2{Բ2 af % ز؄ 2ز+ 2=ڲ92%ں%D =}}= D%%B2  2D??( @  "*)/,1/0,04%34/332444=>85@6A9F9C :D#;E%DH9OW;Wa=BBBFFEWYPX[S[_SY[T]aT_`^bmHm}G`eSemS``_juPjsTbbbdddsvl||{}+~-vB{^}_~f/48=BHMRTWYY_d`kehklrrux~ƁƄDŽȅʋˌ͒ИӞԟ֥Ԩ֭٫٫٬ͳźǾ۱ܱܲ޶߸߹߿444)55)4_$^\ _$ ukSFDNg~j$ Y{SHDCBA@?>CkV veNNHHDCBA@?>=Awj $~UTRNNKHDCBA@?>>7dj$_[geUTS@>>=7dV_$kigeUS AA>>==w4wkkigeU#BA@?>=Bj4%rrkkigeJ9CBA@?>=k _wrrkkigdHDCBAA?>C\4~~wrrkkigHHDDBA@?>~4~~wrrkki:-NKHDDAA@?g+~~wrrkkfLNNKHFDBAAN'6~~wrrkk TSNNKHDCBAD56~~wrrk2,UTSNNKHDDBF54~~wrr<:eUTSNNKHDCS)~p"edTSNNKHDk4~.1dUTSNNKH4_~ geUTSNNT^%tigeUTSNw$4kigedTgu4%(/kkiged__pnnkig~Y_$W)(Xwwrnmku$ ~wr{v ]~[ $$ $_%a`%_4466+444??(     ! $8>):>.010784;=6:;:=@6?A;GT(AB>S]=`v-dx4h{<CDBEEE[eD[aNhhhoEzL/08CMRYkfprr~Ɓˋˌ͖ИӞգ֥٫٫ܱ߽ -1C;:@0-+E)#! "=*-,A)'5*-I:6) =3A;96! "0 KA?<:$#! @ KEA?;8&%#! : KHEA?<)'%#!; NJHEA)(%#C 4KJHB6)(51PKJH:65E--NKI2 /;:A+--PKJHEAAI,-4NKKK3- (0` %\\qq!"TVOx~wSVN!"\\\{461}35/\\\{-QRMĸةاNQI͸-S<=9źϕkOFC?<>Wǂ߷:<5񁁁Sqqqn ڬrYUQMJFB?;852J͐ qqqnqqqn$$"ݴuea]YUQMJFC?<852/=͐ų"#qqqnS01/ˌrmiea]YUQMJFB?<852/~,L޸./*S-$%#Ɓzvrniea]YUQNJFB?<852/~,-̎"#񸸸- ݴɇǂ~zvrmiea]YUQNJFC?<852/~,|*sų \\\{͐ˋɇǃ~zvr           ?<852/~,|*̎\\\{>?<њΔ͏ˋɇǃ~zv3:#+4C?<852/~,.޸:<5􉉉ۯҜИϔ͏ˋɇǃ~z^jAO_(FC?<852/~,LTUR֤ԠҜИΔ͐ˋɇǃ~ex@JFC?<852/~,͐NQIqݳة֥ԠҜИϔ͏ˋɇǃ} PNJFC?<952/=q786ܱڭة֥ԡҜИΔ̐ˋɇǃHP4>I$URNJFC?<952/͑35/ݵܱڭة֥ԠҜјϔ͐ˋɇ}\mAYURNJFC?<952K}\߹޵ܱڭة֥ԡҝИϔ͐ˋ  \^YVRNJGC?<952߸\$$#߹޵ܱڭة֥ԠҜИϔ͐ˋ49'.5fa]YVRNJGC?<95ǃ!"Z[Y߹޵ܱڭة֥ԡҜИϔ͐itP^l>jfa]ZURNJFC?<9WSVN߹޵ܱڭة֥ԡҝјϔ}cnjfb^ZVRNJGC@B4PX<Ąǃ{wrnjfb^ZVRlTVP$$$կ/2(GN5ȇǃ{wrnjfb^ZVϖ!"\pvbcɇǃ{wsnjfb^Z\6<*ˌɈDŽ{wrnjfbs998ʮ  ͐ˌɈDŽ{wsojfڭ461qϕ͐ˌɈǃ{wsnvĸqWWV׾љϕ͐ˌɈDŽ{wsݴQRM02,OVAӝљϕ͐ˌɈDŽ{ˍźAA@ աӝљϕ͐ˌɈDŽǂ<>9􉉉\\\{knboتצաӝљϕ͐ˌɈ\\\{ $&ܲڮ٪֦բӝљϕ͑ݵ -&&&wxݻ޶ܲڮتצաӝқ$$"񸸸-S333޶ܲڮتצ۰01/Sqqqn&&&޶ܲݴ$%#qqqnqqqn qqqnS@A@>?<񁁁S-WWVTUR͸-\\\{998786\\\{$$$[[[Z[Y$$#qq\\????( @ YYCCC%/1-Y[TsvmsvlX[S/0,CCC% WWWBC?@B<WWW %?@<źњtWRhʋ=>8%1 ݴvYSMHB=84Mј  껻1% Ǿȅke_YSMHB=84/H۱ %  ߹xrke_YSNHB=84/~,DŽ  WWWˋȅ~xrCM+;E%:D#9C 7B6A5@9F=84/}+DŽWWWCCC%AA?љΑˋȅ~x)/"*C>84/~-۱=>8CCC%ܱӞИ͒ˋȅ~Wa=IW&HC>84/HEFD٫֥ӞИΒˋȅdvBNHC>94/љ@B<Yܱ٫֥ӞИΒˋƄ YTNHC>94MY޷ܱ٫֥ӟИΒˋDL394332޷ܱ٫֥ӟИΒ{^m}Gf`ZTNHC>9ʋ/0,_`^߷ܱ٫֥ӟјklf`ZTNIC>iX[S||{޷ܱ٫֥ӟј04%,1xrlf`ZTNICRsvm||{߷ܲ٫֥ӟjsTbmHxrlf`ZTNIWsvm``_߷ܲ٫֥~f}_ȅyrlf`ZTNtY[T333߸֭DH9OW;Džyrlf`ZTњ/1-`eSjuPȅyrlf`ZY߿ ˌȆyslfwYGGGͳΒˌȆyslݵBC?љΓˌȆyȆźCCC%CCCWYPemSԟљΓˌȆƁ?@<CCC%WWW34/AD7ԨצԟљΓˌWWW  [_S]aT޷ܲ٬֦ԟњǾ  % ߸ܲ٬ܲ %1 껻1%CCCAA?% WWWGGGEFDWWW CCC%333``_||{||{_`^332CCC%YY??(  @0 340340 0 WWW@A=գӞ߽>@:WWW :::YMC8R٫9:9 WWWroEh{@:0֥ИˋS]=GT(NC9R ܱ֥ИkzLZNC9߽ 676ܱ֥͖  pfZNCӞ340776ܱ֥[eD[eDrfZNգ340[aN[eDrfZ ˌsŀ0DDD!љˌƀ@A=0WWW;=6=@6צљWWW :::::: WWWDDDBCAWWW 0776776 0Ext/Icons_04_CB/ReadMe.txt0000664000000000000000000000011712321256562014141 0ustar rootrootChristopher Bolin has made these nice icons for KeePass. Many thanks to him! Ext/Icons_04_CB/plocko.ico0000664000000000000000000006117610062571030014230 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pwwpwspx8p{{yp{{yy{{x@A0p00x0 s{y;{{{9{{0@{@0;p31q51131){ps737ysq73[pxyxyssssss73s;111S1@C{{{!04x{x88{w{7p?p@0#1 {{p8{q{{00$ 0;{x p0{qx{00wq$0{8pA x@x01B7708p8s77p0@4p??( @pwwp8p3{pp`@9p?s738337p73s{ss9y{;qpsssq3s79p0sssssss7p8{p{?08{0qp 83A{x0!` c00p87s7sppg??( p7wwxpw11 q781!{H111q?qw{81!w{w8p3p(0`  "" "" ' #%*'6*03:!!!#&(%()-2655627<6:<1@ 6Y8Y=VD@YCYI^&IM.7 ,%63#,!-%)03:-71=5:>BGKOWYOBKZbOAFW_BFJPR\fiqv|iYN_RVZ^dkfhs{finbfjuv~nsxw{+(  (+,)J½J),XX())(ӘyjiiiRiuZyjjkkiiiiiRRRrZ{mttllkkkiiiiiiRRjޏvmvtttltkkkkiiiiRRRRu{{{vvmttltktkkkkiiiiiRRR(}{{{{vvvtttllllkkkiiiiiRiR(}}{{{{{vvvttttltkkkkiiiiiRiZ-Rii,-iiRx,*֒-iiii)bb^^]]]PPPvvvoMMLLLKKKKQkkiitדn{{B-jkkkkYn{B1tltkkyX좡qaAtktkjk+֣===<<<<<2;|f00///....Ottttlt+(*zG1vtttlt~)( WzS3vvvttttU 쯮@@@??=====g<22222///a{vvvvtt믯  B{{{wvvv믯>}}{{wwv>}{{{{ Wddddddbbbbq{}U (*㴴6 })(+跴 !$+! CC㸷:\Y#⸸ 95*H& ),⸸ &#,⸸8 \ﹹ⸱ \'6(幹  "(幹 "幹'幹TTT[幹⸸(湹(*)(,*W*,+( (+??( @ ### +# $&, '> *>*37;+06/46056444=D;Y7>E=t@YFY"DK;AE>EI$N] BtFtItMt+Yf7lw@OX[ZGCNAFJYVZghmqy~jMZTVZ^afmfu|oyw{,,,)--(,&qgSSZo&IZPPPOONNNSsIgWRRQPPPOONNNS&[XWWURRQPPPONNNNo&]][[XWWURRQPPPONNNqI_]][[XWWURRQPPPONNNN,ni_PNV,'kjiPPOs}vkk994933=XX500000>QPQY,yxxk][ URQQ,zyxx:::999@^]533321?UURRr*{zzy^` XWUUh).z{;;;:;::99999343A[XXW]-/"][[XZ-*<<<;;;;:::::999B^^][l*zzyyxxkk 9__^^],8 z{zyxxaEji__^,L Lz{zy7 fkjiim'~ #zwyvkkj',$ dC Dyyxv|,&u ~e zzzxxG JF b{{z&%  K&H c&'&'',+//+,,,??( ### % %&1+44801216=28=5;=7<=(K:B8D=F 4Y 6Y:Y>Y7>F8?FBYEY"DL:AF>DF!IY'NY DxHxMxRx1_h@EFhhh0j%j*qr&y${<KJyM,7 !.$')6-38=Q@JGLHgzQRT^WX[^^jmquafdacejnswz~% %jlxLLvkj%0wF8654=:8654K0j{D4r%n[H+)6@l% QM2*=8y ]S( ?>q a]BAt ba1 ]SMG 3DC{ %p}bVE]],IIPm%ed#a\&QMjiXZ]~fj%iY-.W|i%j$ppj% %(0` %\\qq #HQZkzkyGPZ #\\\{-27sq-27\\\{-EMUDLU͸-S4:?f6 ._38?񁁁Sqqqn z|5 &qv qqqnqqqn"$0 r!$qqqnS*/3F%#!  ,(-3S-"%/*(&$#! q!$񸸸- s1/-+)'&$"! W \\\{}6420.,*)'%$"  rv\\\{6;?>97"""#""#""#""#""#""#"#"" R 39?􉉉\><:"""#""#""#""#""#""#"#"" T0IQUDB@>"""#""#""#""#""#""#"#"" UvDLUqVGECA10.-,*)'&$,+*%xwvutrqpo!q057LJHGE """#""#""#+.-t"#""#"#""Yw-27|fPNLJH " " " #""#""#.20"v"#""#"#""Z0s\USQONLCYBYAY@Y@Y?Y>Y>Y>Y=Y354(:Y9Y8Y8Y7Y 6Y 6Y 6Y 5Yj\"#XVUSQO+l*k)j(j'h&g%f$e#d"c797.^]\[ZYYWV{! i #OWZv\ZXVTS " " " # " " # ""#7<:)}"#""#"#""`%#! =IRZwe_][ZXV # # # # # # # # # #:?>,#########b(&$#!$m{dba_][Y2s1r0q/p.o-n+m*l)k)iACA7#d"c!c a`__^\$+)(&$#!gedb`_]GYGYGYFYEYEYDYCYBYBYAYAY@Y?Y?Y>Y=Y=Y<;:875421/586531/3o}PYZrpnmkihY$ # #2o]\ZXVTRPOMKI'6 # #=V@><:8643PJSZ "#usqpnmkf)0# "!GUa_][YXVTRPNC # " #!Y{CA?=<:86{!#\wvtsqonl$JU#""(_b`_][YWUTR4~ # " #/{FECA?=;9\xwutsqoFWWW %6B=81.+)&#! 4;BCCC%Z@=###############=t,##### Bt,13ZXUR*l)j'i&g$e"d'u64g\[ZXWm#!q).3S\`_]ZW # # # # # #>Y<9 )>#####Ft(&#!NLV_ly}udb_\2s0r/p-n,m*k)j'h%g$e"d!ba_^"w-*(%7cq}mz}yifda # # # # # # # # # # #####Mt2/-*BCCC%WWW}G ##=DJ@*1# &Oc`^[WWW  ~EFWWW CCC%.33U_`o|}o|}U_`.23CCC%YY??(  @0 +17*07 0 WWW6=D{y4;DWWW 9::}@ .w99: WWW-'" gxWWW08?D=########5Y=Y;Y${r 5Y 4Y Dx6 ؾWQ###,&y###  /57a[FYEYEY*qEY=Y;YMx)$,17057je########3.,27 snMMx^YTJMx7=8 wj %Qc^<&1LH^0=pnnnnEEEEEBBpI~~xkppppnnnEEEEBB4~"!qqqpppnnnnEEEE|4(,<9ustqpppnnnnEEEq+(GdcuuttqqpppnnnEEnFX||uuuuqqpppnnnnEV ]32||||uuuqqppppnnE[]_^~||||uuuuqqpppnn[ X y~~~||||uustqppppV G`b~~~||u|uuuqqqppF(,w&1z~~~|~||uuuuqq|+(4.~~|||||uuuq4:T~~||||uuuM %~~~||||~K ~~||ui~~~|~,~~+6+6(Yh(Q5RN(N U([KK[ QN(((,,(MM6-GX]]XG-64((4??( @ ''?>&?>1554445::+BA/BA?ED/a^1a^5a^9b_3jhEE%)) WWW, ^^^{#&&KQQ}JQQ#&&^^^{ ::::$(']dd[dd#('::::  Z&&&PVV~MVU&&&ނZ vvvp!!!+..~xurpnnptz*..!!!vvvp vvvp >BB~|zwusqomkjmtBB~{ywusqomkihnz>8;;􅑐}xuuw|7;;=>>ר= 3>>>?CB{xuromov=CB=>>װ3sssHII9;;}tqmjgeghkoz7;;HIHðsss___ STT244񈑐M;ol6kg5kg4kg2kg3ok?gnkmw143STT___  ...4!""Y]]9b`  .b_groln{T]\!""...4 ())󦯮M| >{owtqnr&))%WZZl%$%$Xy|xurp{RZY %g'=<!=;o}yvsvg-//Gki  WV  8WUr|{z||`Xr|{ijj^}  [bjj NNNSji  "!TzwINN .//g~|"!f+//g1:: 6LKg%ZZZ(.-'54TZZ %)))󮯯066 6FF')) ...4"""]]]grqjX]]!""...4 ___ TTT444񐑑SZZ ##!&&Xih244STT___ sssIII;;;itsiwv:;;HIIðsss3>>>BCCACB>>>װ3 =>>>;;;:;;>>>ר=  3III444]]]Z]]344HIIð3 TTT""")))ZZZYZZ())"""TTTsss___ ...4///NNNjjj{||{||jjjNNN.//...4___ sss %g  g% ??(  @WWWEFF%&&C##1:9HWVGWV/:9##$&&CEFFWWWaedTaa懢Pa`_edWWWtyyzxqyxWWWEFFbedaOJRmw`edEFF%&&CZaa+)+)+)+)ityQa`$&&C!##?zv ?zvsyz##7::ٻs(>=(>=_}0:9SWW?zv(>=~IWVTWW(>=?zvJWV8::c{z "!Z2:9###098 -?> ##&&&C`aaELLCUTWaa%&&CFFFdee[ccZffbedEFFWWWyyyvyyWWWdeeaaa桢\aacedWWWFFF&&&C###9::VWWUWW8::"##%&&CEFFWWWExt/Icons_04_CB/plockr.ico0000664000000000000000000006117610062571274014245 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pwwpwspxyypwyyypwy0{0p!0yx!C @xxwwsyw9yy`! yypx5Ru5{Sp5su77sSSSyp ywwwswwwsw57yQq5q1w@ R!B!yxxxxwxxxpxxpxy4!؈wxpxyp0!Hx0xx@p xp1@(x@xxxp@BCx% xxp'wp8 pxs7xsp0Pp??( @pwwpsxpwxyppxyy0{pWwsxqqsxyp7sw75ywxpwwwqu770{pwwwwswSsyxX4pyx0xqxpGypW1xxp!p#pp7wq pqW??( Ap7spwwxpwq1ySqSy?57OSCVYxXx!4wxsxAp(0`        !!!!&%%3 %!!!"#&#$&%%%#$+)*/ #0')2,-3$(=-/8.07/1933366634999:%S(T25@79@:;@#+T)/R,3T06U4:U9=V7=Y=AU>D`"4*;4A9ESAMNWEPKUOYS\@N\bZbUa^hbinrqtswsxtxy|w|y}DTK[AUEXH[WeZhVg[kcrhvlyq}8R-L0N4R9V=YJ]YoctcvgynbvA]E`JdNhSlWp[s`wdzh~}vzosx{lvqsuy~D44D"$F=aa=F#he 4974(ˋ{zz{'ϕ{{zzxxe֕{{zzxxxzɌzzzxxxؙ{zzxxxwx4֛{zzzxxxw4ɛ{zzxxwwg(    Ixxx'F  IxxxF>   Izxzx:uttssqqqpp}|llTTRRRRvzzzx"# j J{{zxz " j J{{zze00.0.----+q*****&*%%Q{{zzD]]]ZZZYXXXNNMMKKHHGT{zD4@ n   O{=4 ɛo    Oa```]]]]]ZZɁWWWNNMMKK|::::./000-0----*-*-****i P   Pᵴuuttsrqqqqd4@ \ +<4D :˓ 3D6 _ ^b / ɛh$$ =Է ɛ#" ] Yɛ>c A ʛ=FB 2F4a #  )(C \4    :4  ="5 Cff4(4@>4$$F@@F$"D54F??( @   !!!$):!,!:!#,"%4*,3444+/@46A7:E<>F;>IK:I.C7KAMDPKUNXPXT]DQ^einahgmmriqpuJXDVO_Ta^lis.M0O5R8U=YE`IdNhPjWp`waxz}tj~pvz|)))%++%)jdcj!pxYQOSvn!_YQPONMMKJNxVq]TSSQPONMMKKJNn!r\[YTSSQQONNMLKJJ\n!j`v]\[YTSSQQPNNMLKJJ]Vjxx^\[YTSSQQPNNMLKIJJ~)t{x KKNn)!~~{  MKKxf~~:87765CYT2/..--3NMKPc)~ [Y NNML)<<::77F\[;0///.4PNNMv' ^^ QPONY%,?><<:::87765100DSQQOR+,  TSQQS+)@@>??<<<::87755ETTSR\&$ #~~{xu 7\YYTS{)=~~~{X G]\YYT)kh g~~9Zv]]Y]e!%|xxv]])* nA H{xxvxq)!m ~~{xxjaUcB l~~~{`j!+ W~~t!_ "ira`!!!j!kk!j)',,))))??(   !!"$.&(2//1/0111101702:99;E$S'S.1B25@36D68D:J (T$,T*1T.5U28U5:U7V,o&2p,7p3=q?@D=AW@AEDDEBFWFHWXZfRY~hhhLWU`zHXRaSc^llu0O2P6T8U=ZduA]HbJdMgRkSlUn`wby{knuz|- -PUqbbkSP-MrIA=:8=eE-PNnIGCA=<:6JEP%{`8e-Wne31!9AS- qk4!=:n xq& /!#A=b zxCBe |{R!nke\!;GDt -Y~u[nk5]K^V-(~+*rg,b`xPPv fhrNP-QwLEpx|O-P(ZX(P-  -(0` %\\qq$JMZosmqHKZ$\\\{.08x|sx,.7\\\{-HJUCFU͸-S68?czIdA]>Z;W8U:WQkx14?񁁁Sqqqn jRkOiKfHcE`B]?[Z:W7U5R2P/M,K.M%񸸸- ~yvrnkg}cz`w\tYqUnRkNhKeHcD`A]>Z;X8U5S2P0N-L+Jl \\\{~zwsokh~d{`x]uYrVoSlOiLfHcE`B^?[J.Z;X~$WX[!!!!! !  !s~zWe !  !  !   3COiLfHcE`B]?[YqILZ"""!!!!!!!xZh!!!!! ! ! ! !5ESlPiLfIdFaC^E`nsdkbi`h^f\dZbX`V^T\Q[nGQDPCN@L>KBWD`@@@qs"""02<}#""&89?􉉉\\\{9:A"!!-.7^bz$"!!\b\\\{ )*/!!"!"#*$!!"!BF[ -&&&)*/""""""""CGX!"&񸸸-S333CDL"!!"! &`ez-.2Sqqqn&&&z}y|"#&qqqnqqqn qqqnS@@@;<@񁁁S-VVWQRV͸-\\\{889668\\\{$$$ZZ[XY[##$qq\\????( @ YYCCC%*+3MP_dhzdgzLO^)*2CCC% WWW:Z9V113[cW`T]QZNXKUTawqDQ;G7E4B1?/=7KMgHcC_?[)+3\]`"!!!!!.4U~x!:!! ! !  %1lSlNhIdD`iMP_xy}ekah^f[cX`U]R[NXKUHREPBM>K;H8EDVZrTmOiJeWpei{yy}""""!!!!!!!!!!!.8n`w[sVnPj\tfi{^^`mrjpgmdkah^e[cX`T]Q[NXKUHRDPAMO_g}ax\tWowOR_223GJ["BF[)!FQsmh~by]u*,3in"!#,t!!^lztoidzY""PX!#~{up}YFFG$%+"NRd"%4!39U|w<>Fdgu"#iq"!isCCC%BBC!"&";>I!,"+/@:;BCCC%WWW""68Bpu$&/"%WWW  ilx"""""$}  % 34:"$?B% WWWFFGCDGWWW CCC%334__`z{}zz}]^`223CCC%YY??(  @0 ,.6,-6 0 WWW9;C57CWWW 99:uSlId?[6TMgz99: WWWvk`wUnKeA]8U0Oz{WWW0>?C!!! !   E2P58C028U.4U*1TScHX'S$S,oZ 557=AW9>V5:UU`LW)0T%-T,7pTmJd,.6567 axVo-/6 ,7p,7pduncz $lu.|0CCDXZfFHW.1BRY~;J25@36DWWW :::9:: WWWCDD?@DWWW 0667667 0Ext/Icons_04_CB/plocky.ico0000664000000000000000000006117610062570746014257 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pwwpwpxxp?p00B'0p0A p0BxP00 p P!A p7sWqsR76qgpwwsws7wsw8p0 B70!!wwwwwwwww{777777'7373w BRP`pp! 74p$(px00@0x!'4psBh0a0Ap`'808p%%'wxp8pxs7xsp0p%p??( @pww0p7xp pp0000700p_wwxww{00 8pwwwsw80!h#0?pwxwwwww{p0!00pwwwwwww{00xap0pp0x0p8sphp0Cp0p87pwsppw??( pwwwp0w78s6x77sc4rqs?x/wx03pwwxpp(0`  "!"!"!"!""%%('!!!!&&&''!((%))))))0/'11$64,00-541545552885;:7>>9;;.A@;CC>CC9WU1[X5[X9[X=[XBBBINNGVUKVVA[YE[YF_]H[YNYYN\[N^^QYYVYYR^]T^]YYY[^^\^^MecSbaS|ymmmcqqawvm~}tttNQUY]GJNXdon|y}afilaquV]]xrimwzbejnmz~|vnkmquy};&  &;?4MM4 ?vv&4.& ᾲnllljj wônnmlllljjinvônmmmlllliiil罴mmlllliiiin߸mmmmlllliiii&ýmmllllilii&wώmmnllliiiiv&Elii ?Ellin?4 Ellil.eeebbbaaaa_a_hlllin \Ennlliu  \Ennnllv*********$f$$"$"$"""Xnnnll;RRRRPPPDDDCCCAAAAAAcnnnl;&7   ]Vnnn4& o  ^HnnM UUUTRRRRRPDDDDCCCCAgn*.**************$$$$$"$[ W S o癙eeM &7 J!7&; ( : ;( Y ZzN * v 9߹  K I7N < 4? < 9?&L &| > Kx&  3& 3'  >wuv}|x&&&74&zz?7po7?;&  &;??( @ "!"!"!"!"!&&+*$'')10)65/66%?=)?>0664448<<5CB?HH9[X6vr:vsBBBDDDAHHHHHBZYP^^UbaYggFvsdddmxxn~rzzp~}INVYeaeiaaqyZhktmqu}$$$!&&!$IFhkkkkkkdFIRmkg^YTTV]fkjPAmmfXTTT===;;T^kj@QmkZVVVTTTT==;;;TfkP QnfZYXXVTVTT====;;;ZkPIBng]ZZZXXXTVTTTT;=;;;]k@Ink^^ZZZXXWWUUUTU<<<<;;fj$`nf_^;;TjP$pkf__  =;;_kJpgfff000/0/8ZY-++***7TT;TkF$lngfff ZYTTT;fh$pmkggf1110008]Z3,,,+,7TTTT^k$pkkggg   ]]VTTTZk!)pmkjkg44411110000/0,,9XVTTVm&)qmkjjg  #XXVVXk($qnmkkk55544441111000/:ZXXV^k!qpnmmkk ggffff_\ 2]ZZZX^m$oqnnmmm( dgggfffM H]]ZZZkh$KqpnnnmO Lkggfff. [^]]]]mGqqpnnni "kjgggc f^_^]gm$aqpppnn& Rjkjg6 Df____n`$qqpppnb hjjS efff_mnICqqpppn? F4 NgfffkmBIaqqqppn( FkgggkmaaqqqqppB Okkjkkp` CqqqqppnnnnmmkmppB aqqqqqppnppqp`IKoqqqqqqlKI$$))$$$$??( "!"!"!%$ %%#10+441224885==;==<=="MJ7ED:CC=FE/[X2[X6[X9[X=[Y;zvAFFEFFDMMB[YE[YJ[YOZZ@zvEzvKzw`iihhhfenjsu~mqvy~" "49XLKV94"1XF@.,+.N/"42VFDC@@.,+F/4`L+N";XN(&,@9"bXV)@.X b]X% C@N ga`DCN gb`9XVNG>FF]"=gbR?]X6HKK9"kgb!`U#NL`44kgQ TX]24"5kkQ01S`b2"4=kggg;4" "(0` %\\qq##O[ZwvN[Z##\\\{187}087\\\{-LVUJVU͸-S9??wrpnln7??񁁁Sqqqn ~{ywuspnlkigx qqqnqqqn"%%|zxusqomkihfo %%qqqnS.33}{yvtrpnljhgez+32S-"%%~|ywusqomkigfg %%񸸸- }zxvtrpnljhfe \\\{~{ywurpnmkigf\\\{;??! ! ! "!! ! "!! ! "!! ! "!! ! "!! ! "!! "!! ! Bjhi7??􉉉! ! ! "!! ! "!! ! "!! ! "!! ! "!! ! "!! "!! ! Dljh}QVV! ! ! "!! ! "!! ! "!! ! "!! ! "!! ! "!! "!! ! FomkiJVUq}{ywukigeca`^\irpnluq588! ! ! "!! ! "!! ! "!h! "!! ! "!! "!! ! Iusqol087! ! ! "!! ! "!! ! "!k! "!! ! "!! "!! ! Kxvtqo~\AYW@YW?YW>YW=YWYW=YW387q177"""" &&k"!"!"!aqUVV|!!!!""`oo&00!!"!%#NVU&**!!"" $$^ut!!!!"!Kca???y""""""5<<#""!"!&&;??􉉉\\\{FFBB{xtqnkijh9BBCCC%"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!1tpnk{CFF"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!3tprol=FFYb`][YVdUKIGFDUvspY"!"!"!"!"!"!6YV"=;"!"!"!"!"!7tq{xuq133igeb`^m]SQNLJ\}yv-33]``"!"!"!"!"!"!:YW%=;"!"!"!"!"!DD0WWW377BKK8AA:EEWWW :::::: WWWDDDBDDWWW 0777677 0Ext/Icons_04_CB/plockg.ico0000664000000000000000000006117610062571000014215 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pwwpwvpx(v菈vvwvv~pwg~hh~wxnzwggfxwwnzvpzwggfnw~~~~vg  fh phnx a p&zgwwgwxwwwfvvg毈 `~v gh`@x` v~gpge'66xwbRcgnpwwvWg~vvce'gvp vwg@ hzxwwwwwxwgwgrv~whhf4ad&&&0`4$wnv&~wh@aBBwgxxwwwwv~~~wxpx莈 bxnp`~~~w`$xww~p`'pxrAHxx`P`w 珇p$ Fxxp(rxxx Bx~p!莈!8 h`$wwphpxvgvp`p??( @pwwpvhgfhp~zw~vx~戀ppww~vjhf @@vpogwgwvvvgh gvpwwgwvrv~v gv~$$8wopwwwg7wgv~~xpwgxpwwwwgvvw`w~w0p莆 ~xh@ xhpHpp$8x gvxp4菀`Bp pgwvppw??( pgpwgfxwx~~fp 2h`wd7pFvcGfvxagrF~a`%#v/rx(xhx Cawxw(pp(0`    !  "%)4>!!!$%"&&%'($)+%,.',-).3"/0-13,24-3333505706667868;2999;=8=>9>?<6@7@!9A$=D+Pe@G/@G0CI4FK:IM>KR<S^9Rf"Uh'Sc-Vj)Vf1Xg4Zj3\j;f{2aq;BBBGHBJNBKP@MPEPRKQTIUVTZ[Y^eOanCblJfqKhsNaeWin\kuTltXoxYqy]mmmov`u|cx}mttty}p|*m4r;{6~,n@uAxFvKzI{FsQ}Ww[Z|t/2559<<>UY]_ABFFHJMO[QUVY]djmtwyzcelasx|veijjm{ppqxxruwz~ƂȆɈʋˌ̎͒ƙĦǬЙҜȭԠӦ֤֥ҪةڭƷͲǼɻг԰շ۱ѻܲݵ߸߹P<KHHFK7<  MKHHK7+;;;994432210-",?LLKKV*) (uutsrnmk/VVMLKn5:{{ussrnTEVVUMM~5gf cxussr0X[ZVVV`' *~{{usol\[ZVu56 j~~{u;Nml\[kp5&y ~{jrnmlkgaO R; brrrm{_g&8 Ruurr~q&_ d~{u{v a~~_ &&v&g&he&g5+<<+555??(    #' "'13=5?,.&00/59,1113404608;19=1<>6::98A#9A$;C(=98743B;F'gT2T.LaV 1/ 48I.iaZ5074Z iea%# -87Rlge98TmhgHZVTO6=9^ .NlhcK\V:B?CJ.'nlh*)^W +QOaFFnlb" ST]DF.Fnld;;YagE.F'NmlliL'F..(0` %\\qq !QTJz~px}mPSH!\\\{24/yѻͲs13,\\\{-NPIܲӝҜڮKNC͸-S:<7߹̎hNFC?<>Syة7:1񁁁Sqqqn ֤pYUQMJFB?;852GȆv qqqnqqqn#$!Ʒ٬tea]YUQMJFC?<852/;ȅ "qqqnS/0-ʉrmiea]YUQMJFB?<852/~,HبԷ,.'S-#$"޷Ɓzvrniea]YUQNJFB?<852/~,~-ǃԷ "񸸸- ɽۯɇǂ~zvrmiea]YUQNJFC?<852/~,|*k \\\{͐ˋɇǃ~zvrmiea]YUQMJFC?<852/~,|*ǃv\\\{=>:њΔ͏          Pe/~,~-ب7:1􉉉ǾڮҜИΔ          Qf!2/~,HRTP֤ԠҜИ          Sg#52/~,ȅKNCqܳة֥ԠҜwspmifc_\Ykje[zIxFvCt@r=q:o7m4l1{6952/;q675ܱڭة֥ԡenjuJ         Uh'<952/Ȇ13,ݵܱڭة֥irnwM        Vj)?<952Hs\߹޵ܱڭةFK:EK9EJ7DJ6CI4BH3AH1@G0?F.>E-pvrX:B%9B$8A"7@!6@5?4>4>3=f{2C?<952ةͳ\##"߹޵ܱڭrz_qy]oxZnwXmvVkuSjtQhsNgrLeqJxzvc^k>]j<[i9Zh7Xg4Wf2Ve0Td.Sc,ux}m߹w~gv}et|cs{`rz^py\oxYmwWluTjtRɇǃncoFanC`mA_l?]k<\j:Zh8Yh6Wg3{FRNJGC@<ڮJOAJN?IM>HL=GL;FK:EJ8DJ7CI5BH4BH2@G0@G/?F->E,=D+޶ܲڭة֥ԡӝљϔ͐ˌwS^9rnjfb^ZV̏ !\JND"#԰޶ܲڮت֥աӝљϔ͐w[sQwsnjfb^Z߹ѻ\z~p ޶ܲڮة֥ԡӝљϔEL5n{wrnjfbqy888 RVI޶ܲڮت֥աӝ!.3"ǃ{wsojf֥24/q24/ !#æ޶ܲڮتץաltWblJɈǃ{wsnuqVVV|t aeW޶ܲڮتƙ&){ˌɈDŽ{wsڭNPI'($ !"޶ܲڮ^eOKR<Δ͐ˌɈDŽ{ʋ@@@y|q   570г޶z љϕ͐ˌɈDŽƂ:<7􉉉\\\{<>8 13,׷Ƨin\ jrXաӝљϕ͐ˌɈ߸\\\{ Ʒ,-)  %'! !KP@Ӧ֦բӝљϕ͑۰Ǹ -&&&,-)   KOAҪڮتצաӝқ#$!񸸸-S333ʹGHB  !"jo]ش޶ܲڮتצۯ/0-Sqqqn&&&xvǬ޶ܲݴɽ#$"qqqnqqqn qqqnS@@@Ǿ=>;񁁁S-VVVSTP͸-\\\{888675\\\{$$#Z[ZYZW##"qq\\????( @ YYCCC%./*UXNnrenrdTXL-/)CCC% WWW@A;ۿ=@7WWW %=>9͑oTPcƁ٬:<4%1 ٬sYSMHB=84Iˍy  껻1% õǃke_YSMHB=84/Eբ %  ĸݴxrke_YSNHB=84/~,z  WWWˋȅ~xrke_YSNHC=84/}+zyWWWCCC%?@=љΑȅ~xrke_YSNHC=84//~,բ:<4CCC%ǾۯӞИ       ;K4/EDEB٫֥Ӟ       =L94/ˍ=@7Yܱ٫֥lvVjtRhsNfqKcoGanCqLleaq;Wf2Ue/Sc+Qb(O`%cz,>94JY޷ܱ٫94٬221޷ܱrz^px[mwWkuSitPgrLwVxrgvD\j:Zh7Wg3Ve0Sd-i~5HC>9Ƃ-/)^_]߷?F.x).   CP#NIC>cTXM{{yw~gu|ds{aqy]oxYmvVjtRhsNfqKdoGbnD_l@]k=[i9Yh6pATNICPnrd{|zHT+ZTNIUnre__^|ozlxiv}et|brz^px[mwWkuTitPgrLepIboE`mB^k>vJ`ZTNpUXN332PTHMRCܲ٬֥ӟљΒˌŃ!boBlf`ZTΒ./*uzk&(!ڴܲ٬֥ԟљΒqYrlf`ZY߸ܲ٬֥ԟљdmNwyslftYFGF')$W[N߸ܲ٬֥Λ)-!AG1Ȇyslڭ@B;knd !߸ܲ٬{fdˌȆyDŽCCC%CCBо#$! AD;ۼ߸$'37)͖ΓˌȆƀ=>9CCC%WWW  ;>5|n(+# ԟљΓˌݴWWW  ori   y٬֦ԟњö  % 572  !AD;߸ܲ٬۱ĸ %1 껻1%BCBǿ?@=% WWWFGFDEBWWW CCC%332__^{|z{{y^_]231CCC%YY??(  @0 12,02, 0 WWW>?:ݹИΓخ;=5WWW ::9|YMC8Nӝz999 WWW޷reYNC8/yzWWW0AB?И     0ӝ;=50֥CI4@G0=E+UtI5?3=AP9N  ܱ   _yR   C9خ 665IM?FK:DI6r~ViuL;C(9A$HU*NCΓ02,676        ZNљ12, HU*۱֥љHU*^fZ޹ "֥ܲh#'}s}0DDC^`XMPE߼Ԭ59,ckNˌŀ>?:0WWW340AD;8;19=1˝љ߷WWW :::|Գ::9 WWWDDCAB?WWW 0676665  0Ext/Icons_04_CB/plockb.ico0000664000000000000000000006117610062570676014232 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pwwpwvpxHΈ|pȇ|숏@茌xϏ|~@p舌x~쌌xw~wwLj@DD@@D@`@@p  Ȉx@ABBP`@$Έxxwwwwg|||@@@D||@0@ @wΏpgGRWawGGElpwvwevwgegG~wp@@|@PB@$xχwwwwwwwwWlgFteDdFDFD$W|~x A&`pB@!@Gxxxxwx|p@FDxp`'p@Gxxt wwpxt(x@`dxȌxA$菆p@xrt`FBxpaVa8@hpaAgwwphpxvgxvppPp??( @pww@pHvhwxxp@ww|Ljpp퇈xw|@D@@@DF\@@pogwwxwgGȄ@H|pgwgxgVu@@H~|RHxpwwwvvwwgwp@@@@@@Dpwwwwwwgwwx`@hw|Cp@x~@x@xxpH`p$Ah@pgt$xp@`'@ppgtpwwppG??( pww~xwxx|p@D`we'vGwGGtFȄxpwed4tOpxHhx@G@wxp4p(0`      !% 3$!!!&#"%$#%%%+%#.(&/+*<,'1-,70.81/333720666831;42976?75999R/#R1%R5+S8.@:9@=<T;3T?8UB;YC;BBBLFDTF@THD[JDVLHWOLZOLWPMZPM^PLWUT\ZYsPCm_Zq\UmmmygayictttJ3M;O8P>P:TCYJUA]J^R^EbUfZi_i^n^cFeJiNhQmXmSmQp[qYsYjbmbpgrjtfwswqxszu~yvcxf{e~iqOsLvPxRzU|V}Y{|}mrw|[]ډm̉rӌtΒ}ږ~`bdfikmps{x}˝՗Ӛᝆ읂٨㦑ﮘȰİȰͳʹԷʶʹɺϿ׾ػ൥½½¹ǿõŻŸɿ±óijĴŵǸȹ˼̾<,,<!?6aa3 ?qc,61,&ٳ~vnlll ƥ~~vvnllljj~q֥~~~nvllljjjl簈~~vnnlljjji}٬~~vnllljjiij,ְ~~vvllkkjiii,尰~~~vnlljjiiiq&򳳱   @iii?Ƴ  @iii~?7Ƴ  @kkji3uuttssrggfxXUURRQPPPhkkkil zT @mmkkj zW Bvmmkko****))))%)|f%$$#####"J}vmmlk<[[NNLLLLIIyFEEEECCCAV}}}mml <,8 |d  G~}mvm6, e G~~}vvva]][][[NNLL{IIIFFFCECY~}vv/..*.****)))))%%%%%#%%#S~vv   Hv H娧uuutttrrrffza,8 ZƳ %6,< .ij 9 </ ^ Oa + q!! 6Ʃ ! L I8a : ij4? ; 0ij?,a  ij'& = Mij,  0, 0-  >oo,&,87,'?88?!<,,<??( @    !$)9%,$"+'%4($:("2-,?2.444T8/E<9E?<T<3T>6i6%j8'j;*I@=k@1lD6BBBGFFZKF^SO^TPcVQ`^^aVdddujfzlgzlh}zzI5M:P=VE\M^NZG^P[@`OdWg\i]aHjWiRq_p[lapgsmriyowpyr{i~ptMvP|V~Z^~adfipvx~읁쟄ࠊɰӰʸ˾캩ŵǸ&&&#))"&a[~}[an|kdOMQiwlUwdONLJIHHFMkTnhRQOOOMJIHHFFJvloxhSSSQQONMJIHHFFFhlaV|ihhdSSQQOOMJIHHFFFeTakkigeSSQQOOMJIHHFFFFv&ywskHFLl&vtsHGFkawwt655///9SQ1-,,++3IHHM[&|xwweS JIHHw}&xw==6655;ee4..--,8MJIHi$xigOMLJS"*@>===7755///...:OOMLO)*ROOMQ)$CB@@===76652///<T90T=5m<+JA>UA9UC<UD>n@0nD5oI;DA@EEDVFAWJEVLHf]Z}aWhhhdUl^lVr_va}jtMxR{V|W~Zs_ņp`bfilstu~¥㩔멑朗ﭕ滫ŷɾ±ƶǸȺ˼Ϳ( (GKeZYaKG(DkQ<9309\4(GEcQ@?<930/QCG!oW/\(Mc\-+064񁁁Sqqqn ~jgdb_\~Y|WzTxRvPuMaﭖ{ qqqnqqqn%"!Ͽij윁tqnkheb_]~Z|WzUxRwPuNsL|Vﭖͳ% qqqnS2/-䀘~{xtqnkheb`]~Z|X{UySwPuNsLrJcŵɿ1+)S-%#"˽읂~{xurolifc`]Z}X{UySwQvNtLrJsLﬕ% 񸸸- þŵ잂|yurolifc`^[}X{VySwQuOtMrJqI읁ʹ \\\{ﮗ䀘잃|yvsplifda^[}Y{VyTwQvOtMsKqIﬕ{\\\{?<;ﮘ   !               I1tMsKtLŵ>64􉉉¾ó   !               J3wPuNsLdɱVRP   !  !           L5yRwPuNsLﮘTJFqƶ}zwurpmj}h{e{{xډmqYoVmTlQjOhMfKeIcFqO{UySwQuN}YȰq865ŵ±   !  !   ӌt{mX      O8}X{VySwQuNﯘ70.ȹŵò   !  !  !ӏw잂p[     P:[}X{VySxQd~x\˼ȹƶòUC=UB;UA:U@9U?8T>6T=5T<4T;3T;2ږ~힃|fS6,R5+R4)R3)R3'R1&R1%R0$R/#^E^[~Y|VzTxRƶú\$#"˽ɺƶijmclaj_i]g[fYdWcVaT_Rᝆ̉rXHWFUETCRAQ?P=NUC=UBN;L9J7I4[@~Z{VxReYʻƶ±!!!!!!T8/잂}9%      j;*^Z|VySȹ321ʼǷlbj_h\eYcVaTq_잃`OVETCR@P=N;aHc_[|Wﬕ2,*`^]˼!!!!!!T<3:'     k>/hd`\|^SP}zyskqhnelbj_h\fYcWaT_Q]NZKXHVETCiRmid`lzmh}zz"!!!!!!!!!!!   lD6sniepzmi`_^yrwpumrjpgndlai^g\eYcV`S^P\MZJp[xsoj^TQ332ZNJ"ZKFɺƵ°뫔)!^N잂~yto2-,sm",%#ɼʻƶ±~!!{i쟃~yuY""˼ǷòaV!#ࠊퟄYGFF+'%"cVQ˽Ǹó캩4($!U?7䀹ɺE?=ujf"#̱̽ȸyo!!~pﬕʺCCC%CBB&#""I@=Ӱ,$!!?2.ﭖB=;CCC%WWW""B:8{t/(%"%WWW  wnk"""""$ʻƶ±˿  % :53"$ JA>ʻͿ %1 껻1%CCBB?>% WWWGFFFDCWWW CCC%333`__}{{}{z`^^322CCC%YY??(  @0 60.60- 0 WWWC=;ǸB:7WWW ::9kb~ZxRf:99 WWW˼ulc[yStMWWW0C@?!        uNB:70ͿT?7T<4T90valVR1&R/#m<+{Vi ƶ    }jS8/    _|WȺ 765VFAUC=UA:l^S8/S8/S6+nD5h`60.766         sj60.nD5ɺ±㩔nD5ņp~t $ ¥˼òs."멑朗0DDCf]ZVLHŷA40}aWﭕC><0WWW721JA>@74D95滫WWW :::ɾ::9 WWWDDDDA@WWW 0766766 0Ext/Icons_04_CB/Finals2/0000775000000000000000000000000012606740430013540 5ustar rootrootExt/Icons_04_CB/Finals2/plockb.ico0000664000000000000000000005600610063513620015507 0ustar rootroot (n00 >h00 %N!  F hW( @ppwwpwwwpwwpDDDDDDOpppDDDDDDOpDDODDOppxDDODDOppDDODDODDODDOppDDDDDDOpDDDDDDOppOOppOOpOOxOOOOppOOppDDOwDDDDppDDOppwwwxwpwwpppp??( `pwwwwpDDDDww`DODwwwwDDDDOO`OGtpO`p(0`      !% 3$!!!&#"%$#%%%+%#.(&/+*<,'1-,70.81/333720666831;42976?75999R/#R1%R5+S8.@:9@=<T;3T?8UB;YC;BBBLFDTF@THD[JDVLHWOLZOLWPMZPM^PLWUT\ZYsPCm_Zq\UmmmygayictttJ3M;O8P>P:TCYJUA]J^R^EbUfZi_i^n^cFeJiNhQmXmSmQp[qYsYjbmbpgrjtfwswqxszu~yvcxf{e~iqOsLvPxRzU|V}Y{|}mrw|[]ډm̉rӌtΒ}ږ~`bdfikmps{x}˝՗Ӛᝆ읂٨㦑ﮘȰİȰͳʹԷʶʹɺϿ׾ػ൥½½¹ǿõŻŸɿ±óijĴŵǸȹ˼̾<,,<!?6aa3 ?qc,61,&ٳ~vnlll ƥ~~vvnllljj~q֥~~~nvllljjjl簈~~vnnlljjji}٬~~vnllljjiij,ְ~~vvllkkjiii,尰~~~vnlljjiiiq&򳳱   @iii?Ƴ  @iii~?7Ƴ  @kkji3uuttssrggfxXUURRQPPPhkkkil zT @mmkkj zW Bvmmkko****))))%)|f%$$#####"J}vmmlk<[[NNLLLLIIyFEEEECCCAV}}}mml <,8 |d  G~}mvm6, e G~~}vvva]][][[NNLL{IIIFFFCECY~}vv/..*.****)))))%%%%%#%%#S~vv   Hv H娧uuutttrrrffza,8 ZƳ %6,< .ij 9 </ ^ Oa + q!! 6Ʃ ! L I8a : ij4? ; 0ij?,a  ij'& = Mij,  0, 0-  >oo,&,87,'?88?!<,,<??( @    !$)9%,$"+'%4($:("2-,?2.444T8/E<9E?<T<3T>6i6%j8'j;*I@=k@1lD6BBBGFFZKF^SO^TPcVQ`^^aVdddujfzlgzlh}zzI5M:P=VE\M^NZG^P[@`OdWg\i]aHjWiRq_p[lapgsmriyowpyr{i~ptMvP|V~Z^~adfipvx~읁쟄ࠊɰӰʸ˾캩ŵǸ&&&#))"&a[~}[an|kdOMQiwlUwdONLJIHHFMkTnhRQOOOMJIHHFFJvloxhSSSQQONMJIHHFFFhlaV|ihhdSSQQOOMJIHHFFFeTakkigeSSQQOOMJIHHFFFFv&ywskHFLl&vtsHGFkawwt655///9SQ1-,,++3IHHM[&|xwweS JIHHw}&xw==6655;ee4..--,8MJIHi$xigOMLJS"*@>===7755///...:OOMLO)*ROOMQ)$CB@@===76652///<T90T=5m<+JA>UA9UC<UD>n@0nD5oI;DA@EEDVFAWJEVLHf]Z}aWhhhdUl^lVr_va}jtMxR{V|W~Zs_ņp`bfilstu~¥㩔멑朗ﭕ滫ŷɾ±ƶǸȺ˼Ϳ( (GKeZYaKG(DkQ<9309\4(GEcQ@?<930/QCG!oW/\(Mc\-+064񁁁Sqqqn ~jgdb_\~Y|WzTxRvPuMaﭖ{ qqqnqqqn%"!Ͽij윁tqnkheb_]~Z|WzUxRwPuNsL|Vﭖͳ% qqqnS2/-䀘~{xtqnkheb`]~Z|X{UySwPuNsLrJcŵɿ1+)S-%#"˽읂~{xurolifc`]Z}X{UySwQvNtLrJsLﬕ% 񸸸- þŵ잂|yurolifc`^[}X{VySwQuOtMrJqI읁ʹ \\\{ﮗ䀘잃|yvsplifda^[}Y{VyTwQvOtMsKqIﬕ{\\\{?<;ﮘ   !               I1tMsKtLŵ>64􉉉¾ó   !               J3wPuNsLdɱVRP   !  !           L5yRwPuNsLﮘTJFqƶ}zwurpmj}h{e{{xډmqYoVmTlQjOhMfKeIcFqO{UySwQuN}YȰq865ŵ±   !  !   ӌt{mX      O8}X{VySwQuNﯘ70.ȹŵò   !  !  !ӏw잂p[     P:[}X{VySxQd~x\˼ȹƶòUC=UB;UA:U@9U?8T>6T=5T<4T;3T;2ږ~힃|fS6,R5+R4)R3)R3'R1&R1%R0$R/#^E^[~Y|VzTxRƶú\$#"˽ɺƶijmclaj_i]g[fYdWcVaT_Rᝆ̉rXHWFUETCRAQ?P=NUC=UBN;L9J7I4[@~Z{VxReYʻƶ±!!!!!!T8/잂}9%      j;*^Z|VySȹ321ʼǷlbj_h\eYcVaTq_잃`OVETCR@P=N;aHc_[|Wﬕ2,*`^]˼!!!!!!T<3:'     k>/hd`\|^SP}zyskqhnelbj_h\fYcWaT_Q]NZKXHVETCiRmid`lzmh}zz"!!!!!!!!!!!   lD6sniepzmi`_^yrwpumrjpgndlai^g\eYcV`S^P\MZJp[xsoj^TQ332ZNJ"ZKFɺƵ°뫔)!^N잂~yto2-,sm",%#ɼʻƶ±~!!{i쟃~yuY""˼ǷòaV!#ࠊퟄYGFF+'%"cVQ˽Ǹó캩4($!U?7䀹ɺE?=ujf"#̱̽ȸyo!!~pﬕʺCCC%CBB&#""I@=Ӱ,$!!?2.ﭖB=;CCC%WWW""B:8{t/(%"%WWW  wnk"""""$ʻƶ±˿  % :53"$ JA>ʻͿ %1 껻1%CCBB?>% WWWGFFFDCWWW CCC%333`__}{{}{z`^^322CCC%YY??(  @0 60.60- 0 WWWC=;ǸB:7WWW ::9kb~ZxRf:99 WWW˼ulc[yStMWWW0C@?!        uNB:70ͿT?7T<4T90valVR1&R/#m<+{Vi ƶ    }jS8/    _|WȺ 765VFAUC=UA:l^S8/S8/S6+nD5h`60.766         sj60.nD5ɺ±㩔nD5ņp~t $ ¥˼òs."멑朗0DDCf]ZVLHŷA40}aWﭕC><0WWW721JA>@74D95滫WWW :::ɾ::9 WWWDDDDA@WWW 0766766 0Ext/Icons_04_CB/Finals2/plock-blu.ico0000664000000000000000000006117610063243454016136 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pp~p~pppp~p~wwwwwwwwwwwwwp~~p~~~興p~~p~~~興p~pp~wwwwwwwwwwwwww~wwp~~~~~ppxp~p~ppx~pppp( @ppp~wwwwwwwwwwwwwwwwwwwww~wwwwwww~wwwwwwwwwwww~pppppwwp~pp( pwffffn~ww~p~ww~~wff`npppp~wpp(0`         " :$,!3 4%<%=/$H H H HE"I I%E&I&E*I(I+I,M-m)n-n/w'n0n2n4A,#E.!A,$F1$M2$N7)N8)W3![4"U;+Y:)n6 g8$n9"o;$o<&o>(|>%GB9\A1o@+oA,|@'~D+H/bL;lL8~M8|U>FFFQQQYYYpT@~U@}YBfffyyy/0034798=>!?BF,L3N6S9E"I&N,M*Q-Q0R0T1Y6Z;]:Z4a?b=CIIHJLNQRTT'_8\0U U!X#Z&])_,`6a-c0e2g4i5k9l9n<p=[C[A]@dKhLjRnRpVdDdCkJgEgBiGlKpO|]tSuRxV|[yfqGqFwMwSxT[{QsE|Or@tBwEyGzH|J~LejpDŽ_O^][SQTWZY]ȊeΉdԉaԐiĕrۛrcdaddcdeililntsspΡ}Ҥ|zuqtvx{|~ګֿ⯇峋řȜ͡ЫѦԩح۱N TOUMSOK|||zzyyu`, T2|||zzyyywtN|||zzyyywt T Q|||zyyyyw, ||||yyyy`7 X|yyyyv(V||zyyy(V|||zyy֓EEE@@@@@@;@;;;;;+;*******))a|||zzK(($((######h#^|||z4FqV|||4Fq[|||: bq ]|䬛rrrjjjhgggffff~|4G[6Gs\4Hs\ƥrnnnmmmjjii9  _5_6_R3333242$2$$$$$$$#######hRRLGFFFlũFom97 ѾPљ<ۣc ePJI Cū K TӽNB2UQOSMUOT N( @          " 05 0 0 1+1119%:)?(=80I I [ [ [!I!I#I%I'I(J*J,[#[%]&\'\(R-\+\,\.\0`*o,y,t5I8+\2 ]4"^7%^8&S<-[;)^:(^<+Z>-`4!t9"u=%^A0\F6wF.uF0uI2vK5vM7vO9vP;FFF}\F}_Immm12;6>$@&B(D*F-N.J1N5R9U=[>G%Q.^>GHHJLNPRU X#Z&])f>e:e9`,c0f3i6m:p=YA]EfJjLqWiIkHxY{\tTmBnDoBzNsAtAwEzH}L`jqtفWXY_PPTX^\ًbފ`ޔjڔl×tۛs؛tڝuj`dddhkhlorpppwstwx|{|۫묂츏ėřɞ̡Ϥҧҧԩ׬ٮٱ۱ݳݴNQ~wwvuussnmmkkihfUNwwvutssnmkkkihhdQwwvutssmnkkkihhU;93322020---***** Skhhe kkhh))))&&&&&&&Rkkkir6nkkkr*nnkk@@??9?9;2200---Tnnnm5tnnm-ttnnMLKKKHHGDDDD777autts4vuts0wvuuzzzy___^]]]ZZZZXXVbxwvu={&[wwvP@pwwō w@/Fcƞ@8 |`Ⱥ zEȎȎ Ƚ}POOQNQN(     $$ % 1 :> >%:>/">#:#:%?&;'>.#A K V @ ](`&E0$D4(N:,S6'Y7'Y7(U<-o@*fE2oO;zM5wU?}R:DDD]SEnnn;?=E)N5N2S4W9C H%L)Q.V4Z9U1ENRX#])c0i6p=^CaGrWcCkGqMvS|XsKo@wHxIwE~L~P^fkWXT\؟xfcdilklsty~z|ĘʞΨϤԩٮ*,*!VXQPCBA@?>=<,[\L:98765.-/=<b`1>=gb'$$$0M$$$$?>hgD3N @?ihE$$$4R$$$$A@ki& BAlkZ#%KJIH2;CBmlkgb`\$RPComlFSgb^XQPpomjeg)GYXQqpomT  ^\YXnqpomU)eb`\W,+nqpomlkihgb["*,*(0` %F;;;F ;;; ---  ~M8wSYTQO~L{JyGwEtBr@p=n;l9i6g4e2c/a-_+])['Y%W#V!TRQONLKI?w';;;FA,#^^\YVTQO~L{JyGwEtBr@p=n;l9i6g4e2c0a-_+])['Y%X#V!TRQONLKIHC:F cca^\YVTQO~L{JyGwEtBr@p=n;l9i6g4e2c0a-_+])['Y%X#V!T RQONLKJHC;;;T@ifca^\YVTQO~L{JyGwEuBr@p=n;l9i6g4e2c0a-_+])['Y%W#V!TRQONLKIHw'ψdkifca^\YVTQO~L{JyGwEtBr@p=n;k9i6g4e2c0a-_+])['Y%X#V!TRQONLKJ?snkifdaW3!0QONLKIsqnkifdM-/RQONLKvsqnkifM.0T RQONLxvsqnki]@oB-oA,o@+o?)o>(o='o<&o;$n:#n9"n8!n6 n5n4n3n2n1n0n/n.n-n-n,m+m*m)m(BV!T RQON{xvspnkN6I,I+I+I*I)I(I(I'I&I&I%Q0yGwEtB`6I!I I HIHHH H H H =X#V!TRQO}{xvsqnM0"~@'|JyGwEZ33Y%X#V!T RQ}{xvsqM1"~B(~M{JyG[54['Y%X#V!T R}{xvsY:)           G,O~M{J_88])['Y%X#V"T ~{xv[nMlLkJiHgFfDdCbAa?_=]!j7h4f2c0a._,N7)=!l9j7h4e2c0a.N8)?"n;l9j7h4e2c0ė•~[DF2%F1%F1$F0#F/"F/"F.!E. E- E,E+E+E*E)E)E(E'E'E&E%E%E$E#E#E"E!E!N,p>n;l9j7h5e2ƚė•|\}XA|W@|U>YAuvsqnligda_\YWSF,{@'{?&{=$R0wEuCr@p>nnn;l9ˠʞȜƚė•T:+~{yvsqnligda_[4"qF~M|JyHwEuCs@p>n<̠͢ʞȜƚʕ,! z~{yvtqnligd] $ QO~M|JyHwEuCs@p>Ϥ͢ˠʞȜƚʖpT@nR~{yvtqnligdDg8$TRO~M|JzHwEuCs@ѦϤ̠͢ʞȜƚʖĕr7'~{yvtqnli>&gBWURO~M|JyHwEuCӨѦϤ΢̠ʞȜƚʖ'_~{yvtqouR  YZWURO~M|JzHwEԩӨѦϤ̠͢ʞȜƚʖjR2$~{yvto:%L3_\ZWTRP~M|JzH֫ԩӨѦϤ̠͢ʞȜƚĘ ]E~{yv[A \b_\ZWURP~M|J׭֫ԩӨѦϤ̠͢ʞȜƚĘpV}^~{xVS9gda_\ZWURO~Mٯ׭֫ԩӨѦϤ̠͢ʞȜƚ=/$iL9ڜtܚqoM83 iigdb_\ZWUROڰٮ׭֫թӨѦϤ΢̠ʞȜƚګ% ԉaoligdb_\ZWURܱڰٮح֫ԪӨѦϤ΢̠ʞȜƚΡ} DŽ_tqoligdb_]ZWUܱܳڰٮح֫ԪӨѦϤ̠͢ʞȜƚҤ  ͋eyvtqoljgdb_]Z[ֿݳܱڰٮ׭֫ԩӨѦϤ΢̠ʞȜƚ峋bL;\A1t~{ywtqoljgdb_\xTyf޴ݳܱڰٮ׭֫ԪӨѦϤ΢̠ʞȜƚĘ⯇pmkihz~|yvtqoljgdb_~M9;;;Ы޴ݳܱڰٮ׭֫ԪӨѦϤ̠͢ʞȜƚʖ~{yvtqoligd_ FGB9ѫ޴ݳܱ۰ٮح֫ԪӨѦϤ΢̠ʞȜƚʖ~{yvtqoljdA,$F;;;yfֿ۳ܱڰٯح֫ԪӨѦϤ΢̠ʞȜƚʖ~|yvtsψeU@  --- ;;; F;;;F( @ :777:\\:9$iIYTP~LzHwEsAp=m:i6f3c0`,])Z&W#U RPNKH65 :9&d`\XTP~LzHwEsAp=m:i6f3c0`,])Z&X#U RPNKJG5 777tTgc`\XTP~LzIwEsAp=m:i6f3c0`,])Z&X#U RPNLJ6pkgdX\4"\2 \1\0\.\-\,\+\)\(\'[&[$[#["[![ [ 2PNLHsokgفW[ RPNLwsol_J,J+J*J)J(I'I&I%I$I#I"I!I III I I 1U RPN{wsoߋa11111103zHwEe90 0 0 0 0 00y,X#U RP{wsًb}LzIe:["Z&X#U!R{wj^<+^;)^:(^8&^7%^6#^4"`4!P~LoB]-],]+])](]']&;])Z&X#U!{ޔj     " TPmB    o,`-])Z&X#ڔlXTnD[&c0`-])Z&wvP;vO9vM7vK5uJ3uH1uF0wF.\XzNu>&u<%t:#t9!t7t5t4G%f3c0`-]*ۛs`*j7g3c0`-ڝu\)m:j7f3c0ė묂^F\DZBX@V>U$Q.p>m:j7f3ǛĘS<-fJwsplhd`\XI(N.wEtAp>m:j7ɞǛĘ^GZ>-{wsplhd`[ f>{IwEtAp>m:̡ʞǛĘj |{wtplhdkHP~M{IwEtBp>Ϥ̡ʞǛĘ xY{wtplh^9&R-TQ~M{IwEtBҧϤ̡ʞǛĘ\F6:*{wtp݊`^>XUQ~M{IwEԩҧϤ͡ʞǛĘ×tyZ{wt[;) ^\XTQ~M{I׬ԩҧϤ͡ʞǛĘI8+ ؛t{jL[>d`\YUQ~Mٮ׬ԩҧϤ͡ʞǛ۫  ^F`^A0?(khd`\YUQ۱ٮ׬ԪҧϤ͡ʞǛq +jplhd`\YUٱ۱ٮ׬ԪҧϤ͡ʞǛt ;)rxtplhd`\Zݳ۱ٮ׬ԩҧϤ͡ʞǛ츏qW}_I}]G}\F{\{xtplhd`jJ777=80ݴݳ۱ٮ׬ԪҧϤ͡ʞǛĘ{xtplhe9$:>80ٱ۱ٯ׬ԪҧϤ͡ʞǛĘ|xtpuU9&:\\:777:(  @:::Y7'WT~LwEp=i6c0])X#RNEV :::fcsKZ9V4Q.L)H%C ?;=NEskN5%% $ $ $ $$$,RN{szM5o@*o@*o@*E)o@o@*o@*o@*o@*X#R{^C* $) S4wH)))$])X#aGo@*o@*o@*W9~Po@*o@*o@*o@*c0])oO;&j7c0Ę؟xU<-fE2|XvSqMkGN2@ U1p>j7ʞĘN:, zsldo@*xIwEp>ϤʞĘrW^{ti >#T~MwEԩϤʞ /"~{}R:cC\U~MٮԩϤʞf%E0$S6'ld\UΨٮԩϤʞkD4(>.#wU?ytldX:::]SEΨٮԪϤʞĘ|tfY7(:::Ext/Icons_04_CB/Finals2/plock-dis.ico0000664000000000000000000006117610063310766016134 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pp~p~p陙p陟~~wwwwwww  ~ ~ 興~~~~~陙興~陙~wwwwwwwwwwww~wwp~~~~~ppxp~p~ppx~pppp( @ppp~陙陙陟wwwwwwwww   wwww  wwww陟陙陙wwwww~ppppwwp~pp(  p w ffn~w~p~ w~ ~ff`npppp~wpp(0`     " :$,!3 4%<% #-%$) <:>=/$H HE"I&E*M-m,n/w'A,$F1$M2$N7)N8)W3!U;+Y:)T1:n6 g8$o>(|<(GB9\A1oA,|@'~D+H/bL;lL8~M8|U>OX\ #L-(Pf"`&-m>1b!+t-1tM5OH8cFFFQQQYYYpT@~U@}YBfff{{{/0798=>!?BF,L3S9E"I&N,M*O*Q-R0T1Y6Z;Z4a?b=CIKNRT'[0_8\0Y$_,`6a-g4i5k8[C[A]@dKhLjRnRdDdCkJgEgBiGpO|]uRxV|[yfqGqFwMwSxT[{QsE|OvDyGejpDŽ_O^][SWZ]ˉdԐiĕrۛrccitsΡ}Ҥ|zuvx  + ) 0$4(6%6NHXO ! #+%&'"64:)+-12)5)?0?4A,CJOJPjh~ww|•ԝګֿ峋řȜ͡ЫѦԩح۱HHNIINGG<:MII=´+_vvuttrrqqqqlllkkjjiV"N#DȿE_wuuttrrrqqqlllkkjjjjh HHA³+nvuuurrrqqqqlllkkjjjjhN/wvuuttrrrqqqlllkjjjjj"ɴBwwuuuttrrqqqqlllljjjjV@ǶPljjjjiɵOllkjjjOlllkjj,,,,!, WqlllkkǔsTqqlllkǚeOqqlqllÚeQqqqlllŚeSrrqqqlF```]\\\[[[[mrqrqql;4oQttqqrq4gRtttrqqC5gRuutrqrɽfcccbbb``^^puutttr<Uvuuttt?Uwvvuur>UwwwuutL$$$$#%##]wwvuuLL9x4333awwwvv{3vwww|dbww)(v ౱ wJ~ޱ-ޱ ޱ }ޱYxޱy}ޱZJ7   61ߘޱ8N ޱH0ޱ#N ޱLIMGNINH( @       05 0 1+17#8%:) 06+7=80I [ I'J,[#\'[)R-\+\.\0`*o,f.y,l1t5I8+\2 ^7%S<-^:(^<+u=%^A0\F6pC.vE-uF0vM7vO9vP; |FFFN@RiHC}\F}_I]Jdmmm12;6>$B(F-B#D$N.N5R9U=[>Y>G%Q.^>GHHLNRX-X#Z&f>e9`,c0f3i6m:p=YA]EfJjLqWiIkHnPxYtTexmBoBzNwE}L`jqفWفYXY_PTX\ًbޔj×tڝuj`dhhlorppwtx|| !#E?CMFROYJUDPGUde ! "$0%&,5*?*+-. 2"5 9!:,A.B,B-C6G0D/F0G%GX__]]ZZYWWVUTC 9wH`__]]ZZWWWVUUR ?j'a`__]]YZWWWVUUCȩ鬩 AWUUS饩WWUU鯩魩@WWWV鮩©qq\  &ZWWW鲩鴩rr\ZZWW䩩:rro!!! BZZZZǩ౩||n$_ZZYϼ ||n]_ZZϽ;22~~p////(((O_]_]Ô8#`_]]ς!a`__ddddKKKKJJJFFFFFEDPaa`_,eIqqaa`=.~[rqqaatirrqqqak.||rrqq1͑zQ~||rrqՁk͑. ~~|||rr)͑fM~~||rds0~~||u~~|u~~yg=< %/">#?&>.#K V @ `&E0$D4(N:,S6'Y7'Y7(U<-o@*fE2oO;zM5}R: [D(Cj;Mc8PDDD]SEm@VqNmnnn;?=E)N5N2S4W9F$C H%L)Q.O3V4Z9U1ENRX#])c0f4i6p=^CaGrWcCbFdGkGqMvS|XgzsKo@wHwE~L~P^fkWXT\؟xfciks~|iH ((;;rrPP^^iiڥĘʞΨϤԩٮ!%!TE#3==;:987%Y`dfea./'&(87Jcyykcc 98eyyjclf :9fygcjyf#;:ihcgyycE<;mchyyc><rmffc$HGF+6?>srq_]\ZPN?usrBQ_][VONvusp ^_CWVOwvusR[ZWVtwvusS ^]\ZU%"twvusrqon_]Y!%!(0` %F;;;F )< = ?>$;;;  ]( " # ! -O---  #L+*......,$'T1:O*i7i6g4e2c/a-_+])['Y%W#V!TRQONLKI?w';;;F-1t+.........., ! M5OO*j8i6g4e2c0a-_+])['Y%X#V!TRQONLKIHC:F&-m-..*A)5...$ T1:[0l9i6g4e2c0a-_+])['Y%X#V!T RQONLKJHC;;; #1..~w... #'|<(h8l9i6g4e2c0a-_+])['Y%W#V!TRQONLKIHw'%=..XO...- >1bY0n;k9i6g4e2c0a-_+])['Y%X#V!TRQONLKJ?"`..jh(6.....(* 0QONLKI'>..$4..2.. */RQONLK$...%6..2.. "?0T RQONL8...(..2..&Fd0n4n3n2n1n0n/n.n-n-n,m+m*m)m(BV!T RQON <...*..2..)*HoAwEtB`6I!I I HIHHH H H H =X#V!TRQO <..,49..2..);,GuFyGwEZ33Y%X#V!T RQ+..)JO..2..&N37|L{JyG[54['Y%X#V!T R..,JP..2..3l8#O~M{J_88])['Y%X#V"T (.-%4;..2..H8clCRO~LsES1R/P.O,M*K)J'I%G$F"D!T'_,])['Y%X#V!X..&'..5.."8E,TROa;7a-_,])['Z%X#(....--.1 'F-WTRc=9c0a._,])['Z%....&-..!+tH/YWTd?:e2c0a._+])['...-+.........NHeEiGgE{Q\YW|O]:[8Z7X5V3U1S0R.P,N*M)\0g4e2c0a._,])•0?...........[                    >!j7h4f2c0a._,w4A......*f=!l9j7h4e2c0a.ԝ|-(P </?"n;l9j7h4e2c0ė•~[DF2%F1%F1$F0#F/"F/"F.!E. E- E,E+E+E*E)E)E(E'E'E&E%E%E$E#E#E"E!E!N,p>n;l9j7h5e2ƚė•|\}XA|W@|U>YAuvsqnligda_\YWSF,{@'{?&{=$R0wEuCr@p>nnn;l9ˠʞȜƚė•T:+~{yvsqnligda_[4"qF~M|JyHwEuCs@p>n<̠͢ʞȜƚʕ,! z~{yvtqnligd] $ QO~M|JyHwEuCs@p>Ϥ͢ˠʞȜƚʖpT@nR~{yvtqnligdDg8$TRO~M|JzHwEuCs@ѦϤ̠͢ʞȜƚʖĕr7'~{yvtqnli>&gBWURO~M|JyHwEuCӨѦϤ΢̠ʞȜƚʖ'_~{yvtqouR  YZWURO~M|JzHwEԩӨѦϤ̠͢ʞȜƚʖjR2$~{yvto:%L3_\ZWTRP~M|JzH֫ԩӨѦϤ̠͢ʞȜƚĘ ]E~{yv[A \b_\ZWURP~M|J׭֫ԩӨѦϤ̠͢ʞȜƚĘpV}^~{xVS9gda_\ZWURO~Mٯ׭֫ԩӨѦϤ̠͢ʞȜƚ=/$iL9ڜtܚqoM83 iigdb_\ZWUROڰٮ׭֫թӨѦϤ΢̠ʞȜƚګ% ԉaoligdb_\ZWURܱڰٮح֫ԪӨѦϤ΢̠ʞȜƚΡ} DŽ_tqoligdb_]ZWUܱܳڰٮح֫ԪӨѦϤ̠͢ʞȜƚҤ  ͋eyvtqoljgdb_]Z[ֿݳܱڰٮ׭֫ԩӨѦϤ΢̠ʞȜƚ峋bL;\A1t~{ywtqoljgdb_\xTyf޴ݳܱڰٮ׭֫ԪӨѦϤ΢̠ʞȜƚĘ⯇pmkihz~|yvtqoljgdb_~M9;;;Ы޴ݳܱڰٮ׭֫ԪӨѦϤ̠͢ʞȜƚʖ~{yvtqoligd_ FGB9ѫ޴ݳܱ۰ٮح֫ԪӨѦϤ΢̠ʞȜƚʖ~{yvtqoljdA,$F;;;yfֿ۳ܱڰٯح֫ԪӨѦϤ΢̠ʞȜƚʖ~|yvtsψeU@  --- ;;; F;;;F( @ :777:\\:7#Y>exBQ0$ >K]Jdf.B#X-c1c0`,])Z&W#U RPNKH65 :8%فYde+....-$CO[)D$]0e2c0`,])Z&X#U RPNKJG5 777nPvp..!:cgsn.E..&FQl1S,e4f3c0`,])Z&X#U RPNLJ6Ɔ.. 9.. "6+7;T$\'[&[$[#["[![ [ 2PNLHiY.fb*?...+CM[ RPNL"5..B.0D":.AO) @I"I!I III I I 1U RPN..,A..CCW.BQM.l?e90 0 0 0 0 00y,X#U RP..E?6G.,B-D.FR^9uFe:["Z&X#U!R[V.% 2.1D.-N@RqF}KoB]-],]+])](]']&;])Z&X#U!...--C.MZ QPmB    o,`-])Z&X#j`..* " !&..9NWTnD[&c0`-])Z&yh......,5iHCpC.vE-\XzNu>&u<%t:#t9!t7t5t4G%f3c0`-]*ݣk!# | 0`*j7g3c0`-ڝu\)m:j7f3c0ė묂^F\DZBX@V>U$Q.p>m:j7f3ǛĘS<-fJwsplhd`\XI(N.wEtAp>m:j7ɞǛĘ^GZ>-{wsplhd`[ f>{IwEtAp>m:̡ʞǛĘj |{wtplhdkHP~M{IwEtBp>Ϥ̡ʞǛĘ xY{wtplh^9&R-TQ~M{IwEtBҧϤ̡ʞǛĘ\F6:*{wtp݊`^>XUQ~M{IwEԩҧϤ͡ʞǛĘ×tyZ{wt[;) ^\XTQ~M{I׬ԩҧϤ͡ʞǛĘI8+ ؛t{jL[>d`\YUQ~Mٮ׬ԩҧϤ͡ʞǛ۫  ^F`^A0?(khd`\YUQ۱ٮ׬ԪҧϤ͡ʞǛq +jplhd`\YUٱ۱ٮ׬ԪҧϤ͡ʞǛt ;)rxtplhd`\Zݳ۱ٮ׬ԩҧϤ͡ʞǛ츏qW}_I}]G}\F{\{xtplhd`jJ777=80ݴݳ۱ٮ׬ԪҧϤ͡ʞǛĘ{xtplhe9$:>80ٱ۱ٯ׬ԪҧϤ͡ʞǛĘ|xtpuU9&:\\:777:(  @:::Y7'WdGoAUj;MO3f4c0])X#RNEV :::f^A D(CF$C ?;=NE] ^^ $$$,RN PPiic8Po@*o@*o@*o@*X#R ((PPl@W)))$])X#fg((bFo@*o@*o@*o@*c0])ڥ;; l&j7c0Ęۦ eG|vSqMkGN2@ U1p>j7ʞĘN:, zsldo@*xIwEp>ϤʞĘrW^{ti >#T~MwEԩϤʞ /"~{}R:cC\U~MٮԩϤʞf%E0$S6'ld\UΨٮԩϤʞkD4(>.#wU?ytldX:::]SEΨٮԪϤʞĘ|tfY7(:::Ext/Icons_04_CB/Finals2/plock.ico0000664000000000000000000006117610063242724015355 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pwwpwpxpp~p~pxp~p~~pp~~~pp~~~p~pp~~pp~p~p~pppxpwxwpppp??( @pwwpxxppp~p~~~ppppppppwwwwwwwppp~p~ppppwwpwwpp??( pwww~ppwpw~pwwwp~xwp~pwwwp(0`       +,+#""&1" .#3"3$8!!!!$$$-%#2&"3($:*$:,'0.-5.,50.;1.655<30><<N)W-M+ M, Q-!O6-R1%R4)M92G=:MA<zC/{E3{G5|K:BBBOIGREARHE_MFSMJWPMXQOTSRXUSjK@cPImmmtttF1H3H4Q>S:V>]>^>R@RAVEXG[LZEYD_Q]B_AaNaSbUdWfZi_h]k[m]aFcIaFhRu]k`pfvnrfxtxr}w}z}x}g|eiGlKhCy\lBnEoFpGqIsLtMvPxRzT|W}Y~p]̀ftǍxŐ}Ӕ`abdfikmpqtvyz|~ÑÔ͔ڜןŞ읁쟄ۡ¢åܦԩݬ襎䀹ﬕﮘﳞêʭ̴ر۵ֽؼ⶧뷥ṫļ¶°óijijŵŵǸɹʽʼ̾H< Dz{|{/m" F{P*'# d{{*odg1{K)h3e1uH5¾\f1H<C6 6\f13<n!G8O ee 7O qA! kkkbjjYbYYYYVVUTTTMMO;<EGľ4<*p(IEqE I**H< "*$".%"*'%0%!1*'=*#=,&1-+2.-20/>3/210444?62V,@)"@,%V/!E1)V0#V1$W4'X6*Y8-C95C;9A??Y;0Y<2Z>4p<+p>-A@?J@=Z@7VE?[B:[E>sA/j@1pA0tC2BBBDBBIDBZG@]TQ]WU^XV^ZYuSGk\W|d\bbbdddogdyolyqnzspztrF/G0M3O6W>[;]=\N\GbOcTj\t^u]qfxnyblJoNnImHpL_mCmEoGpGqIsLuMvPxRzT|W}Ylu~u]܇i~`abdfikmpqtvxz}~֚ß읁쟄ܡŧȦ复颉릎䀹ﬕﮘϭ޸ֿܼļźʿ±ijǷƵǸɹ˼̾P& &PP.@8.P)^l}xvtrrjXD*f}xvvrrpn\D`}xvvrrrnnV |}xvvrrrnn\D}}vvrrrnn\Dd}xvrrrnnV'}}xvvrppnP}vvvrrr\P3ľz]}xvvrrrN,}Z((irXPҕLc @grkP&"'b@hvv& H{ xv+ Sݽ" }v@T г }B JMGGG>><<775500B0 &#=Ļ&PFĻlPQ;Ļ_D̖ľ*PľyPDľ*ĻaDĻD Ļ eDDҡ'DDΔ3P&JTTK#PP& &P??(   ,(,5-!> 5 9!6)%1,+1,,210<30943965@*"@-&B62B95H>:g6&DCBUF@SLIigfhhh}ibumjD,S6U8^AdUk^`@gPnXnaujwq|toFoGrKpHsLtMuPxRzU}Y\чmp`abefjkmtvx~~읁֭䤍쥌朗䀹ﬕ⹪±ŵ˼̾   M*=972$ M 'HEC?9720#M,YVHEC?9722#Ma\TVJECA>823 NS&)% iVR;A 6h!]9 o/  = t"c_\XRJEB PtK.fdc_\YVJ+ xvtpmidca\YVMLxvtpmkdca^,M Lxvtpmkfc- MQvtpnOM  (0` %\\qqQ0%zF4T<^C\AQ8yB.P, \\\{1 P>x[_[}X{VySwQuOtLrJqIhFD.0\\\{-M4+t\jfca^[}Y{VyTwQvOtMrKqIpGoF\=K)͸-S8("{dspmjgda^\~Y{VzTxQvOtMsKqIpGnEmD\=6񁁁Sqqqn `Q~zwspmjgdb_\~Y|WzTxRvPuMsKqIpGnFmDmDF0 qqqnqqqn!sퟄ윁}zwtqnkheb_]~Z|WzUxRwPuNsLrJpGoFmDlB]=qqqnS.#ڜ읁~{xtqnkheb`]~Z|X{UySwPuNsLrJpHoFmDlCgB,S-!ۡ望읂~{xurolifc`]Z}X{UySwQvNtLrJqHoFnElCgB񸸸- Ôﭖ䀘잂|yurolifc`^[}X{VySwQuOtMrJqHoFnEmC^> \\\{ndﮗ䀘잃|yvsplifda^[}Y{VyTxQvOtMsKqIoGnEmCF1\\\{9/,ﮘﬔ잃윀}zvspmjgda^\~Y|WzTxRvPtMsKqIpGnEnF6􉉉ﯘﬔퟄ윀}zwtpmjgdb_\~Z|WzTxRwPuNsLqIpGnF]>PC?Ĵ°ﳞןŐ}͔襎ퟄ읁~zwtqnkheb_]~Z|WzUyRwPuNsLrJpHoFK*q¢ǸŴ±뷥rf2&"jK@Ӕ읁~{xuqnkheb`]Z}X{UySwQuNtLrJpH^@q3,*Ϳʻȸŵԩ3($ m]읂{xurolifc`][}X{VySwQuNtLrJqJ0wqͿ˼ٲ k[잂|yvrolifca^aFW-vOtMrKE0\ؼʽ?41 Ǎx힃윀|yvhR++S1%gdaaGO)xRvOtMkJ\ N80祝쟃윀}zaM2jgdcIO*zTxRvPuOVNKG=:J<7&ڝ쟄윁}bO1njheKN*|WzTxRvPP."ws -%#ṫǷcPI,|XzUySzD2ֽ;ʻǸ⶧ +Z}X{UT=˶ʭͿʼǸ+^[}XaFŽ~Ϳ۵+a^[bH β¶MA<+da^XB}zSLI,&$ i_k`j_h]g[eYdWbUaS_Q]O\M[KYIXGVFUDSBR@Q>ZEgdb{J9WSQ_MFﬕ晴ퟄ읁}zwtqnkheQ3( TNLذŴ±ﭕ朗ퟅ읁~{xtqnki\1., ʻǸŴ±ﭖ朗읂~{xuròe\OIG!Ϳ˼ȸŵòﭖ䀘잂|yurUD432TMK 930}w˼ȹƶòﮗ䀹잃|yw1"q˽ɹƶóﮗﬔ쟃윀}|fqRQP̽ɺƷijﬔퟄ읁M7/̾ɺǷĴ°ﬕ朗o<::̾ʻǷŴ±ﭖ朗8*%􉉉\\\{Ϳʻȸŵ±ﭖ䀘fY\\\{ Ϳ˼ȹŵòÑ -"""˼ȹƶòܦ!񸸸-S0//˽ɺƶijݬ.%"Sqqqn"""̽ɺǷĴŞ!qqqnqqqn ̾ʻǷtl qqqnS<;;å:2/񁁁S-RQQêPFC͸-\\\{433ļ|w3.,\\\{ WTS~{xWPN qq\\????( @ YYCCC%-U0#p>,p<+U. -CCC% WWW?(![F_\}XzUwQuNrJmHL2=!WWW %<)"xanjea]}YzUxQuNsKpHnE[;:%1 bS~xsojfb^~Y{VxRuOsKqHnFmDE. 껻1%  t잃~ytpkgb^~Z{VySvOsLqIoFmCZ:  %  }望쟄~zuplgc_[|WySvPtLqIoFmDZ: WWWpe䀘ퟄzvqlhd_[|WyTwPtMrJoGmDF/WWWCCC%=2.ﬔ윀{vrmid`\}XzTwQuMrJpGnE:CCC%ßܡ֚릎읁|wrniea\}XzUxQuNrKpH]=B84ɹŴu0%!\N颉읂}xsnjea]~Y{UxRuNsKpH="YͿɺ|d\E1)颉잂}xtokfb^W>V-V,nIsLN5YʿuSG잃~yu] :"gcsA/lJvOpL0,*?63.%" 复쟄t^!lgtC2oNySvP-\SPȦǷ~ |XzTU/"yolļ1*'̽Ƿ  \}Xp?.yqn źϭ a]pA0]WU*'%*$"k\WZG@[F?[E=[C;[B9Z@7Z?5Z=4Y<2Y;0Y9.Y8,X6*j@1faV3&1/.VE?°ﮗ잂~ytokf.IDB ޸ƶ±ﮘ朗쟃~yup܇iYogdJ@=ܼ˼Ƿò䀘ퟄzuaNYCAAֿ˽Ǹó䀹윀{?+$̽ȸijﬕkCCC%@>>̾ȹŴﭕ<+%CCC%WWWͿɺŵﭖi[WWW  ʻƶ±  % ʻƶ± %1 ˼Ƿwm  껻1%@?>ŧ>51% WWWCBBB:8WWW CCC%10/]YXztrzsp\VT1-,CCC%YY??(  @0 11 0 WWW>( gP`}YxQrKS6<WWW 988dU~tkb~ZxRsLoFD,976 WWWna䀘ulc[yStMoGE,WWW0@40䤍윀wme\zUuNpH<0֭6)%(p읂xof]^A`@U8 <30 쥌쟃чmg:!g6&uP 50/}ib⹪}X1521 H>:|t-#-"- -,,8!a1 umjUF@±朗~tj SLIwq˼ò䀹nX0BA@̾Ĵﬕ>+$0WWWͿŵk^WWW :::Ƿuj988 WWWBAA@73WWW 0 532521 0Ext/Icons_04_CB/plockb2.ico0000664000000000000000000005600610063620124014271 0ustar rootroot (n00 >h00 %N!  F hW( @ppwwpww~wpwwp~wwwwwwppp~ppp~p~p~ppppppp~p~~~ppppp~pwpp~~ppwww~wpwwpppp??( `pwwwwpw~w`wwww`~pp`p(0`      !% 3$!!!&#"%$#%%%+%#.(&/+*<,'1-,70.81/333720666831;42976?75999R/#R1%R5+S8.@:9@=<T;3T?8UB;YC;BBBLFDTF@THD[JDVLHWOLZOLWPMZPM^PLWUT\ZYsPCm_Zq\UmmmygayictttJ3M;O8P>P:TCYJUA]J^R^EbUfZi_i^n^cFeJiNhQmXmSmQp[qYsYjbmbpgrjtfwswqxszu~yvcxf{e~iqOsLvPxRzU|V}Y{|}mrw|[]ډm̉rӌtΒ}ږ~`bdfikmps{x}˝՗Ӛᝆ읂٨㦑ﮘȰİȰͳʹԷʶʹɺϿ׾ػ൥½½¹ǿõŻŸɿ±óijĴŵǸȹ˼̾<,,<!?6aa3 ?qc,61,&ٳ~vnlll ƥ~~vvnllljj~q֥~~~nvllljjjl簈~~vnnlljjji}٬~~vnllljjiij,ְ~~vvllkkjiii,尰~~~vnlljjiiiq&򳳱   @iii?Ƴ  @iii~?7Ƴ  @kkji3uuttssrggfxXUURRQPPPhkkkil zT @mmkkj zW Bvmmkko****))))%)|f%$$#####"J}vmmlk<[[NNLLLLIIyFEEEECCCAV}}}mml <,8 |d  G~}mvm6, e G~~}vvva]][][[NNLL{IIIFFFCECY~}vv/..*.****)))))%%%%%#%%#S~vv   Hv H娧uuutttrrrffza,8 ZƳ %6,< .ij 9 </ ^ Oa + q!! 6Ʃ ! L I8a : ij4? ; 0ij?,a  ij'& = Mij,  0, 0-  >oo,&,87,'?88?!<,,<??( @    !$)9%,$"+'%4($:("2-,?2.444T8/E<9E?<T<3T>6i6%j8'j;*I@=k@1lD6BBBGFFZKF^SO^TPcVQ`^^aVdddujfzlgzlh}zzI5M:P=VE\M^NZG^P[@`OdWg\i]aHjWiRq_p[lapgsmriyowpyr{i~ptMvP|V~Z^~adfipvx~읁쟄ࠊɰӰʸ˾캩ŵǸ&&&#))"&a[~}[an|kdOMQiwlUwdONLJIHHFMkTnhRQOOOMJIHHFFJvloxhSSSQQONMJIHHFFFhlaV|ihhdSSQQOOMJIHHFFFeTakkigeSSQQOOMJIHHFFFFv&ywskHFLl&vtsHGFkawwt655///9SQ1-,,++3IHHM[&|xwweS JIHHw}&xw==6655;ee4..--,8MJIHi$xigOMLJS"*@>===7755///...:OOMLO)*ROOMQ)$CB@@===76652///<T90T=5m<+JA>UA9UC<UD>n@0nD5oI;DA@EEDVFAWJEVLHf]Z}aWhhhdUl^lVr_va}jtMxR{V|W~Zs_ņp`bfilstu~¥㩔멑朗ﭕ滫ŷɾ±ƶǸȺ˼Ϳ( (GKeZYaKG(DkQ<9309\4(GEcQ@?<930/QCG!oW/\(Mc\-+064񁁁Sqqqn ~jgdb_\~Y|WzTxRvPuMaﭖ{ qqqnqqqn%"!Ͽij윁tqnkheb_]~Z|WzUxRwPuNsL|Vﭖͳ% qqqnS2/-䀘~{xtqnkheb`]~Z|X{UySwPuNsLrJcŵɿ1+)S-%#"˽읂~{xurolifc`]Z}X{UySwQvNtLrJsLﬕ% 񸸸- þŵ잂|yurolifc`^[}X{VySwQuOtMrJqI읁ʹ \\\{ﮗ䀘잃|yvsplifda^[}Y{VyTwQvOtMsKqIﬕ{\\\{?<;ﮘ   !               I1tMsKtLŵ>64􉉉¾ó   !               J3wPuNsLdɱVRP   !  !           L5yRwPuNsLﮘTJFqƶ}zwurpmj}h{e{{xډmqYoVmTlQjOhMfKeIcFqO{UySwQuN}YȰq865ŵ±   !  !   ӌt{mX      O8}X{VySwQuNﯘ70.ȹŵò   !  !  !ӏw잂p[     P:[}X{VySxQd~x\˼ȹƶòUC=UB;UA:U@9U?8T>6T=5T<4T;3T;2ږ~힃|fS6,R5+R4)R3)R3'R1&R1%R0$R/#^E^[~Y|VzTxRƶú\$#"˽ɺƶijmclaj_i]g[fYdWcVaT_Rᝆ̉rXHWFUETCRAQ?P=NUC=UBN;L9J7I4[@~Z{VxReYʻƶ±!!!!!!T8/잂}9%      j;*^Z|VySȹ321ʼǷlbj_h\eYcVaTq_잃`OVETCR@P=N;aHc_[|Wﬕ2,*`^]˼!!!!!!T<3:'     k>/hd`\|^SP}zyskqhnelbj_h\fYcWaT_Q]NZKXHVETCiRmid`lzmh}zz"!!!!!!!!!!!   lD6sniepzmi`_^yrwpumrjpgndlai^g\eYcV`S^P\MZJp[xsoj^TQ332ZNJ"ZKFɺƵ°뫔)!^N잂~yto2-,sm",%#ɼʻƶ±~!!{i쟃~yuY""˼ǷòaV!#ࠊퟄYGFF+'%"cVQ˽Ǹó캩4($!U?7䀹ɺE?=ujf"#̱̽ȸyo!!~pﬕʺCCC%CBB&#""I@=Ӱ,$!!?2.ﭖB=;CCC%WWW""B:8{t/(%"%WWW  wnk"""""$ʻƶ±˿  % :53"$ JA>ʻͿ %1 껻1%CCBB?>% WWWGFFFDCWWW CCC%333`__}{{}{z`^^322CCC%YY??(  @0 60.60- 0 WWWC=;ǸB:7WWW ::9kb~ZxRf:99 WWW˼ulc[yStMWWW0C@?!        uNB:70ͿT?7T<4T90valVR1&R/#m<+{Vi ƶ    }jS8/    _|WȺ 765VFAUC=UA:l^S8/S8/S6+nD5h`60.766         sj60.nD5ɺ±㩔nD5ņp~t $ ¥˼òs."멑朗0DDCf]ZVLHŷA40}aWﭕC><0WWW721JA>@74D95滫WWW :::ɾ::9 WWWDDDDA@WWW 0766766 0Ext/Icons_04_CB/keyhole-grn.ico0000664000000000000000000006117610062626434015176 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pp7wwwzszszsc:r62pzzwzs:sc`pwww8zzzw6:z3zr 0! #szzs x{w0:zsz0zr:szz60xxx':w6:p{z6w:zswsz:szs0 w7`x{w zszszzzr{w07:zsz0wwwwr7770:zzsxr7zw7pwzzwzz0xxw w777wz zz7pxw087w7xxwr87:{pwwr'zxw7wwzzpxxxwsszwx눣({{zww0zhrxx0xzzzpxxxzzwwxxxwx7{zx0z0xxxw7x0x>wp`r0zx8xxxr'w{w{hxxwww0wwx xwwpx%'xwwx0pxxwx(xwzr8xxxwvpp  pp( @pwzwzw7:s#pzzw:w:rrww#zrz2wzJs7z7:x{wzz7wx{h sw:sxzp:0zzsgw:zzwww7wx7zzxxwzzsz x:wx  x x7{zr{w{wzzxx(wxx'xzww x7x{zxxxxpxw xx 'xxzp(xxwrx p( pwzw:r'z'7 xzz0 sph wpzpxp{sr zz7xhp{x2rxw7 (0`         ! " ' "$+*--180":#?%!3$+<-H'P!&G,*@.#I*+N14O8.Y6,_61V87V<2\:'f43c<4d=8`?,=:gB>fE;hC;qE5|C;xG={IFFFQQQYYYDrLDOLuSNxUXz]fffyyy$9'>5HUyyytý¼3=yytýiny½%yý½ýWf½>U½?U½giý ý$2é h |k@¸h'0j/B ½ : ½C @½|4 ;A9C;B:( @           #+ %&*,-7<6"'6)J($E*$K,)M0-O30H4-X56W<8U=5[;(i50c: v2:\@8g@=qG<{HFFFmmm8F;972#@>;97 %#B@>;9,%#CB@><6'-,%#DCB@>;20-,%#GDCB? 20-,%IGDC 20-,JIGD720-LJIG5(9730FLJIG"!?>98)FLKIGDCB@>>4 (0` %F;;;F ;;; --- 3cVV 'F gwq҃oЁlj}h{fydwbu`s]q[pYnWlUjShQfOeMcKaI_G^E\CZBY@W>V ;;;:gBvԇsӅq҃oЁmj}h{fydwbu`s]rFV$$####" " " " " ! ! !,=VVVVV=T;S9Q8P6O5N3L2Kޕݓۑڏ}ٍz׋x։vՇtӅq҃oЁmπk~i{fz"  J`I`G^E\D[BY@W>VV=U;S9R8P6O5Nޕݓܑڏ}ٍz׋x։vՇtӅq҃oтmπk~KY5|COeMcKaI`G^F\D[BY@X>V=T;S9R8P6Oޕݓܑڏ}ٍ{׌x։vՇtӅr҃oЂmπew K_QgOeMcKbI`H^E\D[BY@X>V=T;S9R8Pޕݓܑڏ}ٍz׌x։vՇtӆr҄oтmπ:#+UjSiQgOeMcKbI`G^F\D[BY@X>V=U;S9Rޕݓܑڏ}ٍ{׋x֊vՈtӆr҄oс;qE,_6WlVkSiQgOeMcKbI`H^F]D[BY@X>V=U;Sޕݓܑڏ}َ{؋x֊vՈtӆr҄[iETZnXmVkTiQgOeMcKbI`H^F]D[BY@X?V=Uޕݓܑڏ}ٍ{؋x֊vՈtӆp΁ Zm\pZoXlVkTiQgOeMcKbJ`H^F]D[BY@X?Vޕݓܑڐ}َ{،y֊vՈtӆ+N1?%`t^r\pZnXmVkSiQgPeMcLbI`H^F]D[BY@Xޕݓܒڏ}َ{،y֊vՈLW;xGcv`t^r\pZoXmVkTiRgOeNcLbJ`H^F]D[BYߕݓܑۏ}َ{،y֊l|Xiexcv`t^r\qZnXmVkTiRgPeMdLbJ`H^F]D[ߕݓܒڐ}َ{،y֊- h{gzexcv`t^r\pZoXmVkTiRgPeNcLbJ`H^F]ߕݔܒې}َ{،;hC/Y7l~i|gzexcv`t^r\qZoXmVkTiRgPeNdLbJ`H^ߕݓܒې}َ^jN[nπl~i|gzexcvat^r\qZoXmVkTiRgPeNdLbJ`ߕݔܒjx1V82\:dtnπl~i|gzexcvat^s\pZoXmVkTiRgPeNdLbܓDrL GSnπl~i|gzexcwat^s\qZoXmVkTiRgPfNd>fEDOnπl~i|gzexcvat_s\qZoXmVkTiRgPfbl ]lnЀl~i|gzexcwau_s]qZoXmVkTiRg*&G,pтnЀl~i|hzexcwau_s\qZoXmVkTis~ hypтnЀl~j|g{eycwau_s]qZoXmVkV^Tar҄pтnЀlj|gzeycwau_s]qZoXmLuSISuԆs҄pтnЀlj}hzeycwau_s]qZoNxULVwՈuԆs҄pтnЀlj}g{eycwau_s]q^f]jy׊wՈuԆs҅pтnЁlj}h{eycwau_sȏ  w·|،y׊wՈuԆsӄpуnЁlj}h{fycwau*@.8`?ې~ڎ|،y׊wՉuԆsӅqуnЁlj}h{eycw xɆݒې~ڎ|؍y׊wՉuԇsӅqуnЁlj}h{fyck gsߖޔܒې~ڎ|،z׋wՈuԇsӅqуoЁlj}dv̛ox-p|ߖޔܒې~ڏ|؍z׊w։uԇsӅqуoЁlUdXz]ai4O80"!3$7VU;Sޕܒڏ|،x֊uԇr҄6"*[oXmUjQgNdKbI_F]CZ@X>Uޕܒڏ|؍x֊uԇ=qG0c:^r[oXmUjRgOdKbI_F]CZ@Xߕܒڐ|؍y֊`nM]au^r[pXmUjRgOdLbI_F]CZߕܓڐ|؍xՉ fyexbu^r[pXmUjRgOdLbI_F]ߕݓې|؍-O3$E*k~h{exbu^r[pXmUjRgOeLbI_ߕݓvʅ-O3)M0j{l~h{exbu^s[pXmUjRgOeLbdp  Zil~h{exbu^s[pXmUjRgOeyĆ   gwl~h{exbv_s[pXmUjRg6W<8g@oЁl~h{eybv_s[pXmUj  &r҄oЁli{eybv_s[pXm  vՇs҄oЁli|eybv_s[p y׊vՇs҄oсli|eybv_s0H45[;}ٍy׊vՇsӅoЂli|fybv{ qې}ٍy׊vՈsӅpтli|fy^f^iߖݓې}ٍz׋vՈsӅpтldv8U=$&:\@z†ߖݓې}َz׋vՈsӅpтMZ777'6)ߖݓۑ}َz׋vՈp΂-:'6)ߖݔۑxЈVc.:\\:777:(  @:::(I.bsdw]qWlQfKaE\@W;S6O2K*B::::n}q҃k}dw?L    (s8;S6O2K*Bڏx։q҃k}Xi;O@W;S6O2Kޕڏx։q҃k~  KaE\@W;S6Oޕڏx։r҄.X6#N+QgKbF\@X;Sޕڏx֊P]?MXmQgKbF]@Xߕڐs̃^q^rXmRgLbF]ߕ}׍'$j}ex^rXmRgLbۖ1!6"j|ex_sXmRg[cKXl~ey_sXmOyVBwLs҄ley_s{ivy׊sӅlfy`h [dߖېz׋sӅct:::@YDߖۑp(J.:::Ext/Icons_04_CB/lockred.ico0000664000000000000000000006117610062522472014372 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pwwpwwpx{ypyyy8pxyyx{Pyyyp8xq yyw9yx`xwpxypppwxx88yxxyxxy xpPwyp8wx0 xpx0xwp0pxwx0xxppx88pxq7xsp0pp??( @pwwp8yxpyyyyy`pQ117wywxpxxpy8pxwyyxwywpxp0{wppx0xp/xwwp0{8xwwppp7ws@pp7??( pwwxwxsp{0wxP0yx0xwxwpw8p!p(0`     "#!&% %!!! !%#$'%%& "**,2./3-.6(+8/0333366602934977:89:G$D&+E!(H+0G68A:;A;A48L7=]$.`2:a>Ej9BmBBBKMWNPWOQ[PQWSTWVVXPR\WXXZZ\\\]CHcCJnmmmcfuttt(7>J?KOXbgvyy|y~szARYffrcqr}+J,K.L0N2P5R6T9V;X=Y@UaqdvA]D_E`HbJdLfNhNhQjQjRlUn]sWpYq\s]u`wbxdzf|h~~yu{jln}ptxssuxy|}?2 2?"A9HH5A!s!2532*qa]YXVXh(xhdaa_]YYXVVRaxmmhhdaa_]YYXVVRRYrqqmmhhdda__]XXVVRRRa ǁ{xrqmmmjhhaa_]]XXVVVRRR 2é{xxrqmmmhhdaa]]YYVVRRRR2પxx YYXVVRRR*𯯬|x&#]]YVVVRRR(ACB__YYYVVSRdA7繷[Za__]YYVVVR3ù| hdd__]YYVVVY"/.hhdda__YYXVTLKmhhdda__YYXVdszimmhhhaa__]YXV?%$qqmmjhhaaa_]YY?2B<=F9@F=Dh:DxBBBCDGEFGPS_SU_TV_UV`UXf^^`VYjSXpW]|aaadddlo{lo|mp|zz}{|}IST\R\HVfoBV\g`lap,K.M0O2P5R6T9V;X=YA]D_E`HcJdLfNhPjRlUnWpZrYq\s]u`wbydzf|h~mjmopsuxz|~444,77-4x$vux'}dTR^|' lcTQQLLIHEQk ~îj^ZZTQQLLLHEDO| '~Ûfca^ZZTRQOLIIHDD|'xnşhfdc"!LHHDDkx'ŵjfd LLIHED4ŕf&#QLLIHHQ|4)ȴB?RQLLIHEyȟZTRQOLLHTt4 ^ZTTQOLLH4ʹ@=^^ZTTQOLL/ȴ`b^^ZZTQQLd-9ʮhfca^ZZTQQZ79˵;:hfdc^ZZTTZ7/˽>Ajfcc^[ZUh-õ%jhdca[Z4ʹ1?D)4o?@E;DqABEEEENSlFNyhhh,@2D9JARN_iv0O2P6T9V=ZC_FaHbIdOiQkSlUn]ubyikmsvx| 9SKHE(%#*;gSQKH,*%#V f[SRNH1.,*'M g][URND2/-*Q ka`[VD3/-\@fa`UHG3G<pfb_KHG]99kgeB ARN[69:pjea][[b79@lkgj@9 (0` %\\qq $OQ[wzvyNPZ$\\\{128}/18\\\{-LNVIKU͸-S9:@f}JdA]>Z;W8U;XUn57@񁁁Sqqqn lRkOiKfHcE`B]?[Z:W7U5R2P/M,K.M %񸸸- ~yvrnkg}cz`w\tYqUnRkNhKeHcD`A]>Z;X8U5S2P0N-L+Jt \\\{~zwsok# "?[J(7FbC_@\=Y:W7T4R1P/MOiQRV}yaq@UJeGbD`A]>Z;X8U5S2P0NIKUq~x QjOiKfHcE`B]?[;X8V6S3Q@\q669~2:a$.`VoSlOiLfIcFaB^?[Z;X$XY[OX?Kkh~d{`x]uYrVnRlOiLfHcE`B]?[]tNPZ{dvplh~e{ax^uZrWoSlPiLfIdFaC^E`wz&&xtqmif|by^v[sWpTmPjMgJdFaC_CJn9Bm}yuqnjf}cy_v\sXqTmQkNhJeGbr}cq}zvrnkg}dz`w\tYqUnRkOhKf  ~zwsolh~d{ax]uZrVoSlOiy!$u{xtplie|bx^uZrWoXqy|ZZ\48L>Ej|xuqmjf|by_v[stPR[$$%(+87=]}yvrnjg}cz_w $\bgfr~zvrokg~d{\+0G{wtpl|889 |xtp238q|yqVVW}NOV-.6CHc@@A :;@􉉉\\\{cfusz\\\{  "* -&&&y}z##&񸸸-S333/03Sqqqn&&&#$&qqqnqqqn qqqnS@@A=>@񁁁S-VWWSSW͸-\\\{899779\\\{$$%[[\YZ\#$$qq\\????( @ YYCCC%-.3TV_lo|lo{SU_,-3CCC% WWW>@F<=FWWW %<=BpRlNhf|8:B%1 oRlMgHcC_?[:W6S2PLf 껻1% }cz^vYqSmNhIdE`@\;X7T3P.MHc %  vpjd{_wZrUmOiJeFaA]Z:W5S1O/M8:BCCC%y:Dx&3vIcD_?[;W6T2PKeCDGapBVOiJdE`@\FY  ZrUnPjKeFaA]=Y8UQkY29[&/Zax\sVoQjLfGbB^>Z9V224\gHVg~by]tWpRkMgHcC_?[,-3^^`mnicz^uXqSlNhIdD`nSV_zz}%)= %={uojd{_vZrTmOiJeYrmp|z{}T\IS|vqke|`w[sVnPj^vnp|__afo`l}wrlg}ax\tWo{UV`3349=R=Dh~ysmh~by]u-.3SXpR\ztoidzY %{upYFGG|w?AFCCC%CCCPS_W]|=>CCCC%WWW/189C:Z 667  si^vTmJd017667)4o)4owlaxVo017NSlFNyyncz  |0DDD&>?D0WWW79B7:FWWW :::::: WWWDDDABDWWW 0677667 0Ext/Icons_04_CB/plockbw.ico0000664000000000000000000006117610062570634014413 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pxwpwwpxxppp@@p@wsw7twwsewpwwwwwwwwwxp@@@WwwwwwwxwwGwG4wwwwx p40$a'p!p04'@CspCOao P8q$%p0ppxBHpBGpxp0'pxpxqwwppp??( @pwwppwwxp pppwwwwwp@pwwwxxppx@Gpwwwwxppppxwwxpppppwp0pwppppp pwpwwpp??( wwpxwwpxwxwpwwwxxppwwxpwwp(0`  """#%&%&&)))01166679:899===>ABABBMMMUUUUWXVXXYYYY[\[\\^^^aaadddmmmqqqttt{{{}}}  +00+  %;CCCCCCCCCC;% 5CCCCCCCCCCCCCCCC55CCCCCCCCCCCCCCCCCCCC5%CCCCCCCCCCCCCCCCCCCCCCCC%6CCCCCCCCCCCCCCCCCCCCCCCCCC6 >CCCCCCCCCCCCCCCCCCCCCCCCCCCC> >CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC>6CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC6%CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC%CCCCCC'CCCCCC5CCCCCC'CCCCCC5CCCCCCC'CCCCCCC5CCCCCCC3335333335ACC>533333533;CCCCCCC5 CCCCCCCC;CC.'CCCCCCCC %CCCCCCCC;CC.'CCCCCCCC%;CCCCCCCC>CC5-CCCCCCCC;CCCCCCCCC##########ACC9#########5CCCCCCCCCCCCCCCCCC 9CCCCCCCCCC5CCCCCCCCC;5CCCCCCCCCCCCCCCC5CCCCCCCCCC >CCCC+7CCCCCCCCCC&CCCCCCCCCA +>;"CCCCCCCCCC%7CCCCCCCCC7 ACCCCCCCCC7>CCCCCCCCC5ACCCCCCCCC> >CCCCCCCCC9ACCCCCCCCC> 7CCCCCCCCCC3%%%'>>BBBEGHGHHLLL]]]_aaddduuuyyy|}}  !!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!!! !!!!! !!!!!!! !!!!!!!!!!!!!!!!!!!! !!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!! !!!!!!!!!!!! !!!!!!!!!!!! !!!!!! !!!!!!! !!!!!!!!!!!!!!!! !!!!!! !! !!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!  ??( ###%%%111444:::BBBEEELLLYYYhhhxxx                      (0` %\\qq!#$XZ[XZ[!#$\\\{578578\\\{-SUVSUV͸-S=?@?@"""""""""###""""""###""""""###""""""###""""""###""""""###"""###""""""?@􉉉\\\{BBB###""""""888~~~%%%###""""""\\\{ 000""""""###"""+++%%%""""""###"""^^^ -%%%000########################[[[$%%񸸸-S233MMM###""""""###"""'''}}}123Sqqqn%%%$%%qqqnqqqn qqqnS?@@>@@񁁁S-UVVTVV͸-\\\{788788\\\{#$$Z[[Z[[#$$qq\\????( @ YYCCC%133^``{|}{|}^``133CCC% WWWDFGDFGWWW %ABC@BC%1 껻1%  %   WWWWWWCCC%ABC@BCCCC%#############################################uuuEFG#############################################uuuDFGYY##################ZZZ>>>###############uuu233133_``##################ZZZ>>>###############uuu^``|}}{}}|}}#############################################uuu{}}_``_``233]]]###^^^+++###233###---######Y#########&&&YFGG,,,###ggg666###ZZZEFGwww###$$$######CCC%BCC(((###KKK---###BBBABCCCC%WWW######DDD111###&&&WWW  yyy###############%%%  % ;;;###%%%LLL %1 껻1%BCCACC% WWWFGGFGGWWW CCC%333```|}}|}}```233CCC%YY??(  @0 677677 0 WWWCDDCDDWWW :::::: WWWWWW0CDD#####################LLLCDD0ZZZZZZZZZZZZZZZxxx #########ZZZ######### 777ZZZZZZZZZZZZZZZZZZxxx677777########################677 ZZZZZZ %%%1110DDDhhhYYYDDDCDD0WWW888LLLBBBFFFWWW :::::: WWWDDDCDDWWW 0 777777 0Ext/Icons_04_CB/Finals/0000775000000000000000000000000012606740430013456 5ustar rootrootExt/Icons_04_CB/Finals/Untitled.ico0000664000000000000000000005600610063304670015746 0ustar rootroot (n00 >h00 %N!  F hW( @??A??( y9(0`   %-'";#3$4&6>T/>H]L`M`>M:H9GESBOUcJVWcOZT^[cdi]az   ! "&$'+).*(":'#;#;51H=R:N>S@U9I1?6DM`Ob;HEQFRUaOZVaQ[V`W`\e\_y^a{eh]_qZ\m_armmmjjjeee\\\MMMMMMMMMMMMMB; GMMM= AJMM #$(*))((%HMM7!%')))))))))))))&NMM!$))))))))))))))))))'" IM@%)))))))))))))))))))))(EM()))))))))))))))))))))))))"EM))))))))))))).)))))))))$IM)))))))1)))))))))$ M)))))).)))))))K2)))))))))))))M)))))))0)))))))L))))))0)))))))))$FM))))))0))))))))))) M)))))'0)))))).)))))&M))))))60))))))):)))))!M/))))(60))))))))))))#CM)))))"$)))))))1))))(M))))))$))))))))))))M)))))(8$)))))))))))) M)))))%$))))))))))))M)))))"$))))))) ))))%M))))) 8$)))))))9))))%M))))) *)))))))))))%M)))))"*))))))) ))))%)))))M)))))"*)))))))4))))(?.))))(*)))))))>)))))#M)))))) -*))))))))))))M)))))'*)))))))>))))))))))))$*)))))))>)))))))))))))))))))*)))))3)))))))))))0>+*))))),5))))))))$>> ))))))).)))))))->>>>8$)))))))).)))))))*"$)))))))).)))))))))(%# %$'))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))5)))))))))))))))))))1)1))))))))))))))))))))))))????8x?~<8????( @  %-'";#3$4&6>T/>H]L`M`>M:H9GESBOUcJVWcOZT^[cdi]az   ! "&$'+).*(":'#;#;51H=R:N>S@U9I1?6DM`Ob;HEQFRUaOZVaQ[V`W`\e\_y^a{eh]_qZ\m_armmmjjjeee\\\MMMMMMMD=AGKDD- "%%%GMD+$)))))))'!HF()))))))))))))G6)))))))))))))))'J))))))))))))))))))EG)))))))41))))))! J.))))):))))))*GG)))))))3)))))))#J)))))3))))))))GJ)))))/0))))))))))"G.))))0)))))/:))))$7J))))*0))))).))))'G)))))%0))))). ))))J)))))"0))))).9))))G)))))0))))).))))J)))))%>0))))).))));G))))&,)))).))))D)))))!,))))).1))))*)))))&*))))).1))),6)))))))))).3))))D1)))))))).0))))))))))))8+&)))))5D))))))) !"$)))))),D)))))))))))))))))))))))))))))))))))))1)))))))))))))1))))))))):)))))????(   %-'";#3$4&6>T/>H]L`M`>M:H9GESBOUcJVWcOZT^[cdi]az   ! "&$'+).*(":'#;#;51H=R:N>S@U9I1?6DM`Ob;HEQFRUaOZVaQ[V`W`\e\_y^a{eh]_qZ\m_armmmjjjeee\\\JJGGJG0% =LJG'))))%GG)))$$))$K))),))#JG))$,))'CJ.)$,.$)G))$,).$)>G)),).$)))),.)G))).)))))$$"$)))))))))))))))ǁ!a(0` %"(-/.+% "6MdtzmYA+ .P 1HOHS6D-<'6D=JIR59[b>  *TNV>K"2GR'*Aj>EOX"2  "&)*..-))$ CO'*A^, %FLy.< $+.............' HRv=)Q[ &..................+ !-<&)?E(GS$-.....................) '37WE"GT)......................... !'37W= P]-.............P.@.p............&'&)?w. \h-.........`..0.........&-<bQY]!:........`. ........%FQE 8N........%p....... 27Wr$ [k.......0'.......-6DD ZdV.......p0'.........&37Xh BW.....+0'........... CO/`jQ.....+ @0'............''F Re..... 0'.............. >Do^ ":....)p0'.........@..... "ISnmz|..... !0`&.............)=J|%^o.....`&.........p.....6D,K^....)`&.........0..... /CW....$`&............. /..... !`&........8N....$,.....  `&........CW....$|%.....  `*........BW....$6Dn..... !0 `*........9O....$>K^.....$p `*........ ..... JTF .....) `*........kxf..... DJy/.....-@ `*........ap.....'g.@..... ! `*........9O....)DPA .....)p `*........cp͈..... "37U"......  *........AV.....9HA .0.....+*........(p.....'8=^......&*....... !-.....R^,.0.............*.....7K@ ...........' `*.....":?Fy|.........&0` -......Yf". ........ p@P&.......Te(.0........* ! &-.......Oa).0..........)$ "   $&+.........Pa%. ..........................]l.........................0 . .....................`. .................`.0.p..........P.????8x?~<8??( @  "#!.F^nvwseR;#6^EKzJT>K6D6D6DGRHP(+CsJ%  '%'Ck'.....'*.......016\T.E....2DN.P............06J....-OX$...........0`'.....EW7 .@.......- P@p '.....-D,0R_.......-%    !&.......U_....................\iϼ.................!:_m״.P..............BVYbX ..p............@.0.p......`. ? <x?(  @ *.+ FmnG %MTBQ0$ >K)*=-F#O(P!P)!O*!Q* U+"Q,-F13M75O:4T:3c<4d=(p7*q8)u92p>:^@=\B;cB:gB?cE9hB=tG?sIFFFQQQYYYFhLEoLFvN@xJIuQPwVXz]fffyyy$9'>;K=M:N?P,E-F.H/I1J3L4M5N7P9Q>U=UBPIUIVV]Q[T]AQHVJYL[N\Q^GYEXI[K\M^K^@W@XBYD[F]H^I_[c]d[dR`Zg_heoPaTcUdRbTeXg[hWhZiZjJ`LbNdOeQf^mUiShTi`lbpdqmxbpesfuhvctfvlxjxiyUjWlYm[p]q`s`tdvbvdwfxexg{hzhzi|l~zmπvwƅxdž}ƉnЀpтr҄t҅uԆwՈy֊{،}ٍېΕ̛ґڐܒޔܖ՚ٙ7A8B6@8(vllllggggRRQPPPPKKICAlllhhggRRRQPPPPKKILD7lljlgghgRRPPPLPKPLIDA3jjjlgggRRRPPPPKKKKLjjjlhghgRRRPPPPKKLCjlhhgggRRRPPPPKKIjjjlgggRRQPPPPKPmjjhggggRRQPPPLKjjjggggRRPPPPPjjjjigggRRRPPPú53<~mmjjggggRRRPPúr|jmjjigggRRRPÿ=WjjlggRgRRRYqjj,gRRè##b*ggR'5Hm,gggƸ[+lggs1Y$Wqq^^]]]U-HHEGgg2Zúlh$tlljj$Ï#/.#ot=#ж ~~||yyuuucubl$1Ѧ9n&=ÿ>nÿѽX%'oÿÿÿÿÿÿy?)A ÿ7B ?38@6B8A7( @  #$,)-/ 5"? !6% >%'6)%:)K$K%.I31R67V< v2+r9-s;/t=1t>3u@FFFDeIClJEuNNwUIzRS}YT[mmm.?0A9IE+R @?95-)'(T=/GGCA:721UTM=ILJGDCA:72WUTSONLJGGCA:7QWUTSONLJGDDA.QWVTSONLJGF9 (0` %F;;;F ;;; --- 3cVV 'F gwq҃oЁlj}h{fydwbu`s]q[pYnWlUjShQfOeMcKaI_G^E\CZBY@W>V ;;;:gBvԇsӅq҃oЁmj}h{fydwbu`s]r[pYnWlUjShQfOeMcKaI_G^E\CZAY@W>VVVVVV=T;S9Q8P6O5N3L2Kޕݓۑڏ}ٍz׋x։vՇtӅq҃oЁmπk~i{fzdxbv`t^r\pYnWlUjShQgOeMcKbI`G^E\D[BY@W>VV=U;S9R8P6O5NޕݓܑڏZg+:#Xgi|gydxbv`t^r\pYnWlUjSiQgOeMcKaI`G^F\D[BY@X>V=T;S9R8P6OޕܒFvN IVi{gzdxbv`t^r\pZnXlUkSiQgOeMcKbI`H^E\CZAX?W>UV=U;S4T:=tGk~i|gzexbv`t^r\pUh?POeMcKb:)q8@X?V=Uґ !l~k~i|gzexbv`t^rWjAQQgOeMc;+r9BY@X?V_h;cBR[%?)IUR_P^N\L[KZIXHVBP2p>>N=M;K, U+:NBY@X?cET]ޕّ%>)O(D[BY.G2ܖߕ`lP)F]D[';*"6%xdž P)H^F],D0#lx!Q*J`H^=\Bmx:^@"R+LbJ`]deo}ƉIuQ"R,NdLbΕ  iwjxhvfuescqap_n]m[kYiWhUfTdRbPaN_M^K\I[GYK^PfNd*?-;cBܒې}َ{،y֊wՈuԆr҄pтnπl~i|gzexcvat_s\qZoXmVkTiRgPfz  wƅݔܒې}َ{،y׊wՈuԆr҄pтnЀl~i|gzexcwau_s]qZoXmVkTiRgFhLU^ߖݔܒې}َ{،y׊wՈuԆr҄pтnЀl~i|hzexcwau_s\qZoXmVkTi5O:EoLߖݔܒې}َ{،y׊wՈuԆr҄pтnЀl~j|g{eycwau_s]qZoXmVkPwV [cߖݔܒې~َ{،y׊wՈuԆr҄pтnЀlj|gzeycwau_s]qZoXm՚V]/G3';*3M7[dٙߖޔܒې~َ{،y׊wՈuԆs҄pтnЀlj}hzeycwau_s]qZoߖޔܒې~َ|،y׊wՈuԆs҄pтnЀlj}g{eycwau_s]qߖޔܒې~َ{،y׊wՈuԆs҅pтnЁlj}h{eycwau_sߖݔܒې~َ|،y׊wՈuԆsӄpуnЁlj}h{fycwauߖޔܒې~ڎ|،y׊wՉuԆsӅqуnЁlj}h{eycwߖޔݒې~ڎ|؍y׊wՉuԇsӅqуnЁlj}h{fyߖޔܒې~ڎ|،z׋wՈuԇsӅqуoЁlj}dv̛ߖޔܒې~ڏ|؍z׊w։uԇsӅqуoЁlUdXz]ߖޔܒې~ڏ|؍z׋w։uԇsӅqуoЁ4d=;;;  ߖޔܓې~ڏ|؍z׋wՉuԇsӅeu F+<-ߖޔܓۑ~ڏ|؍z׋wՉiy2F;;;  Xz]̛ߖޔܒۑ{ԋdq;hC  --- ;;; F;;;F( @ :777:\\:,LYcudw`t]qZoWlTiQfNdKaH_E\BZ@W=U;S8Q6O4M2K0I,D v2 #:-ònπj}gzdwat]rZoWlTiQfNdKaH_E\BZ@W=U;S8Q6O4M2K0I.H+E #777UauԆq҃nπk}gzdwat]rZoWlTiQfNdKaH_E\BZ@W=U;S8Q6O4M2K0I.H v2u΅x։uԆq҃nЀk}gzdwau^rZoWlTiQgNdKaH_E\BZ@W=U;S8Q6O4M2K0I,Eڏ{،x։uԆq҃nЀk}gzdxau^rZoWlTiQgNdKaH_E\CZ@W=U;S8Q6O4M2K0Iܒڏ{،x։uԆq҃nЀk}g{dxau^rZoWlTiQgNdKaH_E\CZ@W=U;S9Q6O4M2Kޕܒڏ{،x։uԆr҃nЀk}h{dxau^r[oWlTiQgNdKaH_E\CZ@W=U;S9Q6O4MޕܒڏYe5" =%Tch{dxau^r[oWlTiQgNdKaH_E\CZ@X=U;S9Q6OޕEuNDPh{dxau^r[oXlTjQgNdKbH_CY0A.?3G;S9QblWgh{exau^r[oVk3u@1t>J^Kb@SK$>U;S)!?&k~h{exau^rXkEXNdBVK%@X>Uw/ 1R6WeYhVfSdQaK[Lb q€p~m|jygwdtaq^o[lXiUgRdObL_OcOeDeIIzRݓې|ٍy׊vԇr҄oЁl~h{exbv_s[pXmUjRg$!6%ܕߖݓې|ٍy׊vԇr҄oЁl~h{eybv_s[pXmUjל':*.I3֔ߖݓې|ٍy׊vՇr҄oЁli{eybv_s[pXmyS|YSZyߖݓې|ٍy׊vՇs҄oЁli|eybv_s[pߖݓې}ٍy׊vՇs҄oсli|eybv_sߖݓې}ٍy׊vՇsӅoЂli|fybvߖݓې}ٍy׊vՈsӅpтli|fyߖݓې}ٍz׋vՈsӅpтldvߖݓې}َz׋vՈsӅpтMZ777'6)ߖݓۑ}َz׋vՈp΂-:'6)ߖݔۑxЈVc.:\\:777:(  @:::(I.bsdw]qWlQfKaE\@W;S6O2K*B::::n}q҃k}dw]rWlQgKaE\@W;S6O2K*Bڏx։q҃k}dx^rWlQgKaE\@W;S6O2KޕڏYf9kCR`dx^rWlQgKaE\@W;S6OK}TAMdx^rWlARJ`-u;X+;Sۙ    aq\nTfEWK' "?Vw\evÃ8KLxSgr=O%yψs̃m}fx`rZmTgQfz   ozߖېy׊r҄l~ey_sXmyޞߖېy׊s҄ley_sߖېy׊sӅlfyߖېz׋sӅct:::@YDߖۑp(J.:::Ext/Icons_04_CB/Finals/key-grn.png0000664000000000000000000011153710062624674015555 0ustar rootrootPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F|IDATxi]uH$EJf<Ʋ[RKv)'Tbw]IuRT*xlkV(88@g ǻ|{/H=Tb{{o^Hb>/3w1;u̮)pu0בQcs~~kz o}#l 76~zד~pG.?[n~kz)#^OM5&v} f;~5į]8n0O5yf34z'Gʋ̼9̶,zMm>7/!`^k^=0w0׼^F{-` 3?;7L7^ ڀ#?N7^?Q o`u';õĎc ۰y80H? ~okCb9`sy=G @fߵf_a"0oF >ϣ4&ݫJdT>G7Ho mE"9?xH/c+t1ocmmC8gwL 'n_ 鋮…kߵ{31z^sf7p)Ö0{A6=7Y ;CPr]d9 _%㓧t}p"\½kH^ڳc73vC`x=x8y\1z6{?p꛶>Qa[Hgs'^"lȼqglʂS _#f;fX`.Eѓq;} <;7ܧˇrCc(F4O¹ sw *héOOgtr-!DgY9$>;`lThǰNF.39ӂm <%M)kh۟ː[t3CDQ?%Yg8NпPnfJs')ruCYW8ŧ2 h h܌O'cѢEu=t KJW K5;Vgg%p~f.1/S\fd!3E?yh3HM͸K)%B@+R^2 m}7z>{3VJ0j.ux}yl\;o~_ w^WXxS/, ȋ dCM-#՛)iV]ƱQSja gXdA)# *]V!x5I?sq<2WABBi= xm~+?۟O<댩|U ΌS9-\j "l'eݙ`cC?jVgk=Y8M|V NbF2&é;2+aLX|7 8Q{?xGtx 45K$܆_􇥺Oݶ2=5+@vMASiT &x1 =vlPW/Ť\: оO[Nf:աcV t g*7Ƶ3)]\0!2#&CAl+O~9|wݏtW? >oi>+ziDž0ަ[7-`@_/[xV(RB6 udzoZQSn~{G;鿘auwawRBLIn@F ]D%y߱4>?ZV]n o܃ ;&Ç=>NM4> fW,S#¼%j{uo w68$SI|>6\&;wXg#zՃf}Ρ4Q}ld4פ[} rrJ- MOg6zT + %긓Fݢ~2P) ʊfmlKI ikzNØ`Xtf@-y5+i܇ݍʝȮl}7Y>0iFT~,f :C?pRpaǥ5x&}A1FOUHb@3MGxsMS ZN~CNE/ҪԶYZ@3ZG{H;:g:NRuxP7G<JƞPds/? >> "#Ft`*SBwL`[&>j| =ז_۠K M]%m3?ݹHC)uC"NO+99doYq_,^j#`-x"iXz*[]0ЮN0}aq[iubAƋTZ1cO9d1&d {0~7</Q8*pH p )'7TdԅHeMW}}`h`b|/ ba@`:n̬OEaֶV#[쟱#_kmumn_[,karQGR[!Jw`ˠ{=R =Sж`@N vd8-P??JF2Mm7-~% ЋB8R]H98N?aSzb&ЎOe4n!\3HSpfE}fE~U۬,#Ck$t׷i9PB?yn'6gw',|#+jNN訢(6?rY^6P ېUck~R(ALhK*@ۅCO5҅9<'cn)?"F'e3wؘJfHt&=Ձ)Ϣ+c|[B^-r@.|O0I3L>'>"l mL 0$(s{Pvz { pO& Bh׎?}졊^ĺB]]4ȕ7l0i򺟷/(-{ ?ܪ"J#xvhs k}o:cN,L.=cȳO? xg=Dk:`6>jbL~I۪6Kn@; &D&OSe(b }Y/8RyӰ6Sˠ˃URI$CRw`~ɟoL;iݚ 2C7`Hnx0v1:%0>`ǡ{KCRp;VrFs͑y Ơb)U#UQo{ tHkIzd"-:،xO)x+ADQ~_2G)(vYnwc,Ӯg 'g89h3WZ6]WQF1]I$YOεlCc1ۍFxb'a5Q?Zp{~i{1$ )ψE8R-)(DlsFLE=YX,lvDPq41&YlsG3iI2!+13*fT>=Qzɚl3"sQȥCCM/8_ZH0vW\ݶpulȩX0q*| b a"_d(ر+1,0(p$':mA!X)y -NY m +ClʕiFUN?<\pq(K_`S= hiH]pwHqiewMF{"M?tg+^axm;konҽǢBk8Q3:|~[%^G,+F,#*R@9,G$N Cg`H[L 5t`,ϒ3+DV D)G&m])>3|z!SaLvǻ7- ;s/o~/j=@S{=;F!GhӣD&ߡŪ&,0∉ŹѨ38F SҝCVl~vL!C68 :50 ] @ q-#I0 (*REs Fbu0<.=YITL[7aӍ?\{־bEb8X~($]RbNQɸ-&4TsӉ~X%DZh (S]ylؚY33h hu w캖BXd(pCx'a@Ò|TЬPCa(t|诮n7nH3 aء|8l=q~4[QGnW:P:~ 8QJGR ]]H7'LS;~LI222 :"jEi0R|0/ipDTHO ZM6M (a?tXAN<ʪIǖ LϡZ}k)I6i2A}M3Ky~:,έ bMZ6” $X3`Ϋ^5,tkg f$hR'՚ n5r F3HmR."oI%z|& 77tf[Wȁ/T 0ũ'h@bza@IH2{ 3t@ۃʾ;,юtC-B,Mլt;\lXe{'gK:ē҇n( y^4#(FGen! hCXNґx7}{`+ DixAelpg RˮmK}"ftpس@_"u)#$Y&`8 4,}. bF+J[Qݙ>О5F? cjSϯnMo*꾭56] S鐡h *;.9\oPRU<,t*U hShK[y4$2J`L(nPrpU'\B'eg^RrP( 1N:L}/b%Dve6;kG :iJ!1d5˾K|@ ?: !ԾƷ5FČ -,޲+{eq%WLb+ʼn pC/o5Rmei&4Rc茿2@*4 %8ˮc! ^rSFjg_͒SxEoYLZx5 τ~+* 19c4OI.1D/Ah-KX ULGGI@ >Bs,ib`Uj\.2f̝x)T;{rjf>PԘc IT-(E-cpPUZlkC)eNٔ(* ?G5^C%:YqAODs{H}}G,!Bw`4;VSC_sC95+Eђ^:|ל)G  $ZPLCDcos `Dϵ0D$P93hPLJ!TN@q߁AQ| o 4# ʪU>"HWnXFJ43VlVbB3dC7aZ#22s:}@1)}U&III/I-u7{;kcB`I̮@1\va8NBH–7"ʾg&'!#ɄmIR7`6zڮ X鯸$n5)vUV7LDœ{x=iQ :$W֌c-6` 嘠=lf(X>- eCk#a&e)&bbyr68\D?8qeqB*Ut>L;Ev%7K=RbjGBJil~)>uR5; 9T`r luԅȯבeTGZLft̃@@OO4WPI ڎJϘX dJ>o 4^L^C=32ܼ|7#.&{ZC2erR 7eRލY|bEEX kXXM;}_IƧ.%8SYu*2`*Z/ҏ(E~Aΰ9!,ƉKMf`($oz Rq<O!;̤L(2_Δv=" u 1VkLj)x ~;x $@u4f~ڢzMc×jO! ]v@e[@SDP$#I0)ӱz6Qu 0ƛtjd?H%Bz % N = _ 9, El&#ZhHJRڝFx΀Z$b[D[\%23,лZYD;o4#&1] M!jm,Vg5Aa(ŸYҨ_l_Ven45@(يP_<}jr:2-X(]?˵pTBP(& ^Rzȗ,F@H#YzJD[mCjdf; f2=PA$#1tag6!K,%t\a_Ȣ'uJg+-0ibp[ µL ![ Ğ:]d5MWks[:n~pqe[`e7{N Q+a6[+qL)coN:hĒ 0M4,Ubp:Hȿ fuZ@*'{^'b?,8Lί9r_1iFQ#J+jAZH{| &]rr`0ak͛ovǸ*=MJ}2dVd/Y>e8] VwGH\5\,6iFpϬlC|$]Ld=w%Lܐ\QobcTP&3ׄ cX;w4\62'MFQVxA KdbCUNU%%5)i#+~2C 8J)Vl@ UXW1V%͊4wsVx@viTXFߕW2UZt0a\@{ŇLdڢ _móRh5$ڎOĥ.1X-< N^FԠ"%&62/ZjD.FŖ0Ps7T TocyKLEؕA۠\T1DǶ9Ƣ=f[O&1 PD,m.a3˦a!1F!Dm@mg{ cB";iYT2N O5Y!ͬ܋XXi+ _K G~4/g\n1Z 4 @fdB3PH YK *&!SWH!u#a,X:nJ83tJajvt(z_h*&b(IC$sb>Jt.2+ Q$eA=C Q9Wu,%ِgedù߫i;%WƱ| 0 <_K)&"Et߉$0Z x7S놲6:=xzUaYqreoQ#wW*1*{ #PJDi+mJbx!VacX$e;lcRbڥf #m4qsR\&FQyq"iJ6MԔPl5(8dV)cY=pOBV|R!Ůj'DZi?#e| hLފ&2q596K߾P=ufT3n{i~(x h#0I\.{-Q/"R {FO5|{{UE Y8䱰0g@(ko=1YsVe:͉ kD=T ļ2L&5U:Ca8 s 鰞J3]U,_;SEzSZz"" 7wk0M*V X (48D _IW! T:*dфa۲Rgw=y+CNA/ ~bV,´P@@Z (g aYTY-Q]DF^pE\x >#؁8}L*êu+nZlܶW] n،-ڌ+wl-Z[$=ay$4?-2 -L1hU1ܮ)! U.K_4:_>zm^n ݷ]; $fՌazi8xVFeUS0YqdL1&="3甔Mx}uͨ70u<9DNG52`%WB~lɃ2u߀}<݅ġlqy8tųg<}m`ݦ5eGE,ONA"v^qf'E'${/\j黪œ,͊bWNڑ1ϩ-U,fےvEh cq7 Ԫ,X8D Dؾ2_'+_KP9>~_8C< /bSGO>ћ񞟾 [߄+\P!+8F\& 18q-^$Ҽ դ)Y!ٰ^O认@ݥ2Dn N(th,dYR;( H92J7N7K __W}x[3.uX.OOŝ?u۲,*}+WBM鑤BzYXwdtKu{N@Vd) A1Py%=N6)́ͦP2&\tʒ{ ~=>?Ԫg,1X0ׄɒұS£>A{]B$^y9;?quZ3s//d* GH\{ RkH?k;- F$3=RԶ/BI وy谣̊g燧s՝.TcTJʼ2WY4VK[[ M S_ML"iHN3x[z)<|uQ.}=GO7}z\"x!%7ϟ4,:ltuQt> :yhs<2Ju3 Dӟ٣l4&*~U2 N&h 6&s@cHŴMDu|)؄yrgŃ(z7|'C_| _9gO܆kͤ+%ҡqy -Fjuv4s-܋7;0vEg:c9]||?[/%<.\|m_ +7j4_NȨos*4Ȳ(BEV#/$jcJcqO/ȉ3eJP^  6dw`siJ)028ڢs9BD;y$~kxɽ?2)]ݥ_XnEˬ,\6a {*)+#&kDWcN PzlDPg֡f{IWekJLu1ϝqTQ=/gT=]iRl=г'[{_î'bG>|~.=b(~ѧ0wEucNj@b{3 @ Hz p*1XMF$a?9i8-^t&f&S -K1̊cѾxskϓ?3xR%?K>uLVϯ=9N޿jaq]8JjG䜃w D_8HQۯaB6h8>0~3lzCD6>gˌOjh q(4I勒AN:}yz|7 ׮pv=-2JX*0z^tra#5Ub'|7~wlm$ eR+>Q0+_x?O?,.]o_Ǒdž`h$?#\NҏSٰ5# dȸX(Tޫ0ܺACIauL)>Jes0}씥aD4mѭ41lL!;€SNu<WN|\_W["KXǔ70VD$^uLK8K CˊFT ] U={S!3 1O?KaҒ\nOsb71 m {Gc&AGG l.܇3'x>vCxoą.9 #BBtLऻM^lB%ޘG>1TzŷJ| (J;(@9]R1 !Y,13 cJbZ,]͉L(5A6l,Awy9||uw=%mdtihIzfwq-*-F$W q=u\ZbPc xߞ#@dhѨ3NATKQ0D>S(4VmmrTrPv#C{k|t#{?Gs3̝"˾w%@d:K_Ǎ?wq{;xmH4mKeL dZ1zn]C l nWs3Lu8d1M>:1pןXS}gxο6KzvEC{փM2B-;+RnΞ*cc$NJTȔH.~rNqG[pS"Pu-vZ|] Xn&̓ʂ)#I1b+x++ǧ;]_9' :`M傚-fX]̚Sҝ"d4̡Ѧ.ʐEtqYJiYI$uv.C0rpx5~,8 @ r\#%o=g|_8EzxC KJwpA'hѫv!YrǧScQ8 Nc,e*cݓQ9uj5MU@ @Y8b߰N IdNi/>86=,I<`F+EN=2oym=(Cail;#(]Kϩ *!6jH f4~ [(=hzqBZ@@4?ux8yϿc??]ѽxoĹTb,|J+ݶ4e..EKpt2wB>f5bsC7Ӡ5f`$I@u?FE,!m;BˎaiBb@( P834ۃ 9~v/sźpg ,6r~i!B/#kRnMYLjphfqb7h ܦu2'A)س+I',/&p}K/o?W^a!C4 :F+KNv?ɖ"S0C'D'?pjZ燃o :O\ڐA 2h8D7?xx]xm]^ާzPe.?-GgЧR{0ȹO3yQ䶽R-a{bw<:@bn>L mJ/]T`2O1%X8L%'߳5[GM7z(v=:%FYjUy։D— bЮs" W6Sfޏ[>r#,[2KxY] 88a7f̰az|Sw揼kRלfAPՅ 0rISC9f-^~Fwc\qt8&ZG:k܁{q:^s6 ɵI& `I1L/áGpif=|ݕI1N~sA M:.^7z0xf^!Ke;y?G#$`;:YSEgp]\OIKoyks[m-n؍XetNIJiX4]]iя8xrN3kWބWqcѬR%a ?k#nEyvctN9¤u"VXƐAK]Q 9iWO`ђEظ}=lc{hVa,#j}kcU+vzM0[6dѮ[ p &u<#33V}+zES=4yje-]k5&#^?LmBx+M>r% hưlRdg8k][13>׌,[2]krߟθ+oBiJ~^+ZqtUVb hR?^b>XLC \@T`swpohv ;eȆc  |/quxצkvzM.b "SҼ -٥W,u#gDK“*:D3 f+˛J4.ɩD r0ة@L?_?/Rjaa^mbf$m3yaOɯ]7 (v£&@E,8'Szf?q,_lN.o=8Μ8hy ؈C}x :"4̪бiV.Ivt` mزn c9N x flZuı'_=gtN plV'5 41g ,:, 3Xj9ڹK-yp|GԾ&8'qӅ:| APA0%3z&,]0ͅsvaي8wnZjhҒ (k/<_~'xj?n`+$(qQ$sndpkx8!7cݖոbr,^x6 ξb//=g߅{/HgW,/o?EKfS$/,NJZje,kt_؆Oă򃷼>ߍWuN8?Q#@^*͌ʾM\nuq|{ģKٟqb~؅ m͝rYDs-[jJ;pbv@m? Gwlk6`͕t\:;}]Gx=xكxa:K *m ΊMMFw ^iP BZkذ  >x7N޲r@.U&H*97$]k2bX<4JlGh*LP]y6l_7o =3G_>/NjƝnjݼW-åK;N8dlu?t'  ~C1 \ Ffn.EgpkXyeBm0KZ  lvnL`v_MDL?2JJ,]OydG}K_^n *fe ~l;j)IG2 ]$ֵV[d]OKWo9 Q~xq\ĶG}w>hCxK$b^vJX pŚ W/k\.pFShQpx[W({v@; Oi6? )9=rAXM6/@: Ď۶cuWMB:r)Ă gBdÓפVv VVjX.8֪qvs _g9zaLPB0߰?WuwOw󛸖\moŠW B&buƼ$,]hRACvX!JM$ %-s"笵(&egt:_ zэ06=LGl'1kqL1z~Vj0SϢ"T3{^=-v(YjKIͲ&kc=k &&wauG|SFTϣ4p!@Ђoך@wh&J3.@%]6{|-cź^k޻ w=]0 5$c+Do AlⰭ0ŖֻvTp$?bwO u4M&L -ʇ[d+7mܹWߵ̄tby.b-~@QMwFh+OkIկ#+LOF~deE/gFM?@{"L 28lu npŚiKC;醍ML$A*}3:وBԀ//oll#&ɲ3Rr2!?bV @샵e0Z-A"K;Nnx4seuw)1`qO]+3+xtæ G%^0ŸM"L\r'%qaxOH)µݹ0|j gK )oǻ?q nZ3ŵ'ŖxK#|!ݩe^<ߘI/0t&CMϪPEu%'j4q s3 f.NnI_(w%ӎ/]wl5۞y?`Z 2G }!;"3o]XЍFʣMɇ6+UQs1c Ctf;u{w3&T# 6_{Ltp`棭!ˍ"zԿ<x@m@l0]]v]`3G8PL ү3JGuN!-`$ǁMO"1H'e`-ك~a\8?[l1ոW* 2:qw%e̘GDYC z~d~)2 1ͣ_~YԞdS3i>4M^SëW0|G*RL9`{?w/<ݾXeUIQ2 ~ՠ٭Xm)ؠe변fjɃ XAP9%%d$)SSWR# `'&b bό 5NOԬ_+ } >ߏ ׽7kpoŎ7f,.LlQŷfO.uM45]IUC##Ʃķ#۠sx(Ü30Aځd)'3Hxu'Ӓq߹sn"PkfafL &Oq!^%3"qV7tREŲͳT .GcHYD(ќ#a$jh ArB敽Ċ99J#ZΟ.~GmKᦏ_?u+Y!WV-0x:x,d ^qrơ#E(FLc@ՑW 7D|-7?wPUA {Y@ecbDS3 *0:%$Weĕ;7ࣟwr̢\}VݎV,J KvDƾ%#w4J7!ʌR9-Tof Ú\x0Ԥ+j1H/0B,ʂk0DN{k߳`-[`-Wvl}Sg/pXֲ!Soź4ԣ:Z0[3 Q8Q3#TU4?&Lt';~!KuBhp\Vpy 袥p7W?9c7ݸxGwԁ`^3/OfyQe1ЪR]WlxS$Tk u()'/&>?No-{UD2##SWZMChydB=4WY.^}=tyYWk#woǭ?s\Y+gd'׆\M;˴tWA܊ > w" Y[vYOਉ"l`dCҰ (VeEG$:f΅%j<ÿ% :( 6:ie#04"[Vo\?n0u |aV亰 X6y@IʿSц9,>hcvRfvds3Ls[@˛?=Gd$=|9>|m hRY1);%VmX~f`q]o ݶ ͸g߅k7;*ՉH=Qc6 L k^rT*t<`W2q,'FA,DOgas gA5 R|$),*r˻<~!+3 >X"U b +OށW,!}b.#U-[7}vk|Ҹkb-6U4xL~Uڍ F=~"LI pJjsQx"<XaUio߇ ږA[kFW"͘z3xB݄ V&cG;!/RFH'*w+^[?q#Zx/3Qf +p_ܽmv+4|#|G_'t{^~g&<bf[@@MQQ+=+'SRRgƭ=#0͓´ZZE&Aeu跘,kWY /=cNk $Xtm_[~:c`MlŲYB]N׾VtS8G(ܦh%5~pe\Сige¡̞)Y`>Vp`ҟ&(b#id̴;31 d.܁XXCb*-Mo)kn][^&jYڊ?v nNڼ-whc*"5ҏJcRy 1Ȃw4nA\aإ}Au\P1Y!I@'X2d(ژ@]9g8 %_~q<'*7ZNj; 7Oɦ⥋x/߁ކ'4^^\_d{3}vkp5lR7c˝N]Z%[fbRtV!tİ(]R`K'EE3^_w5%#=P2bIin`XBpY-fjl} ^x%zx/^ze8p z]IHMܛ1,YKXWĎ;껶mǪM+p]|<%rϤݝ^(CV}o7d [&6{Z s I,FCд"Éby+9)U^}6;˭-ڍm8.B f59+c !uiI Xin]8QxC8.\;zr|٬57R-ZGѳ8sU;yNlv`3嫖aX XwVn붭6bXin]Ui*=ZoggRqK6?|ev9wڢBf<| Ojr5[4Eh9~'sQЬ'ٲY)Dy*DT0Jrf2B82ԃD 3nۨ~ݼ.vrӕ81uG}'qSë'^-31\fV]k7ƺnZ\yz\yzٲ 3 0,sPPA&XD,ttw̐3M qr(ٲh^B݇VoteJ˙Pԗb5]f'_XXh0'g 0.ǀM pH8%f**aCafff`qA085t=9%Kd5O&Tlm&i˲g;w3{GwQp@, [,k82eЄI:MneןRH1\H6QѴ$1GčC4X4^H34MjRґ`;[FX ,HJ⡹f1;O̡u@l.9/ #LgN7^T}Tl{@z<m~&t<.xG\Ĕ kȑG^Ijb,v) NEYʞDDd;aU1si%P]J %8}O8i P i6\|J %-=!#TvM[P Y2Ƶסּ*F5j~qtf(z=S]mV#9m`rURۣi&IuRNtPSO 3yh$;KA$P knv蠐2nxCeʒ䦪sY.t:tL2P˘e]D͵n?_0r G֭;=OڐUn|= P[eDV@ޯqhH7Ȃ97-v\@l"\xD7Qfz$ !|La]{2{@@Rd%'(\PQS6`! =4Qt@iH4Q6Ľub,&YB\AȵjU@Iu6T `ρ$\$f!_sA'HV!tI.oh K=)-FZg-Տ9s<5 =:q~~{9 yWOӡ C"#QdhQ)5 %Dy'ʒML= xm ?oLeF^C Z)ufMn:0qaլPDq]{Fz@T%es|tSbOE+J'(f#ViG XYA֣VV{c%2w08^tRZ*iyX7%oA/6+CS^ p]4LAIvd] J/фeZ۱h PLDu4Βd2P1mrTMVXKnI(:Qcp-HoHnŊ`NBZ< _~n2h.8]uUX{&;FQ!  4cyVZaΏΊzҊa`YK#[TtoB{>URY^qDF]g)2*HV 1; gatKPYPe'je6P<ꃈ!*Z'KwMi@:X|cփvT!2; )|!SHuCQA7 'Afͣ)G8D+%PtA}V9r{x*XlH6y' n:=(Ee޶* /ߵrp$6Fw`rv{oTsbP>d%\GE@;c- sPw V:NC _`UG>Sst 9-%r:o R.YHcPܙ:BP髰l&Ɠ@˘j]MY[{SE[tvJe*Ohbabt/+$mYQʂIs`lv_tC1f6|(6>"I34]ԍOrŒRjPĭI%iM-"R yF!F~?(4Vr[i?r("L@Uyy/8fǒ5Tk$*-@ǣKTz1N[)44 ('j_o[kS,SNgkD}Qs=ಮvc3Y8J4[ܽ@j,,MB $˜z{1r+@%./i=bR(,`)B? Wz%,36<ֿ: ^{ǥTmFCIyV!Phhdz|st̥  jWP`u"ewkEZnʅlF]Ġp! ΪE$ēp2ؓ+Tkǎ2!l!CPW6I" 8^ In82C;쌡t߫W3 fN 2r %Wfd\eeFt{`MKekś`X1-L:6 xܸQ;pM2h:Z{B΢U#Ѻ |T=}Z2ƙr-`Wif3Iꇪx蔙 7 ֎H[Jf߇7QqKpsЍAޭpv")Ry1EhE@we24ĢSx6u@UVR޸t"lxns5wRȀ2&D)oT0ŔJ c22$JƵcʌFΪӒa&!*UٔȐķuZLd]Ig0)3KAE?C/܏c[܀`п_xIu"`R톰4N%m2(ֹn18$ K;$bq^"ɽB*{v^Lę{'̌bDQK7`DLy:ڬF&ZUII⾅sa,N ٟ n(A./ sj'yS*GW)bj(s|t&& ń% ـķMi2dӇ S$=w7#/eC7<|1LF{]1i6PׁPPYYXcᡘ6 co(?>YǡMǂ39* 8@e"Qpn>&IM<Ԋ>0A; B%8Xdz^qK=x-ќmTz/ ԯz<"~os^ _2p.dGAn&S#76ypEY|=bۗߺCgPd-#9{!ӡzY⢝4M1f u64%z~&`/&6qRhT֎E18Ubj:.LC='cJ6]Z&hQPZlQ& Ǟ<=0$$,i+E;Όb^TB/E;;-]~Lo mqi ϡbIݙ{5uOb'rے]Dj^&&X+T\Ն '[TI{OHͣCD --T8_:[R2dg-ԚN|SP:bNupif.M&a^y޺1j3([ >wpU#p@f.eKqhs$6lm4&6* JK VoތW-)ƸI!*>k#htm$L2'Jƀj4:"L i`]B D{{.f*'NG+]TK r,ƏqQaimj_y?S;6_Lj 586lXC(vi2 4I1,J(.ŁL@`1q=-2^-~iێg6l>c}C[+%Pv $0d_JBU[[nSI6rZDH$ lhd=3Ggh"`[:y,(D#APCe6dqVxJV 88ŗHʪM@P ӌ pڰab^܋qwڞ;"T_5y CEmTp.O ?;| + n֑`_[zQ%"'+!K Xt5XpT9n̾.6E\g_VXwP*.ZK1YG83'_xv/ٛ,|K$| 슑J 2Jaj-5hzQ Zˢ㯻q+VuV2d'CJ<w2?t,85V61EvE,]+|qCA%:?aA5C떥]nfiGg/=D@ />7<VB.ߒ޻ 9GCvNm u?9G%NsVYa cFiQMsHqH(8v[o̮?S.d"?ެ (zRD/j>QNnB4oYQ<,tV3gNx8 `'Y H]XBe= S09I+#n{2wPz@p%VmmZ.I ԠaN.;/Y4v(Xv(M8_D1Ԍm2Sp X]ёa} t@)咒ۙ}Ppi<CMekuz-+2 ]BU,!Lg *X~DUi3ܠ $F-C<"<1KpV?36L)b# "Pv$S?"An}7/RugB(Z+/f"Je Wsin$ÏcNB#>$< ) > ՘gmR+# IO5v!蘷sX%7 怫@Z`&S|L#KҮHwKZ?(b+=G 0$Y+Jʟfァ2ef6*h 9=m;<3Δ/Fg|sCq0w]6[bgB>qx]9_<ǒg2  &SP]9def}PL2L`;4UyTivp  3VTgKOA<|L>p95Iؓ_z&B@Q4٧H) "T@epqڂ.6tx)h1X#O>RfG\I@5:iZi>QI/LW,Әs O%0p&*YۉTrb3 ]wDLهqEVW;1l*\yzkK:h2yA;@Vt |pʶ8k50qEjxx  )-HzeN̕zU%iY|,1B|^Cॉ!%x .z %%n1IU^3P45'ӖTT*0ó[ ǂ}JuVd<1ϋDe1ʀKa!kڲ 71WO!}u 6jS&_'Ce}^ ̵-/:nR¤^_|c9eXJ*z(s7@D*P i<"qॴvVWm-&ԞI&)#PkO6m]GC[oe^ \v(`#"WWIIҫ7?8G,ĞxkwNL2pfR? <}Ёn (`+sak2Z 8VSY*fF_vFdy3#w&{A;F1u,ti㪲,W,u2{F-Sb *n#]hm-R;%&jbO$F@%1KWMr!I?yDN6O;DQF?=eTG!XY1C]Nd٫zT$RߘU;KGym+G:tD7$^#dx֔C|J2>b4Z̏>7$Օ=Ke-!Ȟ!Vskk(}ZKGqW'Irp>o"M62 T1z'#گ-Gg!UqT޺NT4y(e&rSaUތItC6|b)p< [,dЗJHMi< S*y}X;wCxYHy`ϗbWV ?tO_MIj5 75 < -F (?JCOwfisr*Alܸ5N‹?Nts|[3I?v n5;ᚵ)P8U?zUap9OD&^#H5!?{bPKre!tTR|]pT9حb{oC0 c[T9 3g$2WO#'::HҸ|ppuZwoŎb+kAl(0NmR!X0E,RIз(Gy)%Ypcp#f%VȕgPJ\)nEh)VN9!L1(eâ(<9,UdȐu سgq38ى)ў?ϐ|2bM7nĕ׭džknjݲ ;߷5X=Qz: $Ej#RI *eN i -mK]Aw_߳7+^R*DFhazj55q8B XR'b݅k1.߰^=rg_&"&~.Co_s# ^kz-(7* G腧^ {77 kzHl{ÊN^?&i^d0 kzl 0n^kz~̢f_&p?m$ M5$~>\f%^Yߗ لow6ppzMwu'o&67y/9^z}T# -?[^)=/ns|+S)H8s=Y5~>|;W`֠(G)>Y{l~|Q|wy.[ߝ>@$g/v7IENDB`Ext/Icons_04_CB/Finals/plockb.png0000664000000000000000000011502410062567156015447 0ustar rootrootPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F1IDATxw\W6QlYɒs'0 ˒ӂ?KX`I.x`csslfι%9ދ(Ga8N r=xRcQpz5pK2[ Ɂ[2c&o3 -p |8r -v ܒjiU9p3\Lűϭch~*]~˟5xfG#"۹9ƌp7ys^Z8qǵtRho7b c`)b-* ٳviv{晧rcw 6 $QE㨣'}t;^(0 1Qx]QTg^~ݺO<}'gp'߂#pݼNW?Ovg|vysۇVl)ȧG5Y6O=w Տ!m۶?)W~ED7 opp>Olx׻=tԩm` Ia 5CгX{5?ɣuD0`y ?Ws71lYm:AbOO)D53@3 "޽^z饞?mFnp3ۃq9|+_oacnj-KRgi?ͮb+2(+Xn]_϶ꑯ2X Zoy;c7_1lBq&y5~S`D@Zl޸z'?WC`k\s9y_~ǯjUkqBb8@O⥼=j}o ׮-;|s_"OW17/s̘1[os洵7&riLHo rY G~DDk1x?I^o_|`xװq5ԀSC/sJݔ"uVז/|_^'MD78c`3/w߽OjH^z]ݼS̻LD&_;zzzG}gve ~@D1g~;n?('s[)[8:f/ߋ;ġ=9'g`&YaJK,=̓nݺeh?/Dt׀1DUI_sn7wM8` b'%/\~k<'*BJoP,łɐ2 !DV .|$-="?/|rǏ_2026Kf32lko XBu$i55)L ER( Z[M3Y]uogG]%s3f#>9yc N"M|?o~W&+@ْ0%Pk,B:q I2RR@{kvǔ9ԈXbUg+"u~CuFӏ^xgmSIkf_@BTrZ760n .Qck 8w JE֪H14옌Xxz?fn[?-'xu. UOociY*8;~ ?Ņ{jJ`e„ЀcChlT6Љny&LDy ZZ:;LR\Ԑq׊24 Q.q}z%G`o&mp"g4/nǑL#ֱ(틕k-W rwb։zG#:YD# #2" KBT#b`PAkɤS j4ص{}`x*O<ɧp#o}.Rpb3?SO9 gYr# 37 #{h&;4 wzDB 9⯁@uyWRH$IxRŒAgA To0߿mv{.㏌iDb>Zyrγ>{ɯ#}AW!%4 ȒTb2lл:H+)R\Y ,J 9B*~ ^WBta0rhȨ>#}CM0Y;vn%"vE ~r^]7nl).3Č&̙;e8- 8aTiNQ;.K <;7绾j 5W}gtU@QFuF}܅ t-6{RKHDj"u2+r={hܸqu_Eop_CEP'fL|hMuu[[0 ò }!8@]p~s":,RA-;v[PUeRNUeAFqJwjk{-0|Yw:S;M'vp_^ KR[Bv`܍vȰ&a7&ON G_<}$NT!8=yyI^dI-jVDvf|֊+'0αidS#D_Gт<5T^ yu%UwCotQb~.PH vqF5֡!kNK g!xC: \ R|aeSV\U>j޴fOLuFYfmz;. };t 18Ϗspn91&X9xV\5eFܹ=xt#FbI8i*<3fŔf:_F# HH}ю!EZ-!f ;ws:~5*I 3U8 @P ,]}>]ji<}}}ao-&nUb]5da/ g,eK O>ݻZԉyÏ<G{ &O.@ qî"`a3Լ 6f'TK0vD؅ E_/nڨv< C$믿~%\:p]# ^nb$933!-ʓ dx y q=cm*4XHc̸8sp⩯C{"#RiPrHIܐRA j/``KogX7KYf3(p齏=؞xe dQb)Ǖ<)24C$v3ҝcʒŸp-7`Æ5wfI/9j,8bq%ށ]}_G=/=ZKI]rІIC7f  P4(qʈ#I$tR{-W|\sۗƸO#@h@ïܚfjn YL+~sMMr:짚u~?n ^;k.{p%oK) Gs#Y \(`H u*aؒM<$ ,YJI6 pU#Bm/@ FS]-JxJoL(.e;;(!<&)z.b]AACu)~O }ڨqݵ i`xF yi{au+E$˄Q%0 #(Fdk5}X}TdC&tYK>֛n{xOf c쓣G?#؝⦞JWU5ĕ{/o1^n#2$tEv/k~] =FKc]/?]dE'v(`%YmAX]q Ysto*eظ&0;`-裏O'5GpN=ꫯp% b΂6O~@:5a2ވ թ*-q)$4b=ຟسgwSnzY{뾏GMPWb%j$Lkdw#cy{Ê}k!"BK^xC?ohѽ8jbܔYfmzgG zobo Vx~Q!O<^wqY-үsI^Vw~fMO9Noxˇ׿ ׉`gYĤĠ"]c X rB# %̘RUMζ\Ùiz:p*Sz~۷{jxG֨ޞ۳+rFk>0/~?oO2iV;p[>^?".BDxxOH5فSnAd0vxLjA{a>[{vig4({!gJ߀Ƙ1m+V,GƜ`Z\4`.rN͐>$_)m ~{5M)c_טqקw\q &a4By# U! pp nC+xqy/6ouwN\xɥh6taowM4d`RA|Ap=S](2xb Ss?Dۻw7FVI A$0=؄(dL Q5 tmZ+fcxΐ"Y&OTwjҁ17rW^ySN93b8~-5jn9 .6q3?3`QB+ 5 uŵ;9*iuGuv&Ϯq￙)pDlǀșXV ;,%!K[wVb]6oX[N9w!y6Ƙ EyOj=i3ꪲe :"!O?{価$>w=09!cCq;>Ys Bl̙Ocn! \ɿu"ٌVbPIιOl?i&T6btKIsK3qQF8p'mXR'G=7tY3fs1uLKa/`җs?/1j$G|p<3]?,Dt`ъ>95[e,xzE#䵹b3snpou縱cc< O,NcԮ))bEIʁu #Z] Y)80c_5سg'qh^dCD44Dٺu2dHAޣwI/k@ZSrM `NA o|Kxg^2KpYc䨱" hu/7;oKb$,&N38d|,B8 N&P?+-e#iVQĬ)-7)۾c{FDЫ0μ衇w2#n;!Q՝Z)cMdh$'V$yy*ag7noJƟ]&|_^56.=2,ۻ=?rX\z{ 9M0~nuwW|;a%Y[2 y!(s hE\x;vW.k@#|w6Ѭ2w޺c=f',(!x)<U!ٍGjPW8?ݒO1~J#ŕfΜ6Ä QLйVs>c{ &N_w:FwݚE|-2hމCuB#%p(1s2.8EZ裏ty7 l1p-q *F%1[>B.jn\ grS#}\%淙:1ǟKv18 "(3j|3O=?xr ISf"4GJf_$U ҉ewIg%͞ڂ["mܙSND)]weň+qp9ay#,B!U76|e7_bSϸ'qÑu%``];I ;DO=?5@P5bՊEx?x#g ´&@aK#G0iY(BYu[*@u -e lK1W=1cl=S; \+3*SD$λPփG51x8ZΛEs I^pݷ?A?8pٛރISVe.}sPFL r6_8~œyǦdx#O=zg1Y=<p1\Ga8sۨFE~HɎ]sv ZओO5jּo`e'|zpXZj}cnٯm7ZFOd?kϯo^ܳg7n̓z~cO¥goDŽ%%Fdj/y;F\Y+Jl]x?gO\GI/x%R~ %ĎPƫ9 to=5Z]PM?>}K`<%y/|qqcKɼ~J &(VRexy$PpZLuyQwg{mٍ?%=?L'"^ƥx7 s<#@8X ~GcD[#{4#d-T 8C!e2V/nr„ J7K[w3/ꪫFNs0ä́+Wu2_;wov>5iBDi͸?eS"\|.ynDq^e 9,w{Sl f7ތ78)5rX YIHd:==}3 |"} 9yxw4$v0&FV+Շ*iM5 g"ODɈw݊'<8w4^{[dB(`gxfeN)"b(z k~W`#E)]_J=0|vG*uAD<}W7DI: 9"bSH6\ƳKzR:_i~[6 4]vZ{w[$ P.xAH- 1f+%7 $[lw_ћ0e ڋ*][alˈԃ;@)s߈،<ر}K|u\zH-$)ڎ: HX!O>yaO%t8NInw"|V'XExaIbٍ-ݮ198W޵dZ,tbb,D?ˈY}qE<#|N= zނw`Sw`O>M䴜\AuJ[!QdVo(ㅐ%}F_gΜ62Y x=ÏnA VOpn%Gnҡ+~u*׬^WƎm!y ߛʛ h9Kܹs7Lg{)6e\BKN-"}}",D\'q :TeUg ZLPc o0݁j'gIY,f % `-3gwv).-cؕ3 8٦9 LzÇ>qĖ!p'B̈~ٸa)MH;r9o>|x=zVxo 'z?DHbn>A@; gt9XV wD~L=x?!X߽ PNd& ;-ay3ZH/_W+)' gf:\ = gdQJ?WikFtl'IqsTc.#7{3kN9|z(@$,HU$B*Fj;QJCDGp> є_VPƯ.1D1yJͤTq'j{#@jDsF۰8iy[s~QZB`R-Q7|/moN>+Y.xdDԢ wG6p MDzfPj-@ cFk\Ȩ8𼞜A$0"$$ 8d iƯX_EVPB;ۨO8ajܜrED^G7X0NG%wU,DP}<_~w8rIf%!>#pUr!R!),T& ه矑Ӭ_xJYx.SI8IR:EH"%#qWj}_K{r:05~+_jCRHo5n9 I?A_+ˁz=x.j83#'c=ِ۳#"p0g\%q1ܗH[6ࠬȚtnIJOE Xk乑"C9Tb+%w>Q"&ʇ.v K{3e˛rӷSj}>0< ng\Mj..\5({CHJvX.O?X|K;x{YJӭLFj՜0w:%Y;Eu1؈K@ <1S݈,eɢATB܉Z*Kuq)P Z^!զ9P( UK :'8 YYm̘1[uo9Dɕ⨾րPU|!UaaM\X<ԣ >tŻ kXmZd) 4F rhnH\5g s<ս^."tIΒU^o =a|Hɍ'lto5su2bDW!gY-gvgLDSDZ! [`2nOF.;.NG=})~xƌǝ\70dp JB=y2V?[:TGs?#GOr\iSXS!EN3<+R( '~iTDϞ`'aa UEC=7ƒyJ]-gv7̞Ӗ(\?˃(WzR i=EАA&go}'că$1P-o40jda2Xsr#g\\ƎYNJ7Q@,%Os ".&P'9BPD%F%΄Xr"%a*e,.씶Ŗay?~S/>>?U=Bxj§m3zṧ7~uy)j &I9Q L*ׂP+T7A) sh]vŒsZepp$9(<K#'TkR/mmƜ,<>~UXts<`i3/$;) "G+NYwKsO7~rܣp"&bbC"%DHPՂ{aa1mQ:@%Ocúenw3L.! I&"tDRxi䊖to`[s#[ޏup]Mv'qƍ+ {ʰ]6[Μ"B 4ȁKŧcǶGRkrk='P\}5p(9҆sOp{voeωgGNN>_D4}bQA[eRA;v[/bk] cK9Ӏ:2kl. 8boK1bXչ/ /^q 1 `|l Vɢ͏{~],pؑ'xUt92 jaLG\ $7'f,I4bDW&1RU99'X~)2jJɓAj xRե@r_arݐ砊"6p']ࠬ7]1,*n'+5!<7XN1"᥅6e=c1{|f $DzgdK"׽Rر~I,Nt,8 Gd0mƑ>e4Qϫ%\S7̊Y  ބ=}{Oto*1#KEiXpP`۩@cEoHU*x ݑE3Jaō,h> Y&`K{@#ÎQ !#Qm"-O4 q`MnܖYr(cU ec͊*Ӯ-z'ъԠ '1EjuA`Y>_EL6SD5sre/嫛xO)US[5Wi3DZmh93uDO C;6Uh┆ =Cԡ\j^l@wHZUߦ:@Mã{勊7ʟƨw~J_@ H'gh˚eS th#>/WplOaSbO"O6[#:||Ϋ>xW01%>qr;f`#)YYs櫰Rw!iQp24 %ѤLT֥Z3`M"`#1#}H. x$jz/1k]Ց#gp6 8+(WWv& &.ٓb xo˓x`HO;flS=D?ʪ[}x(xk$ WdJRڐ4t\vҽ=wȥ`dv%kR'DJՌi& ZiZBI_k cdqkWJ3U!xf6E eq[8#ʰn{Hp0$ qƙg+we +nhP:0 aeX\?IGSkeO^ӹ >m̅Β5ިQj̵L7z VU q2IT%aA9(z$.KYM!8m 0noz hrsB_W(\UG`iM1~(bX`.{Nj!4>7R<4!,i35MILr83g MhЩw$7\Mx#ΨuM!~cK-}9Зt20 ԡY]@D C)beG%{gΎ<+oX_w~U VRNoբ9ϸ!$}5dgxI wI6!Zq2 {# 4N8S'AJ>;2^ `d^We/]3jQ9lrUv8$wy0[{ ,Y"yY25DTGj G|ՐT,fQ\YO5}.!JTs|Uy9C~ʻ+kPL,VT%?(yZnVXU+_ s]U YZ)ҎQ,6)zn&jqܘ8vL6ihuKi241U3!$!ZE4-{~He =+%BLfCs8C}`NO2ejkfhR;|blXG# )b*7^J&`CqbwXy=5H/Ĥ`".9L G;fgvbO/leoð)8@4QP"3^Aͨ-4 XrweV 09(yIS]*RX$K{bߧ>\g"'%Fl1pRs&9˪/SrPȭCU&ƅ'&.$ (1P=*xiEb ,3=0;0"kj4(oXxn ˆMi  )1τfղ}Mz=YKrQzX l>`ȝ5a԰W޽<:T7iNϯܼaE|l8azF # }m\٪Au"c y#!Y]ȿg{:Zg y&p)&6D-v@M`e M4δG@~OCS1e,AT"\F<4FnUڈb,d#8y26Bz;gbԘEGHD{g jpH:cغytZi gkY~`g=9x77Z~!}ekTkXݥRKMjQv_SZ$5aF* 9o^ kdknJiEJS`م0 z- ;g$hσ0z5_%ms;L2( i<1(Z;RA T)ZZ[NӸ4먣3&+ +FH '(:qyk¨|FmZ~MTm105$3xIN*›ADkX^/Sa|:pVO-kڢY$`ESNͪ,|4Wq3%.#p(bl^񿶆4=2+85|Dն7^9hƭ$a)ENՄR4Օ&ϔ`mYF Gc 0;,gГR NfhhQ%H%q>oaC+ k` 7#4[ $X8!K8u9IQp <'F)PtE+:(f~{K`G0L y~Sˬ0`Bac:҆'QG"4*ƏوHFP"|@a/ԙ\=l1\Lr0o-"X hLbB!KOtq@!UB3<}(a~YaX& e CȲa^W%GB xwH&Q w3!SbYVio0ZF#-6JqdC&F#{=M7jFX$ztwH 4L&D"!>xo,(Ypтi*Y]40)<7)Gl &nC@<UݏcNS gyF=ʸgab.F2:C7=5gmVNLÿ )LN\pZ*})£`8=G= 4 O.nA[@hHKgeQO3Q/o|S"cr*ǏtYFvM2jاQV@ˉA1RV ɍ+&B͏}g6~9GCj$Q%U L;T'_vi xsM+{vQ8k?tt(dÉ^9hB emJYu5#[3קM+wI<2 4Qd=M`Z]jIsz{T2E$z łd ML[T^|n6.C}iƏ9 =D+: *<9,AC gabnA10x_ 6beqU`*w.T.J6!TVV mMn,D75HSEFV)}~ܹX#Y)lEBgP45\y˼Cپ)kQ,JցbVIrwOGy|1>}@bߖg)%H/禼14 kDUZ OdIZ~f[UXج`2e*yH@LiBXLM!Z@F,/|4na&hɝRv;duLy5 f&kOQN5Ù5C\dCb1"cYzvWba,NB@!B_*\%Z /;1Ʉk(2KmmFM}ϴP,qw,SLׇ:-'įBWgXM4d0f%PbqQXD}0j2 e7 r;\Rk#EPXf+~Tո> )2 SDX>1]Bj/{:%;8;vaú L /k yG5G )H(W$dRǠB T1;-;DwOU%^~B@"ᬑ,G tU7F2($5nY3nS,m$OpTƇaNUW9$D]ZVMU/-bQsȃ[x#s#A(l%QaC `ΡaMt|<1Y) \'BL wn뉖?-KAk*ٙ˞5.H,XPmx֦ ^5Cm>lgyz1!z0p1g%5ªC /$ CMK(|ztb  j:`5v?vtFzq,mM^AI%8-nDkTlZLY{g[,ױ񰪥dIYwrx׬GOUa`Y.N$loO>kŤ詢 NQ{Y+&_kX'~1~3i$Ld&4'14Ip%obcR\|8wތfs)JVvR(T*伕e`:%DqykNJztxo7e~+GA@Iα vaG9O#:oMt v*QN1p;uK \Vz2oX疱yjឺaJŏ:Pn dɈ,#x= ̹k/uHzL2LN>gIѕ6!Yֶ\SUʀ %O Žb& @RFXJz @(=8TUQ2Y '/f玟fGR@&=$9,js~ KJH#qv} yAʈ`|N+Wr9Yߵg^v1R-yWz[UL+$sZ~8ADG4ˉ"•IyOR[''W(Fw+~̫z/r0=1̶]Ofm@ww[ӲH..ʶI9E΀u. 7̖&p1@l)gNF)!d5~; ܩMB bSϠQ6;1dA?^!'Y! Gwz8b uvbB՝OϘX>6 Cuˈ&3C)RJfKIsn2DwњHG_/u62(haFlT]7A1NXY K sb j/`OA_3O"˻ͯ5ai.8 C%`'w4W' 聛g O I0qD4-G#( j}Iz%!Z'$Idij`kƚ(ԄLs s i'5+ ? C,|'R_-$/A4ϐT ʧI/ld8)י(<1*U:$9B )kk©s^ [0 LGAVSU+q>rx .|ᩬ%@^u=R?o&|h$T:Zl@EFG5" @U$2ti70' е:1\;L]Ejԟ #Ga3>MArz*Ə*yqTq6:Y߽m[<ĜR渃IQv'A& \?{lJ_y!ϊr|Mk- A֭r$_xBe3m)|d[./I/ ^eTÉܸ7:䲡X8XC\RMN5%$5 0քCu|=1$<%ge5jYBS=X9g}׾IdRp$~g .uCOR@!$X:m?eM+rNшkL@cAr֟t"|W3w{qē Q- 7:pRv!p8vx s22{_ :|Gkc5$TkH~HF>Uit5vWXg0 r1'|riKgj8Bn/ +dsq!¤1Dzp"ܝ l0mܳwolHgRZc{LGBO2\=\'ۯ`_<_RU`/'tDM1O]<>i*b0,*5Φ,dՂoÆ1Ve 4޳7+\e彳fn VNrOq$xf$Dӄ#πGF랉~r>g%sΥmdE֒|G rh8rO4r,EMFe-\.-hx6AT? FNMS͘sDAa{¡U5VT-i")@#H@S\Dam7YD`d={$%E b!1 g@ O[X^ne  UC+tU8ΧGie&zd zrr"cFj$Qk5'uZӡ|;V8'p!QFW?󂾺][<,hK=GuTșR رV6R̅î?rvg.Q5x :UJM90k>:ӔFzӼL~?G2g),;j kU"x^ZiOp<\1?-F}Ct,]@>jHb(ef)B;IPdm]PpZ lӟW/h)%fH+ wD%u X/łې6Y?{2\YAթFj\ eHv_RwL~]8wjS<P"9pwV([҃fa6C\%:Y07yOthOH&R2ݍKW7"޻ _2~sZL% 3|Ezs<,t4l+wdLs#wb0fMh7 ~ndضɳ7nTIuſ w( 3XIH“%BM$~Q{CO7| yPk`nmڐl<Ҫ$y|EZ޿Zg,1G@**I]F wlU`ͮ߰)϶@f}ےw+tyrB"qLY]Ml o ͎~$$y~oĝQfFW(e9hSF.y-X |0䔱-?5% ~'_tx0am%>(KxB6LcXu(%Ϻb~") Gz4'LHKh@L z@~"$覎+6|l* oWȱRG<)y ZȤ#I$F- $#x}_{[jt30L3 ڀ( LQwSob,_19.>G%x4da Ɵ5fvV~Yszm:`ko5ar\AC:L&53c Hjt NFܭ)!NTsʵ BPk,2 +!r62~Gߟ!P˜bǍXޚ6< KI j(v .2P7͐.Q=l˽9 ՙs1S}Y?yUSC`_码Sdkie9fD[ ׬?aN8?IQ|:CBZ(ُ̙֚{u?|?@ _|Ǎ#e,! \` He,7j uL&ujd'!I0CX)(h% K@^} 80*+,2ğ{kT/4\azPkJB9duwIRYY`s؍8+Zb-R?ٻ>5fn21Ӗp`?!MpyL\.^&H*VZS~ #0cRKݵE#03;'ܕ6lXߵe6T罋B_dT.W'@BL.#>r'!KdyC uĂ*y?1B3D2Ohsۓ_ sv ]9]-gvpGG_!v .ʮ+!a:B%~&}0ryvæ~+lv@aɄ,6;57H,g:Mdt:*&"gjP1F( ̜Қj_YrԬߺvnjmm5Y𾿰vYCq&Pؑ4jCt獃O N*a ;.U|ec恫ÛQH>!`*$VmvbE4aGHpǯb`d 3$7c|PZQz4VҡR^:vPR% Gyx71v[ RP#֒ MDZ'(gY?Wm4kEy̮&䐐1ӴekH2+mUyɕ<ӴH3٨7l ƹAe/$IEF0=ߪh |g|4jdYuU~sHx"C#kfm Ж224|-=(uCߟ{v;?T.wۀd"d;Pw8q"k6Њ@!DZJU\ԮDԥA %'-ՌRqXsݾOxf5v2_栉%atmX[Q:f[}"Ň<߾x+5pȫ):#%"튵,A-8LG&ﭧК.&+2 nrժf#p )bax֜nF$P:C3# >?zrV9fxQ=I\!qIpy-M#7jg^T^"@V=(.z 8xPGjwMn_f٬8[!ϚyelI3_K\VĨ9QG\98Kv;`Z&flk$JQBϢԩ#ŀ3bԖLaQ#(/P(H?9 bʾ4cJ< OR< aS '`nYt*]Y$'Xo]Ma$QuP Al\^5jo.kuVfiy N/ァNH*G#())aB^Czɻr^-؃:Ăc]^z' zʸF+J.̈t"KZ&o⮟>'pxng8}נAcq a;0UKXCZ9X垜M?lsO:y絕a%+ʫ#e!7c̻;i7wyNu$2]}ĽWHKK]8zv[\.і lh3rR{UHq3|zTWx涆s P c'Rw7 lu CRgy$ZOwp+VY)wW6oU5b፟>#؃G:6_ΧF^ï,RjeBKqOح$jH+{@pktǻ)-8{6/&O@i~|䰃k? ?/9 JI4NƳu@`}yvi?sF,ѿa`(?YYѳP*[/psS.WyvF"cʹb1 _{Cڪ3;!^]8*f.A1jg6TRV̩-UruDsO{f\},AS}kB~މ s{0XG Ϟ֊Nh.;ngK lq: w].cł^`9\! i)TeTD&DyDY]2Y(ٰ𞋖$tqbƟe<(/1;\PÊIJ-;ILԉ)CnHxF&"sIGGQĽL[[ºi 0Qi6}/hm18vv;ܚk > 76`gnd7"~`e?cΝԢ=xb &)ɒ |3^ `y>JBe)Aԏo8>|"F[waUUsi,mƯ~OuAlye222)$>RxX07\O`"uvb;w>ccrJ?i/ !> yOVǍWPSz !kԤg@ a!9CG8&ႍlZbJJ~ZyRpw_ <am6F;O"K d9 y\1CO`#C|(ʼ]:˜j+l^O~-5둗V<0Z[[uR.?iK&,ƿ` |wE#/m g|k:rffOk|4sc;vLJQSl#dHswE.:dn9W>2RqZe%]ˏ ݻÄ`86N 3fx3ڙ٧5aҗF6`: l_~MXX2xmvŗn(Qe,^Ջ+S[!)I9pb^Od Ws]#QW#1RE" yaשR^j$m>OI`Pa#1'mǼ ϟWC??y`N޻r-9昣;*F_;rO3{^H4(8ssZRܕOAKWcȏYѿ!<"Sq* ܎A'#i^!0]- Q1sqYJEyOh_q"5 8&=иE9Z~`Gu1Ka.+uڀ"\ TxlGkjbъ_/{&9_oC,UZ4(v\+}ȚXWU F/bvuLzS(xI?*"llu ~gǟ҅}d{X+j}d[PHKzI( d!, n읗$0-̤И ezS$C!Ozj|)\x8o.`͚ NVBcǗs ~49O2jȢ `ٚ> @bєT(e \ .yR5|r$H:A +t3V gPqˮp{dtd't_`ȠцOo)C6lT9ĉ>AD[@p;Ϭ,?dmZW0 u>P&<2P{`t qÔ?/*2E6GrUbW,}vdV#{h= q\DI(S OJ`h6sP ӎfƇje~46u8Lhsߏ~ / SK|fq-c֊وd\ι3H>T䒤:_R%Eᜌ&HqRV)s r}͡ IV!!""6!#&)bAm8莺Ɯ7h~d{:@pW n> ORjs;HDg9@ [0<^ֶVӌ?)|#44Hc12VFaUÐGkUQ0F  U;P]rUޛM* mV̞ڂӏJ7TǗ|* \"xǗ=X]r8Nqrh!xP}}Γ180ԂD#:5~m.xI TI-=[*+Wu_ۘe΁&Fܴ̳KB%X!([O.Z8 F:PCLbjPJH1WO1Jhѻwu!`& 3bƤ0 ? ˝;?K7i >A%8rq?Vr5[5}X7tʂ܀>C>P $}}E@|=״a!ošb'!5Rؼy{.}lBf@pQWg4Hox9f1T""@y{ bͦJ0pBh_E5Iȃ+<ʭEIRut$8ቁ" :,G9V"Sǵ`ن#ri8׬]7kB@ڰc9zr}EQA)FH5PjHhq:ۣWx&kVBkpo-?.⻳Ɨ)lmh`JXkf;.)4@]'|JgPl(O2~/"ӎb2l,cO/yy NN>8dmau5G"Oh""VԱ-6gkp!5%BK:ul}כp hX#Gz-0a\R!Qk{"Tdul{S{{Dn{ЭK8+y0 &.aʸ̙ڂJFrBXˎ۹yӆ&/|Y]}E 4(*;U[i,yb6![,YՋM\ƖVnB-=qy$w"Ə*bfOmŘŚq|?T;v5?֦~KaI4.W?_ܲSN,K& Mu/U {c뷔~s=erXocD"%A4A<0|!<J7cJ86 iUz%r J4/8nknuw:΂TΟ:J'iw~"$~K>}h!x?}_ַȑ]KBzeT{DjX /ȺS&wclڴ?on>Z:DtLgΑFoO>gΜVc-F~!I}г^\po?"X G~DDk>jܜs~k„qbLT,Ɵ%$T0QTN2fʶx+ ֬Y[5zϾ=j/_ vPuxgs̾O}[/ƌY4mB._'jI mTOͯ^5UX \"uFgܫq/m䲷 ?nlGL c1oư? =c{_Ձ8# _sG{{?>cƌ) Q(U49TXrv֯+?{E/>5v?~w濁;.CR|t'~3ξu֜nj9xpݴJX,-"(is~ھ>;=-Rx[0`Hwtx+u?OO<P#۱_+Pc0iU9p3<;p;qtAt0ueVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FIDATxyXUeduT}%'*>Y`iiSڢSYSN:Fiq4qI0SqHC+ * \?~#sݾ'}}/HBX$ICd ivH`q@N1P Iҳ N_j&I<ؿD-w.$Iz\=ؗD `%v$(lHpf@Dh"]%ONH аODJ0@@T"ztGip?KD8JH3DVѩqƫO|DV8U N~"  '?󆀆yCEW?' ^C (o4^_+o>F  =LJqa7M1Ȅ 5(vjk}+hx6xvxb޼'NhӦ 4Zb@\u p><[Wu~{1x n^pk$mWr8ldAcUm8@O6nDprkߣ O',)E[f k4>һ >w +'>9s@n 9_j*Ѱ ߁wPy]Q> G0B_ڳR0и*%>Aխm7v:U(:]VWpB;&'G O M{xn1I*l@7,o/FG>у |]{0?][x#4+o~N~Vp {d?xGnZ^{eoRu6 =6GYCɵDE.d~;q hJߕe 䡑jkBL;j0WdiǍH9sv~?o!"x>i^4Q !48ÏHf z>=B*qH!G6!$vBr@yCj)0=Dr5HaFЎDʓ-GwT0oʒenps{=cBTTTؽ{7ped2AWk4xꩧ0`"88y@´C\JfB,K/PѦM!G>$IC1BYFza0I N[&O5ExϿ[X=nݺe3ѩ_mhi3ɘ{U`0p)|oQSScӟsx70c tЁ(#sy6"`!ĆxL"!!A IrڟA 6eG/?= $m&j/^uqܹ/_m17 f̘#Gw)--ŪUSOoAmm-;B͛=!ٌ|̛70 qI̚5 W\Kn@nx駑p߯ ,7o%W?˰@2=!t";;!'mXl^z%vzkj[\ŗ̙m۶ o& ;{yyիAX{@ꫯpBPSS۷_FAAXt,wƍGv}OiӦ NA`[y zzIIIx뭷O?AL6 `cp ɄdL>l&L5cKNNF\\w1~x޽ E@_bԩw^l 1T׿/a} >|ӧOGnn.`߄orJ.hDJJ .]gϲAXht:_WFyy9`t:^{5?f?$I/()}|r&> òepifJҥ q-\x6@y-lݺHHHP1;v착ZcƌB !0 `0$^*/^,"""hs?/9du։8F 8P,_\>}Z\t;޼yS\pAڵKꋌD^\\\0fkN= r2SRR[x1&Nm?CU* yȑ#kKo>s3,glٲEZ-,Y!C8\;.XƍSk׮aŊq02yyy(..VS4t QQQCVU[nѣݯpP媽oOөm„ 2e*uݸq< `_RWdd$U;Onݺa„ e6tRdggs 3ZԩSGGu6 GLL*ueeezTTTROTT}~S\uqiUڵS/BCCUyO?U2.L&$%%D}Q;Uv*w|8yE0(,,t]vPZ@@ڶmnFddUUU0 z^w뽭M}F#t:S7oV.~!**}:t'@u9 ;(**Rc"..}3gddd8 ;\|uuun0tjoyf؁fCH7N(}YgϞNƝ~TɄ'O*~>8}t= ...;w.z!Et=F#l٢%~ݝ $!""֓Ldee)Օ^39{,.^pfB+ $IBBB PUU崯g4 w:t(:vni P %hZ⋊/h9ɓ'cذa2`PthZKw9tY:F#Yz֭[o777Etp#%%E[5 Ցo^W gT]]'N(v}U# ADDb!771%IhxqnGnlvu t&E< rb "9#Gr{F]]WI6ׯ_իW8"׍yҘ" 1@D "bD "1D "1@D "bq-F-HV}^"{D5~f|-l;FNNӽ`0`\5g<88Νe#::)ەۂ@D "bD "1@D "bD ")¡suu`uN4...N`pmysK0"bZΡ۶mZxxx8]Ԡ[n8y"F,Lд!R8 ڐ?|n^:%K9?GT{''CWT M%T^;D t@vhe+K#1!"R{li ‚!",n7 ^`S=}{p ɞ"Y;9T*GqeBkrxJwgN"ɈR?$WbC_F$' ?YdR Fw\ ̗si9i?@Cr>u ?#Aޱ7ryHQ4`5t4,PqtzNz_bM`,]EVӥ`/.V'tYG'vIfboڲ+>(w1ǥ;q=yܩE{>+7\^J/v!cB@Ӯ'{9;]s^Bm'jL ɅNd2[iW/}l.F:a{>}гpӪ??KyoS% B- HOl|>""õ(ru&Y,Xt?wF; ^ !#Jϣ(fø9Ԫ6Ixsx`;^j}ڄi ]48rnp)9{nJƔլ^BĢΡNhϖ!9 G8Ȧ6P_Uʲ+xx^vIjaa /xi鞀o,l{ou "ZtW`LCA&k!@ߒr V׵I xA]W4; =%4K d`^O9J4`-("( nZ2y{1"' `;C { pAа窦{[4,Db4g}K巧-4l422ȎEIv~cZ$h!28 BdZiteIENDB`Ext/Icons_04_CB/Finals/plockbw-r.png0000664000000000000000000003443210062567250016073 0ustar rootrootPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F.7IDATxyxUtI aIL@HXBP@Xb؂2:2:YQ^<*sՋSGLHXTKBHH'$$M:Iw;}~t [UWuWW}?SSէ`НW4(D` @V,U_uj@ xH@g3p@s͂  `(4 0fgp @1|@<׭{:_%T_FѲhp@CE `_GX.aԃyvu>"7Χh '˖-6UWۭ\L3xYS]Uj_"SC4b|;YxWҭ\¥&da|TWX_o\넑 @tu` ch&`q<^وn:thOhr}8GkpXٹ1-Kocd 7ޝte!55zG޿bnIH㶳 f5&x3c"P%w=>>1HJ 26Gx1K{:u̚:(R 'Sec%%'m2242> f 8 qCyy_۝lРی$C elw4ʱ x-8vB,euw㿋lZ]4cOM \rɵ蕗G@//;Gv㇍zbPЉJGc2lcl5q3]%jM]U C- u5]wKf +:JMB|Njd[vvvb?-I\О%̧&_*KFƘ(ȣm<.+*:؜9njx15|A/x]*񧧧X.ƌM'tHnLh %6|UpbaR}ۦƩ99BB"Hp,/oHc)5Pp` IT8z%驦ש9OH1HrcnjܜJ%zחOD E- vk'%U` |ݦ& `T߽YY]O㲱{&N!cK p6ȫt֞7MjS=pr\,g@c|KJJ=~{N1zmQZZbhhh@ss|$%%!55iiiHIIѨ x|ɕ~[f}Ey_wrX{ zC}Qҋ7аNQ~YY݋Bjrш dff"++ ɚvi⪷]_Bl8/q{_VGEnn.P]]{'$$ ''ӦMÈ#4/`eYc?oM}}#GGkaٳgi&l޼uuu}^za̙5k ێ#GZ2Lu/36kU}+dKBgߺu_zt̙3sP(Ĺ>TR" 8n j+={%Ծ wYY>3|~·z(5b4Wk#/2ƚi_Uu8ſqF|8w\<PWWٌOӽOhmu#.!՗Hqx;x^m#'Ơ|<3?fΞO _6UZ~"E,^Wʕ+V؈+Wb0NC" wZ|wVOw]~mۿzj;M'VvL@Ezr9^30xO}hK/tŪ}Gl6&ͦ)Bq}ľ L>dsd<ʯ}Y}<&%%Ֆ9K{(DFFO< #h7v`г5 ȟһ >kiwu' M5]oS q\x-*Y{15k4!́5kh:EWU}b gx-]xw7yIڵkj*M Z k׮@ ޱ<q _?u]uVX,>nݪ CV.O=9/S^SkU>|neok£U;СCx7P\\ - bѪvk'Sw_fH ' __SS0GZf͚?%%iiiHMM~bYHLLTcu5ӎރym-$5rmz%ƨ"|'صk_,dff"##FOƴZ(**Baa!݋2=ۮ]E> aۖuw͘+?qܷ<583»b$==cQk׮ҥKvʈ#0m4 !!TWW#//8z_8,[ S -lǏgYhHi>M4]tEEPmߑ#Gd Y0sLKTuuuؼy36mڄgi|r9R&lvE$Rׯ9A( 8WbDEw ֭Ν+V駟-~O?+VeR[mmm72+^s%Q֝]1W}شiGy=#== g}&kM0tP/!=>*;{|EA$95ǀp7D}n_ƙ3gdGvv6}Q7Nr|(((ěo4 4\1:dtaߵͬ6l O .~… 1}tqlذZ K>?oYl+מOd欬ۻ9ƍex'ѿ'uƍ~鑕5kllXxנ {PlǏCkkk͛e#11=X@B崴4A^~GLE^+_#77Wϟɓ'M|Y'lٲfYcxsyM-`vs1Zջzn߾%#G+K8<òM9x o߮( SlHĺ^4Ug6e[|PQtDDD,oݺUQtzL̞Շ y1>T{梨H̙3g*7Ϝ9s̑%"YR>+wƓymjOll95uP_fPod̮I> 5* 1Ov]Hve{8pb1{lY޿ߗP%։;N;xfԔ޽ܹS|srr✽999AUJw)b[dr4D}wn 򕊈̙319s,vBaa& o]dYV%7|v .yw}7M40m4}ݒk۱{nD Ia"0^P!vdGޖdY!3f]y̘111VPP*M7r;[3xJfM$V}߾}(//<;cǎ ;v,-//Ǿ}4$NnӍkV0S8mANػw,_9e(k 5ro;gN^>E`лƚ|Ox(eر~J'$Wk?hO,}xXNW<Ǐ4ѣG˶9rGI.EIo#T _\\,h9 XS=^n/A[*F'OJNӜt:E 5r˖(fjpƍ (>Z l#Fw\{fB!"(^4: ͵gϸ0ӧ%ok $(Fsy_9BF_QQSNI5WyͧNBEEPf23G5[޻oǀkKJJp8$˯_~5)<;huaxokb\Z'4jKKK%oذa֜DGGcذa~7@Fw5 @bDd'V ٳVKnHcW1ڋEu3|=kth3$ʤk`i 9}',J O?r;wN4oR&|9m- N~W3ABsG~v4)2de9Է |txQ3/ @xd 5 MHc*8N9*5oR 23G xdBoGLJ¶$ 4H0h $%%) :=^_1c CuJ;NL&KMM`м Jd\9  @ GwB]]@H_uuu9>ߵ+FI zf… 旜Lʗ,~W@hXd};㿆 bR8yRRRq/u* 2Ph=BR|=ړ/A(B5/fFt"'1rMpBoD=è B9/Fq:O4Pr,F !$D=##=TBt׉1 r,L}^+[Da4iy 69Ϣ9@N" By 5]6u HpmFZIԩSg$ҹSPmv6G  BaB ݠ N=T#` 8JAGMPpBsr[Hb#`mu㡒&%-4I=4A(]h@p\Ltqm8M\.'iM&&vMEM*T6V!)Z[ZB4 f@5*jPu٬`~eBS란Rms6â`r/o W զY@Pn'w+ދy4 d(pT 6+ h5d@T.Q@ b]MMUth 9A(hFTFP*C&~RHʓ'Of`n;ydwC8/.qAHL*&P!4r ^+:9O8JEOGu4#^Y: "x\X-"Ru4&Ps;# v+,<$0OPЛV! Y𚇾_0VH.ϗiO@*`P 9%Ǎ`D@`n|F)zDs 1.$ #t(1ڛ 9Y[( `k,F{ qe@-LԛPr:|T`-DP{e>3gj{tX? blDo_\"o ͭPeG\1? @b!&1k8,4׏> '$"a^4(WHڨ@п-'H3m_y:ZL~RXY?矯kՁ!/D\k<$.g Ti(.3}d7171WW[E!#u5b5vUM_hz7EDr}xs;El5m&3a3{" @MjHcf `,-9 "SZ»@H0ͪ( nhf^dM0t/trf1OTZr6TyfOE~kT71p5FqR@ۛبD&רlІL, JΜyqMΜ>f64`bhABӸl,}T}zG{c=EH0 y:R(n'ɽðy " C_٤i5_!BXLw=$Vub?clq3jW)fe$Y|sHiIXP?оf@h)/vwsAAX53G~= =P+*jbKUa@"NńIӫiTPffY93} ^k CkTIxq߼mfTKujC^޿Ǐ+2*k| !Y`<=@PGR2Ɩ@7x[lk ܃N"Tr%:5c5R"CbxMg cobK&>+L` Ŧpg}D{ 7}?$G&@P{(L~'&~7N! a]I)`b}KcS@-宨}g<7:E>|#;m@Ζl>f+ X]+**^YNA"H"{{e⪊ Sټ{~1&0޳ʘk?Bx-쫿K]2@֔pEd0H2jtv4Bh@\m8\ӒuO{XH){ Jb>F٩CEBJPn'Ν.%C.V/0>Ac<> @4ɃGGUu iQg:Q+j?GdgLPkδvG~cMކ#Fl|Jh])H2쯫rwg k=!w6|iC}DLN X t{h: !:ϋz2iI~pḗ ̗|?{ zZEHHw5lz"[2(8 E,E^}ӬAξ)%q1c55<}W1,"ɷe |i޹鲄_.6LoL'hԺKVHU:oC` IBM G\b!i#ךN{ϾoɸcK,;M|&>ian{5 ⶙5J(~'_2 %FW8K"!ܒWNX*]Y9}8J&WoT Q ,/U{e}{őwc'-a5`w'u:7ûYT2,;{\yӥvrPpYS]i{vvfuEm&?Ȕ2]ۿ0g>>+EZ5{r/Ong]Ԉz `Ƙ7%FJTsԑ>:(o_!\Y7nI ,^v>6V/}* -~Ql@2JkSc8D(szV9& 2yh p݆ 3D c!#ei~dW<.9򏍍19=w߁\Xg2% aaQn!mu7<`*O®mk/E}n'8=:% Ǯm7* kn*4 (PJ7s`RsȐTӟ^|Ɛ1rx=""BBBr;`n'sfkv_X,:r/oɒ ~%c̬K ;'M{0 642..йstHx1Dt!t!N݌yr9nikkk~8n8wdxnԂ6@D ty/: 0 3P&xnKANYTa/8AA|@"J+ǷT$dJ!Q)&BE" M섷W @ Ef \{wT$d_08c$Q\ dj$h0 @gE +Z"dZ"pbU[|_Pi{@݂ww7Sd@ @/Cdwh<߆? Yy@<9͢;1t @'N5T66Xt=:K^5~EZIENDB`Ext/Icons_04_CB/Finals/plock-blu.ico0000664000000000000000000006117610063243454016054 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pp~p~pppp~p~wwwwwwwwwwwwwp~~p~~~興p~~p~~~興p~pp~wwwwwwwwwwwwww~wwp~~~~~ppxp~p~ppx~pppp( @ppp~wwwwwwwwwwwwwwwwwwwww~wwwwwww~wwwwwwwwwwww~pppppwwp~pp( pwffffn~ww~p~ww~~wff`npppp~wpp(0`         " :$,!3 4%<%=/$H H H HE"I I%E&I&E*I(I+I,M-m)n-n/w'n0n2n4A,#E.!A,$F1$M2$N7)N8)W3![4"U;+Y:)n6 g8$n9"o;$o<&o>(|>%GB9\A1o@+oA,|@'~D+H/bL;lL8~M8|U>FFFQQQYYYpT@~U@}YBfffyyy/0034798=>!?BF,L3N6S9E"I&N,M*Q-Q0R0T1Y6Z;]:Z4a?b=CIIHJLNQRTT'_8\0U U!X#Z&])_,`6a-c0e2g4i5k9l9n<p=[C[A]@dKhLjRnRpVdDdCkJgEgBiGlKpO|]tSuRxV|[yfqGqFwMwSxT[{QsE|Or@tBwEyGzH|J~LejpDŽ_O^][SQTWZY]ȊeΉdԉaԐiĕrۛrcdaddcdeililntsspΡ}Ҥ|zuqtvx{|~ګֿ⯇峋řȜ͡ЫѦԩح۱N TOUMSOK|||zzyyu`, T2|||zzyyywtN|||zzyyywt T Q|||zyyyyw, ||||yyyy`7 X|yyyyv(V||zyyy(V|||zyy֓EEE@@@@@@;@;;;;;+;*******))a|||zzK(($((######h#^|||z4FqV|||4Fq[|||: bq ]|䬛rrrjjjhgggffff~|4G[6Gs\4Hs\ƥrnnnmmmjjii9  _5_6_R3333242$2$$$$$$$#######hRRLGFFFlũFom97 ѾPљ<ۣc ePJI Cū K TӽNB2UQOSMUOT N( @          " 05 0 0 1+1119%:)?(=80I I [ [ [!I!I#I%I'I(J*J,[#[%]&\'\(R-\+\,\.\0`*o,y,t5I8+\2 ]4"^7%^8&S<-[;)^:(^<+Z>-`4!t9"u=%^A0\F6wF.uF0uI2vK5vM7vO9vP;FFF}\F}_Immm12;6>$@&B(D*F-N.J1N5R9U=[>G%Q.^>GHHJLNPRU X#Z&])f>e:e9`,c0f3i6m:p=YA]EfJjLqWiIkHxY{\tTmBnDoBzNsAtAwEzH}L`jqtفWXY_PPTX^\ًbފ`ޔjڔl×tۛs؛tڝuj`dddhkhlorpppwstwx|{|۫묂츏ėřɞ̡Ϥҧҧԩ׬ٮٱ۱ݳݴNQ~wwvuussnmmkkihfUNwwvutssnmkkkihhdQwwvutssmnkkkihhU;93322020---***** Skhhe kkhh))))&&&&&&&Rkkkir6nkkkr*nnkk@@??9?9;2200---Tnnnm5tnnm-ttnnMLKKKHHGDDDD777autts4vuts0wvuuzzzy___^]]]ZZZZXXVbxwvu={&[wwvP@pwwō w@/Fcƞ@8 |`Ⱥ zEȎȎ Ƚ}POOQNQN(     $$ % 1 :> >%:>/">#:#:%?&;'>.#A K V @ ](`&E0$D4(N:,S6'Y7'Y7(U<-o@*fE2oO;zM5wU?}R:DDD]SEnnn;?=E)N5N2S4W9C H%L)Q.V4Z9U1ENRX#])c0i6p=^CaGrWcCkGqMvS|XsKo@wHxIwE~L~P^fkWXT\؟xfcdilklsty~z|ĘʞΨϤԩٮ*,*!VXQPCBA@?>=<,[\L:98765.-/=<b`1>=gb'$$$0M$$$$?>hgD3N @?ihE$$$4R$$$$A@ki& BAlkZ#%KJIH2;CBmlkgb`\$RPComlFSgb^XQPpomjeg)GYXQqpomT  ^\YXnqpomU)eb`\W,+nqpomlkihgb["*,*(0` %F;;;F ;;; ---  ~M8wSYTQO~L{JyGwEtBr@p=n;l9i6g4e2c/a-_+])['Y%W#V!TRQONLKI?w';;;FA,#^^\YVTQO~L{JyGwEtBr@p=n;l9i6g4e2c0a-_+])['Y%X#V!TRQONLKIHC:F cca^\YVTQO~L{JyGwEtBr@p=n;l9i6g4e2c0a-_+])['Y%X#V!T RQONLKJHC;;;T@ifca^\YVTQO~L{JyGwEuBr@p=n;l9i6g4e2c0a-_+])['Y%W#V!TRQONLKIHw'ψdkifca^\YVTQO~L{JyGwEtBr@p=n;k9i6g4e2c0a-_+])['Y%X#V!TRQONLKJ?snkifdaW3!0QONLKIsqnkifdM-/RQONLKvsqnkifM.0T RQONLxvsqnki]@oB-oA,o@+o?)o>(o='o<&o;$n:#n9"n8!n6 n5n4n3n2n1n0n/n.n-n-n,m+m*m)m(BV!T RQON{xvspnkN6I,I+I+I*I)I(I(I'I&I&I%Q0yGwEtB`6I!I I HIHHH H H H =X#V!TRQO}{xvsqnM0"~@'|JyGwEZ33Y%X#V!T RQ}{xvsqM1"~B(~M{JyG[54['Y%X#V!T R}{xvsY:)           G,O~M{J_88])['Y%X#V"T ~{xv[nMlLkJiHgFfDdCbAa?_=]!j7h4f2c0a._,N7)=!l9j7h4e2c0a.N8)?"n;l9j7h4e2c0ė•~[DF2%F1%F1$F0#F/"F/"F.!E. E- E,E+E+E*E)E)E(E'E'E&E%E%E$E#E#E"E!E!N,p>n;l9j7h5e2ƚė•|\}XA|W@|U>YAuvsqnligda_\YWSF,{@'{?&{=$R0wEuCr@p>nnn;l9ˠʞȜƚė•T:+~{yvsqnligda_[4"qF~M|JyHwEuCs@p>n<̠͢ʞȜƚʕ,! z~{yvtqnligd] $ QO~M|JyHwEuCs@p>Ϥ͢ˠʞȜƚʖpT@nR~{yvtqnligdDg8$TRO~M|JzHwEuCs@ѦϤ̠͢ʞȜƚʖĕr7'~{yvtqnli>&gBWURO~M|JyHwEuCӨѦϤ΢̠ʞȜƚʖ'_~{yvtqouR  YZWURO~M|JzHwEԩӨѦϤ̠͢ʞȜƚʖjR2$~{yvto:%L3_\ZWTRP~M|JzH֫ԩӨѦϤ̠͢ʞȜƚĘ ]E~{yv[A \b_\ZWURP~M|J׭֫ԩӨѦϤ̠͢ʞȜƚĘpV}^~{xVS9gda_\ZWURO~Mٯ׭֫ԩӨѦϤ̠͢ʞȜƚ=/$iL9ڜtܚqoM83 iigdb_\ZWUROڰٮ׭֫թӨѦϤ΢̠ʞȜƚګ% ԉaoligdb_\ZWURܱڰٮح֫ԪӨѦϤ΢̠ʞȜƚΡ} DŽ_tqoligdb_]ZWUܱܳڰٮح֫ԪӨѦϤ̠͢ʞȜƚҤ  ͋eyvtqoljgdb_]Z[ֿݳܱڰٮ׭֫ԩӨѦϤ΢̠ʞȜƚ峋bL;\A1t~{ywtqoljgdb_\xTyf޴ݳܱڰٮ׭֫ԪӨѦϤ΢̠ʞȜƚĘ⯇pmkihz~|yvtqoljgdb_~M9;;;Ы޴ݳܱڰٮ׭֫ԪӨѦϤ̠͢ʞȜƚʖ~{yvtqoligd_ FGB9ѫ޴ݳܱ۰ٮح֫ԪӨѦϤ΢̠ʞȜƚʖ~{yvtqoljdA,$F;;;yfֿ۳ܱڰٯح֫ԪӨѦϤ΢̠ʞȜƚʖ~|yvtsψeU@  --- ;;; F;;;F( @ :777:\\:9$iIYTP~LzHwEsAp=m:i6f3c0`,])Z&W#U RPNKH65 :9&d`\XTP~LzHwEsAp=m:i6f3c0`,])Z&X#U RPNKJG5 777tTgc`\XTP~LzIwEsAp=m:i6f3c0`,])Z&X#U RPNLJ6pkgdX\4"\2 \1\0\.\-\,\+\)\(\'[&[$[#["[![ [ 2PNLHsokgفW[ RPNLwsol_J,J+J*J)J(I'I&I%I$I#I"I!I III I I 1U RPN{wsoߋa11111103zHwEe90 0 0 0 0 00y,X#U RP{wsًb}LzIe:["Z&X#U!R{wj^<+^;)^:(^8&^7%^6#^4"`4!P~LoB]-],]+])](]']&;])Z&X#U!{ޔj     " TPmB    o,`-])Z&X#ڔlXTnD[&c0`-])Z&wvP;vO9vM7vK5uJ3uH1uF0wF.\XzNu>&u<%t:#t9!t7t5t4G%f3c0`-]*ۛs`*j7g3c0`-ڝu\)m:j7f3c0ė묂^F\DZBX@V>U$Q.p>m:j7f3ǛĘS<-fJwsplhd`\XI(N.wEtAp>m:j7ɞǛĘ^GZ>-{wsplhd`[ f>{IwEtAp>m:̡ʞǛĘj |{wtplhdkHP~M{IwEtBp>Ϥ̡ʞǛĘ xY{wtplh^9&R-TQ~M{IwEtBҧϤ̡ʞǛĘ\F6:*{wtp݊`^>XUQ~M{IwEԩҧϤ͡ʞǛĘ×tyZ{wt[;) ^\XTQ~M{I׬ԩҧϤ͡ʞǛĘI8+ ؛t{jL[>d`\YUQ~Mٮ׬ԩҧϤ͡ʞǛ۫  ^F`^A0?(khd`\YUQ۱ٮ׬ԪҧϤ͡ʞǛq +jplhd`\YUٱ۱ٮ׬ԪҧϤ͡ʞǛt ;)rxtplhd`\Zݳ۱ٮ׬ԩҧϤ͡ʞǛ츏qW}_I}]G}\F{\{xtplhd`jJ777=80ݴݳ۱ٮ׬ԪҧϤ͡ʞǛĘ{xtplhe9$:>80ٱ۱ٯ׬ԪҧϤ͡ʞǛĘ|xtpuU9&:\\:777:(  @:::Y7'WT~LwEp=i6c0])X#RNEV :::fcsKZ9V4Q.L)H%C ?;=NEskN5%% $ $ $ $$$,RN{szM5o@*o@*o@*E)o@o@*o@*o@*o@*X#R{^C* $) S4wH)))$])X#aGo@*o@*o@*W9~Po@*o@*o@*o@*c0])oO;&j7c0Ę؟xU<-fE2|XvSqMkGN2@ U1p>j7ʞĘN:, zsldo@*xIwEp>ϤʞĘrW^{ti >#T~MwEԩϤʞ /"~{}R:cC\U~MٮԩϤʞf%E0$S6'ld\UΨٮԩϤʞkD4(>.#wU?ytldX:::]SEΨٮԪϤʞĘ|tfY7(:::Ext/Icons_04_CB/Finals/key-bw.png0000664000000000000000000002355210062625430015365 0ustar rootrootPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FIDATx{PTW^H#[yFGh֚b)cffLj&UT;fglJSb3 1(htC@}<߯2{8s$I- DO 6A"l@* #!Pf Arl7xA vYDV0p /`.hҮx AVx @H6^Pb ^"]7G~OO'"ex šT$ԏR8Ο[D5$A.l"dª0`Ȧf_X%'Dv~";? q!t5@#`>lÿ  0[zj&bр[=]csOM:FV/T [D.1 e齄kh5ͽYkSxȊGǰ}H w8.l9tk0Ԣ j0ydKq--;_ڵ:lǿRN3}`Pk *<*Wv|APW%ӃmJC N+fc[d@i<]]Q~d[OpC<K<+ޫhn,At JWgg!md{A8D Μ]^f%"A;!|X"D Nb0{?&58?YW_}$#徇\\8 W; ~e0׋2A@D "bD "1@D "bD "1@D "bD "1@D "bԨX,0L0Ljh4h4j҂7no<E~~~ Axx8$$$ 22...PTE*9~=gX,hnnFkk+nܸ:hZ]]]bypIV 88111?>뛉ځؾ:Fr֢ZCCCX,X,$ipQ~EżypB,] [)1ΝQVV^[na``?'="򂷷7Ñ dee!$$-֠QUUSN MMMhoo@tt4Ґ41ՅFeee06\HOOիn:CV@F8}4PZZ.f$Q1k,XO>$ 777`bL}}}ӧN۷omeyxx 667nDNN;NСC())AGG]ߑ‚gy+V[2$r!Pww7N:<\xG 'N@kk+___f: > p;$a``eee0͛I iooLJ~R4444vd2駟F@@[%1сGb߾}t l6F$gH!ZƱcǰo>:MeXP[[<;v l9syyyuʨヒgbhh.\;#iQ!سg.^I;_{ &iZTdW_}ɓ'9@'f3{iZWNcc#}]TTT8b<$It8x X;***pAt:I \>ipp焦G444ٳhmmeE̙3hll łsΡ^0QRRrAaa!?dҥK<\ߏ|TTTL?e6QQQ|@mm-y|駨 ɄR|w}ł?$pʕ|Ѻp9h4 rD]]jkkP?P^^6<PSSJ &&h4ŋNA 9qX,|W~:'&qQVVƇ1/^wׇ t: rFŸ)._'OdФl[pF'I$ttt // q&s:6 ш @LL  ___L& BբnݲFߏWrE$AբΪ* !!!HKKCRRϟX fhnnFAuu5qU`'\|VFrr2֮]u!,, jj5"##,TUUɓ8wxB uuuVk׮ų>+V 88>>>Ftt4bbbph41:lh4V ,[ vBvv6Dq7= Aw^zrV ۋ&\Ϟ=;wDff:`l۶ 6m[ 1&KףfYb֭O("** b!d555)>,l޼YWm dlٲQQQl9 V+Az qqq)dff"++ *ҢL+ӱl2 {Xf z0Qmmmj5uo$bL`t.55}0Ņ-ݭ @777! @(`" x̘1CR bLtWWW̙3ʞ4QDHHק+"##6~~~M49m(=U؂0JEQD JFDNJ^[,meX000D Rlٌ|`|||:߹s͊?j,I:;;qM bLZV2Ν;hllD7o-7yfhhFy^f bLtt ů8 D+6`XjqܹsGQYY\@ppX !|7b!D+v 0Ak)́^GQQ0QQQ.$ :hhh۷o|-1&>>>h4ǏGgglRUU?hjjb!d!<<\Gvo޼CFqJeY,477ѣj0Y:ƣJJJ Q[[8cǎM9L7WT+qy̘1x'&$IAAA>!AVG I`gΜ`F{=/onݺα׃vмg9TGx7ܞ~#..N/"f3m&dobb"~ l5,Z زe jkk ~#0#)) sٳ///f(++C}}2J'JLLDuuC/z)u\WWWh4DGG<<><xT̜90 >>>HIIA`` O9^ (p={6222x1q$%%YmMpssCJJ 燥Kr;˧ d$''cvwԞ'&&:?b?>V\썓Zʕ+ǓA* O<fϞُ,QD\\/_*$~AVFk׮… y2y`ƌشiҸ0!#TlڴI`uK,ZPlذ/vK>_]߮\)))pssciiiXjS}/9# ?1G韝9s8˔~ ʥ=}OOO]8|0n߾=+k֬5kTmÆ vڔ bOvQQQxpM JMMs=HfBdd${!/ 222}vDEEMʉ?tŷQ'͛uin݊\C+`֬Yرc~L 6`\"d2ή&Ů]ti@HRaٲeصkbbbclH-ݽSwHKK /0m}_d v܉T@Sb϶6c'|]]]ؽ{7._ nѢEرc֭[PvZQ-A&GE^^._T .Ν;ˍ>js sa-[@߿NSIIIؾ};~iv~%B* UUUvpuuEJJ ~g?"ى?Cee%ŘHNNΝ;~z#\8d`@ii)>ttt8D@dff"77ۡ&c֬YXz5j5N'\Xlܸ999Xx17 ^Lh^Gaa!_fnN j5/_dgg#,,r 444ɓ(--Eyy]L!==ܹs!1҂JoVEGG?G@@l#44-֠q9?eee";Ȉ///x{{#44Xl` FAyy9.]+W@Ӎ%gX I9(."\]]sb…HOOGBBj5|}}J` $thii7PWWVvttt`0===___j# AAAƂ {F1llQLVo׮]V ~'Q燐#** HHH@BB"##RRnbTMc "1@D "bD "1@D "bD "1@D "bDd` "t ?" }1XD6`iɚ ^ YD67>W\aM@I@j!Z3FR %`w"+_YIeYo/Ok"+֑Oe)K9=M"|}gu@d e,F0V LBc:UkYCD R҄Y4?5pkHfCWbѺvQA9 rx^W"لOc}~4 *51 fɨ/X,8_Oޫ5"XZp$?_"GX4(gw 4DZRIx_#D'[MX{DS]v6Nbp@Gb"$?ko'w$_y?G(8}!@4/=\9˛Ōac]Uɒ$ <(v+Ś*v#"!ye{XZ)?5_Ia#QRشn "sAZ'2_pxܳw+$iA }45;Okp&M[CWbX."{(IRx^J~s#𗽯`p bkiX K̫yr.}$18!-cCe !#u4Z.ca %I?|T8`>펭' /8raYZѧ+^?ƚ$Iʡ[yHM@h`f 3t,+mf0zop:}3J**G`$IEK8 6Yj" w{ x+#}wW'p!@xDwf9IL0O6DN!k n "뻁-@C&XPGWr0Sqga"zB +jAu/Ao>{`Qנ~DT1H_x2o/F4\ֽ;8B{ vph"1s[.mVf@?_x;RB90_Y{E 퀦4I.h@IENDB`Ext/Icons_04_CB/Finals/plock.png0000664000000000000000000011635610063241370015302 0ustar rootrootPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F IDATx}wesLf&W@B QDQQ,*bYuu]uWbAQA&* *EVB 4 )Id&y-7p̤~>c0۾}{s<굷_L08OVC @9``#gm@;UVV-+f ` `n~o,<`Q,W5T2p 0;9BOXI̡zU@JK~&?^uǒGgK^m'kUz/6xO~B5⮃X$5|]IP`Z'&?êߒxzK`Op S\ npxzK`Oi^bkz ޵ ng][R ?NގrOnxs3z;k9z WHӓ|G$Y _=7h=C:kΝ8m#G׶ uuu(jP(;;l::.]d?}{G&e_ߟ\*Z0@ށ"G^3f\wS81a5 DTA}oɟY `J@M@Ɲ:<5?xuo\jп ϩ{{;蠃?r>ء'MLL0SQcuə[܍ob̆OOR|. WI=@Gf *x$OT QoXzzݚ!WoWa @9shhҬNxM$6Yz꧿@=74 ƕJY@3 :iVJu8eS&5@ܢ=W\v񆫯|w.p93?U L~կя}|G舙WW[[Oj{zztz/F~_gAIK IY@T>}]Yɋ v^O;.ǻ#?~sx׮|3/?([n*S>u<5% qMLI)!>%{~C&xށ؂`:Bp럮+4yM5%N )v577ok bs}C 8yD>f㉀ O8r/D{ )oLTdf pe"cY|LFuɏ;l:K:1"{DQIwPS+Z;ƚz6_濓 EZvקkfUY"1BK: ?}0I [i&P,x/X6fB?`VgT3hW^:C ZbˡeIЛ6V;f3@\ۃw9(9 LKO.[F/0ўXx3|4ȁ̋`Яiookk7Կ5G5j(tũk_l5\\(My@X؞ʫ,ېS> b ҄0S_gFd&d&@;xSnć߶};=fv>gP4夓Oik ֱA#YVʭ_t(Fc_ ?eVg!,h¥~祐?uV2wt 6l7G[{w'{>0K~/;sin!e Nې{(Uz̪'73kA ,^ri*_O[q3G@Yg >iL8U.gXZ MHfT_ _ Fנ w|;`}>o|nj3&'4:oN@uK3 (ׅBl0N3O}P l@e(9r,Q[z.ґ&L)xSH:=]/}[]9-K|V|Z|ms*tۡMOL<t^`4wGRGXypl|ܷ c'nV5Y7Yz)#%W As,8VcH=cOt݃[|g5 އ{ =^`x}cɞ5̩'C.bȺ5$ȺR飓(WҠaAHKXFAAK{<+l08l߷`)Pt o[ _,7j_͛~׎2uz-QG.2d#YޒZH Rdu:M d*fy p2w $b-B.#F: 44t,g޳dY7jI_0`2γζRZ ٴ7hN~)<$2ego6|v_O΅*IwLV # tPBt#-FYJ_nw~/Ӈ$X1|=gϞo5eZBD|Cirj`> 7M(zJm(C BD,-YğK'KQU&J$Ơ:g:R4v.߶ns J`3$^2ww>2vdo!LBBa{V響O1r 0#}tݞc뷛-(]G*s+3); d' 1%L]ɵ?o s؞Q K~;Qq]MOM䈵ҠAl-B{2/Q4hJ0n a:+'DVZU8NȖ${*޳C6t34jc\_Uff/oe6gjk{Xcq枙%#qTn =]kM@6CMmw^5)6H'/S0[>%/R/S9͘d%)& Iʳb| eCG7umc9Owwo(AdmW31P~L{O~>iJEjfzU/O` ن%Nc:JPCLPU[oO -,h?zΩ 5k 11".Or"MUo/7W]UfJyxg9ɢ2h%?9 P # ,>3+KlB(1s Ŵ3{RK2! )`9i) VE/\`;&H_=WteЉ)޻2FM<7?;nuG\=d2iy>UO<ȉ'g㑋4P3* =j 4=W(,7*OI:]7 ڼ;#e݁↎wP \Bmc ( 3C,:*;q\N{qz_N|H~~|>?.'C pˡTa'NTh%:\;FIi:= 7١rIajԜ@ P <#OK#άْ̌5ɲ"6 \G~.Ue{p~{+6wQc- '7"x{0;7ՂYMjGA8Qt46jaӰIɿ77-yc(p@M os;w^ci,C"kMlj@bFn|+eaqeDF}HZf7f=Uk Ɯy(>;~a%0b\$mΔ?%y4f?@Rx8F`ߚ욪C"$q5wQW[@w?w/* mw?CjSib9*jDI[`+dlg9!qMwdJDخK\6J#b%U Zvgi(+(4N‚)Z͟n *b9P g{@C~'{Lݸ2iH vr]gu~lfI+'$F?=w1T2'M<3{Oj, GAH0,q\q!b7j"/C/2z WJ_@I^F[j*brrSަQ%}XxڜF!&4LZdр ȠM]s~[.s|:3 Sig곟QB5x3Zl>1Pf&؉0T]ӂYe&PLǗJ` vh$S3v>q7"@ɩL)CRs 撣+ 08e3 k4kH T<{љ;rY< o8SNy}o :\.@W4ĉ=S#R?.`|6y$@|㷒 R}dziKMDRA Qe](L7d!rް'bH #6H@DPDv1Ə1!Y5u'=bWd^{T0q!{~ɲމ' #Ŷ #->ybwk[5鈧ɶ7φ̉Oݹ e7DTBR,6z#9x@K/6c03rB#DEMxvt3{@$if'.cԈs:`!/Ǖxi-+wu϶ 'ײTcOz-6m3Glĸ+ȢoCYB>t@ʠ[0!I2B 5HY/=caZ|Akb 3/ݨjq=+y\L]^r~l>쥽W.Q9 l3vzKm"bۺUطHeRj6RzTmD+ 0P,liW TJY}AQHv8 o:r5Pdø*P% FI)GC^ʾS 1FO:_^G?ۓ"zsgΗ/:Je`T9sY.="JV_P^`7X"D8JPt1\uXc'nI)/vd=Zl4Dp4/ܜ6LldV\*%+W*go"Ots J;8? ~,S{>HD\ MkU# c8*9N")20@evI[$d|{S0,G>;Q WoKͬvbTzkʭkoÊjgUqƱ|2v1rSks$,y ^쒝xbA>YZյ( (k4}.fecI Cm#UX;*+lJ)$5Ms[k~~GoJ֞[iy]?wFAyiJg4S(1M=p` Bq>Ag U`.qڒ۰rrN_F!oTBPor vHӕc<|&=e KHȲ,Xvaݣ{hwp'>8/c{^ f0"s}#􂖲׬k|זNPO?Pt+)PDZKڔRd"Jg0g7 -w,cE~䘘^pd _ j@MǕٍkL"xucIruXe!ܬE`Ʊ}ppMdY@ ?>wirU|[DS[̈́:!d3IVJ\Geg{X-Bម/`.Bg6!Q[iqi(3ysHSPCB=RXw~@In^zY甩k!?9lpr>[$x^kQ/ ĺ=ɶ7큩f "#g5(_ u@ |"C킕ȆnѬ)h`L&$1 E"Ze>I&hTNԴg.8-Znr?}姝rLS J8o޼w6h8z| zKe^9fg)TJ̓ؕ@8#V*hS ZjCSzvұ|?k%]LDl\wnayPLRY]O'YHT(!UZ\iz(6?qPf`({*.V8o%*?ENQ-ԑ%2FȀJPVL&e9B hW2bxluFdS{* xsdV@j>K`P׎˵,A>O k[`A:7 UIh#D= L`IVݗѻ@ֹtƆ&ҩ7GO;k!hBF |cH&#ߡڔ%H@N\]G9pFO.v+ʌL:fWX z r2f=yȎc`Zx`=Tl>"2'ڵ+ -Y[wΙqM*ؿ{]$TƆFbwQ^-`'Ғ|:I8g]'Lpeu’=?Db΁m!R(J- Sr 0ec ʱj)R_ l%`; =%&3pS3k:k+JU ӟ`Jw8s{9dn1u(#`f`|Y{ X{HGNT'ejKb -]^:d 7z`͆9mb1|rYC w!B0,L9$jKvAp^=(=hGBDf؃O=ݕg&{qוD4NE-{o 5%Dg 1@)]V;޻3GwJID{T걬d6S%U}:b6{L|V4Dҕ8-댘,ecz*a#*Y:Cˆu}}羕 ]ܱJwV/cN),."umiTj(Nc߮ͷBT`<;*nERO_^" ,յ 8F>PA*p2In@T{|ɑv3Rj1l0D18#jF\=OD 0Z"l$W0@LT. n頬HۆQ5T p S*yu7b{S+Qb[7bKhsfV5=a2Sxs/{"j FL2U S}֕'b#P.vBN$ G,Gc%CI3NeiBF֮#m03? TaK:;8iH )g;"$d'N^ECeD'Lќӄsp(f,W^~ M W%lf!wo8h`w,?}Re)0B-=VY;rɰ3!#)i͚G0s)1}5K͖ ) ut):>skUkB #+ H(`-A`M; x3l)řG}s +W_w>4l9 T9"SJ=z,5) %J"˕NhYax{G- *yg u9G~d{,XԗYHw,#63td:RGip!}2#}GkrtY49nv`<hva5qK .L)r`';PsiZvjGlf`Yxf=(T3dZxK%jԩk^sQM9z-cszL b>u0bĊ@FĦ$y  @US|I{]kfZv p|!"0V%!#1ڮ-i`a5!/ @CKK.=rL^d0 CtX ST2XZ;կnBz$\p>&XH8A2{Al4R[3ktr3y %<I$}+a4f:-rP"Pɉ~ fx2GLF\Ung:qƠ.$ݘKf@p|bk֏Hfa FEPSj/X- 2VAq*"#F HΟN+./+J$ul^[+%]/)jgV,rZT/Fa`t޽|ez~D0Q?$svCɞǓYC Xa;N9g? #* ;/KfX`262rFYM!Z>fgLJe%Ҥ8[q/@5@665,=yx_:-* OpS}mm# vSYD߂dٷNdPk̀,f h DJZD˰t",]+/ŪU+v[;7`kر\ohk#`?a2&M)faY?~J]+w&9C҅-*r!G] l0KpHqB[ .1Wbu{;֬i +Xn 6lXؼyN?cKKچ ǰ0rh3LYb13f"FR RZUGE<^_vgฝƋ`THMI(c1, qd- K$ۀ핖CTɃG dqgį-w~ 5Etq(E4謁1zW(йa::CaܢXbe*L7oŠǍ}fƬ!ŒY`ذhi"( xGD@>7PN 69$U#wZ.CYt: I3}BHubRpֻPYۚ4#e2w9HXȏj=ݯm0,ˏ l_i!ZW 2=<ΉAvz۷>4v-G͛+ֶ8N1'S@mMP˲ ̽Qhy-69>85 A4*a#Y| ;S+ZglDl NqE2I'z"4|kU %xjvBey[s[L\ly@P_$?胸_&n˟lضm+vյ}{VݏG 7u#G.rҥd3mXylA__vׇ==XK/SO>-Ԍ#Ƹa(.G6ì{QbKM&8ǧ|JɔKl>JXigR0#D㝷\&vfEq܀6q*\#m1=K!އ9ͨ͗&`>^.pl% np5B񿉥/@@Šxk ċWaO֭]ukWc%x7:cN($ښp @~(>ɂ=Aju2L.2idi9byQ\2PE?J~7O!O͎`2 hsH6)R/ P<^N0^γя~l]C@ ;hFi7ضx?=-^][6aْgxl@۰QhiBm9w")7!EN5h=B fekƚq ɛ'?+g2&I>R6M`社LLJ4z5YQQLnqNlglQC͵V/~摡e.|T8]g#G:{ m|FZ ~A@3ccS~o{Nn"] ))'r`]3-=Bxdڑojm%99 PRYo`GȽ>`ߙS!0]T pd% z}뜾\Ե~͖tn܀ ~}%x^{Xo>SߊC[s7YUOP!&#O6&XuYJY8R)sy}bTB$5t L6bRɋ0d، ܑIwo^γhәgd)eAApX \b;~K+.g{B:֯ FCÐs Sn_d( -ΟPP\8سiA (66 Hiw;M@ \;FPy{/Q] ,{?qݘ1kERV=Zr~qE˰l~` :bرӦƦf3琧vʶm eA!WDdl؈Q4xT5|aL/-"0^4`-)$eZL͗ >vpvf3[./0 EjR%,(37+*4r>G.ĥ?եظq^iU/xcDJ$q? qDA AVሬ69DfBLE@NVT`vI,ۅ1jt\8knTj&H0rcn`AqWI7%ϤQ:34`XzTrY7vK_\r+rKp+w)nѹt+L3O,<Drr B BD{$`x~.!%{=$Y +KizI+ A!+pKz(5VeSγ}˳ݿA0J+6e!^H Lcʹss5Zhmld{BęY{L&m=i/7 `<.֣>TAj8Pٗk~d!TxK0w0f:u OrLvR%jGsnnJ39[Q`(pLgm@dTc2ҕ#0NC`<#?sz=adSNӓS |t՘WeT^M:(%^eWF/DHGVB`+qP hڋS"6OC'@\@-@)T yɒt˹P+1.)3:8̶ Z^{vگUذŬv mF (-RARKhSVc1LPJ_OBj/(0R_Q02|iVAHc ٹ,Ns^2_Ӂ eZqJj# g;pIBlXS2w^S`_rH(tt޻nnӮmo7bc`O?:z2F4&v)GR1X 70X}HI`y8:[\#Tc!f,OL[.n|&}P|Nͦ`Hq֫L:%5f,Æ,Kb2`8٫VnV@J8/,֯qveFeE=9ci9^W[B2<;Y;W Yn1q2|X` AcPl"ND0ހFIgV̖+f'{> (OZrB~xI+y&+q߽wTOq;[le\htM?'>@ 䪥,퍏ަ'iRK 7 =[UdvRar\Dɿ e"e~($et#mm >dg`f >H7̐^>CM#ڲwv<p͆ +B^r)嗨SoR*2<] $V/g┖1a jcGq«yNf64dK e,:9+ݦǟJX3eQ<ءzΜ«"c@#yFvMXdqu-y{ mʁl,tUjlRxfga H-z![yHTq,G)H2%.Id&&$uY$5 V@ $#L,2L/'MDggJq}{qK[н/ZNz{R jbs-c +G\!d[3,c>AF*%r/?gAoAu)w17'yI:2L+MMC8g0b|HRݸ۱|]׊e`wGkAS\3^$[ P?"u&-C]H'5bn͑ B^mHa0Ź gqB)53;-}N"eS V`&`M,3fV b2\B,x >pwYS݅K}y|eoJXV:^פ$z]rx;lIř4T%AˑqPO 1n *ij]g&'ɕJ\E(M.sMMDSyzO/G)VYEU/X~גO$ 0敢e>4ϗ@^lB"i6cvgvGD$d#3VIYe 6D#0]݌Ïg)&L(wuH D $z!JCů^{KZrUڲi?z6[-17d1}~3_D$N,rlXj2Qhx[ُ̛<E!b-/Qc]R0!10ÐJ0bv6[`Єd˽gfCdؙxv8z3`Ҕ3v4cXjV,_Es(w1yL=FBmm]Vlَkx?bSc{n?d_L5gBA8IlE3s[hBNit!פ)`G=BM Z'L{=8QfX:7-ga#FWorjù#:LtW Ktȩe&FUXIHa9DK,BOACpio}#"FiY-c.-eZSk9 uE\q{4e|$QҖaCr )- qĨQ;$T"b^V,8Էu؈|s.^~T\&oԘ 8VKOО#4lpM~\:4 >)nvԤX`FM:L9'G`Gc"7{G`@Bu%W m-2kx]MiZSSoԠCV AY>hcMGa7> 8 GY6b4y2ZFTWr HzBPZL[qٲ e=XLIǒб~,3fQcZoH L>黱b}+z> S ^Z3P;]}\( XW|)2W90c :2cݠe3f폡-ò=(QJrZ2sniذc0i:^n||[ccWʵkY9]쪝͛6xԙh24'T;3'OhiqWWr Pvy2/>:+/ (DM/]c֭74v$՛26b pn+/pKoĈQ zUgjb0J\4Ή eg}vBc)QIKIo*c .P lzչVh'3I^ÐJ^fM³YKJmSB}kG@Ypǎf#KerqwZ Lgv moҶ1իzUFJS(/c8Ps z ʢuww-LQ)#tnt67?Yhz IfȪp+7kJ^9r1FR%j 6uu"^oΜ?ff*l߾?d"-K- BAZnރګzUI(IzHMnC*s@ޞMe!q0|LԴ(2Z[P$&եoa3YMe.YA9jsV\Z]ի2L*-ɼ]X&OQn v%۳ENO >2<kؼS|s^^:gWb!e?bٱ+W,Տ PVzZAQ`˭ ~G ;yN9oZaG@,^֯kw > `lTZ%=c,xn_=[]ի_#Bg3NٮZD :yĽgJXY vFşƂ)XJ)&#A;oǦMՕ\ a /kS@U]d]GPS`kئv'LFfPnl__/,ynALαpQXJ2$93 “ UaUW>xv8>}lB%`mvlQ5u ɒ* mG_z wBߎm Ѫ& xEEu(!xU-]pA ]otK 1{CЈ-l BޕmH|iơOk,dzrnBrJ!YdBiL./l/>P6}$̹S:5i%k+}!Czw : hԖH9$ ԣi-&290θ"9qEzmgErZq97`$l,(#FN >/JӲvL;$g+[,s>P0(IH/r&ߚl;^smy5YDdu߃#l䙊(t!8}S~Y0(r0 z~`Yt4LفDhRwi%-dX2g<5| [S 7o(?E{k1eZUbeSeͥ9k`  &é]F&Wϥ_c`2pGNZ FJigRs&Jr.ؽ>D``0e?Y2mGr?ƍD8%PMk(3:z J1s17a_Es'.kg/u.iT=XJΥE%mY2L0ed-Y> ۏҿh#<~ϯ*/'}? uvLJ8CK@ss+94O}ºf *=C~o3Xg0Wc G :Ek| Yu%l ɦ8qCP˼ŨRiU QGqBoX`]853 nBў&sN8mh4VLz9=Sn ),,I-]UAg)8[YȂȤd%TK xj0N90JZL1A/QI..xg{{8\Pՠ9 RVwyǡP􋪩~yGfS YAK[oST*F.+v63hރj_j&JV<8t~]/4#(feuUv.DGFW] #ہZgzuJ#p)o;?FGmsX8ʳ`%s6ئ&SzH: BV8w4ئdH1X<ӏmʼD/(Mȶw+ ()N\0|ݦ PCdaNK>q}]#~>,@]]:g1G.F| Q8e( b R'm{-uOmYB8¤`Y? ļ)i?rȖ㵑 ,˞[3iA[0$8zdsbٳx_`SqD백4N"UH,U#qQ#/++yBgpP_7xɾDy=RA,#DcUs.4G$ IF">'؊LL2fl |W]q񆚂HLrz$̚=o9pc p|#F{mc7 ?QV6,lKxHKW"=|ԊѥOuJ 6b@w 0z Rߧ?F}we%۱p%ev8מ*Մ@ E7o}'u8 $ {ԳJtOT{}M־[BZ[c۞4 = #6Lg ذn5le.ua}q)}C[G'b=|uӍg@fjȬzT4à,I[-!3qaɎtr"SM/-Yڈ|̹E?Go+:5/7p4ee=w}*4nPtP Lg4 iis4֮1;BM-&O?ǿ<~ܻ0d]#K %UIu!f3kn*a E, MpwD7d`b]`ֲ"!R T_KM3 2]v*@ k!%J򸩣_J| x}t!m7yvCzNV#RB[0q,;[6mUu}Nzӧ0gihhjɷ;HPJӵ Y'ӁEOJ:j(a֑ޓxd"LF%v%[fP&,|~VqgK <Ƈ0D?p}%(O];yСnPy=/uԐ^\lZ 0gCՉ0LX)qx[z/q;q_0w`9k0қxJ :|t B:lE obg.$Qy)djc5P8$~% (3f`_l*p2GcX>6m;ߧNFn~(4 FW0c1s-Wbذ~񇍜ǿ Sgliw qx`{{h?Դߓ `yQ%?TFʳ# ߷&MD~8۔R.]HdDGӚ"R~Zr*D@l~${ђK6eA 3f#O|7N>8ףmx=H*!V,H(}G!MSr'$ǝ$OL x vd}@o>'A@L%R R"y'bqyoo57hz톧ex vzP'y;T zh Z#gжɁ)wtcl؁MkhX)Z78؉b1u#0a:t$fN^{a`q%B0,ztه?b"}IbGH'2-LC( C>n8-̟#{L~-U~QɌ,J9&>?1wngP2pBģwu8V%G(d}%ec4R_E/ hiQ?y6f9 ׭Bgj,I_6nx:bl҉m[7tҊ!CeZFm,F SGKX 9m#&4_|QM6g*O$ 2B鳙Jܘo7#S<i{ `HNli@1%gd 7IGD--TeFD0@T"yGw  itݫZzj)kڔi`@d]Dx*0֮Y+cͪeX:;VcSZtmِP[WƦ iQh1GM1S1f>=~FX!Hq}aE`ٹD͵ *K ]83e :WD]8#ȶ9>;CM f!Yqlf%uƖB;rc=U`q&̚Wۼm[W%/KR||r֭]yxةG6ٞO9f~spJbjq(&1S1jTܓD&7.I9MZZLc`V?:tPR7z/I0J lo9|@d#Uw\ds]3D cꐱ/ּ4HK;`ӹaю%#rgnɞ}"XI>+#n^6|ͩ6?yKeE"qT8y+l؂\iT,#̓g! .!'HMIqO-c3x0@SO5=(4)HlZbJ .HpӶUfbTo4WtBE:c" ~ls'-Bec>XzZMĠ\kc@z z{GyXA66ɸ,$Ğ*5ӟ5De{Ki2*b \ Y KjTKԀ܈3t7g[&%Ǫ|О$Wy‚CehyA"NeBZSL'TϚTsXnJ?MClrq VfFjo9g/<ʷ P&Ґs8Yٞ0iIe kviXdAzm@,N7M.  AG M/9-/\6%(kyH1)3q/ VWd#S33'KTdx+yG+_X6lSQ%xg@i:;# N ߴnt荪k3J(M%VRwo '@`}2lҦWA{ "$TYB Ш,ʘ &~ NCF (X $Yb,$+)95EdE=V_-Pjimm[Ց~X.}RD!Ȝ ({%=4*庮`X<1kCZS t /y͑N@EOq)e ,K#P\߲),ډ(=eh9 ^XS-0Q c; BQ6X"6o8lJoyP$)xiL&#֛ rƬB+3`;񕋾NKʻycHV#ЯW&!U!*?Ydm@a=i@Iz|.eBv̅Qi$lX6UG7 f#)[]];򘇥RobdV$Б8$`S֦ż3\м))i2 C{Df/wWlArĜB~/8%g`G]6 Rٱ]xˁ;IO@>'+3+e;%Z3wBj0_mh5éі00j0EJo@P֡H!9CBJ 'ڔR~Y|eIenvC`7KƐR9-x rqHF 65{! ×cdTYrR~9ٱ+a2&×?,\ k.`l@oAD4Nz k0MkNeHu&gږZpA*~^0b 9&0r(~6]Z#ϊc-XJ+ÙZ0(Hu$HZJO|O~H2J%QArl[|:$~:ASq5 Of!iYtD3+|Py 9+J(G=a;+4\Rk,`XrX2e~fm-Opl&Qm=aj`N85b얓.=p$vis;4XATWdMJtuPBfD;=^'%b/ 3X 0Xg!ʾ-ɘfO]6 L"vuf z74KK'2[Sp\Pg \v_6g:)Sr/cN2\8b hW G!ٴ9~ܘ#7gHNC"ZlTђdn6Y_&Εp g&,R 2"eבڣEΉ|$6>Y:.cfxGZcQgսU'%n 9K9k]k4 >Iچڼf?VnB~O-6E7-89 #cJ͟TJl^b*V9#H!r(9:6B :q2 %g4OrT^gaSRJ6Z$/zU`>'>:kr XHZ??qᒎFyVTVǦ u:ʊ'=8*1D0S%A>D]hiB:{4s|IY1U_|;3/U!k,O~"@d)ui?S 裼 OnDKtʿ7+cgUVy~oJ5/<͈$`MyqdAå Lx%+ gfb"XN/5'v@ĘŴb,Lƽ",bK3[dxeb7ȅ&jxM9Py5oAW|id?ϒ=6`׀aboM}[vո}٪B޵h@%\cQ=ߏ&;=`RoQMWNl~>ɸ\ Swh0pۂsRݢ]kP>_X{PcVC~VKfNrW.]ӏeU/v_|P#n9_}qXskub3ԼM+>fjDZ9oV`VCo9їc݀%tX1$w@H FΝz$q;i}&$XV. FaՐ ty0?B'/w{ ~\&uZ1`)0b#h֑ՙ VPx!HPXBz2M<;F m(wtb_c}c&*b/XZ0I"TNJ1OoIt"0~d-V/fnЏ-dO 5%HEEkm-ckgvq aH؀mIpjlYҜY${!- &=cJjMāو{vi@֊jBgKb1ae'w6 ;Vdµ {= a!SL xCS?u>k^@$`aT f5i>c4}̢:"ƙp9 )##F4YLhVl3 o3 +f^~_` ن$)8$ 8Kum7&@h$-Qp D >bMo?7BͿǔ"r|t5me%bj(-D> ]fH%\5"on*!M5`5,8ms!d}rb]x$]X{m ]gLB/aq|zj̅n[:B,JI\GerɳtN LW_xFg?=2$A__\rC!l%t&"%(%Gj l6#;siE.blrS!Y(%I=*1Kq)H":s٤ȷM]!*!M);S~\׮ՏRl*+}_nnͿ޺C(3!zɸ eC'yK)8^?NjRN! RIq$Pz,Ձ/&NVsn|ۺjÕp(9C 7pSטi6wuCڃt^цN03-(B@pDѯE:[}pcuaE;u#=R |(FVbf я``t0W j'%cU10Cu܏s~=H7OPu'h޲ښW;w`F|~V:)i|0M>r`6&`e[ 2X6')uO? @\VtrkZtd ص]O@<,445g@6y~S^c/Fu66GnMi3Ђ^!J䘫{.klh쿽*:FےQ+1 ~crZ 4֩$ 7i=QG&300e~K|; I=hgDFϡ'Z5^6.7gRM(d-0 %AXzi3R n*_ x;OV\dq &+{nAֳ zVbvX&4==Fߓ6,-yC5[vWW[s$w"7f߬jd\n r%IC)"@; ,2I) A85u3K@ V츦NA[(yYG f dCV @O~Jc?ý *@M)75?o7' \8hڪzM#ƛ}a9Ym`z}#(f:|9"ܫƬr4Hi"ƳC 䗦oxٷߚ!o&{,|@?pb? B3; ڰNkWٱrEϘO_'T'4}\"Ze;[x9WBxUrh7WCH2!lQ@r,8jFl9,Oj#{S&d{Nzkm\|# ` @k絯;k> !A"G.{oNI,x7 #]XrzØiH0zM(jb/*p&I>VGc @ Dܘ`kͩ\8D+?:C٠ Mh|Ol%f 쥽/$o|@1c'ꅷkwe$%w  .) h k XZQT`B. B#Nw6ˠNK wPTO FBsa4hXyo)؜Y$˲DRĹy gޫ/<^AG{gH|m e۰6l%NiDfGx͑ԗ@~##IQ&Deq\D T͌Ƥ nq֛QR L1_: BMX7]p5hZ_=`u_'Nick)ʲ6P K?vv^3uf,$d$[SRƟDYW0YOfI5)sQZ)Mҝc"ljUׅ/JcdOC &AO}'.c7Ws`5_:ȔƮRgta4#'E4Argi Ea{,J F稈+?4&i Y~,m X΅^P`%N[t.EkI]}^짒?oDg@ooͣnT)Sߝ;8J$ 0#ZR!ivO֏jl(A 2M!:?Jy d~SFt]Da3CM۠#Dy3ml@)֨3{rM/]?{ReWlWD P;k>WfRd%\Rc/G"n4 uݖ|6❨S2J0e >CGІ!R_/<ȟ횐q52X尡oniGB_%@C} T=O's{k[{Gؤ}: d!;w15HU7VV#Y'HC>HI{츏Q#3?qg nMiK) nF&$ N^O % >2$`@=sGoX+h#bpj IA-h^/~"~hJEfR%E KoP:{xɦ([#2>k53O}xm?\zcB~} ɇ{ ={gqHD 8+Hҍ/1dُ!p HI1$Gfg|, ɽd4h @Xbn:hɁW> ?%z/wyy whKkQ4DٔYulNg3G؃Vu +ҲD0^\( ҋu$uYN딱v/³l6KF9OQ}u̖Q5[?O1H^KQbRnp +z6"2T o(nڌA$5dPt% LC]R5yAX8Ͽp|a>4S8wohL 9 !h>Aا_n@*6@M֛Hzlұ.C?J _H>C#&(@1{R/x 7\~AX](J}gwy 95[&K[[G԰r}qEtط drhMrcD4s (i#<'u(1$ F\Z\%o91ܷ婞~MkW/3K(,C3> @0~ʚ}-m|a-E@ncM`8e08婮RξHYWܶHId-$TXuې͚H̓=|@rN Ú\MC7} ӼztG-/@ѴܥdL1' /1CVx9aWsùn] aƄ^~o~wa۶A^Rס{^ c|,?دO}c3mn)tn .xfaY9yo^DRR:/l_>;rߑO9n$7~?T_11)/# ۲%,A Įv?!op>7;sOzFRZ&w+ eFe6;Q"=,FЊI onzLSPsdP{uhOƽlW@Lp^3yWЖ0t֡ C&EP]H Co`B?Pu(gyHm+N*=|u JF0+Yvז.0V1pWNni>]u_sO:[FnXYK[ opzNL/V dCng8]_qhv"@kHCG { ]Dsfe/^7wVqG4Sbg maYgkrqԳY3>b{a{JǛdDYBz*}`scFqwqogIsz tPz `Jvr5npsvTpP`~vT|$;Z%z-KN[:zK`OEkp* ޒ:܎b+/ޒjӯCO5[R {3^pc`zD%p7u}5L~^-{p^]"j0/z~uK~I~.j^:C8Gd6{@QIi <Wh0#rd(&5bX`m5Da\,F'mZ 0El:5s؁"v`crw$z-BVXY .R5SIENDB`Ext/Icons_04_CB/Finals/plock-dis.ico0000664000000000000000000006117610063310766016052 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pp~p~p陙p陟~~wwwwwww  ~ ~ 興~~~~~陙興~陙~wwwwwwwwwwww~wwp~~~~~ppxp~p~ppx~pppp( @ppp~陙陙陟wwwwwwwww   wwww  wwww陟陙陙wwwww~ppppwwp~pp(  p w ffn~w~p~ w~ ~ff`npppp~wpp(0`     " :$,!3 4%<% #-%$) <:>=/$H HE"I&E*M-m,n/w'A,$F1$M2$N7)N8)W3!U;+Y:)T1:n6 g8$o>(|<(GB9\A1oA,|@'~D+H/bL;lL8~M8|U>OX\ #L-(Pf"`&-m>1b!+t-1tM5OH8cFFFQQQYYYpT@~U@}YBfff{{{/0798=>!?BF,L3S9E"I&N,M*O*Q-R0T1Y6Z;Z4a?b=CIKNRT'[0_8\0Y$_,`6a-g4i5k8[C[A]@dKhLjRnRdDdCkJgEgBiGpO|]uRxV|[yfqGqFwMwSxT[{QsE|OvDyGejpDŽ_O^][SWZ]ˉdԐiĕrۛrccitsΡ}Ҥ|zuvx  + ) 0$4(6%6NHXO ! #+%&'"64:)+-12)5)?0?4A,CJOJPjh~ww|•ԝګֿ峋řȜ͡ЫѦԩح۱HHNIINGG<:MII=´+_vvuttrrqqqqlllkkjjiV"N#DȿE_wuuttrrrqqqlllkkjjjjh HHA³+nvuuurrrqqqqlllkkjjjjhN/wvuuttrrrqqqlllkjjjjj"ɴBwwuuuttrrqqqqlllljjjjV@ǶPljjjjiɵOllkjjjOlllkjj,,,,!, WqlllkkǔsTqqlllkǚeOqqlqllÚeQqqqlllŚeSrrqqqlF```]\\\[[[[mrqrqql;4oQttqqrq4gRtttrqqC5gRuutrqrɽfcccbbb``^^puutttr<Uvuuttt?Uwvvuur>UwwwuutL$$$$#%##]wwvuuLL9x4333awwwvv{3vwww|dbww)(v ౱ wJ~ޱ-ޱ ޱ }ޱYxޱy}ޱZJ7   61ߘޱ8N ޱH0ޱ#N ޱLIMGNINH( @       05 0 1+17#8%:) 06+7=80I [ I'J,[#\'[)R-\+\.\0`*o,f.y,l1t5I8+\2 ^7%S<-^:(^<+u=%^A0\F6pC.vE-uF0vM7vO9vP; |FFFN@RiHC}\F}_I]Jdmmm12;6>$B(F-B#D$N.N5R9U=[>Y>G%Q.^>GHHLNRX-X#Z&f>e9`,c0f3i6m:p=YA]EfJjLqWiIkHnPxYtTexmBoBzNwE}L`jqفWفYXY_PTX\ًbޔj×tڝuj`dhhlorppwtx|| !#E?CMFROYJUDPGUde ! "$0%&,5*?*+-. 2"5 9!:,A.B,B-C6G0D/F0G%GX__]]ZZYWWVUTC 9wH`__]]ZZWWWVUUR ?j'a`__]]YZWWWVUUCȩ鬩 AWUUS饩WWUU鯩魩@WWWV鮩©qq\  &ZWWW鲩鴩rr\ZZWW䩩:rro!!! BZZZZǩ౩||n$_ZZYϼ ||n]_ZZϽ;22~~p////(((O_]_]Ô8#`_]]ς!a`__ddddKKKKJJJFFFFFEDPaa`_,eIqqaa`=.~[rqqaatirrqqqak.||rrqq1͑zQ~||rrqՁk͑. ~~|||rr)͑fM~~||rds0~~||u~~|u~~yg=< %/">#?&>.#K V @ `&E0$D4(N:,S6'Y7'Y7(U<-o@*fE2oO;zM5}R: [D(Cj;Mc8PDDD]SEm@VqNmnnn;?=E)N5N2S4W9F$C H%L)Q.O3V4Z9U1ENRX#])c0f4i6p=^CaGrWcCbFdGkGqMvS|XgzsKo@wHwE~L~P^fkWXT\؟xfciks~|iH ((;;rrPP^^iiڥĘʞΨϤԩٮ!%!TE#3==;:987%Y`dfea./'&(87Jcyykcc 98eyyjclf :9fygcjyf#;:ihcgyycE<;mchyyc><rmffc$HGF+6?>srq_]\ZPN?usrBQ_][VONvusp ^_CWVOwvusR[ZWVtwvusS ^]\ZU%"twvusrqon_]Y!%!(0` %F;;;F )< = ?>$;;;  ]( " # ! -O---  #L+*......,$'T1:O*i7i6g4e2c/a-_+])['Y%W#V!TRQONLKI?w';;;F-1t+.........., ! M5OO*j8i6g4e2c0a-_+])['Y%X#V!TRQONLKIHC:F&-m-..*A)5...$ T1:[0l9i6g4e2c0a-_+])['Y%X#V!T RQONLKJHC;;; #1..~w... #'|<(h8l9i6g4e2c0a-_+])['Y%W#V!TRQONLKIHw'%=..XO...- >1bY0n;k9i6g4e2c0a-_+])['Y%X#V!TRQONLKJ?"`..jh(6.....(* 0QONLKI'>..$4..2.. */RQONLK$...%6..2.. "?0T RQONL8...(..2..&Fd0n4n3n2n1n0n/n.n-n-n,m+m*m)m(BV!T RQON <...*..2..)*HoAwEtB`6I!I I HIHHH H H H =X#V!TRQO <..,49..2..);,GuFyGwEZ33Y%X#V!T RQ+..)JO..2..&N37|L{JyG[54['Y%X#V!T R..,JP..2..3l8#O~M{J_88])['Y%X#V"T (.-%4;..2..H8clCRO~LsES1R/P.O,M*K)J'I%G$F"D!T'_,])['Y%X#V!X..&'..5.."8E,TROa;7a-_,])['Z%X#(....--.1 'F-WTRc=9c0a._,])['Z%....&-..!+tH/YWTd?:e2c0a._+])['...-+.........NHeEiGgE{Q\YW|O]:[8Z7X5V3U1S0R.P,N*M)\0g4e2c0a._,])•0?...........[                    >!j7h4f2c0a._,w4A......*f=!l9j7h4e2c0a.ԝ|-(P </?"n;l9j7h4e2c0ė•~[DF2%F1%F1$F0#F/"F/"F.!E. E- E,E+E+E*E)E)E(E'E'E&E%E%E$E#E#E"E!E!N,p>n;l9j7h5e2ƚė•|\}XA|W@|U>YAuvsqnligda_\YWSF,{@'{?&{=$R0wEuCr@p>nnn;l9ˠʞȜƚė•T:+~{yvsqnligda_[4"qF~M|JyHwEuCs@p>n<̠͢ʞȜƚʕ,! z~{yvtqnligd] $ QO~M|JyHwEuCs@p>Ϥ͢ˠʞȜƚʖpT@nR~{yvtqnligdDg8$TRO~M|JzHwEuCs@ѦϤ̠͢ʞȜƚʖĕr7'~{yvtqnli>&gBWURO~M|JyHwEuCӨѦϤ΢̠ʞȜƚʖ'_~{yvtqouR  YZWURO~M|JzHwEԩӨѦϤ̠͢ʞȜƚʖjR2$~{yvto:%L3_\ZWTRP~M|JzH֫ԩӨѦϤ̠͢ʞȜƚĘ ]E~{yv[A \b_\ZWURP~M|J׭֫ԩӨѦϤ̠͢ʞȜƚĘpV}^~{xVS9gda_\ZWURO~Mٯ׭֫ԩӨѦϤ̠͢ʞȜƚ=/$iL9ڜtܚqoM83 iigdb_\ZWUROڰٮ׭֫թӨѦϤ΢̠ʞȜƚګ% ԉaoligdb_\ZWURܱڰٮح֫ԪӨѦϤ΢̠ʞȜƚΡ} DŽ_tqoligdb_]ZWUܱܳڰٮح֫ԪӨѦϤ̠͢ʞȜƚҤ  ͋eyvtqoljgdb_]Z[ֿݳܱڰٮ׭֫ԩӨѦϤ΢̠ʞȜƚ峋bL;\A1t~{ywtqoljgdb_\xTyf޴ݳܱڰٮ׭֫ԪӨѦϤ΢̠ʞȜƚĘ⯇pmkihz~|yvtqoljgdb_~M9;;;Ы޴ݳܱڰٮ׭֫ԪӨѦϤ̠͢ʞȜƚʖ~{yvtqoligd_ FGB9ѫ޴ݳܱ۰ٮح֫ԪӨѦϤ΢̠ʞȜƚʖ~{yvtqoljdA,$F;;;yfֿ۳ܱڰٯح֫ԪӨѦϤ΢̠ʞȜƚʖ~|yvtsψeU@  --- ;;; F;;;F( @ :777:\\:7#Y>exBQ0$ >K]Jdf.B#X-c1c0`,])Z&W#U RPNKH65 :8%فYde+....-$CO[)D$]0e2c0`,])Z&X#U RPNKJG5 777nPvp..!:cgsn.E..&FQl1S,e4f3c0`,])Z&X#U RPNLJ6Ɔ.. 9.. "6+7;T$\'[&[$[#["[![ [ 2PNLHiY.fb*?...+CM[ RPNL"5..B.0D":.AO) @I"I!I III I I 1U RPN..,A..CCW.BQM.l?e90 0 0 0 0 00y,X#U RP..E?6G.,B-D.FR^9uFe:["Z&X#U!R[V.% 2.1D.-N@RqF}KoB]-],]+])](]']&;])Z&X#U!...--C.MZ QPmB    o,`-])Z&X#j`..* " !&..9NWTnD[&c0`-])Z&yh......,5iHCpC.vE-\XzNu>&u<%t:#t9!t7t5t4G%f3c0`-]*ݣk!# | 0`*j7g3c0`-ڝu\)m:j7f3c0ė묂^F\DZBX@V>U$Q.p>m:j7f3ǛĘS<-fJwsplhd`\XI(N.wEtAp>m:j7ɞǛĘ^GZ>-{wsplhd`[ f>{IwEtAp>m:̡ʞǛĘj |{wtplhdkHP~M{IwEtBp>Ϥ̡ʞǛĘ xY{wtplh^9&R-TQ~M{IwEtBҧϤ̡ʞǛĘ\F6:*{wtp݊`^>XUQ~M{IwEԩҧϤ͡ʞǛĘ×tyZ{wt[;) ^\XTQ~M{I׬ԩҧϤ͡ʞǛĘI8+ ؛t{jL[>d`\YUQ~Mٮ׬ԩҧϤ͡ʞǛ۫  ^F`^A0?(khd`\YUQ۱ٮ׬ԪҧϤ͡ʞǛq +jplhd`\YUٱ۱ٮ׬ԪҧϤ͡ʞǛt ;)rxtplhd`\Zݳ۱ٮ׬ԩҧϤ͡ʞǛ츏qW}_I}]G}\F{\{xtplhd`jJ777=80ݴݳ۱ٮ׬ԪҧϤ͡ʞǛĘ{xtplhe9$:>80ٱ۱ٯ׬ԪҧϤ͡ʞǛĘ|xtpuU9&:\\:777:(  @:::Y7'WdGoAUj;MO3f4c0])X#RNEV :::f^A D(CF$C ?;=NE] ^^ $$$,RN PPiic8Po@*o@*o@*o@*X#R ((PPl@W)))$])X#fg((bFo@*o@*o@*o@*c0])ڥ;; l&j7c0Ęۦ eG|vSqMkGN2@ U1p>j7ʞĘN:, zsldo@*xIwEp>ϤʞĘrW^{ti >#T~MwEԩϤʞ /"~{}R:cC\U~MٮԩϤʞf%E0$S6'ld\UΨٮԩϤʞkD4(>.#wU?ytldX:::]SEΨٮԪϤʞĘ|tfY7(:::Ext/Icons_04_CB/Finals/plock-blu.png0000664000000000000000000010410010062625750016051 0ustar rootrootPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F}]IDATx{eWU%<歪*;@^AyJ bJ۾~v ڟ~4OO!4`@A $@ʳ=s^s9w%sPgܺs^k9s swef8:'tMj3; |3_ vLo`f/r8|J.x }3; #w~ͯ}] M`7\0S>k~}^!=xͯ5E6٫4#k~ͯ_wx]?ZL5^9_`fϙF97]WN ȋ,<LZ?^I0b~ͯ5Ojn8z Z^U ?7OXo5 0k~A~h~ͯo?1Pt` Q<)O)9 [ڎ}`ߑpa ` ߧN~w?ܚ^Mnڿ}Zw=c=)!~O{_q1{>{7ܚ~p|~ۺ{uA|{/<} cΛqW^*܂_w2މU?K~v#C=Զe0xXmƅ6|ONd\ˢ@a(Fw,~v {+Mw4P4L6p!UcƵl 9?S<}8*C@'o'6n,OBLJ;ge@8B {֡a-8mY~Åxq+^2LGz߅?SN .,b"K|]8@<N֜е ýt‰?=a=2#Njf> ɏ짱Ei-M-A7 ־G l9i~MQ+c:HƱqx3; O^C!V(YF&B{OC֡Hݗ-LJE@d]tc;K?g\Q,e݁7G?qmAe}gJ_mݺ]NCN>Vpz2lvkx{}2tA%kA]`0n`-2Kv#R]۷e)|^ p>ԝ"K'4'bLD+RR)bN>`s 2,gҋ.CZ3v3 `Cn ?Y&(;/7x/:<AD$f/)7 Wk '" aCZAl-݆!CeNY͔o{͆H:6AȊ _0.l ʋm8)$}4_Y5RR{))>m:K…x >^k[(ċDa`'=[훎v/vAv]ϲw꣟IHdvuCƳߤmI6'H>]LXHr㵥)jV9oSCRIm΍& T Y߂j5g_?FC9 e0-`T!@gAAƢʆ_fpj^ueZ}UBh݆rk)XKM<AB)! f;tJNjXsϽ#¹G'+FR &}}Q)UP~L5o>>t§̗qVI劧CmP:~HmЗp! >D*FOcYç{~3G 6F4fڈ(ak^{2EMv<#$߯ s$g&&ng41Fn:i?>SXFP%("1-\OTk_G'+ 8QG5p,,_6lFO9w %yn9jHno)j5.;SHK -DuvJ9d }F0}o}kXBFxaA_K6L]&ueN`m<4,}x`P>c9mZxv 6œ,GEڡgp3z,lŋ<`QƒE1Ih@Xt!w RF\OK(؊3Bɡ@N:#օ4=L.vuymG.. q 1{ lt( GPŶNÃ9 781YHkS`S*hd;r h.8QŁf:#~$^cľ[KBc&O&n0--8Dj<QIP*|,bYɢ3އXg#,} x&4^\/| c/`qܳ|ʏ`8&,l(Ԩ3S)>Od02} :#bgZDw(92ShESi`Ec x/I0ǝ;BY$d'Ĭci@$̓N&Mʤ~)Z2Vv/dQ\z\ɋ/˵a#w*)/lݶR9qIαC)QU8UOIL5J{wa=_GOp3u7G $]с6ш'AehKc-B S,25NJ= +|t:^/Oo^~\g 1O" QoTOi_)՗h]5zB q2vu?k>X=;q.ĵ 6mނPYqYAs&!4X<]$b'P>h :F0JHj.6΅#qek6:1\ci3C7hf~І" T)FcZY_x$ @aT8S/ u 5rS ~Xܷh׽wނq> l>|g C+bifIKҡ$*\'Cܜ#+N5xmASr,,b K=t9Hr)gAS=`\r^\;lSZOT/pފ]܁ok=GO_{6l2l|o:i,N=I 6(P5 dP'}qjL 6Gƙ Gu"QL(.3*HDI3b+WRJ#YG3QU bH`!:ZK"ֺ]kB,/-Z^^W½w܂'aӐBȔq6>x.d)@T2wA 1n'ҤeST#A`O'HtfAHsez>?~;,??#oe=Y,!ДP˴^AȎEiP:X/8I-+P]+d1dٴTB4.0IS/؏SZY"1EY@ԾnFIץOg-_5_30V|C@Q"(~auH&ӿvҐ]))+ u7]dnhq 7~׊) ;Xt=@oU`q@d].XbEڑvnjnvTa}^OqE#LJY<.|ʼP/ڃ.ӭ!ɽ 82  <5˙PP6JWgm-fB;#?&.ڽ,.Zϭ7\뮀w: t<蘓u Xڿwv#kK{Kێ?x+st#tXZy cb:sVR l5jps3YS[Kw Yea&C :O7x" ИW_@N}BD8@50)X%56pn6l9hsptl&Ix裟y69w>Ϛ8qYOES0߲+PZt9#{0勃'-ys>!fCnBm7ڃ3N{L|u9 \FV)'p1oY| ێ?MPX-$H3SdlcO{/cXܷa#p璟!8SG`!axpڸwphEٺDh Vy-IJ@S3 @֦ *8(>{.7_c>'>Qx_G| &A$@h6r߃3\| wL(|}cN~$9C6e:980\{CBC Q| Ť2=9,#~\waz K7, 28 53}ͻv܂_[Ϳqӡx߇ſl~[l址&mhms\HFb=ލOMt,񧝍V'?Hl4!y?z͇m!G/pR2g+q㛸{;Nijl9X"Ŭ[qgߗWbM-7%rؘ\ԃTC;. 0 K#QNŐ p$7Jӊ 8㑔AΈ>u1QOy_æ͇k5W]#H'J/ja qzԳdz_;زUwr5>_žwfב!3)x(\ʊ;eI۠-X'ZAP ,֔EJ0;ꕹd1gLfDbRć? o?4t FvVCZ+ܓ !{s4\%܌MlÞb5Vڷ.\Oož{w)>x* u YD,W:dl+VQcWS33 hX`ɄHݦгK֒ O7 3(|2TԽ >>7l܄o_řyLt{)'hauO6[ayRa/_?z_W^yͤ4^HW>AS'AHMLSvH't0ʠ^`d:܃4D}A؏oJDX|뮼d}?|LR-~2s3n ~s_SU7-ʋwr = lקSߋx1*0AM۠䒽v%H4d4J{|' Mz̛ 4 Dxq>ۗtlيoyspƒbROj&@/)_V6䳞mb7vm*U91R2ۣMzHod 3PZYdm1ρZl7 Vr:Z*\m:l:"Ռ1~ c6\=;jg? L6_^Unux8R-. փ-Eo^>p@+mw) " 7,H:bB `%^OӅ>g{ϱoUYGc  ws4ߥ7qK@Cvu.6`-`O™6lZ[o@Bf8l)r嬘RR59|Edd5^K$'yL33 Wms8N~d8hh0i!Nc,7laN}ijpȖʽuu1z.1mdieT_O.;r`s:L2DY |tw"xcO1g^ѶW=`gWpWZum]#i Rm}@ cǕF-^ll ų^FpV-Rdw)Cѯ.mJmĬr0jw\%2#k0KPsj؁xSF$2~Wl&AH7܎/^;?GwJ=>JF3\(+D3yKUӆ(Q-ǝz.6z]w݄?!,/-q:dÜ,3Xҳcb\JYziNNi;#@Iώz#հ8$c aeˮUY 𜗾'ܦ+N#

:sƓo R[P8,Ì| G=oUޝʋހ}*?G7-e(l」5,ɧ#р2|T x%νi%AT?dφkpm_^EkcO<'aC @uXXy>:Te>Rg]EԀ[?a^vǰ'8>Ge鱦NUx%jۈRuC KnpF@ ў@;7դu贀<wZt96\F(S}ϝ [S#ӾqDF\Yi-:PҚ[g[yS9/pyrUw/]ύ§v俳v43ћp40BeIϐO1AG6Hlued/r+G{a~v;߈}bu~~ae:KJz1 H_º>PEm'>_tyga51< i֑֮,ƕDЅZkH V"Иki roIUAa)zA{g+T:{uW`wbݺ&KYc2Y F҇N?]Ntv(?xqIg=mU7];w0 h#MB AGސ]` `!.۰/ՈZl k!UcI0Q.EY 6< ˸:wLNgB AOg Gfwv{ת,6<~LQw>~9,Q|y.QʊVNs[_U,/i8ENbtZ7 ̥hv !Dm3Q Uii~,0haX;2f +~oqC#@5T}E׬H f Wi-|' Шc" ӟ1S.PA$h&CA+?^{z&L4tT\7Y ym_J2 >8u=lx~6<;/~wY PIέDCsU-9X Ԍ QHB9<[ׅ2XFd C0bTr R2[o}]y8!.UeE^EsT۵pnEfx$q)[N,{t [7`ӡGo{٪z} WLEDf΃LlAvl¥HXPִ"D%x$A.qG ,߇/|buϊ/#:GwZHL2KLV2?+*|N3$mbɔ >ظiˊ绿z5Ÿ('iFjW*jX(:Q؆Mx3t+~oqeo#/<+P+zl0ѵ=„=k`1%ז `d:5AZ7%n{vk?=Wz:>{vD쉵V7,?aF5rSw Yy 8oǞy;pmp"7>p:ⰆR3uR.'OA?TTwfl7RՍ'ꭎέS5̧N G Aܒژ#lQ p\Eu/ʣ͇m#Gq6fGbms Mv&m-i䡁%}}ga!ciߋ{PnxC^K#c`E`Őۃ}`E`FA#ɾ.DAMLd.U2dn4m鯭[1YW^f x94uFZNL Ak-]o#Q:*;M~ڏ?k;7^F(ԓQ/>KN!;Rl< =Oݘ5f#~\q?A' 4a(D*|!Cy&|؀eB0:F[*+ϲ\tw$g ʰU0X ^)`zԩv+~w7\WI) d"K~|BQ=ԱX$Y`B ]M⌁c`T7_iG h6w T睌&/|_~zE†8䳰a!cm<ԞbQI!BS1pe#-D[5Mw")GndM>\Eu qm* tSKpHUb1u;5X q"9+,>{ 3?{҃ˍ5DmD/&fRtaƮiT&Bv̰<,g%r:y^1V߷{EIg<O(V6ؒ罸Gumϧ%֋g8A8!Oģ+z[®;G?ʸiM e`'uE;< :=ҘhfFj>* H*%V#á[sOHU#"`ċNCbYtyN~w`JNOF O<|Vjn9MF)OCi>ㅢ!<(`}P8`l$}"MhR)t'W\sۋ B̪>@6]Ġi6(+rT Jʙ#ß*l|Ċ>;n w.d'l@Y b;!q=ۻ"祫/blʀ T/D4LsbfVV Tk"sBp1 mq3lP@b5]wmVtZ0q:ijoL=NgV'Lar4lʪ2pQR"/Z9 :!)&!-mO@AӵW+*ey ήڧKWt{q`j f58] WfSbˊ,m2=&a&h>p)![pKI~>(3EfS3.ky~?X OxLgj`f)ҁ QYcQ-y*R:];mE۹Oa;o R63lJ; F^m!S7Jؒ-hژK@ #ʁ6tVcC3F_F'z?lظ暺 $ju!C-fZ ; + N HP~Y!:ży:6rc#L2<~>ۮ '=ܶҶ[6OQ7eT7`HوkwMA1BcQTU@M_ MjҝLϘeT1iݽ @ 6iLJ;CdE- [1 EpSِUi?QO"Jw ё ړ:j{\WܹƄPYFZjIveylV]̍lGEYulm'Î:mE!ed*r$j: T9 6z/j'N@@)<zPhE#kQ ܃]ZF'?r x3Gm?3 gDv PԲsFِ9#֞&]WN<pbu%,ŌS8'h|թm𙖳4 f#XgA 5Yj%aQon#bJdu?S~[ B-l1<f KjY5^@X;z1poo-l܂ھ\ez8Ld0.SɋqRc44#FEPֆ) ^%8/@}w"au5A,߻b Ca!I*R!% 'ДlUL=R*Tfu]d8h/q37+ܬf&P(yƀmG M\g(e`DF}p֋t1cy(f 8| 0v̸[)Ae@cU`yۭMA]\wDstMr%:];nHGASSOuusR|f%k+MbKq5@2VvJtfl9vm7Yvz~+xfڣa!2-JihҒ.&]-ù͊a` O=Fu ׳ er)zCW,yJkFMt'cUKW lj됺Hf2 <łLjv@}zK_zf5uA8t81Mq`B7\wZOz&:"M-.cgMVЖrz:(&ÂP2ԺuZGx>=D}tV\Dw!`C V:(RWyj钪S$Fn <-u;; }]O-TCu  u^3JhwR@)k (O"nfI_c_3h3`<.]ƌLY=L\sQ4=V%ew_+H9 tqu#K&&r t|b7ZÿN)Q-:@M,>z}vMcAECKqYiڀN"!i">mp'L2i~ͯ*uLS?'c2tAHr\?@Θ8Zi3$L s).HUĚZ@]|*`Hc#Y* Ɨ 60>r7TodTiRzb%e'jH K, ldyz>U -,SC̯b@%ֲ$8*ujn`] zUi,^Zn>5Q%?$hAD6È-QmyEYN`5Z:N6fl%hc`UuSicGpP+JKϖ7y.]σ3l~nq谨,4pz聋>,اG\XFB mǺ+=Ɂ~ V7|,0\([${.|Uvwu * 䰋txҝױ$C#>7=e@N$BJT2cM]0_!yd~bȮ9(:ԬO7iG7p.b3d ƧÖ4S ݊U|BPD%Z~8U;PF61=3=>w}t6~ȃorFjhFw>-EYIyٺAbtqwy 7h*jhu6nƶDN9'Q'Wlܟl<"%6R>%DUƦbH[5ې'\J˞E [zXjEgOwPp$#_|A Vd藮 ۉ#_Ƣ듔\q]\}}O& X"ޥNʩf ^aQ}leP fd9b HWr4Ul8i8$=ӘdiiޏڅW8s1=9mZeɴ66 GLFH,TA6לg}@@uE-\OzԀpdr#HWo\aMA@F;,:OGU } ,@_ǞNl5p¤LVrw!6ab ,fjM־iZ%|VQ (eө4ew3(S#t0ˀl5Dkv[S+0&Iw]`pv-u2M%O %`ܸmC1eM*ru6<ᘃt_7k4qFZ+A(hM%z:TE8R8X.hbTkU*'ZȞ1dPNy?1x:m" >!w(3d_ p72p1hiX&f9tݸ{EqwWztc Uy}nE.zIu1F& =hPh]J <(u{\r: -SP)' H-8.LHI2[jUwzT%|l<_6[a$FjLD#J @&M~ beՃsa&tˋXذ a.\daG6`xRxLm6;ĸ葉Yx: y8 E^8/z`ͧ4E A" mx" \AAB-ILy]f9B;{Fb09jZps|BDAX8'-JcD@ dS.gIc Eऑ{50g^^GW˘jSVSK]L1a|[>nXԎ ԧi[ON)'aBA ,iհ'U4DRS$P"%Mi^ATE]%Nj(W7hO҂M0H'"7Rs!jώTQ,O Ʌ =$TP 0ʢ Iohhrd>6Лy`{^c΁FNc8c0\7[xM?ӥ#4܈) 4iGKۏ\2*Ƕ1xY)8!nɸBeb r?W3TZվ4 )']HbFTg6]xoDL"acB~ovK631BZ _sf:TDȬ4 ,`PöLPI`ۍB> Y=O&k6bf[c.Jór,}ZFhX,߃lM)J?ol.q̷9?y)l!{`%~o>gbæT{|ŝx+vI\~kamivffܤ2o^y2Xܻ@`B64;!2}b2] X^uWs6 W%Ղ Qkl*>0ݙIjY㴓1CU_6@graΉIRA +.T택I_;![~5ag?2 mN{ݐk`;dF$u,cwexnw V yz `L|`'ft-> 5f`dCVJA&ѰUεeAGE۴7ÃlSڲY`Tn]PL= ˦&!?*없T6 kЮɖjN+Xqoe{X0ݏZ{] 6$usMT+lC_+V +TƉzm_b)7JC[C] 쇀#ub2IR&yewDi ," ԕֺZՓU[8F1X9sjRX _)ǣ$E Ks&]ѴƵ=_7 skTCH3+uQY]Jx% 2zk\ OFA,QFVӠP8UC?E-\9hԃٜ]q gqܱKYAYz 'GRȈf($M0^x Ӄ"Yދ8 ĪAUEޒr6mp-$BN։=>Z`p A5zz=IVJw旤FꝏS{Ӭpop_9dK *M~Xh{^ X\H_ U=_C/&LBg n3pC=N-%-$knxd`m!x2laCzx{:Ԋ1ީ,<6,B,[Wi6FsU $K`˶gla,Ȣ+~:LBEHUGvs}_4>oR.>wު ߾X>/?v'a|aA=fpBˋ fXx,Sbe挤{a^8iEBXSAӕ ,+!oD=ݠL-nE !c1:Dx'9R[M%[נiW^qOw,t\f[c_)p4^>etOaNIJ b X+B&& A\(qXX]4,DJ6Iq_ORRL{],ʹ{gW4+_PQK{J4L6J"JƼ3_ _i!42`]؃CS!W)+M3"F ( j[gq uuٍ NIo^0jc]Pz݆ZGaiV̈́waDV#67>TvJ s4H09Þ^JC!S. HuI=ohZ˴3$ZOCZ(4k.Bއ 6t̺jKū--o@xR=V. qh:XX#6 WŮYxL~ܯ> Mayn䞿^e ҎSa*8E-<prui?Zz|\?7'l ;qΞ~T( 'c&u/+M=.!-rrJiؼ 8V XᖑlCvX=:[dzbfp;RkZ Sݭ5d< u+*5)f^?uKF(y\%%g3>,vf TʍT+# 5X_p@aAibNOA q>FXpў0r0iĎF$mo~c_Mi)3ϯU GqOt15Ἇ=x06(E4\1L|7TFƘ;̯N =9q[fc4 JC>YLJL&f!4(0n-@a)<̯.& )@Fʔi<<i)墭|=$z7 7kVik~b+fVe^lRA\ b;9{S$)AԁmLMe~e#BUtk d"|h#ý|'٤qo&S5׭_\ Ea~wûF`5ޓ@#kS( 膍 '6ĒW3~`_+DvXHC2\ːKU:zґ0a{N 2`~7Ԃu`5/3Kjz5MhPEzhQ *#OX@<{+cj @i M4fƉLZk,d~dO0Ә{q6z]6N`e*yQT3GmT ?7 o~8?h͘|ּ](>#< t®KMNDX峑tvv@7|ϯU LW/==hF  4Z0)&4tLÒf˸d4G.,,z7!Lx abtlXm,F:_+LoL `k;u [pcw~8 HBdyᝫyvj,`_gJB䢰L, T$ 9Zx.>sV9n5K|ׂ1\'ϯUm9p?yY*H8ҟ"Κ+YzZ}ȖɠϠ^IB.[hϺMׯ}k`!x@?=8L?hTt;!Нvqpxi˻֛= ԑ\&y<\VAh,^r.h,%n`э8,P*D0LD-~Ť孇ɠ^Eok_\}ǃt6ˌuI*Tw(!f0 1K1B[.4rw7&ju1YʼnnyY'2AЉ*6X}&esfUȨ5ܭΩTtŌBmŽ.'-\84;Kۘ.fpв^4dQA7>[obnˬOַi!w='-twX;g f7#VDžL4 Sh)o?TiƩ%,~OJs$7bz笤sbb4 o)č&Q̀ IsE3 SxG%P['~ -;t9]+>i5$nb4istVɪӹx֮Krf˱,"u1yAu/.nuMSi@B%^LdR2 g hk7q@]'ES]I; RXr _3Ֆ+.=)FL^oEj ;eZL͙a-iD3Z9N":,u(Ӡ?}%= ` qr,vnbcy8Y"ݔS!,(z՘ǰֺҮi Ss_\L6QiHZ{v[f ؂k뛴=te2sV`<s͊`Xs Z=}j ,Z8qq%QKbO,ٵL. q?i=M* (z?`le,jz{>pdX{ͭtæQ cyrBG[8Vi90zoWZ۵3TS H7K_h+>s9Lyq<ZN)M.R١N9ﲪvtXjH ns]/<^ږC)ڨ}tȽGKPX6;NlE3,n | p]Z=")S&K7 hTO.M_a>8wK~103n ;VF!jܥ& (Ec^݈)<]HR>*oPDžZB˩L2֦eVctBm}6p pbfѮ FY:oLcQkkXK6F а gFjoRܼ!5뚘f>B>D#E{F`Ĕ.K;Pt<\<4,Ɲ,"⣋~P7vlZ=&YxVwUWNC6(=$6j6n掝YllQʵ4.O{fsޏ.OՋT3I#K*H0o896f4L-i&3qxH}O݀@Sk裘ʠÚ(+Z2.4}J< {i s&_1.9S;"K6~/fx=qv翃}^0$]f$f QIy{7MRq6Nlc|uKK/'>rF$6Uj;i˹caAlcz-`>.fi#%lR%Qd0NYSq&F | jh#|3;txw/杴KN54$T31bTl~# ¾I ֵfY|Aw&xl 1*a^:08Ѳض31aiiY@C &Us`d}w,`4@|Y%ǝIRz3fLϐP)Fv@f?̘Lm5 ~}y| v v5pi/ի>,Ѭw`usҴLst`z%k c`!˂긎taqgNDwӨy "MGK>#Vr70&0mIH! LETdy>__b{kMh$x 0]O!`H,I}|_?Y. -)^ 9Guɂ-<\{wfF4;ٕ|@aW7O$/B0$ip[@-p69fœ xE+ϋ Fls(s -G`-zeG/Xk9CҤ,aޟ2F vНt[fwMnp^+]ihŊ[Zj3w^sayG"h6_2 Abo3B؈W<>66NbgV<8lYE-P^;Mn4bUfv;AQnۼ2M3> vF, >`Sw"u{|eoTLCb=_ƱωBNYc[( t#|Ƞ">:liMjx 3QaqSKʈ"\`*LI:- d]h}95`^K6M+7qkl6heE d%psad;q[|. 6W|S&Jkʅ&$Dau`D%;L D!W8$=O㬑 e;b2k#%d¬bfA^PԹINok%rk|тt f28Ιtgk 7YZ38e"4i> cĬS ]) Я 6"WSE,XxOxJo >C% Lr'w"u#B:`Д_kRZL>N3A۫. >BA @qY孹L\y@ضfڎr// WXYUf xv5._`/^ WW]uQYl;9!>̆)?%ؔ>1KMPe!gs $8׎>ōbڑO FڋA4"uأ4h Eʷ[7쟣jN"fm+'+ Q-r`$_Zz?6~/.gI^V}wa3{7?wn8>êFXЗ֟ur]g˻xF|{);QK) tn.\;{1ԥQlQgZ!Z5;ΌYC?{, ͖mw D&Dc"}޾|-N.Ʈ/G.[u`+Z"{gՍfO2RmS`SQUJ*Ŵ Vsހ)h\4t1׵NɘEW$P,`*p:d11 B%'DM@>GOYV?Q$|9>ݗ.x )sh;z33x}&6l9774BFuJQvZ0")U?עvƋVl';Q#mMƠC66mhaQ彳ȅE> RRLhFCSr ,5v$az{-nq'F-^/Gc~ͯޯ;dd]Wm~nk~ͯl%A`~ͯo_*<̯M0k~}l7̃_>$&5_`}xaBk~/\ Ͽ@]Ř_0GOc:nlg=`2JkX!=5]o~Oabk~d^J>h +0 Z+1|cF z 8;WvabF u*b"4rc}~L:/ޱg.[7<u^OtK OOIENDB`Ext/Icons_04_CB/Finals/plock-grn.png0000664000000000000000000010406410062625674016073 0ustar rootrootPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F}QIDATxieguWX(4!B b0a<%v<`N0m5f^K\`foG7f]<{=,fvͮ,J0=5Z7ރdAx6g0fע^k{,Hm5slϮu] O 8FgY< >Hh/> g:֟s*N9| xM|ˏ$h] ǿ7g4~Gq t?<YziOd~s{q;`dl7 _ht6)ϒ]mC;1@my=ݲ_?C{q {^=*"qWÖ ۰-xx&56> A-{]{.<[pǗ_߼ =rdG^Zky)%rX+O̘ay#?cT2. >#}rӘr¸xKr!2e)L?[;,]6w+B2Pb4M 3tg"7|NP:މ[|Sc~00q?:|}߫ҩ˵Sxņ#eiO82é2arF.39ӂm %M?R?)%;ߗ!"2f~b.0KΘq$} )V wR>U֫ a$w lS`>p7+\OJ>0?v㧾g2 Ǜb~aQ E^T OCC MtsX\TX3[S /ij锎dL1H"7Rk" N1Q)W,?貺\N#x)H𕿹_}~,XzLY{G@ΘW:_X:ӂ.nʥV.b:Ȉx.TS26 X9ll i*pvsYRLH˄ XLʬ{K cAlpvkq[zbvi je5w~w^*}궕Yk >oM˧RL}M07+NP豻`K-@@ҤW,&јąHh? r%7S]֡$cȐ8S1u9 8D` ɔ1a b+_w v-i_P*{|=4p=BfTo-|b0CC^) Hp|y  [VOPaAy{G;̰) tf7C>D%y߱4>ZV]YlcaϹ=&߉׾ՈԈ0oma"pu!,>3GN}CU!,\+[c$P=&ǰܒk #¢AvK ^t|)٤ 'ArF=Z.l%ݹ "mg~=!U a>ٸ_>p>~lz;.l;3iA3wr^sh1 nT-̒v޽ANNigiكp')ÊB:䧴ѨGLa#'h Q vy) $ p-Xisp ELih:mYI>~~^/vv]f?NL5"3 \kiiJa隀.chŐ%f2@<{Z2JPfih3EܫD*yaH,t8K B8rO({Bͽ8,HH L ҧ=_8tb,@/*pKY"K ty <|8O{&@;R>ElnѸIVsq\ MݚqEu8Vn>plZ]FQP8s@! inD^~spk,+jNN訢(6?rY^6P ېUck~R(AL dіT hkhA sOfS~ENl=g1:Lz'3#;ESEEWN[>]7=M3kJbK tQ{X2c2%L8LA7 Zg2X(BpB%vcU"]Ьd쪤ADeKHN/'=ض'\RsJN(ڡ(VA3)=ןe̩EᄌqC=yvGp!㽔aMlG Z /i[f hGYDi E / Bš]*oc>p4`yR"IdH=i'[sCZfz<34#  .FG8tb |^ _vTN992DZxH1M$+2΄cnND$"zor%چ ܔ< cz cE=O=oډ?u#nطg0,/3X]N?F̨Z\B& =-d BTz*A u Y iDzu5ө-\+J.yN\Z%_pH;qJ+̲6],^m C_7zRx5^h@1SDϑ 2a*06XF o}݂'ێ`/vľ=mxmbrqix?z%.",_6s%`f:7}FDŽ ӡ%3*MN|9;H~ 7~ݽKtx^~z|OK𜣞 UabteK^Hc~;l=oT@adX1v=)A>]I)0\|/> zo>'II5KM+e\ܠI~vZl3 "j8a!Cg lMo~yqz'^W]xQBt8 1-QK~^ۗ T"5JQjME6\o"_Ct60z?cwm^ OGcC1W 7BQ녻e }`{%4߲phЕf6cT}|?;ߎ7?nzo ZAקP7 iʙ @5䱛lRРX+$ٚo2#Y-~XΩi rxXvc*e|ӹ~:2"f\lf3g\*6?W5عuww|_/y&LW|7dpF΢ݣCIL L7}DOB"tq(ڹ_{Ʊ8uZYb6P{Q7q_K?GV1w3PAi3]X,}4yGl{#/9>_>mxG_}sAѿCHGOڡd^g˃d`޹dVS*;QXBLԢ| ɧ߰Эi'p!cYR볅P9gLQ{JG#TAL78~0v=c>mO{͒Qޒc)Sm鹅n;6VmLRTtϜwfsRTJ?Ǜ%qHg5q Ѹq`xo1$0Z^q7?=*; 6f0|/&5Њ]ۿ|~glzh˷^ħxb6o+8ݵ6MJS,G(XgK%X'>tqʧ {.jtC !4 l߸s 꽞[޲_QN[Y~G솄6F ۩hp 8kEV4!K_c<_>r5vo݂QܨH'AlX `v+,O~҅ePy:BـUI\p9l 㤨L + 1lMd"թYmEMlgY{I9ak6372 ſ2>?߄ڻ{nԭw[pkS+E{)-Dxxِ=!qB.F)o*M-*-XZ73瘝h.6neԖA07B|\"[ɸP|Czt5*>[wmx[6˱' sYqP0sl AYd{  ǡt<ҌA,w(¦uiDXFv2x2py6¥}h \:yN>\Wwx8ܯ>|#fpqA(+2L@٨C[XqJeA5J"|Kb[ٸk\yOOuL闳I]Dz]5$N b =X@1Sl-57 ۟M8x?>H[.ے7.;HHEIp bdַܥp={0>O oT|(d CpW_a>ww~Ok =~U]etgڔ*`^Š BmhvEY|fǒ_?B9= (~u&ʫѳ rNk}ל;f_xUT hq L]͏N8{/x-t0eCFhA"^}YwpP`T"T) v`0 gL8FTrU ANvv#1:@aS5`8T`~HtK;tC4`o~nO)ܔS'kO;bH)=`6vsg$Çn޷qn23au]7_g$C PWb,^}\Agֆh9%̃(?B|mXxtVô6m".xOnU܁hH` ʴZ3Taץ&Ɇ{6|,M?gXy cpGaVh ~+p'o K~eA|Cr2hIaYǒX4CE=ǷuH'QQ1K $m8JWEןgbXhpue6ޱ_WF[65Ǯi睂W?V-mرy7>Wv>?$>ވKD|{R#2-jPu-iQ m YO϶6%U図151A\7bۗi+_|998#a搌DIݵ;÷ou^}'vnݵYK?߇5ǯ ;&z v *̙ޛՄß n̙Id>`\bFԟWfa-)8eҍ' k;z_w[W 6À&t\ Bo_x5X3/\x ^׺hv՚Xf%֞z,^xq?q3n7uöE>ޏk.}˱չ+PusT{Hadϼ1(p`NP\j/o@8b;X x[oWA@G@uh6|YF|ϯ7mQS:"韾YNhktNOR]ѯν[|^`6T'>% (x< !8YW53֔?pLF`pqi@t*):h vfYioÉI 7ζYóUt}7ݏ/߇}{v9f5."'/Q'Y  bB%(k~1L'_/ZAk~.,9X}(!e(Ff^zv 扻4@q5`52kaР/ sm2E;4lnV䄺/xKw,9GtG9%j6VS@d:u{8 J+޹y=o`@|!k`5$L#] ECɾ4/E Of侥"!4 &iZO@CK6C@R4,b }N|>WW۰9\މGuxJ@w`~SKx~Vݽ _;2|. gk/qf#I ̀ S__rH5̓{z4ln^?!; pZKO~2t c%f *诎2fG2*w|xw 9nݏ'wuvn5u]X,fʳAsOp-J#9bӖ!: X)HfI42 " K2\&I~У $nvtխ X+m8uf)rPeDyD-)th5c`0 BKKWKo ^/=l߸S6uX>8SPR'z_e1 . kXجiWXTkY '%Tb} kp]Ens+~M8A2O^9aLw'!q/9<(X2zH]2|wJ"S-:`)&EƢ10Ѥ8ET:0'.bo]Glg#ss|%>TO hL@a7V1I]:GU y8Xjݣ{7`If% C%s؊+ݭҗ(iiJ^Bz 439hf,*O#p8!N #ͺ^}S8"=LWجKH*轺SdM?-݀ۯw(\ޛi,݃&k61 ufKҎBkf8D2F4-SH( Pbucݍ(٫~l{ 2!mj*u/)>6jh*ރI\I9,FVj P 8ZC[f8㤳_c.l}d{(^`zL@6Cֹҩs5}ˠUq{A@l&P5,^]ޖDZ0wGuŞ9ӏ.m*t1>{rhNLG;UϾ ^Tw/tK|oח: '#U]dk•( JsCvj&X:I,2HØ|[,RϽuj8l7mgJ+^#]+t`oQ&)5#^#tfc^v.|yXrقܳoy]uwRkjCEM( ^O$XZM07ڊ2ogbB!0-b)0uʎVBέ֚!b8'|fx<]b v]#}u42J ? Kq_姂 .NOP#;h}9o[چ=;%&j@ֲؗPmNV,Lu8)skˠ]viȂ)#+Ȝ (.~F%Y8{0M]_ >`3Osێ@J&v -W= {Ϡߺ\z&8rՂܻoڀbm9^XA3HqJ)6yڥ+sFE5"0NSl@ AFYsU_k}95I\T%}' u^LFa)+&2S0#`Euoj`pYL._9+pڅ,Ƚۻkmc9LB.28D}hCHRwxo`Y-z(F D1+1BC7 &U`1Iy*Ԏڱy';8k{SDxriPr2~"mt̘M7KZwV>głmwk&5m x;]  jIșf3zb!7e OxfG%Vs;SDP~V1ǟ݌|Ysp忺g4w[(,yS}(&塉Dz?9Ro*@RÙ؞ĥ8u kn|/oZ2g_h&z7FScp}(բ*Z0N6e/$:^B5bM.R l{#2_*)tȏFWTPQ]6 Km`?py_Gx.x xdFmcgv*l`.Itu٪p;tt- 8v= 5U  _\}L#%k jp?~}J>?M~,aDVXx3!&QUvRZȢ*gE){YϿL|/|X-Yv:Jf&8e8ԴK);^&,Od_`]{3ETL yʴtgSy;R#[eEzRb2?ekuT`Y:>1^UxzdB\A~߷Oo.LNEa:M?* 0/^A ]\/ 8$s9Ǯ;67siC ޤ<,?Q\sKO7@NX~Z1Qǻ,R,X`/ݵ"Jc3t e*kDu/=ugOɛQ -(+`ZnKaz?L%!`- ȕ/Z@vēΕHA.UCī!)?HdOzYe5.ELi$hbj4U`>ZN觹:Z@UWþkO<ģp,fى%[o._Rdv 5 A݊[#0J̆+Ni~!ge(yHsn5`9c4HSg$)>PҒ"Z`زyxQn>{Ɠ;¼]IRA0rbǧ#CQeԙd[}V82ur% V,å?r=yw_n@HEFJcUvI)1*R:.mD:`âH c7 h+ lA7&P\Md&B@ƽ[p=spԉG68`Ycb3~c,>hFF}~rly 3w9n?jFGԤAzY]]h]6`>c?&xxjP}ۭ|_? OAp݂'yV}Lj›H"EVemI"g4=:$tHEjGF:=~\ CB#>w^u roTبd);(ͬ,c)0P& LSFjolYCՑvnݍ?s˼/F3gވ ; ev|NU&y) gCܷ7tYNMӎ-j^W?1hCȭE݈@IlAǘIN%.Dd酹h I)[l}k=GqU=2,&Cw>k?y_V /{>V^7̺` 躌Z[!O}DaiPFT L8"KǮ; '=O< }nȨfe֠Y1`m՚d|ôR16d-/)ݣPG&K+1R 2d=Af;p-B[>>$,[ (pkm$/ *:E}OM2耗s8j6Y 8T=mC}yٱ޾1Dֈ``ؘfNWTc&> f6l&`܌KCX7,*zn22+w)r E׈;;;5ǬR>9q! @RxN*}jhuV-'PᾶO^w>ϻ4{[~bpOcaCM{+֡Es0..`؃Iʓ-בfb֖$!,U%؎-}}‘x?~%V=gۜqٗKA3؀90yJ˰" {Q0`kqYkן5عywO?"U? tJu('{_M&LЩ()&B K Q IȼS@͟ _uN<*OGRtq4UJ-Wy/@,.\"ż`mr)N2jEBp `dug~-ZOhQD _? )yCqT*u2?Q'UGL31xYTk>'*&w&FaLV\ B!ܛg^ԋ_{13t{wG,b )敚L%q0ld!5gN;Xjn JC(9VPRMk))܉:Aqޏ'*xOiAtr`jqi\Lp z&Gcs8zQ龭`ס҉f*Z8pPӫq΂)3D/߭If}Q0ԷdFD:.9:cnQ|W>|=y[_qFSaCJwB |e ?pĞ=W"]q*5gb|r򉻰m.0]b.i*]r&cK d ѭ8yRqqR/4gTU4EV7?ϯyy^ bC:urDEHźz pFk*I-WF}>K`q{^Ukw6`íc=!2Uw ,ը:B<աe&iDBu_DZN7GRm;>4]2 '݆s"tݸM'ʽqGlu5.M%C!=g%%J=rއv>?8XU58Ձ<9K8G B*ǡY zy}c1V"L61/*c:.f$j=W&- L}OQ @ոd %ro=}pZ]M`*t>gޟ]qVrM-DJ%iѭ jnۀ ~cLLꦆE\|dTI¢;p?矄;j҅!^¢xaf,(񬂈z +x—,7' tdpy'ሣMQԻƥdȇԟtQ6 p`U¦:^M[lXۖt3Pp=ƃ@ :>l߼s^%z9ν6Giȹb KV+ݸ='ب7Luy 7T(kO_ ==;:EhQRꨛª/hlEQ 2d3uR4"4Q5s"l%t~6-S[嫖ǜStcBbcE, (J^`$A<+ygFC)c=u{X}Lv]lavSqQY(-1Zaހ1PY뭽I-Y`f.M7!6Eiaq0v_eImޅ( uly`F4|D 4b`fe2c ny`o)m?83q @-&8>leݫl?b2cı2 =np(Wls-g31ښ%%6o~Ny ]:TյQuFCٞ$yCZMh*?uZFCuiŵ'su:*8UZUāudnn9il9N Lz~Z+ه03(=YY8g򠎣T2-p,Q9`٪8u:xs4w6C_Q+2f~'}Ř˺BZ"]j bW2U! OvP âpw+byؤnύlhV9z,?i9Q>À iQ : Wkr6ldpo u) ;Qc3`=d2;^K t-L+m @q[emKwnۅ}J3}Q0N8 8֟W+.o(*d4sZJJ'3fi:r440'^{x*G x_TG!# "S-N av;0҈uA>?w-rbBt1XB?ݿ;Xj9N9X~2 L gV.厵s'ڔԘnÙQӣ4@`X-Dj㨓G[nl[)?-QL4CP!sK8~˽L\:< JiE|\?ܔCGF!0 f;jH#.VZAe^VXup-G+N9r6#F8n~&0F(CʒȷP; t qA|zjHgt}]vNrI<d0He iZݵI~*G1UKW?ɤSq-|Էg_k[com-LXo0#E <;S\,zDK(} #I */vZo lɚЎf1׮Z|ahq R:a&a'cKQrf4=楳ahɍǡ&V5\R3QN\߭! +>lDVB; i:daQ:YͦT)g U,feFvXCYK<I1UQ[ ]5m#RҦMp95/V~׏̣drJV ok&3t {cB'f ͽ >8ܔoH LW//zu_"7&I'c-e1=сOc_J* ? a> e(Μ&Mc-HhQ~Μd\ ڛtDuv{/@BYDLχm%\u27R>M\)h~sfX3WQppA6G8/| SA"MՓEW2PA<w4tx?zo} t>!~gu߯golۋ~qlȥ12c-jl -.n~V~ 4e=kuR#w>5}(=e=R*a`j@˧uCmnt2m0 J]P&,뜈`A'SsOpfnd}§#!B1dA+-kve!0ѯLK'7a+k@7CnjO\Pq4YT8]J:EQV;=u{߇0KR$sfv[`3}o9k?%8>?`O{XS ]hc@)^0ܔJo(QP 5O[*&+s؛ 2cR]ʤ8Y4ĦxMA1!6C8lUe.\]WRWI *jN:Eo\% o@iZ^<אhJ2]M/X9CmkiFd4 Y9L6fr&%YDwǺ"2ʕqZk."*:`n#afǐ#i.Y WP1XOTƧp,$ s2f1tPߛ c*3dxTז@xhó\NVcڍ-GzB,]T?_vn,Xb 6N 0.21]iyi@N 5ξwo0kasvJl3n`mS OetDt1R%*ƖKxvg3OIHϸ wfB9˞FYkv̵LRy%%rXh KtZs6kήyDn2a`"xƣcpX]҅a`7+-ax#*Y]k~0T]>셩LUܚǝ} (( R[ml/?wz건Y;tT 6):}}g#w|p}Em~fQk?s]q4Y=J&N~͑@f>KɈB ̲td=wnmqI,"C4LКi XiyC 殞iBq w,DP$˲=uA@ev B5*A '!R\ӓ⍥w%5"QJ5(¤m&$Mu( nmTL.[q{c*ZT@D6p1'7S"' r`Se@i3`DuGgNCꬆ2b/D΋],4[[QJΒ[5I{n.gc'\.{6[|P>HX!8/ 8+2Ҳ߸7(ᘲ0:b,y.F9Vj8o6_7 4Q%FV.Ég9YNnD"{wǦ{L\ xw rAK-A{vsYHr%e1gWЍWN:|OSa D^q,,(K#pJ*IZo|h'ȏV%Ӕhi<؝c}}^!Ȱ{lc3 !\ӀfpTGGE=aWz&Aݦ}ِz RC)lJ)a e0 '\_w[T92urWN<4 TEAȢv=k"tvC-dt mwLL%/M"ǁsmUYœcF-,D&pj Z9r3*7IZ^EجI@ QoG rڰ44E~v V#*|+RfI#g1NmgutxuU19D*ZbEӱ%L(c/Rk{XSR{ hY\e7^f/5sԔ9CXJI7Di0H۸$-҃M'bQ5["ˆLR<Q4-:F8y=ܮUybKc3 vN;_,pg+"f1& *btH)OϮtb9V:X=0)vS ,~UR ͹7'F.e_׎Qn,s*sEiVbIF~3JocHq\j.7T S0y Vm)Zx?NڕVg` XjV/xSBE2 X?jy|hwwQ^f3Ath* dq89V5;e Ж0!ZxO֓{M=l|-ﲊCtghC$ӦNz8״d=+11z!a5,1ҰX%L4"#AUei9H!Hhmz]nF5$]OCbqT8sK j=JXg@Z>p8>Ana78NFV~ghliLJ,lu  EfSafQhv odp՞򦚲!g ȇV܏ `S^zQ@\Hl:s85 L`Su-%L~. rZ ~:kpF-0yQUf;]10ȁHoWM1R\YQ a;ze[6{ ?u }Đb󌟠̼4 UBR1]yYj4CsbIQ"E t&[\{!M[C@]4EWA$4uLJB6QZf`ҬTM\"N)CJ+Szw1 59Y&[y@M y=NӃN6(%}oP|= wN1.Y&TKfL\+:>LWQ[5M ( 9&}~B6C>V"Q'Z g~=p?AIܛaB5 Z,cT{Ok[LJ ,O~YYL0vo/(AX*TdhNπ'ATyN9D=S؆̢ZO*ϱZRnB@@L1VUru|na($haZY&g30n~k4k4P؄ gd@@ }A`T1itMu/wؿw?VZ43 K'o~=_ V AIgvg.ڟoe?G,_“>ۧuɃJ3O5x8 RYKf؜;jH 1'!*zH#W8` {wះ۵mJ,mѰ"O.'9pvY\|Ph9֛ٞ~3K@*Q(:2>TdQ& ݑ.X/XL")+k0t!=w"P_+,FY]8}?%BTDA#4W"L*0jvFK"V J423{ʼnlgjUX0ws^~H3LM6+G<)H1)d0~B,kRH8i _hSzM&cQa/vat=E=EdWYTT`#}7:Mӊr=Y$:vuLvPN\ |ڢnF2d䦻u9D/Rmk| QڏuMT>( CY<%Xl_sQK@>ew;v߆ uҫDDYm=U@$V[Uq⟨Dx?&`GGvC]5֫O9Mn;~)yRzh =m],'أ]w6j])&g\++Wz,}PVY%P8  e?u l*+ܙ{m:evK)w8S:M:+q MBg ++q*C˧ M |i`B$ "u8N*JQ8S%Bm.uwk*}DT4{xUʬ,OdD*=.rMڀ 8>dszyp"v6Y˧vW@A9N0c}}?fRb$WYg!V=N0Lg5w;SKJ8Gԕl[$ np)0|<}WeyIj q >PپAs#Ԉvg_BC'x7YPs<@%o2yak-s`dnQB2l˲H< GFYxijT娻dHʀ,W9-3KFpZJl|c6xDf1&^ 7{]Yćj{XqW`gT5eʶ?wXuJ,[fMAD>-#k= Dѧ~Ř[6>Hb`?]LQMuRE=z @aATǟ l:RtCB@7a"iL`%e;ΰZ,h!hys)/*,vBL%#}+Ce< Th/ |TvR<~M3aKGWZhc@:#m׎ԙ τ,h*X[ HA4 l)%T&=DC^P37oj#s9C|k{a_FMaѺfU-V?E){"B;ް:<$TjL00nX!Lr&F77Q, x |?_`jcS $i|9 Гt!(jfTs?' 2|p`eL:!^RWgG)@ *C)>G:D*<Fg051kNvl[YI7_솟Mf9dq]6jPXФ5 ~߻`>݀M 3=p6zcJ@T%IO#or[&}0P2+LZ|&?LM_ y0z2Yf;H_97wΟZSlibd@$iJfXF>s'uY`vMWI77 )T9$$c—7,(dr~g/p ugf8 S-;M }>(JDN!=0oCDYuCjl'T4UW6k޶>@F%觉I8IE'Sdޝ(#^Ϭy0Crͮ5y;/`)I?)Kp YB;c- taH*TV2^즻Pߙ$_̃kеOazk S zn>),zl4* L t&!NCr_ GE"Elmg[7lAG2 L+`u?G5jc:G=k~-[x>pfRUjm `(;xr6ݿ՝7>T/ b^'݉o=;-5Ц772g(i]0xHZ-jq v9^#OJy<ىl{er~fJWs/g3΃X.g-,ܤU(_e,{ 7_lI~ ؽqaXDP4O'dzӏsf*'Ϋ)8TKf-1sVW$;Eh'1JyEȈNVF Ùg[p8Wr#~ j, P0lVI `^"i,+`dG;ZY$}$-~xqz%m}ƊlJ"dZ@% *aeLw$ єŸ&zܹ]6熡'sp Fte2=f̆~q؟nRίsNiJlbJNncqߙAK$ec"&>gFQ՝{8׭֝*)C㡹 MzS`2>]'Yw$v<ⰡǑ 2anTڊ׉%+&e{'-%ŻN͉ML=ߟdnB hrN2,2脡$N\]^1N(-.l%XOܵ{*`T}7<nw\ԇIdiY$g uyP3zcvSۿ?9G%`-mYZn8wX]1U@C]~gviN8 mr6r\S?77#}*irZtpy*lJf'ܵt=2A $ $p#ڜE#25Y>ÈɒOH/G̝n)Q;^O"z ]Bؕʵ MX,; f~P B(eR򄔌-1UP-45:AoN:Yx[9bp>l?w]soiD&Hg iP.K8/Y.6bt۝^ը99g^4G"R(NK;ۊokfJXA zuF|O\+C)WBfb&b IJ[iڰiM7ޭNۿp`=0E5,ZFQƅ%:3STJuTqk C oCnE!S8Ofr"n2U;="EU<k_OFDLQMHr QSX'I9] Ԝ.>)Fe&V~Q~D*;w`S I^חMُ?v+`17)/YAU\#2ECªڍ#kRO -GTTI]57֫+׬5 'mCڝcLbbg fZ8=ڲ 71WO!}uSҎ9T(9tcWmi$LLp̵-/:/={i<i7>y9efƍqA@D*P i<q0J Qag5~bBS"aī& g14E8b-X3jkF0@b&BG3Fasi Z2& [2*L6tvt#Q[Ј?~e4a_xـiI D105 >=HAJSx0zKz۝> 7of"={LHG *jj̷ *j/]ڸ[ruRW.+ ?cz8`7C OMpDSbRf=dk A4Wm5Cxݼ_}r l)k Q8XH-+T yܳ"eIb=Z잮*?vODVMxmEmًVsS,J77N_V'Qbڊ]->(.n&|̸]*h\3as2j}=3g}lZ=li/|Pۀ;|oo5uifMLi,5bC`O"YG_[@M搪ĉ8io]r2 pj$")>ԬuϤu !hc_59V*Xj4 :qwͺLӫ/{ (sJ>~f |5ۦ._˯㶫n"H= Laebɿ.g RVdd#F%0\'e0N5;qF>+bpqnº‚#0WГ`tb(:GwlM %G@W[] *+rL׉ٙzp xo#ד@6w6|Ͼ>wx en_E&Bzvc#=FVmnr918Ezj)(=١0`C;d-KY !z Aw@^ OVQu\ۏuV~cPl4N%:jigTHV,P|vuq6M;r16\\|KexTn8d<20}M.a)@NO’G0PS+ʜ6WĪHà1Ne АX$CX 4`k@(KeDP3 C-O6_@fu(QVu:b OTF=CfGlֿtNd;Zb"%V锡 4,h^EI20-b5QVo_QPR4K$h0>#$UD!LK+R܆-)0o[_^&JKY5E( A4K wF$޵Oܱ [o=5%p%;i7cZEN:xpqX{18vQ8Gցlgi͇EjcRI *e>E @[,)f}tBVw͊.u^ĹHз(ش%#TKY1`,#X|q+Xžܼ7aC{" ~gCO_=~Z̮5zߤJ5_]kio_z:[  0f׷ ߪ(,̮I5C63 0fw6?Qavͮٵx/`So;X@] g_p%,k3FFޱg.[7b: Wn1??'"IENDB`Ext/Icons_04_CB/Finals/plock.ico0000664000000000000000000006117610063242724015273 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pwwpwpxpp~p~pxp~p~~pp~~~pp~~~p~pp~~pp~p~p~pppxpwxwpppp??( @pwwpxxppp~p~~~ppppppppwwwwwwwppp~p~ppppwwpwwpp??( pwww~ppwpw~pwwwp~xwp~pwwwp(0`       +,+#""&1" .#3"3$8!!!!$$$-%#2&"3($:*$:,'0.-5.,50.;1.655<30><<N)W-M+ M, Q-!O6-R1%R4)M92G=:MA<zC/{E3{G5|K:BBBOIGREARHE_MFSMJWPMXQOTSRXUSjK@cPImmmtttF1H3H4Q>S:V>]>^>R@RAVEXG[LZEYD_Q]B_AaNaSbUdWfZi_h]k[m]aFcIaFhRu]k`pfvnrfxtxr}w}z}x}g|eiGlKhCy\lBnEoFpGqIsLtMvPxRzT|W}Y~p]̀ftǍxŐ}Ӕ`abdfikmpqtvyz|~ÑÔ͔ڜןŞ읁쟄ۡ¢åܦԩݬ襎䀹ﬕﮘﳞêʭ̴ر۵ֽؼ⶧뷥ṫļ¶°óijijŵŵǸɹʽʼ̾H< Dz{|{/m" F{P*'# d{{*odg1{K)h3e1uH5¾\f1H<C6 6\f13<n!G8O ee 7O qA! kkkbjjYbYYYYVVUTTTMMO;<EGľ4<*p(IEqE I**H< "*$".%"*'%0%!1*'=*#=,&1-+2.-20/>3/210444?62V,@)"@,%V/!E1)V0#V1$W4'X6*Y8-C95C;9A??Y;0Y<2Z>4p<+p>-A@?J@=Z@7VE?[B:[E>sA/j@1pA0tC2BBBDBBIDBZG@]TQ]WU^XV^ZYuSGk\W|d\bbbdddogdyolyqnzspztrF/G0M3O6W>[;]=\N\GbOcTj\t^u]qfxnyblJoNnImHpL_mCmEoGpGqIsLuMvPxRzT|W}Ylu~u]܇i~`abdfikmpqtvxz}~֚ß읁쟄ܡŧȦ复颉릎䀹ﬕﮘϭ޸ֿܼļźʿ±ijǷƵǸɹ˼̾P& &PP.@8.P)^l}xvtrrjXD*f}xvvrrpn\D`}xvvrrrnnV |}xvvrrrnn\D}}vvrrrnn\Dd}xvrrrnnV'}}xvvrppnP}vvvrrr\P3ľz]}xvvrrrN,}Z((irXPҕLc @grkP&"'b@hvv& H{ xv+ Sݽ" }v@T г }B JMGGG>><<775500B0 &#=Ļ&PFĻlPQ;Ļ_D̖ľ*PľyPDľ*ĻaDĻD Ļ eDDҡ'DDΔ3P&JTTK#PP& &P??(   ,(,5-!> 5 9!6)%1,+1,,210<30943965@*"@-&B62B95H>:g6&DCBUF@SLIigfhhh}ibumjD,S6U8^AdUk^`@gPnXnaujwq|toFoGrKpHsLtMuPxRzU}Y\чmp`abefjkmtvx~~읁֭䤍쥌朗䀹ﬕ⹪±ŵ˼̾   M*=972$ M 'HEC?9720#M,YVHEC?9722#Ma\TVJECA>823 NS&)% iVR;A 6h!]9 o/  = t"c_\XRJEB PtK.fdc_\YVJ+ xvtpmidca\YVMLxvtpmkdca^,M Lxvtpmkfc- MQvtpnOM  (0` %\\qqQ0%zF4T<^C\AQ8yB.P, \\\{1 P>x[_[}X{VySwQuOtLrJqIhFD.0\\\{-M4+t\jfca^[}Y{VyTwQvOtMrKqIpGoF\=K)͸-S8("{dspmjgda^\~Y{VzTxQvOtMsKqIpGnEmD\=6񁁁Sqqqn `Q~zwspmjgdb_\~Y|WzTxRvPuMsKqIpGnFmDmDF0 qqqnqqqn!sퟄ윁}zwtqnkheb_]~Z|WzUxRwPuNsLrJpGoFmDlB]=qqqnS.#ڜ읁~{xtqnkheb`]~Z|X{UySwPuNsLrJpHoFmDlCgB,S-!ۡ望읂~{xurolifc`]Z}X{UySwQvNtLrJqHoFnElCgB񸸸- Ôﭖ䀘잂|yurolifc`^[}X{VySwQuOtMrJqHoFnEmC^> \\\{ndﮗ䀘잃|yvsplifda^[}Y{VyTxQvOtMsKqIoGnEmCF1\\\{9/,ﮘﬔ잃윀}zvspmjgda^\~Y|WzTxRvPtMsKqIpGnEnF6􉉉ﯘﬔퟄ윀}zwtpmjgdb_\~Z|WzTxRwPuNsLqIpGnF]>PC?Ĵ°ﳞןŐ}͔襎ퟄ읁~zwtqnkheb_]~Z|WzUyRwPuNsLrJpHoFK*q¢ǸŴ±뷥rf2&"jK@Ӕ읁~{xuqnkheb`]Z}X{UySwQuNtLrJpH^@q3,*Ϳʻȸŵԩ3($ m]읂{xurolifc`][}X{VySwQuNtLrJqJ0wqͿ˼ٲ k[잂|yvrolifca^aFW-vOtMrKE0\ؼʽ?41 Ǎx힃윀|yvhR++S1%gdaaGO)xRvOtMkJ\ N80祝쟃윀}zaM2jgdcIO*zTxRvPuOVNKG=:J<7&ڝ쟄윁}bO1njheKN*|WzTxRvPP."ws -%#ṫǷcPI,|XzUySzD2ֽ;ʻǸ⶧ +Z}X{UT=˶ʭͿʼǸ+^[}XaFŽ~Ϳ۵+a^[bH β¶MA<+da^XB}zSLI,&$ i_k`j_h]g[eYdWbUaS_Q]O\M[KYIXGVFUDSBR@Q>ZEgdb{J9WSQ_MFﬕ晴ퟄ읁}zwtqnkheQ3( TNLذŴ±ﭕ朗ퟅ읁~{xtqnki\1., ʻǸŴ±ﭖ朗읂~{xuròe\OIG!Ϳ˼ȸŵòﭖ䀘잂|yurUD432TMK 930}w˼ȹƶòﮗ䀹잃|yw1"q˽ɹƶóﮗﬔ쟃윀}|fqRQP̽ɺƷijﬔퟄ읁M7/̾ɺǷĴ°ﬕ朗o<::̾ʻǷŴ±ﭖ朗8*%􉉉\\\{Ϳʻȸŵ±ﭖ䀘fY\\\{ Ϳ˼ȹŵòÑ -"""˼ȹƶòܦ!񸸸-S0//˽ɺƶijݬ.%"Sqqqn"""̽ɺǷĴŞ!qqqnqqqn ̾ʻǷtl qqqnS<;;å:2/񁁁S-RQQêPFC͸-\\\{433ļ|w3.,\\\{ WTS~{xWPN qq\\????( @ YYCCC%-U0#p>,p<+U. -CCC% WWW?(![F_\}XzUwQuNrJmHL2=!WWW %<)"xanjea]}YzUxQuNsKpHnE[;:%1 bS~xsojfb^~Y{VxRuOsKqHnFmDE. 껻1%  t잃~ytpkgb^~Z{VySvOsLqIoFmCZ:  %  }望쟄~zuplgc_[|WySvPtLqIoFmDZ: WWWpe䀘ퟄzvqlhd_[|WyTwPtMrJoGmDF/WWWCCC%=2.ﬔ윀{vrmid`\}XzTwQuMrJpGnE:CCC%ßܡ֚릎읁|wrniea\}XzUxQuNrKpH]=B84ɹŴu0%!\N颉읂}xsnjea]~Y{UxRuNsKpH="YͿɺ|d\E1)颉잂}xtokfb^W>V-V,nIsLN5YʿuSG잃~yu] :"gcsA/lJvOpL0,*?63.%" 复쟄t^!lgtC2oNySvP-\SPȦǷ~ |XzTU/"yolļ1*'̽Ƿ  \}Xp?.yqn źϭ a]pA0]WU*'%*$"k\WZG@[F?[E=[C;[B9Z@7Z?5Z=4Y<2Y;0Y9.Y8,X6*j@1faV3&1/.VE?°ﮗ잂~ytokf.IDB ޸ƶ±ﮘ朗쟃~yup܇iYogdJ@=ܼ˼Ƿò䀘ퟄzuaNYCAAֿ˽Ǹó䀹윀{?+$̽ȸijﬕkCCC%@>>̾ȹŴﭕ<+%CCC%WWWͿɺŵﭖi[WWW  ʻƶ±  % ʻƶ± %1 ˼Ƿwm  껻1%@?>ŧ>51% WWWCBBB:8WWW CCC%10/]YXztrzsp\VT1-,CCC%YY??(  @0 11 0 WWW>( gP`}YxQrKS6<WWW 988dU~tkb~ZxRsLoFD,976 WWWna䀘ulc[yStMoGE,WWW0@40䤍윀wme\zUuNpH<0֭6)%(p읂xof]^A`@U8 <30 쥌쟃чmg:!g6&uP 50/}ib⹪}X1521 H>:|t-#-"- -,,8!a1 umjUF@±朗~tj SLIwq˼ò䀹nX0BA@̾Ĵﬕ>+$0WWWͿŵk^WWW :::Ƿuj988 WWWBAA@73WWW 0 532521 0Ext/Icons_04_CB/Finals/plock-grn.ico0000664000000000000000000006117610063245330016053 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pppppppwwwwwwwwwwwwwwwwwwwwwwwwwppppppppwwwwwwwwwwwwwwwwwppwpppppppp( @pppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpppppwwppp( pwwwwwwwwwwwwwppppwwpp(0`        '!%+45616884!9 9":$<$ ;%!=&%=)+<-O&P!P&Q(#A(&B+(@,)D-&I-(L/ R*"S,#T,$U.,G0-M3/M5&V0)V2)X2+Y4-Z6/\84T:1]9a-e. b-#d0$d1'f4(g5'j5)h6.c8,j90c:0e:3c<4d=5h>5l?)z:>]C=aC:gB=dD7j@5m@;hC;nD=nF1~AFFFQQQYYYChIDrLIuQGzPPXXz]fffyyy$9,?'>4C5E7G8GL=L:N,E-F.H/I1J3L4M5N7P9Q=U@N@OEQHSBPESFTIUKXMYT\BRCSFVMZIXL[N\Q]Q]BUFW@W@XBYD[F]H^H^YaU`UaWdZe\g^icmTcUdUeUg\iJ`LbMdOeQfUh\mShTi^pfpbpdqkuozp{iuctfvmyo{jyt~rUjWlYn[p]q`satdvbvdwj{eyg{h{hzi|l~xnπ}lj|ɉnЀpтr҄uцuԆwՈy֊{،}ٍڐčˏϕ̛Ցېܒޔ֚ޙڝX aYbW`Y Hyyxwwwwrrpc#ayyyxwwwwrrpseX Ŀyyyxwwswrwspea Tyyywwwwrrrrs# yyyywwwwrrsc* yyyww&G>yyyw2 RByyyⱛnmmmhhhfhffoyy)GŠ>y)QƊC)QȊC긞Ϯ||nnnmhh2E2E)E\)((((( i[[[[GHGDm^ȫG̀n2+ [ԉ8ڤ T \] [(PP  P :Ϡ _λJ a ҷX!׷b _رS Y` WbYa X( @         # #$%')'(,-566897$9 ;"<#<$ 5$!>&'6)AB C!D"E$F%H'R)X*"C( I($J+%K,&L.(N/-E1)N00L5+P2,P2.Q4&Y0([2*\4-^6._81Q74U:9W=!b. i/)n7.e90f:1g<5d>3h=5i? v29fA6j@8kB:lC=iE)y9/}??eFKDDD@YD@nHDmKJSMVnnn(:7F;I?M?N*B2K6O;SBNDQMY@W@XE\\dR`WeXg\iKaLbQeQfYlZm_qanfpksoxbsctWlXm^rdwn}eylpȋq҃r҄vцy֊ڏېېۓޕۖ,2,RWVTJGA?;::82X]E=664*%%$3:8a`( :9ea(!!!#I!!!::ge06K?;jg0!!!ZYVtrqpP `]ZYntrqoQ/ea`]R2-ntsqomkjgee[,2,(0` %F;;;F ;;; --- 3cVV 'F gwq҃oЁlj}h{fydwbu`s]q[pYnWlUjShQfOeMcKaI_G^E\CZBY@W>V ;;;:gBvԇsӅq҃oЁmj}h{fydwbu`s]r[pYnWlUjShQfOeMcKaI_G^E\CZAY@W>VV'!>&!>& =%=%<$<$;#;";":!V=T;S9R8P6Oޕݓܑڏ-N3        5m@`t^r\pFV           'j5@X>V=T;S9R8PޕݓܑdqVaT`S_Q]P\N[MYKXJVHUFTUebv`t^rUh>LV=U;S9Rޕݓ(D-4h>dxbv`tHX'f4D[BY@X>V=U;Sޕ)E.6i?gzexbvJY(g5F]D[BY@X?V=U*E.7j@i|gzexL[)h6H^F]D[BY@X?Vmy_j^i\g[fYeWdVbTaS_Q^P\^nk~i|gz^pFTESCQBP@O?M=L;K:I9H7GBUI`H^F]D[BY@X/M5                         -l9LbJ`H^F]D[BY,G0,j9MdLbJ`H^F]D[,G1-j9PeNcLbJ`H^F]ItP(@,'@+'?+&?*%>*%>)$=)$=(#=("<'"<'!<&!;% ;%:$:$:#9#9"8"8!8 7 7 7669GRgPeNdLbJ`H^cmFqMEpLDpKFvOאܒې}َ{،y֊wՈtԆr҄pтnπl~i|gzcv5l?0c:/c9.b8=KXmVkTiRgPeNdLbJ`PXrݔܒڐ}َ{،y֊wՈtԆr҄pтnπl~i|[l/e9ZoXmVkTiRgPeNdLbkuR[ߖݔܒې}َ{،y֊wՈtԆr҄pтnЀl~EQ@N\qZoXmVkTiRgPfNdѓ.L3ߖݔܒې}َ{،y֊wՈuԆr҄pтnπ(L/Ug_s\qZoXmVkTiRgPf) גߖݔܒې}َ{،y׊wՈuԆr҄k| bvau_s]qZoXmVkTiRgChIXaߖݔܒې}َ{،y׊wՈuԆMY+U3excwau_s\qZoXmVkTix2"ߖݔܒې}َ{،y׊vԇ5"N\g{eycwau_s]qZoXmVk%fpߖݔܒې~َ{،\ih{j|gzeycwau_s]qZoXmV].ޙߖޔܒې{Ջ2!;nDnЀlj}hzeycwau_s]qZoJvRߖޔܒGzP izpтnЀlj}g{eycwau_s]qZbdnߖ_jAtJuԆs҅pтnЁlj}h{eycwau_s&9)=aC}lj{Ȉ=dD,vчwՈuԆsӄpуnЁlj}h{fycwauϕ!  kz|،y׊wՉuԆsӅqуnЁlj}h{eycwč  iuې~ڎ|؍y׊wՉuԇsӅqуnЁlj}h{fyȏo{ޔܒې~ڎ|،z׋wՈuԇsӅqуoЁlj}dv̛ڝ>]C4T:}ˋߖޔܒې~ڏ|؍z׊w։uԇsӅqуoЁlUdXz]֚us}q|pzozΏߖޔܒې~ڏ|؍z׋w։uԇsӅqуoЁ4d=;;;  ߖޔܓې~ڏ|؍z׋wՉuԇsӅeu F+<-ߖޔܓۑ~ڏ|؍z׋wՉiy2F;;;  Xz]̛ߖޔܒۑ{ԋdq;hC  --- ;;; F;;;F( @ :777:\\:,LYcudw`t]qZoWlTiQfNdKaH_E\BZ@W=U;S8Q6O4M2K0I,D v2 #:-ònπj}gzdwat]rZoWlTiQfNdKaH_E\BZ@W=U;S8Q6O4M2K0I.H+E #777UauԆq҃nπk}gzdwat]rZoWlTiQfNdKaH_E\BZ@W=U;S8Q6O4M2K0I.H v2u΅x։uԆq҃ev'L.&L-%K,$J+"I*!I) H(G'F&F%E$D#D"C!B BAA i/4M2K0I,Eڏ{،x։uԆcsA6O4M2K0Iܒڏ{،x։k{"?'!>& =&=%<$<#;":!: 9 98776655!b.9Q6O4M2Kޕܒڏ{،l|)))(('')ZoWlJ\%%$$ $ # #X*;S9Q6O4Mޕܒڏl{^q[oJ\C =U;S9Q6OޕܒuɄ/R5.Q4-Q3+P2*O1)N0(N/'N/au^rRe!J) I(H'G&G%F$E#)n7@X=U;S9QޕtĂ  dwauQc        R)CZ@X>U;SuÃhzexRcD#F]CZ@X>UҎ?jG>iFk~h{]n._8-^6+]5*\4([2'Z1%Y03}AI_F]CZ@X{LjI'LbI_F]CZ}ȊG&OdLbI_F]ٗKwRIvQGuOFtNDsLBrKAqI?pH=oFQe1]91]91]9/;S6OޕJS>KYl@X;SMV1]91]91]9BN_q1]91]91]9F]@X?eF%LbF]ȋ0N56[=an\iWeR`;vG3?NRgLb.I3ݕېy֊r҄1]9ZmXmRg\dfpߖېvц  3ey_sXm  +ۖߖ@nHMYley_sks"&?++I0y֊sӅlfyox*@-%:)DmKۓېz׋sӅct:::@YDߖۑp(J.:::Ext/Icons_04_CB/Finals/plockbw.png0000664000000000000000000003717210063241544015634 0ustar rootrootPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F3IDATxw|TU?w27H! I$$C("]PH[UEJDTD:w)$ˤg'̜sur;Iu!33G/C@+PçJ>P(PB]`p'P@ .[! 7B>D @?[5d @9di(RB 8P0w `)c8 &5 sL!8 @5 ~j.D / `*fS5YP`RsRc` 0le2}3Bj1s-#FM|ݰAAJww73l9^R*P:hhkkEKK SQU]+Ҧ\$xʕ}IvA2K@"_` Q}$$87¶H;go1m͍fnΜټy{cnn9v ">M3  OD}lEsu SX]m;u2Q|.4*^"νU0B3=kWZKcѷbv1ʕOv!˄nl`خ`stMŤw1uDy*l@O2="q/otqqQoܸ~ֽݼyǃg95J#N\u&"1VJA@ `زTcuN^I#DXZ)Δ}bP8/+#mذF3Y4TcD3k*1VA,p7S0l ݻ6OehPWcKY_ `=cMZMNж47,yJ `X+?HVNgfhJىt&0kR ܞ0K[GeE.i*ũuqhqf =p?=}`v6>]DS}1>[T)OdX@1qu\vz.1'rwlY@#/0GYCN]biuIIfҟbX^e#˵sa030ltnÆ)Vn JpY?;vQ }V3N@>6c$6iij*PW|A h χz}ĈKzI+zܴ]O;<\VP"eG}3EEiT>D#(4i>EuRuNXX?S_0#>@1@{׮}$<6P}&HN+ ~UR^(0D)g⇫22Nx ^$DZbck{̝g /aћ|{FCMCu>{嗥8Zv Zao{noնWt&mlS2! 0֘rݫ4iI*$$Λ GxIt"n8. `˗Vk.SfKௌno8snj)z)>hgdܐ CgqS= 1) @WvY\/)uUq>0Gl*+@rnCaU8X~b{ qczR~:;1ۅeS0k׾I=nv*Թpv '_Q(ُF@TB0_'ߪuvG=M'07}!mn:[~\\\SܯtD3AYBS}?|dkKLw(ǖMDfl`ZVDiEKOmP!2< юmbbb0l0dB7\sWT; ~ GqqǦkltW\-[СCEkk+t:]x!* t///hBؠN6n!Tlyt7 `sC!&ӧOcHKKCiiYv?Fe˖aѴr@( bnA'/ ux @o!?Ol)M ---r 6l؀x\x fہBzz:jjj޽{CTtwpJ~V`V'.m|^QL^g g111LL:)J$z=#q:2@`gN4p@I/Ν;TZ@yy9qŅ9 2PEðw)?,[TJB||<㑑VkP^^lhZޞ-66Ws#+N`6_ 6BJm$_TTO>6mBNN/^+Tz=***6ё$N; [o7 1(bI]7nDmmm|[1<ӇR#:g01:AщDeNNnZ'tKJ|z5Zݾsۑ77754 :`Pk?׮6n,rϘvA^D_8!Wf  ѧl?Y^4_@+;H%=TM6|2֮]/^ڵk-V<wŔiU"Fvf_=㊊yf=zwtRRlق2zq-uuPg@ a"d i4$''c߾}]rhiiw}SNH3a5Hx EA>JBs{I0%%EP]]5kW_ư@$+]Nz+o tՕ&_Ő!Co߾ppp@CC T\v 555f)@---hii^'mḸ:)({Idڵk3bܸq3gBCCOOOڊ #==åKnMOU9OpM=(2|Euرcٚ5kXVV:^rlȐ!=V"J%>T%_+!Ф%[tvG\{hKDa0p@WFZZT"̎#F̼*$-}Æ l YYYo/ٳg VXx1^z%fǐBuE@P __ɞEqqs{'Nxq̙z&̎BuY@PHݣd"[#..f舅 "&&$uUn:*zN˓?>%-qqq&#7 vvvm***-T*1sLDFFR~tt4&MBAGuNZ[HVaJ%ۙ}b=ӧK]Xmz Y{IV᪪*6DFFWׯHG6cRwDDFFUӧlPlDL`SXZ- '''YݝE ( i%q9˾Lgkk+4 vWJw[L$yyVٮ H i YVA[Z$ 颛 ?]cF MuEYHumd3HW\\,٭(--%#̂jQH\Uuda{WWWvݼySkƪKGUj٨ hH/lC9tFFj ^^7ofRY oH~W~~>e@ W3n :AѲOKv~[6-HWQQ#G$0 .^(T7k+L+RnhZ$%% LsfYWJ& ZسgtII vMfI\($R`akk+[477cϞ=HHH&ڵ :/a6ԫDV@۷ ?'O`(//'#̆RU,S*ϾU 5>7| o jii֭[OEb[ x+ۙ)s> z0gΜ;#\̘1 W^ERRmۆk׮888v( 477@U($mee6PP lnnwN_J@u^ Q1m/zļMK~ҥKٶmإKXii)kkkE4 +**bΝc7ndcfDݍnOOOY%ux{{ޖ5,UPv0}-(- ` uup1>>>8q"_zuLII JJJ`>L0"nmЖ4V7E| 7 J$ &]ݑ޽{cȐ!=9bt1>}.EEcРAԓBtt45DĹ41j$}bɲqssäIIуa-jl޹K-"뭎 dz6J!SL+'N4V. ?JϵVVT0)}SPw?é1z8Ebt0yt<)K):)zԩ ^ !)tS,"'@ZڿS7}׋ }WE^C|Z.$4^dzgE B/..:w>EO]J)B1ڄ BwmPhVdH=Kw:BT4; :Z;^ЉT~:*LrrvQ޺IIE j`8sWt Zp5I-, Ǯ"n _̉=7~1UL AM(<( 9Aυ ޘȭŖ[Xz :oºy]gDpÊ415I;Â#7z2qX8XDM-6׶SU^x1;'L˞$R?tM{(إ^`/x Q;LxT]'ݧ@X+1`5Ɣ3e|޽ Zm})I#aRګ ͖KCgu=F$a$+񛶷VT&&>\mSF낅y4X3&/m+d!'WٓO_ ɲ _ۨf=XYzI)! )ɱ( W|[)ǫ_ձ7G)BBA Od3?Vm^h clLzd+ޔO`t% & }?YVXIT?coɨCqy R5k">ޤi(")&DQWPߐS-2Ɗ7L4i̊ԳzB:@Tr˴ r+$n~Ҥ  m]ă'-;~u&~e^*TF)YW_[~+3tЋ`/xʉCz}s5I<cLW_$ PIu^}^> ;}4uEIic{h-^V"]~ÎL);*lPՕ ҄6UL~}Ȁ!*?2yHaWlʽJZC(~W[#^6uX*]@::9w #6An%+ojw}0;}=V. GH,6vAud)w-~^D7?ԕ__mS_{fU%: KEcWϱ>JLˠEt<(O?Λy50|h 5J='2a&Ï[dɹv7_kJhT5s/εr/k3Tz?<tPV]#>?z;\Ne,Ԍg J1>{lF.6'm۸IkτNsmF`ƴ]ʮ_d>^ngP'w?4Bdg O>rޛ|C!!P8( TȻq _>y_ۚ'U>)cB<_YX~3E;3J)N  όyTL;yXE_~7gO "@h}Ϸ2ܻEƞc(d8x#IgUOƎPgLޙlԡ('g?DWa;/c,XܥO#M .Wq\C*\:x)ŔոK_2ƚ,\cCEX'ﮨCl#5\2u /?(\{ԥ(.?wuQU| kXF7k2l:e|[G=?M?Wp/g'\7y6%ȩk|UM~nzWZ;=o|; Ȇ[`1PIgW-?up~ޜ78ޖ5h,Ca<̤z?M E|fNu Y?:z@ vn^l]V[jRSj)޶e.u~ng`߈nX`ӷopܘ9FD 9V꟮ :աTU2t/k'%4Jr9xq|;c5=@vHl0Ӓ6l԰vCچ(<\.prm 0 -466zUK2oi.\jɾq"Iv_ ;K`X'JV}FHXfA! [w8HAD ] 0\БFA+pA 5!~DMB\ê4$p&5c0,p 3 $D@S2j2/x#:y=h>0 Sm\pO*2=i(-*yc{ n\8p`YXeð@3 G^+aHC@ uM0"YbIENDB`Ext/Icons_04_CB/Finals/key-blu.png0000664000000000000000000011160710062625100015530 0ustar rootrootPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FIDATxygU{y*ͣ%˒,Y &cpt  ,dutV C@Yq۝4N026`lA$eɚTRjPyx;ϹO{] z};g}Ul^"robtu;m.t-~`hu p'] "S`轏 "/Y׏]/z.S "?\;zkt}c~xEy ]w7FЮ/5_@D~ /X1z_kt : ේvob쏮5f _ĬywF ]zɶ?r~Ġe1kt]f}pV4i.F蚕kSf&գw0F׬^$6] 06ktvh / ؠ3kt"C~/aE@f ɟŗ^6ab2L=+.PB ` 7; ^djh7ϪZkst?[ۓ{lR\~5osc笥{4_~k[='5\~Sgϼug8wb=  a}淿U?7?"Wbn;/K Pε lټH0Eg/BiQڍn׋m&‹6u3UM& 6@n8nJ4lxinomN6x~\}o"`Y;ly=m6CQnLڎ} A4  bKpf|9Bk7m JXw@`6BfQ,f7 UAr~Rƅ(n"V9N,i?gmp <wK}d\mL4kdo68k \f'*ejwh,< ~7*|}'3yg6moށ3K75GӍ,50z=sI7AÞҷ{TRh>);j6Hp͟tY̩.p۬HH/l4IQgNj=yۇ?Av#&xR"TکW `OU:=tAM?СC3~=DihFz NۏnzpzƸM]=8n F7tZGhJLʊP*P)"'i 8cjRTVSp[[ u#N?p?nÁ2(#()W'T@[y\%EƔGY٧6{ߪt!) G1K _%=L9栆EZ_SZnSB?PZ!ҤT*O1nt2~5u;$Ks픐g }M{UϔRp! kASi+O4,aޞpeM2Lٞƌ=;D}XScZ]ՏS3_44J>;wOމ-7g&+PwFsݬvsSJ O4}6Eݤ[]0hbjul fOo~ sTi{4-uLmي&A)ƃT}y멞l"tO6], XSe}'3~,@w/,~l.} Ќ3nPp}ltf^ /zq `[H Mj P,AMaCpL$Sb7j)Z\)0miZ\ Tב8S^Ujf?TV*seK7<>GưcnK"P7/oR6\kO^LVǂx훑ĞF4H9w$q h=Gw'!z*>P;Y A n6[DP ?4pm~v'?>_%xEu6 \l۵b_UT)~ # ,9GivMVN G: D,b,5m lXqL"m7;ԃti־j6Ũ`$ARPɠT.hjK𛬘/,6uAvY|g{juPȖ7oev?;TgnЧVmS+pr ٥RU:J | J)]= l6U+Yb^CEAũٵmۭREw g])&)pRQs#X_5#Ũ),&.H%LGᖥk -˃{%t5  fZ.X-(-曊)tXe'E??&GaaDDlSC菡MWrmA=)1qKWЩ֮[M!DWY?ər\}`)TCs$ٰڅ-fWi.NU9_]UR:RgI)tE|ڟYkn sOQ1;=PZTܻUSZiܗ}>޽7~Ʈlmy:]z!/ԃ$R$.{:fSڿSJ>XHb㵦Ԥ Z~Ӥ@cHBb#p*7!pOv/dVڿ wQ`ݲш b0* *I{h2GC?c of?!u}ÿеS݆3iTʭA 5{R{:15DkJwT#S+/jxl{{PP 6q6l)=ĥRU1ǀPfpNpsUrECyQy.kyd{D\HL+"Z!&R)57# K=룿WFEsm&J9*IbXI:@; }1EwhZ>-Tx!K=]ٔAdCZvc{svjԔbA7:*X_:$T͑Hqa>+'&ٽwPp0~M7LQZ 8仞BN;!WH Z cS﩯Yk,Gy~=ދe7{]\յPLW,h2f@|X\]yi1HF֣Ր,&|Uk|dxIF:ߘf.TiHp A-ΡՕtpTp\Xjհm0&"C7/fԐ#AJ$XηcsU\n/SԀk\G M--մYC)䰼W @)ڌ’a_flه(}T$t3XwP0UNr)BL77V\Rټ'd*d@rb`a5naīoz{@<Յxu/,ˠ,IbHPo8`ʄu [Mo5LfU3yP2EZkQC*R&}.F:5qb,){BuyċVlf>:ҎLA*kp\Rj+))`*v lx4fͱa3K7Wf^)s7=  D ˤ:! cSWB3SSS;)4)"UIGez)$g3ufXF j18RBl=3ô[N 9eyh,uA Rv_9ltS<7fqh`h7 uI`-XC1s G/pFi<5UYGJ&}5)/PTB&ho%Wb- q&pcYÜ}Ձ۲}`IGm*U@[$~(@E[o+W]ҍM/eAj<۪$ PWc0xa$an'#˳1p\KJqbB2q 1[hk,8q1(J:҄Y91/Bx y~Ȁmд>J!=TI|ݕ fQ6D!u{O,|us'|o~g'up'OI;F_W.F%N;L"bP`[u y(vkHh 6`^6ԘH;}([TWpavfRIuMu3ٰx h5UK~O{QVMB7moѡ SMoG6 SmJD.tԏt1H "t*9pb&aL124E^Kր)2%`}{Dm5-¸385siT8S:]ۨ(MܔTU3Y~)Kt W\ӕfAkq Rɺ*9ȄV,9M62F$V% |Zm;u PAnM 6g׷6(EB|j$W+t%d-|e7B*cԌ8nð@z=+Cx mJ:Q N_VF]Ŧ[^$0̍J? ,6zNSBڙ;)Fhfv]Sb (MzO8U׾'rؖpb<&!=݈xV"Pn> cj݌zzf3ɵ$S1JKwgoV|ZGPĜ8tQU{Ғo,Y_8 j0s%0=e7;}SLOG ˂}ib9i:n63¬~y sjp[>9m`'dfP{Z+uK/Z< Ļ{K"dMZ+\&^ 弘f'"n2x|ڹ̩eI`)Rێ~xƜS!vU-LJ ſt2 ˡ쵎kgF@eJ.2? іV ;s3[`٪8Zf+Ioh"K')B2؀RJ)| 6iJR@O"#- {5lNV-*%mXH7oet,MZ1b\q.YD{ Y:4U /0`y3 )֎;CBB y_Dz:fQ(_xc9tϦI-T$pjM O6ؕ$).IwDx3Xt42C$Z ^K"q X9ƌ̹wFZp f=bJlU\&+ݦR1I<"GsYS5 l `AyDt=ì@ܷNmUq9, u!4L#LҴdRdg IDOY1a9gC;9 ]m3 FhX*":,N[$ 9NҊ4;R*Ҧ*}kµA5IAI؛ro?n1.aj@/1hZ/5mDx<@\/TԯIdEdfWVXmE!uԥ/\=xY#~P6%SɈ*y? ~XUԩ=q{4kA5Ԑ0a䵚[t"@sڵ@TZ+ $x0bZCMxw2Z!d~E1!9A~#$8;^o#C o8-®/rZȜ޵.чXxsU Jh'kdu7 h3R4OlJecҝ$S{2j3g>{:ZC\ qt6a֮*se/榸Xl^Xh{9Jݛ?B3ȞfK ^"AMJӹ=H;L;c’;uQj3iOT0W 8rlȮTcqNWa:P,PV% Xbt4߁W 11m-O&Łm<]ۑCJ<**Yӹ@p @{cY87;y%=aRD+"HChBN@;XOYŞwBv3s'R'MC|9_фG!i.y5NںDs HL)6P¯bȆe c!%y$u>JjeEЏY=2/÷%V]:GT%8P"B2؄imu3I@ݿu%$ɉ$^5IR*泓JΡW>z;W׮ոX=(>W!|cʹ訷e2YRڶ6p@}  :qg ݨ"!RNGΊ`դD-ixgIV ;*J'o_ƞPh!N 52p,'PӘ!T^.>y.!ouX/K଄kZޖd*tN} e_G& bm쩭tbAhh(8$h_ \a_x/ D%% (3;5V{'1AK[qfq ZsqA+(ox'V'^P@H,AAUû ң^ْBeA'S;u0UNMoٶxVDs<G픇zbH>!~C ơYjԝ P,zKK:,ukϩ|A.+jЦSZnOQV.G)XV:UX%S.n3"Q|8}cKm$j2< f wӻ N k͸,D{qHe  (M&8wʨ;\BN4x6ixLv ;TѓB-ʌH.^U2 0tG-L3K c( )4 JzdJIFa; ސsdݽg|rE_ybY{qFVL7"Ꝕm|`ug[JݐR11j'Q/cn*t!+^VJضK.p!RxngBsM$$>+/BCo3T8{}hh|h]nWhp@b`z xJOI{Y[8BSphԡ=Tl T](fQ()M3"ѵ;'{UIIL;˜BV YpYQ˗b-,.L;BU-(׃2t:?뽊&bo֚Oi;Ib seQZ|j,`glP+-* Khy0q ?~.R7@Vb |͙,=>4PڰRf>2sM,`d:AL]I55iIr`!ɧ_DM4  ?;! F/%7?Z]u?iۺah'~^IL&C.y'r?A4`LYj|K'`"4L!'! 3QOe]*IcߋD s0f" K?NRE'i8([ͨԊz0&Փcf s $h&`ֶZn$2@XJ=9elTka3J^k#qNC~PYMwێ DLԈ) '4%>PR$:}=%0jIR7Ys-I=3wtEhJƖEމnr{8dnQ\~:؛4HC[?Lϑ.dt=_fӆ*I]W0Vp%GlXisZsmv@HѪn$`LQۡ## i&RG(cM:1f_P1PcAVR4`;K:x0!%:<"y3>,ܘ.U7=$mH(z~܂nI WhAjplN1 - RVFBQ v=jbR9e.%"!#&wzz%@`K">UsEzӎ -\'jN7CFy:P?L>{ o;3VuLQV-֟5 `l(drb.0?>|&vmPan. 7B&vJq!;AȣjQNO}ivȗSofȀ)B&] gQݰnIa>f"N8Fe|PYQzfGSw4g@(o Ie, iF}7qsYZ d䲗%ZWC^a jx]<Űl;˞``EhyJ'E4E.ZƟ!I#TVg@HNr$L5bVMqFxǼ4 ͼ B@ $w՗:YxefFg)S(8o'|܎v?vp>:v(}26KWaŚXbx n\[cll2>Xz]m"F&r̯b J]n\Y+lR#5XD7o 'U]5 8$d4qnyMf(b%5Rrs/Df(;@u?؃bӏgq~?N=SǏԉ#ԉP(Ν=]cX2l:XVoƪ[sXD'!~źEǂ']*TiP`9!H8`[u"~Kq1Us@h ى[@mR+Br񇌛(tE&N-M$ш8Y8+Y -S{ &J#m&.J,CřS'qIT% :U_켴Zrm4hNigR*a= >s=/$#W xgeϛ8s ȩZ }L# tSy%G'q]bGػ!}a\wރ]EKV&3jr\Vqu!r#/4]K/m^(ʪ O}׼wcٚMgd:%Z ,>܄,AL}[i۽ ($ ?@j] ?Z ޚ`n >G^ 1bFsgc8u0?,n{+-]edrIo;j'O%FG5&|;,AˁtI9Y"Ycܙb^W -.Yno5]cxDF`~*wz M[Y %$)P]05%q 5]9F|[@w_=W0N'e(pzZ< G/~_'̣y.Uw)>u7Xt gT.0q{vH@$[!"ds;MӤS.ha*q.c2\Sj>76OiKth~ Rg5ؓJ"AR=3&;_ю/|33}{F<ލsgQ&q~ M6^]BDS[jƒjs[cD_13D @P@lw%W(I2 BnX VedY;g' Itl+w~zUv?mL? -O`5$8,#U뉣VOb*θbVMFuNz;(E-jq)]3G}z+I .dp0"2AqxNQ$iiBp}jrTJ-N?oʝsO>WۥZ/>m?;XB*"PLK0r@B`ݴ}oPg-a ͊ "Ӻ#EcXƌ>әhZ߹ 7ˣ?^~ ~Uzj_\ˣϝÃwǿڷ|sÓSS%*oW7ȼ;yg-znUyh[gY !"ӪL\ Hڳ]*ޅr.HLbEW͘8qd˺<7xj D!z{,@;,6{MTg$6|vmkS7?~Zآ<裝j= ݶ@(UA ^,Tf[.o>_a^\Aق{OXmk*U3ϊن-iT@3\;VnPTR15C͡ROuuu_/bb]v4ֲkuJOA@%OZ=Hߪ7ͅ K駪WҁE?~zV9qM;Ƿ}'pQw:XpJ W<8kJ48M &+`ya[lfVɧ+P'Njʛ.̀D2B jJ3LE( QPe8 }@1->[Ip9|w?/8u^ש_<ӘO^IIY3L˪ Bi})Ǽo>I<ݸÁ|ǰmQ,OIG&;S )Sɀ!wf'1wTn>@IpAQ `tZxR}0Ql€l0"+$s'5x$*}?/}]s۷/WٿوF3Kx^yoՠcT b3 x$ RLE(`'HgT/c*vNB8kbH fKa w~P%_Tqi< xt_ɩN~N9tSlkKm_?qu; W&8Y@V2]5Zj"Xl5,HnVg >bߍ&6Ne)Nٜ=ا^O]O{>#vڃ{j|Ktx!L4Zq قdLiZ?X{5|S*?@xC jZת QiZ Әv oڤCZ %njK&E)wv< ύvΟ3G&iufFw[n閼 |qwULu\JؠgCW6c6 I'R [Q]:{qE9~(%Vs8Y-k0Ȯ)3=Y~|2*JF3ـr'آ?|-t˶&xn[_}np/ؒ^m;O/߉l{~\oo~ wt*)ZbVѴӞ&`71&@fw|eVT2$jwPJHݴBP=Y6"+y%Xfh{Yt},q)z< 8uhOs=u;zęh,n8W e MB\miUS+s$ 619%T}Hgn{4G0%m˪&`cRulM&@A*5Cj 8BWP$UW͈eZph705yձ)XM&gPf(#𘭊^e&bخa5VmXn^`$rPAy)47)$:8q1+ػQl%^gNƮG¡ۃn0(/Jj~t$n3SO1/) HCf-.W24|1XM*# !d:ʊ:GdhCh_ xZ+iQg6xdԎ9 /F8?E 7ͦOW >!ԁv )+]ɽKF=jNC@)R NE56#'fG]-T@&H-:O;=?u~M>qL YrkG6\y 'c+z[vJ=xqmC&H@FQzDRl"NK/׆NzM=NSSyCsfF68RNP7S\N?Pwm>m?{z,Y{^!s{(ZҮ9̫T̥D)؛]J,ChO"'N=yFQ;XWwSԉJQ!&aPO"r!, DaV((lfj O=u?¨Y ->;>px)5nGnQD3斆@y4٬((qqj {lh׬6x=D=M gJ7]A4 `[i sퟏڏggN:w8> Giz*a?U (=@= =١4V3)1@ j]d- D ;!H8I(vHТiӮ';^ <0sˡmxAd,UrٌT%j?$l>iQT=%)/IuG ߥȕz ԁ^ApRm;kmNmKk & 4-*1`w\Vme\dͶDޫ]qQ=?rũ?IEJibn_^E;{H- xRRFnd= Q G$uva#pWۂ.򵛱lF,\ej 'ı{pdNΝ>1?{>>ʢ^=Qt5$# sܰz{Şܹ O`rmʛaXr,[ LM8^ؽ{v=v?8Ξ8h:/s6$>'20 "|O?G\0k nU׾=Xf3-Y ]pJX.Ny}x݅#+d aE抧 e$R^Z;=;g. .Xr#-˰j%XZ)?=GA`te՜$89PtBJRA:wn _ߌ;p-?EfPu7c骍P|볿cGzk`+3jٚsi< XiNá}\ߚMM.L@`lKi ]uoaO5Á )wv@u!Ƅ؃C)S3\[Cy ]=b[´aڭ ]3TIn(ͤ[a4ygN\q;q>+֤VK!PiTi ÍMW܂Xnhcx^gnf=>D:wbjW".ƍotq܄%PUL[K_\v;16>1Zk+g=dN%lFn#/< >6>[\ftMtrHek/e,_shŎ!6yn5D >I_6>v-]oz'`7lwe635>>.{6]vhŎ)9n Sztgj.&8zp21Z[~#硚4hWh10ňP <,[26>Zk@8:dXR͚@>~Eg8>o>^t%/[[.vdw% r(BXw ϋ'`1vX 6gXEKVwy5vJ'4%mD@cΰ-J}|ʛ,ҤbK q2Fvt qώ5qw֞5%@d=P[0Q$fZOzWpa>z-֫ i kE>Uv&{Z Νx W2slD:HN?{jfGP3ߺJL\u B h8qtRr /!x >93]\Jh6,zP8` ; uVTþ& aL\iF$39q',Fp QLaNdɇ+f :{'Sv<L;g[KD< Ⱦ8z9gG+utX 0K@I{᝗q ^ j kl|./¹3'gy?w;/\'cuo)Px7?<y! * t55CnqpN7 --.y&/ ٓxC8 \`ꋰ` ϛo2jt >~4v=y3_%x06>i xFBP7Ю{yo'XJCkNm[AoApEoDeVusA2s_D˼x X|- !`: =6]~3l6\cbbTps8w;;ؽ(Ν>6G?uW?d6c]~# ,ƴ@(04͔jg>~M[Q1z߿Lau[c`j5 B:)(߅b@pX}{fZ\JѵFCo7|`%'g h25/vb{jeX",] -Gq9,i kbbr34ef%Asf_RA*P"DK''<|?{ T !7H/5x=WgTܿHCb nͅ jX).5i6[O?x :v`x`Xf3 8s-̹J lwzY K[Нĥ:Vu9%7ZLJĜܫj>\Arܪ4 jޗט"1gTk/ ,W?%Xh%]0SZJ`n7NgD𧦒:fc.ڍ rŶ]2qٕU1MdMzV3nh7]z|ee]՛n'J)a\l9#svn&J $WQ8DQ;!i$!ֵ{-:nͦ(ՙ*yas޵a 7bn a[`HdZO(g@*Pf] 迸oW'3DK+CATiaNJvʼEga3d6sJ-mչnBI-ZpakΘ@ȫ_{]ze&z͵GI4ZnYK4[(CT֊ѺOUwUg&{U޽ GK.ݺn߀W|AXklb>l6Xf;5#WzhM:XT_B)^(#0OU@dx>vNB])j`=G6 tH%׿.88zWyђr͛tźѮ.Ecw`66ּ:!bNf AuUF$fX{,0G8u>Jm#1AyE#*̳e*6IW\t-Xu7/免ǪM7boZ%#;5״t$eD;J[אY'@qb0J@5Ŧ(p<y5sG(XmK.]Kox.]5/ᚿh6\6,[{es X\Fwd50L8rLB&Km F\E(@EꦲmgF+Q"vT P c:R2Gu(f 亷bG/{ &՟Ʀ}(==z5YȢzRX45۝ zhH7JXL:TC0+{wt'U{*# f{(j.' ވ+n~,N{[t}WJ zޝV/35{ &UF:| l㇕Bp2$!? RY>;S#αn2WxJNc[ʦD1oR\{㢫nN r+?ae^!trgpnH3bԠP)AB9l e* Y 2Eub%jj. W>,[qۓkMu6/R[z%-fhXI)]n҉8kK!| }Ybِkkٔ[/wu2I)h,aL8 `SI5r cz۰[1>15>kކ l DV8 ޚw[i0[shוe eST:e6ːfP0R=[NG\?W$ڔ_@ r1t%x_QE+6a55W6a_ f-%jtUJ]-Śj2sy׈t`s$ػDzTiQr Lgڬ38srʰAkb)Mi ԅ411.{6TV֋hp%ƮVV 3!b1A1`!=mlļc!> 0a @cХ{ q?Ep٭7c h||[`}%;ƥIBZ&z7fg@ wINfWn,TVA[w +0i (& d= zk=;=x?~[ qއ+n0/\ijl֚G*^L zIm>Jk@0*P$9A8eZ!N)dzZݩI= mA9O.ҳ:-F>Wm#7fB26u݁SP"1(ӞUmdT2aJZp5(H T$P#_ڕ4DA=DI{bcqDJDTv 0&C5kue!MC5/yXDX}p?5[~3Ԗ)i $a1+6V?=sXio;XqXlTk^m2vNjK3w `ދnMvd8˂J*9At[^8}&]j7M77 .=@9U/`džɬe]b +@7Dէ-jT[UD/1Ȁ4NK_=L F e|ތȩ nWch/2|z%_ Mk|W75) =<']z^FaU_9\r_NΑARfsw 84(kujY)}_؋ZGň+y{Ÿ6iͯ1)U=ֶwܓu{1f  {҃5H-Ӣepݛ_ff\qū]Y$Skv\lKou@$~mKs xr?bH`)dOqW"AqS@ayʰtbfn9 d~ߟUo{f?@Ҽ9%)@DE"VgX&\{Ǐ2܇2ua͖[p%7`)`M"-GD9KD5.>xb=]Chi`,2$mZ1B$0ZusH $ +c%TȍvUcfN`BmK9Kh8(`uM?y /~ 6Ο?* D01oV_|3#}97DIsGWx̬Sq+TO{3'ZJPY"?Q]r &#d!@A&GSםITf&*FcqoE[3 ?7͉ IGUL^)gy.X}p9îǾS2.]Wp0JcM5ikcU{TXKUB(|sN"瓟Sa‚8*-%-Uٮ|gR﵂b$j\6Rus 0@, (-Dq?/\[{'/Zk/~ 9'`˰k߇Uoļ|:lHIg֚X%u#kŌ{ͤt%K Q?64U38xg;>=Whv@@cʛܹ(ײݭ٧ uV+Fju.s!DHm~̤B -ބek.cO|gOuY?1 -|{wcъW:gQϻ)zZ+_{ =؅L*׶K `3!销aCL?QD@>2#A."p@@0) dJB] `||V ׾o`eaǿO3'±Xwmp;pѵ `.1ʽD7P`1ڮ{t5Gf1P:gqc }37 iHa'jJ-^;&bW-JB q'դElFI/T(:`T-\/_%6cåa/\p,Yky7n o`[,Xd.s~p1>,ݮ">'$AI{6֥:ӦQt HX-={`Z% Lm625ύhXD׎QBQ6LZ;Ko.{*=ʖwv>_Ɯf= K!+29Y{b )-H@;#ZFe%7W o,zєBeV3(MؒQ?ũ> #%`͸ao¡]:74hnyiED)A066K\Mc%a1oJ̛~fݴzэ2^ &DH0а 1oz z\0fG!q[M@NH՗X*R/ĕvǪ̸4kr^~ VyVρ/XMK~:ԏ.¥Xr3VǏqQ;}t@d E+`,X՗bhF,YWnފ3YxF̄<ؔ!a`ZS:fwYi01Lh`Y;bMf'Cʄ˶*v lI4X&xLMBR>V:!i԰Ӭn3Y]mD ݊+7LMapx8;û!"8sp aX|KVoŲ5a|5Xr 7Nj+fz^~E&ӳ2I$Ќv@凸My3 _&v`Y_#W!TV5s']`\Ff#&9"F=hҴ%(Ev`lb>Ɓʍ׺ETS̪מz:..+K`Ϋ5k@R9E5PMWe~$~AgG>>$ˎv`Pl%-?jE"~Q@i9<(9!@u؃+0EGv-R$jfH}֫ȴ6Cg!9'`JϜDֺ5vʅRGfͧ#Ai;dGDBuPw'Ea<2M\b3? î #^h#WJ=r kIH2 eM> |3<1ZB&JS"XJ& f:%{^kwqudϺkFBZU2#Pl'Ni6W/TAP؞t)b߻ٴ뉛ężXRK6q.\^cR˳-CTRDp UaQ|q y-{$02ܩ'?”3 R]W]J\2H2mcxB}MYF ~KUħ#iS]iDA ﹼ1.¼mfNƬ+iDh %Q(.M\j{tQ\K|!Z$2 VEFk֗ilD]ZXFOiFU+vj)sQ¸MYtWQ6&`#l'IOvob7L)0 ՄEcH&NJ37jguP ɬ )WqI5=Wi şj$ΝxwW>$`u L $¡sv=L6*zI'mVHodnKNɛQ`Pcc>u9 Ki۵4} `[R7Ae$bJi:4i*7ӄ Ì,A#.Ֆ0-D)^2&ʙRՎd]<@GMDYjq/ ]5RE<=yM/vw2KHVNŶ$M8#hНOVvKl$cDnHTyϟI~ΈM[Vݻ3qd--v[H©5IG!_g'RPat:oz\2گCzBq0q]xkZ*cUƀQOSoՙfOH> P?%lY"j+;'@@3{YCke y1'Q>}=wz54tj` #׿R#s0/Br9 Xq(ʦ4ث˦zL]Ā(geh1w%2%I6ej< FiJi]e3рk< 3` G/jJiOcT5L,`{4,7&+*qH5PFUbjf(<ϧJp0|,(Woe _Nɽ+z`b58#WNK'GJ۶ƍfmIrE 1dYFGlœOǹ 0,#5%rg|ۿEȽ`|INlR2Uh.l𨷲 w*5HZ}?UZ`*o#Xӧh\KTQ mRKeA֫g:7ڀ]RN]FB'OmռH$ӄn4E"gFsRk xK|#$'2c8M tMi<EYKZqϪiSӇ o ?*Eji) $5iCR\o0>2fΰBд4Yvu +p\++aY+э~NT FRkP%٬FЬ>),69fz*Tk  i麤e]6HD7yGIv<0K2O&n{ x piۑYtCE XY A,s>)%(dceW!iu[L6I614HN24cMf7ɹ'~e40djʾc:& >&7B |JeY J)[ M2 C׉BOͺХk5ڍA9- Ta<*20.6xLjjw.҃3#+npZ jO&>~_p=6YB[HX֍bs1×bcZj.! FZ Akt:=Ȗc/֓מc Z2H5MSg>Ai^â&؉ՃC=$2 lbIiזTӎt MzI )iWʴc尬1a, XlF_E&LVտzzK/H#dӒ&33b/e}ʛXZ+iXi~&^c.fasphi1n[U r`/R2ߤohcZo@-F UeuTf1E[?uNVULq-Yu.6r;X@S32eOfIcҩ;,W&PB6)Ҡs~:2u]3kۍ(H7#Ъ`צo:q:a$uwpGqZL'\0^0A3ϡNm'4M'ZaM;ʳ,X]M[JhL) U)DTN$}.L0R/ .RG"MD<Ng2[4թy}.[?9UbP\4Pm'zopȁ>fy2n8 GCBLknH{$;/9h4{P8^PR a$^e:+)RYiɌhfGni fɃ?#/,r)!^c?mJb Pv5a Y 3D5y9ʴe~ 4V2β{q 辕Y 뵧 U{AGV ~t6_UvA |3D۟|Hd T_*%Y(g 'I>v06yF[B--dqU;lS+M ]Go+ͦq^[ JJȵ#=?U;ئJ5nJ~t'!M߳V~ 0RX &f^dPjOkmk A\+Fndy$*>Uyګ{Ks'g[0r1K!?%Uȷw)Ok!(k7qIsHI;$QgU%SRrNy2%8ǵ^{"}&3oZN;=+ZYa~_om5A+;>Yէ)?y6epx*z3]%:+Kef^8&WRR4lw{T!'NzڗFHT[VJD={{䛆 b40 aS)ц}:w 7j wRK&l#,Lǻ7" hz!N+<gsYЩG@k}I`TRM8 TqZ`4QԕnW"Rr',\OZ^\XtӮtkGl6-?s C h&fn€_I怗 1dZc& ]GQ6]U\ W2K.S= :&F.oP^ "Yf3IbW}ڏZqm*fe8sPPJR Ä@~0vS;DsVU 5 BL  ,Eb 藩9x rb Rhͦ5'R[EUZZ7q@].vaq;3&4D)H~`='Eɋ)M-n`U3S jal}HHIW2tO6LS+IDu`k=}f4[Z&e?٧p"fSWUxc;%i)ڊ1euZjiڍ퉮ޣq5-ha:VJL̻#uQu.ۣL&ch lh4̝w,?ZS #/%Ћ5a 3l #Y𝂰sKcc]Qz dSS[Sd<R10`1HUv:\k.T{tH\SbAi>CM7YE J@tH\}g&Oy|N>hxV[FMYe^43BhIjWP6U($nѨ{ּ^vZ#!ko5=lPvrC"jBJcM_4)cl6-jM[4H!ƥK@G $/|i->%.޷sxϒhQt$Q%!DDĶVUI͂OJM>;d'E */12]I{M!m7$)XzLi'F |3j3S:+Ӱ(spGL+߸ia&mj֒t4k  N  {'带r]!L(A TJ,dJ-Hx n`i+bz+)]e82,hڵUY04%m,erSlj<+rVg|"LS1MO&>0 Y2a[ k(I%;GB8Y|?60a;?yO龩[}Mcǜ/q"aECZj,ޚLC"M%?yt y/d֑(nx`d,YDݶr&+9iqY/1PApb}XKFE];]L?lpp?_c ;E<6YUVtu%l:%?R8A-G"ȉ#YQBۉ];bV%,IK<@RR@V( z[,Iw7 X!h YW\[Zsns?yZ `0~C?hv թV>Bˉqf"ry:%HWㅴ:tfq3M%:准!AfXk>ݘklŀⰄ%?cE=ត-~Ŭ3*+50Xv@f`'2"xdO?ϱw|Rb fmktk_ Ђ%bA;Oh5 Bj j`a2?h `zd-ѵMDkwi'ʲe!L=M 4 cs!0(k ;kڙwXVet5[ O>;رs1ꩾ?w1ׯ ~&6{#vn;:=/=_f )vbOqvBcơ}Ih⒤BA Q U#tvR7 G?7;MLOGώO{e1[tŎ{T®t> uQ;T?L_xL|{S5pD{.mYUz즏Jl#yMP;Ʀ ЛeKS޹JKdY?w q,WEtt{Ի ! F4a4Hg@Yڵ!'}U/;>ኙw^xnMYQZ~[N;Sz<]~CׄΔRk6GTZPu>IiXFYtЏ5Z^ڗ|ӼI@JU4qV,V3Uw@ ٦ܻB ̖7(Q/]Z nZp?1(݇H7ܛNN v4OSS"plq#vTWޘϫl#ɠTLs"'h0l!r l# rN$3QTZJ@KF 5?(n,&N)I~]Ui/f.i~[+8 8 u]w=ڍkĥ$ݬAFʲl ,L>jP$fh[Jyg0:P5& ֌RZ@'dLӁe:-bEcZo'$ B u_ GOY0կ-ʼv?pXUS`/M|@U^am,\|{p`+1b_=3q&a@+{$t&m"uhv i㏵(vWhҊͣΎ׈[6(M+ZX |xy(rAܞ$b#Hʧ`B:<**q/. x،%؃gpSa_m~]kno_}) Q]?RU5^%{ 0F׫d`Fzl F]ڋn~ ,4F#~3|CT]ktM{}!دe]( S̐]~-k~/abktƮ6+0?H8Fws=Z WZX2zkt$=x\WRh-~b`w=9n:]vU67iIENDB`Ext/Icons_04_CB/lockblue.ico0000664000000000000000000006117610062522270014543 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pwwpwwpxh|ϏpȈx|x·Ϗx猎w쏏pw|D|w@@p莌`ȏp~|ΈxxH||xgxΌp|ȏpxx|p舎@xpxP猌x|χHx~xw~xwwx@w~x與xp@w~~xpXw`~`wpxxxϏ@`xp@舏`xxpphx@hphpxvgxvpppap??( @pww@pHwxpxȌxȌΈppdddT|xx@|@`pxxp|xpH|x~Axp@Ȍp`|ppwPH$ppwxx/xxp`x@xwwpppgpwvppw??( pwwpwxwvuȇp@@w@~XpxHw`Ȅx@whp$p(0`       ! " %&!!!%" &%%)#!2-,8.+30/50.311666942954:87:99F'C+#H/'D1*F5.^9,K<7@:8A=;A>=\D<`C9H5BBBWPMWRPWUT[TQXXWXXX\[Z]\[]\\bNGiMClL@mRImmmujftttXIYIdWePoSmf}zve~orJsLtMvPxRzT|V}Yw|~n|[]Åp͊rތp`abegfikmpqtvx{|~ǒК읁ퟄΧ⢌꣉稒꫕䀹ﬕ̴˺ξھ굣㸪ŷ±óijŵǸȹʼ̾=/ /= ?3F}}F3? pշn/3Ծԛ0/+i]VPOOOaԛ+sըkba]]VVPOOLLK]pحffbbb]]]PPOOLLKKOԛΓkkfffbbb]]]VPPOOKKKK]ؽ kkfffbbb]]]VPPOOLKKKKԼ /ݭkkiffdbb`]]VPPOOLKKII՜/wPOOLKKKIq+ՠ$"PPOOOKKKK)?ڨ@.]PPOOLKKKaԛ?3ԢXD]]VPOOOKKK0ڨ `]]]VPPOOKKPԜ Ԩ-'bb]]]VPOOOLKvGCdbba]]VPPOOLaSػZfdbb]]]]PPOOLշ=%#kfffbbb]]VVPOO=/8B@kifffbbb]]]PPOd0/lYkkfffbbb]]]VPPFkkfffbbb]]]VP| <;kkfffdbb`]]]؀UTkkffdbb]]]؀  kkffffbbb]} mykkkfffbbbF/8(:kkfffb3/=,kkkfff=EHkkffطv %kko Ν  Κإ 5κ3 ?9ڴ?/| x>Qw/q zݴ/ Խ~nn ݲxw // /82/ xt ? 8mm8? =/  /???( @   $89&<*$3.-=.(422444V0#V2%_4%W4(X7+Y8-B<:B>=a>2C@?F@>L@;QA<ZA8tC2BBBFA@GFE_VR_WU_XUgLBwQDf[Wo]W`_^i\Xa`_{c[aaaddd{ro{sp}{{}|{}||^Qe[fZgTmSymufxirJsLtMvPxRzU|V~Yo]ޖ|`abdfikmpqtvy{|~읁쟄⩕䀹ﮘ˺¾¹ĵ±ijŵɺʼ̾222(44(2f$ed$f$$~lQOWw{$ \mQOMIGFFBN~[ qWUSQONIGFFBBN{ $olZWUUQONIGFFBBBq{$f\qqolZFFBBBq[f$|xqqom GGFCBB2~|xqqo*"MGGFFBN{2%~||vqH;WUSQQNIGFx-~rJlWUSQQNMGl(7~ollWWUQQNMQ3798qomlWUUQQNU4/=?qqomlZWUQQo( )vqqmlWWUS2,:vqqollWU2j xxqqolZoe%~xxqqom$2 ~|xqqx2%(0~||v$f`~|\f$a(.b$  f\ $%$$f%jg$f2277-222??(    +&,100:65;::I5.H72B;9E<9D?=D@?mB3DBAEEEoNCxXLkYRhhhX>[C`IfQr\tMxRzU|W~Zt]`bfilqt{|~靃ɨ䀹ﬕij±ƶǸɹ 36SIIP53/S>(%!(K.3/P>-A.3ZCA>#M7PICA&#(5^MKIF")(#!Q ^TPKIE:-((#I bVTQMIA<-)(K dZZTQA<-)T9bZYSCA>A6f^[XGCAV33f^]D ;KIQ/33fb]ZVQTZ/39fbbb73 (0` %\\qq$! ZSQ~z}yZSP$ \\\{842831\\\{-VPN̿ijò˺UNK͸-S@<:|c\~Y{VzT|Wm䀘˺?97񁁁Sqqqn Ŵ윀jgdb_\~Y|WzTxRvPuMc qqqnqqqn&##ɺ읂tqnkheb_]~Z|WzUxRwPuNsL}XϾ%" qqqnS30/ﭖ~{xtqnkheb`]~Z|X{UySwPuNsLrJf2-,S-&$#읂~{xurolifc`]Z}X{UySwQvNtLrJsL%" 񸸸- ȹ잂|yurolifc`^[}X{VySwQuOtMrJqIϾ \\\{ﮗ䀘잃"   ! }Y{VyTxQvOtMsKqI\\\{@>=ﮘﬔ잃H/'F'\~Y|WzTxRvPtMsKtM?97􉉉ĴﯘﬔXIH5_\~Z|WzTxRwPuNsLg˻VSRﯙﬕ朗ÅpoSb_]~Z|WzUyRwPuNsLUNKqǷﭖ朗꣉ geb`]Z}X{UySwQuN~Z˺q976ŵ±ﭖ望`C9^9,lifc`][}X{VySwQuN831ȹŵòﭗ䀘veePolifca^[}X{VySxQf\˼ȹƶòﮗ⢌  ތpspmjgda^[~Y|VzTxR\$$#˽ɺƶijﮘD1*C+#zvspmjgda_\~Y|WzTﭖ$ [ZY̽ɺǷijdWYI}zwtpnjheb_\~Z|WqZSP̾ʻǷĴ±К͊r읁~{wtqnkheb_]~Z]}z;ʻǸŴ±&&읂~{xuqnkhfc`]ZͿʼȸŵ±mRIlL@읂{xurolifc`^ŵͿ˼ȹƵò|n잃|yvsolifcaǷ˽ɹƶó굣  稒䀹잃윀|yvspmjgd̽ɺƶij $ǒﯘﬔ쟃윀}zwspmjl{\[Z̾ɺ㸪K<7iMC꫕ﬕ晴ퟄ읁}zwtqnퟄZTR%$$ŷ8.+\D<ﭕ朗ퟅ읁~{xtq$! \mf~oﭖ朗읂~{xu\F5.ﭖ䀘잂|988ھ ﮗ䀹잃ɺ843q̴ﮗﬔqWWVﬔVQO50.bNGﬕ朗¾A@@ Χ±ﮘ@<;􉉉\\\{ujfwȸŵ±\\\{ )#!Ϳ˼ȹŵò -&&&|~˼ȹƶò&$#񸸸-S333˽ɺƶͿ300Sqqqn&&&&$$qqqnqqqn qqqnSA@@@>=񁁁S-WWWVTS͸-\\\{999977\\\{%$$\[[[ZZ$$$qq\\????( @ YYCCC%3/._XV{ro{ro_WU3.-CCC% WWWFA@F@>WWW %B>=ퟄkg{˻B<:%1 ʻퟃjfb^~Y{VxRuOe  껻1% ÿytpkgb^~Z{VySvOsLb˼˺ %  ;쟄~zuplgc_[|WySvPtLsKﭖ˺  WWW䀘ퟄa>2X7+W5)W4(W3&V1$V0#_4%|WyTwPtMrJﭖWWWCCC%C@?ﬔ9&8\}XzTwQuMsL˽B<:CCC%ŵﬕwQDtC2a\}XzUxQuNd˻GEDﭖomSea]~Y{UxRuNF@>Yŵﭖ  nkfb^~Z{VxRhYʻƶ±ﮗZA8Y8-tpkgc^Z|VyS432ʼǷòufgTzuplgc_[|W3/-`_^˼Ƿò⩕ޖ|윀{vqmhd`\윀_XU}{{̽ȸij=.(<*$윀{wrmid`m{ro}{{̾ȹĴe[^Q읁|wsnier{spa`_Ϳɺŵymxiﭖ읂}xsoj_YV433ͿĵQA<gLB잂~yto3/.o]WfZﮘ朗쟃~yuY $䀘ퟄYGGG¹䀹FB@ﬕCCC%CCC_VR{c[ﭖB?=CCC%WWW720L@;ĵŵWWW  f[Wi\Xʻƶ±  % ʻ %1 껻1%CCCCA@% WWWGGGGEEWWW CCC%433a``}||}|{`__433CCC%YY??(  @0 621621 0 WWWC?>C>yStMﭕWWW0DBAﬕ,+\zUuNǸC><0ﭖoNCmB3f]{Vl ƶtr\pg_|W 766Ǹ  靃{rh`621776ɹr\r\|sj±631kYRxXL朗~t  䀹ﬕ0DDD&ﭕC@?0WWWijB;9E<9ɨŵWWW :::::: WWWDDDDBAWWW 07777760Ext/Icons_04_CB/key-org.ico0000664000000000000000000006117610062625362014326 0ustar rootroot 00h ( 00 h^"00 %'  nM h^(0`pp3991p3p;;;;{{{yyy{ ;y ;p {9 ;;{9 13y 0 0;{y0  ;; ;9{ 1 y 1333s1y ;@9 9 10 0p ;9 39 ;;3;99 ;; 0{{9 { ;0;{ y ; ;; ;{;{; ;{;{0 {;;{ {{{ {;{{ {;;{;0p;{{;{;{{pppp( @p;p ;99;9;;;y;q@s;{3y 00;919 9 ;719{9;3;;{;{{{{{;;;;p;{3@p( p; ; 0 39 0[  00 ;; 1; ;;p { q`(0`        &&;#2.;4>-F&O#J4G8AL'P.a6i3n5n8i8n7vLMERH]Q`PhVjSo]lRpR}_yk{FFFQQQYYYfffyyy :[Z]]OGH]dbdr|{rt{Ikmfansuqx Xfhydruy}p []x aaenimqtrvz~  3647254 ;}lllljjjfjfffcccccc_cT8 6lllljjjjfffffcfcc_c___^3 lllljjjjfffffcccc_c___^ 6Clllljjjjjffffccccc_c__8llljjjfjffffcfccc_c_Tllllljjjjfffffccccc_c_llljjjjfffffcccc_c_llllljjjjjffffccccccllljjjjfffffcccc_llllljjjjfffffcccct:/@zllljjjjjfffffccSzllllljjjjffffcfcBLllljjjjffffcfHWllllljJfff ]lll>fff(@Ull?jffUll?jfjn,HLSSSSOOOM=NNN%Xjf+H jj q%jj jjw ll)r*%llE oA ll zzzzyyy[[[[[Y`ll,s -H'A1 ID'E}m;6 3&7mC4527463( @ ? %#-(5.;*>4; -@/J2@ ?A0L?N)X/j0jD\J^[i\viFFFmmmJMQanfpny KRT_]e {\~smknp{~ ]^ly|x `aeims~quz}   .ffhgddbbaaaGGGCCCAAA9A'pnfjhggddbbaGaGGCCCCAAA999MppnjfjhdddbaaGaGGGCCAAAA99'mpppnjjgggdbbbaGaGCGCCCAAA9AttppnnfjjggddbaaaGGGCCCCAAA9tttpppnjfjhddbbaaaaGGGCCAAAAutttppnnjjgggddbaaGaGGCCCCAAuutt- 0fjhddbbbaGGGGGCCAAyuu!,jgggddbaaaaD((/CCyyL7fjhddb >G3CC{y jjggg`5b3GC{U 0RRR61*5*:C{& ru% G~yuk G~$yyQ G~KKVaxS_^]]]YY[XX;==Ea#ttptnnnfjhggddbbx ruttptppnjfjhdddbw lyuuttppppnjjgggdd}N"$T{y{yuutttppnnfjjgdd~~~{{{yyuutttpppnjfhhd~~~{{{yyyutttppnnjjgf~~{{{yyuuttptpnnfjh~~~~{{yyuuttptpnnnfO~~{{{yyuuttppppn.~~~{{{yyyutttppnO~~~{{{yyuuttmM(   )0%^2e7}@^ Z^DDDnnnTgiaL~`eiyo Zbgolqw{}    2<:97$"" >B<<:97$""DCBB::97$""ED&<:97$""I<:7$ A..- "*,+%L@>523107O')EDCB<<:9POG'FIIEDCBB::PPPOMMIIEDCBB:HQPOMMMJIEDCB2HPPOOMJJIED> (0` %F;;;F ;;; --- ]  } {ywusqoml jhgedba` b X : ;;;F7L}{ywusqomljhgedba`^] [#JF}{ywusqomljh gedba_ ^] [ ;;;d}{ywusqonljhgedba`^] :}{ywusq onljhgedba`^ X}{ywusqon ljhgedba` `}{ywusqonljhgedba _}{ywusqomljhg edba}{ywu sqonljhgedb}{ywusqomljhged[R}]}{ywusqoml jhge#2-F }{ywus qomljhgb m }{ywtrpnmljhr y}{y.a   Imlj &8i7i6ip}{&OGomlH]Zf}'PHqo m 'h'PIsqo Sor4GkxvtsqomfOcb`;7vdsqVjt4G3nus>L4nwu4?.;5nywDR{  ];;; FLM7LF;;;  d --- ;;; F;;;F( @ :777:\\: -@ {  }zwtqnligdb` ` K?: .@ }zwtqnligeb`^ ]?777}zwtqnligeb`^ K}zwtqnl ig db` `}zwtqnligdb`}zwtqnligeb}zwtqnligd*>/J} }zwtqnligae}zsTR\liRPx}k/jnl#-0Lpn0jq n(5D\~{s_m])Xlqy#.nJti\vLwqJ^Mz2@O} |y~[if %.;4;?Nnp  {777 ?A  -@: ?A  .@:\\:777:(  @:::@^ }wqlgb Z%^::: }wqlgb Z}wqlgbTy}wqlgiai{L7}l  o2e0o~`ge)   ::: Z^  @^:::Ext/PublicKeys/0000775000000000000000000000000012606740432012374 5ustar rootrootExt/PublicKeys/KPScript.pk0000664000000000000000000000024010576770000014421 0ustar rootroot$$RSA1u}JRX+޿¡)7h Rv a;`H:+H=V-r.JU!r[I5ш??\fy:e,jn"]q 9r]|^];Zuencgt3#Ext/PublicKeys/SamplePlugin.pk0000664000000000000000000000024010576770032015327 0ustar rootroot$$RSA1E|s.9 28.GYvIVQD@dfQlS[DT˃WEb'*ga}wr &Z8v^^{Md7zv2bΗcS_wî:JvټExt/PublicKeys/ArcFourCipher.pk0000664000000000000000000000024010576767514015436 0ustar rootroot$$RSA1o$չl~ӋsEc ~/7u2t3 ܥlBx`܍cZJ4J˫Pw4\C>x4"DZ~/Ext/PublicKeys/KeePassLibSD.pk0000664000000000000000000000024010576767744015160 0ustar rootroot$$RSA1::/N i*,~S2qߑ1P3~HO x&hzZeg 'JuBӶi &N:ᬳ!\C,0!̤*ߔX0C Ext/PublicKeys/KeePassLib.pk0000664000000000000000000000024010576767700014721 0ustar rootroot$$RSA1=dX/!,>U쥧 &ƽ,!l?9\[C;CH 2ī5J2lW^PEP<=?li(̧VEDZS&\5>{vq.rV Ext/PublicKeys/KeePass.pk0000664000000000000000000000024010576767630014274 0ustar rootroot$$RSA1v[j}AbҀq0c(YWS\bO+7Z8.S:ASo5$BN\ew8C ~ m&pXo}܆~LKE\ܲN1Zd'{wӢFNExt/KeePass.exe.config0000664000000000000000000000132112670011026013610 0ustar rootroot Ext/Images_Client_HighRes/0000775000000000000000000000000012666316750014446 5ustar rootrootExt/Images_Client_HighRes/C58_KGPG.png0000664000000000000000000001312310131463510016301 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?Pc0228_ @o1y7P Oܯ on30̺$F 2'A=ȗCL~ 03' ЗL L w.t*'UY>_/?Kf```T)s%8!4Po L@or9!+Ñ s;2G0 t~LQba`l&u?~ݳҋ;@@M@K 8Ai   f11\/SO}Y=fy'7,%$E޼{pMᅳ8\ͬ8 c+ۗόnO撻ov·I#Ă7WVbzd3Éu, +S`xz ,ADh$0F1y (tU.֌tZz[2H*00cW@}Î+|G |džUb x3ZNV? W߾pHȃo2 uAeudx0Hjp'I 80T~ o&6CeIm;OtO b  -- yF3$No^>n&Q%9` q cJIAQF//A @If.|F`0?P XR1X00p3oY=jz+9@/ 20 A e &L|;hR\AL BpO>聿@ps21pz@,HxdG3bA ,Ϡ* 4h8A @/po`~}c&Fvh`1 R;G/; ߁I'3+ !e=#6 0`_p t_~}o0T. &W`dgD<Б_?ÓdUāy$b??&>#?0|姿?}ڲȝ,cA6 _u&$@"QK'w/$4K$;kjZ 8PT^R8Vd w߱udnRp}>'!+`6LFJ`6lA-ԝ0u/'`J  @~fxXH U B;L Т!fw b8& >`kǁ)XK JB ]10s;0\޾ "ַ%Nk ;30d0} "kVcxߙYߑ yb-Jgz]l_h6"X/ lD֧2_YWADџBϛa- ߯lbػE@ /l,[~ n`X) $=+:z 9& 콿 1q~ #REɠ,-[!pG`epa?_"V4xO]-w|aprAכ0Gق;%/4Cl,ãǟUM FV B9@K z~=O:< v<] o~av{RWA?@GIc`b`q`p?eAFF f0QAX 038XK28A!?X!q3)@,86 G~|C#?R9/"#_4^6d ?''#;SEۏ ?8=fV<?#O` Dy\pOO7~{9£~u] Ąu( *!Y3fbA0kzAA#߀l0|b^^FP_Ûް=ɬB@|PchO>~adf~04mc"Yd=@mǮdu|- j<LLpaNN+ĀWf0a`0H ⋊q2 < b2| v.@k%@) z`ҧ?NiTR޼K_&' /o4%1VV`w w~50>5< ^d`efPU5̔ Xy A NW Ԩ?QmÀ!$L矁I AA݅7>}'vY8@\F fK>| /4/"4R H($m|7,,~t0p0=h #Pǃ0WL o_a5accKācG`>;|)`(@+’@@@0fja 2`{ŠL }VcACh7 ˰0[p r ,. ,wWP B4Û5"` !>'_?Mʗ_>3<V~o2~%HFL xP p`Jn`Ykݯ@t 10$Y+M`{gW?8RP%!6<jO1s0Oan: e8'sLLp&_Ȭ"A(^<nj7C?"5<~wKhǞ R1# 2W` t$8+4AiP,fdxnȰdÇ G^څ0𚙂cOhb A4Z />ӣ d̄~ B1 c2lv@;à w7gR;7>` `b3@i2?#<n?é9y%A_e:O ʼ LJr oŒo/)1h2jJ1paHH!1(& N!#3$#;;2| Ϟ8Ġob32b20[뭵[ 5Ph00( '+-9&`0 t`nl.V__}dxw> {.2 r8S@^4f3%uC|c  W= zز@B6+3 +## l/1#rkf??~1_P-P}3.=] Ġ6J@<Wg`6&{3'MdΔ72]D!3*c`QA` x`w陠3{2] Ԑ戏@0>B_B@I4S@<@<ˑ[N^v;udСofhŋhHXh}Њ7t@;t +4PF@'bdAcG($A-Ʀ `O&,?<J#4@z`˂>Մh9mh 0)&Y.IENDB`Ext/Images_Client_HighRes/C44_KNotes.png0000664000000000000000000000630310131463120016746 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< UIDATxb?P8=@C4=@CFFFx [1SьQPFo=~߿+10* aH``hU?|R fhJ 02rp3233%,(* p*îW1raXp?óO>q ïY@1ׄg9a?޲0iK܇O nJ6F=}W_<Nwݯ_OG~1} +wg$_gK O lR(fh8 f e.&,@ K7B \V00u{@>ԚPZR` k$<6E u̿HK_ @J֋Hem9UX @%~@=񉙉_bNa KB8$0|," =Kj¤k N1<<~ XKNVeyQ;W+yqQÕֱ%\:/h0~?l@{0333Kh1H2'` l/p=73 0E y\CS?{ ox  f ]P5t0)YR`ɰpFC^K?lcDKp q`Ϳo=?tX 0_h  ??@axQO'x(FvWb @h1KGD{KѳB@lDzSohge`8}WBf!FXja|t|kY_) 9kԯέa^!@@|  p@`eaAc FD_o. Z2 84Lsf6mcxc@ɓ@|_'!B'(D k#_ qBi6OVVpI ?V# JQXq mf`|~,#ï,gU;S]S@| 29@(ϓ20=u d63001020@<Aib6y XvC0lh?dt !?n] ޾k5Hc# M  2p22003si~V6^Nv~.&>>Fv^.fV.FFfN&FV&FfnF&bf^&^6  /c& febxKfoo2~ct 4s 's_RadV4 ꪱcA. `bڼ 84'7;73#ٙXؘY9Y ՝?f>z}0Yb t0B6(̈́F3&kbC4 ZAlTˠn 45G@ӬL"5G<Ɍ&ƄG D~i; D7@ yА@&c53IENDB`Ext/Images_Client_HighRes/C16_Mozilla_Firebird.png0000664000000000000000000001366210125245344020776 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<DIDATxb?P8=@p022S@f" 2~e`dpad5aWdaeab÷o/?e`f> ,yf10ڋ yb`f``bFx ċKi1j2H 3r230 /d o.^}w;13@xqw}X=@{Ku &+4VWS4AHA[A1o~00|p{0;xÿQ&N;؏" n@CH--.c!Π! t_`Jـ L@9/ (FaK߯\| 7  ( =J@u 4n'+ i? L@213= T򏁓 _ Q ٘ANcb[ۮ2\syݿ1ÕZ`{ X@e d+0Ϗ Ќ vSd' YA?pL!-y <, ^ AS#;BN%H &Ž*1b`jq3C\m`dtןAϿ  6 ?I_ ??3H3:X2g lw`a%`a00ȹ$C%U_O "@A r(q2Hs;3>X {'tř?axÐh 4pb$ v@V2ߠ?3C=6; ew_-%? _T%d9y&32=% 30|HT( Ā=g3depMH>b›u3Q+XxX'Eh\ï߿@H r0Jp1\;q_LU{'û}= ?b`g O ,/Ds^}ǯ2:j2Zt1!vOH@= c 6}oaI_ן.=ATA^ X72<>w~V ~:'$/#~?~1|;C߾_#' ;avf0/$Uv0~$00@;f~abCm)'/3|a |`~bo00 2e~00o x 7p_SUAIan2yo A ?}fh]z ccPZs*@a/FEtM/2ѭGO~} $ɰ6(~%E/2=pc_1xG@z0eWo?`/00ZVVfpt#{03prp0pIO1> fW!}V&t$k@ t,3 (1ˈ fw[ !_N=ĐhnP WTRkLb<is 6 RRJ h?Ha{p6~`x?.[-3w1CҠ`WQ_pk_0| A1/3@ݹ +000IC?8VefWgx-/7'/3-?p3}c>}u %#P/×o?>|X2}\=%$)Š5Hvdfbf``SUMUR X$ IaKpqede%SDTt LԹd0u?T~^:( y?j`@Z@1 R0`c֪lŧ5 OTARQOp ; J2&LJ cЗF^`{G0$ ㎡/Å޿xǟ=a8u4C%06cדqF`I5C%Òr <//0ypZpUpRL< b n Gv5* Z1JPFd{T#+;' +;C|V<&3'w]QiObs`j&0 3>#5? uvU_?}&%YAq)~1&2cJQYANhP HB"9`NhV@W331D&e? JK$t- ßkƣ7U o1|V r @%隕Q  %l"fx_AEEp-D1黟@Gs 2e'lFF%%pq ';~{ o0<Rl y>ㄛßr2ba0Od\ ?~a`ce +I1.'A ? 21,3@!E'`I 0$ mşBf,2 X}6^bAG \,  #Đ?`.p2.ex ꉌvpdZ=?޼ Xg~@51$]I:( )]}X`*- soW3]~y+1{5p*/2f ,f֮3 ó.ۏg@ZFyQDdz+(3*A,#O *E@-՗6/,yLRBEpd?.7+?3 ^1\:|AB\!+X> UݯO#( Vx8x̀ he>PcT܌AX) /_$Lk-ï;X#lf`8 W`'_ <¢ lvgxpy`{ HXrv}'Ngr}g')*k?Ai@c@+`9_\?T`  H30=9/?Þ  ;D1Ua8}9ï35E< /UgzΚ]? K8:1 6;!I<&B%psA90~{Wv`wM_HbXI@AX@A^!טAAOSAAZaci00 R ؘʱ7ӥ tb ïLT``ac` vl޽c~g`I0<'`<\8? hw2 X3A$E{96 1(2(ˈKn`R&gF` dn@%^PI5 oX `Fb`6l_V100^&h; `lI0l>aJל 4 Cfp|XXZA s4n،&! <- ?@? 22V|wT^dg`4xfFv<+$eyޣW;*ҩ@wl4ZF%iQa}!x73;/H]Tz =liAYߝ~;xG`7ucESg_67NìS`œA߭ ?d`w(3#o lE ##12pz|fPSAi%X1'h(77c6MzM/PITV@8=`&Ƞ$ .@f 0| t"Q# s3f`| @c@2:ǿ.M{.2}#Ϡ̠Şa[ lƢ : pz R "Iy^0,0Cc oA|`0~Wa`xw'ß?`9 {`z Æ6 w~g~_fxm3Ï[݀ژTҺde5sY0Hc˿ ~ed.AdW14cwt 5yo~1|L^16&O 5: UV?ƕqrOa;o`- AC9Z1<_ FZԑLMݙruw'[`>kH;^!VLc V6%5`iԷI@mb;p= Mү%ˠ%ǹТ+<v(9 @@ܛ t%1Y?f[3 -szo"Ԧ 89rwz4تG $s83#,% i2L> [C_0'}w,5挬wP0 r *R EŦ ':nHhOwV,)RHN <[< mX[w$񻯛ox;A NcޫUAĂEL37}?5[;p" =5#4?_=_y *ʺi#0Y- Oc~sgڥ|&W\ <>}„ ӧ__㲲rbP+/3QDW9>~W`8߿S@ "_৺zIIos1&+{h(781 J&5 6ofo.N{r} bDu|Ϭhee%mm   C@_8+030ܽa֬3 w_{íǏg,bn" %΅zwcci_ ytOCNQ`ccex 48'o1<}ç |aX3+ 3 ''38b`byqNqA/RJ?T oGH0;e^AF2o`ӗ} ρ f ,@3333pr3034p_}m##1E`F`PRebYM@( wPÓ <&&A_ o~;/b'0Scb`& ` )>cdQeP6WfedcaxPF h$oĂq{rRߜ ?J4<}eP԰mfeea`g9P21B y&Hcbp6bfb866&A&H>/*&/nc@`&Izl\ k^' P30}03 t u(d!5{ x&G@?03|;Hx6 QH J $"㧲_ [3 trp1l@:  $IΈL`CI, 1=X~F $Q_Xbz퇶>"Оwt Ξ:  |F[&F FJ _(1\™ _f?%+02rF'`%ӂ= We9b5ihH3(;B"LLr}o @_[MX 27'1ܹ X3`zFh '!H`:G`~ ! 1KF"(0 p#5 ĂyW_㐗!vVE`JTb0fje32;@XIVt@;?}gcxCv :8cz\ZA@WYEkB@a6d@۷^CPPE |&e| ~  q R ߿fzv2bbag -`k-BʒX_h3T"ePJAX2p 0<퍟}s#6EAL & y Z  ߾|~3|i1+dֿ~hvv.` -t,#}GIYwP If WXV' pq3JK1Q8`-2t-&@Fl<cؿ!.^zgӠ1@˗G?]v?heAr<ȝL>Їy/t`N` @޽p++_1=W v_k`_+=H5a"42Ϲ7xf&V v4_:v & AP1w1С Ǐ?h5xg`xhkh?5[  -_n| (-5v(fD8$up,w ;v߾ ρ㻟X]}x?_+PPǃB?Lj}{z_.<Qaxj0AoX Lb9/2\? }c8{ Ù.\xp`ӧgVуW>z߼z$^@;@Ll @3*ܺއ7+8<=7_3,Y ׮ax_??>Q1/oc<0:y2"?`3,87Ù3._yg`(wg?~PI)Ħ@  Mo-T;zsRIENDB`Ext/Images_Client_HighRes/C10_Kontact.png0000664000000000000000000001060610132777564017165 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ yА@ yА@ y `dds~wb`g bne1UmbIΫpb`*l-a#pk 0KfPWjz (v9fSqq3gc`dgePO?ofx<6Tb32-;( ;+ïL g t L 0$lf8g<[&=bp\6~|cGW0OS[-\cāQ'0;+$,/ hk>?@c :ьl̮ZRFF"@Gۨ000 }[~1xΫ ?f'ܗ ʠ . \ ll, }cЏX -1Bcj ?!mb `".=t_@GBZA  ~u.IV)60q /B8@ B`j &4v^7| Op23e qm&&? `haJ(bceAR` 2kbDLLCnâFH1xqP @c 2ѝ"w`'fa v.&cY!}9f;MsPD9y KMy/Ч2 a^30߿i%fPa}IÛep]Zp ,z~V r H$3|< >CYИCM_ f-|uONZhx<0<4DBR,B.:~0ɟ2|فIث g~`dF{ ]\tİ>Zf`fgec`eg`cas@G3"<^Ug`5M yy a_oΝ}#d[A ?bXb65. , &ö{pc1\}z l "BZKЂ^XUe^ɋ _]JG/R&Xmf;0=GNI^[7DdTtɰl&{3ݷ gx%ӏ$CU=3_@i&P ٠dNf e(mZyrmP(F@#NuUX,a*,$U`Lw ܌ ̖ .fpCR>=jd8lz3<2R v4(Ng!󂟵$LޞtX =ODDDHE @O. f&1Q /qXp\c^3g2~5o%;>1HJ0ï P6 bX2|6 ,$4,DAZ] Pg?{_h ' @o+3a t>0T#߁N}z.C?3 2pp2}pnoN}r!=AVA\SI*TĂ8Y(3I@g^xƃ@-m$Bˤ^YNlo,i@Vπ ^0<6ٙ-S` g>bX oURl8?He!!|2śȰn ?^߅y +/'vH{<⛔Oe`6~ `; zhV&fWonΠáp=#bum]6`oH άжtŠR S@6/uy܋ e> P[P@m`P7V<ߟ%\<0h=C87c?wo ?<Ĥ$D4tX:fU`aڐ N@o-(cf. tzy~8 80pK > -%Ttn ffegPc`q;o746]o2􃁓څa?h24aT2Bi&h+?O`j!j뎋;>6sAn!F9 L0g8I01B ʜd_`QEARĿ' >fPPvV 81343۹0Afz!:`c1MaW[V3 z &L\ o`eO翟|p0(0dzAE ,l ?0\{AAUẌ́( mh`VjLHy_/?3;S0Yq zק\lw_g1\xyԣS O {8v23K2H 2pd'? ,GY-(־O/1<~؍ Rb@vm!)_?ǿG>|~ӟ* qc[4VO \`(=8 _b`~$bnOK[Apl;q]@ L/Ó7?p77?0\~ ~}1P]@FمXYx뿗@1Pc {m Q= L s1rgasaύ 2RJ2bg`g`ftx@{._}O _?zcO16Xbyh/Tu_풬ݭ7J3z &0Sk^?@GC' /c2\~ ÿ3|ߟO27 bx{%w=}}#O @A5wMX/kKwo&}?3#Ƞ!,5~1'`8õ?@w}Hݽ o}{9ß| u{h H152^? W L;׷0 ~ o0'C@@Q vi1 w3G[1ș3}`o:9÷} wH!K D $м"&P sG$P2k@,ӳ@1:9tRs R4=@C4=`>'5VBIENDB`Ext/Images_Client_HighRes/C56_KAddressBook.png0000664000000000000000000000774510131265366020110 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<wIDATxb?P8=@C4=@C 70刲8U 1 )nfíij+y|gP/J1 za9Y yrܲ/598D퀲M14``bO1HcI4gЖa`f*$xj8J7X1=g~t20ȖU1+!3`a](!ͤ͐iý& à* T-NȍDw0q-LrYj^c+Ɨ ^!,\r9 |@%@ѷv^ao`͋/A=u025.b[MŌ'2w72ب1De1ܸ/ *_te+J偘 D7pK)15bw }e1^Go2|!"A'G>}ĠiACуA[* Z?0 @@sTANJ2ÿ g ÝW_9tM{)[=W1'7l"0?MDD{xZ4+b-(tG^Gf&% pN6R"|[s~^CjVf-v.dE&ìDyf#cn?`}9ן~2q0<~TIʼ-O_2|b0Ud0Q`g+t0󏿁/0?~X1?x| dFLo'0~awpED;i:)70?`f{V`,|zן `}헟 v1 ^}Y $"1/  ukŧ P) P<ۆu_QeX&ưᢾ $" p@73 L., ,@Gl~c/P \|o  b" bx Nw_f8rob 6^xp9 ğ jM|_7F o0,{+#m`HK p `oX*AXcPz?cADX7 ofdo?2Ġ(ưgǭ_ V"s_?le @7%=`Д{pkV0E ALIX lP/00+.Vpy,MP4"& %n2~Xp1[ /2p ~gص9û#7o0vWa @'Tzީ \ 7^yqymJ3, p0 ـp0p3) ’UeԐV\ ."A5, + k402?3`-(s< #xVyzHn('WyVwc$lgxxTWv @ A`SXW00z:8{F; &S1\ùG[vbP[D1lmq:IJ62)}A۞aY31?`rd$akgo ?eq=Å??õǀg?P ~j3: @ĴF$MdV&oz!}LcJ_W2zk x~dxp%ɫ_ӟ3:gPfmVa@ۜf0NַUe=r"Cg Ͼ0HnfcxG</ ׿ }c8wٿs^}K7[sw14AE%X<@z""̳,2y}`pY / jNw^0?}O[phSh} mۼT4DJؑdqVِgjRASAUA]O Oa8~O~ax>ó7eShH?:=:/B w)IQq[73v헿^zՏ P@}M =W]JȘtg-7;>0_>@ PG( i| r<҅bh94M:;1 r<kC@fXi+!53R4=@C 2ƁEZIENDB`Ext/Images_Client_HighRes/C54_Signature.png0000664000000000000000000000447710133442654017532 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@C}tr9~&>6/޽){10NB`:80#uW_2ǭV߾\/``$.Ą4XX:-My}.Ï/7X?10`^υD ~2ـ<kdCc~20x9 ox8tްg @/Z&/Ne.'O9ӗ33 #Q'ï@&hg \f*00C dGO3 x'-B9PIZa֧ ?_g"{I: ?f(4sN!f [>`xv&DI&2 x=۝O]"*R P4zNi=Z`2CD$GSlZp 7 bylC0}yk1Q~I:t0 @R 2egbHd!,]ZŠprd 'K00zQ58@3嚧!% LAOÛz d-Z 쓈> jz?ҜmYo67 fxS1Ԭf?CqtؑoO;'v#@Pǰ%K:AA A~_UZUgdה`ج-J5<ư΁K*"f}}ìo/ss28x#2m5R9(3-VVr ``sg`,6&/pCK N ˦rxCXpG`Wؚ +_T ? 5XaiG 3 })`}u؎_ysf3<0V>YX"Қ s$ _eH+xGԎ <= T/H"d11y1(810y3<|h<0?1|{a׿:& IJ`| HMdNmf⑳a\OQMSdzưw }gF  #@B v`r`8u2îsAtg R<`*`adp']7Aa`~ÿ g=d0c Ӏj?DJ5e)0(27+ >aXч sqaSzV[7Q`&m+@zۀI_]^Sg%l ^z+T 1ВePe8%!RT@|ehfc`8, @8=~Lff Ҳ ?3<|Ν9?~͵u.0.cz]@w330 #ڿ Lb8w";$b pz0'(T13| ''Xϟ]ʰrj͛<|(;G'f?B~[Ac/v g])կ{=LJɃ!LUUM < "aɒP V`hhưk6. -[~GYBQ_ROW 3L@É ϟ2!fHB! ET ݽv_eappeV`ض8۷P4IKK3L/nIMv1&i`43@凷 f83`%6(F&B \XXXX&%% << >}b0}`00Pdd8q <=,/EE3,]8AMQJABLa?O3o:sV̡`&[0`[{waQIFfF z ÷o_d;0Bp0_XȾp="" ߀50O[=/v1qgY8n0flpx1PdJJH?4IexÕyLj`B'=K?1ߐ:9ց0q᫣74az`E) vGQ ~f`d8yM "4|Guޯ' ;Rt5 |6I|bx߰WJ2K ̺OX+r2 ?90俲d$t/6VK?XfX #:e Z"=#?OЛx92 P<L~@72+3gp=eeݚB6(Oo o`HL )w&` ώ1e8Ӿ޹p` @,h'&` _~,}d`> sC?$,9?02,T4QHcbhTTYvqhEV 3'ߥ@ mobD8AWP`0cfu)I߁U<С!+. 2uEDDTU <ǀ0× gX9!E6R _7fxy`ʠ hʠ)l6@ 0] ~d>6!/`[A{V`o0@/3h _ j—~! &z`w>X*@`ߕADXT2301R%K7-fpJ>?<ȿt$ j&ʄRc?1Ji, zEv W?3xM 2D\0h=pM\P5|Y~ܺ X+9.i`Ĉ=Xn4axuL`oBW@,=v/3̐J.L÷o>06y߿cfў+ k00) Xq(ְaex72,^d . s%h$~`Y//^<_203 r&`J&+5EI rX`zĂe 5 "ع}}y=\6lXyϟ B@1ܾ}晘BKNFMnjU;136B@00_.8 lC}-pu[kT1B|+"ޭx"l hw߾pŋ@/aP/֮]՛OV˫ ,f#g`x~`u(>}2E-l&n. gΜ}X[[;&\ bVdʪM?`/wpo\@XSg~!XOBwܽJN|B |F.1,a2X 1~rq 0}?9'Xl8kp/`_Y93ةKI݅TIl _c:*l@3 @$r_|ݶpJ7` ؉wAJ<33ZVVR/`@߸ %hA_H_hI߃ {/0wijѺe8@1 K@pp031(0_ 0y`{,tbc> ApY78=o<0 `Ik> rWlȕVl2߿IDR:fX ҹ8 h:Xғc ߀Ћܜ\|Zv5Ãsov00j@l?=&,xdфP# @4o`+Uk  xuA퓾 ξҝ!Mo`V6WԬe)yzݛ@ԃzàN<4@Q@h Ȥ.I2P+XR'#q!?S@C4=`>^qi>yIENDB`Ext/Images_Client_HighRes/C15_Scanner.png0000664000000000000000000001013110127240336017133 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@,p02!/UǏo}ϟ/??맽{jY( gj?1|' _}_|奲S߿_^ߗyuџz H/ݿǏxdeEJ?L~f(=GG?=o ?䟟? ˗O]T<+ŵ96֛ + Ib# DǏ ߾o f8xWfox XȈ۶-ĢÕ p"l ?7o}Xvj@X9;4)ʊۛ0Dc= ##`jOwR b@Iϳ'w oTRf7)o@G]]ѣg^ޅ_~~J& bnhh3I߼ggz?W99)6NN_?p A@ǯ|LL84#x#vv?vʲLq@\\ ,,R0?}(C&Y XP|ڷoLA]!!P++#P"-7kw߿ĻwvD 3kyxxyy54?8%~+0?3[ׯm YwZ7 (MB@o߾^``p(A988XA##+'d:e\I p+ݻo fPʤ.`j5ݻw1I|;uj11<<ܹffb/3{n;WB3tDNS`%yijcV;(Sx ϟr2Z  МzӦr\:Dr PAA9PKX\vL3@L4j7.]p=0)p_05 ť-^ fuuL`)g4"f&Ϟ=|#l] 1BZPfUTS;O\lI1a4@0$% o_|?jݨ#7,H/R.\8 ziE&fHKfZg'N%EY=YV A/ fr+/ y`[X1BK%&p{:Ç<{Romfg o: 3w02{'ÿ?}/_I^81H cT``&??y0Ŀ3|@!`epM']ٳgC: D$Z’ogeikAa!&ݷY~cR.0 ̆~3 ނ<СEA ]$991=ٙ *? =hjMME_WgCaQ=V_`#O A 13, `2zÏϿӿ Ux8}kW  =" LŶ6:ڊ w2,p7"3ÁFPef`A"3@3o|ңxy9I'_ #aF'ĠlPf32| l03\ PH r8ix]eXp^xIh9 ď' X{,,69 ր`siXGh0[T2GF_}ae,fa8cÐlAY/ aݷ8+>=ԫWNCCaeM` BHJK+˫jꪱJ0 C2<> A(hT7cR y{ÂkYիA hf%zb =DTIJ(kh뫳*5QQg@$`O0b؀p BP+7O_{Wn޼xdNC?Ii`zb~hA }mm3;iiye-a`̰bFH\nCF§ tpF灎A rIYqhy̠ @_ A9Ɍ 6i@'bIENDB`Ext/Images_Client_HighRes/C67_Certificate.png0000664000000000000000000000436312505027656020017 0ustar rootrootPNG  IHDR00WbKGDIDATh}uϽϳ,‚"bSEK`@bmu(&!uZּvH]TK#fEQDQe4D"+ >4?Efwν=s9s9QQgwVah\M(<,y0\2M2Iƙ xNEp8'xXh3I>7/% wN8#؇1Pp5%۱KE;*d૒X/%땜':_^rUܦ|^CЖܧ]YrWU Rx ]Jא͓kOj\j6FEw5.4i:[]HgF9>eP, Tb.5N1/GJBlM3~#VQ̵St zZkڱIv.Tz>M8MTQ-ک:ݎ Qqn m(4 W#uDeT0HP+YeM~Ъ5U' ѹ/to֣U!dcV*g:fI+Li*jٮNݮGz-z0cKj  #T<)&"xE$Tժ$kYg &.eIT5{HjM%[$$ {Ѭ=*N,SxKY{u;O҃- ;$M tq$HDhQt~A=H{R۱"3-a&p}~U냄LדD46s=6fo%y+L.|I<'~8ka+T2UlxðfE.r|{Ӽw,:pV6,C CQj$Q3ۛWo0Qk^AgKfhR4+qŠ,xй7tȺ_q&clB]&Gtv`*jrQmztx_f}SN0%Z,iuA#"Z,Y))\t e7Hn튈StTЃvqz(?B n|2RX"!9UEY,YÌs_IQw) 1_CʢiꬵPP 0`UiPӗsU_Kk=*I-uwT8_^6<;3iVfoP|:`T!ٲ`f]9_[o`aVZ<Ѹ%ҫW1 >Ј$(.J0'&~YUNNݩeI}?fsHJ]h܎ɝ"ǢoNn2[rg8>+}.Ky'䦲sz@?#_x/goykOq5JaUjPs͌;e5nր>(x# 扚qhVCܓ[6-֢`{6Wj5@\yw3MZ ֦ ic{`J4א'l͚t,%jT2Hpc({\R %K|Y-Um"dsѭwpk w 0P.`3]h$_*Ƈ5Ϧ_ LU5)H DSDUy"٢KEV4B4p]-<%%$L=&Hޕ11 _0Y+U%ph`d - %S}^0M0@a?88## ZIENDB`Ext/Images_Client_HighRes/C49_Folder_Blue_Open.png0000664000000000000000000000733610127547046020741 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<pIDATxb?P8=@C4=@C4=@C4=@,`_02BxqG~fG_9e ,* gd#@o@l[c0&?䁢2 *l:L,nKc8(q2@Y{`a`gefgbx7cbZLxs"ف "̮ M6^yvN~nvVQ>v v9a Q>%3\+ h{ ?qy /(:T^?@07?WOSN1t!W_Sg[EI)V ^>QQA.a~nVIAeQ6Ev!6aVV&f_?=>b`a1c>3 xa`+Р!SPVmO+7vv&AQ1A>N.)A6&iAvq6I~6P 2q03r00m4С_oo= !age@̎/5,LJl\  .4ԁ ALZj  JzrҟRd&(|Q:]`1??|qq1#542 ȡh䂒ct%ٿ8 ,1yby9AIM_Ki ~OcZ0H3"BK, ŠPh B+x$yBNfbcfcbbb`&w?gvg{>3ymN $] ="A3R 'A4' 74;7+#+P X_}3:@__o=~ىIh((QZRBN + E1qa',,,#? L< L, ?bGPv DcO^q?e8P߀H37R-!:HR2gj$ *Jگ_ :?30d_WMz @d߿F5)@~l˼6=>+/ p)S@'QfFDt4ƀD ?:"+ϯ@7>8ۣ@#^~=럯,e,D (~ ^g!Z'fg5@ }F40Ty iwP!ç<(/__|_Yi+Q?g{@sBm u4, ǁB?fG k(#K_7 ?OGBxǛW??y/e 1.`47A+cw3EJiNdf&h(3B0!, 9X,"_gxp>0z02Ʌ n%2b{o ?y;8ta֝`|`_D +>Ml0D7R k'2|i??=,X1~~P_*qbb@W߾;8A5$#0=za͉n2$Z_8uR~#xXg^2{3L ;C XP<+з;Of,8@(CZC E`avɂ|@J-,RB l:yar '`ŵÝ~*}BU 8$A}S0{XG ]PLA<t'XL Vcʑ  ߮  ?>+0oOw(鼆N>zßX@Iĵ)TA<C`O8<ghfbfUbX r҂׳lX bۣ/OL c`ub@BK&x: 0X#- !xgo&1{ Pd`q&k??~? Tקo^+w` G:^fJCG&H229dЌZT`KB #23da8}ANAAKE >gXf@1xsW_?^@2\@_PQ bAO$6@ 2 V:R fb I/ |d'׋O[5bH_( `c{a%0.@\ %PL 6+ $3f`y۳' O9d 3|+2|ٮ@m <ˈbb *T5 0/ndJ1K,6&VVfbP_߁u/~?y >]X 񯷟~y'?]vc LBf&Lt\dĕ\ X5VNfv``6tXXC _`~e÷}~BG_} 0xl}tGh@iP}~!; y$=gZ J)3| о_?0(4 닯v@!0}G_o> _P$T"_А -2P.\ŝE}?|Q ?1: @MߠQ? '@2Z@lP˾EW$ߡDAH+gS`1'4 Ɂ4s$>@C~ h{ h{  / }kIENDB`Ext/Images_Client_HighRes/C40_Mail_Find.png0000664000000000000000000001065610133443542017377 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<@IDATxb?P0@ yА@ sBC3Ŀ`3Br Hrh b6V_?pH1I` XZ`/Ǐ?Y""\zJ nfhs8  yXک/߿R Yj wop1ppf#C7o!\b~S%9l4,޾pGH?̚ ϟU~pa?k>@Y37FQQ\A[GAX `'pӋ^^LMDmp_sYXYe,4$X6JK10\ 6> d8t^>){?&B߿ϣa"Ϡ+Ϡ&u8++?0#ǰu{%-.f߿~2õK:6Xxs1vo, /$ϣ`b #e؀fgc``ztm?&#hezښ @Ͽ~SͿ~}JDo`$"*Ȭ`l " v,s=Lll3C=S'?3X3p1c^zEY W/-رc;I3 8*3ء sC/0=|xݻ ?|XXcbfPUa F84T >Ixj~."@'66vMUuE}U%eQ~`de2//@=|K b"`o1x 18:1 0Aå VN޻Dx})> ZS1I%CV[WA@A^^Lx~%2HC fxo77y>19arwh+pl50TX ~ &*p-pq  Zѽ]S/^:v%^bpT2&38ef`|qPoJ/¿!_C Š8nPH  R6Aނ* P,0(j9  pČwLܱj8dՔ0OKf`SeKP)aM3PrdU ^`#(׀WE etÏ_>KgS K_~\p3Q)`b9} +٘3pjc6H,AcZ?R@ 1d26AE9Nb`ظ)^^6˗( <9Ƈ,,Ws=Z  ~@7P 9\HI?VAdzA4?hOo߿1 ťϞm\ @,);߼}kcY bu ,E=01 r<4O1x1'_1pϟ{߼9 @,,:|AAD$+Ϟ>bUdxA:lw7QL)P{`z ̾sօwMLL? -23LcG l0\z+6`J2lR ٘ >8?k>c!ÓgO~@Č>ee?; Ϟ;u/{[ׯ0z̎HGH u Nw/:|qI03 C 0[@xR^؝;&ư{w`t~Lf#4/0yU |=p|0 D&/ >ŷqDd+ߥǎ_kpse  /^]m-->vNwW`Wr_ 'O 4qPw *wYY>z^AS \,a K+0lٶAG)SV`%37l~bï/@n>~|\Ff&YU-Iuqc&^k+G7c!i.Hq!`Wy;ߓW״c l^+/o\'a%..asg`y`;/fmۛ,mJuy!緓4vA4YA#k1B?`s@QK$ZV' /?dxOL~_^?_E聟_~}۷+? (S:X,]9 )`A2[$t>'@]et#sXy 6Z}wǖ|yvݷooހ[@p`k(F=Lr,?CuϹꕚGe!gFfpTΧ,o2P[d`}˗1 #R ~?Ȧ,~rVx2 `c@@16lMl?CւH[@>W y][ T@|6Ão `9vZRe c7L@ iVf'|wm ``X?gPISf1 A/C]1pѴb48>ާG04(=[`)b?+@ж<#Î^6  { {]X}I*bUhȯ0M&[5IENDB`Ext/Images_Client_HighRes/C36_Ark.png0000664000000000000000000000761310131164346016276 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@CD9]Çlٲ(  6L IOOrO<ں (%,2 &J O#b-PNBDIGA\\/^0zׯ_ bbb@%@Fk Q.//_̍7~ %%e z?|T cGXXÇ ޽c|2ݻw>'''JFb@Lya&;"Ucx58&Ǐ>|  a #oI&Fi)VV&%V6E,߿} +,K 3߿ f33331'yy%rp )"%$"* ,| @}ܑ} /}̾o_Z<%((N.߾}c(Y1cADDϸC]tt89'3+P=# @O>30|gSAEF巜+Ӛӧx< ; 0YeeeçOc ̼@ g1dSgx3j{/÷~| LjcR 002aq{߿߿]z٥˗/*} f `)p!;Ý{Xcc .n&^~V~ceo~G~AIAU` 1fc4…@kD@Ip`q g6>EM~B_ (d>1|﷯|o "{i "|hF ~@dy= PO `S׮2ܾ뗟|_ǯ|O|`ϖ>lݸ "f˧%* Vy=@dyh#+'#X,I?>pAW~}yɉ_.?|?ThZeb?,##??X"@[hl`g`\ו'=~ ~f$bpxC% /~ v`<{POߠR#.ψ\JVl/@4F lX9=%uDD5e^{p]~1ALZARAI^ῄ ;}1G^+k:8e’?Q!@L!YR*zB \| b/rӫ o\aeQb`,e330K.V~^ 2 BL :>ɣ4w:=h3PVT~@_Ռ̄L\kY`o`0&^q`o``vU ?KyV bB,g̮:+ß7>`Z'Ĝߞ 󗉅 6`_N#g6%l@O| )H8iCL@9%%МO ). 7? }bc db+Y1GL@?A!߀m7ᔂ+P `[`cC') OKB&%;߁ys@023kU5J1A<"P XD /! e( fegl.c Om UVXB bD-lfHpP&;f6{?`R;?r 6N#;0b_AlI2pBĀ55;f818#7 >/,@OФca3 fbq A#8@MLL‡,`JGN.063 ϱq10Eaf_)Nnj<$m0bIF` ?;ebL6Ha6,y(  JJ(1*Y X 3PpcG  |##`(z~У\r[Z` dbv6n^POp#%#F$6H2bĞl16  {.' m_<8{AؖK@җ`z %&X  w`!2ssS50faas?@O6K :i[0p @:Z@c|=ypU33bR`Ƞ0'] ?n`Za1!UMQ/^pܴ W!;ňBq?$ȣcklj:eAS凿 ! ,* Lrl!, hcBG`2}eeg;ߟȑ[~}NԴj~żY߿x$%eM޻vf2J3h5?И)u6)???0rǻ_=s_Nf* %%y/2ܽ //'7/;@GrC02xϭۿ12qa8ZBi3zBi`,|/J\S@| @x_:A** }d+lff`s>~@}̗/_nߺ魠к "gt`$M!@:Tfg`x5Ǐ_!?uݻdaaidd(7PȀc  tt:}/;hz4/!ydf^=@<"ء51C3?z@w/@ t: IENDB`Ext/Images_Client_HighRes/C01_Package_Network.png0000664000000000000000000001273510130241024020602 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<oIDATxb?P0@"0O2h303222qM*W ~c`se1](#, >U_cDx4eEYe$y%8XË_^'g{˿_mf`|#@~|J<pu1d(PvUaeP`>Aa5_10ŔY@[?#D9X83Hc{t1 3~ t40|(Fgzn/ycbxr!Âytz>FTa0uspOwRcdĠ#?`vpra:0F&/??3|:j>#/ $3Pߑ' 200k7-ax> .O~0vzsps,ͭ%AKß?`& F`j9X_}(W7 ٘?xp(:ÄM On^16O *ÌmQF7O B3( 2| v`fa6N^>2H,e`'O//"?3axf'g2<&u { J 4crdçW+L$_47&&n9!^a ~%gYr \ 쬜`?'w  fseJ`3L-2v^eafpt'Q`}W`fddT`fZ).6~` J2q3/?~?Q߁ILCe&7Ȇ߻2uP-TN}.",WMV2 gggZ ₦ | jp}pm_&@o?8dsׯ <" F KwU0:22Hd(T{GspxOIATĔK?#;A_=d?8%)0yq8ќ :<+`S/`_? ~1ڋ  ܆ <@a 4t(y0;ADa ރ L> _|(Tgx>ß_>|piۏcARTARD۷o o=!q_`7аv2L^~rg B̐,jv\|0?dxW^iŧ> Ïo/<+>1c>.-~yptז3J1d0K{PDSqe6ϟ^' y}3/MVw-no_]k"cHUcd`eF<01dacd3I k t0qUX _(ςc؇Va?phFדg>zlxG?(Z×O,ldU<<ɠi + @(s c z6`(J ]] '1hf1psK3(ě T jV0RGBޜ Ll=C<  ?<l[^f; *z ʦ@s"4 51q e`f*F`!~po9CZ?9!1q 3®AAc??2ܺ3Z3H vP^"xw->a``1kjơ 8IKIF`Wa`?J1 + +}'718[3&i~n^Q `+` Џ_|wP:/00@ܿ&J^)XdH 0dbD;\ j! j\afDy@CL<: ~C@U_B/~d0tV`R2py LbNJ* u| p6 a&}( %nà*np]{g1t V~3"ǫ/ay'   , N@, h&Ab4% ,%-yDx%"JBPXڱ3 v2/3ý~: bWϥy%p^(Ơl;CPXs2+I\(Y M$3ؙ}VFTyt * 9-?>1(0|p+`3X W.| `c /aiTΠ%k *'+$4+<Ab0>Ŋ 9O`,*``un~ l']gekĄ< Nw <:ܡ۵V#``b';~>('<ـ2 z)C@ I{=`_Ǡ#kV#̠g0PcQ=çX6lgx֡Yp+ G67 g8t6) rzqA,C+vAR2 Fr*0ee3<|JlOq,?;+ vxl\M6'ހl >10g?jB_ 6Ȩ3pn( eͅ&A0 N6* 'P}"P l1,\qG0zNPD Ą94g㧷wv/z!ɼAÅ 6(fb6$ Û5ہlS<̡OJyꤥ N NwؘG`z?`-S6X< ١4;tCJ')5K_j29 ë-BhE B,6IVW(E P i >3+8Ld}X3ɯ@;ƶ /xz^`4 pd7 LS:>_ח\S~_|/a(/֟A(TT 2p9 #c''&}jF 6 7ٶ2l{ X0p2q3hcf|f'~C3g~3# }k)D5IENDB`Ext/Images_Client_HighRes/C26_FileSave.png0000664000000000000000000000510310133443102017236 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@X=$i00-d``01|ʈOR?π {/ª Xt< 'si)]"o@A2??,h@G0h4W;W1(Kjݬkĸ>%yAR\_GyfCu0##,V` Ԃ? /\dV +?_F)",wg&+uUIN?jvv!!r@abFF.Th0 NJCᾐt@=? ?cCRb P !403 :ߏ lʄ# 1g Q !? u ̈́OA= >#81BdW&^?̿A2.* e$ p(13c$('1? oT4!#\+ \8Jit`eDIP&pXbA8 Hlcz Q`; $ 1Cc?4ȁhfhMB  Fx O>L@A.1Ą3` v#`XZabg"'#ʂ' P8##R' PRHQψ(p@DfDx#$ (FF؇&Q\ pzryPLy?#f@DF9hx"D{5R T e2;<ŗ"{aH$QOĂ E̐Yf$ G'!yAX m&F9F< p'!<E1(/#"X# ˆ@!P̌'oCC5ТggoMdd(&F N8?HU2$ @x?x 0kDFCP,JV mÊL=THR X$"c~@;Ab`CDL-LL&,1+ x pBham>DTGI  8XSQt_Lf9b 7?^}cx,/Ǒ3?,l^/4y%& IԔeQP5l, ?#R?jŗgbֆ0J}1G6Jd#l#AXA@oٰf>(j]#Ci#?%0CǏ 90 #bj/& =2V:y~cw?Q^eϟ3gadjRRYKi7P7TF*XC/ 3A'~ .Nz231/ o$+@C[6,<п_, ?R9߿2=tQ XRBkc"X' 1{b/ßx_` Bz’L @x{drȰ.:?'@qb<? , }P,|c$X/R=DCi 90 cDa >(d pZV ȣdѡ d@AH6r F@Բ'099 ?>RED ^4%@yHhTX*1QI!1\ 1 QX&&I G/ 㗿~̟ '(@t J2` p@R逸?"Ăo.^ G@?FH~ZZrv2y} A%#ߨ= @,E*$D|ȠH7b q '0sK2oX/<4 z_^{%ë 4tIIAFpC^[7 ,  ÷_N}fe`lj0c`B|L?N٧E <| dU#?_WMdb N,L\|ͳe:/$Ӭ4=@C4=@C4=`KU8IENDB`Ext/Images_Client_HighRes/C66_Money.png0000664000000000000000000000237712505027176016663 0ustar rootrootPNG  IHDR00WbKGDIDAThI\UNg08GT8@Eq䕈F pnG^\ЍDQPq"nHƘN b][;]UI0~ug>Le\ `!G!u|(:2UeE9pnE2\D\+q.ƕ؍>VT$5[}j*Ns-؀p~ mBe[UPYMnf~H[kS$Z|z4 ȼ>JZŃxF0xd6iNRa)vų] JJ*krNXa#M7]3q>2л(TgmUm(SwԏrK檽,Qy W;}g07d[z¢x^<}hߡ% *5$kk17k(ȼeT!NcRTwz g(E?Qr'H}sH:C#Vwߴ% ,yl& ј>kO]#1{2kybn, #\΍r v~ 5*nSSs:ObLڎa^=QM6_W12 .A eexl_Mިi}[Š[ɩp`ʴ;S'j-/XSI"bR{ʬUj40 0,d3GC};sB)S\XE2j+NƖ(j spZd/vT/8Ό 48Oбۭp}KfnҺnvPUl(PsgJ hӴcq\4'ҦsS0{;r#sR[ v*Z Y3; x0~RwM5OCp7_VcXm"OFSIENDB`Ext/Images_Client_HighRes/C18_Display.png0000664000000000000000000000577710131206130017163 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P"bcceXXXZ#tO"Ig.>s?~ѣ'N XYYRSSc ~M2jr4 MMM"@$BBB -C#A#ƌ_~10P &?2prr2fggbO88 81rf K Z{W 7^fHeD32+2HKK3S k]90?0<|!v/i! fG b Q1b L@f02yx9׋!)%{Ă~K\!ANedPA AC=u1 ?<\CA~21^&F,I z9 *BL ?~A s߿P8Fs_ @_P=6x@Ä5`VAXw \}v8 ?0r(F &7 x+.fpĂ`fPKFs(!$3C# 4,)"_‘uRT>3x?T c?4&1B@/nkGJ6;ɑ`{H$r?B?[{ !#9_DiR%7_"(!?G߿6$8(@0|%@oH 0 ܑ, ?/_dx۷аD@PP t777" 0h:  9 $eVg@Pl<Af=zߟ4LÇ߀?ռo߾y Mf A+;1hs^0*D `nwMf$Н(#2hs c$+1kEQr)Q'Ud,RJOvVXՐ+Hu4na}%wP{@ ! 87Py@-,,"m@x l&&& Cݻ$Jd0J+sssJ`%E===K.icP=0 2 ʨ 'b T=  b$f''r`F??h:LX 3?`Yի:Eh%(xw N3hA>'IENDB`Ext/Images_Client_HighRes/C57_View_Text.png0000664000000000000000000000450410133443324017474 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ yА@ &00q pև Y=  ܿ >.Z 12f!0?( ?$y( cǀj$(j#32rC7]@!Kl}J?Ă?(&C$Pal8._pw* Le` I! 58#!bTqdrB 6 ح0W r!Xېp!"J !,Cvq3Q""08jV@ \Ă?##? 30 i?Z~@bGS#yQpi-c Pbon2|yh V6V>mR߿gP>~P#qA 쐒z+ 3"i"iiITCOYY0`%DR$ď88b5̐<-J¥ '@j13 J&Ud`9 %U a^".BČP) q|axHi^*􏔄k=aHrddDx R"*)fh:z $T#%CL @H`ƚA̾&vvPOi 1YXXc?`7obhnnG~12VB-0jO;7@+?~33#G@,51++;J=/a,@@CPcRqjZ=@$ f@ϟ ښ %$iX0;/њ<L,8*hp2bbbҪDdazCC䁿$R)@9RPlXB2 (Z j 0b&!+)Gha'"CJ)iJ۞G0<q<#̉4BPH51@Ud sIπ%ai61X9#::ȥ@<`7oJ1 j(3!լ bҥ +WR^nR#?p,*Ц"F }c8wJEO #LL>1\p #.iXSbRM `D0r --uhe?`GԀVWWȪѺ2/!*>Ā@>;lhףo O[e>q1Oz)2<GuF(4, Y:J̀ԟb PbY^ܨC!G@A@u/$l2iG @x `gS_[O bBmz(L4-=9 U|i (R*`$0KXq/5!? @C4=@C+ͶIENDB`Ext/Images_Client_HighRes/C00_Password.png0000664000000000000000000000644510132777110017354 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P0@ yА@ sfB%A1 Y(:(\8g<; j_KIfv}m1 )8zN3@D@&GAH:٠bcx[aͳ{?~RKKW^f;U}o\6)LJ'MeE$}d`f{XH9Fߙ?w}7@gq_^) . 4KX13Br <<0Jqc;QA -x c'WyWL̆@@: >: C &Wow;=DB"@p`5#d u0倥! t<3LlW/!No1|E/mdլO?N!J:Ϡ-+=2")\-uaoM?B{Pmt`!t)QА LGIWtwogaA  G.[+|?? ߆&?@D{CE/ o L\i*`yF$*I緁f~ngc8׷o ?1 ^p/Pr9u 8P7Ic<@X3q3  tg`cV X*2k}g`=t@K.w?W} ~PL5@,X 03@,zx`[I xa`.L/2|p×5hzu:@;Tu42 231l{s< ؉~ xF^` ,_Koik7_'86 hEj&~ftRlf a̓@Jб~>#ûW o_1<~/P b@B?002AzunB*r9ee _02lZ(p)}yχ{?=hq&`)~̬BV(Yn_aX{Ѧ[ώ1y =o:`% +` |RU5 `rZ/P==@(`//^nyhU n<&6@2\@(E9f ӷa_H >5=h;Bn]+_r>t^}:(^Ӻ$zSbmh6R/@:vBRR^=@C} @ JXIENDB`Ext/Images_Client_HighRes/C42_KCMMemory.png0000664000000000000000000001013110131465524017350 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@  'C3xy"@JvX 3 |(#?LVF% FӀh ߵN, J li l@Yq f&xý 13Ɂ3O<322L|7(9pr|b`xh/?I Ͼ#? p{P 8bkȻKͯ*1ƌ \ +8f2 ?q3Q c3 藄\YFޖ/L ģ& *v ܆Q VIW@񀋌;e2VC-#C] o2$aehMc LL XƖbyI.<&7!A2;Åds1gf8'ε \ ;2( ~dy)Ï01,{#o" ߱1H3fr('Nl l_3_gPt  ?bQ$Ɇ #9b^1E)2|| ,y X *Q xfxA 123fsÏs3T:m<`,m#;`Ȑ= y~og Gt~0bY9丟0<Dž%gD$dL6?狛1, Cv$0å G10 4n a L@`_aPe 1 u=`t,1ߜ?0|PdϠ-pA L@ǃB2=bprd8+pUÁ5~cpa5U w |a`x h"*2+p&oEL~~|/3 C]*/4~3_ LL`3111|< ?cx ~fX}AM O?ftCSBkD&E~(#;C]: 'Ù4ـe=3(ˢ&ѝ(â:?+ 1byN(Ј@ ( M`>Kǧ ?!pU79~_X? \B<}`h!0ԁ? 0b8!";3h1 >'@QZL|Q.~N^F`q}?Oo;|fX{ Q~ {3L00|a!sANî, g8>}P9d.@3X `e#)0xyDX 8/n[  3Lؔ&&`Q&q`(O,U;LǃB~'O%~1802+ߞ1 `lL>gׯ?n3D2ְ=1T6h/oXŽq2|:t)DzEf,mt?~+ CA07]-~G_1,p ` LV_e_33x0`e_XAm$!!b?7Ç?-a HKB:BjfJ-f,?Ơ ??8t5/(ma-/ 0̻d3p0J1,4ɠasf\@C71`c!/%}dH agbu &$_ ` 70Bl11hsgj{AV'Ñ ޛ>=2,6@ŀ;#j9~cl,dy];Π!XT6bƀ/N.&6Ug`cbeAL T *?A;9Ox ™R+bNͷ?_3}Pp`2 ,EX~ 0}s2}{a~K).o,z^20Ɛi ?&2,6@f ׏Jg!#AG 2< 7'-+e0û_C7B' >f+[` xP3. &q$dt2NdbДP`س{#(̠~b4e; G2̻ ]'Z[ 9>206/.^㏒x IV=bV7_>gb(dbXz>4+7о FnU~ʰ7Â뫁 j : \ O0h`8!'34>h9Hq<TezB/`'<} j0fVFhabbm 3gEb`a :فi!Ë ~904ZjWvgQKE`YG`{_ ּ X%hÌ!Clp þ GBfG  }eb8 s@!RϵR8?h3p|`fR'>kx胒 C=o&Pۆ N[ ~gb> uTq< o<a~ .&?pc@O$ ?@Ɇ>CLXñ sNVT : nb, ˌ2ğ8/00><$Px ~^𑏁A o d0<􄁋 X00 /AW 1 g?I3Lػ#b" ъ /2h(d8!/sLJ 0@y@A_A1Fߌ,,Txx8J#cDDj@lVfgMMgGo_>1|bXtA^ö'L >]VRg?P5a = SHe`cbTgcbbXALAIZ Po y;\  ?>dbH:y' ?*Ct<zM *V%4XzYCY \\ |a`x-5o y_ 32gr1{6x 41LMO BL؀=Z>` ?a&o WŰt!v@j fF$DڙTEg,+0{1r~c0ư<0\ebH,*3>f  3r@ḵR[TG ,/iQ@i6\a&de`9q/yJ@а=a(Xˤ?S `;Aac=q`<#C&`is l> @:47ø81peeǰ #CV^`Ql> @v)!TI_4$H 㯽 d|16[ADʨ$92j2$c {p3Z"uXRY5122 <,mѺ h|^_AZ @Ѐb4>x0 IENDB`Ext/Images_Client_HighRes/C63_Feather.png0000664000000000000000000000415312505022674017137 0ustar rootrootPNG  IHDR00WbKGD IDAThՙ{LTg9gaP-׺b]Ƥnlt^"FEFW7PGXJD7Yo vuݰmIfc5K]׍U*9?e@&gΙ0| \NmP42wq\Zz4 ~i~²ںIIAۇi>x۶lР xMQLt rFmۂlN*;.o%۲WI =r ǏǏR۷:{%",Ξ\/޽ 80 ""^,d,G֦V6HJʱmOu/6ofDb"H,P ^z&6\&O8HTBj_#p{{(){nQ5oRW+W(ٺ鹹̓oݻ[|3Q5g0xpZv gq1S֮ڐC/ʕnHŒDIH {QQqq?usǏ3!#xTI ?ϣU ի=cˏͱc\--eҥ7de U.@I pxPBݸver-jde UJ$?9Tqq0%$ mN'mۆ2M&ΟlBWYbz[,L@[L=0i`q enwUyyPVTR~"ܻy|5Jbegӹ_?O |"iigUA&RX6RS?C\4C3-Zpv6]^qLJMpvGs͆,˖=u&|")11G^~q7(\}l!7xs`<MG>)+364\3ƸPe^W[kܸa|)^onV"uG;\M_<əO?%~4FӹB޼:A2O2q"JN.q8+.BӌMI_Ḷ,_~@څ$'#$uwv(ĉ1v @xl샖b֭]̌ :MnGI׮=u) Y [oٷO7uetꄻw9Oc3''@44ie*ڶ8I@*-ֵpq8D"`χ&234M{-(ڵKP/&C,QwIz`cN4ߏ z"˖ZIzz7Iȅ0D]g ҚVWMdڴ3$3ynW6a$Q[VD`s~> .m ^gwð$1l7! uuD*Us@i)֬n %-mܹKK?)P<& 6''o@-2!im@d P`EDmDԩkKF 3pd#zPPJG ~LH`0\0$t0Q(}k4IENDB`Ext/Images_Client_HighRes/C33_Run.png0000664000000000000000000000614310133442664016323 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@Ci?(N_s mʳ20rd,n zz~õ d{13[ s˫1zݻǙZI0 Xh`V`f`6bVeVRb`a8cÝwz:Zk@P& ́i' %. t4ϟ =cu"{ -T1pX;<  .C``b`ccgfTUePgPbNNNf`ϧO9?2 |@yNN_1@@ᗱ TZ:jt`sM͟<#xd5E_tӌ,PY wzp4F(+TD 8}<20j0RTT31e31f47ge{6U ^f ÿOq߿`P=gb9..ޙŘA@<*-h?;;0d?01ad)Fk& Paff 2˱2|K )(D)3[Z23pIH200CB_20 "@3\@Z_@z@a00J:80Xvt <tohXE8h00?I*6 ,rb&WN1$mHOb:/ _00_# (`1vۿ3$#4C݇f'#fy KJX g8@&@_ujy|PcJ/_YY`q @1r~ fee@1(:'3;=-}1)YԠnh('. ;ܟ/_Dyh,$@8=_y}#Jh#B96Ԁ*)9`>d1PM000w`.`SB1@,8ËϜqV'e?`3 z ܌Lj J L ̦$on(" që[̀q_SX2{}3eըP1kjf0Y@1Q1F/_&}C5$sD̐~f61g ? 0}my{\WXxāI/J|j:'36p%c៌,3 @1(C܈RAEA@woo_xB kEe&81v43,=޼v 00^6%Nd` L ρAy  *M~)Y5 z=0Pk70 >۷OS-,ڗ =VPۂ7F`Sһxs 3_-n0 !R&Un.q`+ޅ,x<@x4N+?m|.`;K]:`lePX^A `PcGa0 AqPq?KUx"/om+?`~&P8F5p c-` //" 8"O!Ʀ/e;cs@᪉ϯ_4u&P~v?6vvlL^*JZ=aVS! O hn|:p/ t%x#  @TqP*?!P?>PssU1#O=cJ 9EW0\̢VI XJ222 &!h2:˗߽vCn!(?d 0ٱ`a4!AQ`-%($gCln bK`fdwMb 6!˗ ZAoՂ &`BBFNn5P>30"*@y y-oPEDA OъLpIu4>߿gx9G{ V"z\|}7ld#2fd`~ 8߀F?O`&wn#1l =_}{[Y%!!ԌB_e`wb'` ,.{q}e3ÇW]:XA~yo&FR"X#/?+Y̒ #Cc; ,~cᏲ*O` ɟo0|wбfto6΀,!k HZ5+^BA|&P_@ @0A)z _od'pǻ/;4I6{訟 @ъ4ـc ߡ:3 ?.3@Gyh`zˈ4A  Rc0=$ `29(AҠe@6H_~`N@-H@@::h;'}m JR?c_~/$I:#d FDR?&BԴ t80v2L_,HDqˏL@bYǞ 4+@ yА@ yА@s$)IENDB`Ext/Images_Client_HighRes/C68_Smartphone.png0000664000000000000000000000322312505030470017674 0ustar rootrootPNG  IHDR00WbKGDHIDATh՚n#I?_Uwql("8e/Xހ o ͑Bif8U`;ig3iij].ۿo}=}J)UD=f~>99|ÿ93LrA˲9ibBht'3%,988{u_߿7xH)tU%Jjc\sUZWheY.;KR qpxSBXh`6,N eDe% Z/bQ8GZ -(?޼bnݨ@\d j&g_w(y7us 9r~z/wYSuXܷhO 1&:nh|; \^8/Ri |[Iua FٌIjl3Xݦ:`@֟l\Lk,>iyp)pUR d&W5ӈsAUk{\դlH_ uDlx+raMΆˈS2.o#YB.v>2a&r7a:md>BwЫ5XY,z /,rXko)R?bpwܠ5Gh3|-BL%T%R-uCjȀ:,>0xt\[Â53Bzs^`w)= 愲\7p {p[ Zȇ壭답u'YAN66 gT%hZ]f"U ^{fYe hF|>n%}(re^%ᇽ*c;;%XO,L/ ,Qئ-B7ov;k{3#[>hyx5Zwpph0|sޘLzF1R+MN0fwzyɄt6s^xAJ-R7v*"8<9:ґgz.2M$\0;0s1fŝz0"38[ׁAn[s}>|C:;A 8i(q]A̭ lju@W_Ev߀ /O3Rq #cEFQ'}Gc بe䀣rN؁V6Fs}ZV_G0; 6wk̹۰Jj+b@\c\# ݣ1/M?]#6AJm`~\{b^esR|V3slj"V>ԻJ+%',.ʉ&D`MἝ";kHq?DG}vfYH5'LgF(I*BݺLxXo!iχ9eːmnZz}Z5@p?YPPpI_~:F+S,bs:.4+o^8CQJ*T,&\{S_f*)U@G OJG' @F;S2H$hTW})"RrIpwsnf Y{2րWk]wv>}F ˁBs!NZd`e y ~R@L$#6%ba0(^ f 1iX$)!A T9YJqG![@ Nl%"@2&ȡ, L,L _?0, v_?"%pp@ _+O2~k ^f 1beb?>~[0LXPh_PQmAtCĂ\V^2f|{C?O6_, ,X~$P//O_30 +p3] ^a9AO艟FDB7?1ufғSX~e7 $(_`4 l_Hw+0AEC.200,˜ 6?8=-  )TҰ00d,azw;Ô )j _?b`- -!O3~w ,MAŀJƖAæssg `غ|;CѢZI]`DR6?0|" ;1dg84Þo^f`c's0>vdp`bxw%) ׯ`1cpַe+ѥ@] J?2,jƐe6ΰa6OJ jEbxu'!pYwO0I2e3x|O?ՌKT)@D O`8p(Ärn`~' ñ{g62,```1S4ASX1VW3Rҙ- YJ33g*'ñ'^a`dt6×6y TKGCLܺ9 D iEn{o9ǁV+*sG+],9ke/쒔5XEA{54CA>O#xnVd.f@Li47 (?`XɳL~rc_~6␉ݏW VXFat? ߁ %!x,_&p7;!1Pd=o2|A6Trş7 ,$@LĶYX_1q?pb ?_~fv(gy}~3n_3`;AV@w w~c!HԒa {l:`z| # v, RwŠppn ,&ùon: ņDĉR.*3e0bff0.0LxUK`ff "7QI <i{W0y'^02`ζa E,!\A]a% ߾`gbf3d8bCݣ 2h3111(`0*0l1@D|5;2Xd8l=C8& k:ÊO3zvAA n<2ùW{Tߚ Gf:M~*Pމ j F/* V" q }U ?D2>gpbWϰb,& *f *Tdmx%@,Td`HWEa.Ή [v3H8ca3Ok`תn1o`1jf`8cЙΠ(#@5-Y򃨠 Ҷ:M-e|/& ؁M `gVKN`Q)Ƞ!͐OZ+SI1n_d#0dw,᳗? `znpq1H3k1XEh381aa&/ %!"7bŸ~e`gqq`v'1Phv6Vp XÂ< *i@IA_l bs,W4b ȖV]*FC% (bQb5*Aɤqb'JD  ur&(<l1@/^0bPN6yyy@n(}g@t |um~~eqԑ3MZdu,M  4 R~ U'-- ##Ç- ƧO} hQ Ļ~ l`R@lZ@,-jU#nP@|np .&-PL&t05}6exIENDB`Ext/Images_Client_HighRes/C03_Server.png0000664000000000000000000000565710126474260017032 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< AIDATxb?PBFFFzyy3#ǏN"0.ŋ؀ FRcXCKK+"22k ?ax/^_~bbbׯN~@4񀓓?;;doo/0nnnp2333X7o0\~ /^bx/^ڻw{Ј7@q@P3=WMM7))ASSϟ? ߾}y, R rr`8p4y3=("NXYYCBBexyyMˌ`"p؟?|po2 ( ė@P.Z^o̠ 0&&`~xp3`+yX"8::K. A?Ó  +'O^=_$eJb!3eܧ͠ _ _~pDafftKw>C!f0K< =2]7!ǖIo~ax%8ɀU  r<@${߿ i..@}`+tFǃBXyʷ _˳ACJ%` 0H1 r1pqħO_߿@F+`5P6ᐐ0qRjy 2 YXHPP3{x)r$ѐ"#ZƢ?Z!0:ޙq<3<@r06 HH~ضE$(mCq<# #40y͛ VaaPQePVXPAv0"3@D,P@?1 1xzZ2`ZLL))ahffcH33- YT@LdbP>ԩPQdW:9I 0HR$!A!s<,FDf a(= 1`+6.pq jA <"BIDV1 Ǐ_'iM&xyB"#sr3`  JJ \jaaXRB$}@d@۷m*x `! +mc\Y P 8778ɉ3/4!s$$$!=@d%!ぽ'` J*AbI`GSDV.AabD13CJB(X%k AZ@UBb?<)12ؐ3#L%2F 0<ꌃ /!5I3"yu'ɰg~`/x$E9w9022pBHRd-)3<'4TG"ߜ:ux5,70|AOa=29.kD贖gÛ/V̠K ?g8xùs'ߜ={ׯCC =?@ s)9 ֔5f4Qe`m{? ߁/_^ Է  rJ@|={t];/{C %%duDY={b*נ|Z܇T r<'9 X\ xA;Annv >|_Cr<1 G@%("",jXF?@LT4 A$dJ3(j0%?OS 5=_pÜv/ ̿2vɥPllϟYQ'1 ?ZxOOpd4O>,<-0:5%WL-RY[;M @$aazd=̮*P#i-jETr[nB[q@QQ18N@ce78<+$tYm$ jjL&q ?coea3g=@X8ݺ:qy8g ,-_*x ?ex+Ç[:g"'P*1 =7ׯc6N{du֗ _Y!@0{;W0>Fx.jd|áCۘ0o`sYu&sM`9)P% /˺/XG~Z]ɥ޻w^ LRcb]RE-x__q]:='`aP;i]q@ӘR@̋#A*qEeEo.?ͼρJ{ oZ+IENDB`Ext/Images_Client_HighRes/C21_KOrganizer.png0000664000000000000000000001451410125245344017625 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ y `ddda`e``bb(.'G_0|I?X% iiL}[~=e˰ F2P? \ @`30&ǨWij)h0ps07߶;U8 y G]lfP3@`g` "Fz22a9؉=?;'E~=g7=-ŐT6meOk"A?+7#/7@_?eͰG0;~b#0,1@`: 4-R1CL%g?\fZQ, >e`&4D`$CHVVF.miu[ 9 L6&`昌eoT-ߟ XإDYx؄XBD.|`a軼I&7 | @O0'@ObV&`e-` * L?3?#m& {OYzݫ.@LxPL @eo]c(3!om(_W.%?3? ?!3Ʊ asvCyõ?>FC{{o ɳ1S0X`0C;G̼ww`J gPaef.`p&pHq!-p( &` `W Ì`Pd`ffb`eaa`0cpdraޏ9 : ?cx/`&1o %L}d"M86 ,YPuTo-GL>}=a=##k?0"?ؘ'Y[&[Sbdh 40 3ry ˉ ?23!p(QC[" N.fxx1#*`b`xT!D3!זAJcC" Ñ f4b({M zxf+O2dwD@`ː,$ d\@03Ddho z2\ X8_a^F?C*uW71|߁u ?Tx-,16X8Ͽ0HJ0: XL{FW_38(Ï?? 1̈,<A@M6/ f)1I_c8⥭&j!"_34n=2A@AQFϞ0kh- s?4~0mpAo0y*V.L38#3A➁чG {cEI *R78&= 4Xg/33fx`. rl ;߼dqu ~U ` &h a ޼rĄ~1I}fXr(+4+1+{f9 IQa&P J1.=x%) kfx٫ oaOû/w}lf ,Hb X8zп6O7?:  Xn}Կ2O\a|×^+?p/G~3<݇? ߾c7!Ou%n>7'! _ePfzAa +0LepU ǀ!?e}'Sws115qޜİ`rn F/o ?~`8|3/3, 3FEyE`̰0cD\`"ư3h-;O)M KfxGv72b!Pc , _ξ0ucG3s}!Eq^ ?2zAM  `l 2 ḛ{O?mE~3Jg8M.y j\/uOW38XPb(Q0 Xb= ҙA[~2~dì-ױ7 _@ hFdCr9Ykg`p d`!Cw /I3|~`y_31p3[@E aceT eXrb -CA"0V0ldq@U.??k3,IE/܌ԑ@GO}鸳lপg/_>0AUA^AV9# `b,Q~O=p+YO?6!Iˇ!8@!/Ȁ!RՍ_+24Ԁ,oY8TdIį`C >~b^<\ _l?1,>ܜ7C .`u^POR_!Pٗaɻ w_b`ʠ+`?PaX)9)Ltku^́0V??aی\q8m>2_f3$ wFEv9i6) 6afp?w7?k?0 }fm/I2T220 ^BzT_P5KF뺇 (Xրr^jbP:C_`> ه? 2 . O?ex!>ͷ|ǰv[  N f'y`1V okJ`; ,pX?H;R+Z}Ĭ "|>2,>\߸z ‰ص`fgeacbq`&u`xMЬ3| 5>dز3ß 6`mjaC,3GhT`F ]T$BȐ"ur`)O 1]&?d L:JP~AX!An`ej`X 4X_3ߟ2Uga `d}a d|áǿEՀS+#c`do{(Н/=;`T>6T<` Tcgx 2<f;A`rz ?~g. o 0`OK1$1xS( ֝x*&̠#`o&e*Π!l]P22@`:!P?<=zfk]i! I⃯=1`Zt /9U`1)I`egflq1VN`G\Aۜb>/\ 4Mfw|gf0VwYH`dK`'_Q&%L @ĵ Xq<03s_`6|p;G2(J*< oK Vpu/H2zg1qbbPpebF@ ^8l _o30p[Lo^3\ƃO ‚ j "~3K"^~Vp!`H?28v9X$$@yLÉ.U\~(C27#$⁻@i ^}.?E8#7 L}lqp ˝ (VJ@:kP'XcBF;l \&J_DVp2-Ym`bav`dȀ P< %#P&W>TF\5?2,7~vKcP/]$ QP$ l;u bqqn9 ;a /0d)p;qo3q30 =v!VP~1309 qi?EԃW6ΰws{uD2f`AKWA,< A ,Yi&֮ o3@Ao߽̠-} tX3;FMX@c2 ~fd`&]`X Ge8pV6͟z!6-x; vj Xd$X4xe#320  660LQ;~ys =Q@C73D?e:Ew v& g#` rKTCW`/0f ߁5^ a`7;̍CAc6 s0õt zOb⭓ U03pz3.3e8 t?? :2ҍ3ة|a0 /4쯗'@]I` 16s/n?B+R/`w+gaoN>@1: qJ-+"@30H4 )ůge`3ثaPx͠&XG| i KfCW>cH`C=zۧ@6}?{ lE}hV r;@40@Chu6vەX䁼߂PJ|a};3"F"kf`/`+>o^ex7} ď0sc`N%XMr;@t flHl*0A,[g`_F,ypkA7C@]gQj|ĂK'8ꙟYc v 13|ֲo| T/CCC!(T?! b _e j Z ղ쌲QsC?@G} i8W A@ n40؁f7pبq/!V  )lfJIENDB`Ext/Images_Client_HighRes/C64_Apple.png0000664000000000000000000000704612505023660016623 0ustar rootrootPNG  IHDR00WbKGD IDAThޭZklWv3$HDI$eYr"?*JNm -Z$AE@쏢iQ`(٢hh6pm olZXoMf]DvGbYM%*BUUCJ)Ѩ5::NLLxHP8pMMM\.?D"W\W^y={ּWڴŢJp,۫aY4MSyLOOc߾}0M\~R 5z{{:>??^3Ϝ9NOOm2I.,s?sT* "… sh49E b$0H^'RJhj155@T"'NG=?Bko&$vD^B)E^'RʻB_9/+o o ߌb#^קh4|Gw0ٳriiLMM5u];ߐR~tIoo{̐l6+[HҒ C*ASSS{`4=iڸhRJ,,,p8L^z1l6+~R!L!L4fX,r\@֚066Ex!;R"P=t(q\|/RJLOOCu!siY9j5E4͕F7n\.|]|@?"ȯ=c gE(~B!4 PeV!JX,1&+ 9p4MBⰾ, s9B!$R\.s?ͽ o_]n z.h<:t;HRS)B! Ðs9B"((faB8鳵  !+J%dٙ?f;Q Ç_;~ٳzM夔RJ%( 4qlpH&4 lTRUU,k RJ9^|@ D6PJYLNN~wrr4MNQE!J)aG. |>(c N i0 *]4߬ !pΩFOOc Bvxා=(]Q1 vvycdd>`yyappƍGTB0ip\B8=!S.c`|||٪y]|E aJҿ4 !1@'F.P,,,[ SO=Ez~6L1,˒-vkw1^,QPڶ'n4R ԇ&:;ѧۭ...LR7 IT*%P(Jg2b4ͭ@L1s}}zϫjvixp…s\eeYnڮjz!l6{+J6P(ӧObLRNܫRJjZ]$IBp)l6e&IG@ GJi !hkIAqE)uݾ}ӫWFIVÎ4؊:{Jϟ;wNv{E#'|Bޟ^>19h^5J/^[oE{=yOI8&W\A"X8pq-)%sSBf)|mN6b Eadŋ9:_)J,#P2 =w޷bX(wPh 6 ØSe$ FV󱾎.,,z7%D"j__o:.(.?rnKXq1kYVX,} !>?~/\#$nRIENDB`Ext/Images_Client_HighRes/C08_Socket.png0000664000000000000000000001242310126472640017006 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ y 2t(0e #;<33L ߿b﷧5_]X F<@<11o40/,8/Ьw1 ;Wl< NL~ @X@Ͷr^z2 /^fP&I8$xXY x8z Aolû YxClE$"Xx4$Z% f0YI11 s2s=389 RO_=ۏ_`/2W np=mku]s+=TK Sb‘<"=5}N&A>Nyq~a^`bqP:*?|pG \ ߾c;3yw;/;#_-'22{10hf#1>}G3=w7q!./$ T||o*;  * b\ |cx3"yϟf8}C;Hfv ">A@I”?BOԥ bl  7 2`XE:y;Õ^.Ne`x  P-|S0 L I ~ -jf;{)þ3w-yLM7M޼0UBFcUѷo_2||+Xt 02<4Xًr& Wn mp, mPf1\ ogd8+Dp^0lldNP8Ot`lR(K tUp{ `Ж$TF/_/&0b刔B;!nrO2%QNc9rƐRDQqAʴpHS69nG!GxtFQP&Foff]1!NFnaO73l_4ANUAY]AJZXH?'4M]]v6pUXĿЪ:(AP .&VO1H(i0|zգ;me=GE12_u@xMIXa ˗o߿p~eM]cKKii`g ŧ&C SâEˁ'0X X|U?`)=^AavnEmcKw1{1|g`-CB+og3q JPƅ odM`@=~[j yE ߿}gbcÜs xh2_^?{ (. ;Wxg naXgLN@uXEmZddB/FA闙`x&L` !)n(+SN>>.~>pK*aQ Oc?P?E?$`~`P5g01V,s=5;p0xq1.?V#Έ-~zo-~o000c`vCba| 9~~`0A+^`1p1c ``ˠ1Cғ^_`IGpXzT/hg .#, L'#6_`e0tf`:@I - # ) vQ ++`?f?­ i >/\|a{ƜqH)'` ~֧tq5wq5:mi%AP/Hfoh30~~fp=9!A&$X^b|AX:y3T3h ( e̅ OuQ(a>k3|YdЛy \$gt_`k?rGC_1HC3þ ?3#οgߢMmLY Bُw]x woEM91ނ 0?>@B  dB%6օ GV28A6`C~s ,/?on.dPAU#U_].arG7mt%i/@5 ~#׍F* |WZ $[~(0P- lngІ ߽+[^2[>vY}pm17} jR V 60|61[ocX31M kkN_zAINAUQAHP@X;dI:\d9a~v;䓛 O=x)>gvj?q3 k ^azF/%N>0M#w @77, &1}m4 @aV½g1hVoN7;āɊA0Al<lN|b`t ?&wXMgexUAh'lV2ep|`W}Ty'^@aRbxfFvy K' u<m>P֤'={{# 2| @K9`nj+c#g~ffk.{hA   @LX{O>l䕗) 1k;JPˆ}Ab ?c`ؼ! p6jbb(' t< xG'Hcf82awh P@a_ g[Wvj MXE&' bX7AIiC$  3@LAs`0)s#Ёq  /|?f`ǰ73۱ -LPML*NC߫0`O<$͠A, P\XZp 7ebE60"xЇ4d.垆wߟyt休T01Wg0#gА`wg&#p:dgPI`7515d^_~, _02|*=ϠT3(D?2pWN`I(0f ,:?;:C`#79~]`hh?D3a5drg5Pbd``e/kG8׳s :RpF..`煓XA@c(#d:ϟguXDLBؐ \bǠMP:uv )`010]O?F_>( 4\h=!t 4*zQʰ ? t+  f)Qt,y!Qh2Lc&&CA! :d3;(|C8P mBGɋ+8՘%C:d(kaa0##W@ no˭ .20 gJ npNcAcI`#X*s?h`6 ,̾;o30{ɨ?n`<mz1hrc:4FzAk\0w== hpAuW(A$@`!Y ;ff"IENDB`Ext/Images_Client_HighRes/C02_MessageBox_Warning.png0000664000000000000000000000627310133444022021267 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< MIDATxb?P0@ yА@i.+c`0vfڀԲ wFt|3++ûՁiŃ;5- Z$![`hh28Μ8g:OAF DmĠnmʠ DsR@@)B2eua`{e-uw'$g1\+à30|z`gP `Wa A j@Qid ̪~oXD<XhV jy@ D%CC:o@'ܩZh04!Io${A @0Q N Tf:$ o |pR ɠan3'B)i-,,L: ̒r _B /_bb xXlyAʈR>Rdq:pPHgn`Ą᧦&J 3[+C2%I (IB[Π)yWQ @76 (我$⁡o }^]CpQ Ĭ<<  X9M %,Az ȍA5 H;8yf`PSc`cb?Y+"--X`k((1J*D Dn 4 QVreT: tC[au fff --- L@1zx쐤;Z L@2DT&I2(30v 8dQNar :::>|(*`l l#}7%A!5UEP,8Mr%Drzf`&0AE\'0$..fXΎYd0QRd`VATD{ Hk`%j1H_!<) 6XI($$$98 P,xz20|u2Ơ^)y Hn]L~ L<&4ĎXJJ J0 ,?}a0d @Q@í,RsAW***p ZÛ 1^C `?#6 Q>Ъ|>~`[<&b:FtiYYY,-(`ݡ#2rq3H+7`J:R)Wwf`yZQ ,6#'(P&PU`Ma&sX2(2 @/N4[>.n^Ïo`LR EGk3\ѳ b\ *bX I8HX10>c,@{ l06PD9"F#^q12/`z $3+Pb y% Rr ?kL^΋w?`QAbP Op kf Y;$d= ,PAŪ|@0HXY5 2 r@yn6r`1 `/%%VVVq$``We1yACTT6ŕ OjaY~ݼ,‚OwS߾0:=nF0BkapC̒ b{`A1KAk\ Zv d,3 NF0G 9 Aʊ Fv4r /x؁;$^<ʠ%$ Р>(<@PPkb%H1eol 8XP RTKFY`>#P䈗h\@ ҟe 8@vL|;90/ hc4Px6`Ұ2fy4ß4 }A`w ,k_b`68@gE0h1\?a dh1pM`0A Y!9?J ˰4`Q͈ 9g2.O VfgHd[~zAo |h7_$?466Z=5Pf@'` 3o_y}AXJb9g3"M|Yfâ^_ @șx0޽EC TLGK҃f$_Ȝ ơV L=@ yА@d"?VIENDB`Ext/Images_Client_HighRes/C38_Samba_Unmount.png0000664000000000000000000001112110127240344020316 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?:`ddd Pmi̤*)i&ի_wp3P  X(1'&+ 1v>>aa!!&&oxW``(/?PP a9^GAY_߿,,Νc{FTNIMcW/oh/X:| ߻88 B{2HK303003▁}c`da`AK5O]XLhk ~  de{w` w| *! %*hfLrj_33C`ľ B  =W &NNII`T>8@c@3j0 r21Hq1pq0/0%ge6߀0BB &r=h * }@y@e`%(;P=L < q3| '񏡡; J?U޿f~b OIB@ǃѳn2|cg%()+T *AA? ex ç~|b`Ƿ@@dd&j888rٹ9yN:=c /+и7oas~3(iɹEWnedD_`ћ LO]D_zf±'ObxùOgx+ "p~= ^Nn:V`z3o?`/ΠpK46A o&`1{2}g.Q9%N> /gx;'u C0ȼG_>3; j \:0H1< oϱ0ػ0pp3|!>` 111bbɕI< 7> 0L` ,9bX]xp_ ـr 4;v fbxÕ`reRUV,`ADD[˗O\&@߿9ؘ.>`,B @:R@UNp+G? ̋ԕm<=pן3hIV.{uM * R o_7&YIRHHM\\F˗k`V*^ g."63o E@,' o%o b̯xdey *sPC?E/_ro0޼bu\ < v<ss=!&5`K@Ă`2/G߸5 @ | _?1yW3(ɰ13>XG1V{A/tj=a`xM0c:Ki`^yY>+A_)/^D^@NrAɗYrm%*ix'A Q #(*~bWd:7 a8SMO-+86Y)`y2%nΦDrr9#++<77Xt I>X'P$3Hc 0=?H@fÿ D5F`kc74ac%! @Lx?U oYcPF(lnA0 ?}L>Xn0wYYdi@C_axh+VF^6`؄Dmv.hFFĄd6X3<XԀTpP g`0^<=:/#<З@37e?O lҊ L@?p `{E?00%yb]V,#'<K`BCXJ2< g rb\ zc`z/0~|ax=k1)1`` D`26]D`CoN01 0 [~`<Ǡ%AJ j1|΃{ 'q0z AU';`ɸ! Е)Ghÿן>npB)o`&JF0Z@X/H2<)!,PDɚݝYY b*--BZR@l?q#/,m u1>Av`auU>o/_/. J "\@A%x&@a$R `6,1Hϟ`98dR[2r ?>WtXԥ/&}T\ 2 =JFMkb^VfՊ!gm|!`Mޑᗍ= `🁍Ԉe?R '!x ?4!{ XpDE`#t# ab|C0`V hԌT"7)G@GRRlWPġG<)Ó DR8 }=11!`5ûwy (deY) Xp4XXU;L$ VdYbьt(e{֑C $rBՀ3 @f^@,4K f|LNouAebCA o߾~N??Ma\%A3PC (Pu  `{DcԨ ;w}>ׯLLLDEE!G㙀 ?}N>nNp XA ǃ20-iP~ 5A 4)x5úKؾ3s38*93&zG`Op%H$@9PA4ZP<l} H1|p=9V|ܽ{/$%++`Z\\LKKKihAkO`H|Nfgb`l0H/4,r P[ϥK?2P GV@8&8i33vvN-``Ǚ0\Ί J/_exÕ+_}=sHG2>@ȱY vGqYY93f4:93?ر 3gN>q R&@ 4R?RT `Ϡ=!sw߁Z;@6+L '{UDxt7z?P"%#KdT1~gd>]7tHDw|||1oCG܎2 fNnmwKNF>ۼysӇZBv3@5YTT )J`U]Y4jz'jےN% M^cgmذ7[ q)U(=g`\\r˯f۪Ux>S cO'x#WA\illnjG:KNϬj466dpʗu_1 ؔ)//#innL qg3UUU׬ٮG`entϤ@ p|V-B`E~)f]Y \Y[0Mܘre穚 |Ʈ SʇIb\3kF۶|]!f_"#DHR1cn>uTBt ׅN8Si up8LooderWP&qK']8prAWu]g$~9O"Mgكgsw[ZZom{Z4MdzY[[u+B hb䓘7ciJ&)h6B[naaN\Qϵ8BSJ!eʾ=wIKĶIJL1͉2Mn6e$&Y%C&tc\A̕rؖ-Wò^BS n.d2BLSPJd2Ƞ)eٶzWb}!CW بS^ijw/Ϭ2D&Lz;aXn,VVח0܃+bI'ɻFVH۟5;yMx}S}q? 5WT}eM]ߧkJĚȲl^/c/tJ T S/գC ѡfABۙxaBQ 'z{-aa hrR >g(-M~\SS%pZsv-<-Lm5ii߿:[&Y ;׏/QLє=83vBDE@A;KJ[D)q,[W۶Le,NoܻpUoVn|O¶y*Osqp@ճJ/:`damiNz ŧχS[2MwUT$#ixZ:'k׿lW粟uWi2e>Y;hvusG" O0ĚSS&S)lmUɉgpΜZ}!8zSioYe'N0jl(GD*9{t?Uf1CIENDB`Ext/Images_Client_HighRes/C55_Thumbnail.png0000664000000000000000000000536610133442626017512 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@X=ϟ_~B0\ GR+ eFcdff~2aΝ{ @,|`lǏ޽ SGw+@aϟ? Qı6l1*>x` a0CC [GfĆ R#B]S (Gq8B-cb/6. /çO89@ &6ɀgĈX;fEB(2o;a"ٌ0#A44f#ƅANV`)@= lʁ ll Lq##j:@P  7H3iyÊ * =2;4Wh+C5v7ɸ_e{%G7 Pր8kQqtT *@9 X70kP`)$VA=rDh/Y` LD%!" 0@< cϠAf^_v'?Y8(@ɊRKM`KcFHbR iA*L0He * (?c,^baF X(?}w4xX )>qv@1N6y9h' A #0 J?x1$7$,~ϰ ݘaC=ÿ_ɇhpiB\)@,20(W22A<Ĉ^vN)APe/Hn90i\{  F^~ ߿gg7/20(LV#qi X9{LZ хGޱcՐ`VDe; w/p!S?pÐf`b_2~O~P7%.g: h/ Wg3piêa}/`)ưkv5;1|՞72 ~~e893?3Y6û?3aXTϞ#exAXa3<}p{,JV`032}۷@3!@DPqm{6]Nx0qieNe5MdX B]`맯 ?~cռ_Do>_am`S0ƙz܌Ж Å!'{Ta¨о (05yylYpy?1MN nW0<ܒp3u4@ݔJJv?- `?G?d1a | g6ͰuGN 0ڭ? "l@'-@F`y #: <`D$!`tK=>e?| ,yK?޿|0>.J" e?}~ag|;DT?$@,ҠzK<{sE nG6|u Q1Pi@UDSDT~x&=]C ]<LDHP//; 䣡Xz `/} j)D֋<Ǎ}t~ Dwv:~] -"nd\G+ vQb%A G3rn6.b" :?A"* Q/*Ib"Ԕ(شFy!6O8RT{@`%' cWFD9% .@,8,b13Ȉ0 4`aa k`VvիSآ??sVa&+͛7A @@7MV=h{ q؉IENDB`Ext/Images_Client_HighRes/C52_Encrypted.png0000664000000000000000000000536410130001056017500 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P0@ 02228:::qpptrsskc@:_~۷oO~K/X 888X*))m.))RPP`/IR;I2333<|Ǐ @T<@( @ݢBL 5S9h_}/"J)o"b%aι*d c@ "ZfF^ugL@1. yd!,:M:|jizAVV ( H @adb`H2b_!V6>>cqb6@PHT@ za%1l@a$!`$*m|f^?~30 wc+x&&&#={pQPO tuuN$'7\1@$l:dزe y?00xa@cagdd@,8r:QE ,A`͚5 ׯfprrczt45U|pys1DGG1xPŕ$֭[S@))Aln` 10O1# %k>} 3[3 șAi֭[ W\gadb9\ɓ$s "" Cuu%iik/⑨ Rt~UU-~~.NVVN͛1\xfL **@=bfصkW4Nؒ@aYYYn޼ L /\\t@YA@@aժ5 o_cpwweӧR8QQa?^=p `a1@D5 3 +СI XT  1ܾsoCۗɉALLAXXחΖaXf`eczDw +ٕ@1*CXd21|X?f: , OaPVR& #p)߿}ge Ԟ | 7/>ax>|mĂ+`+A+a;B׌G6`}~^"س3x*1l1@$ @BA_ǘ3|0{aW1k@g3 EzP=L b2 iCI0P9N00VpiY^zɰeQ~>|Bzİ%!b!P:jX_LjJ T LBC9@,vlDb?`b@y3'u`Qz$c(s|V4 %(0=<@8Vx?xG,A]?ï? \l 4 Q,@1$h~K_o_1y񓁕 Pɝ@Qف1lZ`Xb21@aIP9v0@1pG"X2p 񃇁/Ăp<Α l1@X+2\ DIm|A#\͗ ,"Fnf`:QZ+#WLr1DRM$%!@X,|d PL.X/ '`KBDR?, s@ˁɆ Qbܨ5;s! 3020\=c!jLe0c /0(ԠBWǖbhy`2\q 3"?R;@L 6 R 1+`@ n0h{$30m+AFgb!)"l="2f4r̠ˁB1v96Jɤ13t\"{I |5,)C0@,sԚz@ax_x D|v!fyyy@n_X 0<׵˖-k5_@6jчnb(((Ѡ@1b ^12{ u 222|آ95ӧO>30 ہx7A$ @[jj7(Y t7# @<KZMU-`x?C`P1)5IENDB`Ext/Images_Client_HighRes/C34_Configure.png0000664000000000000000000000552110133443174017475 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@©j!:###7P= PP9-m6>@Ubbb"" BB" ,, ~dx޾}_3ⓀyO < aNN70--uAA~vff&1| nݒ8spÓ'w1r < };yaaAVV&O_| etzb-=@LDz??ssӦ- `O?3z(: hb—ly?k]PgcgX`bbd+;;3 ߿'€V &j`r߿0q -ao{ ¼,@0cABBϟ?1@1a)*UYY"|T`߿<_a{knp ř`{D,9H[:b 0<F@@YKK!<<Ƌm)~:@i߿mϞ= eb̌ m EZx 0_#qpb`7;py$?~'߿se'!P $6$$l@@)F% 1  ?=/ȴ0|ׯ߻wϟ`23,@1Lb" S@`0tR~\ڸ8w߾uP 7TEI`PBAfb@6 ;PTÂ<e?33H מ=d12S166Cs<$ׯ_ _~\ GP@# 6\{?7_|\`/P^9^RR^@<NJ?~ ={7di)rT^997KK'55M11q`;TB\x 3Ф[)S&3l޼ 9\L _xb@3= J3v+9 bcVܔ%5 Oa:u Æ +0n"`+CHـM+T166 %577}m`-֬Yr@x XHJo}>f M+cD;33Vě9PVV#ګW/ Yb@LT+n-ؽ{E2ܿX|#T< ,~8E,@1Qe`~҇ J>S=7 5@O,z" 'nJk]7o&O=&@#PQp-$PTTFPL H<0&WZpcΜx+\ }Fʨ: .'H6KND@=LNQ+V{ 'OނYaU~0ObX,cb<@4t, ́K~8g4pGx J:Xsp22$$dc6扳x񬫳fM&?(& ߿`xlK= ə?<@449X fk#%!.m- uu1L`g͚tcԉ$PL R" 122| L~}? Yxdt`(0~ և+|as p033i&&!@1?`1 :ϟ E+Dû3x~X$D^\_"-O?c LLB FNI춿@X $|v@`%o/o0a;`0 TY~2IJ0AɵAGG0Ř  }H &&䁿`O!'!bAeP F(` DǓ ܼbAUTK a6# f#F U 9D  &RQ y Q#g{SM0{ f8G=%/`)hp*Q@ćHXH`!I"ѰLbRbeb{u +*Ël8ܹi_ltjD34@ d aɋJBh X>  1{ 7i÷oovn~X3 p'@G@GfPz@9k2ocʃ )@h1Ig?=|/95[/v .= DzCPM4 y /4?Q%.OhH+?J+ PK!x&Ƭn'XhJÚΠ $ ""`/r’.`FFÞ* *``e0|fxs 0Q <>w<`0w)~P 3Rܡ_d@XnHf L5febfb%mFg&N N Lg`)0}sʠ#+ e fDb3c(P/( fs?hNJ|s{" Þ#[`ZMNneXZpwPFMuK`3 A3N ܸCB0t/_8 1d_ op V1<~^6 lgc$ggC߾?Zs P ǀ>ׯaeX ?g>FHC OMU0~Σ>TȀ1 Ȁ1䈩8j`ߕG  f~ o;@/?P85<8ˀ 8r Lhb`q`1;`!?@C4=@C4=@C4=@C4=`zџ:IENDB`Ext/Images_Client_HighRes/C59_Package_Development.png0000664000000000000000000000751710130240700021452 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ s)6Lϟ?5bcgcccaeeeddF}kLLW~~1Iz9 v:.CZZOZZANNDsssׯ^z _>G 4%D~ &.aic`ia "" e@G? 3#ï?~wǏ3\pݹsƍ~'&F@n r ?.rfaPQRb`gg?y o!/gXXY؀je$D<` ݋u_q@PWT%eаs3s.NG gϜb+33`YXXYXYgxǏ ׮^epǏם?~'@@˶3(33,÷o0Ic5#3 8X!4#= KKJ22(*(h"NNcǎ-J×/T&s+k՘X q1Á !޽y[`_@G30qP hi /90004ͬ5gPP2te-Tb>ãG~w= G>=:y̬<@OdzgϮbf| ⋬R|zN \\ ߾:pfbddx m?~0@! ʜO#M=lP]D|`/  ].pL0c p:fx,>_@ǃ~{ u?=B7TN@,D"?TUUa9XfɁAEU?>{%-#ɓ@-8?D-daa E:: ޾ax=_~ ǿAo ?ddPQef2TQqn  ^ 2MVV$×O9T#?f`Ewk3x aCFKg*tM  n.$hQVVfc:@πoHC%rb{X۲1|] n<]0i _=U4}S@n , b6d xPPR L߁',_gxzyC6m{)WIk] Orm1==jyyŖ6Y9ǏrpfabFϟ.^,shh02<| -|x5=aS .zP ZTROIHHebx-8'Ņ ?0|s ׮]{l=alJ3}|!X(o A%W a nf}M,WxJNɃ  ZsvO_?xxxI 0۷]z FɷnnxW7yY1 3O` 7 ,y|;m^i;թg4Tko[3og ) ʾ ^G?|!'.]瀭``q`Ih2؋3ϞegffgZz͘u7:Z#ӯ " ^R}~oO@ Ք?yd)ubw;3A18XXEvP !IL̓\o?t#DטU= {PK{iMU^99?/xq7usi4h@K Byʤ$֜ O8N͍ܗcrg?D}70Sf,  !drz$H@zhϏ?],cǯŸ n`ϐH/A^O=F |}<~| /?25'3X=U[J8\Z̄  z ~;ނGi`W |fX(0f1z13JJI'@gI?wW~s~k??3pA֏}1vG^~l z{}{ɕg /e-g`UҖ->COT_DM[ bo=13|{v /a /_^}u' H^æpKҋYv!)W0|y񙁝 l1`bf8LOO-d@ @˵/xĞwd5ëB LL ?g`a,71~p%+^c 4fxϟl 0| W Gp?_N=@T 3歪>AQ=ZB;?`'Ý7?yA@ ghx9YYx8ܙч~u߿>3hTt?4<մF@chyXXd}&F0cIENDB`Ext/Images_Client_HighRes/C31_FilePrint.png0000664000000000000000000000645110133505000017433 0ustar rootrootPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe< IDATx՚o\}?gI Eq%*YLKTQ;4.K4A(6m}K@"}p AF E. jHu쪑Ťgr>YZwx9~緜=j"}/=M?2:{v,A ^S!OeyeLJ?կ*Px뭟|2}R gphdXJM>_^-_SLhxy4[{ΑCx9?Ϧlݰ1)|Ǐ;u4tB8pNZCӇx7Y.z )]07[g׸u/_beez7ߕRCF-cMNNto /,gvvaB2d =%ٳr5Y3B‰'֢C֭.^ٳP_Av.$0>5::7Ɵ1?,0#IZxA)ѰwwVH8sJ@7](Rx#Ԓū)%R-gz?qw(x,,~y]Òh%dCIvA?:OVj')gSk H) "P'###9#MvJ!z4:́q bgA1~hZ"RvJ\cуᇙ=pŧu?MNNC}p4 &X4_yޓZf<'YՋD$N||7՚yVssX\xsvaffBD$do-K5hun:"UMa5J 4)e;LDH%+P9Es(%Bω&4&S78,ѐ#$ ^es W&>)aKjqbW`(B0 αo|{0Β9 !! Mz=VkϏ$!BA*2$1fGIp<5dqcڪĶs!YJ1 Zn٘( \*LӊV-'RR (lHE:TwN>ڄ@!m\Oo%s.b7 p|an~d1ϓWzA@7pάt !UE7n|g) XkI{Ig*A&Mirh h"B*Ƙ.)'F)sƝR(`aa39]v =CC8gÑMMz~K@)QRJ X)EQZC!'~4Mg!Qq9~`BaDZ2RRQ;w yfӳw4Vnp)cwIt>\=>1{G8̣h  !ƈ6I$Z 4+.&ٳ_=֪? |t{uA6uΡfff3gD8q8N1ơuҕ+RS0)%JxB\:D^|eڇ֪}QH)BKyy0Zߝ+ɵ#tIbE!ZkƘI)]@g^aqqJF"I2׫ܺu#Gګucu|sisj} ePTܸq_.\ߢ(z?fz!7~7{;wZ(w q.,;vbd"YfN.pgߛM =z=f||'kGQl6okJR8zU؊Bi|[~zûWrЮNhhgzyjѣ[K.!Z%!D*"|ȷemTJA Si.8HIaIENDB`Ext/Images_Client_HighRes/C23_Icons.png0000664000000000000000000000463510131260446016627 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< /IDATxb?P8=@C4=@C4=@,`_02f`dfπ7ţ w0@ @`dbW\o2PbHCb?AC?L-X?av1 %0,U0Ҿ/f]%ıPL\6{2@w![D_qv} "3_DY>1qp0?~|cxOA@A PGv,GA?$f +@( ri9ß?5Ö @w?05 •Pc9`'9 <(0|ׯ_@ 1|Q<-<Hr,K V RA a]"i 2;4jnm9Uq*%ډ54H^:-A=r< <CH1\?0cF]bA.sa~ۗ L JBL8Y,ĕޱ:Ǡ3rfdt2;}S~|* "WFtc t bĂ!1'Wm`y!ؘ*`@c/EIfȥZ `DD( * lo`5Ȍ,ǰ?,)U@&!&W.1(~ּL\l}!.9=b–2 eV>@p{I PQ802}z`je/$ H&ÃVǑQ"2r,Cc X Qx ؀V},Hlz $K?f鄜L4XU۠@1~C8crh7bENv59h51@ w+@!\+H.O /r?@ Pc*\޾zRo_3/~tπ%԰50 ZSHi Pb?"U2`Xy8] ?5W ;_/a1OB@,:_ j j?%wakWhؚ(c@5?x  2"# Z+ dbRen<G-@IX2P;7,ؘ\UƐV'fFĀ%Y`i"haiVE+Fkk F | T}zʑbŕo0 h X,cOoo`?P~;/fds:4Ă4D$ Wb XD!y_,E%? o@ @(1 )Pt0 A1XbEѮ& Xjc-zp "b PЖ5>÷y7{O kMg@؋Q4y P[ LL͜aޝ@}ИǠN#ף7o<ۯ@%bzdee[ZZ1|6/{ϟ?}8sҥw@( AyZ1Ϩq͔5u~Ç 7nЫ۷ozf/^p 3$gH<==UCBB/%%%rSO1ܾ}…oo߾y 3^p@% @Q5 jhhrRΠ nnϟp[n_~_y͉SNMjDHHH ,,D߿1}3w]޽;O?~珻߿cρ"@Q>7 gx0m jvUUUMm ,yX[[AOOW6_ :bt}yy1 djUb߿&&&L#5#@Y?6c@Ҡ;wn~ qU<娬 ߿ P1?R'0p0ա74!уW P=w7ՀA4AYE ,bؑ+8c` `P?G0Y`0@Go מ~gxO^|/8{QZ_)@O{3خbw?`*^{~)aSbdPgcfc7Ü.,+wiy:jj/7_0x ^bx? 12p0q1H r2(3Kp0\aS ~ XXdzG`Q}@\Tl(,؀ 8gmyqAI>ѷ~+177_?oAPAZAATxߐ(-Бdd?hbdx)=u)0="@A_2\~ݯ_@ (߾eKlH/ ? ?~ )X T'9$3E@?`Osd@A޽+@=3Y]]|"whCkY`b::ر( ̡w38e[1j1&Z 53891 b &/߁]d @=X /0 IFhҸq"bb"?h?RC?j/A_]/n \ | ݅;m!b8?̠&p]o@[54$z®3|c8z&C}!{`Z"~9>c`;XXs3Uaٲv_}yPƝ}^fsse^p^vE.H/ad6E I{'{`%͠˰0'm`I-?_’PKA%:NP!Ei=g!ixa Wgήz ?~B<J6!!l 2c5>peA-Ria6{o>Ϡ 3 `6``s8MŰDE M1QY3?o`!?h7tT.*RW?;One(c ['Ly ѳ_h,h@@20Y`,a0zḐO; 3131 Y? @ѿCzʐ g1SN|xp@;3_,@ r#NR&NǰzE-maP`C}(9 RS32B* `Ͽ?_O_~l`3Zを-hGk&<rL=]%o~~'_o}ķ@ t(#B6 ZLBߡbc (bN>fH J%w/1{pȺu̱ߠPtʥk?{%?&P聚:ԬC} v_?H`ʕῡ)6 bK *Cah |@05IENDB`Ext/Images_Client_HighRes/C17_CDROM_Unmount.png0000664000000000000000000000773210127240552020152 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<lIDATxb?P8=@CFFF ZOǠ?XY@i&?=g`}?G! EX?߿G01sr 3p331㇟ |g;Ï6t͛'ʾD,?98لtld5Ź88X@=躯 _ex;Ý;.{p3wocϟ/ݽ;(PWb=r;@ ei?kb`wuWb PbPSb:/0= P= 0bXY=̰cC5kn1yV߻7πZ~" Ec)Q!4\H蠟?! 1z3|< ,,bw3ÒoK>yp|r;@`QRN.D]Xupt;&7$@d#޽ Äs O/ E .A?{*kɑ @v87cܜG-՜ |fhh8pʳ?`P$b@Xv rU62X[KDR@</ҠyCm+}zM;@=Ą/nTXa`j" ,E !(̓2-(si(AaM!-PUc '/-,^%g t/67L8X!G1YA9 'P<!̈YRRa+0eQP:I @L82 r jdC d?PORqܟ?30H)J0j0pZʆ&J13[ {_& 9i<cÒ&#HI P>y+; D-ØXѓ@1a }9` uTb8?C`q0#C' " Z lb@cđ @L/[Qڀ2#f?"|&7/çz0&/@fǚr b@A%1̽Ă֪dG8HE:Q/OQ5$arB@XR#ſ|V ϼ &XTA\W<<_ܽ %Mb=fV[`Ì Qs}3vK =ay0_gO009 ǂBl%W@q30pS;3c*Z \`C%?%41R#" E@y@@e2Br#p6&HZtbo "&hdPTp?x7 @0GM^ Ps01X@,m FAvfH`hPAFDuu=z?6lfafo o^1쟁J1&.^`-@RĄnvvfp)ALuRx~ (䁎Q{jٖ-OO+p2QX Yn5UX0} J6{?`G32Q8 0MZq@uPQXAFE x]ffas''qnn&OBFGYI(HQ8@y~GLP@ MO80VWk3l" ?)%@'8ɱ'R]C(շ/?Zu j7b{F'h5xG`[VpQ *m̄ t<0s_ex$H??] )Ij?yӇo@G4@I?~tA\lzS`},J9`i/?0f&'0pC/s#_?2}}!IB?_/|XYg0Q?  R&|p_=򔁅ҞT0گUe!4!\``` $i. ueޚz >}f@ǫ;z*PRa¢; rhDX: !\ mv0 *}poC+P $@ߟ?|0p"z FJ|#oj] % @,,ɰ9R}ݻw&b9l 07π*m`Oe`f@v<; BTL oy{:P4  Ջ?>}:[\g:\?OX(wzՖ {ڙQ޷> O >篐gbO~f8:sՋ39e7|ڄgͅnBǎ5~ͰqIW/{p)e -B pY[O>~k~>zrߧOGj/^zÓ_ '%БF&"TV6d8~>ë믽~}4{[iBL2}8wi)×o(~ 잿ہ%7?b??tI d '~Y._xuW>p( '8/GAn b@)*)",R&( # & .2AM{ # ǀؠ&lBu$ٹã|ʫWOUNg\d34΃|b5?cL,p.$ | ca?1ܹa οE}{|l.@C "e:.$'g&%Ƞ! ,8CDž`SLq?m;=_{/oТD>`@@3K J Z.||v*|lB RR 2 BZ2 bY_gW1o~p۷'.נ iWybfhlyyUMt98XX@s0쌌̠iǯ>?/_>!дoҙzG@U3R ႊs 6A_@_H ?X愎ٰAό;3_А_`|WCIENDB`Ext/Images_Client_HighRes/C47_KPackage.png0000664000000000000000000000646710132777544017252 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P0@ y( :{M2מ  I1;L!M.ͩ2\ln N냹в&_ijEYZJ__99^/ɦfbFZy e/Y̊ljJL "@a` Wӗ=s>>jpsL`I1ÿcO>~񵗛|ç4%@ŏL̰dWhw ? d<VS 9Hfd-C>ʽ_SֽowR^ 7 4[ZȈxf L__޷/\->FAnL01 0{prB2;_|Vu`%g{2Y(30|L?! O>d`1g` : daz@2#j?禝} 6!0 9mw7?20\c 3|Π- -/'.̲<͊p<+"V@bJj_0ٻ?^ɻr΍!D s|R_f;W1\{ɿ _Gm  RJ J < #Gi6H0cgw2|:}ۇ}n趧'aͭD-5l}TyJrg{=XF^ <Vl @c$/&<`<} Lb?qik@#_26 1y?Ojחag<(ÿ_@eoϟ2ܼeIE1`z?0cDK@/ϨrTkl b1p˯ ?~f t+J^3ܼATJANMA^]APFEZJ;//zkm?awʢ7o|} X,7Ъ ;103߿c 0ygd ,pg44eUXN`.^=a|E ]ĥY9 r W. F``b??ـNdaa"4U-[0ieyu % VH?.&/Y^3Y}cgUn?dWe`dg_;lf, H1(1Kp1\?LP+vY`?P(p$oQ'qyQ^3ٶ;g_vh UDtY< Iz /_|c81Õo^ Fffl*@h00c`| 9JQ&`Y=7? .ṣ]:V/@`xu? d8w5_~~+ B L> ^cï/03|b``f`LV ?ýwxV@_ @Dz8e`&`*7 '2= Ly+L0a`b?o~ %- ("40=&5F&P6_ & eb\M{Ǥ]Xt~d8q5;߁%_vv`2fhfV!mUI6>>` 0)QA 47Mw (4,+_p?=XCLOGd' X/Da Rw1^ [/IVF zBl JJ`\(EVxc OI!fHVG0FTW"9??69X3BÛ@}?ztD[1Q-Ke+U cQ>9`- fdxr]FVF`/ 9 +,,y XHv᎗3@T-դ,EuL>X11''1P ZbiV6n %g c[-y{Yeq#!nqf`fb#eN=yzӻw*9hx'8Z@n2qXX+=(**g.iΦ( &{N2\ۍ{woC~hbs+@QX27'?{vwnP] яs?b Zz M^R sClA~ϡj3ln zx9yAc:d Čas+@16'悃sIENDB`Ext/Images_Client_HighRes/C45_Cancel.png0000664000000000000000000000707010133443250016737 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@hRP߿ad`4q!P/#3`#3; d03V9LE@c?yyx L@n~]Vj"0p曘0p 2ܸrӧ:ll@-utdp|?6V֖?USLSl |BC1~b"xv.pC2|bPt! f斿x-72R'O`z+2AHJ*' v|7޽ ?!ý~=M DE䁞&)6<`z_l˩_*w#9AHV6 l`:[@%:*AA_ k0030-[᫴4ŋ hz}$8>!iiqj233|`onf`a`3-ῑ02}5PYĄ%ZSx Wع7`6 x>|```3Ồ(9=D y`4UYMꟀ+.f`* _20|WVmQuu￿~a@W E… 6F;&^^2]$",Z20Tq|00,tfQ=06XA! PO1`&'x&t3 K ~300{AdD@Oܼ'@섅d&JV`( nK @pKW1" dfnў40qC<#I+h"g^^.Ubb b (6Q h߾1^ l՟;? @5q_`  jnF!!eh\T}*7`rLt+`-ZL.2@bnj8X"?og`v3|zh Gjҷo?V ̠gwmm ' ,AA+W~fc~wJK:Z@GC k OO,aagOP@O0=  Rpx0AUz?iWط@s** vb`yᇦ&ٳ>"9 &faai5kS`\WKH[:>kk3p-&W |]4ٲ\[vK?"; 1kQ0扟 XwXcg{ ţri)QX 9e>ׯ͞VVDJ6j_8{3y2?`H338J @*z%*@Ta1%֞ݻ>}@axXC0-c=׶-d:%@@aPLռ:X@N``AA 0P'0*AI" NLP&3= ~ӼXD3f{0i}oe`x?_LﷰUJDI( .%/ӫ@ږ ذpO`C^c`J_&@| LPH F L6>,#lMM%`y ſ DzX2+:pL=Ma@ǂL`(' ,u+'O[=+܁gA{!h =21-rR:0/ P6t瘁VJ 였4{ `ϯ_5,@Ov A ͽDR)r?P7KPCA1r,8ԡ>\Xnk߿I R-,8ݩSz4ƊD{ 3m3>(x<VA^@=Xc9& DC ?*1Ñ<=0H po ԹzBa8xy A.,g`?Å`ʨP|Xb? 'Nexre`RlBW@Jnc[nZ᭷7ftuvK7>,$CGE@OԀ:2JАg&1G&Ndxr`A7 p߁Hk2|`&X/؉4|ϥK ?}Z%cD߿k;7CLfdxq`I  |5O`*ӧ wnX2q= &w>GI{y WVf`y`=r%k@!r \fF`z[X662b`VJgΞex5Q}XX K>+'W.gu7C 9y" Z`3`x*4$x0Â̿nhOtА@ yА@Jsք6u5IENDB`Ext/Images_Client_HighRes/C61_Services.png0000664000000000000000000000646510126474246017355 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P0@FFFA'C _j@ HB+008hlY R ]D,f`X3yD@)c f]Dk Zn Lf,, by8JaH hm-b j&6#RL޿WHh߽ccfqՄx k I0\>t@=a/׌슏S`1*<8T!2!ct#LF`|y1@3C]`N&TIQ{2.? FPFQ&4&Y103Kw@ǀJm!H<'³, F@7|?á :2\n@ٝO ju10ą20* )δfc`H1c]h !+`=x _q1l=pjݽ߇I3@| ``6čm4R!v }FTio@þ3 gz%?]SXO j1.z4gX\TI*˅!BOCy`zEMj?]0d8Ќ J2pE3@X^~>IIs l_K)֧b89 A u`0 RZ ( i17G6u-!C]Hے"tL` R7E&1g`D!m!r7 2&d8|I_- ;%$ui_h@IW7oi+&}4h = /Kv!`s-.ff"K7?1({0(;KAK><@$y`#00XC{łxbh4+00[%N}a !(UHF~CL2 <Tl-!!) 4'0` '؞1|y &o`{;?Q )& BO De0~@d@%W/3l~? J;;JF`듙Ⅻ@ceA;=@D{`O !K>HʏQ(+o3ܘq ~2<?i~&7 ?(6~#@AEAf&W e 0(xE@!53$s2-gsˉ 3\:;҆?ᯮߔ(z flXBF*L R:u/^4~$hk . L:lͿ+` tI 3z=b/4a3N=&9` @72 00 k.0NdAjc <l, !si KҢ`گ ,bVy j߂6Mq> %7bXSe`#!M f"[A1wm/&`h"w3̼N5| "Sz0~>vկO b4`sд@҉m[)&U ?hYï@=dPQ 5DT4TAC'QRTV_0@T3H5M}hVH \a5 Ѐ2b{ `x@l$ ?P74p.@fL@zhfLRBS0a>h#4pDR+eIENDB`Ext/Images_Client_HighRes/C48_Folder.png0000664000000000000000000001126510126472472017003 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<GIDATxb?P8=@,`_02R@___!^^~UUO]|o߾g={5=@,VV̜8K?Z]|…]vӧ>͛7g^/8 Q+50A˗ |ݻ}P\HJJ>c#((@1|1ܿի^?xp§Ov<{l'A yXȻ{\VW3ܹso~Kd+>r@z 00hZߺu _j֊ՊQ~~~`O@8XACCA_߀ի@SDKT__T\\./++ h2*1fihh$ ba& RoJLL /^d}GDqG3akxxxTTTwbM& &Ǐ ex0;;_֭zKP> TDcWYrFE_?4T?2xΚð=m)PgX#+++$$t`:H01] ,1;~7÷?0~_dKA0`033߀?O</Ì ~5sqJ p1CAMAAAZ֫? +D&o`8X 䉿h)rr3|Ё OϾ3\ǿ /2p2s@0;$>'Ñ_AS] o߾cpܻׯ_=@$+'V=!AAEc ?,Ul?R dP>ʠsÄ˕m7κ?1->.V. A.]ev)Av A.Ymv|VO߀477'ûo? 'lbx)N輧 , EZ2H0Jkw@~ (3f p 1~ebbTcP`eaz 2~{B Y7 0_~ Lv?y F0䉏_w?]g``pـ KQnYFl]&)>fnQ>6_ ?~ba`:_@Ǿ Вd_({89^/L0+A-دf$ˠ# =pqA0`z4$߽hPGArh2zU3@b h;'ë -@|z@|~7z$4a!aW`Z. 66\@ n.pIO'@j? ,o= z?@A<נ ̬Oן! #,!Ȍ`3?hCX:/D'4@$.*_~0&*`޽{wT3} rC@Z oɉX#;AXr#a Md bشbfan߼ׯπZ@i Ç?t<,!R;+;4% #~eo+waW?2b:ԨB9,Jk$)AJ><Z*>PI ŋG 732ȩebWW@1@,Ϗ;w_~Àj8i]XCԁg^A?d 3"%WX, ` `/n`2|{㣯~}+} Dkϧ^g va(%?~ %&pVC C4{NP0ëG, _|a`X7 ]y mJ E黷+-py ;GTXi6v@nR#h|Pbxw k|6`wǫu'\VI 0KG޼*BqZZhu&Ʉd>l+jg3^&1 AB{~], o?Ҙk4xO 娍/0z쮱5#ЧBx}v.^Àj?PKA? 0Hpgaddfـ@r$#4F`2H@!57Г4?r1z|N`2므A<@|.$/p[1#+/7+/' |'; YE2#4Gx?R>a&.yG ;ϗ}Σw51) z޳ᆱ)4 M1 9uH9Լ?G`cO`ă[v=c e_5 kSomHH:7{/.IP eU! 4  __X}b`؀59;0vX!=7>zC á/cc`c~s9#  TuۯPa2O\?N`wKlh|zp.i0g ػ غdLi壗 o~dШ˰C@O=/_]y 0'|h D `GbdĠ}P0" P@ `-00.{Мjpl ge9s 1cd|sˋ_?0ߞ}7_ go?6401B?R?倱FQ ov0 .^d#Ϡ0 S#/ *xŹg @zw^W'&`?;$GH;`-#3*@DŽc`8L.xq!,+CÚ \ <].p흛Z|B Tܙ l?0ÏMfH #BtP&)"B: IFzs_֮Oڋ.e`x?,_O6ʳ71W ߞߐ @c~~rQ&sFFAo.@ v`PXIkh6P+\0B/`C0~c Ŀ;/}w/~2L>}e3oO~{??C|Nu}@q.>9W9-F  L ,@w~xO#MEԨ̙o'þAW$ ol!k5G $;SƓGX?<0~/˿>3| C{_\ uQ G Fĸ \ 3HEH84 o,_'HT|pߡ5~r !@f)AҘA hQ -T9)q$>@Y xC4S62Z|IENDB`Ext/Images_Client_HighRes/C35_KRFB.png0000664000000000000000000001276610126464442016315 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?PaF d uX `>£i# Ŗ;J!pwqCΥQa 0xߡDT{.F6UCMČٗ}}RMJڶui(ߟ.BOꝜee1;;С @4+fg::L$`! p-3ge .b!@{y92hkT ` rQ `y ? qqQNN. r@|(\v߿2 ,[2?F_~3 Ŀٿ 0Q@>@ 2=/ 0311p3 bvln 0n}۷`> -:n4 DQfdҬ`1?#T%̠ČDW Lb."=߾b'<0~304v٘!|V @ L LAi/FÛ O}g;$''8 f@)68틏?~|& BKGGV@n: Bsh$H qF'/+'F.o? 0,(@W^<+ " ;HBCbVdC¬ Wv/߁Al NBo߾_~LF`1QAi)V7~˃xhRbzъ?@'3cū $$"(}Ev@1P7~OTTA^hϏ:=Ayl@,Yo;//7?$z)f_|/ .44ŀ^ =V&'XlPGAApyZ`1ӏ ߿ (qn`=5 IV?~>AbX~T 3,OɎ 8bxk`Hcx l;rr\||B@8%1X>UT0(++ρH*2Ybon.A3r}  Xdx P+ 0DX$%Aez R#H`8}H N _~B2%" yP6#8e0 X @%$BgTj;o߾a@m.Jʡ$->Xƌ3 51?HM9xlC||=#O>5޾,faE4Xac`fx`96`-d@5, </ͧRPFB@_~@FVc"3 j=/ۙg@ a6HH?#Ͼ_ /V`H_$ =p>|Ts+J}6ۘag8A4sY o3>`I',,,! 9x_? mAPHAE~CJlH0;cؙ6 I 35;-7#D:V{L *̍_2K2|Xq0h+=fX&fP  V< M&~2ϟ ?DŘ2=#'+ qqq0 B6X u`7OK$o< 7Of`>s㋿ f)a?`/02q2o |_1 / -  p!`GX@Pf`RdYm~?~ Ң%@6F`)+ eZ˺ sjp3|~pw< v^1MmE6q~vYA` Loֳ0Yc x5Ahjfx9I T{r!'!b a ocNrfГ @ -e8,ߟ'3=t!ED/#; .pM`?//uwYLOph?{Ǐ|ͷ ?8{)0 {eȲXC7_C^`H,!б?? ΁)a [wd0`eTk; r oϟ񓟯_lg}ׯxK`Iu ~9@azs }Kkf^`q L\꠴ Rop3uTA_F72\=AMYO =J~@֛>{O0 d0|6C'XXFgvղ#ç? "l ,l`x? 8L`@V _dxz}YGP|E B u?< |89X)AYd " ܄/P; {} ."kN7Ew IY3|TQexvUPPP +@ACeב@TdʢܼY B\B`w /|% +0?2||=ñ.ݸn hǠ- X_rJ7nff8?8ჴ@G _ ޿VLNha ;O0?| _âݸZ[0CJ2gee燷o_8zt}Gz vb|W+gw@;Kl$Ā-3'3~AA|cv'n{@͉_2~rATR1f``ac9[XH). /(( l[p}7Yœ߽kך<A.s!o0xEF AK`;?`<#0jOO~ל<| bR _>}N ؞yOV Zz,r" B@v'#3;022APDKKSٳ={Իg$2@pq?{ͫ gUd16a063 􈎩%×Ξ9x50 6F6` Ti+*f!IEaqI`?Ç7XIIV۔AUALJA\R౶#}w6~i_0 3+oݺp޳ fF7ϟ1s=zt `ǃAE]5]l\M k619uآD1 j:& S4L,lBS4-@[` '0pظ o{ FjjNKpqT߿q5b@ `g{S0( pU`XJK3(l/C_axtlҊ <2`#o_3ۚ0`LJX{+D`Tzb4*,~~~LLL9gwÇ7o o?* (3pY?( (+dP/g|+< /'s! -9 . ^`G YE ޿~_6`ڟ]P <:铴7Eg/ߜ7SScF?uV8Tmq@opzf00a7~1>pE>O'". @Co׏o f l[ ٿ?P>% jii1`RԬ/==fÛ_%m؁I_ȠP>c1q Y0H `b`n`'4#`A;7%0Kv`^ <(!*AXCXAR`/ G\`8vShߘ ٣<`lp='}qϠq?aPPZUavBtUde݇ ag0Qfa7$|| " -6 ! B%xr$fذC/p0 u`2vf9Y 5!=;1/ܹ/^=Ν˷r8=ujsKRL)t_sPDOaR5v# ɔСPƠP;0v$b ǂz]çO_3z޸qˍ_>{Ƿߠ$@ЦBm~{މU$VsG7 #~ȼ3#x.dJX}+f=Ϥ)'' t{ן0}'~>zW/9 WO^yſ_&|ޡ=[A3=%48Θ_NJ4(@bLlӳ2Syϗ/{ `g_?C֟-ԏPG ;CA> D#4AB]0hNvFp$N2Yy?Y :Oh9;T & @:L`O(e[;ip##dWD# e8|Ú^>3÷)7g{e @.  @161@|@2q0<p??Ԁ q z P<Lf2@ǃ F'adf'3g  Ë bTݸn ~5+0fF0,"d c\Y `bP,, W}(bBy/,jUd`AB@-sprS#s1r&0>86uld@<^ot5Ppo-kqe~{0ھC|L,2Z `b.&4 per0 |;dAI&8fVC'/X~f`X$##%e TL(L Z\ ܂2@tQ R``2B+H7?0= K>_=FA@T!P 7=MǏC &?0)=xbAEyP3@z@pE,0Gz4 5 | 0Y0<~߿93:8 ?hzFA߿P10u68?+ 1 ܩ3&Ñ=! *Yi `9j2h0Hq3͟+(%'~#Ājd[ [ =ab|e$߁@e!#4Ko@qV!%e6v9~c{H\΀Cΐ!jAh;;F)@,Haq+pUnfB'a, 1 ReC) 0%@L ?'3 ꛷ n_4nJ/  2|uh9M >R] e0Sbp0D@pSw0p?ywodTca JXZ0˛V>iR r ϧ ,"6È& \{W33ӟXB.N0|vR | "дv,#r lcX1ó;O|7r\ͬ60ZR 9} l=xؤ6ެD0H2|gx Ez'9;70Д{38T{3|{a_Fb,;7%!bRC'ٺ] ʬ ȃL`az򠐁v$@L=|FTOo$XEƽx=ưz /apMl'^0ǣ8LP1E0aĪyC^J# X 0ة[0켴ANR ?dSa1d0a ?řX#q!F Pb#e۶_LAs̠?j\=İp) Q L\ b\Y̰QN]QAa`33p'X՚ο Pb4p" 6\x8bSnJ@њ7 KϬc8~Ö 3nHag@nYAhEDT !]@Pb@V jX_M`P0Vby#@~33X+_ omp2"#7WZ`# %)Pjt}VH1@,]F@Կ!0Lw17RK@:hɋV1"`9FF4rj\ӐoH(" PAs]]@{X00i@~gCeBd?%͋~f \>h$1P >(RP_1S;y)6Eh|i`9g3lEI`C8P`CHrX`3633-{Њ/j?3ƍMڵ2S-ՂeLx?auL4<  P< aryQ&pX#33Afh%C}`Nl@J 00 ! Zt?{sYGfD^~$E䟏V K0Zsg_h㋙l>a ㍌LC5tl 0e!V ^^TRPԷF;.>.:x 0@0tǼdsv`胪_4Jnb?PhġEG 0e  pzܠI ̲*?/5n=h{ BvIENDB`Ext/Images_Client_HighRes/C06_KCMDF.png0000664000000000000000000000642210131465510016374 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@C4=@CFFF'30d`~0aP35٘N%7_x(.D t2'yn ׁJ~<J>W29fg>.*y @/C!';{+.H!÷7o8ҥg00,*BdpK˄ x_30}F}6'n<淲u8 ^C]ii'QII_~b`k ۏ}۷5kOZM2:Y<Z^p}8x@ .r0dó_u9g| c`fcfn7S5g`gg8oL _fw Áw/?b`hWt o{)2o)%H}P7$=bbuGV\߲Chl=@4ADT>4AVS7? >y,,`.^dy?~ P0q `7I,k ? 9X E n0^:.hvBFFstmḿI d`F| 7?pѣwKeηhwsJ}Ħ p89s ?N7`ٜ0ULV F @ (:g$dQ0b8߾dFO~r|b`dXN0r0X^+Ă(g l30\ ܐht313۷;g-8ٟ@P HAhd>34I%`$3BR-18t(E,STU!1f?`΁&>" |EsIcMfb9$'&hx PO@ 85 IAu`G0|&.| %,ٿn{;C )"?!{ Q DKPb9#H {X0P9/.p#H!XA 31M'Hbh1C1(ԯCt&4Gz0@,X2| -%ρ@B π ՟i,FhFȞ^c` b8*D \ hJ >Lp$ ?AeH1t$3+nݻ ", ((LL zͧ {ogK nE231f[s>2\-hǨk@jzǀ1%ъm&&H-ة l 3\}ao _^ [y-ù?} W @,DT[ۻV>~<@66SA!/O0lԐ1|;?3hK51'"ȱ,>We= oq0P[m?%cIp HD6߀U?P?/qte*(nF~#i'AD On~s4L F%1}rS`l۟3Ch4L @$"6a&m5\Z,ff2:"Ο?+,ckE؟H/Vhms~2}l3k׮14ݻ7?e0^@)uvvN55mIkk[`L=I+tSL t!W 돁I߿N> & l@piwKw}*'ATT dw:֭K뀱T9et`. O:å@<L"YYb>Se/_?÷o?+\ Dz7 S`RpU/baa*?!zɓ =_|cPUUe'L&$L>m˖?e?(0u@;X/0++X |`evY?}}#AYYIP~b5d@8c_F0Fy@XX)ft/̱ـ@SeZP^Ag`zA+oh``Dt)+D Q3s?06~gfXcN B`V.qn O22Wo }4柏fL?\ I`Qn@B?1GsHsF 7??ag/*Ѝ9_^f@ጁ5똫&8#?֦6#7#F>AE-kP=wSĮ wzas'@;;&0!.A_p L?qZ6"X*j0\?}[2ݜfo@_@9A0X${A@I$DP~Y38 _!A q0C=LH3 Ç ?ށZ lB TC豿K423[b?0Ԁđ? xAI]N3ɠ$PxXS /X 01Z AL 6H 03Z0Ā <}@*2FH7Y1^ЌV;0DjDh' *"P׶jX.)R&!f:+%1u@pT!18@n2AjρĂw  ]JF< 5(#@؅2b= gS׳ 1)@5f#w>z2b=pң?o?gdbD -'lyo@ P_@L C@NNՅIIENDB`Ext/Images_Client_HighRes/C22_ASCII.png0000664000000000000000000000300010130001222016344 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@`dddptttP222}ˇ޾}{7o^ @,,6p)((0$  >)U@G OJG' @F;R# 1TW})".f^[. sNclwZZ+V)eSUϸ󙎷#0b]ȞCYt\uj`l666pba`1= ++T H=@ax a4({ ` 1 2HIIŐxA 1i%Wh.]c  f@!K ɓ$ad \bB@2j8 `][@d-BFK$py{` Hr<,۷ "~d@J!1@dl>(Г3$@,;%ɁT31112+@VVV`H |:.P3ͣ''PhbP nѠ@7[ jdXr<p8#*1Pe*N@1h汉?{͛ ϟ?'X @$BH$nz>PCTSbD<@ISRm!bFA4k'`s@pYJ4_*BA"D5da2Bn |I<@~;`L[ &bBʉT} GbH0 zdԤaσ3 &z gv%ElիWaj Pڠ%!P0j1@qz*(F"{T߽{ O B,`4"'&&İ_ z x&DXX 6b!@dn&(A&5Q(-!#0 3,"\za޽`}L[ &bQZ%bƟI XaqkJ*0Pe՘DD(:٠ºQb5*A 3|@##s$ FA511=2ۘ@/6 ǂ< ЃOrki/TUU r[@$r0?@axׯk-[HGD6jձPPPAS oc@NZZ:حmӧO>y(o@w?60)I 6b- V*j7(Y t7 =I {l-h 7IENDB`Ext/Images_Client_HighRes/C39_History.png0000664000000000000000000001325410133443062017220 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<>IDATxl 0:6`kCԈ*q "|qӌSQD'A@wW,Z lSծ@U7p dOJ+SI}y Jce ٺ,\| B |, l ? /dx'Ï~=xic;J1@A2 F2b NZ$,f`&`.Ƞ TR!S71ݏ ^}J;4ҭNJ  {hPEꂌ &B | DhF  1 pfol#C^{h& { (,~-SRMRa2:;_@|xÛ nfxv-0b`cd_p23ȩ1H11=4K70Xsܥ7/@G'"2@3X٘c|<y>2}wn? " "B bb ga'^Ɵ~11`dfP3aec?v!Âw޿~4@Č ҭ0`0gx;_1;yA+,'30 'Ý{; 0Y2|O Gg3>:40*3i2O?ox Q@Bbf.ĤfI JKiYa'?phyGv1D 327, L^l /_f+%Sc`ga01`P{v30 2`fgpdz-GXN}~3 G$ Ւ\ l|| ?00\=Ē ΎΞ .0X f^AYҕ JR8pcgfg/`fk85` DX,jc`gx w2+220lݺASS\)NCAWXXAUUAHHb˗/0_!22XAOƱ[ fP`n+pkO?95@}Ev/@13C j󯊍1؊[B 04 CN: 09c X 2 ~ &%SpLrp1 0O * 1f.pC?Cj {A8 _ f3Ve O0f3 iP:SSScgNHڇyHHu q< 3B @@12_GO." NYQvSG>j>s3@13= ̴KdT-nfax;Ç'ʲ$i#AA{Hx"6w/ԣPjyDKk / 3bbx=Ó[oIi>н?@ &H ĿZMXû oWb}%TA8# C2*,B</y93#hfg!jX|>A>UOg/2|& c`cKF @@=#Ve֔'0~81'3}\rWX 6ѓ$@|ꍃ 2g_x=P098)  }A ''͙>r 3}l;Cxx 2\S"B  wO?q@E/6`5` w!ßAX\T;>p,<}ŋ j⁊JxRyI7YaϾg 8~d},u U&?:L%>à>C8;''<%ՁmF`l;8i /0+_2̺@f ؀no؁3g3\qކw`PTGlƔA[[a.PenǏ?2ܔaf0O}99!`J` pq ,D^dϟ?vpu|vV`373'@=l5@ rާO|_?`i"((0mR󂮊 7n`ყ30ĥ :d>.'Pr{=î93h,?ؼdy ؙ3Rl#2rT'@髩fPga UU,-]O`3 hP+0Hzl? | Vdd!)X2?hFĉ yxx**AE pA x+× r s3?X2q1pʊ1<{' R4!Wiİr%×ӧg7H;?C߁/@wP@zx 3×Oߡ ! 4{7͛2p7 (Qc'G~1+Y`'o@1z qo& ''mPhxοhx xr<\p=Xy 4t1k* h]zۿ@EgXN|g`g'`I ,+W&(=w,E ï3~fe3E!K`'8YY.^x 32pP=t]u@Abx4ý 7o>`X|铁ͅ`π c`(V;;YZ2:800x ɓ' e5k 7;XR* 7> eR<0Ƙ]d_mSIf6mLL̠! =P}IJ'9dxz+6Bo$X?0<X7;* b ֖6DU aMNU$ydC ,''j 'g~Õc@t_@@0313vLOl_@_3؞yKٶmavÿ `kiP k`+`H ( `XeCbT~xa{ Z ~}e6^'d lCqJ3hZi 1NOgwç^1`q_$C!bMfVͰy]`s]\G;v;`7aag) @_ɼyݘWZAFAVX/< , 1}bٺUP8灝/v h >d(H@.5P "" Űe{,}cd8{'Υw 4; @ ™Mh׳$$p] 'm^#co2LL  5ؿ, ,0808q%yf 0<&4+w?.ϰa#6IÀn|^bfF#`>qrH1Ȉ21ZH0|Űf[)fgw;o¢(kPPshXuA%Qen1I3x:u ó:;K(m@x(~~t6Q^)`L 2I1l\{ʕ 624349@c1++G&w}X\}=bd}?] \Vc+ 34w8_w ( `i%*po˗?`wPʕX /`vŠgg !pÊV/{6h)h,اA"VPNbð X9h31x00K20| gO=fLǬ6?' 8طx nϿ| Eex?|! *-K ˷~cp u%+Sÿ?2/1%uD?r 6| Al  "$,<,^3k?~{o /]V`7ԄL$Sȉ a8[_ @/Dc3LJf&%QENCnSKu10;d>ͱ#&D?o3<ضa*@ iLF60Yi0Hɲ11h)032H 10\쐮OݯA3Fwp/!9>x_b<@x@'2z1czƅQfbb``bd/?yT~ 3w2u@{B;P1*LF@t"S@6 UH~@G?׀PdI@e­ ]IENDB`Ext/Images_Client_HighRes/C60_KFM_Home.png0000664000000000000000000001161110133316662017136 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ yА@ yА@1( FF'`Q~߀_@=-a35}b`aP+%6=P %X8 ;O8+;CƒJJXdy`}ڶK|C}EAVf6Bh:w&|ۓy !Ͳ݄:7)F@Lq\N:M D`jNP˷{ֿfm/RZɫ&Rz;*h]7xnҩr"<(!3R4#0Qȑq5v)* ' 0iq(LP/OW'A 7;mn@ IXi9,cR9E MX΍$wXBm;hSuGԏ'&e)6F/,ABNYecMrS}_z F>0{ك /_`'s$tݿ6ɥ : c`bbbxz8ã[׀A)a)9gX?bpUaedg`ŏ@G CAtObX ^x k؃gYDfM0*k{:K%v圪 -֛h5A){xw,.K50nB&dHAKv#Y0ޟQ ;._wH=R =X/>M(@}`B>F%9Il< -,"D j= YJ]+0_fhFtoJ<+Pl SH`mo0"XM,1 NDw I;ˉn1iRWRN[!*U}s[Ma-<| u0T4H[H`݆u67N"ڪRωIb<޼yCl{u..d֧1OZ&.iċ#eY :l9.eeK=ۣhHC"t_%mOEYJxiq ,q݉ń۽Q2/*{(? M'b,bL0uӽ73gl%1MQq:6M;l.bGgk6Nuoh>|S]dj>. N@E^`.- F^^ uY#֢자;,L@p$10Hb?~0H 3kʖSMՁk r* L \k bR ^a&` L_^>`zTPBX0|{ G_LJW ̌@yy/>2%G[ G8?:Xg2WVFԟ/_Yt! xV`da adW|Y /K ooX='/ 8çWFsX=%_Ϗ.2K=a#+`!$cPt,@c@wŋ͛ A.(`#5&fpǠg`t\  9`e:Xaq 2H3|:T/{WLX=-NA O2GwT5>*TV K>~%%v`y,X{2&hg>:#xW? dP 62 02̴ r#+?q &o* `(X ʨ330PX? ,޽tW-`/ { LJ܂@k`7O2p 1~r/ûO+KU5 `ǻwj7 e0 wb ( )|{FsJ 9ovFL5֖k zvx_JN/fpwJ򇒊(ApJ)3OLOu}Ps8WMe!08Vm$BKz3Ϡ~ b A"tu>KXb;d侜?}̪mP;YnYOL=#&sy|>+Y(<LSZ>VE}rD)g*;S9 hp@, FĽR\=p$1&`'ep>.`/lm l 1_ l2@'1R0'pC@+e@  j`T ;1ƅAU/ l:`bþ~T l ao2| $~aFS`Ty]f4)>C_ĂĈ( a?32B;Pؠ"CMʐi6`#X0{/ȗP57?`oٶ 7~1ae<]_~{) y Ă r ̨>>ax=(6.ly2pde4SnŰel׹qJ$c 160v0v'`gx^FS`2꘠AO@,xPO/1<_9?0I3؉L>88Yb HprLT9@8Yc!,LD9$ٌ;_=gf8 þ\ UUƠm ;?m`,~9J!ITپS)U X,#~@8=&@BL^ <f#q Mz$ lgSfd8 v@ `)4/`F,M P&{@ \ YW Xy3.ETs )baX-H8C3AYd .0V! L .2×,`o`( &IZjP@ ch^$* c@A%`נPAO0dzCW?<~>ïF@NBL YzX9Tifv&$ :#0yoAP?v>y lJqepc t< Тx33@/X  ?z<{o3|=P ̣1MN lL>?}pM`,8#` ? (s?>OhN@8!q ?@KU>` Z_-gb`OYU%lsā-q`MAU``M, M3` 4gEt0?vj3( i"+iFD%ŷC'bP/Z2@2(SB ӗ ? \]oex/&`2bί<H h +R 031VV!b0yh@b%û{/ aU% #ez+o:+3fbep^?W`02CFUu#C>3|{ wgxx"ë; 2A1P pPι T s럳-K͵ ,N 00ss2C(@ 3p#~{Q2<3?y#`yX X<:%:} `ADXNPрCYD!2AX42J 憖_>OawÃy0?g@89l}~CD (RpUa`pd`RaPqc5d1fxw<Ãcǀ,y30Y2ЕOC/Q-("zؠ"`g UcaД`x' L π!ıP~u;O"$@x=VU*0(V#fR4ȷ~ ] -M`t@z[@'CF8{А! D=+IENDB`Ext/Images_Client_HighRes/C13_KGPG_Key3.png0000664000000000000000000001205710125245344017176 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@p022H_ ? R?,30xu8^00@|;L fTpo4>. bXYDȆS@Z]YRXA]_ǟ naxvëG/>xoM @|y z@H1;᠐`crTSԳTeбPdPVd {~|aaxKV+3l43*xd7 _<@px= rtLHapW/21j1)A '7@+`{ _at5Cǿ~VfLd{T #d̈4'nANÖ= k2((2lqY' zz  r0bEN-_~_`a'70 =šYP % u @$ @p4?ӿo eXwP]Myy}u?0xa߾ ke `o/`j*  |\~> 8F @wga%㯿?>Z 1Ă=0#qjFnF[YxeTUXXXy ,,+3|ӧ ϟ`hi9!3_ 08cϏ? B?3(a#cЬ, N~eX3߿UNGl{j_% -l g\`ضm7_m^^>}}-5k2DAD:s$(A03BP?0ȉ33(*X0j2͋Zs7@3qo}  @3pK}?ý{.^fO_LLt֯_Cjj~PA'PPjF$ &F/4J1>y/'v}U=x:{i wQYv<\8G!,YW]ȑ >|Ƃ<0)I3 caɒE NN _|c8xc`|C߿G  <3@!$/Ҥyyy9 03`h''@ `s œ۷nxpI%u>ëW<+íN:Ǐ99:_2 ,WN30=;,CA!hi{ ""׻Y 3CT:4XQlll`|%`,b3LJ˗ ]Uɯ h`?߾00~ v˓_: AKի@|K @@ ,R5$ r(0?()h $ d33{@Os0HJ c!<}N?~EXL@?~-{=0\=Ea۷_ Gr@}߿vJ3Yo_a~P3rfaa>k, ;@K3g`L0󃴴0:ف@\\,v30C73] /^90Yz LJr@ Kg .ԔAy2엑QB@B/֜.ce9O 0@1Cp++pp5!% Z@|o{ÿށCҥ 0Yax09]LI (0px i%i 9P4h k.`tZ3cEEY%yy!pEt0A! ƚXzO kn̈FHj ,uW utT= t ~Ap`_X@&H*]@Lk:`c1ׯ׿{O +Ã00C=0rK ZFk7;I,X~@{W28p `QPi"H]P2""8?u..22Rl V UU5O?=t{t #Ê@㪌fsrrRTf@NvXcٯ^=&pON489v#RA馦:}eb+ /_;@5Yz %(%Lk` ,O0H`ŊXG _5S`wqX1sPLu\\ r>K3PЂIPF{n[;lQ`Zl@w @3]ʇ͇Q==Ø_hxpC`xZ}\`quz j=}\*󯀝Ϟ} K>nppp-ŀ *DV 44 :Dtumx +05KDPgaa6M1߿ IbbJ;WJpp}P,2=??;al&8߂+JaaQp@yV$} 5 li*o\uWނ _Kr@Qx6z5޼y lЭgT Yp_ ,lV ޑ|@QO6\ r-FF6`{^0f`m~kC@%5vU<^t< \P=nxxO<fAA^N. ~aȗO_>߾zb-3JAu@@GgC,C_AIAW_AQA4!/@OO_>~GWn3gr ï8Xc dEX~=+(X>|p!g`E6!pC~ S\T I.0ǃ0pc+IJ  LLyO6x3+?/'d/~1 3e`'=;Xy:NfɉNep3I>~g(CC~+3{| ;pDx pXebl$xPil"DJbX@?dX63iCj&  ocd&(_0A֑]_ `R 0jW~#m&_gUpI)Aۯx03 2111p5'2Ͼ]r@X:H1)2rpP> _=񋁕_A q`H pu$ 71$R<0A` ֺ 0)Nav@___倅 ,((2@q3@a6~P6$x>}&,;VZ@cBTAVN!C4Xga35#ANcTy,yaŸ/#?>Y/5j̹ĂVH Pʹ48/4t | &mi\ +7!$T_xS/0i@ JF! n>Ȯo8%$XxY|jbA˼z̜Ҋr2 _1180|(_`&agDP RbT6-4@E-#X#<({ !'}d'j_o>aXs;էFay?ro4A!_a8v!01pՃc _~BjkXނ%O~wz] @w5Sv /`_29!ɖX11E?h$ ?}XCyׯ yR JZ̠=cxH@vl[q,Amid'Z'.bffЕbдfp2T6yRppr0=o R") 6P eсfN`:dbFv2@gbnP>( '}˰oW-6mIQJ$"+ΰN:_|< >a(y ,@t<(0 Pvd'Z&773a/Ƴ_nH0X(2q1mfp;v%66vϾ3N- 8o߁+ `vC+C*Pr5*C33L'?#ʠ$ 0,l < _5?>~\c: - YE?97ʰ * &)P?{Ň3{]@9NVF_Aaw |aX{ yx83<} |b&#"vA7n$c @`dg`8pk_`106A1J:_ L@}&:\/z?0?pO 04;YX16O @Lhg`gHT"''xZ(Y ( ;0ɀq%N ~f H=d'Zkҟ|Xo039-B ҵ[LF,L @K~ D:G* +d %dz>032p3Ar.O`ןp_O~G)PCWrXrB >5"; `013/{׏_80s>x Y01 8C >0\fl؄,~ Hy`lf`g?=U*ǀd'ZT1˫ ҂@= xg'_kMZ WWk23#RnGqpX3yTd'ڰ!ȀzXuʋr@/j3hHaE24QaK:3ɡ$C$Ok^Vv.v@̼+2Œp8۫/r"+ @J 3l$/7_ mBlĀBKd (CPT $ޣWkT5W302I1ps@od93#4E#+7vhVC)mЋP1OQ`]p f0l}4÷O_88X4d!Cȡ?~3bT|6@ge8zT~Qy'%i]ݛO}L3$v,_^>mAcA]N "{foyл#?6.O a{ X00Q Fn`ȳs 1 ?nf}cj~K`%6Pc;ЧK~MpnD Jx!]"A ?.&9?O_K\k@S HD{ (R_ mN^YHs@A#]i)Ж{@@| hYP7h=@C~@ yА@T΁IENDB`Ext/Images_Client_HighRes/C53_Apply.png0000664000000000000000000000544710133445206016647 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@C4=@Ca^N.sPym?w%}`>0i(Y`!e}* h-Ao 44O>(x{{xw0Lpx}` Y`^NAqQ3aQaC ]@ Rǫ:3g޽  ߿ ]\RZ* * >}fx5:h0y@ߟUed6?ưU7޽dbb)D@o)\"| nBb K_^!S])`%iC>A`-ð n1<7c+)ȸ (򚊎z34C$73 ?߿g~ @bddej/0  0c,`egfbed01d/ hz0C,0n}ʰC10~gvF&aUgSe}?`=!C #+s2(C<Ͽ0?&` Ņ@1afbL~|Գ Z Z *& ,|@O7ҋ90eSg3f1daV:X(&0>yǰKs>1}33s(Ʒ4'No]҇ ~ q &\ ,^3uZje. C:1/o~1  46@ax aƷ3yr ‘ R܁^ H47A6QPEsnP+CN$;o߯6{pW_`b`UJ0Ê^3Fzqgau[!oZk}o߿`dVdcgapWbe`/ o :뿗 d8uï[232G3Y`҄K\ 0+*0H 0j13˃3ߠto^1z_ ߮9?^B @a_##.Z&4"(0x ^2^No dC0_2м?ߙ!/x 0c7 )ü2aPe t(#т, /`e N6 oCȹ@3guJO $!ft>3>zI#q)`Ì? :yG+2`#-KFR*[ ,S~=`a l^ae`´1 ؾcT@X3//n%AOP`?p,BT~a) `;;O_L غ3c? gA1 0?,*02=q/)1}c iӽ &l1 310Obz#G_2|e >a8{I,W"Iٔτ30aʼ-N/2|6Ⱦ,0m&7'ebfvG X?c~{ g l0c g7@|o7xu+}f#=^W'nfdtP%UYcƧ Ipz Ok?Ggw?Z""C>36},(rWP 5&WZ@%@712[5cf^X@C~ h{ h{ h{ Cu:IENDB`Ext/Images_Client_HighRes/C41_VectorGfx.png0000664000000000000000000000523510127777324017475 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< /IDATxb?P0@ 02228:::qpptrsskc@:_~۷oO~K/X 888X*))m.))RPP`/IR;I2333<|Ǐ @T<@( @ݢBL 5S9h_}/"J)o"b%aι*d c@ "ZfF^ugL@1. yd!,:M:|jizAVV ( H @adb`H2b_AWGL,,`W"Xx &@,Ĥab-OV..F`3C=y*ΈĄ6yV 0 b8r%3OJ`` @XLb 3%Q1գ@@_\nc][@,bpAXE~FV! HIƍ ߽col;XCTK^Ă#_ kk2xL/P: +ǖB/_2\fXjf&&o0D @1QbW q`2ٝ vgAI0p30dBe8hv)`HM`g<ax۳g vd5MB߯_D#hlI HʰH4 0Ӟe tMa!ӧ LO00| KPA(i<@ϒZDt@0į_!m##H &-[Xŋ ?|Udxb"T ;Obw/S_f#a0@4W ?9 [ &b(Y$NJL>ee _A s`?  Pf'S@`>e:;0}f0LIaf t,Ëρ+$*B<؏GIM B4 }0|3 :yAԔAё'0A2<۶5RD= ԍ[$ fB[; p``q\QCC?@GՀ*c䓓?~~PZ%%zB; lf3c$A4f@kqb+ @ĺ;0ݿYӍ $qPf6|(cw^t?:l XOk@? -``cPALQlh}t@dJb/yU~`=t3`W*2"-dVD 3H#qD'II`|L5:_ 6EB0'+ 6ÂB`@m + f 67aKBB%aӮ1Z J2 *q@O>f/^0|C//` 2#t@,fXB12.-gla&p z=06cyFA\J hh ?<@,6%%/P X 9;7ܼp X*@dzcʹ'?@8FɚbUUUUP93TAg&@j@ m3Q/34xO C0@xsԚ#'Oa`?dHsS =˃%K0}:W@|e˖5/ gbXXM  4 憷)fNo@WԌO>@w$@<6NX Z,<@<KZMU-[~: .LR)E]IENDB`Ext/Images_Client_HighRes/C50_Folder_Tar.png0000664000000000000000000001203710126545336017600 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@FFF'ӭٳk>ף7o<ۯ@%bzdee[ZZ1|6/{ϟ?}8sҥw@( AyZ1Ϩq͔5u~Ç 7nЫ۷ozf/^p 3$gH<==UCBB/%%%rSO1ܾ}…oo߾y 3^p@% @Q5 jhhrRΠ nnϟp[n_~/_y͉SNMjDHHH8k/,,D߿1}3w_OիAn ~~:-YAW b PuO5b83HYeOz1mkyn3<} " 'h +\Fp h t;W%>3 c/n`dx UjL(QCJP)=ȥ!6b!]qI1L?RKñ0?Z%4x}s}]iYTlFрam r6=n@FxˠxGnh]A#h@0ư* ߐr83?0&"yeE8x30̠*/t/8 _WA/c 7_?1\00kW`14 @eBGQF+7]ߤe aH6O#i 9Di D= ɤ 걗mVAlt%)|&?a?Bj@@x;-8nZ+gƵ ~ C(gc>ȡ(~ P1ر99cAx/ģ qP̱= ן~AcϞ=yd=Hxo>gg!!\`&Ё5}r6vv"9?PG g< $1a/3|A1:~]P#>@Ŀ_O>| OL@ؘ@? Ae0BFXـi9_4>L( .zIqA1Xg~ h=9 聯?t84(!t qg1\ֳr C 0dG!;/@ à  hp 2|`.\|*R$o~XuPhe?10?=oFN~#vʮ PZIGCOh /VQ߁ɔ ؟/UQH&oty p?!'?7e4аo~^]zOWTļy wF3|f`Tpc`KW:@ہ1? 7,&~;g_45̕^]v@\A݇O?9FwX4.xv.5{ ex{c?5+~00)x0Wb+jBMN bRK^0Xpps2^>c?6 O~0 jc+N}8?YMIdIYC3|}A\3Hy1Hz0|6M^\tZY27)a% q_HSt<̣+` Ͼs }ako@{N 2r <  o1:ׯ ޽56.`NY4+/Ç^:P5K, H?`7g'L _}c gF`Ë7 ]~ m  >`SWrdw[_30G%#3f`da5ā:R@HN)>} m). O0 ?b%+E^Ǐ.<2P#G2|Oo`` ,t]X- A5|6|FFny&Г@~{ ,g; Qn`Iv-r gX$A1L,|~򙑁U3|w ǃ쁿r 610\[t` ,]zI`3[i@1NU. X<\ 8R y&Cc/EWyÇ_*+`@[P`_CRL?_qf ɩFPc-6Nm&-P(3@ǀZ @cnfx3í0J0pr3zm;qZ2xd @G]-f6o(í@20CZ.t$P`ÙY Tr_>[hN@NFo1y/0Y^}(r3|{rABAN H,)8Pa@i_c uQY$'/^1s\f6n`s4ffDQ[emnpi1` l|v-0pC~{,8@8AI?$sŁ}{k#@3pj.2N6::~]Q^>hI ɛ[v+ϡ2@Ab*3:€$Tir"6AKfv$ '!N`p ̵8ppd'ϯI <@z .=eWep ѿ,X{Hi-@ԓ1`?H x&Xp{,! 5hR!pBA}?c`ݛ >fepXF nmx˓'d4 %`:{ @<(<% q31\`kivA2X1 3:@ZQ`cÏ'a АjDpF! ņ 3u3'}5ӗ ٹ [o! G`tȻy{!yo?dİpP300Df0x X}eت ؃n~'2sw߁Uw@~/ ~d- _qk{`ϭU^^]wuuqI=km&e=%IEq`z*oH%!PyT='o18tʥ ߋ1\tcx^Ͽ>#@G_3|{ _Whrze͑] 0ЗvВಓQ42Q3RfU` U I>7Sǯ2\9t?|qϿ[O^1PG|:RM"ئ^Fh03IIjxHIky9=dQWa5RfPcG^p֋W|r{?/`hz G#@_HKD7@adB`1 ^~̟t ks((ʈo_=7T=I: BӬXbh̀DXWО3h u?:XۡgUIENDB`Ext/Images_Client_HighRes/C32_FSView.png0000664000000000000000000000512310133310422016700 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@C4=@C񱼼\yl, L id#Q0Ǣ v"n S@X=\rՖR ?c Te@A@?afApwҗ+#; t+[[Hp`8RP"`5H`5C6E=YH`1P$dm { z&o|oa#,aq VG"yA4ϡ ++3'3Pِ @X=C;2230 D0.#42aK'pWO @ÙF&/2qc :QQ\GR(rde5%~݄ Vb 6321RXޡ3 ?$/`y NN){@Cs#R`eee02b`daA$k^fHHHg7?us8 p$!Fp1k˖1|.+cz$#0(brCУ3@.& rZ^~c`bg9{NNTHB3 Y 1 - -t7 C_Hg@A 0[K00pr10K6@ @Gڷ@+3 I{ 0 4ؐaD)bP A A dQJ= `l7G NNQ mƿz'Rl21Cė%>;CPGDr(#ԡ$ @v6RQ RxRb yXˀTCi9@g:?<b3G$1=$le# o$_HP6C"y )›_$dOha``d\(fx}?xB@lJ`&& ?RRe4ρn;Xp00B2`(hv%p%!]a2й  "" _`7@ˁ쟿)߁O CRXA4?b _`FM 1`23O?~A4 $Y@D^`*ACKG)@88 (0: G oH,`IFFF&$`cMo-a`fe`fdd`ϟ ~bÿߏ~USo!Ʊؒ;@18=rw3?Y}T8Yxd_/_~0|wû_`~'۫.x b=@y 4~,,ERr B "`+ ~gt_6첿 @u?fÃ^|+^puu_V" G\'h3J20sn>w~2|ϟ LU_20] %! )%O0\y71ka#8=@y X ?go/`$ң/ /7@h#0 7ÿ?d07x~^.)i um Aan篿3psfxy!t+@@dIQ99^* * f8r ów?fLJ.@?|}ǠtAI?Å' O 1e'@O<?g Ove u}s#F&g/3ܿr2ɺ$`t7ln H:q_C@Qaו }.0`3O ~ :R o[C`I ,EX89`Rb|ݻw ?~?ѿ@ς Xz?Û@adu c z \  n+]^S/1| >8MsrrCmb`Vfo߾e7+C8òCioAee$oPX22qv28b$6 S FdR`蝽7y3?!^;\Ÿ! jpUIc013Hq[1y+ ~2H 1H[2ׯ ߿'NC"o`̜b nq0yoȠ𗉉Λ7 ?$B/w(XޏP0*&bff3?l l/ʹSֻ7S_b0@∁$!C,rx.p>grhRuEuL#e9wNߩUD6Qh[LyίX8ȣX H,vA T |2VCM>.O։4[쁹Q97+^0^-+0,cŃk7{)j~(Җ6IUaP`b4XLEÙfi&j)_>c0UĘua$H@b<@/`fjq= B}: =̽ 0'',BA5%4ŗ@!x@b Jb܌?|`;g30ax3;`wz!Vn`[ae;E`0= )C̠Z=\R 1\aaeiFY) wafo 0ּ?r3` ""T 1?j`x&o>|_!A!XA^f,z?|Ux ?csJ;A|P{?I B, LH?| L6 7.e^~;IAP37~ l y^p`b` Xq"`h z WpDew#aFr3;y?>2zr_ gd6@r!B%TL1< AMw0J7\s0 n 9501~1|J` "` lnvH22Hɳofn`/ ؅^e1N_ef *&LR 3VB |iP vw>5!QM B`EX3[>@>MAT ~{jv30#31{ }w< '~K$PT&ɟ r<2a`2 *K*u&λ XOpߘ_5i$´uQbR'>!wϒVCĠOg^v@J!vk *M$P *06Ԁݫ/ 7 ղ+?@}epFp? ʰ ??ܿ4/{ID x͠:' u}Еw@ |̿dEy>~m`\'p0&W2 _`RdpZL@ +@`sPuJLV +z &By\01Gp;Hm k9PC6.hDTrHFp/@c,,HHQ~^>nvN'} ge`g q;((j9XF`F[u-%$@F&@ oi0_01b ̬L *xqQ`Bʒ`5Y$Y2_LhL@:l4 FË!^@ܡgw`2y=÷ ,@| u|| Ps=D39 |W@0kb 0&d^܄ġi g(B٣`|z&m*|FWh́tf*p"ϑ#2ƴf_ \z CW0ps9 "00 7Ã, ן|ex'O/~^~06A'3 +=av`ʋX1 xe6XPX|z ߤ@/FXt##Ys%npP첁6,\ o/G__Yv`ӀoP0J*N`Ϳ~ >a 2% lN y|ע'o[xMdPe&!P_f.?Yncg_ _}gxX3,0h.p337pӁIAn`- w~Ǐ?n 36'G;[!4̼ `-()|ee>`EX9àn&T:+8#/gx#{FN~.f6`LB߯oV(?-_.Go{3hF@  nf &!jxA=ИС'C_"+4iNC*.; @zgء Z80C1#@ h'GRbm CI٪FIENDB`Ext/Images_Client_HighRes/C30_Konsole.png0000664000000000000000000000615410132777574017202 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P0@ yА@ z/`fffbd`"r`5L †ŀfb 09Fzl f7߾}ye@?;??8CcV6pgD/#*"3CbDGoڲ뷯J= c1`_66S ȟ?2q0x1z:(||Zj ?}bpuo߾Qzx^m U߾22ԁ @=Ls,LL \ fhhjc&:h ޾{\`kof&fP 1@AP&|-߿ }@O3; @!bTJp 0#J RR1AJ> bVBW`GSG2A Av< ) </u@,k1<P!ұdX $ |ɡ@Ca P)؃< <4tAfRr7f,GJ 01z 0P@ ۶mchjjb,VN@~=×ϟQa-f4CXrafx5X+  @!hP0 mR0 '9!Im@S  ruh0C yDMM,`bbpIɓ'39s !,@F'ȎFx<YF(J)_21(cIII1̙3ANNPPl.)PA*@%#=ĄR"9{ 'J ]cgt XHGCa 7l`C\LJ!a`2ڽA h8i/VLpJA@1ČLEPZ Ϗh7o@\ P,cx3ep bps.1HKH0=R,qRBJBMR 0|J -- :/Z$E`me ;P3,Ġ F$@M fHsA0 r$߼u!&:n '3 !CbDCBH/(0 3g2l ^^ VLB⶿L(@4Cֈ'ogL>X "*.2Hn\OfbzhΝ @Kr#@$xE@X C",&Űh+`X"2jjBzR PI|Ξ=0XiOP bT!8.Gt>I %ÕZ(bun@ 3N]n"kw`{J>d ٭fE b G lalbA3P@'@<00*eT128 55Z2Xzk`tx`u̐ԁOĂeKӰ-)/zYC38% X6|@"}`!of@nȐ P`ELm`SXr&&2lػ,} XX30hqzV`5`$cD.&U\'403c4%51h x><n&YAaP&ꇵa# ! ꬃF@Uc򨃣`X`DP 5C Dk庩SI"eֶP: ztlu9iP7'}ԣeXR VS3^}ܘc N`$(`<0ǃ00Yb;#@%G:w0AKoЃ:Zqw/.hLͷ+C^р4`zlGHuhkLc$w7SШs8AXTF1F(v@! *03|:gb'=Ho"Ф?쾲lH zg },@DMXC)@, ߿`pc8}+:#x!5*(#Q7X r󞦖:?!y)% ,UC#5C%]13 =~aL xf:8I@23!+<H4}(y ߻SdDj-` & @p|m߼EZXaH (TF,",ky|xAP9 Ȭ)#Wo> @@1,K)[ f: dڼ  K`:bUhȯ0 IENDB`Ext/Images_Client_HighRes/C11_Camera.png0000664000000000000000000000602610127241024016731 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P0@ yА@ yА@ yА@8O7''!/_~x7o^xq&o@w <@ C$? 1 lQQnn6?Az>p;/_=k=;;g&&PpM:& _>8qb}o @ppr62Rd;"߿@ 3 (bH ϟ?` 9&z̄f:97n<|ٚs֬ } $E  ߿bA-a333pYϟ30 3|X)PppcW踿 ?~| 2 /3.fw Zv& ޽G )&`RW ۷dC0ՂBa g/a7gha c037af8~84óg^z $`zĠ#}&C_F^q-&fV)) `f޿ (O琤Bh %,, ^=gz3jvw: Έ3\~a޽jo`ppg;ëN]#*Y^~g`x,>a`޼ _bNba@Ji1Ll2|;!+'Pݼy3Å I &STRfxá[X3| ߟGyv,, ``(Je#QXAQJ! ''k ǀ򘔨 ï/0 @ςJ Lb`'#2@P,'ʕΉAWcG{t e c`gg7eR~>~}-~2))0q1ACӌ >~{=*?4 ̐&$2!Y8Ax~ Ta M=v3ܾ ""I 9 @ϰK)~W~. '0ɃbV .ML,><T:( BbMAHH-wG^վG'DEŀXXC95JP=!'' @;tbDac.A:7F K"n /0b)=nϟU  I\ 0~7JȃB LZWuȧ3ÇIHH \"'%&&6>/_=ɇHD@˗:stÇ7@L 03I1\rXz7>}x `k@0U< ='#d@,$_1HJ -afF-U 00+0ٽހլ[!#3 ?+ 0v=c@v?...pi_ B"gf2xhc)ip )mQXPpppC=ƈKĄL 9Ff1ϟ?Zp{I_A|@Uhi822` &J*2y =@O`~P&.. />HԐD؃ (Pg..nopZFY **j%E ֋߁ =M P(s+7 bR)iZ;+߾}Vbi]a] ߁)/^> N>"" n 30 -^hmbTzR^1ԀjڻwnKAGG<0ˁ2 WNMM߿HFvFw+@]JP2abFW`BE)mw0|VD߿}!W?R#o``c (nNC(XEP} 0$߿K(%#cYYPS'$pӃo@ϯBI=*n< %_2 K3t4ǠN =?? ?~` 'q`u@Qܜϲ /_:'f/Ѡ ⠒aP2e^lٓ@ @Q<i0ll" Ν[ʐ2?rt]$FG!|@ԀIȑ}@opOz|,x`hh 6 &⊉O60n#?$AɁ?|x˰sV``m nBM 4.7(Á!0b ;B  ǎf Ɔ . RA4K`S ,RMXrAf@pk]g4FF"Ȱ" cA6j 2?? 06Ԟ2s TkYG$;P>}t[ XI=k.@lTcPoϟ?| =صk7˗sqqr ($ #r 3e&.ׯ5@=qf#*MP  9:Rb# 5( @51*Z^4*Qo8ghϑА@ yА@ yPrIENDB`Ext/Images_Client_HighRes/C12_IRKickFlash.png0000664000000000000000000001236510133443534017646 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb$$ĀAQ@7f`dcdd@1A UH d@YM (4#ĄHYތLL@K=Т@oOwI@2@Z h-4SOo)P|+P3r<@xL@ %}B~ٱ@3 3z"l@\ 40 L `Y)7O@)OY@uR w=a,E;R4t-?w8ܢ$;憦@'<3?@j8M@O^M{b&V  cyxpZ kՉ ##3C#@[jv0  T LzBϟXn@Oб a!_c:PyPiH @1U0k[ ߇ \I`Lp@዁,#=Pl(YDE@1 ,,A00l:="fff#$6!Q,'_kzoz+@~!Po.ˁ*% 6P6 _P:hȍ 0AG p3{ #À{6i@f:ӧ /u7Pnteaat1e@,Z J* G(?0iV |P3?yF7@o@w013$`hq!)˗cd t,~#FP2hi&66PR:'$ 03JBǘzal$b+-CQ tȜ8#_2y@f@9L Pr'? 3p @@1^k$P *4A)8!i>ғ ,bb$tkP;@=tCC Y &(Gم@r_`hbhPn#P,hdr@=w -@s` @аЯZ>TڀBhC{Hzd!(cItp 0-hn@#j{j*!k4hFϟ~Z g=yT:12y_y9Ae`(C o:>oL, 4 @TqC)@4&pYy@Jz ?%?HP PϞ70zr P /KHhIo *UXհ@<+p5`yH~Xz -Y=yA| v+03 п !AV@Gm&M@XX[ TG?_zFh b6| do8, $<À. uv?pm@Д XjtUU,-Ph\cG?Ȯ߯_t!^ I̾ ֿ@ +RRP8 tC@$ dæŬ3{FFu`^&R>pJ.ݼɰajʡWE?g0>?D (/ d@ $*K+pa%0$iiu`\:`}VV.M`H5.Xa`8lPS [2:hk ĠFH$B@45"yԪ` L : dm:Cܿ@nb]&BF3` bP,@F&&7#Pn-8IzFFSp~`f_v`t:aYl?1_ 96pe,g] L1*/0c8L@@ad\v ur#DP & E=`zUe> H_aA2n0V5x0۾LdzŁ a~21>`}&7#vbflq`TKJdߏ((i7 ΂K `X|[ ^'>̰/fht\[CX>hB$UN߁ €ja=^]JIg?],~e錍dAPS> a!4RG,o><"P] jс*G" EGkz s$0@<9]P,|i(6?0.LL7@M_d^M1A@Xw2<+}vt 2hHav$3/p  P PL1nzR@g`-LLrhr֦?ͅ@Z}W:_35!胵$Az5545hrbhva_H)a@s,(?BITK:3''{ Ҧ3õ7~@b00 #P)@Ġ1nhM@f(?ȃo>*MacL %@s&pt Y!h 6AC@ PnQ*()1xyy&4?(&OPGVr@qPǼ $.z<=f%U ̌J%mPAя@![24Ъ nC| HC>0(@O5`R|sB=]Sss?$ àFY ;vTv>Pg6fwc?0C#h MgIl7PS3PV@PT!7)H3SѶ>ԗ%`7%Andb SM>'@mxPP( A/eS2a$D@'i AC AC*(j TN2rj@vBJB`Xn ?; @1P7@1A"c]l>X%#@BAP"0$΃B"?ρ=0fD0O]~8t. &lB3"0ВAPq* NR@E^!0 [@C@I/ ,,!2SЈ`G4jz`7N73"yC\-R} l@fؿf/; hG0 Id Jza_OJԂFA@C؅TPСБdp sNX,%͋xP57P,% o@} zb@pQt<P@11*)@*'.>c01=*AV qШPh=`Gǂu>|h+Hvbx C?t l@ R* ` @11 S@Ot xiFڂF@icenv , pC)BB^E-n`e>0#Ȯ?JrH)( t+ qt¹@>(DIL'BTCV瀵0rI벪 |""pǃh!HڗEi9rOYyh1 #x@7F@hT&&` 4Hh~X `T_a0㝻uf< < r &ö́xv"d XJ @,(=`O̠f2h 5 !_@<#RuȌ}1( 3V)0 AP; XpLnO!d`('?̂z/0~F;vffYvi|?$3˾H ߐ f_@OCfd4^`Un9 XLMj|F#$Ro c& ܠ7X27 _i5Ly>>`@E' _М@8gϠllzOO,}aAAv)!f7RQ* }}vw@# BYA !8 pOa+V4ڴ1``RBZ@3o133)Nb =*CeG >!r0@D@Gmf泟N &RB$03')e;MBLHjI'3`d}`$0320(Ɋwp\`QM2"-]#uΠ!XK @R26?ņ;$e#ۂc>::1؁},6&HvxPa>eQT03ѭRtcIENDB`Ext/Images_Client_HighRes/C20_Misc.png0000664000000000000000000001173310125245344016444 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<mIDATxb?P8=@`022UdnR @fff%}hI+@u?dr;@R^ t_t@0VV?~301ԧsssqrr1|Ǐ@?o}Tz&'0}… &  ~D%~jBh ^C @2@~dx?}l8 J 0I22lݺA]]A\\lڵ z pz!00QtX'<Ï?!` PL(]S`  #0P1<ر w*~ N23dfV0prraY8=@X=7G]߿@v82 ÷o?cfs^߿Ih(b@Nj`ab [UUm;\%ùsDZz 0<`iN Àr<>Ao0d(1(**& Ǡv44?2FC6_~bオ&L@KDD\(tI ;`rvCdVʰoV3g@(vZ L:_|_3ps3 ^FpA`f 7@/9@P?SDDL`L;¦#[@2vyY( -@IXQ d`aay7 y)Ae9(&@1}8VV& -IIa`yCΝ[I?VG|2`bQQ%Y0(t i 8,i cAcgy$ ̠2 RR"d!,~2ʁ=L>po>O$Pmܸ!..aٲ`V?z#0jW80z^|P&e<'@qAgJJ `gETht:|8@*V@L=z5ϟ__z N> BB|`π 0 ~}!@Ev<第A |13 p DGgK`Z:r۷t/4LX0C֨{×/?޿ #=\,rr3-7 0+|nPXK(`*!7ÇSQQ!V3.V={p'OB\,ԁe3`ǂ r(!PH܃π!O ,~98!40ܿXpHLRׯ?;ի'@ۻvmj(>X@t}`a`-K\`|,yb`;136+PGٷn߾>zjz:::)H @,v]>>~pUJRD(̓<+2AL~Íޜ9slÇwO MayC`,@YYC DVpL| ,ٸ0<*0@۷oh_UU `k .P1 ]X`yFxMK/ g_,7 l{v`9>,ޭׯt ++ 6@ֆQQ i``*,,z@-PkX/jr0_6)~>nnNp X *@?~gxP/߻poo5S@E+(&~Lm(bX ;6VV.߾}5@/J 4A%PuAI2T|oAA>x3&mɅ޽[ )@$ 2@O;>OAuɻwo~6߿?[͜D-׵@v.P@78V@sӬH/AUU aE)t ..5G={ S>QQ`O!268XY|/^PV/߁IxlMV;TT4B|>VF߿Z΍@1  emP~a.0@ H?<@=7HR6 o߾= $@,ܴp@0O0\tٳP O@}F) 5=d/Ϟ:4Ǐ_@|| '`J`Y'&&1!7 ')]]99)`9O>| e>QQQ`~QK@;iVӃؠP;!5=@f~ X*~@,8wv2DD$|*ǏRMMcF~~~'Ea(&@Q-( 5mmp)٘U03v_{f|X'\{]@=`dd0EBB|"@2xAFF\" 0O@"2t͔B6/kA?8}"27?ނ%cB PzT{T3{d._>ɓǻ@#\@F #qU}>$}vV>Á% hPO P 9&}HFn"J1'`C4<( tQ`=|_$}}I@E,wBy}j{ 'ZN:"!I/~sP  < XA1 J0?w*``6@_ '\zb0M֤޾}woCYiRǰ.\J@e ѧNǠo౥g^[>6bp`w //>nYYy`[ܟ$`"T<r,ZA%H7q߾ Nz$x+_bOa;;ak ++8{X_3@c{%/}TP~@3^pXBG!qH;N 7`} 4G<o~eM۷o.y͛Wnݺ>{#`I_>z{w@mq#/^|ہ@,ffwԁd|v;wF,ټ!bb& P03<L P+/~-0_]arB{<LnK^W\'`ӛ4Wzd %%@e>l,g)((/' tݽ{G/ DY>>>w݄6@ 3DADD4ÊK p`6I51!~E |-0Fx=@ ,y= JVhRU@SP>4W%)-rUIENDB`Ext/Images_Client_HighRes/C27_NFS_Unmount.png0000664000000000000000000000571510127240422017730 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< _IDATxb?P0@ y 2E244Ul@)fPrCWC @ՊݜA%~=G<  FV r@,22߿e@Y FF!|Ąć1aɓW d`aafx+ed<h @8=o3QQ k -@! 6$sG19)d 9ffX>} v A=OdwNNJO?`033٠fb,"y5!aˬ l _s-R ~f8D3H @axETƘǏ @n _L? <p(_?M B@ff4UP(oqq!` ˗Ox P_i`((ȏ8\ 0 ˃Zڰ @LMjB@v,,Lđ@$!` -** -kP0||r5=*@A@ >hI@,Y` VcU..L /^|6@x5gv4I <Ǡ **Bf`^w3|j߿+3 1hBVaEjJ@$,Jul"c׾ZԔy֕vt!MlDAETc (y V('իWsPPP`x a{P$Rj=|v`%E1atA0?~Bb T_B6@C~(DA ߿_ ?~?;\GG#e hb/HĂLJ#! m@X4XR A`VFVm3w h7#?o1Zޘ r,1r4q  a Úz@FJ_ y$ : :|z""tAC𨕒@A>HXFϟ?RiYʁi ^2zԽo\ @ t0AT0bԩed\p ֺ/^~HUG@|  @ ,@@|ZZ&?LqNP!~@HPVb}d lK}o ,hP~įUCz«811 X~h |ρ1Ojn -V`{_2\?CeUU r}Ry1wq۷o% F@?~Hʭ3D)p1_[ R82XnjL+ٳK>Pɉ>' I6#$%%ƌ` n1zՅÂF~cA[UA7Xh:*˧O0f@мHU@,$#OK;X=;e.`r;0ʠƳ_>3<v>\~f X%K1!Q HBbO`~[ "0 ?P+{/1Ğ~7H*$[_N@16IENDB`Ext/Images_Client_HighRes/C37_KPercentage.png0000664000000000000000000001431010125245344017743 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<ZIDATxb?P0@ y `ddL10RA~?C/~߿~= 2200?g05d`3:n 1U9 " l, G ,!o,P ڟ 29\޿{;O0(|a3Ë{oC  ؀!h7X ,dkoY}*-1+ûL 1?:P 4*(gf6h `+7 7b`_;EB$&&aV6`\C,eY맿ooR0B<  4EHAIYX-8TA[a>3|76YVjY fðz `;= ̸L?`8F#SjR7Ճ:PL2 b Ÿ+"Hpzpm`\2ZT * zu ?>~fa?"c 6ԌU l` ,M>~c`W`xlA< 6 EǏO@sEXQ= ``0lC h jB t; #,X9~2`RfcA3?@ ?~32(*(2hg3  /‰ ne+0ð/fdafp6p&{aVwq5!C`MX:] ) /?~ah^c lN? O?z*\| XCx* t7`ʇoXH!{*pG_>1Hq rrqc߿sY^(2rg`O['s jV`"B+[u.{CArOek֔B~fi6=^)I|гE[\:V?90}Ȉ376X1O.VF^[iaZ@#!aOM"%5&*S h)tﯟ?|c`Xr32(Y931f& ?kXeb&9iM>d95?3IHi˘ S^}ccsOa?)-n7oz $OXjL~qH:|UR~Óǯ8^ ' ןz 12}Š.Xodg}0Zc>}6~ ! JTA d+_ɾwg&0y3@c `֏n3{{&NHjukۏ3Hqb0# PS/420҉vZ1 ?:/aP}2|d QBLLs~x e r(31/`724$YeAecĄgw wefw^C\-fzR l u[~3;,/0@3m7dR/F`#WAybW~f``AHT(r6@{='3sӧ7o,YVbx/C580I #nɇp;5;Uf>@ǿŰ6/A`cF07(0g # 3hex7/}ɟ ׇmF< -dc왙>q8GS- `faeVDh c`b`p~!PeD!.Y>Vmɿ v}>6#ϸ.>p `/Pa/*w`,|b<(D~3H3;D @%''=Ƅ7~]P~wz`3B?[PJF29RDg65?+XK /@!p-d ,vkAPKbY?;U@|p`T@,l1Od@!2Ϸ ;!R}u&wM`KF6w"2 , VJzgdfGv^ lKC @V1 A_ ִfd@_b`:а3#O0<0<| q$NAZgXu?ûϿ>lg01@"2^((& X+f1| \/ҿ CHTOܼfb t,#N`^2/d > XɁ$Wl͚5 @0Q &P $6b`030K3X(13c8=ã {ҟ^3_N.`i؏V` 333L !6v`!.f`Adfai &Xq' K ZY?@y$!a1y>p0{X򼜌0Oo^s߿ހzi3}| rL , B | 2>~;/~0|ـiM(ġܠ. + P/?9X*31e-8t@/#% }`#×/~>WA?oFn^npR'@?:11x1+)0 2d8|/@Ϭ >X\}p$@#ſ. T=dҿE#??C530(Cn~2yk϶Qo?a7?8$Dy>y珟2tIL tQ^+P\x؁4@`|h)Ê3H?-)i``$WL pSWcxaߍ /5گE\߾}5b}WXמggȷ%(6'>}fTm@cSA6l@n =z$MN q*MIP 3RJIIX6}}]ݦk~opz j\ f GN(bRB P)m 3`f Peg{ӧ'IH@ͬ< Ü,>dPab0V!+,X0~߽b{G73sWy^ 6lch bpqay)óEoh4$ ,w20 o1}X%Y@,o߾|< 4\@4ׯ>32,?Ƞ,. k`Zq?Ç|xM]҆HF8sjnC.#U;u, ?&._>a`|E~[?{ *FO<CZ?($c t֝߿>}-,?y |1?ዧ ߎoʓ l|B4VyubzAIAFVa'Sw nO/3}~%ΗOh^{Ȁ)`WO8e|gVdbbfDd`f;={?lZ}n`1k`4˵Oyż2e~Vb ~cw ^\r&oG6(`7A6׮]c;)_bޒCF;b(?w~>;3s..7V<߯]` +/ƿO_q3SA#<bL,l_X]:Io>eX` q/!V  t|:IENDB`Ext/Images_Client_HighRes/C14_Laptop_Power.png0000664000000000000000000000741710133447036020174 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ yА@ yА@ yА@@MՃ9vrDDIk#g_ QƘ:7a4^efNJ|Etqsu/@,h-8Y" lX9~102gO ߿}`Ï|ӧ_}zׯ~} 衫,,,ׁC") gygaf`bn ``dg``ee``Ў?~|4{ٛ7O>Ͼ||?;Y r<@X=/ D3|AFHV6V fa`egd`:?1͘%،@f1}F;wn^vٳgy?:b=@Bj0334 vfyYyyx9؄ED3 L +YX ,F޽{p)0ܽ{w0?U? (%P@Z$ 2@ ôiߺu#u>͹B3=S ?:p[[dJK0| f`pE7ϟ?zb H ,`'T BL*@iT`Oϝ;llaѢ 3fLmR {Ν;a>@a5,9Xs.'v'8(_EĤ$%elQy/^ܹ ` bl~߿cy ;A@ U8XHāE@M,?=󒉑.#y` \K?~JKKP]&,, 8ʻw  ?v$BN>6.`}!͂?7o_>2|}y갳$bFdjN{@z hh0#VHJ*2i2HF.V,Zb@/߁o/~2yVÛ2/2|AMM̚AGW_ͫ{ #TQDI))_+;'k;Ga!vNH @7P?` -~C'y7~0|ɣ wnapi>0ӧ޾}s46@,? dN d``Dif1M $"jZb}X6ձ$íw<˰{ M9@0* {TnT 00JCH 'pf%U!hLL\v/"͛ vꁱ~ڇX UU!ڔA]>d`~I`"b`R fe>p1; >y2j[f f3402r13(;$$RZ_20<}<0c`g`e`zA0(fO`u+`2z0pj1||_@eUY<P>eM$$%Kl$64S2m]{4"rg$#νx -],龢X0z/S7@Ψe"{08cggmI-̖L TK-XpcbWڟ>(2p@,yq?4`}bx,3o2 0A 9g00j1[ R`p;@9 X+_Pj~c86`7_"0VRꁡLjd~{ŗ q #!=F1ܹa6)2̼ ,@bd37_+o߰ z۷e7~AW2H ^fP4| '8?V% UY48>pw{߃+ >`v33߿f ?ˠ>uln UU7+" J^Ю+0t~b`عp+W*H%H92O ?I`(ps# O-.`WTXH;+0A/o>;jTnVp÷?=?:a0Rs!Ú 4~TN  ǶA?ƎUSӾ00 `f&)W8Կ}plܻLJǙ`s+@a/F3s0Z[d3*ӱy#C~>ע< n~ + #// /AAX|UX~@@A<T2ܸ7Lr?I!ymd(V z߅嶟 z>A 'Tطas>/<Y]zy#f&;&V)1qsh{ Lr`Zva|zp7#X튇k`ǿz}Eh1331\oH@=}/uLo`!E7el100,ީpWA% A?#X4;71)K3"Vknqf3w l6bbX#/zH2Z/Tz?@%ght>[v03\ &³+ RRf*%+# ٘!pWV[5}jO6`g3fV^6&/snTykopTp+;&^aax|{j,,j||,:.2+0HƯ^]#vdffLee 0S _&N,Qv?{Pf n%Pp`8̨%;zOdcfbYu 6zHߟ~ddd@l pء=O ă:G`[A "43|Xbe`t@YX # @+ l +` jabb HdZ 6:b.@xU TKqА!!!0tsIENDB`Ext/Images_Client_HighRes/C07_Kate.png0000664000000000000000000001156310126464474016453 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@C4=@C4=1A (AlP|_\-VDܔ"9$1tg5ސ\z}!q\˸CwiU#p p 02v%cgh`h 101] r #s  !??~ՃԂ԰031a oHϧN~ h$+ꫪ=;k-^~߁r ,PP)&fHԀ Rc j/ï^e1a//ɉ {!E%18~`ia`d0`@u$C O=3 DLP0ρh6vQN }rKUG=:t ςbzl20#V4C ? |(^@(Ëo FV* VB ǎbx|06dP%#`A!Y*_@g0X2}|}77/;Lg9C +3*JDbXluu{99 3`c(h )Gc;.2ps0H 3q8#Zx'~=7D :_@1}$t8>C/[?_-U@lUp/Jh π& v1HJ2"LFl < ( !p52*H ß?VH:74v@jc; bDt̼_+KyQzSU=dQOood`84-@1A|uo֯dbbcsF. adpMgRd`Xdý8!E%(A! r0  r<(A|#×/"?i g ʽ Ҭ /jX͐WڄỸ;O C.zYz`c`''" <@0i!`pu1NB=Kb0_@7>߁z=Ȱ9!\kCXvg6j~ }bW[ȔApMz߿h 7g_D8\ꀢ06I)NWa׺} <`↔L?,ۀb'0|z{;1``y8!uVz&`P%~?f2(p1+001( ,߿l<}Ǩ$һ | _0eyKpLp=7f6FW  2 J |gxp,g`bNO0|K*z B Rss!],b X2~; %Á< {'Fck _[A "_^AAPQ#`Q ?4/'(?8l@k0|;wWd8s  sf8`+Ys%H ^cppLJZ-@ g@!{>l;̺,5؁0(778?ppq037niPӄAZFC yn>o_3+\66`҈d/PShX'İùoIĽUPĿ>rw~bó *r@98x}x (" NF?! =lXa5HCXb`acez ۳D1a0HZ$  ?`p`*?îiq b8J2@|?ߤ=z &.p820v7?/çW>Lk `2zr.&}ܐct V L:rX/&XFW7Dִc8q >8 1oZ !}~3\}X1A,3pi ,DANn)pb`x>æJ'* 2g3+\K`|q `8AaotEkP9 @֘O[&>4po ï?"A3\@{JP;=$ )a w30˧F Qߟ_H+ ;ֽy參e@W X0KǏ~ ?}`Ql X`..- LO€p`7l!Nag?dX<Ñ+_cP)s' @a;OO?0` +*Ao/_^>z,b0<{xATRAXr1\sئ +!ki‘aV~-+>0%1`ȩXb`?X|A3M+w-[Hsf)*/`@˰prJ)= )L@1a?}B??^\.%/ bMa0 af55&N! H04Lk0m "`]7Y9~~~`BDׯ?+ecYat`{`g"2|!)efw3\xNg2<859{AA!!e^ie'OXE9(>‘בOY^ .-Gi >X k;tA Bb2 & y NJJ r2 0923P /H|_ >Ă[?ؾ=yKIE o1p-PE ?֭W Z 2 ΠlI3p p_A`R7 AR*Ӳe@0@s?y pzׯ%wY ?yϚÚЧ޻`i -%nrC_ 1K-`y/"" t<+dh NAXDNÇ3b@a.b<@xb7Ж=+(+$B:B3*_=#u ؼ%` juSG1ddE44=ܣ'^P2 4@<<+3+1<XbatAcr1@;X1r?#bp6 58z`P)2 &>xw>O ǀOn08Y Xi_AؿAr@(D_[أ ?JB/~\{-\~fxl>W@Ml&Ȩ4g4A.!Fw`k:1A0pUMCN9D_ɳ ?џ/9Еw|A{@1s4?x2$9'$/322󏟿~NP_̍%Vsr02000Fl $ 7˰o_U1|ۼ%@R.W7Q74ge`ced+7/n]O{ {9h-l9^}gdxaqn^v`^ff``fx@qg` d+23h2^b@(*[,'YYϔhw1΂*nbz_dMVMLRgVvc``y) H c@z'PLIGኸܷW @Z9;$5%گ$@WrYU%DŅ96s5Cʛ߻K%qs31D:L$ a1CQ!^F` D?~~2wH-t(Tf.pt? v@GcYǧ6>^`#0?_ MK ̬, F66 6J_}ZO9  `b ešId`xá&!"⢮*: L3# ߟ9P@=Cbc01{iK33eBV&$O av$B| Oe5ۋ͗ȷ@@LB?~PWez7бLb_@{dJ@b2w\k}h3ςR+TpS3Rej&H G~0^wo0Yz#0i opI$<JR@?@Gb J>.&!H3g0)=~? | ';0YYXYX RV^@{/3w~z?w^} hBgłN绕ʇw_5ucXc`e`caF#s)L ?cxןIM:@o٣n~OX ;W93333FpfgV1ex%k~<4e>j"`qf(H3Sadd8}*on}U3W!I`?{~3h0_yaWwΞfX 4k+gpp1% y9y' ,ex5Ë~g+A@߽cx.qy|r# @C<@@C Gv0J:2 iiyV>pmw ,d11wRgE`^|6cK=jz g`Xi+1,:;A_ABב܁ 'mbPx8iF` _󅐫:10àի a R^}1[ !<@b62Ѳ4s.77م#?:ΠK׎itf`` wk2|6^3bs! ֫+ b kgx^m@S#Cj)32$GU]'`,ao * bYY 2TA÷< Q j ߀_1T3JF129:W ]@rEΈ_7{j`CĴ~W__{s ׮ f9sP~B@+E3/O| - k?1|AQH؟ee6'.z132q  "< e#G>~?1\~}AR_A4Bi,+ʙJ 2xseqLؿ _+# 92-%~: =T/+(2pXSAd}[@!2 RT>ֲ`63? m.P&X;t>w`b0Pf"T1!D X8,eD|,LF @O<`O0ˑP: j=¿y )z  @=Y `fc`x9 Lc6`a: L(c9@lN=y/ 7,1q0 p`ae#A@03ǀ009xpa&pA?5$ KiI@p;1>.` L>!?$fF!yZ(0_pCb`?@;y)Jb  K2MVa>ЇH 1?$(/{fr<'G`Byn g`r80j&DP``pk﯀?BdOPðΕo=>1p- ylHR0B?Z @?A"btw ~1 }[#eܸ`:X MBP0PFHkÓ(2@:NJ 0qf{Ý?1| LI ~l+[2?+8 q<R)Fc(+JA1= 4(_ `{ ߮ݧޡ`P-fWcsffֶ@g;4.|%!pL La?2|z w{ jć@v tr8 '` <+3VGz7>} F u)YOJ \ \< , lB ,\L,l@=L?w_Ar}}h\6 @3BkHG$ajN. t S60_tHtP;dlr@UyZs"9 I|v8d_wl hFNIENDB`Ext/Images_Client_HighRes/C04_Klipper.png0000664000000000000000000000626012666316724017175 0ustar rootrootPNG  IHDR00W wIDAThy\}?9sAB$('LHI '8IAA  $ ;@(*s HH+-SsfwVjHQW~fݿr_S^nȑ# FVI &on?φ ֢= p < a: :KUd'I)\AR\YIuH!I+\),9М|_c=vb ,H?ޖJ}n</BD*c$L =L ]p]LHAz.ȄđsFR 4=7oϖy&;/$v}Ygv 8:ENvO8vO8=`OL~=׬6t?\ uV8LKAOnfשgk;9AgdxEN KlCn= j*Va}Xv1 4ܤj9P>ߏͅ| @kzP&R MC PhN7|ف:w4L"j@R[?8?\LtgtJLkm7s6,h'VJ!0Eo=_۟!㛟E_y!82242z<,L$TJtn8N~qՄZI j{fO|F .{}j\`0 nʃv~pB52!:p\ g-Ҩ90NͧL1׭%GD2 vq;?AA8d&~(`IT6*5)>&}2g ӳW AžeL#/p*bFŤvCf .^|rlkas+P[+dB+ԲV(*DAJk0cR uTާ9AHPF=0..v.u\/=t]].²0Y @h-a.#82۰%6&LU74C;rG8⥙f\+o$"?dft$SBa\5&Jm(u?hx DziMV|ɘ1X1̇}&xWwf[$롅Hu ʦe4Pr6y+i탎BO<oqEM8ZR`ht [ڨg#V@Ád>B(d&%V99eS?ӵI .XdBy{TSi0W6ʸX=R  l♗RqS77^& :;%@R#Q#"q0t& *k6 RF6 ·k/O:ݰ=?-]}PReqJ\K fc 0MM&8h[y[؃e7|jN8kK$t--HBFOY*X\@%lP#4R>kt',-ɷaOZVl;7؋.?,4l%O `\#QT#sbcIa&Ko0zҵGW] rz\7#ϻPoXYjr @cɌVA'ʸW㕑?Qr Qk,[><%(c }0~ϰ=/L-‘B$XYW5M-l.ʶfU:Z9{z:vɟ8.J[/e6lZ "לG-۾GTVtu0}JLFfT` mnO¡#bu$W՝2h\15b~)O Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! Ext/Icons_15_VA/0000775000000000000000000000000012606740430012266 5ustar rootrootExt/Icons_15_VA/KeePass_Round_Keyhole/0000775000000000000000000000000012606740430016450 5ustar rootrootExt/Icons_15_VA/KeePass_Round_Keyhole/KeePass_Round_Keyhole_32.png0000664000000000000000000000340312567604066023656 0ustar rootrootPNG  IHDR szzbKGD pHYs0=IDATXåkpTl.l$l $XcCc(f+4j/:m:ъҖ) 4@:t"XPb.HLJQ-hl.ͅlvBJjߙ3sfsyG!l`zhnh*p#C('Dwf& 7f]] h+eȾ}VtK%%#KG,ٵg,ZDt` HEE-nːߔ^!W{ti6M>k5ѥД!S 252UUӶo΋/% Z`i`X`)Œܩ*}.="r5C'pPr8ڵpF}3bɘ?adXtO$ +wAJJ6ׄ@nqt "a#O)$ޝ 7+Glu;v%Pvm:ښhku|TuEĻg}ߠ ߹EQ X@? \*((7FM~iO y~[[ܗOvW.OCVC{71X0qMY9Swqp4 jKlPC Ңe|>mG b37L! gt.d5=8 ~͊isIHL( bzj8xX6Vpj(5h=i۶?z6>eMKhBGUk[T nBb Uˋܴ-͍tcJiASADho ]]^Z[q:྾^7ha:ZZg;]NsjT)\>2֐@Kc͔p玥px[ 3)4qII%p(U`x 2SDtfkWN"g~"5M`8|}EFvw>Net6n.ℿJX5 {{İ|4!{Պg1k蓖yy$͜Gq:YWwrޙ$;(ʢ{GJТaDd&8Y]dض]%h_Q~|ZdoD7ܡYbi~7){@͔@ik;N`2wfơ1u|'3tۯ0 (iB6nyNZam]:C€ƴ8WB;;ݱ*g chzx` A!Њ5dD>BgG+Q~PӁWma4=T@n Q3!wN2oGR~,9Y$~ȟI #鎀IENDB`Ext/Icons_15_VA/KeePass_Round_Keyhole/KeePass_Round_Keyhole_48.png0000664000000000000000000000543012567604102023656 0ustar rootrootPNG  IHDR00WbKGD pHYs"": IDAThŚ{pTn"BM( Ghb;0:jqdjGNU ( @BB"A1 }dwlОMΝ{;u)}$`0 d@=P T'$?%춒*F\0rdGzFjj(^oc6`-5?EEHIg [nV + CJJA%,vȟWUF(j9#`z_8! {안%1xϒs7XRhI_@ׯg{?sa|\z Ά,..fݺg0a"B;`X5DT>Abji6.ϝ~}]\xHsݬ^_DP6iBaK`i19hk\.~,\t.v#"-@Y23p?@nn.7UW]# ānYuZL3/4Axׇ}3f`w1zhD A8yx^kfP_PVz~5e0 8dwޝ;>dܸq@;?};*/eʴ9*||;s܌Tq46wD)@m\ƺn{ز psp|W_ZO$ݞnu{ WN]lGw`9($ &~Xzj-Z#_DkiZQvx'2eh h|A!#"ۻ {[x H)..f0 pD:^6/,3oN#;7 [wytAl8Wj` 0XYLek-yO%lxXJ:*45ǟ0 l{iˌs;w^H>^Imͩ8S O}.l %e!_<3gǫ,t+WƌTz̙N&ֶ ou-NY dJ xI޸{2{tu*l4q#@>P p cMY'lNn w#҄4̝D f8k~p',ۖ%,7,Ek#!xPu6xs6 pqfmۆwn[ΘWv?b4f^8ax"lɦ2rdaN #Onf u}0r,&pw ^)8}&bhXbھD.Onwo4:_64ٓ3׭a[9o+wx6i3 JC[ūh]]0M{>`=sZ&ǧMfeehXE~TҸeFiPUYݷmpcfk>P>\O#`@TFKFn^DfR: ffbYxe箎%zBSa ecO2yۤ/ nӝQR{>`i8_XW:{t8 \-_AD8i*R] )г I<0-Y3H3?֭//!9#QͷɲFǣ?hOo@SuS>!,»M͠|7c_*+;z֋q]h[Nd/xC\>٨%)CQ8'dtɤlX{vmsm~mNjvR:0tpοiӯh嘦+ƃ],EYA~nm'5@u >KJff6C G0xȥهnU?gpxy'XfD:gjGk$l*[\9hqݦ-wPIENDB`Ext/Icons_15_VA/KeePass_Round_Keyhole/KeePass_Round_Keyhole_256.png0000664000000000000000000004072112567604154023750 0ustar rootrootPNG  IHDR\rfbKGD pHYs   v$ IDATxwxTU?wZ2)$&MJQ"ڷUW]]϶֕JSQ)RDj(!B R'Sqgp!{$9\&-sQjr[ hd4_@Z5JA[z$h}@Ϳuhk+A6G:iRƟ#3=[l481[`9X , d&>s/mRbJ9~l|:^WB3`L֪LfK|ρN2;IHnwuiJI( ^j%\Yj6u%Ͷ2;JEKCw%-cs))EkV%p-zEVB l`mpJD%x.8!!]ѩs'gѮ]Ƞ] HHH 55ՊE*>ʪ*PrqQ(/+z!Oa^[xkh RL-8bѫWoֽ;]v{t옍hSCG#5FgB,`{ٽg7[䑗];Z$g[7j" 8-A3zʠA9_`'x];wD2܅E@ Q/#aW׮]y衇>Vl6ɧ`WW"hWςG|?S, B]P-CE`ʧ~={vT~\/ȟ3;s?p YmV^`ʔ˛~@kshkw&(dYhkEQ gs?~}/uAp5f¤Ѧju)S.W^!333"*܂zz|6VBFV zB?R~q,i8mY[:X`:at:_s=GRRRZ+xM+NT fU9Tڥ+aW^Cn=X͗x4 ?:tԩ׳ٷoo8y@5Z|i 4 x)n԰S52O*ң>Ri{ :ep Pc-!+£>s= 5: 8%-<8XZ()Z\|Ea劥vOB?G@urpӁKgu 'Cm臶hdI?cǎ ~OP[/*8@$V=dY lCmP%hա;N͛Ǹq#s3?_WlepSB- T#Rh@2 h9sW/:Ȧ )س‚| >#t&Җ.]{۵]3Iovhob.jr>2ohq6#2waEQx׹[L/Ջ">U˿bsYz)C[[~ qcMfؙbQ1 tH2zo*3oƂ܈Pi=<ȣ!_[/0w0W|,J#ӥّ +~JN^1~XqZ6byQS&u{r"^ke̙  m`C?X,9"nASkdaʇBZK0 |6ߔ=w< ,p%FJ_O 7t؋ѾCnxMv*9I]1-믞Ī&-ƣu]P0]v/0=W{Di>/o~sl[Ksp' >y #~G(JLCGdgN~ƅ]Ogs(u0m0މ,]Ç?e%?e巋h:}9n_Wj:~cs\rv(݃aa0 1{_~I&T5W-_\i*) ߣWߡt-&mvhYNm( deuSN.  g-txoJwu7?l zo.ŋfݹ;]{ hA *U:ai,xC PI16mա- Xda1e˾=eԺbyYLe,E{̔n_gv9x*r2i,y֛M:`0% Vrr2 ,43_?֪[Drj} Z!On3QQgo 7n-f7^x)[/=]P]zӵ{VJM!U7w۵ˤmZ:_/Z`6I X*@dyʔ裏L j\~yx& O"9Q1?@Ya.?&mKC`Xo&Æ 7 ?7iĚjk*).Wڠ,8TkG-ب^OgMґ6⑅c09+r?1 ?haT5",7%_#VjgZYL 5*?l7@&_EMNaXE+*fvl۶-6ѹsgbJ4C%eef7Vtz?;9vb;t*+M|UmVq'zbmVqV,XWmM%b~{NC ?SRiӶ-_/2?js7qꫯ{E;jjE?rK&x3){7?l3XEāNϚM8mV1S'Xxٿ_"&x uU𥘂_GU6Q?w,MrOeN3mht=bֻoZ8e`n_ztk&I-2 |w}Xm6CT#b~xs2TYKYO76e6YoSec^FަMMuPS])+0"VNn8;0;h{a'k,oHb~;䡤{RSJj {3B5 rgZy]>>똊%?V w勛mvTN2z`]4.]ߧ <^ p&%KJLL ^*}'O9 c>Tr޻SnI_ 一?yut ?5W5l`ѳuؑ/d~4?2gKJ7V /%+T9`Don~xs|:vЪ u`ٸ| f \i 6(L6BۭHOoOrr?)-ɩqz.ǯj m=rC9 z~G~Žt3<^bnнGo2g:10-誫2?h~~ 2* W3붽ntT3l&1fW\q!} ~ :: 1q ?@qժn&_vMuh^pFѥkW#M/ q6mڦ-ɩ?*.B[b[[7:2f|?ۧ4sÝԁ^j3Iqkb%w7ʈhI c9%L6skF{m\/:3fb=`ߧo_z~{$qtwgs{ֽܺ']tDߋ.h~@#EaUǝ6E{As\;HS: $@D jhcM5/^4_lh9nOf7Iڥr00nD3I2cN'g}n9 ?%Axupq$$$I1a51ct:uvK^Ko[1= {tLbjN ?Vg;Ej^b,b &op퇎Wusc܆hqN042P]9+?~a> Y'ѣH c׮¾n054o'Fd9 6G"(}F0Is%^ vV㙍F2x餤+?BhzMe m;߾b7{u҆>}%3F|B;سp&agt"USu`S3J54;`x!aÆ_xT^{6?<v{BH䮇ft &-ݻ{bIMFk+'i6Oi3igA>asVrr}w$58)p{%Xie3w |k)/ LgVmAo8ϕ9 #wou/C>P2'x=n36[6,z΀8kU }6C@:r(..b(S+MSI#/$9]4  w.TUeH4zb'Y1ɮ.] G ~n G (9o < :n%_pp{rJ, ;PX(9uÏ1D t 5 ? K%Q IDAT?pFEn9f yp3rV3$6[l u 3pF ۙ)a222u4$&[Ĕl۸ U(/сDӼG2tï 3_S}L@Mu7J P[/tÏv uki_7,5UH ?@K -ԀL jT  "*BKEv nڙ2t AB*55U76  `֕x=. JjvJJ37@ C7@ s_^ZL!]H:&9g n?zkńC6.G@׹^S@dbK 8 BO?nr@'Z? c ~** 4={  37"6E>/[VH?JK $E7UUGMbYYL- 4عe5Z"훖J# (3^ee*? [6.!["0 T3R `xҲRآ)4UG~\pܔ.jU$Qu52nG~DnilV!0Bo۶m ?A xW`ebŅyTWJrlعccrL6L۴I7DEF`3ՕbB޺\&e ?sl^`ѣ_nAH?n\Lsjז0/vlۼm `ѣZB7M ~lߴ `?LXHMRtfn1- z6RUU  W}^vm]լP~h %as?O Uu%;󷘹my@r>5k ?@"wUWMsk϶o%asrV|fn٪ `U+ %I~!zZvm]*1)@[~hdVV7vB±@ YA[%hm"|δD7'(xiG ?f"zW-{w" 0lz: _WWLxrvR 5"~!  zZv7H޹v^j@5/\~DɆKO K;!pR <6B6#ۥ_M"186H|P7MHMh[|>D3yzXK3i# b4zdV]޳K7X%&ᯮ*-ܮjs{ _g @'ݘ,4s> ?@SnU$*-M{-s:guyfoB= 2z?@"Z%GhtDٶTo0 /_ϟmT+|BP=kH /l[" hj w7EaԀDC{~2T 84CJ|<#nWHOJ_֠ۖIsCz;hp&fg6e_5lonδI_-ؾTD58}>MOi.gj )A!5"? m+[Sy䀄+Nh/eV5UceÕW^zA7rbKp:jZT[ #yIG̷_0Pjo Gud!-"o[ߓVv,7s:`3uu%sfe6T_c_DxtPn]ܼU@<; /gLup^7s/?quNwLv* Kz W*>z~'h̗ނWizTnxF&J1Y: kG]V_$.4?ާ~3IEPr陧h!R `%F `@'Y6C>٤M1g)j|K6# ?uoQU_\ß`a!>3=;&~шlLuF>x^ج 9YnjP_wCE~\pFI C{^?MH\;y?A ck h+վeq v3OK4?oQo$/[".]3v_&# !0Wb1}ވ6?b^~(5IS=.jؿ{ձx_grҹ},.21Ng-,6(ݳm$$X9\ߪ ޵qZH2J+3;0Sg|f??DX ~m_.4n:>M1TWMc"~7 k;o~Z݉VrE8b~!ӝ̱uf80,ЬfK~cdSNS ][ń޷ʘC L2 _x4̎V-oES.1aU1 ݪp)V2Rl\]śh~mvG?D^`(Tsi0d: GCIڇ@*/2,_Zy_C߹,f'3'OGUe({KT/>>6@:h$Z1e%۩*9;eظb\)?o.C/0]塞!(t ?t,~HZS;,xq*vb_DHha С}tu JLPZ="ՀXߢҮ0B;(+=d6)KqOeUæ-7_5࿙iVN[ƨ, .=;޹v?%|=/ r-D[ؔݯnrlt˶>c짲$F L4[yCIoІEpہM@ѝjp'AKpj(ڳ́h4zH'mzդwkE 脿ŃzW[S gVP"~r-/?O|J_)[OQڑ9v]>B?| C <^<GkT ?d3m̘Xh/m[?tdg7p&D0X?ݹŭӮ9~|N63$H%!nKۚr~C?%,ƛ=1ެ8tOPh*S^ږdb]&ÚFu.&`bsc0 p9}{ٽ{'/EQ ZdΙ6*}Թ_¯v~zY=< ~3?_im`f}f1c5bEs{*uB/?%=:ٹ68s̗Cg"F݁!frR:ds?VQ:eڨTժ~ I+'nx֛3M*aC~=un!o'%X0ɨN,J5N ֯[ p-@[ip(S>C_p{ylƧJ[ \tf2IJfo q=r`p퇈X*[PT]UɇfՁA ?բaKG;5?؈9WVTKn s_s G*JÕ<`k%[N& $&:MXURe.{x%QWg;DN]G~z~|ˏ4cx0.o~70,Pu;9PG~E^9vDn ߳k?m[և+ -0k 75h^(+=EJj*C1X$9-̱5ێZ@p( 'pdDK;Ω,n^jɀ@@opp _=nFYۥN{{FM`DR-'MP(/屇Z} Un`m 3\lՑ'&$g<*(;=KxѩSNXo* :পVH>KK0g%v$/=|%>8s0f0_"R۴<-ޅb1 S38zQEʮnuSY%m, tɲ55z;, !y/QS]|VUҚ`j6'>3c`0^ K{8|矅{+ht{8ksp5ٸHBOi_o? EQb hڪOONm;a^/=|~u 0a^S~^HJ;ŝĈg5u*JP\Rzć+Z$6BV,Yvr;IMRNUрq3WyDq 5 /;pfp$D 5*>J+}qFHU I mR-XLѡlXPzX8w/ E,:J[>9F N :tkaڢ p{*GkTj]*.7ԺT.O>8VvZU!1BR3BC!1Q!-JZ@ݑ_UUc#ۻ+U> Ēt% .R'٫/w ^~56E `x,y/-ȏd: KĢoz>#4i?m%QO>|_{EO7EJ@݇JRRpur˭9?(̷_GDSɋ8? aaRX,3ko '^vz  ~cwKXŜHt55hy62`E- CJ4NپW^u3SF%&/س?xO?/eWЂwmFbG=Цg^͓ӟ'_e_G$M_|`,/|+\;x3o+ Wrҭ{O ?wO>|5|k#OD@v<J~q]3fy>{g6qukWj,j.w59"2!gʬͦD?ga؈ v))mbJ6ukWnr w+넪/"Nŭ=Z3#G6OLjjٙضy=k,gghkA>lQZvA~ݧ?]zۍ9}b*Jh/EEۻ[پm# wcHh3Zl-( Ne2ZpvιtؙvIO$-i2IKoGRR IZhRR26Ox=jkkk#e9RΑRSrp?[˽܊^~&qЭ'.Zp Cnc[\OBKI>[SYIDATC*k۷t+) B ,k[=&0HfOh)m& `mZdvjN ^%\h5/"KЦJ`óy/fl&D3!dcߠsN,BEGL]Se4Ji!Pb$bMv.ʼnmp? Ғ4Q )&o_//, @G%#0o{~ lD*m"NɆ"`` Zdn@w m=n |/% @*%tD}o-mA@oG׽}m2vZA-h#ǒ]ӓIENDB`Ext/Icons_15_VA/KeePass_Round_Keyhole/KeePass_Round_Keyhole_128.png0000664000000000000000000001757612567604134023760 0ustar rootrootPNG  IHDR>abKGD pHYsqזIDATxw|U3榐jZEz (bAba-OtW]]˪⮲ZkW\wCD$BB $Hn9?p;3! 9אeμ?sKn\vCUU)-IqQ1śټBV^EݡC-~߻O;M.f2nٜ5nv:6 DFZS$BzŋXbyKZ 78O_ssNl\p\;u*g}Imi-cѢ||nws?|=l%GsN2d(SNeʔh׾}#رbxݷ{hk~ 'cUv6W^9ӧs''c~q>E  kX`ncbʕWNaƌK#^G_Q TP@dYB$,ad~pQf?o+B>pPp,*:d2qͷ0c t4_Qx.wU6U+I`1X`1KX-_anAv.'c[j8oYLH';{_`ȑM|EǫxE(d?t6.lHN0R^9ׯowƚ?{FVmLOO硇bڴ0Laxnˣ"w $ %IMI2]UU>`.WVs??7]H>7u%\ٳi7_UN<*^X?򝾟fDFL EUQ{:y_}}]췔ij:!Mg͚IUN!G-i)2Y,$'I}#+̸N.WSg||*q'`!nݺ1w5;S]'1Se3u*_)ؾ\o]wēK]2y%뤥.ӭ6 ?v&w`6KTWȂ7u1=4MdM_nի z _U*Ȓ a=v#f3q:X˚+ng[+^K;-̯FryꩧWT8T7+`pkx IcݞĒEMFEBߺwagL>=߭E v,vDriFҵk-od8 #ҿ%xs2u ׻NЄ|l^Rkcj (?y ={aό&YYJ/"^;U*Sj֩TT+0a6I>}OCN,v:|^ V,3gdƌWKEQ+Y5YΖ~]~%9Ս=OdyxRF~fI ca׷<ģ<TDLv`Q[Y5+Sm_Yl0ԱY5bdalM3i#(_7_atɳ"!oٳ'WM6Ov<|4VFj"12"#5UU{pJwp&ך@0oдϛ7ݻ|vܮ֛8s],I)?"b /ZZyΰQUEP[Kc3pœ4 Eܷ_ǦGU|"8idD z[K{BNY$'[#|-ckޱ\r)O<6||O~4zK~D˺5{Y]s#? :Y|F7xАlڸ[tG~lQ`hܐMunq~e>&ODu~Qd[kHm[ eo?p++1ԓ>wè?3ͻY[EUOM~ jddSIdSXkK=_\i$raÆbC` *jl;vl PhY6|B?md?́#I  Og/.G@wBGL҃/2=&{_ܷ^:|n }@S 2Lf`닁&)WѫWwE߇ "jFACn=8KFu76% ='`׮~pv]1=-륢ZѴL)Fe/k,NZgunvMO61@jZfToqӟAG]n'`tcZM0Fߍ+#C!yU5`&]z%_';0Q e]t·s ]nQ/(BPX| \8JVϪ%vk`BctB)LŦp{Ԙ_z$9Rfwp7}G$%%1`piЍ;vf|7"5-N18IN͌)|!^EPV4S H0Z1c  ?-kNnw:!O~] /1Ʃl+Ç>x ײٓ1φZ1Η0[lq_( 0x(F 3r(Vf*Hgjn^AL ȭ`2YoosPW*zQ<@7v@lEwfv8 =b?VDZ ~^ާhzW6@[jfzEF:"f-]{YoB(> n z0(K2#>h_*ݫP|e^6 qZ3q?G'-|!@i1@+>3Nnolnq&M>͢s |zN82O3i㦷_Q4u7@w 񞤤$AEefލurUUVu[jf?+nxn=$.|՟ v/v29E/{ nE*p*{N 1 ˲LZ2TC;N˒vn{gjG 9Bm<#^3etBSR4g/6*^ ~LHa5 @3O_ݏ=7E 0i}^B\n혁4:`HML{ _(޸ x%M%$N5 %5U3V_" 55lFK8zh-~6@T~BPaY|MȀBwk5Wג ~]]-ۋ׆eڜx9?vAP[RW0Jy /N8B,izn{tɀBkjƟI %|!`㺰% 9`. hWxGH벩ʽ܎&&Bs,MRT7DؽG7V+N;tUEav12MWw_׭eΛdBlVlKT [6.KG .;3f/Qq%߇ApS3|_GL&Nhg|UmZJ4ʮ-K_0$i¯})Fat"p_ E][]kV퍒F~׎fЄ/`ӨһZ Vm9x5M08׆&E~E͂6ğ&!Y~mMS&bzT|+!253 Fifb.tR`TU"#UfOuvyhWwM%FE,/x38g.dI6&~ۯ4Xp8|Hu41M>y_}n8׿ DDirY61j!.dVDf6\vw m[&c[}ܣSFl* \3X2222tf~YK{ Nߵ/N'=Uօ{ щjm6BzC'eɂ۫RY.<5bJ!Me8y}4 VG}->*I!X03ڵAC5#W$c[3&T*x|Eq@9~i2%d @'F|p>.njt$_k{3*1 ?'٢i 7^~gՔs~W>-s`<;G*+;<1ė@`Hb!9IG9ۭ2r0iL* _UM5o @)e@=o"<mo<oqSX>:Q`P/NqؖR}D[ɏ@-:PJ.ټ; 6J~ .Jz>w .7̽w\ˮ&ZsրfjETs3Ejjk胷Z >P+aeU5*jrŸNDC6/ݷg3ΩT ?_4wl%8ϝ0;j"jx~+[Lk_y?p+&I~0XvVim&_uP/+'Xel!n\/c5|\8[T5x [8I1xHCvye yUJ ֚ٸ:dd"'BNE39`vo乿9x@ ؤbd)WmwY]6 _PRؽOZaOGm|gof"3D&;jg ~^<ȁm: \E;sba+37l94pNpj:]>Qج2V&,yKKWVh\VWb7`7e+& &^έKnG <ģ_Tk~qSMs=͓h1 I9wL.:23;%|֭]mɓ3aسceS9m9$%%~}!-/?}ey6/tEJ;Xf3 `ig1q >QpzV.˿gy7._k8-$ GK}ޛ.Ȳ,PVVZĎElR_Wrַ+DIr0#+bRVY]I$=-6{ii5ښ*z@6?ݱPKU?B|δK3KW`:D_Nf~gŪOi~,ܵ^4ēg?|$~~O#gPq?FYfITuDb~f5K9j5|ocB|W/74OixӏF4p4̕Jדl4)M$?aM[?S Lǖ~sߟJ5w mBvVg1VlX8|] >W^~ug #rR&F׀𿦲8';S]TWղ@o_>IENDB`Ext/Icons_15_VA/KeePass_Round_Keyhole/KeePass_Round_Keyhole_64.png0000664000000000000000000000751512567604120023662 0ustar rootrootPNG  IHDR@@iqbKGD pHYsZIDATx՛ytW՝?ﷄ_B @-!P2 ((::j-XѪqrTX;RAP (;,_BBo}o;{{?~0G0y0`(?Z(N@=q@2ʟxzP~'>R5h%m_@n^.cnjr18) $x:tz=w *˩(CUՋN?VGVFF|kn 22T?|UӧJONUٚFƭrdziD.|ە(rɒ[ } D^U{T 6OX64_6',\$EK%+LWn˗ᰐ 6*1(] 5A>e]cX6MҮ K[o[֗ځQͼ<6lM7-@Jm$C!?$ B"$v.s!%q.sC!)QahDm+Ҟ|xRA.{ 6aϰi&rssI#* 44$0vxwP_|f, ?BP Xl1bo ,fAg@j 2Rx?v2DQ m|Ǭ}>_}bI_0a۷ //τ m`޼/ap1 sJTWY|nwu/ /`\L:ݻ0a>x}U ! %aT C]vP`h0~'{w朗Հ 6YYY h H!O:PL}] BB\ IM,|ϾS|gbMAJPwo,?ֵR9_R뗄‘]zW^|ϋw"Dwlg0~\[0CJn_<&6`:p?S@W\c`[laƌ~׮wR^J)9w;>x!Om*l CӆS0i*od O*`qϰzswFW0R^~kBg;H6闅7OЦlv~/3i?0yd:DJ%@dUUeup(" L?gw-0)+ H) ܕ oS3*Yc m0()f8%E /3 M V޵d`U?2W ,ti}۫,s#7;hZ,a[HO:4и|q:?REԶ1ٌ5||2G/#k #EÛ d*o:6YXxǺs!SaktP bnv}ySg/\]Ȍ̜5f5ج_A$ D20V_.-ů&+~Ï͚ʃ?!m1 o@idO̷v5Ŧz|/DJJ!y՝ܴlE1{=<~ GU5nkRm#q f$ N'^g. uϞJe5o%scV^dSʸQ$m9 `tUp#9BrR[sw^ҡ QcHY└AUq7TUPzESG^H?$)r%[bq%'ՁO[#/|I^efqNk,;V8 xM>=< *$' Ӯ&aw<惊20`{  .?wx!<O/|ͦ^*?H(?^wx!!e7cYlUEE -BB鑽5*O^COWtMj(/75 BH>VxQԸh+­C'4CKQ뤺%B* j'%IfpҦIUU).*B5IJT (?5#t(nB@V )XIݻu 57x!xe=AEqWdJ ӼSkWGEkm[8+Q .B@y?P[Nksm\lУ[!>xO!w}O?TT{\ۛ=Sگx@uyIB$isv%KMfC_Y79 F9ۈ ^E |SV3|SaƤDEnnpg^࿌];s!@p{LB@~G cNӡ%CJx7Jf|M sPoxji~P;MM4W[S} `\|VhP g  MgʋGJMƮW6{0 lx|-\Hu)tD ᅐ,ΥB zaۿs1OU*FG:]!\ݩE UOĜ6W_Uefe.Y#Fͷ[~UdvI 5O3RZ)%R_@q ~|oæ!5ˬoKH҆"&f)/J4Ɗ͏tr95v.羿G[[ |"Z!mljdŲ9;J MId0Ƿ?9k6Ąoe[tH %KYŢwr`Sp`w(5ꕅGJ]s <%>euwT}ƍ1cJ4OK",ds8{4?VΞ9XJe>O.@{{mDde $)FV@h`'(,ĝRl3ngݪן5ry̎1*~m ~Ϛb(7.S#ҚXS]6N̊SW+/?~:?-O EOOXofe1{s1jTք8W]Dt0%kF:Lhb#TUl[ݖR}]֕UeR= &Mv ㇖@HhӮR b'cL|üϳ{=ծWmeu_ď^͜y q؝fqUG hDo`}E;w^S/HAbnPWe6knwr 9ki6B>߷]; fX=gtNF 1T/?}D/B#;\Ff!)d=;RW{jw%rJ-GG#x\, ԧǁǬc>5p*pX};U0J$fz>8?PB$7IENDB`Ext/Icons_15_VA/ReadMe.txt0000664000000000000000000000014712567570262014200 0ustar rootrootThanks a lot to Victor Andreyenkov for creating these refined versions of Christopher Bolin's icons! Ext/Icons_15_VA/KeePass_Round/0000775000000000000000000000000012606740430014770 5ustar rootrootExt/Icons_15_VA/KeePass_Round/KeePass_Round_64.png0000664000000000000000000001027112567600200020506 0ustar rootrootPNG  IHDR@@iqbKGD pHYsIIw| YIDATx՛ytu?eaIHBX*GADvMu\Aqގu>Lk & IY7Ԓzy$:Իuw{.C"HR$&J#a`pj@i<A8qXGŴH4v;1p`Kbb" fN>EYY)%%AUpV/?P;u ,w /THWHWnvzTVe[-lnUeSv46ԙ*傅ʌpQ v{3(6m|e+}>!>iͪlhRe}_7eeMw儉S(p.ܹ//e}*|\W>'zd<~+z^YQu~|]v6hǎgB0b,,,dՌ?)5N|O/QDH\hBJT\hNBBBJ8M+={vǗpHq{>_~ =J1BS6˗?ɚ5k(((0>Ac#@Ux!55J*TU8 ӏ;ZgXy(6F#%JƍL|M&L03#5 dg U8+aWE1AǛYTWYn@^ӽ=磏6QXXh m~0|6ow_S_WCmư+54 3h P$( ȉ&qD9N;:҄HXiCifM#eF^uvB3!WbŌ~Zx\JAn/B¹̟;@Ok\vmZ</WUy9z&Ng|XUfSHIKhP۰)%@.ע`q|,\ȴ}~%=A;~8~Gl n}'_!vN N暱 -p5MU$L6/m|ʁ:24=nwkX|{CeAG +} EQřۇ|~qq-s;F3in- M32{o^"#+'"xcK•@l/a ~z&=L:Jf`"#We˖DxUHd7MCAUQ7s 3j ze‚7m95jAZ@Ho}q2u4j۷z"x|fN75e?'EƯ<) qSdk/*,ZdnEl9*+-,Ff>]/eO5V5-+UVfz,&LdG.7^4~/Nt0M%7CSs݊4y***k\|b  )oTT`g8@wSGҪ Tv0ݐ22xg%sa7-z{1$nO h7 F^ Y7yl65c:A"TKbWlQ- \i h%4ġz}o  OU:UAT7-kohVbGx_eJ8W230>LSeibʌm태޿:*P]ҷ&ܼ€abJoZQvf~CFt={D6k\l>2ihhΰcBJ>ifbbDͲEMbR_z׷#iNlBb@\hOxдkWj&zH[ cI\ː.2"oTBNCoNHhln< X_ ,Y8hH/v3$nnjot%M^-kO!ُ_Y/o䵕UPcymU|lc)HUz3gϘlJT;6SͼJP;EGjDB+n5WPj\:lQmWu J]ZL8% ^v+x۷jJG1)e!DR'"U)k?vlWj}w:^mK=1NCj(~]vHѷCnضyی@-QJ>޶IkkΉ XOreէSў+wPI"-+/ z M㓲‚F E{O7Q׶Yj`(L86j*&7"9~qG*Nq}3ٽsXoŚ <uG:t+ Ns?$N'ì۲&n正Y "7)=X50S7"t'g4Yi >35CL{+Nx%P#ڸzvD_ !?'V7@uma OHIwɶ?Ok|x}gl,D~NlG\|R5FF7#=.I5/yǸ{6#_=m~Y\rx>٧x/X I^gL4]=T7~NiM["L09\3>NWj沓`Hn,}{:̬Π`.Vv)ʊPˣMԻ,/Z'OŒGb+@s0?~mT$n4vJNVD %.o}=_ zZ:9]yzݜcM;2Ɖ8N9* n ШZ{^5.,|79&6=Spy\N;lvnZ߾aԳ;U)zRc)(ڲ+$/zf琐H|D47LŹS(/X 'K̠>)&WH}:^K2Ww W+/%Fމ6|?!((5IENDB`Ext/Icons_15_VA/KeePass_Round/KeePass_Round_32.png0000664000000000000000000000402112567600116020503 0ustar rootrootPNG  IHDR szzbKGD pHYs%%B3EIDATXå{pT?$ݐ@@@B"7ȳijZNJ0B@V;6C8@CDL+E#M!/ڽwO%DDfw=wƝ`.0 bw@p8 nɡ ^r|u'WFS}$F (R t]_z5˗6Ma`(0l_`(0Mw'86n-׾T:};E.+~۶m,\=|~oVUW;ZՊ2D= 2oωi wex IMdǎ%-J0/e^lݶ_ܞv yH(AojC]8n GYgh mb(.>ʲr`ęL1FHxDUW/tώb` _xhsc;`p.--YR)~n/S3&WWSھ >)㭜ginYseA͚'lwW,%y`n67p>,{7ZpI:^Hmҷߐ&=a g(wn \pgee1y4Z[%HOSǼ?Pvʜ/Ch 3>c2c3zvhD/^(>4w@t=[pC % 32?)̞st;3w||mp~-xHӝ 7\31{aSu`'1䁴$#G 0Ms!}e^'' `\OKK;ZTz+|-TW, ,KPkK,luTFO\tRB &xrlJT;ۍ]k{wu%$2b7[@LLo^NAįQr ? "Fj 'VYB(7SzLȗ ?4/o>ɒ G)DGh@C}-@(Ɖi! rt м'o+jW~uGDKpC)A`p 10.5C#P@3p 4;J>|̉Ө6n]D{ߡ0ܿ Az'B %843S'Jt[~=`|h0XпReau3E, La|xpaƕ%Yx :\vC7"y.޼7 ?tL/:ɀCe¸:뻁F27ő]<"R ĮB0求 q1ܡt1yLKOa~/0&&dip81-! ^3niFdFO$]abKGD pHYsؽ'_ IDATxy|3{or@ p""-*bEm[,oE녵Z Rp;{<n9<@vzvyn|`' a%}FW X n&-N`<Slm+(p.h8\,JZt/p`kx߂mɭc/g1^o%\R %@x^rѡC)))$$&v@Jj*8R| *+*)//xbX|X?hF T0xI dԩL|%m۵y׽wqI1_E/ӕS7<^;9&+&3{lN:0p- ~kl#{| EQ}Fx6-TOXMl۹̙3=zRW+@U@ U,KH@%,2X,R,;wO  x+R@ 7Ȝ9s A@o@[Ц Qsv$"c*aIA~d|yx. FܪcR,?[O1d"P>?"2'.v$8%\Yٸ{m}st3`^~^Ob/ ~U k_K .6IRe$~oUUy㵅npa4-*puD` pN'N.G~zNs?zME"5Im&Gm:βoG\W=-Y"=3gI"Oв#D6\rw.xYu+>78-Y @.Ν;p"Zԁ(*[0RdZItˆC?|Kl]w$h|tK/?Orr)|!x|j{ y|T ]2mX.Ғn[N3ZtK`dO>{ YMWElټ-()9BEE9~ߏlV6;TǙL{~H {,BV[5 wk?#=h$f;8;ܹs^5+*TzE #|EQrJ<$;wQTx4٤6eЩsw&]5G$ ~2}:q:$cxsQ !2̱OrLAGA}>/4K^{}{wSQQȕ;97.4 V/"Ḵfх^]?@ `VIhNz9k[~k…Lz)*c1ZVC}ī>7p'$ӥ)/T8p$@GжkXCQ{ʩtދ6 ,Y>nJ xذY$~iLj_PA]W N7^hݬ*PZ|֭fVpڐq\I1Wkte*% R-X-kWUm8=Zt @?L^xfͺ ^EAW~[gLa|^^gͪi.Nc<>"mج>SN,ojl`QX ,:pә;A7_PA-w?>|/凉JEy)G ?}Xp%ݐ(-)o*࿱ bGѲ[M޽U6=w o,~"x= :>fP`!$CF9?l-}Ǡeqc8 #ˡ[n,] e7_ﻃ7_)fQQVRĩ~*`_B% Igy.:%S`W< ,Ҍ|˖O.]8_ _$3Ho۞ddf.# V^Oq~{wagpC֌ dٰۤy՗PUH+03f= Wn-3nb>#0jF>̬\@u_EW_|aޝ:'{-"ǀ q=vHa׏#PQ%( 3ʸl~١[%%-#&~ჼ0]*fAOL&Ifin0G@5F%] ^2 򤦦|r < ?;\u˕)78\ 1vc.fOSR\b.G(.πP*Ӭga+/؂J { MGeԨQ@|<|S+eQ=Դv\~4s$$ipTϝY[UŞۢ%GwX۴P$'$'XW ;DV}QENB> MVN?t ?5S]rlzL~v - !1)-TE*gߞ{e/Rigf:իVnx,cT.Aq#$Y'u\T!#lݲy&%L.&o0HLJN{vmf_ r SK 5,sǫ) #,2vLv7xahYLd{ ~s+"ItpGN7VQq9eR-a8M5Kcia0Df1{l]Z&O|WVV}ۖ޴]z{htٝzDU?z?tw?yxIf:nTs [sn3үrrrts} Y+ȏS厹X&/X,v&~܉m"֯}V ^\sȵ WO݈/и2ebmDQY)ct|;wҏϋ[ehYF/.Utg!b.]h* pQw T@4l\aGa:pZfWj1,+;i4xۓ$a%j%x!'brrj0|ʖW$尴̬ڱ]7BF[JU'2YY%o~hq֨ 2CuLJ}N`#Pְ))iۓBw"/x}ckf$I U5 ~AҚ q @bRzc @@掠8d{SC%/sbx}oͨX઻Lwu-I:vRR*>: Y,DL> *:'R})$lEV\;z^e--VMT>,TUUgOVYk|&L!; 41Y}jOt(M|Ѳ&S i3TmfU)c2\^O6*Oob_pT~_HOM` l6mP yA,&K< i0ص3Ϭ ?Z-@):#nݬMs;Lst03Dv3rev'p2'立@ދL |0MaPJ=!a :n7p8j\T=3:yc_hfKۄ} GȐجJYa#FNJr\}( {_` ݷ_: Z٧ >2MpJ߬/n>GQL㒈odK>\YF5V]]mWn \ctW\GB yUUiMo*;o*e Հ\ev/k @k/|TVV)8Y"-ǥo$ >R_*;ǎԀ67 .<]w\H'|ݦ$Y7)TC u?[azj5x˺nEjGQh|S{'n{obvӠmVV|Åa$AJ`mLNt/..bgݶ\OhKvos]Պkr ߔG}@]lFM30T^`Wu)3ɤ$Z(,Q?!)ާ1GDy" 7*'OfN?kFu 5u_8={{ؽZC άp3Ԝ/8x `vo/>#3'!3M\~`Gy( @SFRVM_cӅZVڦbֵGX\Vj@6y7}ҿM}E׭8%=0& ~Y mau۽g.UQn_lݡ( <3a}^[&#ʾ@Lo{s"2&BqO?h`i]z]@3 ,\]GL+[ω]brH;$A|٭t6d~{HZ%r[c/)Z?,` SU(JDHpR ENom#·e~5.ho* yfu NYg#n/>82=slO~B 9|L:3$YWzu3ll]fMk׳𢉴mQ BǶVv ·ٜw0]ejE2"u04O,vS\нƒH^fDǺI\p%z;K1\K so*JХxUoe C5v4+9%[qBڧg癱)D[8 !` :úJ/>%55/`JdqD#NxSSHI ῱9yH^?[MCVzWucDL?d'WdhxusSك| F[|HŹ|۴mAuwƔ$ +&q$Fp#KY,I=*   6!z<=6;-ө%*i )v_?x#>-p:SUÅ3vf"l66\2( .3~KF'vHUEo#ҳ_tUCJħEosOCRZF}~>UON}A%JK׳zHk@CKrfegԿ_aCuP¦T}Jڢ'8%uw0pNυgt*|DK^#&?~7f,!f*Pm}R௽m—-ڿrȲ5UUy<ͦqY<X4>'_| 1_/(8砟=+a #Jn,Y6o[v,~N<hLq@#L:f#Yٝ" {*(jjLGl!=BFVN \-ػg% 8EKk@P)\V \En=zz+^M|~x5peV l C&)A6`тx}ѳf+w-k+0XP9D.wҳWz7=ODXO۶n?z?Xɕ[=ڄcIBe4pr,'yN~u--~i>d\,vIDAT\&K~2QO9 F.61gIS9cٸ\f_UY}{oWV5f8 TZzyV3bȱ 4٨%-jJZoׯo[_ T#rMڽ7]K^vAVv,_U vcG;eV6nXSDq" @Bg?7de琒NJJm Ġ;#E)d_A~Cl36펇r*T5z,o*Z2mktfE5A[+X ݏ`E.ڊq->mTsC~=L8Lh}6tfZ␕*/hC26!'TYP@>ڐhc!voS]IENDB`Ext/Icons_15_VA/KeePass_Round/KeePass_Round_512.png0000664000000000000000000011007512567600304020574 0ustar rootrootPNG  IHDRxbKGD pHYsKKs< IDATxw|TUwf{Z^B"(]W~w]uWk/Z R-^ e=? L2Ν^̄s9S!8 <2Z3 9+\[-/?PxJ*\^;xO'W4HUmv@@ayG,jg`9xKL@$@$jr(9O5:\@$ptc1E+j=DD*1.2_^WZD""QD D/; u !DD!)C@4KLjm X|f$}06DN<~*"QQRrXG@4H70>a@4URi"Ql)1)Ep> w@$HdC''a{Q$U  <ʤIDDS.p"0 _&ce+Vi"jL<iQ@}D" D) 'w/09 @$j\\|I$R\9" D#+p&p2{_<c9DDiQ3Bie`4HQKU7w@4i/ ZВ Jvva(o:W},]#_~/\Ȣ_PQ!U" DuDiU2t(%%!RYw_E ˅,\׭=TaL]-M!@T܁OҍEE?~%%% ]vKo9ƍE_Gs% 8 7܀;=Z0v+F&DJJ1fƌK߾:m_׭]Â3o*+[2?@Q,b=Z]~N31c0 5 t[ÿTWWWd|>=VZђa5J j*X  ?{M<Ӭ]ԯ.k@d_ew56!!ɓO⢋.b1h M%y'y穩nU2" D6dQ>N]v ///@ ڪ(7^'aln+.WQU<LjnKLLdҤɇ z^yEہހ%EGS0sS5J9\233# \+*yis<ȃ[@b D) ;FҎfqWrgrL_okKu>!w7_0ҊV 'Nd֕3f@ <胼ʋ&ZlKqc2 L~:ڭ@ Zn ?>UG0v+=Ƭۑ^|.2X~}={*y{ٶuKsW_zdO DMi@v,W"77뮻Y$))" mkܼ4cX[Õ" Da*csc̚5t 2+ЕB_ו_\: 2.~JG`V+8*V@4p:CáQ/HUعsGgYA D!+#V+e]M7tR>+>=R(?u ǫ:_jS<0eWy4G 0pӡ2N';54ͬߺy*+ԓK߯ƁT:i$'h$'j$':HZ6Jۯƍc1V<)(%)c,X*tRRf]-BZZZN,ᯔq*^ VRh85qv𯭪*|!q]TV܊KjA][X*IyرcxN,<>"Reu4HHOv 1!|w -[6qSπ$!7&Իwo|!JJJw~1]ǫs" Rt8.Υ 5Fb՗_pX|i,$A5rJXU,611?<̳5;U5}:nJ7GwƣؽWggqC2ڶkϹ_Hrr2_}/&Vݥc! Cz. 6l?݂5#{k^]!ovwjF@fdG]_W֮暫.ĊLtgXh댌 n~ =^EUx^:  F@iNW9 >N 9+239sXT̗ ?sC\Ģcti^&Mm۶5T~ [:W8FvL7`g׭ÍWۯNJ}ct EXQ6f>#^֭[sws9tn5nǧ!pu?p8Mwv|Xm͛>7\{[l8%hd | {A/`o6i끻`_G/s}=р5nx !WwNHJlmj2.VXfgI@t n~ms=z훖}j*Z&@H/JbG}5:q -#AϙgOe>5X.(up] SO=ĉ]VW=5 Bo)ڷ#%I5j·rUPk]]c' $J7kϫ~+׍}g Hqоu)֭3ۯp-OAS(g.W_%;;;&끮#7[e~*ktĻ4[ --if_^NT%Y+p c=ƭފlJQH܃_߼Fe>܊D8Ef1)**fvt$`*Incڵkǫƀ"}f_WR&@H/?Q /EV#QO.[#w֯5h1wcƏܹܹTu% k6)Ғ7`'jʹig|O[k˥#7K6luixM55v2]7 D"] oɰalQ Ã޽,}>|5}>Ӣ/x qǟʰQHNN%'81dmἳk;*`([xI!Rv1oGtv?9 gWOFmҞ/DωǠq8_ۛwhCDA/L?u[6o}+^-90kuؑy>Vuv+~8ؾm3"/=[6o@F/XnkO:SgҺ?281ݴq=ӧgE,I>ݺuc޼(,,>c2舿b>d&@Şr8\2ig#!E-Ԏ8 ZNfm%h!.ӧ~8<_)#ǫqN|`=w~DW.8Y? 3NBtmh?]vpi'|ُv1-\#,@3(`.տ>Crrrlr+vʋOǶ(u;N?j&rʜ82QP{*9|Wv1+/p"0_B 1b.iiiۣp{UNM彷_M VmvLz!q \' uUUUg~l Jc{;f„xHJJu5uz9~N6oZ/Å]X9̸@EnsJ$dY:$h>JX19)̞=ȎB4~ضW|wzVԹko.z)4zuN$5I*n\ts>x.Pq_l!1` 2v8^{5lOQ/67]-ڹ]HkSng{ϳ~JvGJZ]~5RQRt:9q),[kjSj I)))wߵMM`Zˆf/ acD׮79= ' Ooq-%ZiC1]A1w<[LS*u_ߐC_+n2~e5աSwa3P@2,N !.􁑀mUUUr|B;O 0NSNՋ?QXW;}{[y%Osqr'v _gS|GB>]IKvD AS)X-n706 F>Uu҅O>VZE>1ޯ+}ݷ dv3U낎pSt5X_OFtF Aԓ+`:ses= qq1 |B6m=wr SQѢ7kڷ}МZߣl+HuD )L8$|66N _oDnm۶O>(w{n6o\uW-B uџo7Ck];Dsm޴'fS'*`:6oh"??O?[V>Cx{x "@%%r-Q2=eiWq<Gt~ᔉ#)+0^`0lf7!@MaTJR{lTT3[]]#$ly=,\&>}zZO~qM?@vVCKF48࿀G{I`t4 p8={6EvaOqKi B@\IJ$]%B|QQ#7E+ u;w@)MsZ4o.i.=Ì3] /+8{XV,A':H;m`zp^p IDAT'ogh3s|wpZIեkoX, j $E^xwuWT늪rf;]$~UsgSܥ7m tR''I3A%%Q3 XFM&s=❿x\}9TWW D_'3;]k}R??Q?_i* #%hnfF}'111z宿 YD_J/pLZu@`k5f܉,x;wDGP ,U[eE@| PXXȢE_ҶmۨWT ])~M<B4Qu┋i-JURm[|0lM0KEJbƌә?c:ꨨwdвuY&5Ⱦ;hqJR?z3ưxע{`2 .X '&&sܹsTl+?O<}B'%uw>z)}ne,p |tWE<K%whO %_ǽS?"Y?-"=# k[wtY[Sضs>x;1 x#GУ@IN~Wp-DJQ) W_AD-T?~?ub-ul{ {݋;ӏeQKvXHtq:x`,}"˖pTU|Q3TRr*?{ `X$R4eԱ|͢h45 IG|b ,RPY#[wܶ9vl*E]ٹ[ sDa&wdD Amٲ lWLc;-@ڨ4[o1idTU+9qs$&3o.AA"ڶ/MaGt /3IO">!(];mznYǦ ٲy-JTW]z }/>'О8ejޜwy4ǀ$_/!;5z { YҥK8xQۯD9}Ł)1'{,X/?JN8k~i1 O`Ԙ8 3`Ӎkw_A,S>|}^vr#$^`щG!U@`;hxȑ̟q7RTV+t%{n ^~)Z ~eL;23s"ÿ픗2gyصsKM'e#(=k ,bA54べ8qVV/}jt?].fzpΌkw4\{_ӏ^gݚ4} FK:tyIj-ݏݻKe8kF/ӦM5 _ ;1y|?vGoб ^~ c&v¿\O>~矺~kmzF.w?%zrR+MP̜-X & Fh fp7[O_nf˗-ip}.==[tt4\Hv^~^fUھ#9Fle8K76nXNJ?E,r%P!(lӺuk-[NVVaorg4;(\q~̸}uܷOw^}~k $o H8K=ыۢReƮۥЃhgO߯#?3ܻKgLrf.zz'C||? Ð(mfW.]q#..Q_O)=x 3HAA;hD'1H4z#&Nn)uUn}C}Wן7'k; /C~ ef3n$&躿Y5WNAAWcp:4? ڃdut D5s>Z}t-[NaaeWH+[Yn6[v܃4߈˚ߖrgqݪfaSܭ?WbH$Kp`Ik1c'oX/NWJNuaKiؽk Ѿ1꾫O~D٫/XaO4*Mp1`OHHӽ{wQ~CuQGsǶvymC>O.ub b|}{ 9%Q)\j_0x%$Vogʔ)~_?p'-νs<:v* ۆaM>bΘ8N!o^Ըy.KR:_.4fx|kz{믿!..2{}%?LKwd܈nTUY>phlRkmUt&?-4fm%1)'2r)ci*tzx ~^<fq Xh/2EEE_(x&r^&)9Eo"2Tʚ~b1i/dGG-?LӾxf:N'ݏū/= <X_# ȷ~Ç `,SJ2ؾ?3~*w?0D*.>:#OYޓTm5(|0qJ4L"/ Ь{r,SRRo/?|V|oakp?'n26o5ly0eQ840r~oܓHKcbe3cRpÍt2u#?RwΫ\2N%w^8LL's|Gj"ZCiq~MA[f\|e4L"Z[ݢ\q>9~[8W7E9;zjޓD c.7u?n|֍j&fq5eɬ wMJJ%FF׿_ɉUUU OƜnS؁<:(?x\Bb72yŜ=-x߸U#\'U~VSRR;aX8 -9x`8LˌF5%s.)g?}V?oVvknUScʦ)/4c߿b}~u/UVk~#i4U5r:_Ē4M;fo_ԃox$ܷAzw8]^QC}EN {,`E\au {y 82{<щ}<65ͼƞ,)<_Sc.0>Vutէ NrF4*,+ˁL+[.99;2:xCK5ؾC? mqgμG)l޳#?~PYLP7.6,=b:H+㠈+(,,H CΝb1eNny䴘C#_)߮mryG,57fHMM뮳 Sீ7^}6 6x? ;c:0s?b>/>-?ڲ>WDJe`jZB3'?KuWo n' J)^噘qGMd31Π1co/J)e~U _μW@Vv.iTAb5eeKeddp5X] C?O?|kbsmc?ϼYcXbkp06[a{-O-;gk / \7TwO#wJPX믷 ^,˘?WLƪ/#&llf?2oc.HK`%0i5@pe]n X' 1ဇ ;CF =`, n[-&oJ7J7A͸p9VV\[27|3iiiOOi\263P2Ʉ0\QFHNNK,/Ct\denݚK.끙nl`ÏH !:uK'wlY͎ka^'?ڣLh\`mi@-rWd:jDOĝ׌Ko7S}cLa^'OM?@bR2fLsplJ0|\;~GҭG3?@.}ֳllsl23 99jӈ0@$^P+[ fcIN7js;3ϛ%oSo{{ygx50<~on͔α4F1ppWZ]W=J&=j[;¶E 1A>&׺mfoKa?5[Tmdr̋pXmggY2ΝM?Y'K_dɧCs[_ Ä?9Z?Zc::uf6󁈌=D*84I^k ڿ?<+[;YŤߏw6Nֶz0m>v .%m̰d!l])~y0d,9y-()>l|s`1?>}Ym% XZotקo꟭Ιƌ?U|=xT[f2oU`v?\my :!y "N|W \6.>' [  +.6aF/o0Shߡaj,]qUWt:M7?uHMM@$%gУ[ +?^vM?w3-_^;ٔ/hjpƪ&%%q١?R T_V-s2|?=w~`ٟ$5uڹ$%%[ih6m:YYY_^7̿ڼ`p8 ?@O+MLi}HK`‰S6&1)@` /tTοe.]Ǝ[lX۶/m_t"uGiy-+t`ZjY36S0XLen2ș ]O7kWl;}K-t=zmu_6zM?A|T7+#]t1 7Ie޼ijc cmtcuŪ ^Sij9 mU9묳MRyv$z X/o/W)Sp󈏷ty %hS3ݿ_ #Qf;$%о_@]HHL(o"QPYk*s Fnl0n_PG lo@Q84_o4 uڱ^DktWawY36jթS'Fe:^+ீ[7֡v|_8mRgv(>̀#1MMB?@W).CPE/? h]xmrO?unSiN?J3q'YjUG" ]er:6#UkuU~W!?eUi~r- 9eɳKJQXXh*n*Pr,PAaGsj_?B~N? 6m9mYnp6m[ }{sltԉNL3;o)Vp0eT o22:RAzF_$eim2\UƝ>SᏂ'MԮšN0ψ#iӦp{Bqjp.}uiih_ ڭJa?WdH ? } T&X` Mt \̈́ǧ?ŮJ =.5-۶v#6mQYLP'Nt nF`Yj#ɔ)SM?*p/(q{lHSzq6@Z?+yT0TN2ьDJq75n]ao/{\+vy&U<& /5\Bj lLfU #W\__o8^?JmW#2 :!5`Z'2Tx|3oܭN__t?~n, NdBbv8J}q1F.7 Е IDAT]d [ܚސ7j r4xC J=qD Е ǂ7 c &7Ϲ=;C H?6j VHBXJ0HO0 p{¿^ 4~.pܚ>S0VZL !J`Y磎sgSԁ/l?V? 7ެA̓?(:uJEVm`„L?ׯj_o4MoS;?# iUiǏo*n% g!}~:=uWD#FY2 DF i*w -W^t7lV/~] -9xN98PK4r(M?קPJߢB_ @o"q4VZΈ#* L?(<^]/ 뭃/w5 A ej ҁ' #[va@ ʰp~.l {Is8˗ ,¨c":w>T _֓ROسdse{sr\Q4<o'ywi}sxܰ?fr [VM?zowK?n߳a73k ,x80,ѐ!CMR _/o6aMou/\oJA I}k4r/  # ]>Ю}Xe>@pAVlS(_/?cINIʂz~FCAq\8h6ߚ )UX (Z3 N^,[lDC #[}aNJ 9HNk[vL.c _ ra s^J4=Vp0p xr/ CF15Mq?8'd.iW@q8V'F U\ܙt* .l[v:l 0陴m*#Uub ɊTx Hv-oڭUV t8\pU%9cL$ǀjL;wK#Kc4/g/__/'@/𷯩j-DK4a=M?_9om+#i)E?HIIc"o(.l?os caоc1I)Q@W+Jгg>D^?/VЪi(`WnXVYRwj-)t={ Wh_ر1_ JA>?> ӱ-^ PX_٪W0?k]- =i7K'vr4|;\?Ȅ?ܮ i҉VCF/ øca/,PV2 P'?=#f.M{ !3+'=;t4`$ C  lx5?b;*t|QضC ($Xd*u]_:sdŸuW@uN[MϹ@gбi75? i̶ @N0D99v_/ᯀ}54VX0 iuDͿ4?|PSlK<4"_$\e?tm23- 2@u@iA$ ۿݺiGACYǓj*܄+H$Vj2 i\qdXq윐73 "($*WaQ_NFe @*FՕGD-$hk?0 `ߖgZeYd@*FH$2  ڭt"`HLGh G2}Q{lUlK6ƅbst $H@ %PC `L76$wiݝhٖ]i{=Ҕ3{>9#4ϺD"e?7B(S(`XRfVe^ D"cZƦpl7T,[q%D΁f##:Ҕx=^( $Ng> G?j tukeDa9tUBK>2 /H:Ls0 ?O%%=@/HSpذ P[eYn|%/o`:#V*[Y=q /K$X:W?6 6,@wT.P4On/UD"  B!7UVV>2=_"DӅ O+O+D.]_jD?yU\nU&0_H$w@RH$_W,T,:Cn/K$9Y(Ru(͖_%Itz3`0 *+eG _H$Ut2 #-{ _H$Q#w PHY% m/n/Hyw VUD.X{.}4M#-=F@$Ȇ(wY o.M VpM*l_Cq柞{wF>\v[a:qtᘋe [1knD]s c[?@SSQUXk !_ܚewJʍ u @_㌿o @k@?gV hjTWd5 Rgc@O F(YZuMeC/ +:]R@%UWX'g_+74fU z7PbIee_kUb 0V*+T2@_O3_9~uTR6PQQag'޻hFLMiQXn1:Ӻ~O,\ue:gp/w$3+~}n./ndٔ>oW>/SBqk]eA{---֒w#t B߅3`K _}6Ib$=#nzܑgTnFrhpXbߜ*B!eTv 2[X Kb%sQN|0\aP**-"oit ܙ;DO&~ T-uT@YeC/ V?ω%8oCKv)+*ʻpFc]{, /〿adiPU(U,,#4qk`)$asG>'LeTV(+B@%pƾc.Ms_O @,2MT"[Sb۷oʎu_%яoeT.0u7KOZX?[T%m "%-i捀$`/}%2x4W\-+YbQ!MMMۭ pI%1K$G?f,?HyY`0}#f ^#q#G?@n2#gv[-k?\_OI- vزee#/T Kk7Gb+bpV%elݺ2<MSo$@=ݖ:P4();ZGҁ /wy #5@u`%oٲ2 PL(q GmL}`ر]o߫)6[Q/ /SB; g1AVP b_ 9dwWVS]U-6ZU+-nvdЭ_$?(u[?ߩ<6Z\2 ZocХㄿJqQo{G#֭[`U'@wzu4_Mu z,`ú*K[FG? vk K- ,,Vj:`g{@Xb V^I8H^MCWKuͽ{-? 5Z~uۥ婯gMh/ [}s ?ijlP{oK{^7h[#r8%ֱ#s22֫Y{54MSlFx]~ܖoT6S ,@ nDS;x~sF6@"Y/|-y'ٜ/7:̧:,BrdX? :K?ɏӾyPoT|ŗvf05 ,ZɓOH Gϟ{upw~Ξ4:v/m0bۆ(!o_?R܎0̋o$ܕ)08n~~ E(]`{Y_OVeQ]W{<--:\n&yZa:w\11,{]Ԣ=朅?ןǟe{]?`.cnߺm"_Y.25Xd{:,?t&[r& E(GO1:} `y* e+k蛅Ak/ jRVX fyʯ (+ hH_cX?UUXj̟g`_?~.'Co `9_~n@,W{BG͵t]_X?>]j *,0p%dh _ƿƆQ|_7'n~Nrz At~N5X)-)V> ,&+)M 8kӨo2P_˵.}~>]wf|`ܯ`Ŗ:M!e46I uW K]p nÈ^KXx&𒾾?Uݧ~l)YiهBp/# m[?9l9])Akuf6lXg>ۭ PHLq$'&Y:YVQT]UkR|<2ݣWНt$ Fis])Rdg /汓c^K*[y;;+,]& /ǎ}:z,ſ^*❦&ze:dg IႿD'>8؃ۥY?P!`^w [Uk'Y$ɇB`f$N(θa>Kv $@].>Qfʹ0vi/ V/Sb?`yjnG[6obӦ-@ ;K_ `yoڸ7'\0hTƟR f4sKC%l07g)sf+}^k~fw>9-[8/Q0~!tZ++Xhh eK0ޱ k _+7k)fI(TQ]oX ({Y?Oxݚ/go ދ e g7Y|j|=]=u_F3%]-S}hlމ?:BۖI_ K/S~Ks? lި J2ihd낿Ir6'KhQdgʇk᩽X lyPX2#q ' q_:pR xrv*#ي]U[w_ 0_qk$r_geٿMYc-fR]t7ߞf)`N #%K- 9's0qMY3Rٲx^@0[,Z;[$:Z/v炿$^c i0ar wneՊ*@YIyW-l{3/L{{gz?fR=-?myn_" 0ir0ӧIx.`ڲe_95߫,tIӡ q1zR[U6@`-{g,@3 O%7b 0ฃ;E󪛲K txuAٱ" IDATIoee7n&K_O234rfʦlu(E@ͼ-@ӡ %K./~~\nRf"!PxU3>+ υt܉ׁ;9'sƤqiΛVݤ7з' [a:.Ǥ# ȁ3EIU(; ݣ?}V'7qqFL^]sFHڿXd¯ٴq.x߬usҋ/'zNZ)1R P8d6]$m0qF-FT~o}O4vOe3x4gKu`~ '4\\|NOȻ+*NkiiYn^QO<`06Y:/ *?A^X(ⵗ=ݖV]ߪxYp{lXR#a`@_wdf:L[6.^;+8p=ݟ[ a|1x1KHuQZJZC}b1tv1:\sEtau߶F{L}ѭݺDF':RCt4X9!C랤&w U7_Ǫ 4VLϞ,?@ˈ^%V b5lUrTWWX$Cz4_"vsqQJxهTbe=LeetjRH$ V$#WK Ucv4e7XYVK5<ȃ{nSE;xghxN]F<(m;%u $D8}RT7M QQƫ,?r#CV.K$"9r_-[Ȭh˯96AJmo]V0#_Dw0q቙h0{p^<.K nP>NFcߨvi,矼cGs`Ívu+5#K$?;>cQToii?ʮ&sΜ/pꅮZGq#uѻN_Dw q2}olܰڎ&2װ]@3g;a5Jd 7~lHR p*=]}\Rl^O?`Wk RxNy_݀aJpc# Dot .>% Gz[ۅao9]@َϟ5//%G3DZK 2#q껦i-gWsja_3X]wNa%G>n r݂D"qH3;DZ)ſ]-0C@waklQ[[í\!=M%ߚ\SO}T/}8؄ُ"xpi 5g/D"ۀϣqZTji|{vw!dz}py/KB,p MLN݈eh~~mD+|>Rٵeİy_`t[G#J:Q-նcLj}cO-.k\vZnx_W[ygBiIFcΉ#@kg!/J}YeGaG3[ h`Fw :gX{^k{hˈu/{c {'7u{Gltcۣm/g?9;x Tkxom7_t]*^2rhF8V=\TՇi / ).<1qYy;rn!K9vWNN._YʀI`/ J HkJUgNuu9":<` ↟^I0Rx=Fp/ h\qfr0s1.D Sz;o##=#&H / MQ?sOiZp6' j lܯ8qݭ?t߫SR_O:A}_r)ja& Ӱu=D;>d0>L%-l" TO)ҕX%Sbvy p6NH#a̻%c*+R?@ a_>=,?s?˲ p.PDhZ2cX˗0~! 1J碢:DcsX?gdq*]tNE֩"I|ep;޳W>}~(?yih2_.na.i/.ES&Q]e]끃1wdtF'Q@@)niܚ/ ៝s9ٶ7]b'pg_d 08ԎSڻ"#5z( /'~+ץq_}1Ns:Pˁl;? H|\!>" D^kɡoO-<_8g{B ywrDeMemoV7 / Ѹ9 kkW/ʋO$hUD*hݩSZxK)Ufu/ wWA^[𯮪pV;zd5!X(k;wlk/# )WF5_g? q-W؍ pc""Rhv wIJ$#M'+}/ۅE7g ?{ޟ6R):6M h\FèQc߶HiT_mY2>=_? D t` 0ڮXXd/ B]Edrg|՗L}/[4H.׮ӧ3?CIIek†/ .KNbP{qQ\NDDT'q(..ҋΦ \L_-ָl[񯯯מk7KT!1hyqVU+R#IdAݓ /}g06áR.c?`oI>|q-ټy#vqg+L\7EAa_ӹ,{f=@u"@-=p+egp㿻jpS\"4_VOͦ?xΕ%t.C\fС9pxGhᦤ2HsP{ɹ93o$|/h4p_2<c\ ϛ?#R۴4,ZDYuHK3rlyo,[2]u&YK༌9vDx >#6`;JZ_ca>Nr%'Q]Ua/Uᘗ":ɕ|WfEyw*[n ]F=+ 5njOSlǿp;_s7 H{f|<жw8)d*ǿmzHW8_a tX:yc%% )ڹ x"ٰLKmG6>N{E- `U/ <Ũި:+(NfƵNGBR$NzqHƌ[3>%7mG[M}+hh /sՙښ* ֬ZGb_F& 0 E2aGdffن$AE( SLlǿ/u#M/KʸHۀ^,57k`k`oUA_SM3o,|^45ruSXxS@&{зuηsrm??En>?yy4.:9I~oii7]‚9ōǀ&;Py)WdM]3Ϛ7mCV΀^nJ*CZ _\מ }ඛW/7s"H섕9xii6eL^=NJƋ'Nqb3LRT*yNXIG˿_}l[o6jS! kpQ{pCol]_8Ňj̛V Vœ,tLzH*jB,\H]! 㟗s 뎩Q_{-_Z0wMRXKWF7?wᄊ2nC;[_OPc,&Wݴ]u&w: R,8Փ9erz܋o1c!_<S'gҿ[g/?; GMTυ$: p jjjd[1x31tvkV0 ߟ! j5ISɊ;W'ͯn't0S|\BPgcNpZCU]&C_1zY2҇8W8w[Zןh"kB^y)*IOGwlǿm|j/-)cN[[O$RDVw~ t9hjs3k6 Uu]ȱ~N9"m8 WrOP\ix𚐶oBw~#G3|h,}{CSAU]X6gd3ao˟JG=䟒SJ| g:iyiTWUru1ϫ1<5a _;??Ņ'eqdum=P+u3--NF)a%r3W쨣OOB~~oGOg-,_9, slxuN8ϱj>'_UY\}y}Bʟ;qϾ!p$mbv4 5&34}?oͪeƋ)ܹթ}]#@pVB~Ao4ۥѿ^B! ?G|,[3^/y#ϩ'j2CKL{?q0+7Xbvk#u{x7߁9R+ xНr:ƀ Ml. R{9trwq w7]̊oqjl!4I*/y"ѣ?~oB`KaP=vdQ}g@uUSy!I ՙ xL23. ;J _O<5 FCXsMN%غe;'YN]AM7_w\=a7mfVol!טxc>0 ?y:qb =R8%=G??ꋙ)U1%R$D+aeO:Lw@BwaokafjZ_G, l{v#|L:OnVwes|DG_|o3)pމ9EufV6{yp"60ٸME- _p31~!}=hZ7coo[j41_c  s%t먀sGsO0b (qgw6 ?>An1r]b9<7͂ى_6/ R$KN¼/ 7V-ށKxh-mkfACO!}^;Lj\(-?x?H~8RȐ 2 eGGu|wBaA6}W ugea /zp}n͂_qD7cF YH+}gq2h¿ԇR eABaCO@ѡo7y5CߞO"vCw&ʣ}m38("H?Ix\~O;NJAqY-A6Pfư~^F2bW㛒z^|!DnB #) =Vw_n?p%WiDǿTֆY}]sѷ^o3PY&UC 45&bg~˗@o~9Fn"|zz]z57t{GKvqG_푆AYUua o2 FnL9:Y:y. \d8w_]U^'/=H^j0H OF`0.Q7 =#+oܔ<-A05_u! a0hi1lHku}~FfFN}^NNǭ)h¿7^ygDbN#K 2?y#22ʟqM#g8l/Ac)L 6@Pؠ9Z`k۽nw>x<.LZ:&QTſ_~wj++^t)$|d{&Foʫ?kO=™-p`N?njliQ^TI.{<ңg>S/Q ɊeE3|W^|d>|N麥į~}c^?8B~vm 1ZM?yhjlH>)Xqd]9q\u͍sd9Kʋ3B/.I-ڤbΟ4m8n_pΔpr/' p9?'Kԙ0ˍ~RH4{&kn ~#`TWWxعcK?5{K '}'smü^'.Z>$4M|k46&[/%]s!OW2nܐ#⫸`U ÿ?|^z W&k?SyMr8+ɺGv\./ۆ8fт/yghiIWK|8:d읁‹̹_F_;W>E wnMdptRH#9p%Ǝ93~C8hHWN>x˗OWƒ w@tRH/0 :&?!g}^M,g,]UYΜٳxo,Z%po DP)$p p*ݶ8 G;m着 |sf" R_QbI&rt 8LN84 ) y:=E_' }7[H$mNV85+9S8ؓ8b?ojl`|&_|^*ȷ,ƼtRHR#n¼a0er9Ix}Iwh mY0sf1s>9}@a=RHR21xZ ?cO8Î8 }&/ϒo0O(.!&̻A@"Fʮ3aL8h;h4';P(ȖXx˖cɢ)ܹM}>k7ˮH ;'c&xΘq2񰣘p1:ay=ײb7,]2+9Vqa^|$RHpp'0XvG)ݗq'0lā9'0dH\.MKKYr)7fkXr6Mg͘\H !^*- g q GaA[ogY5U|~M藲fշ6=S9d?n$ȕѽd1p z%/a 뀡#JJ[ZU6cݿQ;VjdwH+Y RX>p@3$7=ѣYٹ2*˩ *K(ܹ;Rs %ҸP)C"B7@{r͂ '=wr!=#? Ϸ2x{f;45PGKښjBn_˩,OY~O.KNJzH#< @b[Tw(e)%gc)nȗ|Wܾ6`H$NϱtWJ._յ[jH$ *3/+LCbeJ>p= dwH$d$D%)$I/p.p0YA%K@T(@OJ5:BvD I&5Wc<(ǥ$c`9MAvD \ "Cى6gewHH8:J $Jj?C^+@"Rms1o$HE+ouK$RH$KO̩O\K$6&|[@Sed@L0 x yf_"Dbkr1L=Ȓ]"cjY{ȋx$RH$ 8ut@%.d)~+ͲK$RH$7/wKH$ [ I_9[2UB;紞nHHy֑I#QiV!s}D"Dx6_HOX*ȗJW"@"%ZGƶ dN&ll=_5I|ÁaF~?Lj0kcD%)$$M^k0UZ[ۮ0P (~JD D~\m |w :0'ж{4M{^\|=Ѐ9$_6_m~_ K$QbdR IENDB`Ext/Icons_15_VA/KeePass_Round/KeePass_Round_16.png0000664000000000000000000000153612567600042020513 0ustar rootrootPNG  IHDRabKGD pHYsItIDAT8}Mh\uyf|؆13 uR!h4q, ;7BP5`(! Lc.DJմJ1D3ZhI3{o 腳;\\zn^,+JکTmYV?d2G˅bYK,|cޖλv(`0q*͊*_y}2vƖa'49RYɟ+rpu5.7om+^+xGFFKr;[z^zL&l*vz^m {_xE'm9>*O282'CGWTY:R@[xgPIz|/eOph47ߐԘ8niNOSs ={FkP"h 5WH?iaoN""/7%7(HN(\Oӟ2jy_'4AYM(% -8^Vgo'&&niLއi qPv\P@JC$ր fΎSxl븣S:22ZM-DŸ axÍs߶]隵. tH73k9T#j:1|^ |[vpp،CqfP< l;?{hKNv?+3wv?L}3 m@.lN$W7'@Jg繏DBIENDB`Ext/Icons_15_VA/KeePass_Round/KeePass_Round_48.png0000664000000000000000000000627512567600156020533 0ustar rootrootPNG  IHDR00WbKGD pHYsl ]IDAThŚ{tT?L&$BH3$^! ^ ڪȅ>kUk]ޮzjջ\UB[Eu`xA^L2o?朓dBgΜ3}w~|K &@dXF(p | qr{uڌ< ŨQe0`@>AN5a؏A`9+z@K[,++_bmP8*v%6%6%oߞ|ZJK:Hx^j# Ð3o7I$%@[T-Q9Ʀ46G%*-A%@켩%*k}"7M0\qL6e!+++YL8 !8 k(AuAb5a6!޶~ݻvmn,YK/La D@oՄB{:9xPgeb_Pywr\ ֋/dggr\s5ƃmB8"q@;@ڱ=wp)@vv.#'R2c(%LFS hnn< p! \F#BM'V#e97JEnv{qbN%apa=`{;p@YVo(}G}V;?p`/?{vnWaԘ+0&f/vTwq^ia-Ym΢vdds|Ԓ1ʗ QXb[̎W`@YYWNq9A勊z^i!-CG9N%$5 SQ<o+T̙36v-xɒd=xZ/Kp!?ٶ$ h4m7-,4hɅWS;x vD`7GkM $++#,v%f|+%$h8@1c VV ˨QeaW\.7L}hǎԴLi.W_ iQR)P4Dp{ij:XdsA 8V-%yw޴,u=5}IO3wW,1Sr7J]RUsot;s-mT7;eiWZv~i {I7plL/ xOkR¸kef;H]ty;/(?L.c:"G`=aDu fD;;@UHr'î^Kcb3 4x<1`ũ9_De-xo{4iY *wgz4#eĸ$4dm&ӊBRi :9xf;dT8zw[%ڴ*LEJA((]+-|k=T\9 bO4,3V29{OǙN YWJU쐭!h}of]_A?߻#[בQ/u2+іθ89rO;4ߍݻ@o+P>fXn cU'ة#{طkC0nm XЃeüiw8e7VX]6HI{oӀ։6t=- !;D{g=S ~ v'LTŹ/]N/Ǧ 1J:Oo#xVZ ʢ+_^x`}(.s[- fW ,~o'_dz*2L2RMζnʲ'ط.уN &i…d9pTO tS\x6NdX'ˁG_7mc+)*Lq[)BABmB%" j)Fqvle5-̸+"~n&bhCSp{xӺpn_uty|ov%؉šw?yGoHꡒ:=acGr`/<͋/Cm?ou ߹ %V0 3a7XhiZcx[(#g;ղϲqg;p受lmQ<[g3)3t9sl}{q >?/@ Zɹ;[FFF2 rr˰>5pIg|i> pzIENDB`Ext/Icons_15_VA/KeePass_Round/KeePass_Round_1024.png0000664000000000000000000024151412567600324020660 0ustar rootrootPNG  IHDR+bKGD pHYs$$= IDATxwxTuކdRI{DpR,؀`\,b]u׺]u]uuUXQRQ\JGz L;L$Rf)r'oɹs'Q-3c2qs~gZ_8Rw$s?@I,?{?_@DDzHY@[C^/-5gWbAA` v_MDDD """@A/DZ[ -4.-|v [ފi`@"A`c``G05&HZK }FG l{l<h@DD$|$m}o}=ۊ-_ T-@| ;N/5`'XUQFDD ""З\XAYČt3н؛B_uabo`PDDD ""u_~w~9RF#""ZH@Ec_K`)$Sc-H8p]8vGE$h>Xh,"" lO?HXDXWbA@DDJ@Wo u(HX k,"")Kpz LE$>:`!pk,""@}k>.\Xh@DD 5S}t XDD ""- @CDDJ>:3`F"" )د uHD6fc!h@DDc;8}nH0/(8}h@DDIU/M4&{O|}Q}|WR5aLi$""Zsgp}0 ȀW""Z29/75PO^DDD ""c@#(s`_?h@D$V$ Hž`utA-DT`0HHD$>&a!pT#HrkoWK#)U!0x& "b*F""R!OF""p)HP}DDjJSC]5ZXxIHa-GvxHDD "L݁DDE!0 x X-TX#`pZ kۀwMDDN%}qHD1S5- CD$*>*%h@D$v#0PjBGDDbFkj""1%<}kA-Dp.p0D?ga9%`*HDD ""!nj""R-h@D$j%J""R>>#h"\ qH,^`!"Z k[nu`!"Zc?H8DD$ 8DD "" P CDD"@$!"Z9V@!""肁k4DxZ-H<(DD$ (DD "k}K?XxQD$/*GjTHL/a $'%o320[šn~~n_PXXH^^>܃йH}] "QHJOO'== 32HOXkժEFFqqqڑHjj*qqq>uwnXH^<|>ss9zr9ˡC?/{(Ç?IJߴ "Zh0DL6&33,fgIVV3jؐƍrBqTwrss_~ܵs'ssvI\v?o?D0=_""ZЇ5 oѢ% 6aÆhђ-if8'޴ª]H܃ڹ;wiF6mȮ];ٹs7mb۶|>H"DD "`xF!AVmZUVlيZѸqc6mJVV2?i*Cصk'۶me۶ml޴ ֳq6lXݻ_"~`F!"Zp+a"B曜aиqZjEVoՊVZӪUkRRȊ8w׳qF6nXo/l ؾg,K/JX ,(DD "Rc_?GI fӱcG:vDرNZ%3%Axظa=W dլ]4&5f`!"Zx8Zi-Ziѡ}:vHi׮=Iſb/??kWfjV^5Yj%6mT'ؤqD$wwJ\\m۶CǎtؑnݺӣGO֭{rS+'w0+WXj%׬fwvE,^>n!"Z`K ]@-CrѦM[uNn֭;]q«)7ſ⿺,^ be,_˗/[ED "UFYClzC>}֭;ݻIBBBKQ/}~~Z˗|+]W@iW9@-H ~eF!F]ݻ9vR/f?x"/^7Kf}hHU>-BD "xPj׮=gu6guу6mچJHoY_o-`Ѣi6*RO^-HY?NCʣE 0>}зo?7iRUWGCeϞ,n)_}uڀ }ǀh@D$tҮ]{zÀׯq=9Ƿ~üX^6Nr2G h@#i` "'h۶bۏ ;ſ_w!|b:e@Ng !"Z0xQHqu֥_ 0AΣYfvſRܽ{_-Zy vܡQ5 -H}[G.sE1dEtzGk(L+3oϛŋ(,,FO+}=D$ ;x, 1q\p B~璜\3W+C7 ?y0st>\OsOD؇w(bWǎrE\tE0,ſ?r⿴f*>d:3?%uwضQh@D"W6w`cOrr2;!CpChԨQЂEWGvo^fO>ΜٟwX4تQh@D" _ _>\zCo~$$$t?),,d6m*3}ľ}{q-! om4P^=?0xy\ՙ_/4MkNNbǎƎ8`F! ?Wk;5k֌K/99٫WW+*5kV1uL|]6lIi:DD "&_ǣGj׮Ç0tP8[AW+oe|dNk#W󗟈h@Di}":egg3cWI (Yw~ޝ];^ O XQh@DO{#dddpŗyO\\\AW+r̀)2wؿ6 Pqh@DB5葘aذ$''WS (h>xͼy2C>:G w\_}_Etp8ןѣGs饗V́W+}!OʻL`/,F%,`;@{h@DdPO|7Gr ciٲe _W?3q;l޼QMBD "Ry ?\l\tŌ=ϿYW+5m+^{L`0"5 -HŌ>׿FuѣԩSO_WGct!>1ޝys#b_%BD "rj 4Tn]~1s-:t@P+֬^ń or~}S\7?k"Zҍ^jk[;#Gyſ_WOkuT@: /mHXk8H,\yU7OW+%]wߞ믍'7DϰتQh@$ֿoR5ѡCFco$333AW+#;W^}oF0p7 " Mb"2$$$0b7={E@ (ɯ%_ū)xM*r|\(D +c_Wg̘k[iԨQ_WGow~u^z9v"^)DY7j]7nF&)))AW+c#x<|2c{,]E DNMF^8nF` (IK ӧM[x i"Z{]wѮ] ſ_WyFxe= Yط tk"ZT ExjҤ wy']ſ_/K^axei]' i"Z$~Znͭر7ၠW+x8֮7LCD "pF~uwUW]錂@P+Eɬ?O>ocx F H},"uY{ rQ_W+ԗ|O >9?9 BD "<<.61rN?( ſ_W<'x$~ ރ}zh@F(ƒ`ذ<#m6 AW+޲ek`x IHMxQ<ŕW^_j+ſ__?B@XnÒh@ڤ4 x6mDq (ǘiai>3)ޙ0J+0'59 _+ufZ/#DBLC[i> [@PGSߴ2\~ 3s˴ YuO<-(`Eiih8p8 p:}mo۶>4"n[߄k:J`F!PxH(jN||NAb( 1Ny;C,q>7xݣoo0Qh@uQ۹HKK Θ?۱[A Aſ⿪w   ]qG3O@ؿ{ D jo4jÇӼy)#2M>|۷P_/; $%$%$ q;?x oi^ӀQaB ZSNEٳ'S+;coy^ WW*{ 9 % )A0k[_mbbw<|Teط H9|Lziӆ? ,U}!WWyph %ARèmMq͜Mk'>(D "^Qq^ff&7&\.?Fx3ʎſ?oLHN0HIt8u0B/xxyp!4T?.h@$%bvFQ `Ԩ<ԯ+(3f bM)@w"wO?i_oZi3HN0HMqdt1|n+{ooD l(D "\}FZuᡇ[nq>X(zh*1%0 ! -AZG(#;e=ڹ|BXp.QN\\_'O_Fp5>xLZ ſ|paM =m3yw?اu: s=B_N [8$fN ^}йsS4M<>;*ſ?D.Wwn Nϛ{ Њh@$.(B'++z+v!|~3W+URAZ-{1 1e)?ÉЃ贀8QH)a۵Fa0z5L:_׊ߢG-9R+Q^5<0đO X[,Kw 6@fڏ$YEhtܙ/{?PoZv[_?7ɞe S*k6KݝXfvNBg'p).D $'E%%%oҼysſoQJ*eg^qOU?R&Z8ga\Whܸ sueW zY T`4Q-;x"ϴi6l8Ngh7;=>+1W+} 3AfG9.;n˦\eD  d80 QGѫSL}0iQPG L ~31W+y^#&|(k>4iƨk7+ Xn(H'(e˖?~WV-Đ_WWsON4v *7KfWqXV;CU+`Ӧ y@0[-H$ P/N~$''+CL" }U!ſ_WW幻=&(p[$ $II qII,Z8˪g5 S$*^z[ 8(>hӴo!Cſ_sNGqE 3nh٥y Y"A#$ m*gq]Ae<<ſ_WGhɮ}> -&дYse}۴sWqL3B .&~w7o& $mdĐ_W+C?&{$'F0b41Q9̲hGzfj g*&11_~V[ǿg_hGR )#.V+}_~ 1ٓ途$Gϑ%4Np[e高@::@H`9иqc&M̙gv[$ǿo;_{WEWDTrA^_=cζ[Wq$t˟5):߿m۶  sſ_W}y|#I'1@_G~,rF\+ufVLȿ(D ~_*`yHKKSrRnW+EWb?n/%;pBSd\%_igb^`F!ZtJxy衇p:K059ZXſ_B8P+QsEV̝>O;7(iRYT5kԨ|!=zˏ/V_W+#9K{_)>[Θ9lyv+h@XE*޽{b&nAW+hj9iEB(+wɘ9,N o(t Tƍ1r&MDff⿊Z仭RW+ſ:\ع%ۧ(+kJGmVA;cۀT?HE &ţ}s/=_nE W+ys,yå0")),HJEf(r9)AF.2S+ymgrOaA>x|ͺ\$%%LzF3jY~˨MzFm3ꐖQ:df֥n'(1MwҢWv5~\Oaav& \ |Q$z֭ˇNVW!=^BeWGm>tmmc?߱c+qԴ 5iAƁ&-nԂhԤ9 ITo9 hGz.}_,.ąݻ[;,(D  ]@Fqjv}1͛7WW~7-ſ?㿰 VnG~Z#۶ndϮu ,3z iܤ%tUNnי:WGlhЦq<)9- -}]J;s,(D R@Fqj{GzzoYXV5ſ?rϞq~Z͆Vlڴ."_ɯnueѮlՑӮc7lP+#&~0A8ZftT~;ȑ#ythf}6C(D R%jQmSO=G , =EHùk_eKe.'\n}|z:wItſ?b.h(?/xxA,mYVB QQ0xy?oPRvmb,_eKb՘ZIup84oٞ.gs^t9ٍZ(aM=NZ7'>|ߊxi[>+~B (N.>>^{+J_[WQoݲ_|ηKdŲݳK0TnۙУ 5mWU4ha8%Lx] ߩ} 4 L"mDi'ɓ7GoP2v-]׋x\VLݸgϯzKރHNIU+kkQNR+k(7m\ǂYd^Y2 ,~g0= i8Aqd=v@Y۷i#wj;!ZCc8N:1} 6m[W~$;k4MV,3>䋹ڰŐ 8wpNP+=ƓPWw+.fivjOwk ) ɓPW=[O?O&y&mЄz;2 F=1 C/ NAFŎP7ڠ]/Dx)ðaÙ0ar>|}~;kh:;M}[6hC&e՘s_BAC9k/2v`qi):4'1/zV1m̜!JTBv}?,K]WhkӦ s9e?7pJ(v+x[fy|ſ*}Ӹd2^Gy=,v>>hҬ__/z̽~^:R R/gN#76> kMGDbN1M6e޼4o\_inW++& H5q[/[TN >Pc6]r.[nx~bSB R31M4aylR_rmڷ3MJ?3&n#~mpDjHt.ZR^ƭ?vN_$6uV]r.۶N6%~ l( +N15b޼jJ_8R++ܷmW jc#&Nڛ;{M(^0C`"7m`%{ml ("LO8~̞=m*K(_ƿΛfƟ #{vmc7sѾӯ0ſBK-`A?iQ;bddfy1cd= 1DB R=ܬ1SNΝGǎ%->ſr}ilS>F$ >;_NM3S/[++4&28\/Y} 䣩qjsL ,( u!:}̘ ݻwWcşg;ǰkЈD{5-LӤpP+܏ZS/I\\w50ԫ׀}єK""24jx>#>O IDAT_ߴ((0(c1o=w^o/u<{* T+܋aˠkS1-r.ǭ1{n^-: r@;"/QoUyEIxP6m\HۿwfL -6mڟWWcsd?iЉ'c64706 ga0 ^|EF/(XAaQZ9rO [8D7>e󆕜sIOR+X~ v3H6iԸ)͜1 kZx\c8'oQ{BǧWW/_5׍·Kh"m^@vSa3ſBM -eC@ tgd2ogX ( U$hz__^~ϯWW>{QpXrsh"fΧw ]t*<8Aӈ/ҭz=|"m`lʧ4-Hsছn'P&Mf0vXw\GSν'QkW-es)?=~E:\ewhbo^C Rq5_/a+--|WW/]kG^ kaAlgwiծ+ 6W+y`~?uҝ$"}bn6.@s`F[4Ƶo_>C\.- )y2w2#Gk"܅|1k"x:tq_oŽ}~S$':b: οv1۶n,(3:u_|IffmzF+_nj'j""9g`9r,:'N\wC/U?hb+z+4 -þ_kԨ .iӦ=6yYGmTDTGߡIv9?h8>Ȯ۹³ٱ}6*@7 O:  --?Evq{}\Ž[Q2>3ߡQӶ4iN/W}@f6+=jqNLnw6,P>( <1@||~_8H)50a\vP?_h+{xge amY˯\W4|&YAcS$&MӢE+>1E``_8ݫqGw~;***XGMDM0fb4%RgDc98ւ }ay}g|ds]wq%z G6Q_c9̕ɋCQijiJ}_D~A5_FǾRVaE:n,;u%/?7xM\@"P pUWsm?O/W}oݲsGb(Jٳk }KSz/Ww)9aI4܌X];xbhL凞hSLAOd`ܸw}~O߲MUUEIY^zNPAS_ a99_⚀XFuUPXhcd1z `vXz쿞NΝyͷ(..4o 5M=eGQ$/knG*|?P0 >|铆j vhSd''^uW^QFƿe' 4G's<zܐ(K4ןƦ[!¿_^n|FO<ѣe^/'ՁnIڊ̍^H_& q~~~OQEIS/yp(H>#J!j=Q(yoW\\ByO?;W ׷g„¿/DZm]ϟ+USEQ2]?{`(uk(y4iҌmܿP!a3Nm 5LO><n+?F.ATQeͧcz {d޲`(~ ҡc_`( ɹ pgp=?{8{$oJ(Jֳq nZ̀¿`YmwZ5T+{kXrH= =0S2T.ٔ˯PPP {8+R%UQ=`7! JѷS>u3YKEE9OGb`Z^5?qhPˏrŧj+t9xj5J!ѧc>uKp"cٽk `^/!|4!UǯM/(('4#Q}/Ƿߏ3EQK&s~_~Z6`ρdԫߐ#{V%L@f27~;&OYG-jdc/;rs'TEEq|%o0h,r/d\;F)9&KMiҴ/|˥5X*x (8p >'P?~nwDSQczblۦk!¿_G-ؾ/B:rs|,ö\:FPTêj89=:˯PRR9v%-KG׫r*b|>Y&%Ӧi¿_ۄ6;GhR/3\p<)/?ղQj:x?NϞd e/ǵ{ u\,+('dk܏[ 7GQyդ[xc۶WF{S`*NKC@W7y=SyϿe¿_屯3]}EQ<۲Xs8Z#!sТi.&i0ci޼mۯ{tTEpRN'No~SeP^a8];8̱ݳKSQ%4bj7?2&us8a!,6_ղQ h< ||)YT>ғi޼9-N:&esh/PSQOuW/PPX]_~i\zzPr>&ǖ\6fz&6Aҩ 裏y!_oGQ\_QXz)w>k7.[vY6)wy^.z&| ^N9C6/Ƿo:~³EQ[p~N?V<-~, 5WKFu)jd%cyugq&wgg MEH{(eͧY\6{ Ǿ@>3N,zcYʫ%'_`gb'X t7o·~DZh 56QSWT>O60h JGӵ{?רs={?ѹ~V,}oG"W':CuKv+_c6ƍþ}{Z.RT ] <_o(>O='O ʃ6/7V.C)?ZT[ 6a#РQ,=;YޫY+9+`_U¿؛ˡoO?^}ysc۞ |/lD !`~u? C¿<)lܰVӃQT̰S5~}'777C|uc39|PӠq+TQ" qS<:4cMWş ^6ݻ7oyyy8bS~ųygT1=5j2d$FEQ;\wM$bѻ+OhatJI|޷S>MzPibR/ }j)I> h絁WVŋ?}eٔU|?_+U1=O#:s>M / *xxYk_~4bl.W|/5vО* _Wc VxTzaUoN@Jp~w3nx c_SL"zs+g]F6 9hՑQ0v9T^5+| FQq_mvhR/@NNyuԣz< VhӔKVG /ϗ$m(,[{8CY#UL(}>3.t8wd0jEx/jViծ y<_k5ޫ0&K~9X*S 6U͓G3N?6蒒{y=\?* {BҰ1nҙ3+i޲>¿o>1b?k?!8FD"!! q=9XfӴ~q2ñup}A**ʽV*j$!LR?dc׹+#SRg Ex 'ZQZ8摟_Wm ^v"jԯc4cQTDFMxṧX*6j8;<>z3El*¿}ر}*[.3ϣwῪz(X <#{ 7 6xE?ֱ p1+.=g~ԋ#/UT | ݤI,YJڵ=e/;ksxըԪ9řs/'/ǻȹ xٿ?=;tл<}M[& q1g!j?;4mRq{U̯G8ǀ/ ӭ[7o߮_>UKfq-.&~N 'W7@v{1iƅTVĺ fϨנ9-tn۰kf r ?@~A:vRQ 8@Ur/0kk<< Ǿ{.hWpq/F#s.\ɣKR&͸ g+?$paV~C̡/5pf! r(aEݳKyL5gU1^tÏ(,,+B6- sxy-0 6nMt.\߳k+6ZӅ?d|A_OhmУ}(cG V&,`* <4Ԡ~{qڴi G"6/'6_|{Peй'?CԬY" T^aSg8,c^l)-tq¿m理F9FҹKwV&|@>UL5Ny^W^ť^ G- _Oly(+;j;7~p8C˩ߠ̣^æ|]BZ5YF?|_2c_۱?Bz[Kf-z+@3`5LS S<{i-[G%//x[6TTX¿|۷y7T-]&rW! 76{2n<9ȚO?ITz/ q?ڎ}QZlQ@Cˀҡ^+?aUM5S4`#mڶ'ZEv<ҀϿܽ IDAT? ~ٰ~*Sz߹\yZKn~G̠yN,5¡NBŶ,m!=E`ciպׯeJO-ZrL7jԈWPRRbǂ fځڽ/?4m\Sm|w~7N{6Ms.U:!ٻs^j AOw? ?!.x6մ2K]QV]_8j0rY9|+tX֯^ȉ¿7(zTr. ߠ!/Ѩi>|=^)9rhիжS?_~?Is0lҩs7/zMyL46yFzj<aa!֭[|KԲ?ۻqûr]I;坺aS~ܵI/v5˸ٱmNV\T+ZLq¿~/gd;ˆk;`v=|,Wg|/\ɓM$* ɍ΅Eo !_:Y5o# ?@Z >,֯YƎt: p#?^6P,hP;XԪm[^*E@9gH׮]Yh1F?9Z! ɍ}'3kѨg^7@ G3d~eE߻OI'Xx4oUYzҸNU,p 3O= A{qPyiٲl(V?ޱp<|>.fN~/;ǭ>S>x7+iVmvl]͐g R?k(-搓3@#zLPj@W|%`/;Ot՜0Ka ¿tܗ-;/FtRg1wnU^4lVY(8bӢa.>yIl۶˖xL`f~}l'{" 4ǟhC6- Iݶmnv>vnsS\R_ϓ+ ,M[tGs+bm;Nn¿v.+ [0?Gye^)9@u_^Cp~_RV-l!_OlʋOl"])g14O7={W?wHMug1~⷟;5%%?Z0,w⡩C 3}¿(c_,{~#]%g1MJV~l7oHƭtg1ONlm+8e c9 ܪYL=n&*gY¿ףt:_Q¿oc߰9weZ>Kٲ{I_Oz;)Y:h,c&''KebK s<+ݻH `fd0+Gn[ƿmCE/f<֭TWYH.LJ^n¿o4cQivT ٹm-?%OTl#w{uRt̎FG&^9j h,*6QK{$[Wuemߕ9jO? Gʁ};U 2M1jE_O" eBj,՗RhgM0畣O>wF? Gl_O؟xA6m\+ Y6P\R[=X(֟?ET2=;7֫l-l1o? ѫ`r~7NeT+_퓌=DWN&-^д߳T.i4jF?%ςHl]~yOʍP wfv\H~r;P9߶?>=۶nҕpSN}?iа/{ԩۄw?OT 2=6ͻ+ߺ{̘}@ ^C#kժʕW^Nl?¿)YC] g(5CҦ]_{aӆ|ʎTPZm~]SvOf?=w2bpWLzdL0뭷ۂ`X7y]`rrrf-;ANN FaV.or/[Hyj/tM^^&/R`^92;te c|osm(_(mWT.=ۿV`^x^;\ Gm>ky^AmT&~;2Ck(?OMωBWT_Oׯ7|3 Ȕ ¿ es8pd(/z-V s[F^qnR WWaÆ1eTcoYP/e73a6\_m?3İ1sT@2۶y .Ŀs},8?RJj7_РN#N+4,Om^)Á׍qa;^9 9g?dž[?).~/  ˷jUAIs" =g_Ov썰~[|=zeʴ3T*n5i0& #O>YI͍ĿerYY,m{uś9g/ Y,~:UqIcjV_( I?KS-rcپ}+#wWJp ` Ϭu6A[S}L@v/ )?@^8TXҜ#O ,^uYn?@FMw^*<є@_ \D_>w8rܪ¿💟eUn3j Ιw/ )l;O9j ¿2DzeW-"?+7J V9+G… Ym 8v*/z[WiLf F|>.4hR&Y]m^% ) WUn?@E\s^*׫tyر#_`$rOg\$TQ}9'Z"_xsa" 1_ U,[29BZn21p`Mh܀yO38a.\H 0ѨM(b  ӕmse7ҭg_ȴ?6NcUpҘ_{H8( ),n p8nJש4zhӧ3f4PDSx_ӽ_r/4?7й`4},~_¿R~{+XYeҔt+b>H Z Gw܁Kw ae h4Zzr_O3|zQ PK J˾CQVoWD>pI-/eCeԨF߲*¿/'Mo6MMwѴE[_3_kʼ~ vX/ iKV8>r<JyT\ _#;4aT,k_{m%8+ бgӣ(t\6}!_OvDlRac,jd6gڴ 8HG6- i4'4:7-I?׋u7TҐ^;lͻ"l1}2rD뎙T BGU `…FB;EݻvJ6 [hҴ/ Y?@-8sTҐw銷?myѧ/}mc=jdT.g|9g.]t1M¿E}Ulҹko̽B,?3.}~*LiȢ7mCen 2ilonlLژ~4q-¿Sh$+/>+'''  >@N TbE"¿aM,p9K j?xh?Zje*B6- ,;o} 6ř}mM?死2vE*P){X¿ |Yr :-[esR.\gS5?_"77nHG6% U:? >fq-.F_O n UO)ƿsuyG,W\s#/1@w5җp͛7-[>6Dygt,6k Zo IzN?&g; }bмE+f:+*5ғӏ\`"j¿6;ot´iׅ/߁eԤ4kY+9z. i[6 \yM^p.OP Ź>k1wߍ{?xY\sO¿RJp?UJqb9tuPWn?@>,/|b5RQ/5{qJX * y5 Xr + Ϋ68Tf-Z3u^(3H]0 x['^O&I#uŒ3 ¿hӝ~0?|E~GmX:hckYת ~{yk8G6i27_IWzs貛?eGgw#>%5Y%_ȹqW hZlÔigx\ V \mÍ7h ĿoܰMJ5E; ڴ" )ÿ؛HY*d)صm/g\_*hcꚛF jQrgҶm[ _y/ )}c`_w!cso$AIM/g\s0mU,кM{Or1h@03 _ZOӉxYW)ʸIgҼe{_Oz_vаIJVAKQV|/g`앯~ih]X.{^X4P C7^*2aDzea ࿢{CW)Y_- )j9eW)ʪeoUoPVajc(@4dJ?vr`>p ߲+g* mAEQ] |_OY?@V]k [ U8uϯM, JFS`g1tP ض/gS]# ^8*eqN9?@8lɺQ(<^Bpeh4߲ ?cx 5RRxu(_OY{$ZvQKAsLDzrC zdکP\;Qp:vS?@E_mĆu49//, ]5|1i֕*p)έٻ{slD,ekF`܄j.Rj)7w7 m [¿og.zKW)HIt/ ?YRO.Y_c_Z92~.^pJ@@M2gYFj֬ .4 pOt!֮Y+$ӫ`Z$ q_  }*xIfƕ=rsׂYY|X9j4l p\jpESfMڄ#U0Tm%$3 ¿o0c1%۶X"_c/ma]5j2sP:.V)昼 .(É?t>Ic GOz$vջDz k̻J~e _ g&P=?u4Znm#QH`ɇ?ٌt&ՄwWMܼB —l`{3uٶ;QcТeF`z٨ LUo꫍?|=/CF",[HWIf¿/j(eE#!_(c/|&h ?G7tuh 0yՋ!Cq h V}GJ4ԭא ¿o*O]KU ` ٺa/g[wGu,7tH:unz4S\L\sQ`Pm`ɇ*4Ɍ;? ¿(e ( K4 eޅW^6\5發ׯ0 M8j VjR]&Qf ¿! $y2_ rQc0mYԭ1}=1yO/Xp UuD7hB_vOzMT +?+eɚ1^:j_~~>\rQDm[7N\o`E]RWId_y/ ߮m|<]0)V4" Y?aXΝG@ *glN? 6lh \p߰`E@Ƞ_7 q.=U!L"p V)ԮSEcl`N7@`lB[jYÿ |j>Haauz6HSOKnVWAL"6nf$f8mx^:jg֭; 4!_g?]+$һ0r_7vKNN QAL"[7~" Y~/O%8 o:v5|\@B:se˶ m0_ 2p8_=XT`/gֱ6 IDAT뷅9TfX21!@K/6AHW3,cPD7 ذ3H&}ƨ &m>qp8fΞKE&{0:wԬY[–oq##GmF]y&:иIK_?N?@-iؤ cٷ{3G9ׅtMa+PFSaz 9+[?8[ Ӏ& /ñOU4Wv!+m%7LO9v|йPƄcm*W🮱G-F?.3tAg7KKѳg/co<_v^S]u&n= q¿Ю$}*G9Z"p>:uN}M/!Y1?K?zm_wv޺e8HJe5UOH>{wmr4q {0lfx琅545u/֭[3SoS9_jY׷j$\5Q¿/ vzPA jm`$ Y,l30y6ff`ϟGAA-,KjY m{¿/im:SL0{vnGVج6LuelyLy?@EHjY'-z@s/ n? ݵQXV X<@ @Sހԩ1GlQ[w9~ Vg]q&= ¿&ۙ:WL0&Gs_ЅO3F87o]i&6n! ¿2QAsr^d+m);Oe[ww@&t|>IF̜@>0Խ4bHZʹN?@0$ $>vJ34l/?ISkj¿ڪ!#oMOA&@ @{iܹ߲*uVI~۶9x`4HͅCT?mB3ؖVk??lK=\ȳ\NJa!h;iӦ8/;XD('6_G~`&+衴6C#WoN,l`\Rnt7r\L2b#Pq¿{u`5i! ¿o;¿8Dzjc+Eh&j,aq&@ @]SΜ9s(lc[¿Z0|>@⿲>_w$*,6툸L6rHBn;VZ?CǍ'q}f$F[¿M`u s>_w$cc_!hFLQQ%%{O3v̚M~~Z6H| ¿gb ԩPlv>jj`ʎo¿mwe 72H42ulPLuSNrnH4%%u_OԨYG3}¿X_ ieʴ3M.)Mdiܸ1C 5 %;$;iT SPX]w1  +PLs ?O7Z Щ4xu=ki˘3,_/¿/TM}7iL %%uvvMTY[3Ds]7!۫He' ÄɳL.+i0=] f@wSYgeT]  POqIߥ?Q@ $ ҧNp:c:04.\tЁ^N3WqNpX DRD wWMM?hd_w:a0e4mԲ&`gn+ Z/% 6k ¿/Wy?h@b(_w l Vo> tS̙3?@0,kl iASPPMw, W&h$>P 6gB_n,'0R^T3qjՊ=zpƲl^E3KNn!''O3@X]G,v폺{qf074?kl#>`]-';9* $ ¿+b!*o;~%NuL4u86m-Z꿋f$]wT˵$W64 @H][Ä#:8o@/[I&J[*FDHy_?ɽ- 7!_w !"?@>ԯg̜KQ=×z]B!-H?e 07¿^X%z~FbrISoVYǿeA(b YPմ~H$@ 7G_%z(_w* S^a`m(4h@i  ,_],B?>_?$)& kt@&0jשgj9pb`k:m:@lټPմ.JA*|m¿5[SRoF6n<`cLӦM3Q&T`?Scףףdx Ǿk_Cee 2v4Lʬ)RF zTZĄaוoUSVMs]>5[R3 8x$P-=f,ǿ BsÂf/ ¿Jlw;5O6 8xe+I cO4G6Q3-'' ¿${0j2b+(5ϸ\b??sZ/o\`# nÿ nHn?[$1&aI)#M}aÆ?@(d ?, 7_I`ݖPeiߠ0Ҍ&HuM_R6Q[_US_57iwM. n?>j@op"c1j s<L\ i?_ǩP ¿˺*d=r8I7nL=\`3p{_q'J_w5m`ݶS?ڽ75P M |`[v򔩕\?,[҅ ¿/;_I ¿ X;u5r!a> `-;i$X_OgKIm _UpS ¿˺maW?Xf`[FLS=vM"g¿{}¿zÉpaАQZrf0-ZZ:jժѨEƮi¿Q¿i w(ÖPF=O@T`\Fz¿/+*o ¿Uyl/o 2Ԓ3FP-:fX=OOuϿ/ ߥףz;¿o6*o04E@l4nݺ__7wEDxC0hhSNmk&FΥС#͛7w5BI7Coڊ/ nǿۭO D6[wG\f-ZӬy+SKOB3ÜѣǸ-`ZO-%Z&cW?O gzB2c״/M/q{(!l@F:m@ С\pƲT4?%Л" ¿&& G;u5)o.JC Lz={f͚?T/kڿ_DO,]ڴ? &n!CGyM[I [=-h' 6?@ !ǿeA8j q] ¿i.ſO|¿ov|e_bj{v~ BqEcР?T/Ǐ/ wAޟs'G4Db)RZiW$n\uʵ.ˮ*%%FQE"1A"93a MΩ=3y|t'GĿ`Rxs Yx/P]t,Z(hsWĿkſ?6ӯ7ggc?(& -̳΍<\Z \*mr#9ꇶ_7vM;D(?[h|#<Vz2L7m#ſ?OĿdk_jAF٠Ǽ }A z\?Jɖ0 +b;Zw>WL_)/qͿosTm\L|)3(LGf _F7?/?g5(?'}Lԇ?(_?'_Dhph:cjxJ}Qv}?_7wx/1⿽`$_Gz^?k!| ^(\QZhg:hLmwھjuL4q|/ڷf'3mՠp󙘘c7NNv.oo(3`zF]C۴M9_nd @"'fZv"goՄ/}obNQzmnkgdLJk¿퓶݈_#*Ŀ0`_O2{ @sx{?uͿ O΃7)5ysLc,N]/smĿNoqͭ3A .{/^;|,X4 ffk?i/]/{= {74՝`E~N/@M^?=QĿF s??ph*cjwGNѹuUOv6_Gu;CO pi' nCLOw5_Xou^ B;on0@9 Y](hLU3mmӁ'`D?Ko_If.! E)\rɥ_eԪ"}ߕ).3/ſϋIĿ/Lf_ rs{92 \vٻ۾*i/}hb?_w<߶XHĿ/n`_υ,<`4p ,h6?]/?̛V_lQ Kcʇ-.p@PrͿ7 __w<?z P\pevHZ8$R.@e0S 6_ / -;Ty?y_LT{ .dhh(X,8'D_M[/ j5cۮj3ϱpLw;hLmm/z/?O"a_M;j-)ǹZ-gDW철?[ wmt/m#n vV 0@\;7mS(_ '_ OP 2pn+'I%\4ԲhO?iEyh1UqOWᶛƘ_ {ט .$n].(yY̛7/XLU;q8' ]9&^;_~v-Y gZ`+WctA+f뢋?t5_(/sǛV*_[wV=Ͻ0^ /0hLg5>ſwtm_$l9)P b.l0Q ?t5.rͿ7m79K+ +\4 ,߇sa@n-?8v_8WefH()HӔs=/XG\1C;m#ſ?O'pemw5Xss~#L`ul?3 >ſſÿ\m_8S D|)1L)D7`z&s>,|h0_nu@/ xC[RKŞ46 IDATpxwͿ7!m-/I*?)~ _0S͂?M,vd*ſ%-?⿐π:u0yv . 0[/MT/;ڷxo)_HF{ }SF3*$Oiy_,_隀_6_H{Xg~ j+OyB?LF5WZ}@/ [MxɲՅ,>眠Pɂ?M,__-D`f?81vO W8<wa/ſo?ZU⿰ha @cn]㬳 /濋 _w tg/8?νMCΊ{* W0ZχY/o) _DLd9>9?i-$̱S`8 _cg_ot! zl8?2ˁz݌2UQߚB\V}hO?mgo7P_۷Vkaց~.3sͿyy7ױs}SwMOufŋ_|L8e^8BdKyA`Ϟ]\~I_X lCyZl]bEyrͿ~?>G-pٝ[C}~X?/ſ/_/;A`QpZ gՙ/g5j#-ſ}:_?f̘΂?"(t`@0SsG>ſE?:_?v׳{_-XbVj陼?L5muN_.ſ_ $<%:IX[kO;o |C[/ q ;(+,w@XSKK˖֤<Zr=@rϺ0H_ſ v)i[`%PpԿ!+V\.C[w-?w!C?~ TT*,Z4@#^YnC+=9@rڿm/?q'Y`@gE,Z@_ˠe-t̾-ſ_cCƾaw,_[X[+Om7{BĿm/ſ_/;]Xu+WF9`%ˢ+s#5/ſ5_?࿞j`y(42 \/ſ5_C\π=@/bEK޲~9Z}yhjU/HͿ?M=IK¿o]X+C{Y{'Zw{t_捯<1v\ü3]KX*@K2/? `1Ƙ#/`;ohRJrl]{D5`ɒi,M?'ſ1#ſ:i2غw Fe˂l i 9?[vc1Ƅ^ -:s,^x#ؑZtҠ_`-ſ1cĿdLNg]}?Kb E]XtY7t?Nc?h_r^m`ҥf?ԟ7cLFQ?!`ٍ#L3B@ofo1 0"9&k]}?E7nҥitZֱ7⿭c1Fd2k3-pstY ?/1#@8 <`Q{,80?-YқI ?1Ko1" 7@^ha_o/3@{7ſ7c?T dhI3C3$aѢi_c1FPp_;-r@K͛G\@o;?`1ƈ/<[*FFb 0o\D%;_c1Lǀw)311@0-?Q/y|hc1&@n<'{PFcjټyz{u֚]/ſ1cmڿqP,&+LJ@Ui3z f̾c1Ai?Ne`b^tH:X5avL7oſ7cy?FOCKGYߡjM?P8rwc?j!M9=҉? ſ7c` `gLDת6 li⿿mc1ƈ/9·?D 0]Xo%m3'pc<9Qe7020[Z]޴c1?o8cNZ511ً([/ſ1cZͿ/3`K^`|<# ###_o}~R1#qڿo8 ` Ip @3/1#@Û rp՚<Zo8Ŀ7cQ`z&# 9 M[sxſ7c⿓~&';Yy͜F1/yf&\ E<P<|/{+cn9?@Wn @\ /&c1.;_7eZr@9sP }/ſ1cĿmJ?9 @vyBc_Z(]9 4 Nc1=ÊEq'_.̔S" @?ng/1#@5p ROͿ`1ƈ/; j֖غȗ__c1 A+!̯NߺG/ſ1czFƈ_7@-sg =Goſ7c?NɎm?k#NV1/X՘TV{]_c1F$lW3 6 }NMŶc1&8IoזzբOR^*ſ7c? 7MW)[ٛKt?/1_0 3.(Q@ަ[$_c1cr<'C?@p @tBo߉o1ƘJ ՚K(ԂIt_c1F{́: _D|_c1t;_$kj5 L?юCn1/c},_q*Mt:_c1ƈggnXt*ſ7cLƯ_Rҩ˶(7F7`С`s|ю7_c1ѱ]?TIkgpdl]LEĿK2җNt#7I/ư̋3$y=.iZo41 onӻ+! z@Y+mϽrGs1G/sr9@TT8P*kLN $o_};__%y? )yvͿ_7v/ſ?wO(3yep0%333LMMu[/4r#Ḟ?g8_/ſ!_3avZ[@thcFS_b/ſ_P) Ʒ[c^Ϳ_t/ſorQ9;?m/ſy_;<ul0) 0i_|_,ſx/~HRj|Ys0g  HR_ ſw3;ᶋ `.sFfp>ſ?:__V>< qng`i)q?/ſo_/ſ`wϮ( Q.ص{WH=|h/cǿſ πp'[v,$-ſ/6y_; <?4Xe` Dײs@P*_/ſ/:/?pfc`ױ3?nC[/ſ/(߇{]w'CKv9@`H m/_A8"G'7?, $`(gs@} @(m//ſwAm=wXYԪݻv>ſ~/ſ/>j   Tx,-Ďy?@)-Cн77|h{cgb'1-\cLlxget^CC\_M \vq__?0jо'O~ #ſ˸yl(Eqo|{j庙*7{/{;0t>K'F7jr?/>}1-:3)_ͥ4i~?ˢp@z?DSh`@^_O$_Ƙ^*۳O1-=_#C I'w^fff?@$ſ7Fca`t8m&Inda4|} ۷m78j@t8زesu3_]cĿcCiCg?[} [6o p /ſ1_c߳ 9le3B?g/Ӆ]lȉ9opѵp-Yc)휌?8gfv# -rزys(/ſ1_cĿ d @  -X tIYw/RYcƈ/رŘ] tuĿƈo_e7@_{ -[?@&$ǿmc</0XI$:1wQ3z<0/ſ1o?M?D?c+d۶j`P.c;6Fc"ߛ7oҠ_VٵkGl[oӹ0̰m[i`R.'_cĿ7t& g&FK`۶ԪU !^ R"ſ7FOƈ獦`㛯xo)D_PI/ſ1_cĿ9L`cNF( ߘ>#~xP)e/{z4.ſ1_K?Y)VJ 'KĿƈo?' $P%ѕ: G'$] ſ7@odLe$sm?#a|$/]jA M4)g\NĿ#ſ1DY8v 7ZiFffhRN0P_#ſ1c,Z珗$;o'8KƘZZVٸ`G_#ſ1SN4?7>\8ؼ ,'@mm@0PJĿƈ?2F`ھp^)XCjT^{-XT*_c0*/׳3 *`0PNĿ/1_#~?36cWj /[i/1{Ŀg{060XI?kFY8 W+_,u#/">~A a] %/ſ1Ŀ7&d`;{W_Yo lڴ}{D#ſ17 _%Ů];bNV`2K`F_codyk}ɂ.%3`+QNKE̙a/U^>Lٝ5Iu IDATĿoۍ1]. ݑ1_mwlʥ-| /X31/Ӎ }`@ToƘ69$o @O/l]?^ }}`_ĿEv#ſ1( ߻7/_`( ]xgsy_,->G>+5`(4Un `G_#ſ1L/i{3}e1M-x1j5^|`0tx/1--_{=.#OB_Ŀ"s#$cĿ?Q{,(N^j0gs='3</b$.ſ1_+?0뀩f Ov{.>`p0_sM@'#.ǎ̲>ǵ g`0TIſ.u#ſ1v2?wfv 3W^y]v<Xcƈ秏_ v`-ZȲ'x"X҄J%_#ſ11m}x4X<-%/]x_ ?#.ͧ.-gY-?J JQ `x0kwm퓌??k?,Ym8J"\v͚?[HĿD6*ߘ^=?$糏B?D;?Y O>8p X /1_/-,+bӟn j3<,+/1?J经_L$gVx5 ʏ"]&X3</ ſ1_v9eY)hC.< DWYI;6FcĿw ~Jx> OF NYX&h ſ7Fcጛ`hx6sd;c;*<$333RI(/;ƈ<>ɘGi?MMzuv33Ӭ1'{! ' %_cĿ7ƈʸV-t6{f-MP_b}a.=^س_xd\YWoャ w|֍g=y\ֺ ,kɀ>uq4m hj NҪ=:>oz=9X&~v ?k&X8~!?`JUſ?ݣeq>.z7HyO`hryץg=yeAm'?Y,nw?kpҍ Yx- H(A<, ~/1+g_ ?So?wނ9+N Yֽۃ?@?0ӯ ſ9?!/C;vg,/$a12{a Ycz-/¿oſ7`=V??π?Hu/У<ԑ_-_/ſ#& PsͮX à i"ſ /ſo;{]>X )(w-#<#}Ŀ?:_3ᶋҸxm8}yQ=Zx,Fod`MlGi][Bgt(_/ſk#/ot>gطoOg7ST#Tg_/]/ P'?Y4R/|Q"MVo`G 0@)MĿy?:_#y_32b?}^"MVon {w}F//ſ_3O$aчf Wc;R^| $_/ſos~Y^Y 7o/Qh4g /.^Og24yn"MSFo2;h *_A/ſ_8Ă4h< {_~7_/#sQ Sg}۷D/ӯ ſ9?!/C;gcx߶u3^~1F6c:jY[`l8!I/{ߕ|>^~7[sh{Y{U77y:kl< zs)reHwYO8 ?cDE`vc;rw7,ɠ& $8qޱm# ۬KgmD]t'7&ھk۫|cLcO]i{9mY>cే6oz~+#wt-M9p*ǹZa75Ӆ⿃m7ƴ0dAj xՎo2n+3W_ob1#s?씌}HCv6Ln%2`L_cĿ7.F7b$sWUZчn`ǎ<P)' &_cĿ7ƈʸXƛo4?^_#ſ1⿠1 \|@iƷv̤e"e㛃?Toƈ7'k%?]wHwe;bNn( D % _7v1$ccX_IJwyS̷my*<㑾ۘ OĿo8cĿ7Fp9QAyXo秀y*@=w$x,(/ߘu0_$9?p/?V6p<n1^ λߣVzL_7v1=n⿭>ҳZ[6!5͛x䑇ھ%4_#ſ1_)9kcXo㗀g\1֣ɖ4ߘ ſ7_t\rr˪/a7 .dYkz Y8Q⿡cĿ7F<xy,˸|w(迺֮yoE/9?Ǝ`)+EɃ|^yڃ_>ݻn9x׳d~IGƈoL]CQ'b/t-. l|$_R*Nw?D;7?s߅1iєWUںVn:[v3@*p}g疛Ğ=?̮ Z<$ſ1F ^"ƈNI6 {v{n-e&'' gɼI"ſ1Fcza&l ~|:{Ev`gg+*yc/?piuߌ t;ν/dAYcƈsm¡h+XcEfb(@,;W~+ &!C/0/J&ˢ~H̽*L?j3{5 ta*ſ1G; hBVG?v̷.fGSnl{]㿞JDpcW]<#mHyϹQ{necULT|$a/N Y_0@%?c]{f^nzƮؽ{W˥ JsN#ſ1;yGڞ&;7|K~c`S$߻(0XI?V#scL/~YK??C1ߖXzo}㟢=Ŀ7ƈood(^^nz}ay(0>2:o}¿1_7SY _|){fM̷Vz 51o}(_҅e/1_# ?wP4~{^\Oqy?‰DO,'"]ߏK謁hh ?ߢ=o`? wzw6 .p/ݾ IgΘo E(d1ɯ㗣=K)_;6`P?2 ?|f?wi\~k0; `邒/'^4?\4@%uo?Z~оܧƮټ⟾g>_ϲ%6!o|g\#5cw5d9;΍UYIsy`4gF+^4 b=$}l^e||"x6uf; y8Yk4ڞ{=qNHHKe 7!|(bq-;gor%~<";m__d)|h;'^džo~k_%9$d_/ſmϸd ƛ$]pwUύzg駞nŒM]j_/ſO˚|s?Ƚ{/K c~|v FUeÿoſx_=_U,[Ċ?꫱"|wٲySԥ_tӯ ſ9?!/ '떍vb/\I_98Q/k_J4J7/ſo/|)0/3=={ :ֳxze:};K__7v/gy!~Vc֘p~/󉒇pEgz۶\sU`ldv/y_/mo? }+v|KfBTc>_ϒeY⿞SN/ſwڿ/ KW}KF~n?{]`|$ah*c?:_#y?o>*Q{o矌p o=.+|/ſQ7{<7uRƺy*\| h0>2qx </Oo{?}|qN[Z q`j| 9miYLj/ſohy㋋$_~pT_V^&p(/Ls 6?66Ͻļ(_ 0νU/ſ_A\x Wǣ=W?^x*/Lpg߾\O_ W&/ſ_P>'q;rW~>ˡh02 IDATh~I7_/ 733sY_/֘-7qߎL O΃_/<⿔&\;뮹m[7Ŏm,<+bOE HY,}/ſ_/?pk*)@J6ӃEG~o9mI-;f0?ǿ۽s ω>s_éhV_Myrr)&,I빼V F@?PN{G?o6'd?k`=p;+1_'_J:-.3Sc1&Tg%ÌQ~kM?(w߄ Vx 3hzz~Q῞є% J⿓7cĿ{ =?Wx@w"\IW~ ^~y}T4N7cLjH7^UQnlb`]W4EJ9aҒotwc?4:|s+g`˩.u5Wk\Rax(⿋oc1_wECQ[_S!@ׁ_QZO|?@Y++|m'1/(4PՊp{|3_<! EnGwQ S+fO'~o1" KWriQ羻\"\]Fz:BFc1ƈ`?4?.ݴJ|=!fqm|sӗ[ 0cĿ(~LQ;o䱇)E`3d5& ׳bqTec1?T.Z/~cE&M7p=\k?@>m$sc1?X /$]Ϯ-]& 'jO| 'X\M<c1sqn\ϊr;U/PXc׽?__+ $7cR~}#QWmX_[;i s 2{4S+omo10 {2cD{v":w۶m+_EzNX<c1?h_z wɮۋr KCb* ]$?儳O twcώ26DejPQnۀ{,3Zk,[XfDۛkc-xC5s+-gb+NAfdY!;NCGsުʥ$~/c1F?4ۿ0-,3$/ORa>Dr%* g8_c1!2~ãK?-7~5?}HQt3c,DFd?=:YR|o10 ;O_V@xQW^y㗢h]U&qo1  Hx/ګ/vXcޢ\?eӦQv4)gRc1?wp-oWtGoc.yQν{QV.`<c1?W? p(Z|eEe ֆ\M!r巯GI>HWOc1FC)#ċ?}H}O,Oc2>_~Z0XIX}j Ŀ1c;??ʼG'cZ'???qn 󝊵k~ʷ(_ϲ%.(m1(/:kK\Uy"6?v>Z+ٱc{ù* Vc14=h|d4j޽NJvX=-Ebw_Ϣ?@p?c?I_#i]?i_k"1[#jEr/SODzXO_c1𡋇93kw^ۣFkVX \[Zm9 #ſ1cOtA_HϲLZ--fQ)Jc|> M.8s4qڿ7cx\J~er9ɉ0&=roniO"^(ҕؾ}[gb$g㤪?vK%""( %!v`k]+vڅ"b(bJ3;q~ 33sޯÇ:̜wNtr VJ)/0Dڷr4K 7Xm7yX6*;nYԱViv_WJ)^\ xk)*̷nRc f)+m/iNG69c¿RJ)e~Pɉaui%Wgؤn2W^Bp9 zwvbMbZ PJ)>$'a}]fmxWo+.[i}%=P⿦v3M7_)Rv4~֮j{@@6U+c5urd /c_)?nd.pãV;6Xm eoh=?OE ՅnJ)u>q6#/F]]nqPk<6_0c5bB~][ _kJ)oe2<)pu/ϭ[d+/XmojRM-dqRJKq1z+W-Xy'Vmy|Õ1g;IaRJ\m(.*N1 kw/L|V7x͊iC~tstaRJ)-KN04&5G1ח>ߴnۀ`6ګ.(f_SFn. C J)/מa#Sk}Tῼn̊{SZP7V-q[h4הjS;g?,("RJ ?Ay7*rXm/(@ 5Xm_y|ٜIT{>,RJ NO #`+Vr{`i,Ӻ"i5RJ Sl1:G*+KƋ0Mv jqzƘMN=\lRJ)Qn0it IFXiUw9[6ZqWp!6`Kma֌91Zcٚ"l㶛B>Cf^^d12԰<ݢ =;Vm74{K}iog!㿙uYb5Ӝ7i:wl۾G%0:ex g K.}_ =X`,F3vJ) ¿om:¿/7 )6.;%0( `\28+_ D۝Mkjm&.‚?aЯ{v! ¿oMm?UĿapT࿸[jE\/k=U8_SJ8_{xu_ LVk%p헓-׊8[{wed,vĪUѭ{߿oL''L¿/ ?:?H?Q9_e?kK<}V5ɀ%wXt}*p6:55/YJVvǘX?!/ ¿7Ͱ ͻ߯sǦb4(nfNp%EVW!]Jѥ%\~. (!xZ]$ڄ_cD_o8۷rp?p52Fu}W#֯%#rhL&aNn__wuڿ/.Sm\p| oZO׽K e O`ٳwLJ+|_?j7 0T:d:-W-cICXkˀWt{nUF>*.8L*K 5ݜ- ¿/G3ZO/[ O=77]}Uo uKԽ@ mx<**>☘M 60$ ¿'_]/7/cK>;1Vuڳ᮴d6%ѷo?UZةrU_ut_#cܐdK93].p"UP&Fzz] )sST__#ݳL>6ĉ2lRR\hUM$vUt<+nxqq\|~`@8Rl¿/ сui¿/7mZ:tL9% kpچoڸaC+1+* 7~S?ka_wͿvcS݈E!KK8AlhU-|Tg@|ޤ%6on)dͅa¿/GA ¿82/MduMr  Tmݺ282a7p_o$u3¿/GSm\xB-Rȕ(?w^ɼ9YU K-DC?V/&+#}<20hAN_@__OI FfÒ+ =-86@_5v_cRm]"v6^zxHl z @ӕ }!efeμEke)XAWxM__k48gl*=,m9yalۊ[ D6]ـr8p,iv_(uÿZO/ rgq* S IDATM.h6)+aͬc?)!F4;9;Ph|tͿXG{Ts7>nƿirT~3W:{]}V\i =(Ev _]|)l;we>Z~/_?S?!Ɣ )tlcmoF+ FY}~6;Y;.dfԶ L?*__}]om7ǧ_d\~~fi M|ـ-Zќoҥc5_71m/ DSKM#߼iN9|)fjp s?>x>iiMnoURnm__P?=hc奜sQWr >/Wh-c/,߸hY|> )`ȁ &ڄ_? S?3NL<}>/W^z,L7[ uk(,*`qMAV+~#~˥]'=s|N^VďK'>>AZvt¿/G7_Jwrr$5J3l1p,_qVѱc'ϒf3j2@ye@h¿N ¿;ŹcSq9f}ӯr@"` pFs?̀ѹо'@IE@_t_c{qTv/z_"#= z1/99| `W{X+ _7þ.7??$ !X)GQYY`j ZP{. X(m|0+;t,wlf/xj¿/ ¿/7! QCv߼i~$t *5 -XkУ~ᗤg4kڲǒS_Y:<~=qIq!q4k׬{J`0FY4l)pUq<18Orc%.sS ¿ ¿/[)6Bvf#_g\~ITW{tW`F|:^BB"w `/ ſNo}]VJzJ#Ab.:w,UU:+?03(!2Z}gQ=FK֙0AYIye@?$/ ^\LJrc+WœSQQxYct@niժU&7z[.۹|7z_:_]yP" Nhb ֮bQoν Ld7QUmx罹蹟K,o˶_cNG%3W\BG-G;0(w@+ڵfƬܹK]VE_OO1iLn߸~5S&"/Wۥ`FjFFW:ytYߥjen¿/ ¿_ [];xL* !@?gFΟ8-z|hs"zM5@QmgbIMKwmm&%~_ߒ7V}9st .rs63u(6oZݛ1Dw: vz8Ocع]άhӦ_Ks,Y¿o)Ͱ ¿w ?*CBq ?FvJDK9T(vYփw6m ~-wS ¿/ ¿OOqTZa6=5-_:_l'g 1|=տ%&B *2; 85s?ޜ1',gD3wljt" _?:opA38#TG1xUt{kB * Wcؽn{֌9m%"?u¿_R'12]a;vo=wƠ=\1^yOi>[CU )( ¿/ ¿endSlٺ 9Wn'08^僱C'zS:u"LXu¿/ ¿/G qÒBxcߺy;蠸fB *Jjݑf̡sn^~^ b몃=¿/ ¿/7+ =?vJ.M;B *6: xT-1{ "?q{¿/G¿/G N(W'0_n4ϮX<.UVV0s:p:{)9FvNJ*W?2O4¿/ uNLH}+𿏖;X t^b `b<7&@.݅tj鴑W/  n3qH"'B+ ']9N=k ZP`U=ަ[گZi"?^S_0vΟJqḈ7Y\yU:sb:?.0hq^g3lӎ QBYN|~/ ¿/ !| Ϥ1'=q˵S|:sOi@x)@Qۇ9Cf@Z-/ ¿/ {Sm9:aB <ȃw_iFu#h@Y2 $h7x~p=6sR1))_wo ¿nqwln7MGK{MiZPkp"C㨽]m 9#OΌ%O ;AjB?~/Do_^ǻlwxcKc^k/=׽?hZPmkNlGV,cNp 81$:)) P6?7!_wxn١9ְ=xd>XNBKO4 kghj{l|(/2-Z u<0M}_¿/ ¿/qN%1O|c%%SXdR4cWj {Gx$ mW7>__.흜rt2x \28֮Y}wpƠj"pF23Wg=u[C_?eca ?@GV¥S'/wJD([qRRR2O=G+=æ HhZKKv:Ȭ[[ÁjL}/žҵ;/2z ,w/ V>ߌA ¿}k'Dv>c6 OdtpY 'Bi@C@F22Z o2x z+=x}o%_.%0O>c?iJabchB+@յbtq=3 +'7Oa"NN* / _8Jl!7?|.=2=毎U'NBi@*z `8ޣ#ai$03Naiwu=¿N_#[9cD G Z`<]i>HpHJi@ pN-]U+W0r8N_m`G $O: $ c^w9*&܎-{aE+//7_m,{mtvlO_=~iI6̄aI':}kL4J tWnT (gdz())añCkZ ;6zttp7 _%50GQc=W]WCtWT(%*\\QԿ:{P~kr]5U51P=_mף_ob;C&pdxl l\M\[5WyPPcQԯܜ޿/tCݠMK=;81 n¿/ ln3;IǤҧ CE_dzn*55m}Nl4UUUvW1dQl*?{YhA.~(, ¿/ 1 -IcS+8&O=^7 54t j֐G/Ӫu?d;?fV/ ¿d$ڷt4ZpU:xkxwh J *_chXg3rÄǶw[_ώ.F LC#$ko/sgu5[ w@5U 2`4ZxweK\q2ha!?@RnYNZ;pWCIE@/uf/ ݳ>*#'d;o<՗EIq_(SM 'FѰƎ?~ ?mE~~^S\/ ¿dԡI{_Y%ŅvE|1}5xTPZPSZhxw'Ǡ MpVXo {cN ¿Zwv2zP"m!<woxylAY^K ~1TKTs8V wz4tп ->FvN3TVCY-¿/ MÀޝ\>2#'\ZQ~~nnbJt@d9B5u:@5gE<k%譶^T`kz1¿/ Sn;I.FHVkG>ٺ:F_Q(-(+v4Q44{I&wfXy5Vm¿/ a78'2' 󹳸))эYp0GPZPVn 0hQ4SN]=FBBo66u]5+Vn' m{`@8@Jb?+/>WjJ JWC4FρUC-_C)O`qĹx j7\y.ZƗQ(-(W]/t(W\\0l!~O¯r EImlQ(-(հmGb^M[ Uzo+5 B׉+@F7ISHNNVZ`źjVm¿/G gqH=Ys1#_gF/l]m6u/ `NNkGlz)9up~َ Wi@&,x QO>ۧ?DǼ>[|˦'Xg_tvrP8tqp4QoEw ̄@FT&k/=43'N0Bv!菲oeF/y?Ϳ/ y۷rЯGv#9!4xt;} &<= \x5 +cÎ[^*Ln淍^ ¿/ u ;}ѯ)оo aku,3'pFTtQx~5kq}5) D(̚zԟoUg8Kzh75?<|^^#mhJ JEnYE8 NͷO(ms#Ŀt;}ѫM&Ғ"yf=/L6jJ JE~I Ej*[nN:s7 #V\`jl_iͿ/G' ڵrЧ>]\H7雚}ﻞ@FTtm?*:xwL(G!wݮ*O>m!χk$Ϳ; :e:)$[޳?q?ttӀFTtv>$G0e8,@N?`5Ǻ>nҌ f¿mOO=I,'=;p9g Ғ"~.^{I~6›㥕RQޑ[@k"nn#m?$x߀9>r|_6:qҳiao-Gz|\\T`FTM𚮁EsAq9d?Fk>BlW?LOO-E,'ݳĻl܃_;t04-NkJ J^/8Oh7O iV!V;\ksl6_o ltrҵnY.2RlAy&>xUݿz TiJ JvN"q9o%8.?kٔesLOwqNIk۵t` AuW_|g244M>f>Bi@)tdjMS\}?9@?_[~l. l¿e4tХmdg:ٌFt?WiZ$4]gR֫.pFt?[n`cm>l5GJmtjS;v*=}Dz(-(eg5&|1 {x7;u-=׊*"yEK̰Lù6mV}kZ=JlM7OSJBi@)ewvr:]}ELVRRӄᇢr?[}lW䧨Կ7$?%]+8AV6`?_YY7/< [MxPPJ JQk@[ikѲ5W^}+gL-=פ$W觠O~I@n li6ZiA2$a޷hſןGS\To0TPJ J, `Few/3:f}P/(϶y~ J|@;km338F44M~pEPJ J+0VIs>\1fM8YC+L Kg / .0 f"Ftΰ2N} 7bR}7O&(p58R8E ]h:~O͛ xNPJ Jׁ^Ef3DtC#cRUm:& @E]NfarĹ e#e#.]6]粑2ORAB-d?M0hp:F w E,\utS#{&>I&xML3xvAw׿E2r7<l9ma`M 3ۂD7BPJ J5e'E,۾Э/,n3 /_}{Ƶ̃dUJZ4 Ts xQDBN_έ]}>|u~>T#3]Rip\r / ¿/ﱕ+~#G^&(p58Rpץ("C K0 ¿/ ѷoB^xA>,#\\B)-(QD^ǔ q'n_-@ _~3òӇcd)/hJi@hطqGձSΛrgLB||/ ¿o{|<佬[JO3Ji@)ը$Fefcq& ¿/ KKxxG)Ӈ_ Q(5'p5,1)OTRZPJS/(=S&rhJ_b>>x~@]p ?B)-(Wp/G(cؑ#9I3x/ ¿X > ~.J}XDo4 jxで,"kӦ'>^ocU=A)-(œ8b9OGp ¿/G~??gߤLoWp?p8R<(b'<am[Ῡ`|;vVjJi@)| <dj[vΌ2cƝȁ b/ 8o&?˧` zr ^R3J)-(j)i]vY5|,Gȣ¿/  2g;| r83 ^vq(Tu(QzFK1Of^ ¿_^sMGo-Goi(R*s jZ 9za'>>A^?]Uɷ ?gޜ|ZU|݀ݠRQT;O . \ 8#3jk- ¿_kf|9CjojNЩJi@) ([sq 9f ¿oQ~G-ǗďKb[ \NWJ JL"xZ_kڵjQ#q 6_c,z._}>_~La6B >52^p `8nrpv/ чo+~bтy,fKWt_twL,pBXbR2a#rp Ƶ,f^ QZR75k_?iJi@)e3{0tH!GBqq!-_¯?cuzR{jp=f3J)-("(7 MPZr4C ¿׭`K,`7 zcR{xpkJi@)jj ph {lwJKG[N)-2 CfD[29˼DcfMQNEc.ӌm2ܥ ڎ".-{:JҖsy眖ǧiVuČJQuhf 5/R Qn:W/!@, eB`XfW9U Nr o6οW6Sf/ׅzkF!@ҹZOmیB*`2 -ci V^u k^+3~bkyl"]|ŨZ[h@Sjxp9d )٭ayeL+NYLJ+(+u,VBVV8hem{9ʶ7 IR:pQ( (^Faa%L/#z^N,6⒲s SD8@{+wuV::Zwur֖ 'IE׀FLW@,Vb)L+,:c)L_@vvcS!//'{yR ǎ#ҟHwߟޞ8x'.N]z;8/@R7t bL&+$;;S>  bdM8fto]!џ;E"AoogBL(j$I l4u< l6I2rAn 8$Ii`xpWWC$Js$$coC$o%E!IJqW][C$>@qHP;@qH K'`qHNo!@F}k=Y=I.-7v$ IcOC46.8$YHҥQ|<`qHFQSGAd I!x8$Iak48j,$)y#p;ms _,$)> T$ Z g 4$ IJmY ǁ; F"Imxo$,$)TC2a`2Fd Ia"^U}OVC8ۿ8b,$)s-{!Ii h3Ir;HRZۿ#$ I:]}@qHRRxh2I Dn`qHRR!H$|N}T 9™?}F"I4fw \k4k7 !It,{!Ib/k`qH$%U!I \/I&Wn)恒tvGW a$d Ij.@H$e.qQ`STH,$) p.YO6pH$@22GHJ3~/$ I\CX"p'Pe$R^)º~#$ I-ʀW d$VGXӿw$ I+&l"x+p n"('F"Iѕ ʀہF"i!l޷7$ IҸZ*p p-0H$c7ECH$)961z^yjH$)ʀwF"iaI$)77gҔtIDAT q灿Gp~I$l`9.*nEJ;=? k7GÿI$)M+n0)t/.=O$@t6YR(5)?OX˿/$YH.R9p"~`R-@ |$ IҘ(E5ѐ?4 5I$)LkB`Pl,u /Evc$YHRI9X^)L7tff.:Jd IJ;1`ٰB`1P L4aC~ |F#I$e`~T!\1p7\Q9y&3I$I^ V ?z9Kd IJs*`nvMKt@P4DǡG#p܈$I$%Q̍>>Ɉ2ZgĐ?tl"$@40 (#50pg($@ }C[F%I$IY@)P TDK 3qm]?o޷%I$I-?*G)#E#^gNptr,Y~I F>E@aGAl yM )tz=v@#@Tb&E tpO bXn{ v0`8୧Vρ]v! L X>l^Y087NR`!׮ےղ 쇮G ha7'ے/lMπQ4mRx(aM]X̚wm(xhe7GjsZ^ӶDpȴbgר#.v L`%c pM7UjINp6mҢe eӴi&4̤iL222x<p8%EQD" ѣG9|ÅF:O{kNxx u46[j @o˹#N':tGуiӆ|7EԟS'Q{UP=!cǎڱm۷~Z֮]-D,ُ_nTPX={1t0KϞڥ^'Sh+{~\5kXjK,fV7M#Euy>aÆ3tPΠAvVc*YZZw}˲Yk-[Byy/ \:p- 28v3f,cFaܸ񤧧W U_U,[?[g-b 4k bIs3aD۵;5p Nj,x=3}c75]-oQ쎩/֭;'O+]ځkW>dݼ<͝òeKj[ f3u#R\Lʔ)Si^_nk3gYpj+cQ1h @[1ɲ̨Q6m. |ݪE"sfߛG8v"U4uTOqLv7t3[ +_=g ' ^IDUZ.9#n 7o:@7E+--ak3xOgO .DM_f "@_D}Aݹ{<"NNlㅿC!͝MLd*Ƒ^D}A~~>wu^{_D P(AD@$,X!U<$9,,K8d YCSBW EQxwu˦DWP`CtkӦ sS^4x4pD@$,Ê@x,bPV^ߊI!t)qI.6Z)»#۷mIT{[ \l휨[f˟w]w}|%]mB`a"*^ _%|^)_ Bҿy).N$bG]C|)f,2W^y.{~m?2Ai TW"B=yBAy@P|LBQBy@(t#b18?` ͞T.AStaz먙_L#FSOӻwo_aA08BT}x$}2ReRRWZwe'=/{:f @-55W3 oA a"BTxT&2i)rxY\ߜfU$81 &ϒW}3HD?9ޏoW)4A^l:?pp?ޝ787*lcƦ<쳜5y_AA($*d_չ<Y2;$sr~3(.Frԥ. < >}:YYY _QʉQ{S{8d 9M+& [o^½iua`Lx'x'III1F+âlOd2#nK2 ~_J Lmg . 0n7j'0stܹ?P%m_5e;IOZyFn*V2Ypؔ.Ȩ8uCUV̞=jմ/b ~3GA~KW~eͪ\;"vaV۾u~ }:n#"R3\? k6oȎپe6(~ee(:dۋ/%/tԃкm'w"7/mI+&>D<7驲a+Z0~LI _/]'h$IwǷɊ~!ԠS Nj~./?M"F3 C;`?h${SIмv-]8d0??"k޴@ |Hyn7ӧO窫,5jS"X#EY[;w֮@d$I"L증.GA}93~2鍚ZqtjI0gr7 Ɲ08}QCnb]z [JJ saܸqïa-ߚ/v)/4np$cpTkC Y {E nqooV Gʼ @n4žT͛c?"b}}k_|W 3^PP(Vd\.N / K{NHt"?޲_qeSZZo&Q8-B222?} 7:T:Kӟd+ρd0ۃ\pɍ\tm4i]2:r4 V.>ÅV @]F)d͚5cӧO\ VYcJⵙ/~7_JZ_ik[5@h]K&V<`RZkVǰ5nܘ ?_~q(p/DpUX2HdH$(lٴ~6i׵G@i¡6vvJ6ng::e}&O2<ܗʂ0|GeP;o徻oKtN]{Vm:'$"qHh&+á/.:;ޘG#jEC?>gqF\C*'5:ٯq5i.[%‘yRcP//vJ4N ТE}͉gB uhpPTGq/ڨNhIn$Xb|f2 P Ԗ20ְJI/"&M6 Pր\6i4׭lpǼCwt=u ?R2&jgSLo׮#-Z¸2 -+)[o  庫'RZR\[[][Vr>YMcWiBQ晎& i?G}D"|x/X x7~%\?OsPWk?筙u!7HJB( K2إ_{EtpHa#ٹs;?_O&-`Q̙3焝y/*[c< _Sʏ{:? i"===;REn?Qqe qu"ttHᏽp89kD;GF(N&菺P^>Xh8w~kWo͎ غP(Hg&¡-*t4s[1xj<`>?-sΉo֫yluKIcuUAAaq͜HJ" /NnX]Fn{キ^ޟ??+";NdYBUV-tUu,Iy@PXв3Э{/ǚ?樻-1͞ XꫯOʫI>e~qu /㊋i_d</@9$լ9vQ7 Q@P|%%G(>z;6SX!<Nt>SAuŶd@ 9Ô3kVrŊ f7mTnM;LրȑÌݛ(JrQi4d {hӥ)_(=Y/]o>رȒ\&I23#-IL.z?f[69g'QƄ`0=~O30$(^Ej".2~Drr?2=*t_ùWumX{O&%kSEC>s#oou3{o3w:*uve  d9/w18"8ž?S_+K"'%7rϺ˝ݡ`/?PppotBSͥ>ȹnsE4Ȑ^r:u{k.QSoآE VXih^ERb%׭bġ2ҬY.W:Yk5oP|9u/j#p8iӮg{?T ~C5?oM8{+t#ʚ1c l*G" 7\s>:rp:x豗 79in֭Z,;PH<Ybˏ1)'_s-/%´i& ?@JJ*ZasV@-`&ȁ&M ?iga۳$s=tܓ~ʰ3!Ɏ:߱Gt=/cŔ-JX#!%E4̥Mu  BrAlfcֱSW֯_u@u9qƬY-[j <0fx+I+_[yYdH8̫/<ļ7I$8OΓ/&Q:{};zi \ǘ3zS\lxx}5jwP'(gy#F?"? kr$ ߞ~ɗ Y,W$?zw8Rt~ϵ8p8Lf.nI3HMKQ|pnıX<hĈ|ɧU.=զʄضJHpxwHl ~Rt/ Yyh<=ʜ9ȇC4Ns=N>˿3T~@yz̛n]YAN?ij?Z-Z~‚[^F]VoF^5E )=ؿ<%]{ӫz.Ѧ}O$ɼ B PTiwE3e:.mڴatGB-?%ž4c|q8=)lXD+75;~Ӣe+C\cH[ot?!aI%_/"hլ9mP w4nmZ=~֯rܮa "p:]\=&Ur. t5bkuV`ןrkRB(_%rKP31i76R%iF5(Rց].pWei鍸r;MW2 kxM?`][~`w#'u 35-Zu6>]n/vo$ǽjnSo6Rp2$ ==nxZn "emLr qv?{8.I#*2~bY GNrE]hך᧏5R%SޝJ ]'z2غeߤ*Ј ЭJN ٿge=_]ruFb m͛7PbWk/MV5 ң ?@nCYQ)žk, ?! yDsTH Lj\S^ ?PŮ>փvn5$ 7A/Gz,m_nG@3 &_aJ$ۭ2e.`P<(--6nӱrZ7^%?v>v G&/jz7:Cݏ\ 8k_ua}i|˲L=maڴH8D84B@0,ع/~HT@ =p^tE5ۏAiiiw)IFF FY&W YA8gdC`oID~2B@1@v8G4S[~}a*p%Fk70Jou6G@ HR/cJL Itכ$U2R/sÎfZlET(ۧ34VU_I MZ&!vmNHL0<7 VɈs34='E6RN0\1gm y),8: GY~+nc'Νi׾f%$:Rí쵭{hߞm%Dr0wܸԌ?Oܺ] IDAT<{B'zC5댑gTTY / PX_ÃK3{BJRvbGQ U 0&=qgh^oeE48թIJO3? ?iCFJ2T6l8>O3`Æb68)jm{_H3^_ }6U|'~0|.ETZ"׭@:ag%ÏG#M0h ꏚ'$HNeC ?77;Peßa@&03> ?@CT'*' %9N~P$# 2ͫT)=: ?@~V?*護^z~@8IOȌ~AF$~; ?@ZZ#:uazU%tC?D"")6_<˲0`e &co0H ,.@Fd  e8 $ܾfнg_#5pV.F={  +6U~ ?` A8vN']:w ?@0b*hK @2}Ef:vn4سt{tǎzEŸ*$(8yQUĢ^- QQtгg/}GzaI = ?BI-U4]zv _ݺu ?@(R ~=V&*8 `VzoN3Xd?/t @y4 <#* v|C@3GOÐN0wܛث+U<5 'ix%~!1E3- 6zz4o~PCJV콉?&GJfrrZv{@jv Zns+T!+qJkHd SQͲ$i`|lK *h_Ma9Ӑdffi_uMcYP^9;:4U 6YO, PG@FFS[:V!5͖kGmEJf2d,Ȉ p "aY/m6q/f2&22jtbV͆*H5xd $qݚ5 mV+/3g/]{q5_"<϶(ԡst˨t+h<^l-Qrj ~5`5<*JgO?=!jxAH6Y9h-A ]w:-~[ R@PA`P3^f?;dI`H @0 Tlm/'`0hF '8LRRΦH*;>(FUe U,Yޫ9 vs:]- ?,k_C@5Bh&^}OWdhؙ| HᏣ ;e3I.v&~/C ?@(4Ȁ_QŚG,K666G#ia({TaaLeن߆߆_+HJ8RThD;Gj!I7ek r5lD$q1y {)3f<=h6dG~gIY3E >@3?G4{/*<Ȯ@WIqiwH$M8,b@BÆP6h,W3WbaRf1xZ^CU+7_NJ !h"k?@!ػw>)[>W_̀ /4Y3~mX=j( ~@e9&)nK (߷H5엁z8_7NɆ.t3W{Hed%_lk Z~e4ɘ6Ģ aGRV+ ~x$KŸ߱g8uUR )5ϿF󼮦4;ϾO 98/cm)bU,_r\ذnXD* jlND(,,cI 5NQC2f9?<4I3?|Ĉ!W XMII&cx%;O_obowS_RZ̖ڪ#˿ ?@O V %1"bT| dlŌ5Fi) 𗕜ncװ"Q N/N2K@n~U @X S%_k%Kx<~a}`.lʝx@f?X~6sC3+B&ʫ)/+K9%}2eHp8H}H$l_~tly1Ve/\ӛ~K =U_ͬ>? Gj~U\vFw2W>xfRQoZφ?17Ni̩~|GFò $}BǬqlßL ~ds|<-,c#J?J=Rn̶[5ï Z7W=_=ڹtc& Nb*Xh￧~4!׆4__E.o.2˥~?y."_%zKl*I6';g~|`-h җ-BдTk4HзG{vog\" E u̝;G3^LOO=@\YFGed:xНe`;uf,Q{y 9X#_.>\KUz`oUSيg͚h!Ku=HtwMlqjvk8-#ᏝAfÆ?ܬU}M0C ?ܷfԷjZM4k B&co5.V[ 0qIo}چ_$t?1\ixLjGeÅk.DtG_sޛX }:iTyR-zC\槨3|4aoK;M,7IHߣH Tun0NOjs܉*iii8霩j+6Qu*s'p5x=?}nۣN˫ ~wz٨νYӛ)^=p8Xf3yy5;Sdؙ|)6ס6O{vrF-"#]B`NG$? ~Uȉno_H?f|h5E^0/g:G5"&Kq*ǩ byŨ>E>#+--a+/i?f]66~ ߧ ~9yJK>$i,nQgТe+VoҷADj ?yo"jGˆ <)xVSCalVo$N5Pc}SBG5qM6v/5o{;WK8]8xTrj,e! ~ڻysgsEk_m;9R9> !w6[CmKRRkK9Ч ~{(A` 8uD"nj^a߈< [l❷qtH- TGf.ޛ7729jc^Äa]}>C"/Yk?$ 39( p8 ZJm۶7^UW3%hm6fß䴮^]̛ {vo7ziOHu9{`0~tjɆ߶ &LCyըs&O9]vs S$Zd>o[C &&|zO-9u`=F/oziF5`Q/}+%?׉#'|m6f&3vPv^XplH9˃*@%:lm35&JtcF/!ף 6뵗Y{͕;ȋT601|zo\q ^ZP@E~–Sڦ ڷp26xtri)WGR@TqV9pٲżʋd9̅=5T0~CⲱiwyVU|św?۫z%:rf /O8=NϿz ˸8F8=#ޤ +yNr3.鵭Mo'/unx8zpP[d{.ӏ$q݁|xY4,]'v2d@EiȡÅhb eQxMPӈ붃sSQ?#ѣlmk ~YJ7?W:L p8۷m!''>}r$Elmk~HwGn 3kƿ&;35 +#`}}-;v E۸3}a~?_ ۖ¡F9 IkD 1#q W tЩ&~߫q?s0 kGP#OAA?AkM.V(~~ow:w 07X\W-[ѳW_ݙq%I"7Aa? lmMuv7_gW+086b Ycxywf+Z(,Xc f9v~㩽¿vw\{X@)DhX}tɗdһO]H- J*-nzvpt~gc 4ݷb ,2˯͘g낿 ;l? a=}L$a/>};np8P@%U7Uَ}aVn(66j1o}ί]@ `{m@Yp&A<]/gi?ҁa1@((l0)Jc+W\^-reeN,ۢ3hp1bXsr iPqY6 lg\oڰ_M=R)c`FmY5ms>G>~g o'/Hu+ )*,uu! O!57c!=!Vm z )1qx~mݚty=z8^Gc b] @3`)>BRRR+s8}XǬLarzNS'M#77˿~5cJ`;05 I6s/bxFn B cW>zy<+F @G @ˈ#Cq$awʦwd7uX0 2$1Y={7P|{B+Y`'qNTE/F<gshbcHts(8O2% qt53_g M .*-oټig4 Iy͜ $?754b@W/7`m]^xֲg(h37i$1Em{C<(l-GfCz87ZxVہԝ4yLM? n ņ ˲DƝJWAq˥wYmjaO2v*ڲh,`DYdeгWpNZ7wq,DnWK/.yϟ_nծjY]f䋯ǟDQ~E;tqi)e4x C坷cf[~u,lgŤ܅tJ.=L?"ূ $b̀Zh j s6_iV.? [ 믐NN3')>y.B ao$=äQ7iϟ_~sdmVۍ2`Vbv 0pUQg_8aEQ:\v{;B†^̀*W[_t%_|j|cuE@292fy/ 0 /v ? :,'zэ)ѩ ?x>xvRS ϓd9\ѢEW vS2a_Ὄ4^=!–ۉ~oY\vpn}G`7jw>5ބ,ˆᯩaV^TTuo;) F)2]huۦ/Óc'lFcU dԩ0Gy&_:f׾F4yn:r2}K¿nr;XDǷ$x IpǿЬY?~]UAw(2%o&*E@!pa2SU s[qÍsUp=U Ec E #p‘R?S2ede8i 4Ikp8fe^LRw|& Z[Kp8kSA KS(+2l IDATPW( ?#q#ZCIH2)n W"#AF|r"S^wWO>?;& 4Ib6 4MЙ~}7/e k>{' rPٮ7'Xĺ3c-,9_5)BMlkc%|)ۓp5R_ vmFi݉F\rٵ\s-kmß@ڳY3e[/TFez$7dY_EؘTɲ̐a9kyǻ6D"|K,h^"娋yVg8qfԄ iYrtLt :M}k}Åj&xuEk<ҎqIwe`_~gfK\%Phh)@N~$ѫ@Ξ01gNm~{~`||>m֭^^mb?j j['Ъu>Æa9}ę5j~)g:[<" Yb άuf3`0 J~HKkT//)-foXRV,_gxm>ԌS lF c8n=Хk/wϗbielټMײaJ_-V^-z}M1CKUvtғѪu;Ze^[srOc Eݳ={v{6mV{63JCAv4z:l+Nr۲͛if34"#)MhҔ4RRДTN FD(C!ˎRVVJBrapeO [^~ `X6oWs嘔R6ۆN k`ږ(0i7Oj˚[cXgl9Vx(L:ZcY+X֜Guu^lKDM"Sd}H4wnN1ۅk:`|uMJ+zO Qf.!G^/G%lh0ago=pQslg ul;IըCߠ. ?-3'Ƚ@n> 2ۀQ7G`[=4G}Ȋ>2&ƺh,"4sb2Խ C :;$?!dڗIENDB`Ext/Icons_15_VA/KeePass_Round_Locked/0000775000000000000000000000000012606740430016251 5ustar rootrootExt/Icons_15_VA/KeePass_Round_Locked/KeePass_Round_Locked_48.png0000664000000000000000000000643312567602526023274 0ustar rootrootPNG  IHDR00WbKGD pHYsl IDAThŚ{tTս?gI@2 $<[SyE@A "W(UVojM+Vkۥ@EAVW$#!$}~3LD^묙ۿvJ` 0z 8>*,e>@yVѺ!! ..Ar"11Ȩ(p\T]3"jm++a9{x]k_yJYRܬ3H;!ز]D )EF>K٧/[FƄ3if[>L1'0/rp~LmYu.F!N]}JK %L(8 DQZޮ+CXOyZBtz?~eL`Kvmc空z! 3GyYr;Jsbp!Ӕk[HMMCB]ChGʟ4QB+/5)$xeɩYOq7|!yD&Z+CHIЉ30g{4s ` "f?90\Rhhh?g3h=7WAʀfPv F3y`+X&1[bE H!>/"6'.X)xݣg@6~+7\0E ,_W WP~rxe=IU| 0uga db $y , pf]jkQ1]oEFŷpiv+C|K@b$0FGFt^`% xeW Ԍp_d1tpDBE۶L Rx;X@!!::9,ijc~CWoV󪷆 Nl\m#_`;Rk?k u?!++ 6׽L7ߺn Q8Sٟ7fM00 C~./O!,")9!oB}ѷݦY:3/ M~z:K&֒ZsFϝ}r&7;supinfZf.WăD)Va 6dE:6;NdT-+yz̘2ƀܡp<=8WyI'd']Q"A-Sr;X3>3@'G=5p>:-(xYX CnUPط`y6 k37ÿDxCFǥ ^pd]@ެ;bUۑ9(#Fb}ؾcћ[} 3d*;ۚ_$2 :ŽܼQmܶ!?xP]8~s#Voxz_v;3Y82ka4[C:F1t߅Zލ 2nfV_ ZmDƥUT;m6}Zʼno'Sb?npr/V^5=0ҿCʀ5 #YG;H}}lpzX /<8;wK s? zU|}#2$xC0(ٽ3iKoieC> Ӻ&Ru@2!۷7ҁLK#ǵ nseN|p.p?{Șa(P~fh6#"CJ"`6@̾6Z]ֱ*}?ZOXrJw<|FXK}tLkbpXofw=z< x(NRw}j6 ˭tĉcme^^莈fGbUѳf :8\NXP4s | nI 0n 罭Ho'(hKǞ9e&^VnegSGu 4'sD{kVM^^Yz)G}s%֮ZN"iX glg Xx S|m!+[:UKx ]"BHMf8sO=6:]n4"R[ seƉimКG8F]}t͋gȀ<>WWw ,O}~ lq.젲m266 = HsWyY暕(`)FGL`lj:}w~?yV%|:Us76蓠F~~ 9sH`w vRz0 MA -zX1X_8e%67Ne+1{%w}o||yǬt@79Xvg ќȁM>Awd h9D1;M;-d~Ll1O ~ g8w:s7࿝@l\Bb\{ .aE_N4c3anӐ W J!?k}VT_7 ́wiIENDB`Ext/Icons_15_VA/KeePass_Round_Locked/KeePass_Round_Locked_128.png0000664000000000000000000002164312567602576023360 0ustar rootrootPNG  IHDR>abKGD pHYsؽ'_ IDATxw|TUojfCO t^&JbCе RtSuu-, De-t%@hIH I潗7-=38ޛs=s%x"́̀LPw wM1ʀӾp;U.@_$F `R\y.À@A @W;w/vY\,#pM,+u߁fQtRRROH n'>>TGqq1%%QPONQ"2x0ӳg/.m۶u6iۆ&M2Up,>|=Ydef]ٳ ~8< oWNSb2ܹ  AKZ ,}U#xfY[[ ?>K M7>̅Vq 9r0͛w@e=V , `w祗^W^ʦXG-t .pE d]V=@|DMhjrlLb_#>y]O՝̙38qFQ7|KP8\2-+K  6ɉFR H6|eYSz&1 R`hu'^H,X@=,(s% k2J&j ll:y+>Sk}ҳ @O=s/$U - ʜ؂ᅬy 5o4,sۯ3}8?UxUbN_Njڴ)-wޕL!p*Tz ï]J&Ufm WWY>K PU#7$))IP9{x~T#1$E?[P}ngϪ}xgLǂ$'M?q$^x &|KPT؅ ٹwbvNAAE\N.0̘-VxRiն3^O6$CXύF뚽^4B0޷ԚXyd*s t{ULȁ~ |,Μ:IaaAp=dRӤi+Ft]/!$?OhBUR1/0'fO1pԆ% Z^z  dYtۯ÷9vE'PQ&Wϵ&`4C?6f ,^CLvkS`^'gHΚP9v--bܸK2P .ɷzRNr)q䷍߳'ѼU nrܔ &+:;ueS |,ԤS5++رT˄s:r|{u$li6oXdž[lA+4%2 z7a]TPXp. ~USx-AxI8r>##v Mͷ+i޼zo<ス d$V>u6aFS7̠^tcc2qv99z( Lv=xdA)7 XR%.z^G,{=`T< [ fiڠ!#-_5.>$#9@nv ",wvW}VK6ɓʪUWu;z7NwOxn2v#V[|;qqt}\ݿQ G\8{_2|!Lt4H3UdK C1N~\ P<z!tLRxc9rEoT+H{> rE`+Cp 3=cmgs-)bS $$s#e/ ++-ؑtc?! Y tr!֮qվQ+M 5oƍ |j8;B[ٛC4k n0eB ?. qqH2iMZQ;DcHV#!"yX¨1j>CRm9O8BxFlh* 3a#FuUf`W#{<].ˆB@~דV/rxe:TG2ީZEG\ݻo$Bݥk^ LkL8RRѬu#>@ڭwkƎ_NgdWW\:"|ZXkGu:8gc ʊs0׍Y8 tbaԨ׺9"hXNSْ$ѡsZ/ A˶=`"; uЩ n4UgQRxy5 'NiIK³[,qoиV iD LYG\U웥$jEI))jWt͊].U%FqqZ/X0sGPR&s8ץnX\[V+C U\ZQY'$|NmyYt.|w{/0Td@ҧŊ< >H,ԓC _(5aB..0?`ܵ4q pڙ P\rG/3^)qBxrNzg7wV.P%:(jDa# ']ЫOnӣGNWeRk~0K |! w|nfWMӯzb(bf6 ZZRA2p*CQ7,t꬚# lMP n^1 c%2s۩-BYZI |Y(ZnDd|aߊҦM n };ڋ^9J1`,C9f»K^|vϹl?e!<| _~f E|0~^I}' ڴ^}f=88[yp"W 5%$fhXB5J *Ֆ9ŜBr(:&YD׎a#e'OW+jp MO?McOQ1_$mfP$EE YL<fpCpxHH >ͷzc9kptȍ7&Q_C"j& EE =nHJt> />w^5 y”tLb)qd T_@q*sA e _i ?mBE\sqpk!,R|!@})EOB::!`(/Ҽ%|5xN9a`dMۛeYZi}3\.y“'jN $ +,]R_ǪISHNH$hL @*O%H0/.YJ0pX3/%5:@rZ #һ ֆt($Kt:.;[3)A P'_i*P>W_QzRw?O0ĎU;Ri8U&8 $kQEZ ϿjF ..>KZ8r[fkVn "`K|M"O`Մ׫@5 ku_rE/ޙ2f>l%Z(0ֺ ܷ?Rbbst([4BAGPT@hyZuB/tjaNQ7Hq*-0SFt\EDzt[u-N][پU464 RwA붺OM=3f1)AZ/UHAt3BXM>5wӧkϊΖz`>׽@ZƅAe:W/qfB%?ozǚ>,&/_čQ|!=őQפ8+sc8Wk A)@\B$I i0mV{+?sU5*#l ww${cE v6|! /UHw"䱠N DM(6̆&.֍|tOVWnAQS3Fh÷X ip9L݃,nb @Пȡ@m*1g%\|OZAqصCswih9/^Wie+"&3}ʛs@#(Eïd+1Z~]U@UؗM-5_y#ul0SMOI6,2[73i{;0__/#R g8ب3e&{Z$n&;ӧl>L5旁WU Ha]{D]i oդwd>r;GdkyG%Nwl ~^}%7}MDKy#aޓnZ8 ~ijD",x^-Jٴ_%uo>` 4mp^_I"!آUa/on!ո &LQm>^Bӟ 8(ucB ~ _ۏ*^ˈdl*+?Y.ښ |JO-x`$&d|jLAt<% o1K@VVMogK2щxlzzsfG_3dCn:(+YKj@|뾈AVܘŝ-I0,\@i@pu0ZGcHCf"j _Eٱ?<2y,GWj [L,E3-ԝ:M\}mn84;@L %]l$Q/` z8My Dy%AD6 9;n ?;K ~!Jvq+v-H$#ӌd60a3:9G9|tVgE9t$> ;“aXf-B{۷leCN=w|ݷb0l[ $TH?|G_ڹ# JZQ"D[}KwoDZq7p@18zvn7u^~`ĭwkw!Z(ʿ^W_.Zd^T%Lû)>3^CL V-cŧۦ"F% "A-J͓}0†_ZȐOuq^ u{OR!sGL*@y Wւ>Eh=7vnky6m\L^UVCU'!{I^&ŵ(]HIKt=rrr@}`bp[Q͢Vrg,AK,_.Q">))iXl$% :B SVVJ~Nq,p8oV~Vv5L@M%GL/˭^Y9X' x O9DZ1 NƤDZrJNӵ>owD q#5Zֹa kߎ71I Hp0R~|=6Ha'"b z`3V@O)R|J= |Fd!bKڳc̀v62@aǻ4T3%iߑ ƻmQ7hIENDB`Ext/Icons_15_VA/KeePass_Round_Locked/KeePass_Round_Locked_32.png0000664000000000000000000000422112567602506023254 0ustar rootrootPNG  IHDR szzbKGD pHYs%%B3E1IDATXÝyt?Lf&dD$e1 H( dhRmK=sjOQOETbȉb J eId [lmf2[no&(;7wUfS|`0 ;@8U`p7@/3Gzz:.4R__GCC}& x%@H^yrl†t v0oSŕdBVo > 8HAA ץ&a9[*CeU IucX.rC -o)Wcm.]Z! nmi f W'ذDʡ_G`v3ow Iڷ;DR0~*t]0x&غe#?@_ .\..ਢ({a0UڦTև] k'-#KAu;Oe.m䭵 [/w/[E~?$b(-㋾GkKF0; 3 uUtuqp6Fp+>4]hm7 G(* N>#Ag<76;Hg<&Mgi^_6~O܆a\dH 9q Ʈ]!CkM< Lp]Y#PmŖz!9ڨf8nYVժp1yMH ̞~Sf>gP*?/ G΄0q2cMZH?^L!#Pס of,fNRrhM Œ`E`jvf͞CH3/sMPm#@j@׍p!Q"?23Ρˌ:3ė#gHIZpMņ+ 1zdeP_s4Kٻ6WgH^]vR8=< 044Cz=Yiq̽gPoWx^DY@ѵf8M@IcԄco"WDH]\LܳeraVVܼRv&h1E0 0 S0Lp&$* C>@Ljӟ;AUY)pWpBzW+KͼT6U##7kTjXI X0Z[u|!L{lJJLa=vGB n@KAD:p='OsPU'iSbIF> DXY͞;aX ٳ .wZ 8jh8ƹ$"GTWܘ+ѹ"-rv{t]t'/mk˂gˠrȚ칐'`Ͽn|c$3gOX8!v4z!ܒfSؾmخ(HVN'1ؼ#-צ{OwN#c<4C) E+/Х=&[$rr{:Cob&iD>#B7Uź#CAB8V$87>>\skLEobH'}m_: 8#oE֯L ( ltF\*tsz9 yIR*a@!=à􄭟jz#a+:;(akfnSUؑNJm_?Jw0Pbnaqۢ^ @;X=4$f dq!"5D?Dx8Ѵy].kw sUo-wZ僝rˠ;-kHF捎}?lL$Q Fv PRK=Gˏ#sTWcf@;#I"׭qV)k$'GpښHy[o F#CyytFxeyWJVNђUImb³t+7?ryLSLHY"n,L2u?l56i5p  gOp!\N|iD8#-I҉>)-m(%2~|ݑ̜"{ê(s3/7yxE XGdq;| 27ç9 E^N[&V]g 53_J.S>);-5H]E "ő1 LTqw t.!pk|^(Z(8r e sIENDB`Ext/Icons_15_VA/KeePass_Round_Locked/KeePass_Round_Locked_64.png0000664000000000000000000001060212567602546023265 0ustar rootrootPNG  IHDR@@iqbKGD pHYsIIw| "IDATx՛yxeKNH @BD TUQYe\:2wDY|ETEF6#D@H!tުGuwsTWNswΩ$~ @&s@P N'vnSAN]@I=bu,udeeMFfi]b2F̍_(3g(*:,Y ^w ^O+99Y,xdJeabUf,-hȢYͲ07[C,H<8oHJ"{[+$I?~ر㯢bv"lv%d jE!QY,>=f$,f|ʔȑPݡxojvz,RM\leg8M^*l!nu V{U(n䋄_21L֬YèQB_]`+X`wdEP}EW@v+ !'*BUS+},}rOj pl((x-[VN(`+4 6;2!WJXcN^FQ 2BBBBiiݸwփV!@I0$HAtؑwyѣx<U*Td9׾^$=:$5j MMuVϜj$`3н{w>|'nE}ZSY? ;w}S_WCmp\BqddWNw /nRDIFIrDYY)3DmYB Vi}>77;wo J ` ooXomm` MkB޵/u2ɨp"3g\gLV׏t?(d744P|65l43xx~Sh{%3 I'!\)/I+5M@Osի|E`w ˞DZi3oҹK/3p;Q[[S3 H۶mcA*x|uu5 ǿ ,>)iwjiy^U<Ġawb4FzeR;$;;۷ p1~<ży>!>%82Dި;9Ix),bⴇsCt閉^o2g_]ғܒ7!t5W͂ b-ztJrDg=Ñ#G19@ye.[|W€#ۜK֯y?z$q}/-S)N#[BvcG li+@1xIXfC m[6zǪ7?^QٕIC=;7a4/ + ar$i3ijE'O!/$Y ^QMlgjԱOXGRr]S]BRgzb5q .t?WppYIeOԊY'h %Ibٲe^$GVG c"#33x$/yŧңAy[GFk)F,N~xn;oo8qC(S 3_2x׽ݵ(O٣}Cu}1N+ rݦ0;ŴA/]CtLIkxEĎ]IKY_SAm6+*' f|P+&YK(1c%m%S^invw'9 k_!D` v5j$6yb ^Q*!t$pN{@ "6(^C,(PuUIAqq虥L ,*,P0Q(:N2 Udp+2 |/Z}M]!$>(Ut0 =28[N  3+$6AcYTw!3; ?iv.#gR?{tbH?&@uLN*=2=fj+zeCHm5)# H{|TEYHڻ/ ^A>qumm݁=SL]͋cbb'ʲ rx[lx"$X'M0D}Pa!؅{&0"btWԘ[N|yU鮃}&x(:@`p?(G^ch-QƧ~m` Lѐ{<[x3by5hViDF'/  fxfgSO8yNb[7>V:۬(s~6YWęn׺\q~Q0{|q$!'&]Q0xYt;\Vp&KO M)w#{붓؉J9y𨄀 jb.'Ģg&a C#ɧagpXY?~z+D$PVAIi m||kˌ#Exv=pbh?VSefA?[ ^Q``N8CL|s;O,r~ E+^͞7%y0wF1!;۽ N7%dB'=6;au߫AP"ϧi3[,VfSc'C#Y>:Dk5nٽCj"$ z[lVx߮OL1 $i)Mq02:/xE}"@RNZ^lve3tgEsOBDd+ty>(1w{zmN\tRG/_O"VvY9v˝H^c 9c Z K^$KH!ci nj c[r#qOk_Ҷj/F,^AX"! {Ḯ=#;WϞ^q[@ `| y>8 Εx#L]R(Mj`xwje5ƚrXPDM 1Cƭ0No+;wֻ8;x#~v JKN{h\./KxxA-cC!-w= >yuzyrnwK52}tKޝlڰJ+zw]קZb* ~;K?+?NojM㫵 L4s+$$bo(/vWdVuWT{ !~h7+5=?{, |K%tF FMv(箠##D1slo ~?ER"Z4y`k+w˂>acDghP~̝@shc@8(0^8V:-o >ƞ~ Ţ9Nlw?q@WdNjx׿wNR)l >Τ> ̉ovnv 6mX%\ɋf!yt B /#lFɛ9VNNz>tM1:ySR|u@AUJ>:W$vݳw9w/b+ Ǹ'0 .ZOX= zbLR `M_ԉE]E]5|dzby7@ߛSgf5T\ xy̅\^@WV fqpe[ط˗}N/ C%?鶞XVi 2$Gj~o_ΏZ73S]` HvGR65illR9eŔEQ?\:C$UIJUĢXD{7G,5}:| W򶈥!1uvl/!љ(D@>i5@1#3a0Rި'?% l7{IENDB`Ext/Icons_15_VA/KeePass_Round_Locked/KeePass_Round_Locked_256.png0000664000000000000000000004421612567602612023352 0ustar rootrootPNG  IHDR\rfbKGD pHYs & &b IDATxwx?3[%tMQAJT`U]OŎbEBQQzG:)$z~.fgݝv| ݒ jVx ہGwCwp@ lJ[&EfZ큶@qU'7 AAXx<3]=~)oun@g7p&z`>ݬT'=@j~6sw؃i$5gq,fV f3]f \ |az_;zfu2-^ hBnF44CYgmĄUW01?1M(c<44iѲӁOPMri^%273y`ZfFM&pM;*Y0 E< 71ףvԨQ5kRfMjԨIff&4, $|!WY$A߻v}6\x x74S,@ù#V+͚5mvmۖyy撗Gݺ9Hr;8> T]%N=ٺu ۷ncͬYUVצ|l-t ~7)m Cޮ]{zN]֪5N'R7S񻲲2֮]ͪ+Y|).`ժFe(7ߙUXDRR{W^݇nݺzFm}Y\\E X/^Hii'Aei;G,N I 8g `AUU_ٮKKKYh!a޼9,[gxx(0\ PFD=9r$!IS`WvR׳fI,7DU < >Mk2dw@4ںuW\IMC_q];w0c4}9ŋF[ ~Fd32 ̊2II47''kŵ׎izp_d|:#R <ݦĿuFֽ[Oe?ѣG3tlS`_u+|;̜1 z4T4-`1rX5j"&_wθޡP: xUL9So7̘1vdfd [qq>_};uO+%})(,ЦM~j H/oni_Nbz֫@Si)yyy{\wX, //lS@ $%e Y,!`HX-`J̘>'6mг}܂X3`*J}-77Qj| j'^; -m[]rOq I"a*I6T(_~?ӧOG˖͛o+Lp4wSSS{Im}>rG+WYg+{?Z28Iv$DCj<O= +Dn<-Ĺx݋ŗeY+b\pGр/e(-K.Wp/G(sOKEX,tܝͲKT.AYtaz)g(_4}K/ӡC _q{n7x|D+h Q9THKIOIvJ:XsŋQ Ğ堤N333yG;VdY~W'D%'ǾSoHdɤ&U>C#&}1C򵮗QrI4@?krCx7hР+|~|GZ%jZ!˚_p߽w2}d. 99 zaO(22ܓٙjfX$m/_r?oc>M#Q73@#eMz!ƍ#;;[~(s \nQ{S{XddYWM<ᛯkY_(}at`4>ewMJJ_$99Ys}~% ~ԏ+N BT\g_2?N&i?@Rr2ƍ0x<($Xjz58೰K.1-[wje.&?54m%-Y`<*V,׌Y lz۽KZc4iu~_PR&u\C>IrH{*Y3K/#E7h @8;r:Yrl'+/kG}V(I69M$_̙Cf4DBq}XdK|/)9!HI.}~ԩS/g響c6-%Tk骫fܸqvM% no̖Mٺu#[6cPVVBI\2:dIRr Τd2h֢-Q4kANXF)djboرcD f#GxdXd .W|bczIJN)=:YVNkU+qɰ?iqMZQXxej`oԩSDpLofN溫Ÿ.|>/j>Ϧ ˙1]䴘ÏR?}ȰbJ֪]~g&Gh;S"{Q'KII믿O> J\o\'14ou:w4m3KDbhNv%lW.q^13:=7(IUYRR3g3ό~G#N߻k5ܐ8Y_KRrv)B(^>VTY5ݘH.P'Hmշ'L6->W ;/..aZ+Ǖl:vϿ~_1[JFv$I]bkf8 zG|Z$w}aÆ_(u ^cjR.vkV/v{v֡b ?b?%~jgYN:Tbx&ͩWΎ(P^p%p$;xᇹ;"%쯿P\T +.W)sFy&U\`5-  mu뢟#)ӁxH\r)B(3ż~c?yx^ Uĥ !,+3iުS~V8#E ݏm۶v͊Hls  ןɓ'2O)FxW~W%K#EtzV<ԭi=n@(ڭ 8<~] ;O%v1VSSqnn.}iiigkD^}K=llXIi4o5f,R)cڵRACfU$@YotJ_rX͚9 AY 7P?+Gܖ4=-f ԯeEdnӞ}{wrşj.ʪC ,g2ߥK~S: 2q꺱?sňc$ÉU$dתKIOAZz&iY0EE),g֍<!8I\e1ƣ/}CӺ u''JVr .߇U+-R=Ɉ d79K)))Ջv(z :G͎#5-n=ЭtNMXm!xY^f5ud'9oW`@^fa~,ҳ:5ak.og-}vQ%N5֫WKZ2aYCzEeV$G5oYLy~bm.Z%LS ~snW4s *ׇ~HNÆ?o}>?ctkٰX =yNCB ѠqK.x46"~~,i?9 }U ?@rr 2sdZpذ?K~W=bKUsχ \.aE;|+q8xo_hծ'O1# Yu+_}a@A:]¹~!_F]Z @]w. ~7${vd]ڡ/I<;Jxoվ7M!I ?C66ps2ͷޫ8.jk)Gs2|#G`85bjï/v#u2>`نn?‘ԫPUqh%*۱Xa aH].=z]@gU[rXlֹ{< ~գnQ[$7dE{tu]XQX\}:N|7v&e)56C?h_9 5E8C 7xaU|qߵs;kr] |Y_32<Q NC/<,5-K.WH&pno%,P2.B_p&iVa󚶦NNj ?@ڍװfi;ٽc!?lt"zX3Ye@QFa <^aXuͺl6;Wmw:ͮQ޿7~!^NpI6PA#q"qTn ~O#Ï6UVQeܭo_hݱ/Z%سsa>i"AHhu ~᧒U}6[ٔVMێ=5[fF~vn]ih6pD ?9v5FFbQaBdUҬM3Z/#lu͆_z+d,V+BMXaj lkGv  5rW{NkYiϺn>G㗎Ҽp2hyXֵk76m2+, 5[[elga^[͆>^ސ@^mIM G|#F ~P~kXdff>KM4ms  W#Ը_<,,}c]F_(9 Iɩ&wgRӃKK ?^ !0؁G4 ~8rH1$fxw:SdVUZlxPw~zҾC5EsvS @Z?T#r!k4{MBnޭv'ZdqRFDUsҀ^yj~Â-36~v),8Z;,Iq ld Enhْ&M \* `8t~Nw4kJ&@Td8pPXJƟx_жpE9 IDAT௝㽡*ufsM[*d (}T ~_n?&'K-[B2?{ˉ?hU @c83C*od^`T$ G ?@}q8T%S魩݇p7i/~'X v ?3);T#6C>a+ ~%:¯y VV2>W ]VS@Q ]dg!O+T (M8_f{!ЩK/5E -=YVv2LGu3W߷ ?@NԦV^tw/w 555d\8_+&z$~ ~tZlW&v{ ~O󉸄_xen8%~K!SjJ]Ea/D֩S<^~a¯:(kn8?Xv ڴ;]M `C|?c T6@4_~.R/ǹi%IܲQF'-$+6aV>Sy~hkyM_L5򃅌P VTz ؾ5+s@+3oP?d ,~Ǻ~Iįqx?m?Bݏ%7ꆢYZAwpE dgZN QsT @ wZٵZ ~޿yl,MEڼ'%W9ͨ jZa*Y3;d N?h6-YS߫6~B9 D?_#+KX @͐Wb'9O܊}v`md.fzRe:IዀAJ\"dYCtԨDi'r8z5Wa2e~22Y5\~ dF8ՂGT?e\B751˒$&r$<~!%B *Ȓ)!4TKKK ` wR;it`{6kF6 KS36+?fvjjbpȨHbCM{{9d}H0#^q=":?D`٣'=d_dO_7;I~7k&av2ɴ*\iJy5E`Qe %yքhx0,f͋ ŸbEj<~;ugH7LKSr`зi? S`w8'7*C-$*2 + ~x"d6;U#8e7f-3ـaĦb!IZ;O~0e2 eC,[d),ULpYV@nJEG D^$ uAN=n8 ː,e8|~شK}s~!"PvbOπ]GhڟyMClX/ſՆv;ٍTzJT\ ?qDT.*[!GEE>wu5,p|U<W\OqEȿb.Щ+u3Kwu5ga=fM r6-z.13~B?&[~ ?5-ZeWåWA=vV 8oz`/0} L0MImgei}M )db>}Wacgc8G>~ Y77HrH!PTTZe/> 6+nQW\ ?.QDj ^IR~/d2Jꠚ[oG*W/co&kb~1fv`;g=wMrk×G Gss1🆄C:8`H_7JKc ੗isںYaەX5>)]>Bż2/7B_8Jj=!T0qf_ kuER?$;8|X z_囯bw<%ICNxI%Fpz!f_AF2-MdirM ^ڴWwޫ!Xr~|M2S;_I" 2w$@C7Y5m~cl262~=w)=25_l^FK.13sU#`мeT{ƔH._c49dݥv V1%zsY ~!tpđC9Mh@`玭jo OWirexBQ;iN`PP+2vmSSl}-0<T@jL/!OzYC/Y[VPzTqtgCsP Dw 0ujZC`U#zAx*[v;IE-Hd¯7Vt4 T+p.́)(B-0M_iAB;oVS+ ʓ=q|Cs 2$: i'q/!i'먐ܗ#M/Olh^{GԔJ-n4Р-d6sˀA/ :1-&)}$HDhut=Sոe 5~WoDA9 O8orz~4c ~u_yXQ^nO?SYx^COh֞]FUvdjJIKB?+-kNmv;S{ӄ_cMר*_ܦjo]s ۴wz;WPo&/4k` ~,s1~uxQ}Jp {!oVd6nO>6=Q?+7oOg~5Pv:+P[N$/MC`:ge^b]=5GoS)>$LJ_%mD^78$бmt!G@N-+)I ?2u) b(>Lj ػ/.&^=t .s( yC{Xaٟ\'m5׬\3M|R_c"m|\>pPGׁ^wػ D}&=HݟkU<H_2T]2'@st+z%['ܯۮVHG@%c,{5 ? ~Ʊw+ԧzm;q m[XoݲAo*~P2@{KNkG!hjcV%gD<@,Jm ~sg'aհ<3& -&jG@&Wz-\$K4w53cXRYX';b¯~$8#,wšUz< H6Tz v`zyaz6;$Fv%d5Hc~G^H;5uu8n ~tj ~oR̓ Э6=fˮs$ȍ{3NL<{Xoݲk9 `A.zi?^ۮ;aX/.,R|9C:d_o[[]JJ k-":ޚ1_$zqaW\zRdt)dV1=uV?Pk@:6^q*7gUs?N?uɡg<Jz6jn5rx=GC|}S~_I. r~a0ujoU}iE"O&IЮKww[]DP36['޹ 檹-UJ @"W֤Ytִ7cYV*&4߄ $?&CmIOC]jDѫfL hۮ3wW\; XÂi?R{K=d$[ DYyfi{LO9),ń).*Ps;6GV@Y"uEr1ЬisX]Lq ZT`ə8闢鴕רtкCY' ^_LxKxC}Ƈ֫=.%if>ee]^Eԧ6Ԉ6cQx 2$?iغe+{9HfDUǿ#n$;z=O@$E'{c7?l+Os?s|8?9qqmHA03&py<6E ?2 뗊$Uƻo>VKܺd8f>}<7gz/3%Q5,>ީr!㠰xwlL@fݒÆ}|0SL9s2]7PrD  ? U ~#ŪET+0=>[_ '{)oH\vv*6JUxKU{n,Sa@lӆp]v_0ִ {x#3WknUլҶYP+Oo{kg<V{S#)+2m\_[ i fNGc֋ &UW?UnLM 4^M+MQu}=ysT{n?7+mԈضrKM>i'J(l~ŽxZ&SVHZxqi(+?ݪ0T7L?0+rߑ :}n3v"0m\"|(-wlQm)m߼i-/={$E=D\P5:$Rv괮o``>!r񟻯UZKѠ]^?R+_זH́9u9MZm l8;"t~N6[IQ? *Y[%j qo lXrvk&4XG/IFRˀWwF '8?E {>mi9ɶrt6uZ;<Q"2G]jwl)DS[ߨO_; C2 +q#u +{jȸ+_ D'&k.ب{B_/ʍfv+v? A_: <-&ۺ])$ ظahj}\XUHHEVSƽABY46mSu;UM$Mtn?/>̬>xo&U j7a_D[^yV|[E #Ux(W$vvIꕉ'F ވ.Q ѯ=DB:E|-Z%X,zn5'^\H VW|aB@:n Ī9sџ:\ۚwשaexG?1((-`H,J )˅=f$&*0,6uWim#2ɶF a9q"||a{>DI@mwLB[,:צּ7g)yUŢ)떑$8FW6Hbz8Z@}۬+Vm5qE[OȌML@C6E5 $AI\1(ZY'a'yd cW {*Uy`e3,>zNlob;vڅ5-ßmeXTײF@n_OLb]#SJu(aPJ;-A {mh2pL?=_+1 DY65t?zh8^ DW3~3_%:t0{ Nc6R׮^=^|v1WHB𿨜A_b @|/12j iregi F?$ PnY 4Y5o _~ s͘laF; 6Lڶ㨎~ӏԉkYJP3hSSgCfs FcM]1|QOO9-N&նKL>/>sG5b8'j -&g޴$8_T>ok.lsN'w4K(t5ӢAEk Kx{XTup/*'EH. #Z O<:/B({iqfq fg4cYu`?o8_NO5,p?J>?D i3YV=yM=%S+º51=lŋ'q_[3-4mam HKN 9{Aq=3rG2b?j˜n߇^ qJz;v4TL+ujXSJf$lz=so8;w\w)0(f5= p \8k_3|LlLH zf֐a [$NdDS&.tJdXLOLY2cg_c+P&iVSiDsP(f@0t Hb-zׅ0g6LQ0;_SUS#=7gN7a֍zUp3 d;@YfܘudYKУ|N8*9|?~9Kc_!θH_M^bzN>6oGvXe |jop8o s43o) ^EFҬq*m#QjD/fv>̚P.6Px H6oC.al0Ō'Tj!3ej9hq).5}PҍwD@!ȩ7g^q odE{L\Igdips LnXVUgMDM*NH\ 4G|/|)^8RZFXW N7$.F0 |uGGӇͤ e&h9H/e(P`6KNAu]n@{pm(+PE23 A*tG{C_,FTAh`%Dw, 17 C %~rEYԤPKʹ&{)x v!؎6[V:@Q.YN ꢤ_j^YKXPu +}KQkJD~kUfb{nEEIENDB`Ext/Icons_15_VA/KeePass_Square_Blue/0000775000000000000000000000000012606740430016110 5ustar rootrootExt/Icons_15_VA/KeePass_Square_Blue/KeePass_Square_Blue_128.png0000664000000000000000000001162312567604276023052 0ustar rootrootPNG  IHDR>abKGD pHYsjf3IDATxytU?$0@X@y8.30ʦ,0 m'㾜#! ; & [@_=fiY1NyZ/4;l`-'2*CG2dHrsӝc.L@5}-mvm]u:9:Qw} ϋmhpR稥qΔS|pŇvjj2O1{W^j2uLx11q:g^{G[Zq~0x'y6mP!4[@ESTe  _ }sN}yǏ1@P6xNxIIM˹<;DŽBB@JZc'IccnUjiXmJ^Xƌ;~ _l,˥QlE3s}d$o&O3c =`) "ZT@Nh_)&|ᣮo2CUJfۀ}L}cJP2 6/Voi7 XN ; Z;RuBn<&͘ˀ+F~w#N dH=PtxCw57xTR]UKN\bR*)]r_;n X-/85v{D\=I;j8|pKHe(R/8/:&[cDE*Pg G)=Iis F^O|R8}bHKtuzN@Jq'$o(ALLq*׮ ";3MzW~($'Pg:Uܾ _sf ah ਭY2f"mLt _ A( _ X ]9u=${݌ CGbbHZz(#G۸Xo[ڽ6_G] b5gjF,=x'|Y~0iFn Ew@ +A᫟,kt00|K)f_hJ/<ע;|! Pk/T.e _#|Gj֢+|%FiS:&..ظĶFlDDx6dCbIjIEaZݔR;@áB~2o_oOύ 2w:J@EK,V-!!zaxq䍙ʄ)OJ$|G^fR﬑ _B88<*ʄ kYB _gn'6 Ȃ/%'PV,!/4e|:$—tV,ZkHTfc^=UytoO`㞼̊0p@(%PNbrn^dyW |@A`QӡQo} /3wNV B1j=ۀ[ʵ/hϟ??&.WxWJ 3.W%_A:?hBg_ƫbeE+3% 3l"A?l1@ *DG=^A{*sGO!N"{{Y.<)#_A۔X,Yv51jmBr}`F(?ߥϟ,>gCV,@T-w)][WK%43_!] wu+?Z.s ߀]MT[W=kq}Lh5WσS?rF`vY@fvnk O[}ڏ@\,?ǀ!Z"Lar}ґ ЦYܾo{)[L~;܄BvRaW1C/ljXyT&NG׬>&| )ܲS6R\ tZ|V¶X LjӸb DěDj8SswJ"̳Z?"`s=w8].%5;Q"c=4YCn/7anKLh{\@twA<_{<#6!m;jrX_b*@=J<_Q`p!_ohfgvpNs*ԖĜ {4KZJ͖m8ׁP&.e8&{`!Z$CNKZ(_K`) HDf[{Te}ڒsJk1)IENDB`Ext/Icons_15_VA/KeePass_Square_Blue/KeePass_Square_Blue_48.png0000664000000000000000000000405012567604242022760 0ustar rootrootPNG  IHDR00WbKGD pHYs?%IDATh͚l?N߉]'k2P@l]iZ`tVmc E [UUj*]Ґ(XJ@B;n~~m,=<{lb`_ ٢@m9 mt&OMzFR*-R)K}a ö$ F[E~_ i;0=ػ|Q$6lEO $ ]+=뀶\:ʽwy?~9sO fUWIUk|>jk;q\ϫO/~-iL`S:1zrzP lJUO--x>~t~Wl6ymws+oyt)w&/$$%Q|3}g*6dq̜Ou.4i裳LM+e WKl[3;y@@i ߼q_Xw&gp1<=T"-#2EIjOf~ ~X^~5Khk2z/ǙjH=ٲOMѤRvqܥz^߹M;HMwXS"; CÚͿºx3>˿SW9o +yf^KBw0%i;`X{9wUĖʝB@nDVϷ%^]݆hCKBʐ4uʃoQgG.mُg=ª/ҭd ||ǗWϹӺx%,e|a롎Bե&d!~!Qߞ`Sa-$=sT=4{L (&CHl׍׋Kq+[8sL ][1ᅐQf ۭ{+ ampMе o4CC kt][þB`tn^hk{8/ ŀBz !ÛBb / c+@`$l&1@78`/dOQ^VA „K62r91#]3Qq 5+Sh<\iTֶe7F#C2JG%a[M"b -W^FIHj^P~kʫr>܍ #NWH,@z3coqY}Y4mhC) HڏqLexpjRӝ9{R{clo\69dk><y!sIsS.= mL*$=eV$5>Ьz~Ɋ x={rj0R3y:U[VoHI17]]Ʌk`+ 8s?rw?}R݉x|Cp)̅Y~\oQe cS7^U"72$^Kx=}TϢڵ혠fWlg,)mSs|SoFR‰4 V >apʓҰj8w)l5!t !ig>JtCN4)n>E|K~硿9~[x!aRg8 O 7hI%8W7LO|.v['"vz${ZK,N*<-X!+cFځ=ɀ!Y<4ZmKW@wU|l13 ĕ uV88Ի eM̘8)iٷ~OxN~|J &8sS3 FF f#A}I`ˀj#VԎ?{Zq)x {=A7EFvIENDB`Ext/Icons_15_VA/KeePass_Square_Blue/KeePass_Square_Blue_64.png0000664000000000000000000000524012567604262022762 0ustar rootrootPNG  IHDR@@iqbKGD pHYsMM_ @IDATxݛ{pT?lHH AƄ$ Z>h[k*jR8Jб3B 2utc[a !@DB!Gv7wݽ7$Nv=~~~B5@.0Hd`@=P >[$xp2_ x(4 NJr;ac>/38a)+DzFÇv^WN{{[~SW`W< p#/#3.'?=.Q<7^A (#T@QT}]tRk#k*Wo`FxWk HЖo/.fٶW<ș'eP920Y[b|i9QZ>iP+dpױZOj‑@e ؼߦgѧ3heN57htZ[FP@ V lg $f,6;p쌊>t8Xϩ&)>ظ{˔Ld4|ŽA?C5i<~1"-rsqL8{\rȏځ$a;p"d :Exc ^s:!d"D^hWSk Z:2ݍ-6.JǨBbc\!C-+h M]fo<潸Ų3,C96o7Αh<VRPVaY'vq9ԪwB(k" hP ( hpJg7ӳu)Fh9GHںE@"ednXx] cgBzr2v{<6{۷5ӣtUTi M o$'h04}˧,nW$ozJX`&-Mu9o_zydnX);Gzer"wSz"b 4,`xPZ@8%QëB"d->Q@;@AEuU3+ILZfIX@Ë@bƕX$.YlCݞ^{c9z4 ,cK /VAˁ--nI^}S'7 ̾mr ;&pUnN1/frfFKnPLT ۣb3B29$тA2 u5ӡ̲FYaSYݽK: b|YYWۋFTy pxVGxBHC^-Aӻl̾ٳ}U)SsVM1؈'DhYOSnmK҃47ՇDcF~su,p8]&NA3G ;O囹~kSӹL5c:Ow#ڕ7лRd4. Ekn''6qhkF}8DvS3IHL A<|\rhk*z;CE?Ro:dVW<ƫByl1 G>?]8c~IENDB`Ext/Icons_15_VA/KeePass_Square_Blue/KeePass_Square_Blue_32.png0000664000000000000000000000252412570045466022756 0ustar rootrootPNG  IHDR szzbKGD pHYs:IDATXõ{lE?۽E mT£`P`@ $-hx૕  T JH`bAKPՖrkKdg?ѻwId3gtD`)p5@ լ~0u\z5q)}{4j|KUq 0$!qxo.τTnV0?@J^/U{]47WBБ2]H),[Qyn~ή[ QB* yapt 꺞|ꧫeƄOMu%gOFKхL2 Do|p0q䅨@WR[34Z\΄ɳYڇ{S\qw<]]xtG: <46\ ࿁jLiv8+\H|@4o]̹<+x} ;7Qc=] ;aւ5p8 ٷ{>_"7S-."ޗŒoh&^u_Fӵ+Pt@l?x`7@;,g"fC(/#jok6SyYDۅeߓ6]a۫R1l4&b}j{))f<, p3~86BXP$pˁ wΏ!#Ƴh?拷#Yq>y<Jخ1C@<Ss(q eA81bq|i 3DN$$d{_=Wt`FaR\06Ͷ0yd ?ezJz9+Ɩw,EK)sRzaI~=@%Pj ?,#MOߜۏFRsӖqF9:p !Ȫۅa8ݓԫ`+3P8,(>)mPN;n6nӁ6 @)p<΢>/ Ӂe(IENDB`Ext/Icons_15_VA/KeePass_Square_Blue/KeePass_Square_Blue_256.png0000664000000000000000000002334112567604314023045 0ustar rootrootPNG  IHDR\rfbKGD pHYs55H@ IDATxy|߳C]EkExO}Ԫ֣jGU[E@ACp#@Bȝ&&ݙٙ}>׼\|GLx??Go~\Cy[ְ2;fPU0c fbkRSӸILrx2/(][ysߥ2F./0L_ɤˮnN]~7|T>T'B08#-7uB6m)D_7^SVZ'3_`S[S # p%˚T8݀lFo~9]HJj/~ɩ3hFO`O vm@eȢ[ggw执Yg~?uͲƋSRlZ~`e4 eӍ9wAC~?aGAn}>Wغ=[BS׈Ŋzq˳Ufk_O(I'*+F) zUY2hӤ3w8,D_w;b'UT[e%zÂymf1b8_|MAca,+@&P |5 :wӯ/7 u@= ە> 6ԅ%-y?4M[aO/ ͜٦=Β3/  ҁ-fi;c6';EߛsߟOuիh6]ڴ-1/ w!@-iL`3a! 3uq)羇եW ]z"w7fzmh0[apdu0eSF? !u0+40`+:Yw͋|C~+ኛ_MVY@k74~E:v$ Ooݶ#_a @7# kܩgr~_7NL? 8/ W=NRRYF`LC0֌;xtS~W ɸS2cl`_VYFڴ~dU^Ză7̨ 0kn~BRgf1:jhBD)),>쎝~ّ];6kwm{)W@mm  $%%Ӯ]6mmV; sw:w=.9G~ׁ<4esF~F2aMtm[ֳj^uk}Z % q΃=/^@ ڣ}ṟ'ӭG?4McRЪMoa~4[#wG_1/[w|Ʒ >e/(/y4~?Vg愓Ncg0iӮo1lZ:hq>Qߩ[|,W6}W.4<ct=ձGq/eبHMMw>a4!n̾=v 04p%~uE Me:mToT:vZ|V~5I71b=s? <DQ1 |>i#QÜ &_[[ç'6^-}Ğ/{p}~cJ|#ŴZ]}\٨*y?ooA>ih@vLNdSR~+J7(/myV^=Q TkwonĥR0~|稭 z=HQc~/^/> %%EKitJrCYK?J?0°E{ C Q¿p7{5^woONav|w{vQpd}hѳW?B[Ӟs0u/qsp wÃC>{QKNWRWXkoʃYJt?~.a¯tZ{ЫW??-.ʪߡtQκՋ!,_:GwޣFz;%7 k,/[}Ǟ'u XVvo/@:J;7eúۤcdg⾽qXB]gݏ[`Qیg`2[ MkV~}n|v]sXv䮖_?vL?y7I),)y4lX!nkl1 7W\5Fq,6[*nWj=ouzyTH=ևjkx ص}}|¯̇爥:p.nTV'䨾]:}{v=@%xYJ/F@Yi1w>e=Օzyڹ ?χחIx}>G Lh-1Tʉ>?ܵk#%9%^}ѣ1tEN?e ^YQNUe9esvm`ulް*>z ʁꛟKl  w9zA銁 g8v(3$!na6?R kYdkW}\  z?FcG1l􄄅H)6S@/ .]{qɜv$d^~Op͂f2qXPgнױt+2 TUq-kmiCO>_W]k:j߉s.'Oi"1+E ?^AmM++xo-I?Mvd?9+t?hlϽ&)A1av~e~I@}ꮃY*޿񎧹SI[x5?/)9+o|7?7CoxY)I%xtvXz$W M}2&,Mxy}څ^F_ȝI/v?Or/;wc3x8_yh1ZϛNAfWnWQƭ>1kt6WLL w?v`孿y9+]ƞu]rP pο_jI~odhE8|\~ͽ ~y}RL+_Ju 7'p!Z7UKWxQ{R1r/2􄅿^9N>׺^o|u1݀Jngy'~L㥿yiā@-~yM+>~]~e2 j߅_< Tr0mCKRm?Ẹtq^ghۖy,߶@._X<o#%9-פs7Yf|+է, Ǖ(/JII ~-n׌;$%Z*زaiz._?,o>_gVפf#$ހk ~c1#~/O崟O[1hظfaauߡitއ^} -ܻ{+QJgsbߨb"jsNBEE5^.y&Y6.[2K6殲,r0Tt b[#sy6ƗlIlÑG ú[ρY4&Kb׶ծ6EU|ۈnㆌ #(~uoptK*ǣ Jq ݀ ෴l4W z~%G[ia@X~' #{ ă.C3*@wVs3P<ï,_~K A m#] |D߸ Gaï79I@;d4!{Wvu2~N[{~_\o&G" 7kiX[6('s?ff?c~6⑀qBk~%;~CD߰p Bj ~BbVWڲ\}ۃ؎Æ"a>S+w_!R.WX.(f;7`0}?tɄKok2~kkj8P(pYmߵ3Tyjk/F7TF#\}#q ڣ/W,餖_qq{$KoCd~wۦV= ~od_~߅2Nh-9Slzb- >OvW'גR(447nTXkc~?7l!~s@go8?o8r(Θ @ XM 'ϟ/;bYp߹A>: m!H ֆ_K& u,F ; ߾@OX2'Qߥ7dC`V_BJozq2O~+Cno!pva>;b$Kbա | rFV9?+a,yBpbhjϚOI㮏l/-kT/fb9~c&]ϗBv^-ag)@kp<5[~nǍ7_Yh?LaV_4۶// $/ q ᯮ*gۦMOT'Jĵ# Cy^͞T22V?"MM*5 K%g8~e[yxjӡ΄_cTV;̒Sה`*K#\ jbo*~Qb  ??"rl(߿5` ? JmWꪊ#v[6ﯭ @)EM(cm2zGY, p_h#?Ez$k!kb ?~MK^4tVwTJ~GOkmf( ѻUV~Z~%~lZ@h.4K3߱Q_lZR_nռq? q? ~ ,UCXk]W}?e~_~q]سeYv54ouiE?l* q?440[@I!/Z-Â_W:?||3fwm`Ìoٻ'GQ ?+P[g7^H[&߽S~sYy,YߖmϤw~I a_=߽{1=ʦv`tW^E%lGcN1#9Pܛ _5ohR /o!5UYDr m:tEVg#%5 S+C*CC6F$5'or=-$<[7PkUԳfr=3ry=w䯭_SNmM95ETlh38L՗iuF@!Fۘ{ 9giDKwE{X lƛp/Hjˁu(+HDk;l72;o1KوD `4TD2?l_3$;+f_w_H!!GG>0 {٬vsW O''" R=m)5]@)c0J+`d`$6L,$`/4{U J "k&gC8io6E#c\| S @cu y?݊} S dܻ"%uN|e\;MIENDB`Ext/Icons_15_VA/KeePass_Square_Blue/KeePass_Square_Blue_16.png0000664000000000000000000000127312570042346022752 0ustar rootrootPNG  IHDRabKGD pHYsSSbj[IDAT8ˍ[HTQ3W/3(ИcY^ '*#%]Ȅ"ʇ)z(K+z  1MisΙ93s ?lZk{K8l4 p8"gJJW @Q'KVw%"x*3@~IWCxV_DU^%3]4'q!fsmcO9 ` ߺ~&vcͦ}(v9]:N`|N eX QLT^<}j".Aܞ"iʳ+Ap͚g +*dd㙿T'OYLzg!zC$鿵h.p%s }TEQ ؒ~NTLb3s !Z-2/4 mNR!bC "{IWGd Vlc&٥Ub(M xk& C_chg?Ћ Ldv݉d#lz ) E }E %4l{LWa_%Gw0:bPcOpM;A8y.IENDB`Ext/Icons_15_VA/KeePass_Square_Yellow/0000775000000000000000000000000012606740430016474 5ustar rootrootExt/Icons_15_VA/KeePass_Square_Yellow/KeePass_Square_Yellow_48.png0000664000000000000000000000377012567604566023751 0ustar rootrootPNG  IHDR00WbKGD pHYs?%IDATh͚{PT?. ,PwTGdHьGcM0IQԱ!iZ;ifI&>jhhZ!jhTCjZD!({gݻs{w;sBx܀Mwa;H-b)NFhV`' 99Sˈdj[@ ^v9z.B;87$h?n\Vb98RFPBu|,L# t^˾?FLU>`I"sauêWbZ) zv7f떍?xxdf)ںhh~8,Vݦ;~eՈ6뼲3tmttt!d /;=D~PHe<*8&%%l:KZjʐaKNNםV0G'>M_3Ss׽%|Rs0fݷXQ:a$%yld6V#5208{ @h^nv/71c<^;R^ 9YCMl1s/7:)N*"{Th즡s\>麺3XV][Hw$ZG(m <ɺϿa#3y|+-,)4=.Y_-8+7VG #ٰ~ տ.cGH8Z4X,W|~df:"37j9.!3#U7w D*'f3cZAjbUSDKkxEo`@vޣb傘GؕߞK#Ykpx YvJ'}̘AAnL,r^ h X6]R9C6yR[7\ᅢH`IK$'چmR[^ VӨ4(Cx4Pc$  Û4 ж B'#kW-b8VxPxilQ~?@!gdJt I~azgEXrEIxمl#A|>|Q _D7}DW..lWŬ@ T+XE4N(=6еqW^)LW::ivA UsHKp"8!>Z ej9^O^p$j<ēSul."ǡoLM@$I\Iј\7M-Nj/?7 E9PCxyI#mr\#nL_UV R#f!sUm=g?X ⧿;Cgq1|ƁHr(1 3@`o.*c i` >RGR\ ݷܒDAm,$}kxv&Q6x>-^1bM{j8sip𑲈*[Hƒ0Fޖ*Ś  > hk(>m⣓ R _j5Z)+=j p=^S '#SG#pQ]x7S LLA-x}Z:゛\N Ix 氖\`c\֫-ttsɣJB(M z_[\FUg'ݍ-{jS=iS5>q1pЖfQ|.fރ#~[{^ִi nN~l`ވ~cs(`D?M<qGzFQLˀm6vs@ .txIENDB`Ext/Icons_15_VA/KeePass_Square_Yellow/KeePass_Square_Yellow_128.png0000664000000000000000000001152112567604616024015 0ustar rootrootPNG  IHDR>abKGD pHYsjfIDATxytUڇΞD!D f pDqE<ǁGԑѣ898ʇ~Id1 @HBN'A$^+LstVխ[Mz#@?7$$9Z8ۀ,X& c]K@P ׵!,: rQ8wȣ \";?&?k9QQ :ayѷO6Y=GLt/es q8?^o{mm^lM444s)`Gae[Je G68mkUwdy>k+4R `DIbao3wL.KE7|<~'+65;k`?H]ʞ4d Y!s}T_-SPtY}D^Yb`K')W2L|x?zn| K2fmH5΀X("t,zOSP,ҕ[Rf`P tvdd$Yi| I~YX\-w5>}z-o6IF:k֣3 :ΓIMEf o5팞}GA10dZX`6.3^~&*E'  >B0:L/0|gl jJstuTUDrQ }zgaở`Wr^4Ƒ~veټX6q8 =!>#p׭א7Q}zuaU9o-f\"|g1ťԜAK =xA/[KrRg;|hLM@5+[qt񱺆t:XjcNUVS]S5q)ɝ(5'ggk1-|FSL.iЫ{ٰfz#|mNTTЈ)!.yut.tB!4][GU0枇9/<|zCǙ"n4,ʾ߷}dVqmشy'U5+՜'n ˾|iGf[s<ǿribs0}[f:/det[_&&&~c;'bǮ4ښ[c[)?^gKlLdWbcbtQcźNMv,a̽󩫳>B\ '|&lMuM 압N]uzt!{򟭵&Po6`/.6S |3L<i*aYuS ZZJZ|!iL.9|Uo0K2z3! U~7.`^Rj A!ۊMnċF_TUa$ߩڤ2|BPؼfZ|%@~,@A*;|!:ћA{FPP*=3$]-BzF l.4PPAPK{)<>nn> E 27$v`PTmS|f%+jɻ)ݵ:PV[jj%@:ꭍ^[>Wi]%?| rxZa,N$'--^ @xLK_>YxQq?MJ5/syTA׃$ד,| u,޽@c UxA:iY ,F)|xpM_ R _ k>J%j.iT8| ;|T T~LL$ 1Zum\)clZxז/Bf7%1Z376N7]] _* o]9|^=b򦠽&. v9GK\y9kڝKϛc Cweٚ Rf}1lߍj>b6pP2N+Ǝ%Pn_/Jn?lZ c@]TJ?(Tƫazh]Ji#T b!B~_\4/ F _R;W 4426zFP jƯg|氷8X~|#ik?Aoט랖,WY1$/@!|!֗Ձ`?0W~5f(}kµ>D JGSzW5^^ɪ/=RǦӁ `NW)w/]wa\oKKpq0df. o’jVl8.e`{Ln9f',rﲐY6nf_A?fk:mELnN/Y3~@x- /> :j fx}zX]@׋_?]s^Hi'՞pH,U Vm,T #93i8|/W>܏)YgzXv.ﰷԫ eh| EE=X+Gd,. ^l61aݍŀB%GX77W;[#4=lbU9LǘeW~}o`r62^x! hDX b,{^DVF QFG|[,eu>>:A!ښ44)Rv]),J Ĺmp+NNlFevVz(PfTj9JzrS;1zBkZaT>&} [˕K]Nb lG!,DJƐZV6 ,u:! d#K-@K?߷SzCAIENDB`Ext/Icons_15_VA/KeePass_Square_Yellow/KeePass_Square_Yellow_16.png0000664000000000000000000000135312567604534023732 0ustar rootrootPNG  IHDRabKGD pHYsSSbjIDAT8}_HSa眵柬UD:LQhQB$"$*("$QWMRUTe]]$fVkiTD5wv1]/{xQp9;ϗ$2y D@pR./;|Ғ2@2n{#=Ļ }ӷ4PhKig7`RSdMEɴ":sߙ?GAI>HjO&_miz$/#ʁ=%%$$ynQ]Y.[4h jc&ljcuy\SCE6s˝j+8M509ܰP< bQlD1u~q*`Sju9"hc ߞIٿg(hؾJ_]!Qb.Tʜ'=&X& i 8kR'ƂYN&K3##S&iԩ^we],`bKBĤ3?Q9*˼d@7Lx" Kvdg *"&,MQ,gzq#痕.:~qK SMupCI;Yx?Q8Ygcʣ̝1*]arUZ*3Ӧ՞}j)[6z(lIlQw#11<6ʈ@h]I]W”TU)elܲ+^Wp{|?.t= ݂x4V/t+)>i@,xUU c'/LV`}V߸r[HnN nmCWD_RP{`))0)\:O:e;V%eWp(%N!t:J/;MA<]@A;^MJP$߭=WVHn7b8]bZ&WF^vVdJ2yf0vfύPIJia=&z? KS0f(y#g?GnNZ0Rfbq_ yݕWa䊢b ^>JP$n'Vףcr (bVR4xl ;1?]GxJ=3cUcˈ`έv &c\<݌ă9\9V85iTV~n(Y~!OYm;L̏?XqePuӀL!eϿDu֏d֣v>wU[/Ett2xP&i)gw wQjl3nOj|w[0<_h MZBIENDB`Ext/Icons_15_VA/KeePass_Square_Yellow/KeePass_Square_Yellow_64.png0000664000000000000000000000516012567604602023731 0ustar rootrootPNG  IHDR@@iqbKGD pHYsMM_ IDATxݛ{pSUIS @RlBav<( 8 UD]".,2UgVyIy#"BA<҄Is{{ofZL&}{~=; <Tefd Gd녟▢>7'aM~ U).HMM"ک _1EV;&du\OU58]N]@/W `2x9|(1,Jn @!B7k} =~-X=xq8_ٱd !L> W$v3zxKCZ3=ۋ3ث)~@Y@y}K}$&}3aFˏ/55)"'J2~|W奾_i 9z\XԤx&l)a x'{wT3^\åa#>DX+*;x)nGߜLzHkN 5WoPvSg/p8U+x->$xvEa%r ujؑ3sgNuGeV-o4(8}"3_]'kb6a@Ax~Hwe`{ xoƒ٬_k-]iu9Tʪ B ;?lldGs7Q- )>W#/7CQ$ 6n* >0 Sʮ=-C$^fz"K.zKVbB >A#$v]'?4!wf"18?G'\τ/z|*;_2_z^*'k^_Vp`P~Â1 T_s-_0/'$ΗUv}†4y8Wn7cGnի6.wFDAb zAxpRzxf"LOlV+e8;@/B*Ƅl<L`2a ^Hb5Ю'ZxBjTmC7!0$ۉ mjDAADDo;u@LY n\D[KDGG3hKO -61xYX ]/^TĴ} >3 Wx*E]yߺOZd8#PcFLfLM|0ͻ\.n6:[ժI)ΌB!7]6 #Y3&,nE"ݠ*LׄW뽊Y@s˖ƛL11b m_][lԵ=ؤ^sDs!r<$x`FK) ~qfir{R䄩t@}Jv3*U!Da76P]YދN6)2y[Ms *۹όBY~ koD@gȷvǽ'yB}]ZUztm0[f CCp b>l8>א;Ycycv=MWԆ6 =Ԁ 3("պk85 Mx֓Ĕ]Ò3/GIZ /ǫik!ޡ7zetU5olj\JЫlew H$gC~_ۣ [l뚗i 1#t;/lU {Px:^3!&WNh-\St_jeٱ$ۋ3fX߀q{k\{k.^ !pG/ s|/WI VvwiɝZ!| /U_y3Lʚ67l<+Gh4A~ERKd6 p| _:;ms# r=>F ELLTw8\ژ8<Fv>';?'D+ڷ+0U6B e.@'õz'W)9wƦ`q&ԩܙ[gZ=s6O7v"%xN># IENDB`Ext/Icons_15_VA/KeePass_Square_Yellow/KeePass_Square_Yellow_256.png0000664000000000000000000002303412567604632024017 0ustar rootrootPNG  IHDR\rfbKGD pHYs55H@ IDATxy|߳C"$`8Dr*UZJO-Z"jUPDAD9Cr'{|lr>k^d3y{iXW@sH:(rǀ"Uf/^еda@i[")) Uo{(V xo$A$ @20\h1/D$ x 4n&U"D/GbwOډDu =\,28P!Dcܽ*JCb3@u|>pUvxr"!jxeUFr9fUˤD"pcUhm0dEphFzu0_¦V*#=+KD$ - Ѐ'|"Q7X[y F-)vm[sZƤ6J%%9䤪O S%VO-s(ST][U@˨!2*2SKPƬgpjꩇUVVNIi%e-fClݑ˾#(d   (M8?_^t ௭? $2}O:{TeT XFPߩk;#0eu*nGC6UC`os5W _HLg`9;vbNӗ_,dl{3ŧ1S+Qmme>]i<@/`}(@uuC]țOEf/ :_hXRŰ 6k9N}Ͽ֨/HNJ`UIz | ϔE퀭`<&2on$''s^\fޢuz+fu@=G1a^ƍtLPӱ}we0@( 46 Zlsާ뙝~>7o/<豪p/!w zZsf# }ՂٯG @:pGC@2?))?y ~k.\>o}Ҳ #A jl>r0H].xM Exq: w/ BU`Gnw/ A<1.߮6:x=A+ x>}) WyT^(€'㌂?y3~e_u C)̰]4qox#3/ :y4}z#ÀO6mҭK +/~uE=dFn?nq֤D>W_ {i$ M\ 1O o0teQ`H^KkԈmWѤq/ _c%d2%Y 'q/ Op+MғFxg5,s7Efo=/9;k?kp8(PY馰x4FǑ4NoNi&38] h! H!H!=.}̈.n)G~˖nVȚuٺmn/t:zxu/矝NN2q.ZӫGg<{E6hM#hִӋn x,Z1C|r//Áx)ˉϧ|5J⁽dHo M~ϲ5>%zvڐqla2hWoX p8A@wƑ3~$'' &_=/3S} Yn-E+|`)ζ}:P}Koe;!k aqhW/S}5'kgX|!U7JgokO..3o`rxi׺9D|K727e驦hJf7eQA𗕕ƌ9mo#7b~St(GZ=@PK_7J7OA/r|ULFq0Noͦ-;KO4r!/>6xP_'_.Zɹa_^&>f|>E"&?6}߮C tm\׷";gĘ>zg_W{=}y^OUB^pL4:u  Wޡ[Q|BZ^vôG3N훡is0զM+oZ!Q#,]֬mVF>gKetBd4dK,?2,]C!7|ְ@bfz_2 ¯Ptl,tj z}<\9n /:Un2/߳zxЦiIP 6NO(SXX̨j47?a|$ 𐖚~ %5E௧CG:['d|j3?A)Rouٹ{?5[펺!V#;g?C};,R9 vIox9x̺;ZD8̪72__PG7+*`mIe\A΃2dĘTTToxr룼5Ma?upxy u%e19/|Ae\ySD NEB.NH/L@b?i1e+1f";wtrr8Wع7nv\{sݐm_4\Nnxzt:hEfFSRSII(()-Rru>n{XS啸\N^LUxݸ//=y[-2wXzCC)E>g3t`ON]p9 ۟|wsbxYo[%kYzE~[2rxsb;rS4-Źp=doɸ12lw/zuo.Α8TKy|~[+4޵-hn1 yE%?.MӸdH3߼'6ڞOf&LJ~E!=48WDRq{iU;ĒۯcLvG$rn V-M^=:±]Ws$W_ 4 =#OG 0WfG$i]:aym$lٵS^a" >xYp8?k3fպ1Xͯ rSp:s$&cX6ej]zיs#1!>]Nƽ)UDFƐW!wX" cV,e&v߽. `'Sj+!cL ?c}%KyzNs 6:m9%?+;,IA l 2~I@??8Y'w2I$'G?%<84MC Sjg?y@X~e(w_vw84\.'oL{;_PC*5vep:aɡx<^>j֠~$m?J̋or:䣷⺫j]7LG\s~&% hSwY ?=mCS! }H'm ?sS˪/MW -e.ړp8iI@ß{0o;á1嶇wF>`ߏ{TЦ f7Nu9t1s-8SX 7 <b~}n^'rs8?b ~^F)xh٩rm D<{ r$fId4ks*25g0}yX&{ dG0MuM].'r-WA>WPK8W0W{0(/..ዯŹxF)毣q?nPVVa_1 @?(>#eQ ~Uwnل?K&vU6`KL}x!9,X+^߬4p:7a4I wrRw2ӌex}W_= ~GKM{ %%&뛇_G_JbBiϿwD1^bɲL[21(5I௣LZjF4G dm_o`d`uI=ƎXoI!cmQZߑH~|,_xi)5=e ݹұ})}JrmN='7~c<r)6)w:<;,.`[c2=6ӒOKG EvcMIF)7m'ޤ`zZ l/pJ)҆RqN6f^[gHssi1. fozP ~37y$`]9*d(_o8f_cr a_xl~=KsC_j54ll xg;2xvQJxPQ&>ޠHno'6olv7ad}UV)-'oߞlP7Zh܀7u*^J*k9eN?-&[ZĤŧ=YrG^7( M~v w~? [qg _߸y'7 =!QI]G0Q*Jyy^2~I@ ٚHʎmE#$u~XY~+k{EU_LXN b X~KMXWH$Efl~ oo9eg Ĭ1Ҋl?&Z|b6b5#D?_5 $[9? UHJ+~{a/;)+ߞ+yr#<Ȓn_Y}5X|J/~+LB෼! 4V?{Z+͆_&~CB?t.8-7 yJiV}ڥBu Fq_0(8k[6/Vgsj6^o2s~ԝYߑ&Y|$/ !I@_~I@?/-"TxiIĹ4 - r61bUo_ԳwVe9>@C3Շj/MZkn/G5%- QOӂ[e2oqC HXl1!њF,/6 es d ߪqo\ ^dH^ , $?Vͫ=ihfmj#Y}/>S;VcX u|7C`Z}fkK%:I.u8j.b wt>5ꯇ@˄>Us90ceGA"m x:G7~OF?wUw_P{ ~?[gg _~㒀v?'?0?&$ !_?z!_}]gwjJJˢG( ,߼m "^}U׵ex}JJ,Dɺo2O @QIc~1ťx%Qփ8_$G~PGر/P"`gnI ֜_ (6ؾ(`_J* {8x<@)( Ep!W~D`|=7q!g/ha ?uyznAXF|>%b `=}NJ G"g){E# 2X ~PJX>Y^F*%P8 3g-f/Mߧ/m:l=gؽ/'Xq1Ƞ ++~<zokآ,3?Zb-_~cĭmqd)Mf閁?!>VML옝82+Ux;R*\mHsX f}ψր yc-k~<5}#/v= )(,#? 2 z."g+*.c {+Z'}m_v &s FIDAT8J<#JG~?jTT2j=&#κ |`M ?Vd?_:d5 L~coq 屮zGrwi Nռ#~x^ /o~k>g~ (n5p  3[v;]~_!@-^F}Ӳ8gebg`m m̚~(KO7pSV5@@)X^^^{~qY͏4~j_hp#9ycfMș[ uٲеws `Z>Xr>~=h4_ ?>Z ,8ZN6-x^v.]_#w(L=}4T{y5F_eּՔз3& 1)//?LJI ?hlU]ا3ӟfo1>ZνϬ0QVn@YW׼i<.! 1%yxڏfժΥy>Nx̺’ f[wkӻ{{6I~¿+n܋1 |\j&$q-C-Ci, hQ%~W?NG9p% CMWۖ1zxo:8P# Oi{!sG Px?Z_;`iSwvOtlw:) 6K+fO,[DzG8ZTIuABBj٘vh۲ '@Jr4p#6TW@KcT+ 8`X$YH>ho߳/c#=-pSA8[ڂ( `w.JCx3(8KڈFߏ?/[f2[3} R{K!  (?_R{6Ƒgŋ_tIENDB`Ext/Icons_15_VA/KeePass_Square_Blue_Locked/0000775000000000000000000000000012606740430017371 5ustar rootrootExt/Icons_15_VA/KeePass_Square_Blue_Locked/KeePass_Square_Blue_Locked_16.png0000664000000000000000000000142412570042550025507 0ustar rootrootPNG  IHDRabKGD pHYsSSbjIDAT8ˍYHTQwn)9VXZЃ%{PBDTBAQ.BA цHfHLrfҁ΁qwlf'~c5)`PwIzfŴ+$XvL;Bmϧ sʟѫ~RGnn 蓝P-#(z.Uo۴ e1f',b-{f^/4_<{1wM[e e9st#]Ss2jV4 pdRqË8s%vO^AsO!߇QorS.1^̻vP?iOD&QX -\ |;J\./PsbڑV'.2+-pHKƓ!!bcoi6<#Q1|)\WA7-BD'{^FF J }=ہˀDl޺/OH̩cTU>paw[m 8w( &DF7c$E5^@ fm+5@` bNaaƀG7CI**O2yt=AՕr;,6T!!X#0G:ȅ3ѧ3pE Abb)u \If u* tb6rHX2w3F8z3[=7Wb ^Aӻ 9=:.(Ld)߽Îk82gk9ظ696/m/ZwdǎVǶhCʪ^!*%3om$ykEsY{>}/xQBUm\&S.^C^C|.݇0s 8/~{^ 0KN*fpH5 թ`8IeYy[#ڷʊzn"iʫ &&VVWp.sOx@̵O$qQ|(yYJFF7 81E6SUQ~' xPSSTBmE_uU>EܺQ|+DfQ1=F,._^(oںA$'o}B*+ qq:46,%Kx Sߥc5'(yXd |W"1RdyReX*l /(2<-qg3nJqDv؄E8 .d1':V p ں(1Iblywi۷N ]k j\[iqzʒ;hl!QZV:ڴ?\R1/[^V҃{ b1{M)PQ Y R:OWzB _6\ =nx]+<sm3^>jd]X.z6Y`TglōjU!*p# .u;>:_ॶs$ɮt]V:cp|2ЭnC5 n\[}ZuD~3«#vvI.wN_oM1E1*ڀ{xu;{MYa;z=ϝU&$% d#UZ߸BCaR _,D^ :E2u ]EIa`Gx8e+W%P]\ IE @{^ G]p2~fou N%\@lBջFgƮ.Bu,*sCȻY(6Ԉ]]T(_ ޅd L]_}VBѫ٬6Jx^8j:(;`*IslgՊȝ"XTYv86CZ;Q@~:JMZp[5?l@CME}i+WD r{Ky &ņi\j+(/| Pn-Ys/YeoAܢ/MT_&%7_0!ig_|shu,7~QB{^1m1c o!7yǴ6 xJ.5} v hrԌI6ąeT=->͡ǁ ? w[OU+X-6 n^wYY7k'7w?p)yɻ9| - b49<˟0}wN3H&x/b~ճzh+\HWܭ'&je}]pUtt%{Q|A}^X\%;|< TLAo>F{[?'F%Vq}HViUMWxfzѿ1p9A_ _)hAK\}96BQ~ #6|'G9vnbNFNnRylxh])U),*\*B ܿOFP1k[,Ufw:BX)V> ҳeJJ3z;c ]x5kǷ{{C]<#3"m dzEvN,[5:u]«*4ImEϫobO)/=$? gSYշ6ols\1/OObO!@kp'<0B@\T,i`Fsbr .+AMIJn6}~ؽw5jʽ<|I~|Α> Νa`4LJji\=p4i0xw>C' S*h<ՠEgkǷl֔߱} Sv7XxWT7_{ثowd 8MȩG„GDف%",◢X-r;QR|y&e7N*K+OOa~)@tL_y-7HݥCdŒm-UUe>3uZ` /Tj+/$gsf)emB/Pu<>u>GҾ+ ^uG f6WjURV'1}9=t1/.%-6*~j+~x!SV`S3InkG$!Gf,h@U۷kkЮc:]Ε}GK>{nxtkϕ _3imgp34}(:*زie5lݝz6a_Q~=? )^pf`Q]K18s@_k zz iS[^lP ժb0$5 n`ڀAFWB@p.(y!.x3#M6b v1jŁJً7s[N]>ưzzk#i /b FoF ՅdK|S}CCcJSH+Pt}9^AW'/+%tZ2#!3kHAJ l62}Kf^q^s嶕l.qɡera4m1FSãthPjJ?;m_]1˅ԬQ]Br_^ d*:L;:uVY PrvDlوRrǜ=Fɽo P.M׼3a>:|v>=<#GClf_wfz&5U+,\Q g9{хHvUE`^ᝢ5%,CMm.maI2 Brg0v}>= JH0 5:_ˡf(݀e6b"9s+ep<^pD!$҃2B&>F觃BhI_/SǽNLNJdC UTy;(.(̝P78-L4j~!̃;nԦ#K0n6 jm@e㏍ w&|>A)=߸0RsHjz_!<4QZ}} ^ 1q͵ǗB $kK˂!SgS r:n" z cXJ?^F#}U`&%)#]A'6Iv;L}RH agл n] v+%^ p +tjz݄r4N/,Vf{F(phvn&P%k& g쯧tKo|ʱ fqz Kc;BBpd\)$$c 4W`dfwA pFؚ1 8թFKNR)0z(:O56Y# v~Bf7W@[ai d!:2!sv 6{/T 8[s了?>禩F#Pԑбs$.lVu?VjlaZ/ܵsX%SZuU@6猿KX Xfaw5(f><0 ,vg=3K!&XP vnkұ6ӃFu<`s\gUxx%ocl!D=?kن_ml%pK72|6Og3"%K!2jΔ~" s4AT_5BO#1@]/IGegQ}~XZbYeIENDB`Ext/Icons_15_VA/KeePass_Square_Blue_Locked/KeePass_Square_Blue_Locked_256.png0000664000000000000000000003073512567604510025612 0ustar rootrootPNG  IHDR\rfbKGD pHYs55H@ IDATxwx?3!ZEsA4"^QQ] ׂ?{oP T,T#H{-!'3?&R69;{y}4M>5O""%e4 H>Gμv/^ѵ}~@ClI9HG?yo~i G7BEۀo4Vh`80f3/DJ*ҁD`2TPx"/:_8S @<p?FNJJd!e\F)pw0ɭو#?3yғ2E`yQ]Z^&sl/))aZܜZAf]Kp-\ TT=Xxp6 \(#1o&2/71EV:4jԔ:uS)21DE 6 ~{QiU_:O G/.Շk(Zۧ?TEG/ t/޿KoB$;+4&s铇uNu@1F)Y*Ut֋:ӰQc"kĢ/hx8+%nW48>hOI0^vz=%_l;=%Sx;06ءܺ-m2Φ<1zP/soa0Ҭys^zK%_vN⾭Xatv+7F?,PMdd]?a7C.(R*~ /'K?H#Xbj/e-FBc >ٔS̛1?HFzJ1-> l =w;kD ?/OZj2s~i#0QX ,8dޣAC#"2R/w I6=s('=(CVnNdܟP7~ClD ?/jg0GHIZ+6PD]]nL.iA/ѡV&tso}S^_qU.G q~ HODd4z#B<6.F5vc2nDEE3︼ߕ6_t {9|d 2~ ӼM/֯)"_<8P+Y6?LM%/3=;w^'gmR7|n.7m⭧zL[ P<{WRM!4L~%>{ӧxT9yo kJ [v˻w%cn׃-:RGT4i{^{zvm]˦ٰz>60J۠`yYYQخDEu4oHaT'ofީ?aߞMx.]GsQ.kFKQ_x=IƂB ~F IO/+Z(=XBMhx_ZuڇKw՝M :S'Dr1ï I@}s Y*޿ѱ< ۅGr}c9ꍼʵJ@דÔ/s< Mߞ̛c@ry?_r{|kx_p a)9nI@ï0q˜$Eťxe4z1sx?SPU5 f֏c }_>?{vyI(\V-{ -F:~I PCOG^W;}u*ᷢ:y?OW|+x=V(*6z=,5g:~k``\n7+#|*dݵs~TU%&&J~" B, Ƙ\3[8~Xh&)gN }+i/}F|?T\/@HڴTao(.OAw)geoך_TXqK;o%*}d1)ko1#~ xr;pcwu^Aï5˃./ ~~ lٸMPGQS1rz.!ň({wB״ =72uoLGFFSu~ݵpa38u|лOr۟%^x.G8HV )I w ngaB؊4ߧcm؊(Ac\0(-J_u'FC/cA (4oSȘ]8ql_LL-@mK˸\W݄<9[] =|@Ra3 HDXl҉D !@pռM7vF2PVca푞ta ~8{&YRTV[_Ƶ*U%lX뤧&<&?萒$mS-*LkB|%#-1[ u =-E؃'/#T.)! @]/& l,Ǔ  !7WPE!&FE-**<cԌ!UQ[W_Uz#b#d<{t^MC(ߏ%Epb6᷶0?i~?6# T%%/bfS&I<"Co i$e|{ ?ۯ:we}`;Ge|GB]*+PE1* uV, IӺA uH`4Ȑ m&ݩm[Eܶ5Tرۈv_@ 5!8cwa)RoX;UN5H8~m+ ;4M^*+<^"RN9~ݬ/J:~[L ~Moi? Mx/Z)gس vcGme3)e/}2sK+Loi=bO\gTCЦ-qRa6X/qކ. 3 Mwo]xrim\fS|67ي`s;̚ӧºնdD#9N-  $JVϷW5l7FB\CfP"L'-M}0! n JIg?[ Ɛ0k}E~Β$P_  |ffC`|>}F_D[FS[¯0Y{N6]pi瀞nDPY pz:@ B p(e2c"P8~xNYY1?-\ۃ p , >dH#à+[oF ̕x@c?0pÁ5;U~ Ǐ9Oox /=xN (غ/.ŅЋaؾ(uX't#fL*V~af=qtE5RC!njL*TgYKB 3%v_T73NB)1eH/l$`?7\ꔬotvWiLí}_sGF?fLm\KO VءH"nZO?%=5ja @+Qt tj1'Z*Vsh.$jw("Q ׽1lk@Yk<`,ЩA UhҨ=%d|Yu6˱Oy u$f.湵(AsyΗ 1*1Ʋ~%${SemvHu[1X>u*K _I"n۴0˜@մC%~GT恶C@0j!CWL>X2H?(&}eblj֬4'zyO7 b*aC"ԨZ&}WB @}%NP"0P5%s)?*jԴUI`*?XPcD5Xjֶ",YF8~8aD`ia+δ@am12(ZbS8~ka6*+Á + [jl ?rE4f4ƊשiWz3׊2' ܴ?٢ڙd{ 䑚#N?'HCpЩB&(~OJ E 8rXaOߑQl('ɡ!miv p8!@ץk8 @pl 9DQ a@)!>I ۱5Z9Tr7 ;v~l˂C!'8W~v2u?^Yh*!T_X狈YV%Kǟ)1 (zx<lFЫͅ\vr|=8T+ x(Q mG+ 5{#= 6^ω9˄ ͬ#0<8q۬9p\a{n; 9s9$X붓VL۷B0ضlTTV䒹{Ey=%_TOs]p~ F/Uc7v0.>.oGc7D w괵':hZ_MCkNvi{p ?''H>%œy1'0С~+ׁ4 2dz*mc]= @60Gd#.g$X,v)s=%R7SE]^qޓ 9_zSrq|9o1<qOdزY@m:+'﹑[?:cHa4x9g>$v {Lha8;c~fve9c4l :/]jb UX[TK#`yaGo%:u\ n%}ĕd$WP%yIi?#~t8ՔJ[;%yf6WS@TEELЫ*V,I.ݍ7>#lvIoɌ?q$ho~ ReѪ?쾨;>54je+YMZ]K걬 לpz24+_[ NldFNXTwn YYaiw3k[Y_@ h=hai[? G \{L @ѕi 'gOjօe2gux8/eKʞFMAi,KzTe _ G78Z\k0k#toH#`v\ܛuJ-ΙgZY#g‰@I: C OʹTfdE~BG3Y'kf6_ ЭzBQ<ހ!}ai)CL\m!o~]~փd4$໢ `/G/"7ƹ].kYz k.ƆVW7?ԁf6" t. sYrbлQIZ;\XM"Khc/l\vx=q/}@u_t cb!0g-Z/vFm/^FVD'4 ? O>?܀cj}hK@0ףL.Ì=# Iàc yt_6SOdմf0 Eyqy1BG}8F(EArz(9c>hFY~[ :ܯR( h@ `9a$ h-C<0y"59l[~zDŻdMb65}= :is 3x`r-lشޖf[|~Wx]n 32 H*Y"pgV0;_f|ac v,Yh{v[#7,Bo_5 VN1J2 ƌ^e9SECW qи)\jւJP)X@! $'Ǐ5O ?9v;>} 1~ 8ņ٣9f^ǰ^VXF XLFT% 9?CvЗFp %) ѓ@./Y<T ݴA>qß|`fn꧀}£+zH;'CPۚ>1:Þ՟g'hހTי =᫖ .Uqpjl3S#?'46|޵#7;5PM}h _eow\(#X\JtE^2c~@q*nm?+)Xe# x&FYυ sB_>Ɂk2a|뇒C0%3{f*$aG-(eY`[fve`L9zsS:1b&*ԑ9YBKr1:{2@3#`\ŮҀ_=n,H BPǀ'0Jy 聯1BAPh$5T0" 8_ثI BPI{;ВR'xen5 ӏUY\*ϗ=z!y;Q/ @0&,cR_p76<4݀}Xu9U( }"F~@W޴z]7-Qw y^ w5FsH6c}$ZuvzO&` tL+tpA'Q bB.K-^nj!򡪣sޮa2oѭcX caaF TBmŘT%wwbcsnpV$pJ:$j_3w;5LJ K` (9iNj6RNoIENDB`Ext/Icons_15_VA/KeePass_Square_Blue_Locked/KeePass_Square_Blue_Locked_128.png0000664000000000000000000001435412567604472025616 0ustar rootrootPNG  IHDR>abKGD pHYsjfIDATxy|E92')ʱ"ʲ޲.x,讋׮. *ȡ M!>&3cs{3yhիW^UkPFÁ+@G t;b8p j,S@^1]< >xhpV@'Z*g>@?b}Stܖkk{ 7Ѕ+ h2Q󘵟a? cwε5Oߩu;kͥrz⸜&J9wYEX+-4y|9 _jpnc#Gh SyԯHQrwL4-WٍoD ziߕ4R1Sy{vn iJڌ6W`&\ ;t:&MGfͥCNCkd4}L"XkdG  쯊I,X.7 "kM|t6Q (i.x+N=?q-U/G2lt,3GvJUH@ litR?)&ͅ2uCkU|VIշoz~~|L8"}OvV_ꮭUΙ_t9W7m:OX^@q5NCk%-~ķMYI'vI>!3o IZ{!cJ3 I @-p3Z,mef Eh4Zg B ;LoA-= _(S7:cаIR|ȟ!#^r:F^n%%E!ˆ!]g¢|~}FMï[lTpjߤ& J6!uvJK+0Q^^jmƀ`Bk:b"]Dg18C)JlRn|OOM-"> (-)yiRZRHiIaͱiټ~!$tIdYt9W8l3H@xSS6/_@~^Eɉ ,za#&VSY Lp!T ^9֬ѫkY7rsR^^JV1 Ȩ6}|^}W¯y9k3ZGggЌxG<|Sy Y,yKnNW05`1!W߰n%3_Ϟ_Ql #J 8/:nCdl\;_YYɋO$y& %g;h:/ 2  88kL̾TIqQ[אܗ`0;Ns~IqM)^ ƣTpN^see_~+Mï0xt-MҽXUjp2#WRѬ4+㤀V9cGa "*-ѭbjKdt[BâY,s٬Vfk>@s{_ԝn|FCDd !t֏CFѮ}Wc1`PQQN3d:'X <\4vx'ޟǔ/5| w򅀝IظsL.z6\5f&L~6(@BBhߩCGLB 8wV/cɻxkY3T*zý~ue| {&*TlIqos٧]*ԻPgqY=Sy_~W{ֵ特*|dϒy]RHz"gm6j}/+-$H*eHzmY+9Ix c#!@Ay ||4|!xAɭ'4,ACF{|!FJ.GCW ;%Ņ+.(8 /Ձ~L2Rv:߉4tarY? ]x%|!]>ҳlV,f/ $|!c+#mL`2x"qb $ZVG`PW@PpBJyY?t˯Wzi] }Z+#@Ѣhd$ =kG"&rW }k= _T@[QNx1*47 @P (%  bGKK(K" f{MeeSHcѕ{[k ~1PVp <f?y l{*?]jЉC`W$p0=ޮ>pwD:YhiB1HN?ǘ1c~X Sv 3xEn wτ? N]?wτ ش?m?%+G ԂVmd^V1"8x {E>n_mדaeݵW~\/]3`Qx`zzOmv ᢼkZ໕rtۺƽ¤eeɐ0 AVX໤1Q#޼/+P_﯃y|gv*F(TpSq`8ظEۼ(|`Q!ڟGg }o~dXh̀RenXMNEv_e nÇ/#-᪺Ftdp*_Vlszg\wJPQC±#nW }.ѹxA&WBt '+ J|KôoCX8wa!Dnk&P@еz7BhΗ)( _|sQ}H zaK|"5WČk :v%%/Cu*K4(S7mB}E F A/N$|NR1:> J7$ru-zȉ}_WGï6z Iih+ <_k|)/1ptە`Pɗ#x~fCbʀ U݁;w=q4+8^t$ݵ;0w #M6,.= ;nݧV;S9c\,<16VdMw{ F^*_A 9Ozt U&?_ s;~xx;XoY[x }PPiql L}7bX\|(=T D_}l*q_XRCJ}S WVDs 8](_(/rl?V6T Y__dI (pr +uڷ9?mӊ|,Z`Iz{)2lj$]b Υ:oiX`իw@ x6}{8^H?$m`Yƴ@}}2`@f/g,[WJNQ0GN0S7/ ZyC/<"sӸpr5c#p nE-%P"b؄؇YU>lG>™NyK ԙ1]<9<~ 3/;Mig}k)Q >-E0a,];Zb4Zo4oodO '4IWB` <L2On曑ϒ[Stᐔ~R SqL-wPlZ{W=6 6ƞ:mCi^IfS2ԙ#XW[̰u |=s7Thp!`V{0깧/D%O3,iH0$!n 8}o:?<&F#n} |>ּogg\mmR[ kw6۾~oWL!,3{wh˜2/f[[Î x^f w40wd\?wf7*᫖4/P֔ h Wy߷q>/=Ʊ%92*=6&3&|`UAV>, !}:%Nn2o=3jG|)aośWkF㪔`хQ(o0=q2T{ _[`y7@R}Zt<+'"oՠ覅::k@kHƞX$)˙6HA  ڌzK%P \Nǀyθ{'uT'XIENDB`Ext/KeePass.iss0000664000000000000000000002230312670011066012370 0ustar rootroot; KeePass Password Safe Installation Script ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! ; Thanks to Hilbrand Edskes for installer improvements. #define MyAppNameShort "KeePass" #define MyAppNameShortEx "KeePass 2" #define MyAppName "KeePass Password Safe" #define MyAppNameEx "KeePass Password Safe 2" #define MyAppPublisher "Dominik Reichl" #define KeeVersionStr "2.32" #define KeeVersionStrWithMinor "2.32" #define KeeVersionStrWithMinorPath "2.32" #define KeeVersionWin "2.32.0.0" #define KeeVersionWinShort "2.32" #define MyAppURL "http://keepass.info/" #define MyAppExeName "KeePass.exe" #define MyAppUrlName "KeePass.url" #define MyAppHelpName "KeePass.chm" #define KeeDevPeriod "2003-2016" #define MyAppId "KeePassPasswordSafe2" [Setup] AppName={#MyAppName} AppVersion={#KeeVersionWinShort} AppVerName={#MyAppName} {#KeeVersionStrWithMinor} AppId={#MyAppId} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} AppCopyright=Copyright (c) {#KeeDevPeriod} {#MyAppPublisher} MinVersion=5.0 DefaultDirName={pf}\{#MyAppNameEx} DefaultGroupName={#MyAppNameEx} AllowNoIcons=yes LicenseFile=..\Docs\License.txt OutputDir=..\Build\KeePass_Distrib OutputBaseFilename={#MyAppNameShort}-{#KeeVersionStrWithMinorPath}-Setup Compression=lzma2/ultra SolidCompression=yes InternalCompressLevel=ultra UninstallDisplayIcon={app}\{#MyAppExeName} AppMutex=KeePassAppMutex,Global\KeePassAppMutexEx SetupMutex=KeePassSetupMutex2 VersionInfoVersion={#KeeVersionWin} VersionInfoCompany={#MyAppPublisher} VersionInfoDescription={#MyAppName} {#KeeVersionStr} Setup VersionInfoCopyright=Copyright (c) {#KeeDevPeriod} {#MyAppPublisher} WizardImageFile=compiler:WizModernImage-IS.bmp WizardSmallImageFile=compiler:WizModernSmallImage-IS.bmp DisableDirPage=auto AlwaysShowDirOnReadyPage=yes DisableProgramGroupPage=yes AlwaysShowGroupOnReadyPage=no [Languages] Name: english; MessagesFile: compiler:Default.isl Name: brazilianportuguese; MessagesFile: compiler:Languages\BrazilianPortuguese.isl Name: catalan; MessagesFile: compiler:Languages\Catalan.isl Name: czech; MessagesFile: compiler:Languages\Czech.isl Name: danish; MessagesFile: compiler:Languages\Danish.isl Name: dutch; MessagesFile: compiler:Languages\Dutch.isl Name: finnish; MessagesFile: compiler:Languages\Finnish.isl Name: french; MessagesFile: compiler:Languages\French.isl Name: german; MessagesFile: compiler:Languages\German.isl Name: hungarian; MessagesFile: compiler:Languages\Hungarian.isl Name: italian; MessagesFile: compiler:Languages\Italian.isl Name: norwegian; MessagesFile: compiler:Languages\Norwegian.isl Name: polish; MessagesFile: compiler:Languages\Polish.isl Name: portuguese; MessagesFile: compiler:Languages\Portuguese.isl Name: russian; MessagesFile: compiler:Languages\Russian.isl ; Name: slovak; MessagesFile: compiler:Languages\Slovak.isl Name: slovenian; MessagesFile: compiler:Languages\Slovenian.isl Name: spanish; MessagesFile: compiler:Languages\Spanish.isl [Tasks] Name: FileAssoc; Description: {cm:AssocFileExtension,{#MyAppNameShort},.kdbx} Name: DesktopIcon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked Name: QuickLaunchIcon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked [Components] Name: Core; Description: Core KeePass Application Files; Flags: fixed; Types: full compact custom Name: UserDoc; Description: Help Manual; Types: full custom Name: KeePassLibC; Description: Native Support Library (KeePass 1.x); Types: full custom ; Name: NativeLib; Description: Native Crypto Library (Fast Key Transformations); Types: full custom Name: XSL; Description: XSL Stylesheets for KDBX XML Files; Types: full custom Name: NGen; Description: Optimize KeePass Performance; Types: full custom; ExtraDiskSpaceRequired: 1048576 Name: PreLoad; Description: Optimize KeePass On-Demand Start-Up Performance; Types: full custom; ExtraDiskSpaceRequired: 2048 ; Name: FileAssoc; Description: {cm:AssocFileExtension,{#MyAppNameShort},.kdbx}; Types: full custom [Files] Source: ..\Build\KeePass_Distrib\KeePass.exe; DestDir: {app}; Flags: ignoreversion; Components: Core Source: ..\Build\KeePass_Distrib\KeePass.XmlSerializers.dll; DestDir: {app}; Flags: ignoreversion; Components: Core Source: ..\Build\KeePass_Distrib\KeePass.exe.config; DestDir: {app}; Flags: ignoreversion; Components: Core Source: ..\Build\KeePass_Distrib\KeePass.config.xml; DestDir: {app}; Flags: onlyifdoesntexist; Components: Core Source: ..\Build\KeePass_Distrib\License.txt; DestDir: {app}; Flags: ignoreversion; Components: Core Source: ..\Build\KeePass_Distrib\ShInstUtil.exe; DestDir: {app}; Flags: ignoreversion; Components: Core Source: ..\Build\KeePass_Distrib\KeePass.chm; DestDir: {app}; Flags: ignoreversion; Components: UserDoc Source: ..\Build\KeePass_Distrib\KeePassLibC32.dll; DestDir: {app}; Flags: ignoreversion; Components: KeePassLibC Source: ..\Build\KeePass_Distrib\KeePassLibC64.dll; DestDir: {app}; Flags: ignoreversion; Components: KeePassLibC ; Source: ..\Build\KeePass_Distrib\KeePassNtv32.dll; DestDir: {app}; Flags: ignoreversion; Components: NativeLib ; Source: ..\Build\KeePass_Distrib\KeePassNtv64.dll; DestDir: {app}; Flags: ignoreversion; Components: NativeLib Source: ..\Build\KeePass_Distrib\XSL\KDBX_DetailsFull.xsl; DestDir: {app}\XSL; Components: XSL Source: ..\Build\KeePass_Distrib\XSL\KDBX_DetailsLite.xsl; DestDir: {app}\XSL; Components: XSL Source: ..\Build\KeePass_Distrib\XSL\KDBX_PasswordsOnly.xsl; DestDir: {app}\XSL; Components: XSL Source: ..\Build\KeePass_Distrib\XSL\KDBX_Styles.css; DestDir: {app}\XSL; Components: XSL Source: ..\Build\KeePass_Distrib\XSL\KDBX_Tabular.xsl; DestDir: {app}\XSL; Components: XSL Source: ..\Build\KeePass_Distrib\XSL\TableHeader.gif; DestDir: {app}\XSL; Components: XSL [Registry] ; Always unregister .kdbx association at uninstall Root: HKCR; Subkey: .kdbx; Flags: uninsdeletekey; Tasks: not FileAssoc Root: HKCR; Subkey: kdbxfile; Flags: uninsdeletekey; Tasks: not FileAssoc ; Register .kdbx association at install, and unregister at uninstall Root: HKCR; Subkey: .kdbx; ValueType: string; ValueData: kdbxfile; Flags: uninsdeletekey; Tasks: FileAssoc Root: HKCR; Subkey: kdbxfile; ValueType: string; ValueData: KeePass Database; Flags: uninsdeletekey; Tasks: FileAssoc Root: HKCR; Subkey: kdbxfile; ValueType: string; ValueName: AlwaysShowExt; Flags: uninsdeletekey; Tasks: FileAssoc Root: HKCR; Subkey: kdbxfile\DefaultIcon; ValueType: string; ValueData: """{app}\{#MyAppExeName}"",0"; Flags: uninsdeletekey; Tasks: FileAssoc Root: HKCR; Subkey: kdbxfile\shell\open; ValueType: string; ValueData: &Open with {#MyAppName}; Flags: uninsdeletekey; Tasks: FileAssoc Root: HKCR; Subkey: kdbxfile\shell\open\command; ValueType: string; ValueData: """{app}\{#MyAppExeName}"" ""%1"""; Flags: uninsdeletekey; Tasks: FileAssoc ; [INI] ; Filename: {app}\{#MyAppUrlName}; Section: InternetShortcut; Key: URL; String: {#MyAppURL} [Icons] ; Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName} ; Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {app}\{#MyAppUrlName} ; Name: {group}\Help; Filename: {app}\{#MyAppHelpName}; Components: UserDoc ; Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe} Name: {commonprograms}\{#MyAppNameShortEx}; Filename: {app}\{#MyAppExeName} Name: {userdesktop}\{#MyAppNameShortEx}; Filename: {app}\{#MyAppExeName}; Tasks: DesktopIcon Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppNameShortEx}; Filename: {app}\{#MyAppExeName}; Tasks: QuickLaunchIcon [Run] ; Filename: {app}\KeePass.exe; Parameters: -RegisterFileExt; Components: FileAssoc Filename: {app}\ShInstUtil.exe; Parameters: net_check; WorkingDir: {app}; Flags: skipifdoesntexist skipifsilent Filename: {app}\ShInstUtil.exe; Parameters: preload_register; WorkingDir: {app}; StatusMsg: "Optimizing KeePass on-demand start-up performance..."; Flags: skipifdoesntexist; Components: PreLoad Filename: {app}\ShInstUtil.exe; Parameters: ngen_install; WorkingDir: {app}; StatusMsg: "Optimizing KeePass performance..."; Flags: skipifdoesntexist; Components: NGen Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppNameShort}}; Flags: postinstall nowait skipifsilent [UninstallRun] ; Filename: {app}\KeePass.exe; Parameters: -UnregisterFileExt Filename: {app}\ShInstUtil.exe; Parameters: preload_unregister; WorkingDir: {app}; Flags: skipifdoesntexist; RunOnceId: "PreLoad"; Components: PreLoad Filename: {app}\ShInstUtil.exe; Parameters: ngen_uninstall; WorkingDir: {app}; Flags: skipifdoesntexist; RunOnceId: "NGen"; Components: NGen ; Delete old files when upgrading [InstallDelete] Name: {app}\{#MyAppUrlName}; Type: files Name: {group}\{#MyAppName}.lnk; Type: files Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}.lnk; Type: files Name: {group}\Help.lnk; Type: files Name: {group}\{cm:UninstallProgram,{#MyAppName}}.lnk; Type: files Name: {group}; Type: dirifempty Name: {userdesktop}\{#MyAppName}.lnk; Type: files Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}.lnk; Type: files ; [UninstallDelete] ; Type: files; Name: {app}\{#MyAppUrlName} Ext/KPDummyKey.pfx0000664000000000000000000000333410576764760013061 0ustar rootroot00 *H 0}0 *H 00 *H  00 *H  05D?*dI& |i&fKG;#!΀%R[m)ZwQoT>ybv[O$Rd3OWo7c4;תBvft87 5SG LLP4AiF2L[+ )$as(Q+Oݷ+hț[#~)[jgriL8V(C3=JpzĺV 3:|<`N8+؃8, tjؚyD5֙,X2ut_."h/^+ɳ)oAL̒*Yv3V윎,J3kgLp/s(AqPԼH^˪Ͳ;6L$ 8̒/Ya\J7zl0+/eϬ!!v,(7w&ٝ|mQZmI];8FVW.";> r'E gӟ.4{j<(C ҉v9&g>+9= 9}z7Dݗ]2>y%o,^9߸E69Rd_yYaļI6h>'3s=7haT<$t\1BOJuHsw3dMBjW"F~aؒz>um+yj8S!X*ZР#D!;*q^1-28=p'>[ɠ> !\8CY5qM~}dWBx~I`߃m@%wz'mBqlCd |~E~Q4nvwm0d΢pJ4\Z46`W|Uc Ut10;00+&cr{ 5FL~!4Sqn.CExt/Images_Client_16/0000775000000000000000000000000012666316542013342 5ustar rootrootExt/Images_Client_16/C58_KGPG.png0000664000000000000000000000220510131463512015177 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbLdhtbe`?_?ElxFRsz021æߞ@1T1{MnR?ݟzrսEc77~>&8 %Y&ND$q3201:Y(E&}b`Ϡ)-ΖU᧯'  &Q1> ?7cqL OМ/ 6>@@ =:@hV?@C}}tC0߯ Jbl@EJ@ ^e4h~ " 4c_2o o\g|W@;A6',:̩ AaDD ej)&"{@ȴA#8ӓzh51QT)5u h K]7F`Xhs30q10 :+/K`#t@~.FH$%0`Ǜ/ "~1ۿ ^ Ӈ _`x R 01|*@LTO~g`eed!0Y<(~ý 3z7 ?= @,j@Wd`p4ca?Å7~|fPTexɧpOv ?>20<؂_^A֠,9+%0/ ΎQVLuo= (;0J\Pe4  wl<2IENDB`Ext/Images_Client_16/C44_KNotes.png0000664000000000000000000000167210131463222015652 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<LIDATxb?% ArC a"6 ql=?!oAG _6 k #8?  A 0K  9e~\o&C-?>}Ē \ \ 8210|gǦ^:n00؛1h00=1|P ?1|}GĒb+4AI;G_h?00c#ço o+ &^?@Eo~A5@[/@0ssg'0ۡ5bw ?Cb0 ??@K?9@gcʠiW&@ٌ@g7~z%@0cH 0 9ނr;ba`dF:o@{X~?fxqA@,"߀).([@d0 `F'_&~1oqO?xw>G5\T.@LȚYi62? vo?2| c>s+@  ,–z3 0zmдk_0:xGQR+ P e3s< \3ppZ/ z7?xExy9tƿy`!wF ɺ?ޱ0l[ gח\c ç ?02(+0zz:Ͼxzh@1z2𰥦$[ʈ3z_ ߿30nNNF)}9CWg*A!KK+-+"=@/W[JɢdECSrݏ?{ =~ l@fd`HJeABZ_0@,Ғa8|*7XYDD89~bdcHJdf10ܼ@18gZ9(3K00033q1gfaHUbPS 'g;vF(nemcŠ$`h Ơ)t;ï? Z ߾ a߾\>]_@@dD5$|f`ANAOADWF_@:h?FGs>~|(@1sr~3d:PwbF`1ߠ]/ L' ~t7^7W@H_10? N|p]&8x/`j`b pTe̴6uضtOy3(e30l'@L`o@1WMQTbbd?swMߘ \~'n \([j(۷, < _b`f - CHp'V100@ !s}?y_@`5m30Z\@OԴtWfbx"{ W^cgead tǏ?/,ɴ|nߞ@ʾ^yœ* k' ex=P#+ 0ce8z{f M^6:Ĵ ⌒ l ٞ0b<0ZQoN`/dž50| .KV!6.v&@x)inAw0d``c [> 1WeT5q%@1 )p[32> x׷ O11:1p 2' gdaxMIY0U8~Ÿ?)30L`Tff tMhC@033) (_e<ʸ0:2)wn^V.&`L?XTLmA5  :ss &3+A̸Qš_]6qGR'ÑSg_:v '^xt ÷ Ŀns|Ni`s1V¡+k@ ؁'@fga!+IENDB`Ext/Images_Client_16/C56_KAddressBook.png0000664000000000000000000000167210131265372016773 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<LIDATxb?%  ~ɠ(3?~?QAVjG:1uf@ X@_@C20gd``'"K9ӫ/>?t  <4S~]M$5oBf9]2yKvivbBА:("L?xl#t42x|X #Ta( l T"gv1_TE3Q6 Oǐa###ݧ)|7?~ gˠ'!*@@E߿?~koh훫'z/_@'- ߯~A Rgcjo,G+H %  Ѡ}Aq"+_c ҦrOKs1 gdt~1>2 ث@ͻA^ w~o|)7Ms'8`1M {NOa81uE bfdg,lAڇeu5Xĸظ1z- gn`8=wow$݃>@DO7?OXߨGv@e^#rR'V? ^ӛ]+r#@!+ 0Js.dbg 1El@ -kIENDB`Ext/Images_Client_16/C54_Signature.png0000664000000000000000000000142610133442656016420 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?#c~8xSe&=8 @L\80;3?fVVOI^ H'@]-v]#QB~-Cw?={dg: p6{ӷ3_$*/{Q7$ >- ~Âofy-):&ff77~kb`@,&v~z]ˠ61p h/s3V@,0deE.Zy " ޔ3g @`߇g4/>Ѣ 14c8zFClP`g={F '7ál7vo(J5KX)3^0G2ay ĦX>8nC(a@p0LTW] ]kaXN A /Ow@ Lc .Аe rO`a N _ #0Ƙ@`M5C_03ϗ~0(:F r2NGBOMgx#Q |sjI3 WʪIENDB`Ext/Images_Client_16/C24_Connect_Established.png0000664000000000000000000000220310133443126020337 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxba!Fٿ@۷`6' 1 2[F/;} *`jTߏ_>?CO~gAx8˯F/گ3"ԎڕTo?_|[P+G ߘ~g{ 7 _0|}xc93>ad'Χ^ $\ 44Q#SÅ12o GwALK ) Alw\bwh5 قˉ9?`\A  ·ryFsȌCb)q`f^]^^_L,,W>,ۿK/:`hΓ? }J@ ƺ/~3`Ѧ3#`A s#0MƐv˧ $_νE !07ڲwIENDB`Ext/Images_Client_16/C15_Scanner.png0000664000000000000000000000207610127240340016034 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbLJd2tgxp+b6c`ddd`aaex͋םVVVd#ej89tϟ_W`!X3;;÷o=TU\?|7_3())3yʕ z  f۷/1\tŋG ߿fx۷h i; @(r]r@S0TL$T޽}PUVahO@pq1 (\rߎ;  B _f3f07P ϯ- _h0/?޽ X@ß?~bd@qk^s޼x UY#\:Y @,7{iԙ 10`y3{d9Y-Td1s (~e4AXEJ;x910p0feaך6^CCSn IIv_ ``𖝉3+o&x{. 3WZrox3o?pի<>}:@1̜ lЏo?:e 9)庬WWl{?jDCWX_BB|„6 a @@Ƞ + Je a1 ?QSSo ;;g(`^w3XIENDB`Ext/Images_Client_16/C67_Certificate.png0000664000000000000000000000103412666316414016705 0ustar rootrootPNG  IHDRaIDAT8ݒNTQP"/ DL5v`kg饳0K0ca q᜽P&~ei0 YI)cfFNLqR\ko K780%Fd$)U(eA:M bΉ%nN][hZ }"5 i4#G[{ DwTÊh!b8ʢQ4i6JRNԈ>gMbqw#~]DX|~('{BDY 3-`S׷~ȏp8&5f}&a 78u};55 !BY[I#~~ECV|P{ 5F&[39[`ü $2ɱO4Jf#&"$hY4X$DVKo;w*!U !e`dJ:W$2R2S"eIENDB`Ext/Images_Client_16/C49_Folder_Blue_Open.png0000664000000000000000000000112710133525322017614 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd```bp7@ @8P ];@$=4N/F{ |܃ ^ d {l/ ?00p@={6\^" -3'go6x1s:Fw> u 8yB(0n~@y3)ds@#mcX;T#k? Wm c+_ 4Ȁ?r?C6520ċ5Ѐ M@h_ 2 nql5.BBDv7퇁@ i7b6F |t @۫ Ă]@@ `bC 0!A} XPP xThbCIENDB`Ext/Images_Client_16/C40_Mail_Find.png0000664000000000000000000000216510133443544016272 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb Z_ LL 11|[[WG)ѣ;wh3FFV 4?Đ_~krprKE2:pʰϏN`` de 7/o;+k,$]Bs/>πd ???_B<#0_AFT!(Kie oߜmc`d F7uMS36u5w1ܺ?~^|2 kT10yA77W9<843#! 1" !̾/+&A00XH+1##6 GG;ĸYBL _fO| _~g3 df6V.2893##wǏ\/.6Vv& F iAAYwIqybaaeN?pq(/aN6o?A B@C?{ðmǞ߯lŻϯ?`cvݿ1r31|xpAAFEpI3zdE-~eA##MSEF'  c3 5A%%N: #庴ūCCw+)G98|ghk_yۇ8>?+?zu * x^`dd??S+0XX~01 C~39?[X@T 0r#333 &dr~r`yS{YIENDB`Ext/Images_Client_16/C36_Ark.png0000664000000000000000000000206610131164352015165 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?Cxx8 Zm߿)S8qq=MHpEqqA6W3\t˗ 8Wa[ %׍כ~iI 3#{8̷'&?| dcf񏓁PޢE^|```HXDPR_PH/]<t5byai"&  ˬ+#  ?O_~kG-@] !;,8og_y|N$GE62qAw3>}Ϸ+ o3=foG_?;[M hN6pedffP }``cfd)c.)D ̼| O/3([ , _2  8 >20|)0A ajfb`e``dhߠ 6SSAVFV!a@M|@ ivY031FX3? r "@q20t6d3q3Ͽxxx~l@SuGZɳkϗ ess? mdge` ߌNHvv"_?*`{޽k@+ x@1laSDDb50\ŀrz@@H`2@IENDB`Ext/Images_Client_16/C01_Package_Network.png0000664000000000000000000000220210130241026017465 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd`h``d`a'_m$il&.#)o (:}I@!uk)Z9x9y^~zsO߿3Kq Y4uߟ7GIPH"_w/8Yu8٥؁?1Q/63<}3LeYkn'  |A/3\&"D '+M?2Sߘ&q=+';0Qr20p1???/^:??C##?:j @123['V)`Wp`x;?@Wgd``̔\̐u#ߓ~k9Y82 10s00r10('4?'˗r2k~=O7oI=}wz/` ;OcW H~.7*tfS'A]1    E8#P߿|'ʿc@!~狥IENDB`Ext/Images_Client_16/C26_FileSave.png0000664000000000000000000000160210133443104016135 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?Z\~11004@az{>r /_/ ğ?/ (AU'7[*xvkwѰA !ŪDZ?e>,q6cd``b;?# 7P7L@^>A.~baFF@El@H8L@ 8@`db2Clg`27P32102C ؘA 85yh.'T@Af?mF#P߿ /! _??3|_w3WY|v@À/$Z33;?0FX fc7 ˯ L _12 F~3L`3e`gf@Aߟ@ge0w_S&s}6@qr220Xjb_P4 Vq2pbPt67;#ODy^- 4j@A4   X Y3|AT/F &l| ٘0ewt30ДU>ad VHL؀ /6}3p]Fh"bFWp|afxo參 KC4>Sg%IENDB`Ext/Images_Client_16/C66_Money.png0000664000000000000000000000057512666316400015555 0ustar rootrootPNG  IHDRaDIDAT8˕ӿJ\Q "(Z ]I*8Xؤ@H8`)X(B@Z Z䬬殻of(eh[7Mo%9NQ&0[vJb$_ĉ.0rgͬj5Q&nmZ8 -TxO*>/}^bYp-;S ) G vc 5\o̤ޫǙYA{9V4 As"%b3 *?`G髨P1,I<wzZTIG(r'eU,ZIENDB`Ext/Images_Client_16/C18_Display.png0000664000000000000000000000157010131206132016045 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb\hS#CC1?30g$ψB&&f?Yz+X0@ lFFe``aa͠@,wCs?$E}@7ß?@203 L@޾zpc1qqyy9>0ܿPɊ]%4 XMafffxp!ÎM>|# E? &,(0BΏk~~w /L߾o{p X8y8gb-8B >VDf ?;8~3ˋ_m7`t )s?P`bd@1`IENDB`Ext/Images_Client_16/C00_Password.png0000664000000000000000000000166510132777112016252 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<GIDATxblUgؙ1|&u1[V3e@, 8ߌ 1*?)YfPd2cY'V/ u4SFIfk|ee:;ÅG5ew+L~#3 fbd`ddڣ.GVp]|vn%@OA  wJx T&KQ? ?}uϟ eؘ կ É_ Dd%ąĄxZ0~e`$4ňH2 sZ Y3~?lhiAAg/o>2ex{?w Iu#M ,3A3w ’&@a1;Ŧ$i` 蚿T+fy.9/5@cE} ARa7c lOJ0k 30s'+?t} v&yH`•AMі!S+e} ]7 A30*2 ja7}>n8JLVV$4#|'%iNd7Ԏ@miMr3Bmq:1 e׻j5)?C:'`LtFZe2rlj R| <]ڒH%s&e2L\AZX.~Ri 4U4E~壼p8Դ u ԖQ^WZ/N}}IENDB`Ext/Images_Client_16/C33_Run.png0000664000000000000000000000173310133442666015222 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<mIDATxb?% X@^^\\ ^b`g`a)/ 4%%}xy Ο9SߩL@} ̤2b`97+J  w @`%&a`g&ii)ni#f g~޼_0Ȳ>]5H/@ `/+Lll b>~a{~ e58-x3H/@]͛lpO_~0KF c޿cf_=P lk7=~m.R ώdxyw^"$>O 痟?3c9~zO ?al;##ׯ{oף?n^Fƛ_߼~%-_w t5# ތt԰IENDB`Ext/Images_Client_16/C68_Smartphone.png0000664000000000000000000000075012505030564016577 0ustar rootrootPNG  IHDRabKGDIDAT8ˍnQ]{M1 Qy% A ~B׎?wb ɛ[^̙{t:=w? UPp8|yQ/U^6FEU(iNey*`}<{aT޽}Y>xc >Ɠ%FrdY_OS,ށ|%[b9 N "v%xs>`#"*z!p~:Rvw4JXU^\!A$šܽ -ZTn)"6M¢ ?NNpw w'^UZpIENDB`Ext/Images_Client_16/C65_W.png0000664000000000000000000000063112505025262014657 0ustar rootrootPNG  IHDRabKGDNIDAT8˭1K\QoUHbh;T)ThaVIcB"]I' +-lQ$L3O./ xr{f<\UK`0?8A/"gcCG"-Cւ\%WBn3αf@GXG%?1w-J5\_00 c\o͋=3\`.0ijN_c&zЏ]cR,bSj*rAoQV )"?tk4mp=f^w!qdJ Ñ#-؋ov~dcQJtC6IENDB`Ext/Images_Client_16/C28_Message.png0000664000000000000000000000167110130000324016021 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<KIDATxb:a### [ZZ aǎ?ϟ~O˗@!n(4iLⅠ;yTI=8k4ͦ#X@4+óV_YpN @qa&i`h1%?Rr @1 i:C˞?\|L< 0c{mf  3,9!AZB |0~cf`tAs)3 ߸>2 0~AEAy4Y^V ;. ?b`q"?_1<~ {$n֟Y9~gv ܿ%1\|3 _+ Y{70<~lyưzY~b`z`` ѿ 2 ~1 6/a8 w>p#s'n0&03|1ˏ A \ 3OLgxk/+; ,8"uBb0bMH~SssU}k0h"(?~bafff%_...x8lE@1 @,Νnaaod k0!R L ?@܉RRRi@ѳ8H Y^~ xwjzIENDB`Ext/Images_Client_16/C03_Server.png0000664000000000000000000000162210126474262015715 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<$IDATxb?  ~f`g琕itrr av_>wG|!H@1 akkk##COO׮߿>}knnޙ0=€mlEUbo߾góg.cb`ddc`ff rs>};?~1| ee`cc)@Lps0~ϟ_ JJR ?fx5 3'ze|,,tqss6|  P `ddb7?|F! ?351P%\@5Wށm+T3#VNNv>>^p7߿l6 yxx=xp6?10{hWCh|oG@(y_ED~1~c`w}v1̟?Ƀځf] 2h!륳fkWW /_GBIEń^x&x҈׏VQg`akcg_888z ̴3nw013eՏZ& t U5>bgAD8C7} B wVZJ =::z _s~f`_/8Y˃W} )e=޿IENDB`Ext/Images_Client_16/C21_KOrganizer.png0000664000000000000000000000206110125245344016514 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% 96zZS4M9}^Ʃ{%0qp0rzc#@en+@1Pp4/*PG/aVa&?3|raB6,ඕo;&ga:OFMA2-Wq.= 1b =̃p 3+A:·0Q nA5y!MA9#//2* و(:Aa#ΏA!+ ]B0,  ńͬé^uˇ ϙf`7k5]=FNo`%:\ x@@g>'+V7@X~r0102ϰ<חDB4~2 0H m=x7w 49ɱn%ɠ _L B 3F33|[o> &[8}^21oFdX8Кȡ@O#g/v6+? $I3#.yp%71Xap4`8'@ ۏnҡX_| ?1}})"޻ ZO8a`x [} @yQifWzĠ|~֯}{5ë_'iBL :v39 ^z OaxT( \@@Ĉ;YXd ? a2\ Vjw*IENDB`Ext/Images_Client_16/C64_Apple.png0000664000000000000000000000147112666316364015532 0ustar rootrootPNG  IHDRaIDAT8mOHluǿw39T|qGK6䠴"@BE-ںi1 T22&D0 Ivy޹~Z ^Á|IR#333neYj# X\\|\,qH$044[/9S_T*hT{{{ N;?$ϯ[ P.pxnnf?}hiY5\yw}yyYnllDkkkBq[UB LBAq288F6Z>𝾰@677SSS0vTt]J)R Lӌ׊" ˽k8I$P(MP*i2 (bx[b{w!?AExN !/f_R s!(_wk۶u]x cB@uNuvy|C8`AJ TJR}_;;;{:66AE\c! ~@RJBxj(4MyqqXi0 590DTRhywyrrJ&=::ba.Sm? 3R+an?lZv tɣZyvIENDB`Ext/Images_Client_16/C08_Socket.png0000664000000000000000000000223410126472642015704 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<.IDATxbdp?ß l6Vz¦:|LLwvWݘ|_W@1 [!eog}0QK]#IY;@108gQoן+O~&ciA(]>65Z?  (IL~2]g0|x׷ >f8}y=àhr@A 7 ž /$' SC ϜaxCP+G 70bA BUP#;ED: k5?3A %(?;c<0]DKJXA[Sшhw By3p2py`p-C &'7Aǭ@;.  #!,lTH.A˵%'%!6ѫA߶))ŷ AիǺ* (    ]$}e`~.̚l }í 👑//C߫Wwo}T| ~g0Vq`i10\0(~ $ `ZlfIENDB`Ext/Images_Client_16/C02_MessageBox_Warning.png0000664000000000000000000000165110133444024020161 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<;IDATxb\΀g`P~@sb)ϤNŬQ'o: a`P27wtf3b33` 4 /0|%;;[W74 @(.``.ib,i` " -"Ơt4 @,,,i>| 20s0誨pH0Bm ɚI00143wu1bfP` P @L<gv3ܽv̌Q@;M@ x.& , ",#''ׯ jsy @㓕Pۏkˁ]%.. -- IX. ~2qsqt @1AQFEڋc*Z  !^e 2#P(  tV>L%&| C~?iII9@쟿32Qd=h@`+#/5{0/ ?c>u*Cco/o `%8のA zWb,V`fuïW?o\ F =޾ ?>~l YY q7K%^o/^0f1~g?@Mt #а 9\%N/@l@_Lhge~ ld"IZ Y IENDB`Ext/Images_Client_16/C38_Samba_Unmount.png0000664000000000000000000000217010127240346017221 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?C@tC7wff bݸ_󘘮[< 4٬j "8f8)P-\IZ6 e[i~6e{ɸ-C # Ȁ@WxYC/ :L .18wa,? V%{G ؾ]bRR!.!5Lҷ d £Π/ ;.dfP.Pi.d*()$Q^H3>yxUt3$p/ -(( 2 .`/y8&O13a0}`l%GD K3a| &&]"/7?qϾ3a7 o>`p9()wFFA>eeUVQ@BZAAIO?2&cPcgxwWOaASSU j+ˋ0(e30Zgx _߾a`vePb'377-@ =o?L cQaQef` ~101ps2h1 knn1| `1n6.b:?0` #2Fa`8tsruphq%އ:af )1.AF-v*ld FP^pv 7`_W%v^kbc~_vN~;~t#@ `=W"߿~Z3ppϠ-MIIǪ !,g]58`5[e& `)+?&A0l/+/DDվޣ}v։(H͝6gJǡ\.G\gL$QZX,浶6!T1˲FEK`S``??1)LaBRԗy(NuJ)3#χv!׌`RJǢ,-= z7=^Ĉ9<(iWK0q~)ܖ-"!y6t=@4^T7v"jofq5mCێI ?;/:aIENDB`Ext/Images_Client_16/C55_Thumbnail.png0000664000000000000000000000163210133442632016374 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<,IDATxb?Cee]m!FF >H3a @1 .|6m@h)EGG3<{ߟ@iFF @# a`bUPcXlH pp;s*S# 2 @̌ g'/>fb 89X~j i 7/ ^00~o&1|(~+ +_u!Nf&|`` ?@< B\  *xdx/F~1|dfde``d # @A//vV71# ?%lXgGX'@11@)ˇ k'0 ̙_b lhnIENDB`Ext/Images_Client_16/C52_Encrypted.png0000664000000000000000000000157610130001060016371 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb:a### [ZZ aǎ?ϟ~O˗ @2ի >|`afWA. ~fO.\[NNN30RH=%Ąl ++í;#/>Aw3\Vk0 ~p ?=aPUdx  =ack@, @Ƿo oex zNv37wO35-ga@e` _ kfbPg, ߿~#DFf~1o b0Π(};-O` Ƣ L8߀A  X@&߿ Ey.]ʠ@7+ 3  D+3 @7ÛXi@2m``򍉁@`/8F&dϭq T!8qQLA/0@A fffF399u$\q p7ߟ`R`e s}7TPF5ɹ篟 _͝(%%THY=C2#ׯ~@ⵊWșIENDB`Ext/Images_Client_16/C34_Configure.png0000664000000000000000000000172410133443176016375 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<fIDATxbd``UQ($$(Ç7o^Y' @ׯ ljjjZ ޽xYʕ lܹĬS͓wސUggPQp̯_W\r: fOOMIַn]uZwT5EEE2<~TڵK?A  ""']]hOӽ ݻ߾}!--ːZ#/kk[ az006 ?~ab fNNve}cY scӧo jlo߾3zi03jIKKhbYY1 kG]~п  >=t۱ceݻ/tտGeRUUgVRGЕ \ r^Kl@12hii11]***ŋww'$dbbd`c f q`ffw,,j/]tlmyxy 3g/ϝ;{1@ 0_){dee  n<;;wۻr0mg'C\\4͛7`ddzԦMk_|K@&{0<@5@G׭[񊕕 _"":? X7o^畐k/]|1>ym%GIENDB`Ext/Images_Client_16/C09_Identity.png0000664000000000000000000000155210133443056016243 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% (X{X]/)X302c dc`faL 1H/<}@,&rUU00|~  fׯ10111###23pqs1 ǫ+ ̬l _2}q÷X35202 1XYi3/@~g`zUZS@m `_b?3r00y*_2paݫ Š%by.~dxqv8= -?3 Pxpq 俁 ?|ῴ5g=j7?aAAAAAA?S1AUN@ocC@bÏoffx`qϥ a]NL/Fh 2Ͽ? ~c o?1gPs20[+1~e&(V`4?/??18b7?%!4u01  7ñ#GW}=@ ( EEE91{;ÇO xn1~z!y޻5@_09))|yY 㕫.]緌VlmtUhy X@1'Z:<a?:Tt,}~wG  VV=w~3@Π?}}ʿg={z-&F$ 4Ub3P όZ?֚v2g@Uh/ ?+# ߾3E3>V1vQva&A2{7U;R S @lll DH317gos |gpg0ַT:~V>x99@##KUi)q?~@%@#Q``ȱ_~  ]=߾0;ӯ l L@ bb\1QI\|wt?o&@EZX3 9~Ͽ~fd|`x-4y@()) 00˯ ' 3\p=?5}g``cPPV 1>}? s2{xFF( >bx _~ w>z!pgbPM_f7 ف.d 芟 .|e X~xúSY88XATw_(UMw ?=-//0'TyÇāa ##ۧwݹ7o^㊏OcRd* N`_ L JJ:DvΕZ@̊ 灌Wej&")kr񛁑hؿ CHd?g* w-їǛ 2be` T7! @>3P P~f)bM1zwY_ C 5gbd`؟&11|P o |+OYc`C9<@eN'0fe`'0p@CxPߠ XxDXd?! J0  L 0Tr02˓{-c2R@~bdlV`Z 4_߿` `"a`dQ,alf_ srZe IENDB`Ext/Images_Client_16/C25_Folder_Mail.png0000664000000000000000000000151310133523340016615 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd```bpcC@15@@y' b(fbFdd8;ݷ%2+Tx- W8GA؀W_d`Xx&Ml@ x E+g>38aK > OgXe@>C 3ȋ1Xi0\< } 3w ' obSfH 7dad/55&0<iT " @`^@{?0X23㌉_ ~ge61dq0Ha @L ͧ ρ~ưc G0}ab^rW.Nn`LwbxuÏ7`W$30%/7#W~&pr 10b0Ta8}:67F| ;vb(ra`̠4 d8 )HZd忴g|߾C/pE3XN% @ @ 3q%##󤬬?/ɩ} @X, :@Oƕ EHGIENDB`Ext/Images_Client_16/C17_CDROM_Unmount.png0000664000000000000000000000206610127240554017044 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb46^30|GH]COEEP>x'>|4C7.Fbb~~o 06^KJA@O_?޲[ۂxP#3@1gPSmGO|/`?~?uڥBB@|";mx޼e`_@K~: YX,,߾=q$КG8"F[NZ 00iүo_>zЀ=e`0wc5-a`` &5u@ i/@[mdGgc`q >з>g`bbvff e~Y~v/@:@&{? O8ޓf4?'[ \\ r\ i$$^38].@Lr6H306v6]5w|!a20@L`%+PRAiWp&NP(@A ߿y @LG>~'!@[ udd``bd7=ݳ׬:KBAQ1L(d2 A)]㇖jbӃ{wHI130| 0H0 @^>2Lj`rf8@L@U痲ac/_^`H*|À n&IENDB`Ext/Images_Client_16/C47_KPackage.png0000664000000000000000000000172710132777546016143 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<iIDATxb?_g?&,bU'qP|һ;$P-+]~@, @LD=L[kĘ toIo^}YeL\/X` A.mW3ȫ 0))2(30 30depwW|~Ll?q6@Y@Y3.. ܏ؘ1I22H(2pɋ10pr00|cXXgA@`/){3`P/*#_.1;2ég2(h0pD2ܿϰ j@l82'*0p!Ó;> ?e`~ŋ 1 `ضs  gbdQd06cxL9%g~c`Re`ba@   @`| Y`Tȳ _8ؘ~ QQ @L`LL L@Ȁ1aX?EĄ`22E L X { ?~g cd{_1B|tOwo~0I30qb%@͌h Ox 3*)3Ȫ03)/8} +d@`~λ71S5TQWae`gb`zR8)KJ0|̮%''-b odd?k×/ @`BBB[WNNAn.QPFHlY 0:vzRAIENDB`Ext/Images_Client_16/C45_Cancel.png0000664000000000000000000000215510133443252015635 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb,d /߿l1߿ w{QLLقG^gI&۷;w, @?/$;5O^__;?|8 @1bLL,BC ?+ly޽#/ $&@Ⴧ'l@7321H= _"ܸx42|)3KtP!@1۰_~}ׯ^beTb` )8P3#T3g.lѣE@v<< Ǐ^{YDx \ L@|ɓ gos…Ne m~g6ß?_yAo2 abb`Ǐ ߁;I !+PP6}:ˋ `_PeaP A ]YYl1]c#Ws?~}@w&669fAׯ^=`b&^jjK>}?HNjd`tO+8g323G #;oy?zx.{#?%ff?@_t y޾ j3NΟGpppPg &&&p @L?~}L&`x($ܷo[tߧ>;'0@Q ~1|@1}t/33e~?g^*Tf ^yV..O99(>~''oiK) NfE0A<=x̌' -H^IENDB`Ext/Images_Client_16/C61_Services.png0000664000000000000000000000200610126474252016232 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb<+)OB{ ?|d`addy _z;= v_ @l&("'ϰ |3H3 3 a`b ҭ* 6d`padk>^DϿ |A| F&LߡmgcbX5䊿   I>Q M3fQ )-US5i{>8w xy @Lcÿ|`/n%YR_c}'n^/_2ص'wO|FN@w>w(3VW_vpr|bg`b̽^b\c&x0"7~@02 /Á20L @a7 6_cH <~kbՁbo@5Ï[ 0dTxrշ"b4xXKG 0#/(|a2 _eַ{30$%9P 00X[30KWGX{\/ ? N 34'P-7_?~c`Tb*(a#/3c`Rcb`b@rh*Tv5 4Ãg}n˕ R ƌ\  d&L @A !x?Ll0İH,KOs+($L @zjt+ô30CR&FEtRcb bn c`WecLN05cjNūIENDB`Ext/Images_Client_16/C48_Folder.png0000664000000000000000000000062312666316326015702 0ustar rootrootPNG  IHDRaZIDAT8˥JAR;A++k`·k+FG0R 6B,lD b6dw~,l7 Xf|s,kKY&8`zXD= Q5i^Utz(@RI܎[p|rLuc ?Qh;hux1w`d2C +T"6r+Ԅu/tZ@Ou2y8} Ni*˟Nȃ92/av ĸq֋8$eW/ < 6uyU X=`uF{ a(`9f2(=7 }IENDB`Ext/Images_Client_16/C35_KRFB.png0000664000000000000000000000225510126464444015204 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<?IDATxbTSSc 3S#Qv6f6ff&Vf6&FFf&&F&& q}[ X}_2~rJpr3ffd1~!&A]U`>.o Sn)Ƴji! n~:VV _?3hà&+v Xԁ ߿}g|jz 88~G+%q6N. /{@^aa<|\j o|b`d``h '~3J3 =yh@11 i3×_~`n$ 1ax?Y)I-rO5EQs~_5Yf \< y2|gaWR>~$ @04G,WN)>ϟ1hj0(b0gg '/yAOF Ń^%#,ERoN(;n? ~bv*"!-痌FA2u52# L8G4+ '.sA-M ! 5@@(RF?4<8 #. 3102b77V^)-3g~~﷗ ?s0'#:E+AHbtyQ!!I;#ՈMB1 PJQ#0щSG/&7}`x{$=~֫W.0.@1+[\Nz7orSU@E(13oFF&0JtZ[;IENDB`Ext/Images_Client_16/C29_KGPG_Term.png0000664000000000000000000000160110125245344016167 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% X@D6cjh$fQ>0p |uMwm6qd`aanb &2 I RL;W[g$Vd/_~3 v@]`4JX5T̚KNSA@R /3331Pk@ bc P}K_ 1H02 <{pA𕉙1K@ҽ `/؀wNȠ%*}_0\8 XXYΝ? [!Hl@A xʐu%I6'+ffx} @33r0 I Lg &(19@}ʠn3*>o51{ 7^VvvHx@1ć g b[ J 2J j"  l| < MOQL b@dbdf [ ?g #vya1 0WGDK!!ABA? /8*節  ?~gx L 8~{qi/J2Xf&$&?~ Nb  / ?329ˏʊ`|f>LCObs㻞$Xd"fb?@1R >IUIENDB`Ext/Images_Client_16/C06_KCMDF.png0000664000000000000000000000170410131465512015271 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<VIDATxb?% Ad+''Q {6  *dVAC ?JJ|B6'0tAǴD @YXQQHbvy s4%$X3;~]A}ڽO/PE 0~q0|xX88YN&?0\}PsL33'$Zs~FV ;ýw@_>s P]@ P0Ii CI20naLj@O0pOgd`ne:\ )"9#IENDB`Ext/Images_Client_16/C51_Decrypted.png0000664000000000000000000000171410133443170016367 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<^IDATxb? 񝑛=@P^^I;;4ۗs9r 0QQХ6&_|3~^^,ii޿"ka ,`aiiY?â>pޝ}}+Xs988l@ %v[wlݻ.~ڝRXpLIQY]];ϟ? 3  az#4oJ><}5? b92|pOJZNUșNDx 0L,ٙ102q} qJ=@ ݮj`??S6aaca^Ơ]EIyn%lfH÷o | |ae` T!# 3J؀e7??1\r!ï Jxll0  ~20| =0F33y@緾30<h(01b0a`p#`! Xੁ+>\ 4MQ#N pِD @/@Ц_򚸁't:;#&HB QcX88!@o0!h;6 PfkBFTv' 6W8(JR.`6IENDB`Ext/Images_Client_16/C22_ASCII.png0000664000000000000000000000106010130001224015247 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb:a### q޽[ZZ aǎ?_0+W?@,@@&D0 S}vKKK+׀ 3033 1K@BWWW%%%_~-0L͹s^xv@LA6W o޼[xl"{{{?Y16  ]9D;vӧ ,,,`9bB+ >@1 }t Ąl6/{ɓ Ϟ=G#@ pqq1{= @`6spp00@w `Fa@NIoddl ?@܉RRRi@yVPCX^| 2/IENDB`Ext/Images_Client_16/C39_History.png0000664000000000000000000000221610133443064016113 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxA) F!%\%= f+`J/0o_?1_V 2r{ɓ[oˁ<@ ! @ʤ8Po_1XH3+,Ƿ~`з{ٛǟ02} foNII|,~3HJ3HJ1 2HI3003c`fG^F _@,,&]B,<վ3k12;;ХEDDd8s-w8(1>|ӧ/ LL 0 @W02q22J``bJA<G<% *"#**% J3A +/-55-"" !  ?#;?0daaG#u0ܖc02b+o~ ?@볠 77P,Qs#seexX;''. ? oo~ȩ a9 H!{ GO_cok&߁^q%̺pm%:0/=}+_h2{{ yx}7߿pןrVAj8-    _ /B|{ϰ&YVYi!/>1?6byMȁ!S  {Kf`Ҝl 8$XLD9gx\xzB 0D;|f֌&IENDB`Ext/Images_Client_16/C60_KFM_Home.png0000664000000000000000000000204710133316700016027 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% Á0)'g`?̟3g` >νO&bc48ÿle`Ie Բf` @Ľ n\0| oc?#PǛ_|%xgr  f-6e.mfl"Vj J< ?c7 @/0mgav+ # _D? =&2I3Z10pr30?W?)6V̺g}?@LL?AQZ[E狟 _?× 1ff$#f5 ARP2   % #rA+  ? 70 :' $nɚo,fv4? o  2lMc`b(x @LN _ 7_x `/ 7 0Ҥy1ĉ>a`baB h+#+ VNw y3s00 ARM/mF1pbߟ|Y50y K.6Nq`6>pd"W`9 XvO.MtWfqQ0``2@<@\ d{(Ñ]{|22pp0{E&_suSH[ ~AZR-=4## bҿ?~z̹#n_`@1((H:s١Czvw 2|<<<˗o?}ԥ+t7o>}͛w,,/^g.(033 n_x7/f PJϛ7 _x[Gn G o LL nfPWW1-ZŒ _?`b/;#t&"Å ._>0Ǐ':tƻw4z?0 )MYIENDB`Ext/Images_Client_16/C46_Help.png0000664000000000000000000000224310133443074015341 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<5IDATxbdНd`ft̑?û7_?2`[S(^ 00W gX_>xrק/rn3f9Y!>* ߾ex P b`daefQVz7o103AG  loIH>4[>* 8' %-A6AF0\:13$  [C1<<RA j+1% 3& kETZK^2h'# dx7'wU1w_0|, ?CDH Xx^~p 69!Fdggi, !0o#;< ,\lA1 ,cH _f`/wl2y/PO` L@@18˯ L 10^jZp#ÝG_3o`Pٯׯӗw}zpAZ 䀊~mao),LL!' :_ĸ2`à`J@~8߸y߯UA EF$ Z G?}3%~n5> !3FNFnƷd~oF5@12A2$?gf3(}׫7~x3caK̢ZtIENDB`Ext/Images_Client_16/C53_Apply.png0000664000000000000000000000156310133445210015532 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% qp @~-:,\Nf6Z:xձ՘0ڏr$@;A]YjW+?"WE11vЛ_(sJ  % 3㜟좥б<ñ26_S'UNMǘF\|y]3b`@L|ܟ} VONk`X4uj$Ck >g=bzvL 1@+kF.u10ϕWeWjAH;8CK ۶\)A0dqIJ e"* avW:J"3]A0!3W0<S6.*#Y  A/"[/'0$M  YHC/Y~Uaga'.S&W3x ;?>93\˯\1 %0bb> GW1~Y y' @jF(ef`bdCmyLo, #Hiv0P!3#IENDB`Ext/Images_Client_16/C41_VectorGfx.png0000664000000000000000000000155310127777326016373 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb:aA Ȁ[ZZ aǎ?c~_~'X? TfmreV>>%{{?~`bbK9^ii13AX=i Ϗg}4 ïӧ00 1  `@}m2'O2&T$ tQ3Hx{3/ @~_ dAA @/4@1|*䷵e`WWg*&}; P\`L@ll \F ..>1z`5s1\ ¯͘ #+u g,0]-ׇA  E߿ ~ 450 YZ2up``d`  dO}}0ll ߁ 궕WWna ,DiF fJ03ܾvA=rr UU0002_k.`4D\Ey ߁y wA`Z`j dsrr2@;wo`L%kP43|?> ҀXFH6gyO0-|>IENDB`Ext/Images_Client_16/C50_Folder_Tar.png0000664000000000000000000000154110133523764016472 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd```bpcC@15@@y' b(fbFdd8;ݷ%2+Tx- W8GA؀W_d`Xx P P_1  /?A4hz /b`db`bafxE87P ,bge{0 Ǡll! >=;pc*×iq >C~Aڝ }+a !.`@y4 ؀_ ~cF&F.>aPw` j|U6Wp؀7 SAH0Z^}|^a~4o0!  h`h@00]TD\؀O@XY@ -c`zh~\~#bw !aHFAT>mZ&>?L?p: J.pg//#*r }pl+v@}Kx@2bP2 t2set`}tއ?T d;0 6^A" B (]@ ml ._iIENDB`Ext/Images_Client_16/C32_FSView.png0000664000000000000000000000162410133310424015601 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<&IDATxb?% X@Dl:// ~@?f6ߟ>2Z@`- Du~ /P~T` <{/Fa/ ?|f`b }Ʈ$1ITxg_? YXDM`5y/?2(L ! @20.c`drGahAD*5vx)08.B)p*&YwWF|'~)@,/8?|Ó c/HO5?ß JPg^w@Y_`l_`d`7pGouJ @ 0"w?@w221$  `ÕgTD,<o3av@A ?^~O_e(P=Pfz X0(11  g< _ %i~1pfP/˿_ Nc`cdj UbV`d.=eg8 |c 2i20j1}'>`cGQwXb`x'   ҆, 31{g0\yK?3 '{?z`  G fe`fG!^V^}pgd`b32 |(l 7L~ փL/#W>XYy8Medo0AAh*3Û^~5 pcx;ç/^ ,l b;e@20 '<:&}egxë/L /0|| ?Āח 6`͔څ\ L0o 3}%pób L|  Ͽ2ܽs  p^`ddcb/5w̓3pU pL, @?3}7rc}w[Azb ÷_,8lY?׷~9 =@ `*LwtIENDB`Ext/Images_Client_16/C30_Konsole.png0000664000000000000000000000170010132777576016071 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<RIDATxb >?101110221f`` #77'k7wo߾h X`H3.NNsS}^yYTbӌϞa`ecf; mA e/ï_?TXXp88@@DVl[B,$YkZE)HA f1'Dk R:xbaeae#gOjkkrsΞ=Pjd9bbaee=/;w2:۷ ?A ` YXAPP bef a`i <&fp 2@14}ܹ oN^f Ûv͐0qD... `C@119l@ׯ^2$3~h++Y0  `(2Սl/tgf{?͠f30 3 ;+Ï=z @6͚ @?@v@,@?00vI `1m4Y&`Hg` L ` $bafafdUSex7Pf?2|Ѐ_@0B8/@s3571a`,##RPr&=`3oPJe w0p;X([B,c!/0Lx/_`+@1Hڨ T@&@5A,Pc8; *zݨIENDB`Ext/Images_Client_16/C11_Camera.png0000664000000000000000000000160610127241026015627 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% (A99ig :6 #ALL; .   ~|hIJJMVVA@YY?ɰO_2\zAGWAXZ&9b`cTAF;*B:)% ~̠`a'P6@/ b ,??@L @?~ d _3?p+ >*be``+FXR &&&ffV02ٳa ΀ @ 4%^r8ttL,~ 4 ubA<~00cpsuf.Nn?]r3@ 9 tçO_|gec'P)(Y?1&vvNK ` \` _y_h/0@Q )6rO~tvv/~1Lp@Wfx>ׯ~\??00`A ߿wF`3]L,̠Xc˿. FJ3@é "IENDB`Ext/Images_Client_16/C12_IRKickFlash.png0000664000000000000000000000212410133443536016535 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb,,e`OF,,o?oas LL 30L/f""h0#+?Ϲ_q2P]/P H o P")h3)/k @I |Y ti'#9b:EdjߙEEO2Y333+߿? e|V -]߿}hq&@ :2 )7 K{/G4>@=*@]u4@A1 6 S t..UGG:GPfgZ|ޗOO5jǎܿ%<&vv;`,D @11}d6 Gf.. W/?.\$c#P ?@9`ذ311}db5@ӯݻr9`4``/vv6FPzc`Z &<P?ai o7 3 033?P(ï_>|x_ocecub?OA gf Lr;Lb$@L@[IY)\ @z 2@dsrq10|Lo~ tybR`~5>ΰaj!!9FFvS[S}B]^b`&[_~x'N0pj*)1( h3gyϫWL Xf: yo:)0|4ԁ)QA*Ṕj^@LHFƿ|a`&ه>|y`x lA jrjIENDB`Ext/Images_Client_16/C20_Misc.png0000664000000000000000000000202110125245344015327 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% XJK; f100+rrR8e55i+;x~GbIŮ55dcc>~|]RA##T%a* rrꊞ*< L >ccc)w X~Ġ1p -FF`^GG6>>N70^ׯ&߿4$$$W mãG}:ADAZZAHt!!aǏoܸ| @A @3,[wihY\#'' 6`ݺ_ϟg & ر**2.]:=a߾ˁ1.!!Y ӇoY޽{k/_]AFFMCC_'$$AO߿c^F ,-YLÇ>b>u7o^~5+_JIIs XZZ)(H1/2,Z(@xx?VPPa`aaPY hjwA\\AJJ(W _5W qq `%++.Gϟ89ف)ܹ8q`ӧ˯_?,X0@\moQAQQ 8gP`FP͛gW^jy X@ĭ[WWp缼ڥrr߿bsP>0a2<{f2@0 ܹss %(qrr1̜9=z/F=ã  ,-mqssCX=;&cg+IENDB`Ext/Images_Client_16/C27_NFS_Unmount.png0000664000000000000000000000177610127240424016632 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb Nb៣' XXfa|3C];/_ELLLOKKYXYؘ888޾;]޽{@,,J< ?~`LH63  & AAQ} b ,,@_ ?cbdR* NNn-..߿;Ab3 # 4@ XE5LL4~'fK l}gegPUUbaa EEYU--߁ v? r߿ /00ՕYxyLERRT ?BL(ـ.dv'':&@pq۷o@5Hd(b P??@1rqq-8@d *?7 oY˷& 4GnY>} ؿ@W0t>#Ï߿^x;_ F33 c'@_9% !O۷u vV?LLLll,?q^bdc,fd.W \%)um_^|o`hÇw,'O_ A LLI//-./4(4 R +nnix >~|rȱ>c?ט90ܻaČ7?{tD bi`& _|ѻw10Ȱ1 3<@W@ ',f k0#IENDB`Ext/Images_Client_16/C37_KPercentage.png0000664000000000000000000000212310125245344016637 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% L3i->}aSy_xqť# Ne2-PPNëצR(P -{c ~S/'xom Rq/>꿤K@@ X B%$3y tCahq &韉.6J_!×;GD̢lc̙ϰ} "b^?5\yu뎵.] @0?3xx8|< jgln<v ~}ax 20ĉ`b``fddc0M: Xph000EpWٶ, bb"`Hin s#@74UӳOK4}qҜ AS#@3=̔_` "]X&A5) " ْCXCk+ '~{i-nVظy^\p!XADj0P5bO}|7_ee~| "&-y  "JX0T@@N ӵ/>2+  ?o2|#q?۽Wz˪ @ WkWCo2<~ɂZ7#.e)_E0 @L, ?15 odXqÍ_V`aX|_OjH## 0 >=vы_~|g`ebc?bf>!IIMk/@,LLykי 30303;0csp02L 0Eꕿmaf D Y۳@.a>IENDB`Ext/Images_Client_16/C05_Edu_Languages.png0000664000000000000000000000205410131211522017134 0ustar rootrootPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbgvNo_~3| /~e8: R¢?}'w:ba^Z8ޜMuuIA"@X54[^Zy" X.>Բ*U#+VO ni¬BBMF@&D{rݧ_@, q O2Ife`'=sՏN|a )tVϽc?bR7e420beqy /Г˰gA   Ы ӌe ?ڧŭ#mg0ܸq;A} |bKCb t++û+6b+G < LL ?|goO \ L,\n@ſ ^3p0s1~g:~  s;>Q2ee` Z0aӗo v˟  F`J &( (çWnΚ''xn@12/.d^fU&V&Pcߟ_~Q`~bJIENDB`Ext/Images_Client_16/C04_Klipper.png0000664000000000000000000000133312666316276016070 0ustar rootrootPNG  IHDRaIDAT8˥Mhy3$IW%V-XqV\<Mœz DYDî=qY+GU55h6|cf߃ԋxOSJ=2 true Ext/KeePassMsi/0000775000000000000000000000000012606740432012326 5ustar rootrootExt/KeePassMsi/KeePassMsi.vdproj0000664000000000000000000014160512670011130015552 0ustar rootroot"DeployProject" { "VSVersion" = "3:800" "ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" "IsWebType" = "8:FALSE" "ProjectName" = "8:KeePassMsi" "LanguageId" = "3:1033" "CodePage" = "3:1252" "UILanguageId" = "3:1033" "SccProjectName" = "8:" "SccLocalPath" = "8:" "SccAuxPath" = "8:" "SccProvider" = "8:" "Hierarchy" { "Entry" { "MsmKey" = "8:_0B55F2ABEF9A41A9ABAD006DCEA05841" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_22BA2527C1AC43E5B61F88AA217DF2E2" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_2A0C1DA9803A47F5842BC63F7CC0FEBC" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_3CC719213A464E2A86E5E00FB7ABF68E" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_46CD3E3687454981A64BCF41FB207030" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_71B4B6B66D7B48478B4C9A237064F77A" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_81BBF30CE4CC438194FC340A84A065C1" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_838987B3C51D42C3C7B9BDA1339A5500" "OwnerKey" = "8:_8C05ADB649434D7892E36709EBDED4CC" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_8C05ADB649434D7892E36709EBDED4CC" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_990FF777EF5740B3B48CB2D0A3D147A3" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_9BCEB0D341714092A0374B47DA8238DD" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_A13624F7FFFD46FFA9EA3509BBB398FD" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_ABF4952D5353474AA85E1471C19D822F" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_B354F7D87A064AA0BBC71E3926639333" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_C34738027450488E935C153E9FD57296" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_C4F8814F844C43EE8C9F5B662182B11A" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_F99D264600A54E439A43BDD0AD42280C" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_838987B3C51D42C3C7B9BDA1339A5500" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_C4F8814F844C43EE8C9F5B662182B11A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_8C05ADB649434D7892E36709EBDED4CC" "MsmSig" = "8:_UNDEFINED" } } "Configurations" { "Debug" { "DisplayName" = "8:Debug" "IsDebugOnly" = "11:TRUE" "IsReleaseOnly" = "11:FALSE" "OutputFilename" = "8:..\\..\\Build\\KeePassMsi\\Debug\\KeePass.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" "Compression" = "3:3" "SignOutput" = "11:FALSE" "CertificateFile" = "8:" "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { "Enabled" = "11:TRUE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.2.0" { "Name" = "8:.NET Framework 2.0 (x86)" "ProductCode" = "8:Microsoft.Net.Framework.2.0" } "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" { "Name" = "8:Windows Installer 3.1" "ProductCode" = "8:Microsoft.Windows.Installer.3.1" } } } } "Release" { "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" "OutputFilename" = "8:..\\..\\Build\\KeePassMsi\\Release\\KeePass.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" "Compression" = "3:3" "SignOutput" = "11:FALSE" "CertificateFile" = "8:" "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { "Enabled" = "11:TRUE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.2.0" { "Name" = "8:.NET Framework 2.0 (x86)" "ProductCode" = "8:Microsoft.Net.Framework.2.0" } "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" { "Name" = "8:Windows Installer 3.1" "ProductCode" = "8:Microsoft.Windows.Installer.3.1" } } } } } "Deployable" { "CustomAction" { } "DefaultFeature" { "Name" = "8:DefaultFeature" "Title" = "8:" "Description" = "8:" } "ExternalPersistence" { "LaunchCondition" { "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_B360A87AC4E743ADA53B9FFAAF1F5346" { "Name" = "8:.NET Framework" "Message" = "8:[VSDNETMSG]" "Version" = "8:3.5.30729" "AllowLaterVersions" = "11:FALSE" "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=76617" } } } "File" { "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0B55F2ABEF9A41A9ABAD006DCEA05841" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\XSL\\KDBX_DetailsLite.xsl" "TargetName" = "8:KDBX_DetailsLite.xsl" "Tag" = "8:" "Folder" = "8:_76A04227854C4619BBADCC3E5C2829AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_22BA2527C1AC43E5B61F88AA217DF2E2" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\KeePassLibC32.dll" "TargetName" = "8:KeePassLibC32.dll" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2A0C1DA9803A47F5842BC63F7CC0FEBC" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\KeePass.chm" "TargetName" = "8:KeePass.chm" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3CC719213A464E2A86E5E00FB7ABF68E" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\XSL\\TableHeader.gif" "TargetName" = "8:TableHeader.gif" "Tag" = "8:" "Folder" = "8:_76A04227854C4619BBADCC3E5C2829AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_46CD3E3687454981A64BCF41FB207030" { "SourcePath" = "8:..\\..\\KeePass\\KeePass.ico" "TargetName" = "8:KeePassIcon.ico" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_71B4B6B66D7B48478B4C9A237064F77A" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\KeePass.exe.config" "TargetName" = "8:KeePass.exe.config" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_81BBF30CE4CC438194FC340A84A065C1" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\XSL\\KDBX_Styles.css" "TargetName" = "8:KDBX_Styles.css" "Tag" = "8:" "Folder" = "8:_76A04227854C4619BBADCC3E5C2829AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_838987B3C51D42C3C7B9BDA1339A5500" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:KeePass, Version=2.32.0.23563, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL" "ScatterAssemblies" { "_838987B3C51D42C3C7B9BDA1339A5500" { "Name" = "8:KeePass.EXE" "Attributes" = "3:512" } } "SourcePath" = "8:KeePass.EXE" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:TRUE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8C05ADB649434D7892E36709EBDED4CC" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:KeePass.XmlSerializers, Version=2.32.0.23563, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL" "ScatterAssemblies" { "_8C05ADB649434D7892E36709EBDED4CC" { "Name" = "8:KeePass.XmlSerializers.dll" "Attributes" = "3:512" } } "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\KeePass.XmlSerializers.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_990FF777EF5740B3B48CB2D0A3D147A3" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\XSL\\KDBX_DetailsFull.xsl" "TargetName" = "8:KDBX_DetailsFull.xsl" "Tag" = "8:" "Folder" = "8:_76A04227854C4619BBADCC3E5C2829AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9BCEB0D341714092A0374B47DA8238DD" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\KeePassLibC64.dll" "TargetName" = "8:KeePassLibC64.dll" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A13624F7FFFD46FFA9EA3509BBB398FD" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\KeePass.config.xml" "TargetName" = "8:KeePass.config.xml" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ABF4952D5353474AA85E1471C19D822F" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\XSL\\KDBX_PasswordsOnly.xsl" "TargetName" = "8:KDBX_PasswordsOnly.xsl" "Tag" = "8:" "Folder" = "8:_76A04227854C4619BBADCC3E5C2829AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B354F7D87A064AA0BBC71E3926639333" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\ShInstUtil.exe" "TargetName" = "8:ShInstUtil.exe" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C34738027450488E935C153E9FD57296" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\License.txt" "TargetName" = "8:License.txt" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C4F8814F844C43EE8C9F5B662182B11A" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:KeePass, Version=2.32.0.23563, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL" "ScatterAssemblies" { "_C4F8814F844C43EE8C9F5B662182B11A" { "Name" = "8:KeePass.exe" "Attributes" = "3:512" } } "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\KeePass.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F99D264600A54E439A43BDD0AD42280C" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\XSL\\KDBX_Tabular.xsl" "TargetName" = "8:KDBX_Tabular.xsl" "Tag" = "8:" "Folder" = "8:_76A04227854C4619BBADCC3E5C2829AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } } "FileType" { "{5EB83D71-FA18-4901-BE56-DE22E13CC478}:_7BABCD00223047B785A71DFBB11D9B48" { "Name" = "8:KeePass Database" "Description" = "8:" "Extensions" = "8:kdbx" "MIME" = "8:" "Icon" = "8:_46CD3E3687454981A64BCF41FB207030" "IconIndex" = "3:0" "Command" { "Command" = "8:_C4F8814F844C43EE8C9F5B662182B11A" } "Verbs" { "{95C0C507-CBF0-42B8-B119-07219E384A4A}:_33B042E70FCE442EB6C1AD610694DFD5" { "Command" = "8:&Open" "Verb" = "8:open" "Arguments" = "8:\"%1\"" "Order" = "3:0" } } } } "Folder" { "{3C67513D-01DD-4637-8A68-80971EB9504F}:_02F929C52C1D41D29CB593270C6D1DC6" { "DefaultLocation" = "8:[ProgramFilesFolder]KeePass2x" "Name" = "8:#1925" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:TARGETDIR" "Folders" { "{9EF0B969-E518-4E46-987F-47570745A589}:_76A04227854C4619BBADCC3E5C2829AE" { "Name" = "8:XSL" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:_04DFBD4168EF4BFD8825BA692441B287" "Folders" { } } } } "{1525181F-901A-416C-8A58-119130FE478E}:_8285FAA6D5774714AB190FF7FA5604FB" { "Name" = "8:#1919" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:ProgramMenuFolder" "Folders" { "{9EF0B969-E518-4E46-987F-47570745A589}:_C5518630440D4460BD3C92160ACB1712" { "Name" = "8:KeePass" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:_71CA578B76DC40C6A8B7FBD159CDBC1A" "Folders" { } } } } "{1525181F-901A-416C-8A58-119130FE478E}:_CD17966DB7404B60877D38C1EE806E5B" { "Name" = "8:#1916" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:DesktopFolder" "Folders" { } } } "LaunchCondition" { } "Locator" { } "MsiBootstrapper" { "LangId" = "3:1033" "RequiresElevation" = "11:FALSE" } "Product" { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:KeePass 2.32" "ProductCode" = "8:{BD1AB076-83DF-464E-8DC4-952FE562CB6B}" "PackageCode" = "8:{DC035F5C-9144-4DAA-816F-775026BDD575}" "UpgradeCode" = "8:{F2F19898-4F86-4940-9BFA-426574CE03E1}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" "ProductVersion" = "8:2.32.0" "Manufacturer" = "8:Dominik Reichl" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:http://keepass.info/" "Title" = "8:KeePass Setup" "Subject" = "8:KeePass Password Safe" "ARPCONTACT" = "8:Dominik Reichl" "Keywords" = "8:" "ARPCOMMENTS" = "8:" "ARPURLINFOABOUT" = "8:http://keepass.info/" "ARPPRODUCTICON" = "8:_46CD3E3687454981A64BCF41FB207030" "ARPIconIndex" = "3:0" "SearchPath" = "8:" "UseSystemSearchPath" = "11:TRUE" "TargetPlatform" = "3:0" "PreBuildEvent" = "8:" "PostBuildEvent" = "8:" "RunPostBuildEvent" = "3:0" } "Registry" { "HKLM" { "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_C5EBC4EA7F4A4F02BD195E1047CD2D03" { "Name" = "8:Software" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_8408784FC07F4908A396060A977864FA" { "Name" = "8:[Manufacturer]" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { } "Values" { } } } "Values" { } } } } "HKCU" { "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_262C9049A6B143369D448CE3C70D8EE5" { "Name" = "8:Software" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_22DFF8BEC1B745DF969ABE72FF0B968A" { "Name" = "8:[Manufacturer]" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { } "Values" { } } } "Values" { } } } } "HKCR" { "Keys" { } } "HKU" { "Keys" { } } "HKPU" { "Keys" { } } } "Sequences" { } "Shortcut" { "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_B9061F34EC304CA08E34DD695F741D2D" { "Name" = "8:KeePass User Manual" "Arguments" = "8:" "Description" = "8:" "ShowCmd" = "3:1" "IconIndex" = "3:0" "Transitive" = "11:FALSE" "Target" = "8:_2A0C1DA9803A47F5842BC63F7CC0FEBC" "Folder" = "8:_C5518630440D4460BD3C92160ACB1712" "WorkingFolder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Icon" = "8:" "Feature" = "8:" } "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_D4CD5274BA6C4E25937C7C422285FBCB" { "Name" = "8:KeePass" "Arguments" = "8:" "Description" = "8:" "ShowCmd" = "3:1" "IconIndex" = "3:0" "Transitive" = "11:FALSE" "Target" = "8:_C4F8814F844C43EE8C9F5B662182B11A" "Folder" = "8:_CD17966DB7404B60877D38C1EE806E5B" "WorkingFolder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Icon" = "8:_46CD3E3687454981A64BCF41FB207030" "Feature" = "8:" } "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_E64C38ED6AED4249B632955704092C33" { "Name" = "8:KeePass" "Arguments" = "8:" "Description" = "8:" "ShowCmd" = "3:1" "IconIndex" = "3:0" "Transitive" = "11:FALSE" "Target" = "8:_C4F8814F844C43EE8C9F5B662182B11A" "Folder" = "8:_C5518630440D4460BD3C92160ACB1712" "WorkingFolder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" "Icon" = "8:_46CD3E3687454981A64BCF41FB207030" "Feature" = "8:" } } "UserInterface" { "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_0AEBAAEF47704E8B9A01C6CB1E62FDBD" { "UseDynamicProperties" = "11:FALSE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdUserInterface.wim" } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_0CDFE41F4D01459286E7AFC52A7A9277" { "Name" = "8:#1900" "Sequence" = "3:1" "Attributes" = "3:1" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_5861FDDB998C4FD1B1873B4342542B84" { "Sequence" = "3:200" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdFolderDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "InstallAllUsersVisible" { "Name" = "8:InstallAllUsersVisible" "DisplayName" = "8:#1059" "Description" = "8:#1159" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7FC84AF39FDF4EC4BC98AB5AA8A2C381" { "Sequence" = "3:100" "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdWelcomeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" { "Name" = "8:CopyrightWarning" "DisplayName" = "8:#1002" "Description" = "8:#1102" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:KeePass: Copyright (C) 2003-2016 Dominik Reichl. The software is distributed under the terms of the GNU General Public License version 2 or later." "DefaultValue" = "8:#1202" "UsePlugInResources" = "11:TRUE" } "Welcome" { "Name" = "8:Welcome" "DisplayName" = "8:#1003" "Description" = "8:#1103" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1203" "DefaultValue" = "8:#1203" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E3C24FFA9AD74248A8825644371FB17D" { "Sequence" = "3:300" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdConfirmDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_1F185A5B22D443A8A99D2A777A370EF7" { "Name" = "8:#1902" "Sequence" = "3:1" "Attributes" = "3:3" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D035303469A14DEB8F3431B84D01CC88" { "Sequence" = "3:100" "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdFinishedDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "UpdateText" { "Name" = "8:UpdateText" "DisplayName" = "8:#1058" "Description" = "8:#1158" "Type" = "3:15" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1258" "DefaultValue" = "8:#1258" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_5BB2AB842E494718822EA43B48741CFF" { "Name" = "8:#1900" "Sequence" = "3:2" "Attributes" = "3:1" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_267559472A6540C0ABEB216DE61BC2ED" { "Sequence" = "3:100" "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" { "Name" = "8:CopyrightWarning" "DisplayName" = "8:#1002" "Description" = "8:#1102" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:KeePass: Copyright (C) 2003-2016 Dominik Reichl. The software is distributed under the terms of the GNU General Public License version 2 or later." "DefaultValue" = "8:#1202" "UsePlugInResources" = "11:TRUE" } "Welcome" { "Name" = "8:Welcome" "DisplayName" = "8:#1003" "Description" = "8:#1103" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1203" "DefaultValue" = "8:#1203" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_60D4F895DECE471F8ED4CDF61AA25B54" { "Sequence" = "3:300" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_EDDAA1C6104A4A66917AC39A88839596" { "Sequence" = "3:200" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminFolderDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_614D264D47264F6DBD8EB6EA348B4547" { "Name" = "8:#1901" "Sequence" = "3:1" "Attributes" = "3:2" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_0F1ACBA89BC94B0C976878701159E964" { "Sequence" = "3:100" "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdProgressDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "ShowProgress" { "Name" = "8:ShowProgress" "DisplayName" = "8:#1009" "Description" = "8:#1109" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_7FB322B6256147D2948431F3FC326234" { "Name" = "8:#1901" "Sequence" = "3:2" "Attributes" = "3:2" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_92F56F1C382B496EB552FC1054921EA6" { "Sequence" = "3:100" "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminProgressDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "ShowProgress" { "Name" = "8:ShowProgress" "DisplayName" = "8:#1009" "Description" = "8:#1109" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_8033517407B24C178237C0535336BD6A" { "UseDynamicProperties" = "11:FALSE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdBasicDialogs.wim" } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_867192A49F194B79BD5113B27E970F8F" { "Name" = "8:#1902" "Sequence" = "3:2" "Attributes" = "3:3" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_07EF6E21553142618A6718FD92103A1C" { "Sequence" = "3:100" "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } } "MergeModule" { } "ProjectOutput" { } } } Ext/KeePassMsi/KeePassMsi.sln0000664000000000000000000000155511062233362015050 0ustar rootroot Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "KeePassMsi", "KeePassMsi.vdproj", "{C4135368-4A84-4924-B5CE-82B18FAADFD4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Default = Debug|Default Release|Default = Release|Default EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C4135368-4A84-4924-B5CE-82B18FAADFD4}.Debug|Default.ActiveCfg = Debug {C4135368-4A84-4924-B5CE-82B18FAADFD4}.Debug|Default.Build.0 = Debug {C4135368-4A84-4924-B5CE-82B18FAADFD4}.Release|Default.ActiveCfg = Release {C4135368-4A84-4924-B5CE-82B18FAADFD4}.Release|Default.Build.0 = Release EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal Ext/Images_App_HighRes/0000775000000000000000000000000012606740432013740 5ustar rootrootExt/Images_App_HighRes/Images/0000775000000000000000000000000012666315216015151 5ustar rootrootExt/Images_App_HighRes/Images/B48x48_FontUnderline.png0000664000000000000000000000577512505265650021430 0ustar rootrootPNG  IHDR00WbKGD IDAThYi랞Y݀,``eT+wUHTh|O>J,xE`awwE@cevgvgχ9vBR7޿贈/ x7mAX ee-KY'z <(|3n KP3y22P,$D`=]!fȑJq9>zn}i-ۇW(͛??رc{֚L?"\C! a@#'>OvF""_zDȽYhEj7T\%DZH@p3;! @>pws7DcƢ̊3۶zݼi]@…NJE\( Rq"@Qޕ%U'qJ͝7!G6onfɆm  15"PVIODdm&4"mCF"uN2\]] `V$.M(0\ *Yx 9 (0*ẅ&Dd&%8t6eHwϸ.?O[ ](~0"O6%"@Zu] t7׮^ό~I%ya ! *یgbߞU@R> Rji ] KHTb@X`&Vb1455(OɭHjk6PI_kjj96, m%?@t|0"BIP cG]kmv?AFS6 ԇԈg|/Bk 朸8v慎Rʷ P;U QYHQj \l>8V\uCIx~<0ÍBR[AKs ֬Yߴ@G3_ B\uϜG@u;/a0M[WF* o&aXv@/l( DE}ض{:;1udbxf'8NQ^5k QGY$O׃uR`my "B9|chjl=e% p17MuuuD"chofҥ7@eYWDxsDpA'ى/ّjАn1/s04x-TTT`3&H$Vt ^u bBQs]:* T({՟zt\#!Nc׮H"b1iҤAkk+ {L&6|m[ap=+`{ĝRi"dz 8n_s{DB[Džjmxuoi۶p]_yˣh=͟;}E#QFFO~4Ғq9y#{>~tgdqJ]үݰ(Vfm;o'"]f_ RV "~OnKWW=ڥe+Wdo"&(;y}u\EꪪM0 *q>a[*0[jq3vwgw{Gg{ݽɿ>0s,"vScZJ VO|xZ:.'bE `a=1X`,C aр,Vha(1)0H"xS \E*RU^|;+`S7٧ vY< 3zL{fvvVs]~;o=r?`.0]~qWKꁇæ Gߑ07R?{6:P,HΉw.r@Em]dPPJm{ SweA1@a fr@o-o-!DwǏcKhb F$A8[#'6$ȼ)zر:ԉ܂)^^FDT iLQ*ƞ{ƚbZ".Oy񪃉8qj9"Oyex-$֮Yby1 to,^z$ Q)'Rx?axhgKqH\T"JyVkLf;w"w'NtA qa7[{@y/#}:f"<9$&:0lX:RhL+r\8IЄy8oQ.uh_)?.f_& uk=/fAoLӬAa4E)Z*EJ'f2 λ{V2Yea̙jǑfKzPL eC ZF^ MMhko(fdM=ƨeYHjtd*Py&L76]T mh؅|A(ca``0ƬWR}V{MNPfX>D x琰8l8v  3 DT*+/\ D\2FQxx`ohnˋ:ǽdXR`Yk E1")AgLo#A΄5 m8s_5J~bL޴U"0}ۋ0 s:`IuWeF+l OFccc HR0 y]G8~>8 ÀRz]adt"Q!$=1jٶ0뮇 uh~Mt^Lе572IS"D"?udv#&"A'BUB2ĉ'3::d#B0> |>tOQ8p08v8<al,X8rUM|P 7os8zh\%3j߽ѱqyg71̘>s.ŋ*lR>tw@DyB>V*Oa(pW>DhGhlhUW@aO!34]^EM}P" pb(Rgr (o+@(5 >iGi~u12ETOEٶ5kPJϟ#)쯘Y*ϫtUt"uER8aW3Tؾm %%)U̖Hw9@/u?WPևċ[R peW^unӆaf3ٛ͟犈ֆw^7\}ͪќ-p?;vEK.X05 r]*UD Zk 9z>t=2/K4guVu/Y^_g=E =\7IsJSfiӧyv?g8tŪ/L^Qwηo쌦Ƶ-3g^4cs ðz)1QUJhAo\%r'??x`fOoy~ς ol6F\Ic&Ɔ#]'o(~s5VœO@ `1b`@ C DU@L L R.@)rȁ"G9w /]O<㭖Ӱp~ gFF$_Po/֭izvS\kAeH%dҲLSZ TBke*" " h)<ҋx]qEauf:v\.XRk"n}ngWH&u{ӧT3jphD*7^P7\3+Y J(P3D ED 0HҊRRVlKp]y9m|ťKcbi>ۿ9\fC2IENDB`Ext/Images_App_HighRes/Images/B48x48_Transparent.png0000664000000000000000000000541712504546224021144 0ustar rootrootPNG  IHDR00WgAMA a ;iCCPPhotoshop ICC profileHwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~T/ cHRMz&u0`:pQ<bKGDAIDATh 0B$swc]5)ovIENDB`Ext/Images_App_HighRes/Images/B48x48_FontStrikeout.png0000664000000000000000000000607412505265762021471 0ustar rootrootPNG  IHDR00WbKGD IDAThY{dD EښV1LӴ66)PJi,* ,,wܙs<.`/̝93ssAԯlX /!y<`?lX_R@'qxOn{/Yi Y8Hx]UZOʎqtwuὃI;/mXiͯ%~ذn|֚tD 0CcN̞`E#}2CkD""[_' kρZukH!۶H@k3C Aa::sH7DU5G+綐zܰn|_rAqER,{J0OE )_8>o\(H¢Y4P0<_=&mr@DaZaYPD\TȘǜ(p ĀA]I#9Ĕ+\`h$.eM\ 2x*Bͩ@`D\13" ) lЗ ">]9c>8Ӷ\l ](0"'MQğ[`8_xg֦X`Вϳ@(% A8ɵF C@^yeN:-<빀 c0֋Q2AB Ku)4Mj @@[[[h+xq/A.8LD1 ܇܈ ̌'NZ9cD";bE.!n)r4 + RZW_C"ʕq뢽q?0 TbGFǁ$Iy睸yWbfA0%xAi<>s@ |M$*+0c Wcll,|ihiii|(Pثm2%X4], ؀x<G;¶bگ x6 SyGmja0 5:::`Y Ģ%HTishkii.t<2r&fpp$hCmp7"iHR!޽p 7 Y]]a ϧ#3lpƃJ@DطzVb9P=<zdaW|7DZsG3"s_,&2@(V60TnD#Q,vaN .=Yنt ;F8/L{;\tu91MnE4J($%/Î=;;ozzø(7̈qGô>xZd2VR)%E}~|l8{{~ X;c4D,Y30uԢ&"| z{zADh݊0cܹp\MM"BD,'De"o_e Ɣ)SJ pD7z{!"={.DRX'`[X.t".^X&cު8Ji7.\h*584)ύH wuX˶PSE| X{N;," ) J)vAiڀ3AAU뤝-Q"k4rxEr=. .ΎX28nwղ PYMF`T=kBb {R iugMC}O1N7sLWDȥ}o_xso'g̞=5#r] .tD&zδ֒m9z#?3iŪ;\1iM7.YTn9_~9*Zʮ\e`uM̙38AԘ=q\5idM '+DGȷyuՕk'/0hfS.|oSh)uW)CVs*eq}qkp``翷Ϟ=-kjєɠhMueȱ>|}ͪhĜE@5 `1b`@ C D@L L R.@)rȁ"G9w`زǞmk0gU44<2 Vft2\3+Y J(*%D J+JJ)ZiFX3d<>?{L^n+x$7` ?| hdA.+0Ȕm.\g㴶w 4<o}'׹1mKuGMJ'<) &_V)7;:rIS3{G| ?mbi/ N["/7+^?㙿vg ?[o65{岯P-5ͿKglo8Ǘw!G17'W׳܃/;3n3C Eq!1STGx z{æWÑF8A?E" ^ZnWӚ߸;8IU5IENDB`Ext/Images_App_HighRes/Images/B48x48_KeePass.png0000664000000000000000000000622612666314742020204 0ustar rootrootPNG  IHDR00W ]IDAThŚ{tT?L&$BH3$^! ^ ڪȅ>kUk]ޮzjջ\UB[Eu`xA^L2o?朓dBgΜ3}w~|K &@dXF(p | qr{uڌ< ŨQe0`@>AN5a؏A`9+z@K[,++_bmP8*v%6%6%oߞ|ZJK:Hx^j# Ð3o7I$%@[T-Q9Ʀ46G%*-A%@켩%*k}"7M0\qL6e!+++YL8 !8 k(AuAb5a6!޶~ݻvmn,YK/La D@oՄB{:9xPgeb_Pywr\ ֋/dggr\s5ƃmB8"q@;@ڱ=wp)@vv.#'R2c(%LFS hnn< p! \F#BM'V#e97JEnv{qbN%apa=`{;p@YVo(}G}V;?p`/?{vnWaԘ+0&f/vTwq^ia-Ym΢vdds|Ԓ1ʗ QXb[̎W`@YYWNq9A勊z^i!-CG9N%$5 SQ<o+T̙36v-xɒd=xZ/Kp!?ٶ$ h4m7-,4hɅWS;x vD`7GkM $++#,v%f|+%$h8@1c VV ˨QeaW\.7L}hǎԴLi.W_ iQR)P4Dp{ij:XdsA 8V-%yw޴,u=5}IO3wW,1Sr7J]RUsot;s-mT7;eiWZv~i {I7plL/ xOkR¸kef;H]ty;/(?L.c:"G`=aDu fD;;@UHr'î^Kcb3 4x<1`ũ9_De-xo{4iY *wgz4#eĸ$4dm&ӊBRi :9xf;dT8zw[%ڴ*LEJA((]+-|k=T\9 bO4,3V29{OǙN YWJU쐭!h}of]_A?߻#[בQ/u2+іθ89rO;4ߍݻ@o+P>fXn cU'ة#{طkC0nm XЃeüiw8e7VX]6HI{oӀ։6t=- !;D{g=S ~ v'LTŹ/]N/Ǧ 1J:Oo#xVZ ʢ+_^x`}(.s[- fW ,~o'_dz*2L2RMζnʲ'ط.уN &i…d9pTO tS\x6NdX'ˁG_7mc+)*Lq[)BABmB%" j)Fqvle5-̸+"~n&bhCSp{xӺpn_uty|ov%؉šw?yGoHꡒ:=acGr`/<͋/Cm?ou ߹ %V0 3a7XhiZcx[(#g;ղϲqg;p受lmQ<[g3)3t9sl}{q >?/@ Zɹ;[FFF2 rr˰>5pIg|i> pzIENDB`Ext/Images_App_HighRes/Images/B48x48_FontBold.png0000664000000000000000000000570312505265344020352 0ustar rootrootPNG  IHDR00WbKGD xIDAThYiUνf&"B KJI hX BTK?%DD ,'Բ ?  ,&$ZALLfyKws~,aUu}Ϲ;>Ï>Xl%_m L?8` 'V,[Z~Lqql /Yx Yr*'w{Ug$~/hyEwmGOX>|Xl%yl_;;;|ͷBkM~D@ Cab>!,X"$~ U48mqhrY1222e"u1ᶻaH_R""BHa0ˆ1LUsNׂ&r5iEoŲFX2 J)*E(E@yB|+X(@H icF3B&7ODX*apٳRE*"bֈ@eL'HI(LbDѽ 4FFGp)Ya^Z̝IT.UM(6\**UY\"PErG Ƕ!"uMKD)80` U]C"a0L_BSk߲? bMH<"9Vtz^qʩEI>nkxmHb,5V^;ľz;2nT [bQLjl^(%l߾E?,Exw<mO D >y8Hihٶ ,f ,[cܳSlA_P&녚"41ފ\kбm{0sL`i~jRvkO AFh`66nq`݉#l XpPJUR / Is8W[R0<|3fX݂/ϛ{v'af:dRZge/ąMXvr1fXb9UF8˲RZrx_/뮙-d\.(Oo|m"޺McEӧ#8QS%3p縲!kz>WX|`YRE& >}V" ڵgϚ8U.TD깭iqg3"Ao W_}Uj94t w}kO,zjկ<ѣxd~ C]A l%GQ6ņ.! "x˖h(J=aR Bj݋0,5I׍3òl Ao4@_sc Rq r~>? UjQ9 (EU7ioC͔Q/H5KI>3"=o"BD*/Fq,:ֻL>mTplTZ[`ޕp=Җe |YgQWgLy-z?w;NJPY5D9gqC܄)KKٳOcW>pfgʫ#G3܅_sWϛܓN: mٶsJSSTXB[^) iգ#m,oϞr|jzG3ϝ>seM仵-.D[wԀTj ð4xtGw ?9sqXuiSa,o3ew= GFpm7]:YtF,XKX4  4ZJ bR` H"BRd(PTtt`{Ӛ约cYgб1)yٶ [om;g}T[q=L98 ǥLɸmk[kQJ9Z+[DdAHvrU-m1"H` A`bTbK `׻u? ϝm5]~FGз7\yMۧ:zU_A23+ìٰ!$,"T"VHXiZ)b۶f<=r<SNgo?":?RD@IENDB`Ext/Images_App_HighRes/Nuvola/0000775000000000000000000000000012666315542015212 5ustar rootrootExt/Images_App_HighRes/Nuvola/B48x48_Folder_Txt.png0000664000000000000000000001262710126472514020753 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<)IDATxb?P0@FFF'ӭٳk>ף7o<ۯ@%bzdee[ZZ1|6/{ϟ?}8sҥw@( AyZ1Ϩq͔5u~Ç 7nЫ۷ozf/^p 3$gH<==UCBB/%%%rSO1ܾ}…oo߾y 3^p@% @Q5 jhhrRΠ nnϟp[n_~_y͉SNMjDHHH ,,D߿1}3w]޽;O?~珻߿cρ"@Q>7 gx0m jvUUUMm ,yX[[AOOW6_ :bt}yy1 djUb߿&&&L#5#@Y?6c@Ҡ;wn~ qU<娬 ߿ P1?R'0p0ա74!уW P=w7ՀA4AYE ,bؑ+8c` `P?G0Y`0@Go מ~gxO^|/8{QZ_)@O{3خbw?`*^{~)aSbdPgcfc7Ü.,+wiy:jj/7_0x ^bx? 12p0q1H r2(3Kp0\aS ~ XXdzG`Q}@\Tl(,؀ 8gmyqAI>ѷ~+177_2`~'3? ' ;?;/+70@퟿!Q[#<} *"/  $S`{S`{ DxCv<> O V?T/ `,7+WQ?%XQ/-`à* ) L;М~ $YX8^}/A Aۓ'?n  $88\|ZT@ hχ C]5X4եy|dPc: d8~!?<_PtB=?Qw`;@%cО?|woq-'>@P~~ 4 ( ,v`L/` L:l 5'Z5çS_x 1޻?_=l)@c؀2+7é9 e1yӛ/v`6 `Ԅlfax.͠,ʘ>P ,''+`4Xrd=T}0U]. @\ [^sǃq/WWbgr4P3!t<mp],nh,0/1"b?*7v..zõD ,DTe|ݠ@~}wpr9O@o`$b!qcP owbX88bP_Hi O0<yfd,.< /U؎N5Ɂi P~Hh ŝ6wf+dA_A߰8P="$,#7`iwkOaeee-7a%kBw_>pal(Sc/3ĕ00 eKa+]la3{>&~1]eW.,̇ `=)...~+4&Ocxќ۷|jǃCZ2{(d&lv@k;&91atUv A9i`m mGt`.BJz`;`ч V>޽+@!bׇo^4 ܹJoex!: V2vs@E %?p_/ sg3|aQWc I_e5l x' hЌ1.@积o} l1 t_,c< at!Wg?ԇ߾3xaf/?" sK`QM:!r1 j0y˟ 01?|vN>GP_ׯ5+6`ͅ 7t1{dPql" lmj`O`ɞKQճg~忐o@0>wml>gFf>/|@!ܞ=@thn,`\ Mn@U@?-`XTh ggx  8X9:/8PLs1;/1Sû3xtϡ}P1@??_V˝ml0 X{l"?t<#hT 30e*w0n` 10fal3 _3}z ,C`R`a`=,zXϮ1`{M.fN^`؏~}%rSdBwpeV .a@1`'z *2C 3M`xc>A~I̠P'#?A|g`{`,=l<, L X=x>ސ=А,.c?o/>&|9 P=ڃC};1XpFϷA{72Å3 -gX0pqS?hRc3gt1#,~}f`L=p+-i5U^XaN[c~ % T|wM< |0ma`x,.4`dx|t52N`/ 9ԌfS 8y <݁]vVA` , /]c*WfX{"e`fzLعga3` ꁟ0s_w!nl;>ij`,|8Oz2Po`72FQPN>X`bD"\ žOnegp=0#]Iѳ_h؞ۛ 1s3l{6^}Б߁ʚaD520%{t̸ GbF`Jcy ҋcbFȨ!Dѹ )ު rJ\ 6y9x8>/n p k3/OR`` H;l៨ αI&H=q#ïtO~}W_}k b~ t tpWh?A_H;T c I(Ą?e'{߻4L% ,ξ1@G?_^~g`~d3` đ?ZoPGDs(yb|;~ #6zn3<ïW L ? G1>@ q_+C#?8 X&BXZ݇/@, oH!zh80lX:*JIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Browser.png0000664000000000000000000001273510130460612020313 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<oIDATxb?P0@"0O2h303222qM*W ~c`se1](#, >U_cDx4eEYe$y%8XË_^'g{˿_mf`|#@~|J<pu1d(PvUaeP`>Aa5_10ŔY@[?#D9X83Hc{t1 3~ t40|(Fgzn/ycbxr!Âytz>FTa0uspOwRcdĠ#?`vpra:0F&/??3|:j>#/ $3Pߑ' 200k7-ax> .O~0vzsps,ͭ%AKß?`& F`j9X_}(W7 ٘?xp(:ÄM On^16O *ÌmQF7O B3( 2| v`fa6N^>2H,e`'O//"?3axf'g2<&u { J 4crdçW+L$_47&&n9!^a ~%gYr \ 쬜`?'w  fseJ`3L-2v^eafpt'Q`}W`fddT`fZ).6~` J2q3/?~?Q߁ILCe&7Ȇ߻2uP-TN}.",WMV2 gggZ ₦ | jp}pm_&@o?8dsׯ <" F KwU0:22Hd(T{GspxOIATĔK?#;A_=d?8%)0yq8ќ :<+`S/`_? ~1ڋ  ܆ <@a 4t(y0;ADa ރ L> _|(Tgx>ß_>|piۏcARTARD۷o o=!q_`7аv2L^~rg B̐,jv\|0?dxW^iŧ> Ïo/<+>1c>.-~yptז3J1d0K{PDSqe6ϟ^' y}3/MVw-no_]k"cHUcd`eF<01dacd3I k t0qUX _(ςc؇Va?phFדg>zlxG?(Z×O,ldU<<ɠi + @(s c z6`(J ]] '1hf1psK3(ě T jV0RGBޜ Ll=C<  ?<l[^f; *z ʦ@s"4 51q e`f*F`!~po9CZ?9!1q 3®AAc??2ܺ3Z3H vP^"xw->a``1kjơ 8IKIF`Wa`?J1 + +}'718[3&i~n^Q `+` Џ_|wP:/00@ܿ&J^)XdH 0dbD;\ j! j\afDy@CL<: ~C@U_B/~d0tV`R2py LbNJ* u| p6 a&}( %nà*np]{g1t V~3"ǫ/ay'   , N@, h&Ab4% ,%-yDx%"JBPXڱ3 v2/3ý~: bWϥy%p^(Ơl;CPXs2+I\(Y M$3ؙ}VFTyt * 9-?>1(0|p+`3X W.| `c /aiTΠ%k *'+$4+<Ab0>Ŋ 9O`,*``un~ l']gekĄ< Nw <:ܡ۵V#``b';~>('<ـ2 z)C@ I{=`_Ǡ#kV#̠g0PcQ=çX6lgx֡Yp+ G67 g8t6) rzqA,C+vAR2 Fr*0ee3<|JlOq,?;+ vxl\M6'ހl >10g?jB_ 6Ȩ3pn( eͅ&A0 N6* 'P}"P l1,\qG0zNPD Ą94g㧷wv/z!ɼAÅ 6(fb6$ Û5ہlS<̡OJyꤥ N NwؘG`z?`-S6X< ١4;tCJ')5K_j29 ë-BhE B,6IVW(E P i >3+8Ld}X3ɯ@;ƶ /xz^`4 pd7 LS:>_ח\S~_|/a(/֟A(TT 2p9 #c''&}jF 6 7ٶ2l{ X0p2q3hcf|f'~C3g~3# }k)D5IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Package_Development.png0000664000000000000000000000751710130240700022561 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ s)6Lϟ?5bcgcccaeeeddF}kLLW~~1Iz9 v:.CZZOZZANNDsssׯ^z _>G 4%D~ &.aic`ia "" e@G? 3#ï?~wǏ3\pݹsƍ~'&F@n r ?.rfaPQRb`gg?y o!/gXXY؀je$D<` ݋u_q@PWT%eаs3s.NG gϜb+33`YXXYXYgxǏ ׮^epǏם?~'@@˶3(33,÷o0Ic5#3 8X!4#= KKJ22(*(h"NNcǎ-J×/T&s+k՘X q1Á !޽y[`_@G30qP hi /90004ͬ5gPP2te-Tb>ãG~w= G>=:y̬<@OdzgϮbf| ⋬R|zN \\ ߾:pfbddx m?~0@! ʜO#M=lP]D|`/  ].pL0c p:fx,>_@ǃ~{ u?=B7TN@,D"?TUUa9XfɁAEU?>{%-#ɓ@-8?D-daa E:: ޾ax=_~ ǿAo ?ddPQef2TQqn  ^ 2MVV$×O9T#?f`Ewk3x aCFKg*tM  n.$hQVVfc:@πoHC%rb{X۲1|] n<]0i _=U4}S@n , b6d xPPR L߁',_gxzyC6m{)WIk] Orm1==jyyŖ6Y9ǏrpfabFϟ.^,shh02<| -|x5=aS .zP ZTROIHHebx-8'Ņ ?0|s ׮]{l=alJ3}|!X(o A%W a nf}M,WxJNɃ  ZsvO_?xxxI 0۷]z FɷnnxW7yY1 3O` 7 ,y|;m^i;թg4Tko[3og ) ʾ ^G?|!'.]瀭``q`Ih2؋3ϞegffgZz͘u7:Z#ӯ " ^R}~oO@ Ք?yd)ubw;3A18XXEvP !IL̓\o?t#DטU= {PK{iMU^99?/xq7usi4h@K Byʤ$֜ O8N͍ܗcrg?D}70Sf,  !drz$H@zhϏ?],cǯŸ n`ϐH/A^O=F |}<~| /?25'3X=U[J8\Z̄  z ~;ނGi`W |fX(0f1z13JJI'@gI?wW~s~k??3pA֏}1vG^~l z{}{ɕg /e-g`UҖ->COT_DM[ bo=13|{v /a /_^}u' H^æpKҋYv!)W0|y񙁝 l1`bf8LOO-d@ @˵/xĞwd5ëB LL ?g`a,71~p%+^c 4fxϟl 0| W Gp?_N=@T 3歪>AQ=ZB;?`'Ý7?yA@ ghx9YYx8ܙч~u߿>3hTt?4<մF@chyXXd}&F0cIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_KTouch.png0000664000000000000000000000660510132777146020103 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?PĂadd$$_1V\b@aDs g?g2<(AP Ղ_ZSVr+?6 PnՕ@@|Pb-@Q lb <\ ̿*/;7$ï@,?D=gdË/~UN/00edra?@Q> ׿_H kj`?FɼL L@֣y T 7~ B5212 _ex3H4b(.2(33׿"_~{ L_yw KL&`gd Xd]d(;qȲnQ Jόbet?_n{p\p2@?cb4/ ý}@H2|uƃ<N /~?`e ÏX~$3J030Hr3﵏π%#E H2{7'kރәH1|`^bVPV1g{.aq@QZe>ÅGYw>ZrigUu%^En& v43 ~.{}]@qr@ȍ9 BI[R(U883W[ O> @_ė_ O7ùɍo? ǁ!MDV[ R]u`1p;s g$+__ _Ϣ %6s /!qqj9lc"{gٷl͛}?$E 1p|x1g~;Äs}a烻?EEyzK)31gϭ߿uU۷o?@(1 &&5NH/P_%b:7e$Ï_x~e(j`1X?A1L'/×? 8lhV bҒ+p}ͰyVGBBA%@x@@@X@Xf&򏍍 Xފ1g`&6VvFaayy---9EU4D=\ {$(*ƖAb||@r͠GdW } u6?Dtjn96o}-uѸ#0`}Č!eb8 ? &b!?䑿3r2Æ _M?n߿xA3%`_'@x;w0<|\ 0~!F?~?| /_d8;HTj>@oݺpE<<< hq=/>+M P5/<{>Pfс Гw`M `!^ 4;гx`ŀ4-05?f`I߸GPC`R%+rٌ0O=?wٳ|=Q2Y؈cf~fPT Ba)0$9zEWnA L*LԀ =zpQPc @=2Qaaa/;M|0ǃ+(((o`'`ellr~cfI >|d0?s_23/@wۿO 4`3ŋ~ _B{տ t.@,i-##+ JD@#ZAhG5O8IʿDFB^Tldcx }^}d={ƥLEwhS5jE {҂[JJFUHH c,E3¡, djЃ} a ) (,t '>--- e/_٪`Ǡ~7I/l"<~tǥ@]f/|2@ԩ4Xd'ćQk6ׯR^A &bFq!H ϟmw1}j9"AXLLy~cK@-PF%%ep;,D;3ZqX D+AP5c,B H~nn>PWh0A"L`KA;㰞zH,pbkIp@2C# Ħ@DDhQńςf=0:.ץIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Exit.png0000664000000000000000000001025510133447112017577 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<?IDATxb?P0@ yА@ y 6ՌD6k w ~ס,P3_$A- XF@cCFa`E)3`&&v6_@ zխ+ S t;0Dd,utxT8EEW/_2|{ͭ[ /\yEo4G6r@I+T% cǠ g/~?{yN0ܺp? xAJ R= T=4o!i1T Q Ʌ#~`#c`O L@5, w Ϟd8m'O.M:< R< Tx]M7;66#khNraI(|ʠ-(  - @<j 3ˉ20zv@>vX ,B<ᖔdg0 |D@30=ND .Tab: @<` 1 ß {e@x03ATW+ow0HH@R 099XEC`RcPRy¡ ?|`` +/`V @X=HBHQF[2T NO``fW`ȳ!FD0yz2H7p#{ \\ ff 4ׯ Җ J@ݻlCɋ { 7as+@&3+ 0O|}L'0<: LF@OePdPwqa3Bt80%Jpl2ibx/~`@p(1ͭ+ )25qq3򟍁uWû{\]~)+O :׻wwph'! ʠ?m!Po V` S, >:?uVD p/P##0=~ %)*(@X .C VQ1c)Fa5_: `֭ A Gu~hVb)@ݜ 2b'4 Ik%- ,[ xHbz?y6]e@A ( *(g10M`@%j&F +] 2p\(L & 7mXEm&."4#U SඓM%W,͹71##XpC`' X}bbeT (5K~"&!&𠹉=0ÃB x/o0|y˗ >~c`b` ,=#8ro pyoϯ030J1sXx`_߿g``P]G( A1i/Tq2hL oXm!^1|aX, w|e\s`s+@J};8d84ImeW93:  􋃁Xfp1 t/f5ͽ{X>jqr16+w&P`` _ݲW LD  MRl> _f`y jgP{xy8brϙ3 AY&c#y2\< ~dfPfһ߾g8 ܿ m3[``H5c003`,._.`rb6᫜,P[TCbefe$I`1 J؁Iy0ܘ6&0ga:^AoGhJ- K'cbrtbR& g=)9r8@JАH.r؀I ԑ6?642ܸx.NN@A߾ۿ)-<@X=Ѕ92bgg2aPUQ`lBy iMܔÛĘ២"` $ fx VZAؒct i <@DyGvzbD6gRU ~x ߀n`sH|̠ XsԮL>eSYA靝Aa%m?1|'Ply Hx5&@Z]IZ\GAܞ-Ƿ>?JB!0y89x4Oc?3\&PxMЪJl R=r@v0D1hI1(K2>ЬCAMj0clـ-J-p7pQ F%Cy lZ(AcbT^DANHA!|R/ j<m`?p10'~XiC@H=cj3-,YX@ iYhP_Ph< ^ c@Q:GU@Ǭ(@X_ǿߊZ k @|$t't8ԗА'!!bBP IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_XMag.png0000664000000000000000000000730310131465444017530 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<UIDATxb?P0@ y 2(Mu`aa1egg/>|p˗/~'Z~?j;9򀟟=S27fab`aff7çO^xp7ou֙/|߿ <+ `a`'Û?~o301sp0p53c۷o[^|hWjD^^^s\\\lmmxp_^}d~30A5OmU!6C2]'~z27BCCt5~ɰ"á| <| Z L $ /~>é+{ gEO_3̞=ܹsShsJ<r;@􀻻SSS>0?/?9+$+ddU20p- VB e8{L`Fo*{F'@n :^z 721?`j`r$331!@ L]7zd5ï m޽[ ,U$'O@Vwy]m YdaWgd0sؿNt`T/&#Ű>NHnn|`f d@pvvQSS33ڳ| * `ǀ@9/?~7``g`d.p5ccsss `rx 0<ʚkgg(,p5/ovvF!`pCc'~?9̔|fx!(28=aZ+((hksÉ RR ?I'4Y';åodttti h$zˀ@(5ɇCHgn8 B yXbђT ,@$^e 4dT̕؁/ ܼLD%I!a7Z@eĀIJ @y@H@xh0~cfcd`Zv\~@ed`SMف42gUcx7????RFx Pe) 1&FHy+Q=63#&B@13@ ?Ó_jd̤Tl`T 97$#+k 9Լ`e$PY 1i? *韓T Z&8ʂ2#< adL} 3 g`3`&@(0żPKZ@ @ft@i_߀ _A<ڜ @(k3 3X4 mH1ً{ \ Ǐ5h/) v?|" md!70iqB0φʁ 6'4BA}*/ãǏR`!e @(!` g8Pe!Lu4F;4BcT@[O^|c$dr (=H?% ]~p3 3 ,iTg@M: oXL䑯@sn }ڵk?%]`s)PgR+2B`T~[9sO ?;,L@|Pb; ##p1w:؇c7R=@荧[ MM V`)+88-<ϼ LF( !P .[ 'ScǏ}%O۷dz/~ ˯K̨ˆƇfH3 Ga`AHXȑ# ?|x @koBK!9[իW[(l `xO Hx1ʈ|ù[^fgPdHHLdxۆB=de`x =@: am ?' >iFn1.G 8So@g~S ϯ6xàl~2TTa2bx R| #r X|bn2#z b O6/_x[6ɹ=` !!!+ LĽ~o_z sw%-_?_J~{jͳ{ "N20?,x8j$ "Z^޼yC_Qz yoSh%*?KW7z]URXC> 3h!E0o(4ɜ|Ow6WD:9}X^(怊*@K/hXȚl0ʊ_}2!1~`Y~w@O{= H@JVuFA=GygN`ӳ1lW!1?-`0WNx zfHG`Xrş: > [Pe`Pk2?xN [<@9d PO>X[9>5v4ABh<&' 'ÓV3$&wuPd =Ow>=w+t|MsKo0< {@ %>C'^s13|~ٻ idO5#@ycP~҆w>d8 /X@pO承 OӼ5×yɰ{@""A;`B/Ud}+ǃCH?zo:w+JS`,^n`>aELvvفFc@@,8ջ ^` D;nO2\y˷ ܜ R 8>QCC >n͟(C*رXedb`Je ~b03d5" pC+9A|p9^bE%ŀ&W J:@/$a b1*!< PG";2PïdCP5 XhlO6 ȜЋZ\ X"ـJ 4QbM/@,N6j% z&pz u$9R  Z&d4$Q;40sqHBdy" ֤ 8#&HAJ(H۱ՠĔ6(IB c@,ސd@B68ԑl31(@BIH6 b!y $Б?@|ix,  ?f/0'3GJrLBĂ+|v&3A  m0Ǡ8GG(.@=҉Dp0A\ZЋE\Ɇd?f>g Q!ـhYw1 a`2Ƞ&/;(q%,.\ l; nnN5i XU,@,|:< ցWɆpʺ~ 9`h2*e`d?@x=ni_GcYIN60-`J`& tO@W]uo@?3 D0@&`%|CiRŌ(?bdb0Tep3`R?Ăd ߁UPJ JHl1h>vMR"XC*d@_1 ?<riɠo\*pk)T@K6O+Dl= J&Jr $ &MQp]!P! ,^PhJ[HbCl@3CАg E76@f)_')~a8#'MҌz136vщ~U ҂ L2De@kjEE3 ~2\ݻ9 LtNffdg_^/ bk%h{ CIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_MessageBox_Critical.png0000664000000000000000000000716310133443722022544 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ yА@ y 6Ռ+|?O U.1 ʹhI w ,R uU^А;J<yq: 0S004p10?&|Ę@z7za]]>3YX~}pksq@ C/**Ԏe`ze؟{k׮y @@/`H14ZA x``Щa09Cxbk t~F 쒒 ~10ih0x,Y T3 6_,!l~=/p>NpJb>PZ  q&`LV駤0N4 b~0÷X-ePrrbd4| PMW%q)]ܿ={ M(*w?0Ax33ܾ_z^,+_ǏW66P`q+@r;tu~ 3; Lo '.uw:W1@v_2|r^ nln \еO7o23weSl@O|ld6gb&*I`e"7)8T^@D"/:9o^e9 p.õn0))h9#! `󥯑sw9C ?f _fx[_ xxn]p`lVb‘փ&66^^kW3lNK#~++BT`.:URLZPfd`ɬ;A'%@Dz30I2)Na/d󍁁/Ak3пq#d?_tKln Fl]eH+Ԁp `M g 1[W#8cgⰿ)8' !/9 ǯdIダF<[PS#8T l4TpԁX<<:OYr `G[@رR`''&F?L Jcq(#K6NqDl8 #.`.c!JFf&`tmh:l7:X`g'b" Vo?s&_`!j,`QR/ǏO]'m5<#`[0x==b$]DPvӧciaA=i 1GK'܁jG{ BDȣv!ٿ?8jX 8f[:j+>}`S^3B |DJ*A'aa#cD ˀu #Ak=o؇1c.7 q_d ybXI F000Kxck>4A6 ['@X-` pB.A'XD!=ty~>^˗30Xg+a*o'1<]70APVD@lŌ $av ضuF}R 2<i+1a6=&`q[as+@R{u<{؀IȂAtZ&`9W5f?};L2&G>~~`* _ W,P1l~ C@ 6btϟa5a 6a.8#= XtN~``zB6A@;AHe&`Mݻ ,P:.v;~/x 4nl6w}W_۰ //h R=$3q5iis)h ^p|J6@m[艙 T@<(͖̓ }S tI ,l bsӀ~ֵ͛oIH`)'/;;ÕU O`{@ - !.,Rg# ȎSCj 3;ׯ3?p$wplp̳s(9`%*A䝃C2lfa"&F#N>hhv xs d' *fbq9Pz6y R4=@C4=`+Kt20IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Laptop_Charge.png0000664000000000000000000001151710133447046021406 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ yА@DFfŢl 2^9UJ 23x3%@Q÷?Z @,tK0zeat2ۻ 'hrߣ$?(|ˏ '.gxa0V#W`LӧOSgΜ~^f&~ffVfaf 畖dd$@Op 28;;00~@I8F%#`Z eJb8Y00'0̬lo|s?4UMEY\\TY__WPKKQMMAXX ߿ [/  "GACktDT=*I`Vh!󃙙++@ܾ}_Z@qKNUUww&w&VfGG.3~yA^Sh?i-\pϿfb } pz`c; ǃ#(/]ǎ:rXҶm't1|>AH,h炖>Q `# |_:Y cdeb?Ñ@E6?`e& +3#g X<Կ;CО=O4c̲fbSXX76`A Lv3^hd <CpPCt.00pyP{A5Wff@3~B?/~xm=w(5>IPEu  I`X -CH-Vve&fvFFff~) +z]HHBE^b_/kxX 3'Z0ʵ n| ADD[09112E H2J~A `q 8_>}|+K~7 5%~Ukk'3O2K:}_ YX,Q{u`KC)I0|8y܄on @߿gqki3k1r3pj\H9ISߪ _ dy̛]xOфAy}]c#N2|9:A@OVjE+1 ?o֛Oa2Ymdx1(@ ,5@u_Y403iœ ~Kr1|SdŒ7 ?fxîw7z{o` ;64P^`;\w<r(6A '2gVi/d!]aĠSm, J]o/yb?@=_̌ 2 Rr9XQ*+*Z> {.0%1# l1(v!f`4 zX:-hfpm֮Ns+̏'~h @OcTͫФ~'/ ``6#G>n[|ؑE`qfH*p7+0_e *u6!2 ֳ>Z LAR/=W/t~|SW0D4Pp~6?x`8 ` Xa~^>&n RL "L d[`zkXxebb08@XxXg!Qw8Óa -A/zfW ̰4q1ᙸ1߰ h, 13<{ 7e>R ?0Vxv Wdxh/9'QТ er=[}nGb#jǧ.^c\ MDd_'p~PJAAճ_ `|3c&1I dn%Me+ ׀h'LO2\; *  o p3I~Ŭ-k?(W+A#nywI-/  ?c:^c+,L;Kg3J 11| OWLD ?;'' ( R>U @c o|>@v6r&?pVsA] 1fȰ \uSY`ZAA؎2l9ˠXNk2u!/xAE z !-0#A*p2<I[ ?pZ[e-#8sg:~K13Lۙ?as3V5Ae9s O V< ~C.k`pcQg  1 :ç_tldV~_5,A! X+z adp'S)? B`^%1v#ÒN F *Z\;CT, 7`Aؠ5$P9&ޝ~5 Xz{>`ssf%/r2o`[ʏ?_ [l~KzdCK'02dx+A"/2K(2 IK^>P~yW 12=cV1p!%/+M/uht1 @˟g5LLw3fbdA<=^c o Cf&7X^ffcggvS=pr'Ǿ(p3 r02|NF~bt?0?2C^@,_wƿ3201:e+?Hfi o:u X&21Z߿_7{;; 4D>~zחIzOP4ҩva]}U@%f `π22yQ5=r2 00l;[_0q\D  P'q  Ηvl̗X /\cxwZVHS(@,hSGdVQJgz  =?Ϡ!M82Z/M 3A"uf6:5gߒ:STh̯*llnLϿE,H]b@3IJP;A*QŁ3S .tRF Α v9xޯz@43a@yJ$CKUǫ~Xd2B0$bk%hА@ y2"IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Folder_Home.png0000664000000000000000000001161110126472770021060 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ yА@ yА@1( FF'`Q~߀_@=-a35}b`aP+%6=P %X8 ;O8+;CƒJJXdy`}ڶK|C}EAVf6Bh:w&|ۓy !Ͳ݄:7)F@Lq\N:M D`jNP˷{ֿfm/RZɫ&Rz;*h]7xnҩr"<(!3R4#0Qȑq5v)* ' 0iq(LP/OW'A 7;mn@ IXi9,cR9E MX΍$wXBm;hSuGԏ'&e)6F/,ABNYecMrS}_z F>0{ك /_`'s$tݿ6ɥ : c`bbbxz8ã[׀A)a)9gX?bpUaedg`ŏ@G CAtObX ^x k؃gYDfM0*k{:K%v圪 -֛h5A){xw,.K50nB&dHAKv#Y0ޟQ ;._wH=R =X/>M(@}`B>F%9Il< -,"D j= YJ]+0_fhFtoJ<+Pl SH`mo0"XM,1 NDw I;ˉn1iRWRN[!*U}s[Ma-<| u0T4H[H`݆u67N"ڪRωIb<޼yCl{u..d֧1OZ&.iċ#eY :l9.eeK=ۣhHC"t_%mOEYJxiq ,q݉ń۽Q2/*{(? M'b,bL0uӽ73gl%1MQq:6M;l.bGgk6Nuoh>|S]dj>. N@E^`.- F^^ uY#֢자;,L@p$10Hb?~0H 3kʖSMՁk r* L \k bR ^a&` L_^>`zTPBX0|{ G_LJW ̌@yy/>2%G[ G8?:Xg2WVFԟ/_Yt! xV`da adW|Y /K ooX='/ 8çWFsX=%_Ϗ.2K=a#+`!$cPt,@c@wŋ͛ A.(`#5&fpǠg`t\  9`e:Xaq 2H3|:T/{WLX=-NA O2GwT5>*TV K>~%%v`y,X{2&hg>:#xW? dP 62 02̴ r#+?q &o* `(X ʨ330PX? ,޽tW-`/ { LJ܂@k`7O2p 1~r/ûO+KU5 `ǻwj7 e0 wb ( )|{FsJ 9ovFL5֖k zvx_JN/fpwJ򇒊(ApJ)3OLOu}Ps8WMe!08Vm$BKz3Ϡ~ b A"tu>KXb;d侜?}̪mP;YnYOL=#&sy|>+Y(<LSZ>VE}rD)g*;S9 hp@, FĽR\=p$1&`'ep>.`/lm l 1_ l2@'1R0'pC@+e@  j`T ;1ƅAU/ l:`bþ~T l ao2| $~aFS`Ty]f4)>C_ĂĈ( a?32B;Pؠ"CMʐi6`#X0{/ȗP57?`oٶ 7~1ae<]_~{) y Ă r ̨>>ax=(6.ly2pde4SnŰel׹qJ$c 160v0v'`gx^FS`2꘠AO@,xPO/1<_9?0I3؉L>88Yb HprLT9@8Yc!,LD9$ٌ;_=gf8 þ\ UUƠm ;?m`,~9J!ITپS)U X,#~@8=&@BL^ <f#q Mz$ lgSfd8 v@ `)4/`F,M P&{@ \ YW Xy3.ETs )baX-H8C3AYd .0V! L .2×,`o`( &IZjP@ ch^$* c@A%`נPAO0dzCW?<~>ïF@NBL YzX9Tifv&$ :#0yoAP?v>y lJqepc t< Тx33@/X  ?z<{o3|=P ̣1MN lL>?}pM`,8#` ? (s?>OhN@8!q ?@KU>` Z_-gb`OYU%lsā-q`MAU``M, M3` 4gEt0?vj3( i"+iFD%ŷC'bP/Z2@2(SB ӗ ? \]oex/&`2bί<H h +R 031VV!b0yh@b%û{/ aU% #ez+o:+3fbep^?W`02CFUu#C>3|{ wgxx"ë; 2A1P pPι T s럳-K͵ ,N 00ss2C(@ 3p#~{Q2<3?y#`yX X<:%:} `ADXNPрCYD!2AX42J 憖_>OawÃy0?g@89l}~CD (RpUa`pd`RaPqc5d1fxw<Ãcǀ,y30Y2ЕOC/Q-("zؠ"`g UcaД`x' L π!ıP~u;O"$@x=VU*0(V#fR4ȷ~ ] -M`t@z[@'CF8{А! D=+IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_MessageBox_Warning.png0000664000000000000000000000627310133444022022412 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< MIDATxb?P0@ yА@i.+c`0vfڀԲ wFt|3++ûՁiŃ;5- Z$![`hh28Μ8g:OAF DmĠnmʠ DsR@@)B2eua`{e-uw'$g1\+à30|z`gP `Wa A j@Qid ̪~oXD<XhV jy@ D%CC:o@'ܩZh04!Io${A @0Q N Tf:$ o |pR ɠan3'B)i-,,L: ̒r _B /_bb xXlyAʈR>Rdq:pPHgn`Ą᧦&J 3[+C2%I (IB[Π)yWQ @76 (我$⁡o }^]CpQ Ĭ<<  X9M %,Az ȍA5 H;8yf`PSc`cb?Y+"--X`k((1J*D Dn 4 QVreT: tC[au fff --- L@1zx쐤;Z L@2DT&I2(30v 8dQNar :::>|(*`l l#}7%A!5UEP,8Mr%Drzf`&0AE\'0$..fXΎYd0QRd`VATD{ Hk`%j1H_!<) 6XI($$$98 P,xz20|u2Ơ^)y Hn]L~ L<&4ĎXJJ J0 ,?}a0d @Q@í,RsAW***p ZÛ 1^C `?#6 Q>Ъ|>~`[<&b:FtiYYY,-(`ݡ#2rq3H+7`J:R)Wwf`yZQ ,6#'(P&PU`Ma&sX2(2 @/N4[>.n^Ïo`LR EGk3\ѳ b\ *bX I8HX10>c,@{ l06PD9"F#^q12/`z $3+Pb y% Rr ?kL^΋w?`QAbP Op kf Y;$d= ,PAŪ|@0HXY5 2 r@yn6r`1 `/%%VVVq$``We1yACTT6ŕ OjaY~ݼ,‚OwS߾0:=nF0BkapC̒ b{`A1KAk\ Zv d,3 NF0G 9 Aʊ Fv4r /x؁;$^<ʠ%$ Р>(<@PPkb%H1eol 8XP RTKFY`>#P䈗h\@ ҟe 8@vL|;90/ hc4Px6`Ұ2fy4ß4 }A`w ,k_b`68@gE0h1\?a dh1pM`0A Y!9?J ˰4`Q͈ 9g2.O VfgHd[~zAo |h7_$?466Z=5Pf@'` 3o_y}AXJb9g3"M|Yfâ^_ @șx0޽EC TLGK҃f$_Ȝ ơV L=@ yА@d"?VIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Misc.png0000664000000000000000000001173310125245344017567 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<mIDATxb?P8=@`022UdnR @fff%}hI+@u?dr;@R^ t_t@0VV?~301ԧsssqrr1|Ǐ@?o}Tz&'0}… &  ~D%~jBh ^C @2@~dx?}l8 J 0I22lݺA]]A\\lڵ z pz!00QtX'<Ï?!` PL(]S`  #0P1<ر w*~ N23dfV0prraY8=@X=7G]߿@v82 ÷o?cfs^߿Ih(b@Nj`ab [UUm;\%ùsDZz 0<`iN Àr<>Ao0d(1(**& Ǡv44?2FC6_~bオ&L@KDD\(tI ;`rvCdVʰoV3g@(vZ L:_|_3ps3 ^FpA`f 7@/9@P?SDDL`L;¦#[@2vyY( -@IXQ d`aay7 y)Ae9(&@1}8VV& -IIa`yCΝ[I?VG|2`bQQ%Y0(t i 8,i cAcgy$ ̠2 RR"d!,~2ʁ=L>po>O$Pmܸ!..aٲ`V?z#0jW80z^|P&e<'@qAgJJ `gETht:|8@*V@L=z5ϟ__z N> BB|`π 0 ~}!@Ev<第A |13 p DGgK`Z:r۷t/4LX0C֨{×/?޿ #=\,rr3-7 0+|nPXK(`*!7ÇSQQ!V3.V={p'OB\,ԁe3`ǂ r(!PH܃π!O ,~98!40ܿXpHLRׯ?;ի'@ۻvmj(>X@t}`a`-K\`|,yb`;136+PGٷn߾>zjz:::)H @,v]>>~pUJRD(̓<+2AL~Íޜ9slÇwO MayC`,@YYC DVpL| ,ٸ0<*0@۷oh_UU `k .P1 ]X`yFxMK/ g_,7 l{v`9>,ޭׯt ++ 6@ֆQQ i``*,,z@-PkX/jr0_6)~>nnNp X *@?~gxP/߻poo5S@E+(&~Lm(bX ;6VV.߾}5@/J 4A%PuAI2T|oAA>x3&mɅ޽[ )@$ 2@O;>OAuɻwo~6߿?[͜D-׵@v.P@78V@sӬH/AUU aE)t ..5G={ S>QQ`O!268XY|/^PV/߁IxlMV;TT4B|>VF߿Z΍@1  emP~a.0@ H?<@=7HR6 o߾= $@,ܴp@0O0\tٳP O@}F) 5=d/Ϟ:4Ǐ_@|| '`J`Y'&&1!7 ')]]99)`9O>| e>QQQ`~QK@;iVӃؠP;!5=@f~ X*~@,8wv2DD$|*ǏRMMcF~~~'Ea(&@Q-( 5mmp)٘U03v_{f|X'\{]@=`dd0EBB|"@2xAFF\" 0O@"2t͔B6/kA?8}"27?ނ%cB PzT{T3{d._>ɓǻ@#\@F #qU}>$}vV>Á% hPO P 9&}HFn"J1'`C4<( tQ`=|_$}}I@E,wBy}j{ 'ZN:"!I/~sP  < XA1 J0?w*``6@_ '\zb0M֤޾}woCYiRǰ.\J@e ѧNǠo౥g^[>6bp`w //>nYYy`[ܟ$`"T<r,ZA%H7q߾ Nz$x+_bOa;;ak ++8{X_3@c{%/}TP~@3^pXBG!qH;N 7`} 4G<o~eM۷o.y͛Wnݺ>{#`I_>z{w@mq#/^|ہ@,ffwԁd|v;wF,ټ!bb& P03<L P+/~-0_]arB{<LnK^W\'`ӛ4Wzd %%@e>l,g)((/' tݽ{G/ DY>>>w݄6@ 3DADD4ÊK p`6I51!~E |-0Fx=@ ,y= JVhRU@SP>4W%)-rUIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_KNotes.png0000664000000000000000000000630310131463120020063 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< UIDATxb?P8=@C4=@CFFFx [1SьQPFo=~߿+10* aH``hU?|R fhJ 02rp3233%,(* p*îW1raXp?óO>q ïY@1ׄg9a?޲0iK܇O nJ6F=}W_<Nwݯ_OG~1} +wg$_gK O lR(fh8 f e.&,@ K7B \V00u{@>ԚPZR` k$<6E u̿HK_ @J֋Hem9UX @%~@=񉙉_bNa KB8$0|," =Kj¤k N1<<~ XKNVeyQ;W+yqQÕֱ%\:/h0~?l@{0333Kh1H2'` l/p=73 0E y\CS?{ ox  f ]P5t0)YR`ɰpFC^K?lcDKp q`Ϳo=?tX 0_h  ??@axQO'x(FvWb @h1KGD{KѳB@lDzSohge`8}WBf!FXja|t|kY_) 9kԯέa^!@@|  p@`eaAc FD_o. Z2 84Lsf6mcxc@ɓ@|_'!B'(D k#_ qBi6OVVpI ?V# JQXq mf`|~,#ï,gU;S]S@| 29@(ϓ20=u d63001020@<Aib6y XvC0lh?dt !?n] ޾k5Hc# M  2p22003si~V6^Nv~.&>>Fv^.fV.FFfN&FV&FfnF&bf^&^6  /c& febxKfoo2~ct 4s 's_RadV4 ꪱcA. `bڼ 84'7;73#ٙXؘY9Y ՝?f>z}0Yb t0B6(̈́F3&kbC4 ZAlTˠn 45G@ӬL"5G<Ɍ&ƄG D~i; D7@ yА@&c53IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_File_Locked.png0000664000000000000000000000531110125245344021027 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< [IDATxb?P8=@b1L>>>c[H2 [&Mgoߎ"@,^~PY^^lXJcϟ? 0Y`߿"dػwP @ OA lb}}iiftF JAJJ>q3×a>e PP$]G)LG3-yIIIi XDoP=?1<~󓁙 b8!A,b cb`_?'zٜ2$= Gb!;+#'G@,̌IĄ.& h K@Lb`pQ t@,b0b__Я?/[ RB4?̣ pOmВ#4J, ˊ7A}c' DdqP@!W @HHIaM 4<+ @ i!k>\ThfK3›Hϟ /_fx>_899de~ArD  .]bغu+DD=C7@Hgg'33sPk%m Ă?x]v2޽ԒASSl ϟ}.Ǐ01 D(rC;`` F`H0 )00ܸqaMF#Ub (V?~̰cn`pcbbggx 033Jղ 'ٳ.\8O'p <@pPIs`BHf!!13?~۷pp(rsa022&= **@=,xc` -@?yρC޵kofPUUb gte~<Ú5EBNNlg`x"@Ub3d+Wbaa|p~777GGGpafffg:u*0\bVax!"266!Hb"'/Ĥ8͠#𗉕?&aqIgKATR ``.#3Ó[>=q 0\-~e%E{_xT;l3\X|c ; 6~gU7d0pzoъ9+YB֮ 0ȨK1CH?H;6 -ß'`c(H)L 6l#'Щ\ f2, bxvp1Çg BhhF712HZ9'*@ !lf`bqa-v2H3qD@uC):YXn:/P+BiÙ₦@ o^e`SZfvb H,`@ PC'8&~qY1ꍣ *J .. _cshVz/HĂ+`/B-vB#<Î7np5 f8(cEp<6Lc#P'X&T̄lAj?x3("!5b *FQhFh <,R<9, [`@_.c /?@1k (@ŰX^ _E<o20|<-~`J"[0@,X  3f#ˏ< l, o>ex#0/0bq3_JM ˨>Fhπ. >s +Ù$l.p;쨘\F35>` `O_^?c!P;+Po`[+ ̨*2`,%1`=-4- ? [ &OY5.0M1` =🉉z 2F%@1+$by' c> X!%ڼ1E($3 9@ԴaG0A"-Q P Gf=@avf@ߔ{?%+ 3p]-̻)veefxq!/fep` 601AKtpb+o\sx2IQn`=G_`߿|A?8,3He89#2BIR1A ޽c֘( y/{{/^[O I~?1k׮ e 0@LRRNIIk,= ;w <@5@P0S4WmP жIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_KGPG_Info.png0000664000000000000000000000643010125245344020375 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P0@`R\@To  ?T~~KU~ȑ#(bĂ:B,>KX'Y>a ـ?Xdaf / n^Z6///@x^" \n.@J]l@o\ ,"@ 1P Sz9hl P$9#<$!GtÇל ⿿Buo0hXh2<{̌$aKKKWHg"@pJAFZ X rÖn_3\޵AAGz_rm`dp``zрa 1Kpfƚ<{Ձ>r&+@ 9G7 6apPH3s1yy߿~:GmBR ö D^be+R邭IabAOjC  7kbI  k1]~ALN]AFOo VlJ*3| X'ρI_ 7&#&&X}XL~db߸l +0` }0jZDBh^@J BI Xp~`A#FH1_&voY%'%߰4 ؒ'!ebV `V O_Od`ta`0J0Bb_D__>| +Eq,;V1(F.F@=c[o5~`? Pa%!Ff3w.&0j#T @0$9[ wX R(avD}+όL _&fjGCLv|@篟H3Fh Rh (C? ?>7mr516u4A`σ?  zۚ[ȸ{HI JBf5(VxeI#3JQQ4bcD*ZQ.$@(coH6_zdCm LȄڪZklB rG/ԧzCWn3{3Bj`rz#PѝG!IKшDOBA^1@(Pbi㡍@^ ` C ) @fҩ d@#1bT^̍?zUSX5++ffLR#3bi"0Hr$@S ; hҠ#h&=TGiaP:9:X8ro b'D+0 laتo h90wV& LjF H%mQ l <l3(@Hb0_.Y=زaVP?(ւddfr$p1&v9 v<FcˣbzIZZ2232D5>BВzk xϷ5@}dyB RFz#<B›\ 90tFdx] +fը !5mhzL`% Rz艭! A ^3tFbx `5sg=@X=@Լ6Y#r/ÅSWq00D  -K6X#W?a =@C} @ *V?RIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_FileNew.png0000664000000000000000000000567510133443146020234 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< OIDATxb?P0@ y 6AFt)}}>_ ̈쬐9ɋnaly& Z3ap]<}ovhkpȿqZ])A Nm`ퟟn \'hKQCJZ0=K%t˳^9,]YD}c0҇KEhy)~mi 7ó ԿeΠx ҩ.3|83 0X7 2K3bP4g`6-~3#0蚲0~+iF9>Q]` K5g{GXY&(a`Ue2gb^eOf5d z ?l2m \E>B1(@@iZwiHzIgP#5g9[8 J w.bn6Ҁ_߀%7&`C L?3((30H( rO1w&vM 9y1g Dt=ݑ=ݫ^p3 :0Y8~uv5a{.PnE'8?;o@ h2d B| = ?L, >c[`Q ^V393?30;3Hp_)YNJC%/~ &|(&&GC0&XX?pП%bIX.s.u2~f~O1*J0/QePXk._]n 3$1CsD(1a?ԌJڟb`ȠR9(N]Á gc8qç +2D\˪>9)Ҧ`g \E%4π%C=INkLBRgE?Cy*` |gvrc(p.x#014G=pyl8+ž4:j0@b0h431 j .21\< ?i%/`qgI Ro1{2s`r4;U @8Y} ,kF6~i0bb8qZAa&o< ?ffDD/``LKdV%76'3_:er p%Nmkd v=^UY tPkAI 3>AWvFsXؘ0f6`F=nci]F?WD" `fK[np!K(b oz79f/7?=9!WT{]_]>2`b> `Jʟ_a/ 3bLؗNL1 ơ .MIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Help.png0000664000000000000000000001106610133443072017560 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@CFY% 93b?@.r `~π Lemb/ 7?(3(2WaߟhVV=N>fAA^N. ~aȗO_>߾zb-3JAu@@GgC,C_AIAW_AQA4!/@OO_>~GWn3gr ï8Xc dEX~=+(X>|p!g`E6!pC~ S\T I.0ǃ0pc+IJ  LLyO6x3+?/'d/~1 3e`'=;Xy:NfɉNep3I>~g(CC~+3{| ;pDx pXebl$xPil"DJbX@?dX63iCj&  ocd&(_0A֑]_ `R 0jW~#m&_gUpI)Aۯx03 2111p5'2Ͼ]r@X:H1)2rpP> _=񋁕_A q`H pu$ 71$R<0A` ֺ 0)Nav@___倅 ,((2@q3@a6~P6$x>}&,;VZ@cBTAVN!C4Xga35#ANcTy,yaŸ/#?>Y/5j̹ĂVH Pʹ48/4t | &mi\ +7!$T_xS/0i@ JF! n>Ȯo8%$XxY|jbA˼z̜Ҋr2 _1180|(_`&agDP RbT6-4@E-#X#<({ !'}d'j_o>aXs;էFay?ro4A!_a8v!01pՃc _~BjkXނ%O~wz] @w5Sv /`_29!ɖX11E?h$ ?}XCyׯ yR JZ̠=cxH@vl[q,Amid'Z'.bffЕbдfp2T6yRppr0=o R") 6P eсfN`:dbFv2@gbnP>( '}˰oW-6mIQJ$"+ΰN:_|< >a(y ,@t<(0 Pvd'Z&773a/Ƴ_nH0X(2q1mfp;v%66vϾ3N- 8o߁+ `vC+C*Pr5*C33L'?#ʠ$ 0,l < _5?>~\c: - YE?97ʰ * &)P?{Ň3{]@9NVF_Aaw |aX{ yx83<} |b&#"vA7n$c @`dg`8pk_`106A1J:_ L@}&:\/z?0?pO 04;YX16O @Lhg`gHT"''xZ(Y ( ;0ɀq%N ~f H=d'Zkҟ|Xo039-B ҵ[LF,L @K~ D:G* +d %dz>032p3Ar.O`ןp_O~G)PCWrXrB >5"; `013/{׏_80s>x Y01 8C >0\fl؄,~ Hy`lf`g?=U*ǀd'ZT1˫ ҂@= xg'_kMZ WWk23#RnGqpX3yTd'ڰ!ȀzXuʋr@/j3hHaE24QaK:3ɡ$C$Ok^Vv.v@̼+2Œp8۫/r"+ @J 3l$/7_ mBlĀBKd (CPT $ޣWkT5W302I1ps@od93#4E#+7vhVC)mЋP1OQ`]p f0l}4÷O_88X4d!Cȡ?~3bT|6@ge8zT~Qy'%i]ݛO}L3$v,_^>mAcA]N "{foyл#?6.O a{ X00Q Fn`ȳs 1 ?nf}cj~K`%6Pc;ЧK~MpnD Jx!]"A ?.&9?O_K\k@S HD{ (R_ mN^YHs@A#]i)Ж{@@| hYP7h=@C~@ yА@T΁IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_FileSave.png0000664000000000000000000000510310133443102020353 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@X=$i00-d``01|ʈOR?π {/ª Xt< 'si)]"o@A2??,h@G0h4W;W1(Kjݬkĸ>%yAR\_GyfCu0##,V` Ԃ? /\dV +?_F)",wg&+uUIN?jvv!!r@abFF.Th0 NJCᾐt@=? ?cCRb P !403 :ߏ lʄ# 1g Q !? u ̈́OA= >#81BdW&^?̿A2.* e$ p(13c$('1? oT4!#\+ \8Jit`eDIP&pXbA8 Hlcz Q`; $ 1Cc?4ȁhfhMB  Fx O>L@A.1Ą3` v#`XZabg"'#ʂ' P8##R' PRHQψ(p@DfDx#$ (FF؇&Q\ pzryPLy?#f@DF9hx"D{5R T e2;<ŗ"{aH$QOĂ E̐Yf$ G'!yAX m&F9F< p'!<E1(/#"X# ˆ@!P̌'oCC5ТggoMdd(&F N8?HU2$ @x?x 0kDFCP,JV mÊL=THR X$"c~@;Ab`CDL-LL&,1+ x pBham>DTGI  8XSQt_Lf9b 7?^}cx,/Ǒ3?,l^/4y%& IԔeQP5l, ?#R?jŗgbֆ0J}1G6Jd#l#AXA@oٰf>(j]#Ci#?%0CǏ 90 #bj/& =2V:y~cw?Q^eϟ3gadjRRYKi7P7TF*XC/ 3A'~ .Nz231/ o$+@C[6,<п_, ?R9߿2=tQ XRBkc"X' 1{b/ßx_` Bz’L @x{drȰ.:?'@qb<? , }P,|c$X/R=DCi 90 cDa >(d pZV ȣdѡ d@AH6r F@Բ'099 ?>RED ^4%@yHhTX*1QI!1\ 1 QX&&I G/ 㗿~̟ '(@t J2` p@R逸?"Ăo.^ G@?FH~ZZrv2y} A%#ߨ= @,E*$D|ȠH7b q '0sK2oX/<4 z_^{%ë 4tIIAFpC^[7 ,  ÷_N}fe`lj0c`B|L?N٧E <| dU#?_WMdb N,L\|ͳe:/$Ӭ4=@C4=@C4=`KU8IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_CompFile.png0000664000000000000000000000422310125245344020366 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<%IDATxb?P0@1& ߿)G IRrOgݾ};<@31|߿ 1W{{)))d;ZIϟ? 3]h*glBϐPF8 @ < s "sIK)9#X=`B9DCY :JiəAJJ D!bEZJw@-cCj2zB-YqZ!8 :bW~ŗƉI6Ę@, %w?3ٽRA4Í3#Sd'ѱ@l!c`TM2DV+!p/* ƚ ?1|ݞB U{U+2B1@, 雁߿^0!d> $@v  G5|B1i Bœ@G:?` @Cx3i=b`{DUR &?_ ^pcL1@İtEgE_md>LN= & |ME [_db/+ +@01psq0\aْ If V0p=  & w XAcðpÕo&L gd8p:fFN׎?I!6R_`Q˷/ vjv K3N f螴A^Fԡ 3g1Y2| Xy!:;þ= L aX?b PU "4|A[aS` 6ix &B}OXeV')@`k; [r!mC: &jv" ߸>=3(1@LԊb"gs0@ !B`"X G#O Mt3K 7G5@ax˗/@xPi: [>{,((a؜0:c؜1:!c؜2cǎ||| g{ s\55PQQQf:u+89w'`,r;~,@tJ8g9贖J??Z @C} @Yj IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Spreadsheet.png0000664000000000000000000000630710127777574021165 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< YIDATxb?P8=@`dddptttP222}ˇ޾}{7o^ @,,6p)((0$  >)U@G OJG' @F;S2H$hTW})"RrIpwsnf Y{2րWk]wv>}F ˁBs!NZd`e y ~R@$#,HWj 0w"2Iy &@, /c`de/T-B? 2_?@=GABBAEEl1 HF8(` 1Ϝ``eddb FFX:7  Z| `17W0(+K͂yd;d&+;&!aJ* $Q?ư}1]IV"$@`1ҭǕq@0ed8v?h'HO,,>,ɀzgj 1| /8-@(y^H % ?zHxln% 0 3>~6vmێc=F@1OQB^y_Eo)6`2>w?pc88^XU},F CҋV’[ |!c*'f`Y#JI31z\WB"!lZff& Yo`L}=}g/Ij#!b_ c hlI VdxBE0@IrY#AZ|a3LLf-ږC#M @% - #w o00d U/z`Q @,:."#scnŸA oY>axMO].^k`xY8! yJ1s 2e;V0 Rʸ zͿy6>c;Aˏbx9aĄ; bƌP?SY3s1=P+0vwv ^,@?N3_Uz#C̓2 Wef4w&f8T9< y lͭ ?1@30'8ʄ!aN`cK6_ɰ3y/ T+U Ǟ11nd0d'Jc@1OBĥ{o08 ư+WK2xiٗ V:+ b!X'ؘY &!Y ! '"." 0d}°>R LJ@1Y`} ~VP 23y;q ,0-&T1023MBDCj ra5 ˥xxX3~aO*ß @3\x0!C 2seu+ '|̠$#7o ,`tpa,ʁll/ ߟ0|rX,e`LW ^ 1~ʐ}+A ~" - @;9~0a1" @zL?}z $4) rV~ Ȗ5÷ JL @fffbe`f?>C/̸31@ZvЁ$`& F`y l X R)t+ `/ Aez[ yRg02/ L rį82pc[xl>`$6FfH*7@U4~3šp 7v&A nf yye8ۏ bܢĖPk70bdDP ,V2383|A*O^d6g$gwY_[ -_^c0~E9Fh` 61QOA,l1@/^0">b-'6Ao߾aT-ၯ_^lX#hc5N#caaDVC@0 lK a:ii>lFOӿO<-18 ہx7A& hvXU!oP@|n .&-PL2@И&O? pmAzJ{IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_History_Clear.png0000664000000000000000000001441010133443056021435 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxl 0:6`kCԈ*q "|qӌSQD'A@wW,Z lSծ@U7p dOJ+SI}y Jce ٺ,\| B |, l ? /dx'Ï~=xic;J1@A2 F2b NZ$,f`&`.Ƞ TR!S71ݏ ^}J;4ҭNJ  {hPEꂌ &B | DhF  1 pfol#C^{h& { (,~-SRMRa2:;_@|xÛ nfxv-0b`cd_p23ȩ1H11=4K70Xsܥ7/@G'"2@3X٘c|<y>2}wn? " "B bb ga'^Ɵ~11`dfP3aec?v!Âw޿~4@Č ҭ0`0gx;_1;yA+,'30 'Ý{; 0Y2|O Gg3>:40*3i2O?ox Q@Bbf.ĤfI JKiYa'?phyGv1D 327, L^l /_f+%Sc`ga01`P{v30 2`fgpdz-GXN}~3 G$ Ւ\ l|| ?00\=Ē ΎΞ .0X f^AYҕ JR8pcgfg/`fk85` DX,jc`gx w2+220lݺASS\)NCAWXXAUUAHHb˗/0_!22XAOƱ[ fP`n+pkO?95@}Ev/@13C j󯊍1؊[B 04 CN: 09c X 2 ~ &%SpLrp1 0O * 1f.pC?Cj {A8 _ f3Ve O0f3 iP:SSScgNHڇyHHu q< 3B @@12_GO." NYQvSG>j>s3@13= ̴KdT-nfax;Ç'ʲ$i#AA{Hx"6w/ԣPjyDKk / 3bbx=Ó[oIi>н?@ &H ĿZMXû oWb}%TA8# C2*,B</y93#hfg!jX|>A>UOg/2|& c`cKF @@=#Ve֔'0~81'3}\rWX 6ѓ$@|ꍃ 2g_x=P098)  }A ''͙>r 3}l;Cxx 2\S"B  wO?q@E/6`5` w!ßAX\T;>p,<}ŋ j⁊JxRyI7YaϾg 8~d},u U&?:L%>à>C8;''<%ՁmF`l~&`~Pg3U7+$/{eA>bf ;`8r###͐p{O0ܻ W@?@OZpkAÃ}جÇ_̸ 4X{pͺ jO.}26@I@\< _~31|?1p{T*)HU(Ё 0]d8rQ_< ")옼clmePaXa5  ~r1|w؀MyyIYY)AMPכؿxqѤx1tmF{  8ف`z }d;~C@Ôi 0xۡN֤zͩ kNn"+3{`Q _9"MXax$00 t01؇UՖִ#<@P X "q  3\a;0V4/E k72`*Wtsc`ͅ``HJf%~?w6BX^?/;l#Ą>d?ߊ [ ,a /2 f-\Ǐ0?ΠTPR j0+Pc`&iWsݿ?820pH 0mavi0iW`Fd:ё# rrStɠeٷoga_l_WaeV! %`p2[W.@bO3>>NY1g^_`A (Wiİr%×'8g0'bd 9c@]@9RSy&WW,n\gP21a`QH9dxdCM>ewؘ`_`%)&7-@D-ݻZXdr 01\?׮1@ԀȠZTyL]Kdu1 ,M b Ö- WOdCaL?|3؜!MXP ~?Š.APApH2G}ߵ |n& e^^ ׬as ,'@4? f|Aa@  73;qa1Q.׾d`W @@DFֺr L f .VK. ahўEn҅#qrs3Hy{3\ڴMAP9 O ##APȃK` O.=DČm _0|z0X@(/732j֐f ˗/b>}2p@ s;;YZ2:8 $e L^׀0cx *@Al(@OgX!abP ;;o@^t?v>ち"o*hJ2p03q0_ (IN0\9T"M% .bz` / lT13 1u Pc5Ȩv]~97;0`eFr!; !/+=`;X_av. l`=;0 oQkF w3`*L£oDcccRv)98N 00 :{ R2e`ux2< `Q<(c\bT᱀&, 6Y{^!̾Xz1@13<·^Ƽ 2 | }fx'^3ij1\&_M2b&=95UD)J0 r4(?J$P7@(&("%gޱyG' 3=8?g 2H 31I0<ⱻ N F _޼e<h0vtƨ?C+ WT1("J`Ƈ!0 ,4$Թp2@xaE c쁅fE@z=0Rt00&E%%EE.<{f @Abs~+˅ݿEA  rR|  62xyؾbûZ{`& yP͊P|X"]2dx r=| =bcB8 {2Cs3??} , z V l of|0cc4͠&*  JK@ ,ff8|, B<'O E+~}pWor3Hzpkw3~ _W.b0tqOӃKd@3[7nY3/]a#^=? ?݄Xl}'@~ &ɼz]? ޱ0,LV&B N>(Н ׯ}bq'Ϸ W3i 7o\fxykμden^bdc_鼇2l z %'6:pٳnbdP# 4L)k%3"' 7) : `?|:?pX; հý v i204b8p n>T:*ϻM%$ E+6"mz Hff6͡ %ƠƠ # lʋ;]lqASw0<4|ɐ\X`LX*.hEsafs0gx+.x $?v0`Hct(6# HӁ_ /dd@葏x 61g[N&& a%% \BBab?2,8a߽{ H@>|l1 30`:i\pxڵ 3Ξ% I@aܹ 2ZZ  bB#;d[yx0<~aݻwTU,@!x_'߻p&,E)0o H%l.Xa32|,)urB1@(%73bH6|a`ݠh[AzA4>G;8X ̼`sg L{Q`µk[y 0QM1>^/^xi== ŋ ?Bs: Jj &jam&lr@3gnhk?;z qy 0syuyUgxy`a?ABa!  : pY@zTXW Zаcc[pCXq1q.00psc`@)$/k_pr=r4 ߾5y-l1@s$˻V*جURb`␛ꭏRP d!  OÃ8=Ǟ=c㚼W桗J ̦mB_[ V w00\ IH|wMif A9`Y=؎۵sfPT I*F::6R80I13`=0c{߾ɩf뗱w@6$ P=ǀTKLUȱr;@<."//),(^cs]`m *DLp+llw>1;QWea X3 QQX7R"y0U DDr'/\~(#3042\8p=F ..|Z͛-ǯ^uǗ~IZYcЏYY0?~RA7 V{||QW%%?2l:X0107oz-e;7=OIHh0  (!@̝|y難\[ lР6_ UbTA:PHۜLL6D"0I\?zCYٕ*` s تLJLLltP2 *b%$t*c@ԅ υ.|y͇O"ր  @C :1pclA:L 9@VRR^UA! 4bDŽ[Ym`??i vbb2 ~I*u0ੂƒ `O`.,Re S @T,]jAGplY`o/dT0D+P@^ ,6,%04(=KJ/de]]p* ,@m+NIX}@ .^,G4ή@  oC`6S p.TV`p,| F==>  p '#pAPS8w7IIpF[&@C!@(@D`ߚ)@ l +54@C:c{p @C%~qp\701}a耆jj{A Abr:P?SZ<-@WIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Trashcan_Full.png0000664000000000000000000001160510126541376021424 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ y >IFFF&$`cMo-a`fe`fdd`ϟ ~bÿߏ~USo!Ʊؒ;@18=rw3?Y}T8Yxd_/_~0|wû_`~'۫.x b=@y 4~,,ERr B "`+ ~gt_6첿 @u?fÃ^|+^puu_V" G\'h3J20sn>w~2|ϟ LU_20] %! )%O0\y71ka#8=@y X ?go/`$ң/ /7@h#0 7ÿ?d07x~^.)i um Aan篿3psfxy!t+@@dIQ99^* * f8r ów?fLJ.@?|}ǠtAI?Å' O 1e'@O<?g Ove u}s#F&g/3ܿr2ɺ$`t7ln H:q_C@Qaו }.0`3O ~ :R o[C`I ,EX89`Rb|ݻw ?~?ѿ@ς Xz?Û@adu c z \  n+]^S/1| >8MsrrCmb`Vfo߾e7+C8òCioAee$oPX22qv28b$6 S FdR`蝽7y3?!^;\Ÿ! jpUIc013Hq[1y+ ~2H 1H[2ׯ ߿'NC"o`̜b nq0yoȠ𗉉Λ7 ?$B/w(XޏP0*&bff3?l l/ʹSֻ7S_b0@∁$!C,rx.p>grhRuEuL#e9wNߩUD6Qh[LyίX8ȣX H,vA T |2VCM>.O։4[쁹Q97+^0^-+0,cŃk7{)j~(Җ6IUaP`b4XLEÙfi&j)_>c0UĘua$H@b<@/`fjq= B}: =̽ 0'',BA5%4ŗ@!x@b Jb܌?|`;g30ax3;`wz!Vn`[ae;E`0= )C̠Z=\R 1\aaeiFY) wafo 0ּ?r3` ""T 1?j`x&o>|_!A!XA^f,z?|Ux ?csJ;A|P{?I B, LH?| L6 7.e^~;IAP37~ l y^p`b` Xq"`h z WpDew#aFr3;y?>2zr_ gd6@r!B%TL1< AMw0J7\s0 n 9501~1|J` "` lnvH22Hɳofn`/ ؅^e1N_ef *&LR 3VB |iP vw>5!QM B`EX3[>@>MAT ~{jv30#31{ }w< '~K$PT&ɟ r<2a`2 *K*u&λ XOpߘ_5i$´uQbR'>!wϒVCĠOg^v@J!vk *M$P *06Ԁݫ/ 7 ղ+?@}epFp? ʰ ??ܿ4/{ID x͠:' u}Еw@ |̿dEy>~m`\'p0&W2 _`RdpZL@ +@`sPuJLV +z &By\01Gp;Hm k9PC6.hDTrHFp/@c,,HHQ~^>nvN'} ge`g q;((j9XF`F[u-%$@F&@ oi0_01b ̬L *xqQ`Bʒ`5Y$Y2_LhL@:l4 FË!^@ܡgw`2y=÷ ,@| u|| Ps=D39 |W@0kb 0&d^܄ġi g(B٣`|z&m*|FWh́tf*p"ϑ#2ƴf_ \z CW0ps9 "00 7Ã, ן|ex'O/~^~06A'3 +=av`ʋX1 xe6XPX|z ߤ@/FXt##Ys%npP첁6,\ o/G__Yv`ӀoP0J*N`Ϳ~ >a 2% lN y|ע'o[xMdPe&!P_f.?Yncg_ _}gxX3,0h.p337pӁIAn`- w~Ǐ?n 36'G;[!4̼ `-()|ee>`EX9àn&T:+8#/gx#{FN~.f6`LB߯oV(?-_.Go{3hF@  nf &!jxA=ИС'C_"+4iNC*.; @zgء Z80C1#@ h'GRbm CI٪FIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_KGPG_Key2.png0000664000000000000000000001014710125245344020314 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@C4=@C4=@C4=@`022€Be``>@ Puf gXl&gL Cz:vB:X>@1&=qe%qu# %1WO3<?|z=q>hw" ~{@ C'Cl Fbrj& Zf  r8``x }cxtÙͻMG#B AC7CJe +Dx10q30ʩ,Ï@90ag44õ+}xR3*^ @$Fn ~xP?/Ë 1Hs11|cPTx.%MttlA ĩAW|{9- Ó< N ?`xñ6AEĄAOAJ17gP *A}A0S ^I% PqbAQ T;/#˻v`dG>iyyHh Vc56O `yLN~313-@\F? V22!12 1\w@f/P?oX)\8 Û? z g+۷^7XXpys1|a0:Y ll a?@, bXgk7f\dx6`  *@pclER. 6 ||@Nj1pp3 0O2|g \\ /^>gXv%CaSw\`@ CA?v$@< cͼ==d$E-00 ҹ("LLL@ϰ222>|Ço@9KV0x{g~;#q@/āL`Pff&%`l 2}%ǰqW]k[2@/;9IǔYXAQV wzAAAh_~ ;;Co3ܾ!3#a /mc( NI Pgd% fFvH1@̉S r._b /L4e^Pjkl.+{0Ð&.p2;`*keP=xY~au H (ˮO`i# t  0_fPU'/_>0 !P31V-ӧo1,b1\p+y,PG dZO_2|ק=h ȟdA(k@2M\FFfa=dPV;ThFp=r00ࡎgl77'( _<@eس K>>e)Ӈ7 10~l~h?0"UX 81@`gp1ANNA]X99 Jɓ,b޼p߾}_7Z|~~g`vEpas/H jY+lB19 @@ ضQ: @FXAM Py+Ë A1`(?`E >uׁ]llS@20{0fނv@)uih#whhIƾBBB i`XX,y50~kmipjrzhûw9 Z_V̿hE3~2ܹs3"0t)쁨l l$?|xڦ-n:"99jaK؀$ 9qqa'ރ=p#GO2a#0Y[TPK/ WI8@HH2''0$z'~|4+ U 9`{׏`0<=ƍ;iP% JJO<6}{ 0<&浖!ЂآMq|?:ЁBBB޽ OEI O~2[R 0p2(*Jc䱷@O37n J7n\`8~|/ ol(sJ)d,z_sXzbπl/r^^C`w"DffnhFe0vu]=zuRJK,@°erp  pz@UQQ Lsq=j2: 4 >c`, ,NVȱ@;ITj=zmeʱ1Z( }l&`w^((^ %?`πx6H] w<|L~YY @"WPvY偎<}nzpLзo_}`( a`OAVVܴ˗Oiuu}>`cMHHWpR`_A CC eiiA`>w#>}̰rG@:@w~^ھ}%@${>4H\\~c_|0d@DEV(a##u>>>v`ls&Y^#= lc `-[k7 D݀!,U 0V€Mv7`iX6WݸX*=0y&$@427 $`g2aa 2(lܸX }ChА@ yА@ yА@ ym=oIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Folder_Locked.png0000664000000000000000000001171310126472632021371 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<]IDATxb?P0@FFF'ӭٳk>ף7o<ۯ@%bzdee[ZZ1|6/{ϟ?}8sҥw@( AyZ1Ϩq͔5u~Ç 7nЫ۷ozf/^p 3$gH<==UCBB/%%%rSO1ܾ}…oo߾y 3^p@% @Q5 jhhrRΠ nnϟp[n_~/_y͉SNMjDHHH8k/,,D߿1}3w_OիAn ~~:-YAW b PuO5b83HYeOz1mkyn3<} " 'h +\Fp h t;W%>3 c/n`dx UjL(QCJP)=ȥ!6b!]qI1L?RKñ0?Z%4x}s}]iYTlFрam r6=n@FxˠxGnh]A#h@0ư* ߐr83?0&"yeE8x30̠*/t/8 _WA/c 7_?1\00kW`14 @eBGQF+7]ߤe aH6O#i 9Di D= ɤ 걗mVAlt%)|&?a?Bj@@x;-8nZ+gƵ ~ C(gc>ȡ(~ P1ر99cAx/ģ qP̱= ן~AcϞ=yd=Hxo>gg!!\`&Ё5}r6vv"9?PG g< $1a/3|A1:~]P#>@Ŀ_O>| OL@ؘ@? Ae0bX++P#m#wáza@iXpK 28#7_|ׯg@gw?߁ @3A9%Fϟ `0!; <Jlex`@cOH/&~C'0֘^>p'V?>oFEXzeU2X1q %tOE`PZ9N$ hÇ?*ʠd=!N;]@<†O^|ɯ/pwm\Y?0&?GHቮ>WP@_pP!|l2ppp1'0g+#yҫkuK3xݺu`mӻXmeABEAP_|>=}dj;k27cI*`u?QohLB"Ƀh``#vzƻ * <‚ _?b7!@,2;w_'+62xжkbAyiO701[ۂ=:K/3vv ) 6/b8, l 104GMDDl@0>~|pl@}_B= ~slXUA5à `I0jk3<:ፅ;?H ƈπZw?Dό b -O.|bxPs@=qy"8-!VII>>&66H6mz _f7`EtOZ3;8Eh,`` |1|l2^{ ꍽ5@03%HH2~;sXC`܁, #00X:f4WzT5g|ӝ F(f?P0K{_3<{֏ %8X~ 춝@?@=,0E?6@mCDRXg\`Op"g30p2║a5bX2~ak )?÷'p-{*+ o0.A¿u,B@7Hs2= Q!O.3|~8qvpӘ1/FAXvLW \ac(|M?@`i'uPL,@O2&Y PK6 jĀl '0݂(f0?'#_ÏX>~b`yx&```ִ l >tt SG21EK2dO B {h:ʨoq r`ܐ<$: JJEO._@ ?10~~LR ?pSyU ǀͶ_? ,r _߽eHKWP2`b`~%c O1 }09P 0?l@s7#+362lZߟ@wo^3:!O3+ `A),:oseͿ/O@w`·Oji1J`Q\A:2.!Č@ L/f ` W?2|T`gX̲ 2>wJMNaaPVy}qXG5@```&WWu.))]o/r)ĈfA|`>bd`cw8' `U# ^30}ɐkȰ6P)n< dxw޿?o<>CHc7oTtt>^O#(HH0v.ric'vE Gϯ?^^Po𕝉.K+GYU23?|l$N.00,޻7G:)I_ T`6p͢w~ " *qX K 2| ,W~4 -eB3(3$0JS)6IT=؜7B#SXd~fؽiw ;7_~:ߟPG|:RM"ئ^$fwb`HdcK1vZdU :/0i=Nd8q?^?v߿@,uoC!9/9k ac`[2LPJHHLJJxW&-`BR W0ԑ@fAfPy@hЄ T4~6oAC~ozV0t)IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_EditShred.png0000664000000000000000000000360410133521074020541 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@C& :0V3CLzI ,,bowQ)-!щ, L@S0q \ ##wd֭\K@ij\|YJA0Ell?_ ,Q =mBy z]NFFAgjPC0CH +b7Q75#tA|Fޔ8pHrs!@к!?bl?bl!π.O  )I6ԞBg 5Gs8̄< Al@ob XCa@Abη? g Z%41 mhE |@,J6 D$?#WGDE @,l@I7P/a!|Q@,4K6'~EdNtu@,lB39%bBdʨ$~#DI33 B eDss@BԉBM| &rj e`fFȃLLA@pW ,̨_0}A4pHDA5{RbxV`(q` Sps`b?^@޼İhv~C$6b" = R _g8x2БIdcd`9p>0iVv6X@r0›@1s;X:{ P#50K/ P 07$3@6`B11@܈BIRhC+qR`BLɃs(?ZbkG4a/B' &b$Eh~ ?rQ| &\/DS怿P5i wޱAnp{ D| qˀdtcc3 XEO2Czeb@*3 ,iWg@-0z?Z'PE5 gi5ǀs?t$,r=oBL UFe;fz,cuqX@1s=Cq2Xj%4> @ke7^3`/il: ( m!L3G+2u1h`4%IĄ))1ao2ŠYFDˈYˈf]ȈlȈb1KӇw ?A`M L 54 ÚaDcD220s4?cglN yŏNlfPujn/e84/mXUxa޹ ;=?2023< -|fFHrvZ~ϰ_c@degf|ç:BZ^ex?8^|puJ>lT3;S0GD<'̿ 1~FMЎ_Oe2'ZNZ.:P] I~1ebf_^/c`ff7tА_j@C4=`-rIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_KGPG_Sign.png0000664000000000000000000001057410125245344020406 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P## qOd``na`xpӫbp  1O08h|⽿_o]#hx sXp7N}g 7/Ywi o.@L#;f89 1tz2q30{AZA%)Z%y% H%@ (35i3p20(13(q3|yK_A]$ X@+&27ܑXXL%^|>ex.H@|@ /i 楪X^02vir2H30p-ï?%j L2<84s1 -D0ء4{W@_@ 6 *Ddz3p'\bbC^=Ű}Ν7| @=uU $@ߒxA D<I 5V :``h㙁h񚎝>$} #HbMhS;8aE& ;jwIsEf~`@2 Lbr.d), ,8f>g9@4?<Om5rMwwwa A( t<'09=aԩ6@X3 !9`f&k׾10&\s~C bKHE_mUKͮtpeֻ `{`˚|}n"@axH@"m㬤U&.YRp'1P ڢL @ y6n!q." ǟ1+4ͳ3^b`t[JS>asqЙ8`Sҥ 7_f8/ǕM8,1ƵW$)3(q.o 艳_1,,0 schK$Q%(4ۄAPtM 6f?dgxNO 6dv8?ݓ4:#ld@*2;X쩞Ĥ,u-,W!W2,({M5y-An Ġ?DRxӀ ="(-:#t}a W UDbikSEŀ 0M/:/R~omC$d3000#o,10,٤ʠlE| W !#!'=R-ufGDs W3p 3x3`Ylkc@`&0 o,&S}3|mİ7 /0; ZAN Ջ'H}艏2ql@tO` ڤ`=?Pߋ O3h0k2)p6;OWf]&rrEu92`.0z;6&à&Dz02f@AQ[`gbg01CMm <]׬,`<#k>{6}ˈ =X4~aÃ#0p% ܟ ߿|a|yr-)A"ĂO Dv}nyRaQ+U ?|dn xI#ã0lYy] O1@;Abо ~IR YÖ-G;} P0) q(;Z7 @ HpS /־dzV A+U3DJmyykwf$A j_"n[$pg512*~C}H|8Jz~r1k+% ö kڷ2y 4?g%@㍠B4BS@yy 6V J08jh]lixc: u'`oN!S9qMgI8ݷ xY!2٠4v"j:N AkI1y#`ɛi3Bl 0I=y2 Ʋ ,;CM~WM,{@192~ؑ4T#W̸PNfG/"43")LR0[(16{aHa9!1/pq#D$7RbKyy{Cz *Ҋ .lFԴ %䞽gpӌdBYJ0 e6dQ+F0z/`U$j A`l|6ch˽/`o ] (\@'4 wC[ N3dг@l:@,^,@'$ZESfv> jqAd OPH>% )>g޴A34?!SM>g` uy| R’!L Y;1f` t3`50V|_>W@nfAj@} ZqcCځ$d60]L6x"u?@C} @ y(IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_MessageBox_Info.png0000664000000000000000000000736510133446754021721 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ yА@ y 6AFYěJgbC1hi% ?#Pw }H@?>(0zQ!@,T# E1# 4XXX~7ÿ?@i0fd|ļw%Z@xZ_عԴddD$Ex8_3z oU3i GjG#z@ LUtd$L0 ?dҿ;ow0ܺ|ɵ; EYc(/HIBDd`Ǜ_\ݜJA``v?}  ?_ wo?b(û|pDx HIB@SW̐!"ȘASAL6/|c8y6÷_gRg`afd_G7@n> ۀ(hb@z@ 1wb 6dGX!n{=WICuU .fX70 = 3 +'G$|Ҋ b< 4hVR" ف! " J􏟿=xБ #+cD9ZV8f3$û$30Hh3(XY 8D@ x6* l;/43? FVyg ~c2cPY4({ {f Nt ^.v+~0 & faectõ'?8XjQb //%5+7'0k W }Օ\d<$++V&6^aK cw C Bdq|g&yUuPԋ0  Qg12RgyG`|i1~#=b7DE$8X4 G  %o`3KNeeؚĂb%WDOR'!N"eN߿ * X1 GF3 #'?ç +m.; px1D% e6N÷082+)t : >;O _ٿl~>`=?4#( @|)%)#&y py@c`JMGndx?C)4 # ax Ç/؀!vVN66 ̴L L gsOX2J g7>wnnNV~>F[ͩk255} ,`Oȃo?dP`( U{ _ ni&6{1z1?pL'?20s00ߊ؜ @8J,L  ߀ao .fPr`)##p k%'?>}j%'p{T~X@ǃL@OBS G 233TL@ת Ӷ ֟pX:L_IFAJBa١O +b`c@oBH&$Ai/@458tjTUAkHIX a/ 7>?#01_%0$)`] kz1P^}Xl(j`HwABء}a`caPga`gN`ef8pxL0B[#~ L2?d@ ,Pf l \@򍁝X| }g [~0z y`?M03PہR{3;!]7X2dLہh, pL'^`_WG̒pO_2|F4,!1E߁}ϟ203" s<0)1=3+>'8as(@WA /e "`CQR4C=.*A^FkCw2sȇ&5lN \`}xz0X%Zjy?, _I= %6vn_ $IlN \1{~| ܬ BXdGdtFH GȎx, ,ï'ρ;ͩ~r.88 274<1=9c.~`ae@SWy0zv. " -̎ QТ ^|bfȃC7c#|co_%W#J+T@:4>ۯGNzŸxX #V$H @C*.x(j&on05+zp p$!X2kʠ!l]w34xd? E!5?`d20 s12_p&%SnI`t~?xr 1_ pFX([;zZAJSAK^棷 _?ebeegp6`Hud#P+$J/>24EH3 Շ^0x`3B^@W ]y3\?<@؇eЅm],lbJ6 b* _5^F30yI=ue04 vNpFz'O^` 7/'(0:`ψ9 xjlp+@;2w QXv{a_*002|?ҧ'JV =+>J<80Êc'`v  1x0@. e) >篿06!QaW`— ߯du!(|&$ G N:>}+!%>y``P~Ƞ=ȠrԶaL~6̬ECXisK8 HIrИ);$  Lz @|RI10'2, J<J?oX # \"̐)&P{I jUA!y`lʮyMtsd1*CV1m6)W1p74?0S07; ?B  ơ <1@ yА@ yfWIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_2UpArrow.png0000664000000000000000000000700110133443742020347 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P0@ yА@`\ adP9$>V 001f`b^ /Ff& c3Bh0!r0owNbQ3~FfF{001dgP"EbwV m "b @AF@QU ?O:[u#Ch.4S#; TL- Z`no?[ED9[]<b`X[E'7!!'j5, jx*%@ǗH1t38(1y0s ?201(ػ0pS(0&6Rj9@Q `)ˏEUa$.߇8 o?>~b`Ǡh#! `~X8 ({wsT`;͗ARVm9ds) 0m209D]@28"@˷1|L߼\ 20==l!߁W /+Ehf(9 r2#eʐb3.@BZ ]? l 2 _A QFPUAB׀+|ؓIq @b?Kq%CJ>c`hp0Y]'tWpkp[l2 {/"*lPzKT.b  RP01O& [tLA!,q?aw>Ͽn9`?$1(Ϡbi&Tq@1S蕔bX0ݛ!,Pkin`f`{ XJr9;fbz!X| _&xt/ٱ 9 y$b,yE~@ǛK1VPr#0y9'2s':$s3fު+ Ϯ2`gж7c@}ۀᇷ &e EXXK3,ɠ(p%ów ? ?Ma v;Ӹہ1nug08b`aLq=a ,' -@ˑ2ʰ`',?S`t80 3?.=pe`U h38 ̤^ l}puo ?=LJ_Bb/ c`he @.1cacd`x'~ #aS 7/>a` xC"=`Ly2p-sˋ z ?9g3|< *r c/&@㿭7I+ 4` L`G?@dz]! 0Bڞ1 j`=,&%>(0|aF0 ,'p9 p{^m~z#HF {j@xV s0L S LN0O a`cb:T׆˙ĈkXd,4Y`8 JPs 40#!zPlR`v+aK`@Ci vj՝DLMP4BBRccQc@.ID>1a̬ ר kQ28ȣ@b1FFm JN2,l26@. Ji@:c>h_Hyt@LdjЌɌ> o`W:M!=F((s@rAr:D| AIDK8H:(m`o5?ndؿ"'+;`5̀/ #DThTy07$12k1"_##æ M lmV8P@ ^H~±@=mP+$`_njjvpn.VlC@wE63 [+ `kSDAyZˀXcdX@yXfr i,d/HLԌAAI,u XwAWH!'Ƞlio> w1bܨn ta÷?Aj 3k-UןBڠw`#3? l2ƨ8P&3|@q"S V -$d&`! jA0++S :2񇉝AHADA Sp+Lr@xxP1i0ܔ={YB|×߿3 ˏ?, r:j V "D{WWb-2fxtɇ ڐᔿ?1T[=a`b4 "÷cx *R<j,02 p7%NSID`1#Ѝ*x' ? % `r[wwwh ~@d@:p@xF%WFH}VoX26nQ!JkP;me@14gh{  (tXxpw IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_KGPG_Key1.png0000664000000000000000000000444310125245344020315 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@C4=@C4=@C4=@C4=@C4=@C4=@pD022 "10xո޲00S@|3/F@>U EC @ex /?|1P /20\`c`+"Ь$8W8<@(:C,0$-yyu4͵tLU10a:/'\ o߱1<{ ngqH ?xfh@@=Ș-(!6۞ATAUAL+ь?x<&g@[_Bh=7Ái&V%N$ M@SU~@ף/{( 90 ݠY#Pv=2Bz=" !}`[}iz6~!lGА!!!!!!0;'-IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Cut.png0000664000000000000000000000651610133443170017426 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C a Tϟ?~gggp2$̙3` X"@P .GGGP|&M=_^~~4P&{xP>61RP9M=td&çOz gϞ1ܹs90Sb@UZZ:=::pP m@ڵkX"f hV kp{{{}P0ǃ.\d!V@:f$'M<hQ 8䁞 ǀ0(޻w4쿀@ig...}=UUUcccΗ/_2_~!L=@(8;;3.,ـ0(+.`fcczHSGt >QQQ {/$d~2K F`(K@yzz2#;|=zpŏ:KHHH_VVVYF`P:,017> w+m0_o(¢gyyWc6L0h@x=<<&+))1b Az` Llٲ@32%7}@]߾CVVښAH@:Νs[_i,~"ׯp`Z#`E'CHH*@I T##A @z@b @,:BΝi11 |h+ )TUe};iҳgo}لo NfRp20(( 5*1P3իW606]-@ ;/##͛ \ LwLw2Ě2{ď 99}2n/aa Г߽6 8BT:(5j1CD*g28qٻwZi~S%YbAN?*r ex yс/O((2?Uׯsb?)*v͛\`Mqp` t(۷֭[ v(_x`ee/VA6N x7 c|e @=w-?*C|}޾eSSyw >D+ Lf22 VϞeXhi13?t1a7" J qP G6/3:WC1E6@= 3ֳ8* 3o~|( TTI+01L f|28B͛`@0=p# @T?:)*BM !`P1!ՐbXl00c?w=)b` Lb_0AH}pow~,&/F ȭ4@AE(ā宆#˗DM4/8T`RaeݾZA!ls@М )?WZ`o `HC6Z 1[tA}@[KKOݼ 'gx9LY/-=ILmo;?`fke0.f'n_,t)FԔX3rC*2@!</ ǀO/V-Ew~rO0{W2lx'}&Vg 4 xb9rm N&,fL>tj=|ȰB1=՝9C˗TT%0jN8G#@!F ѣ9G1+ C `z_sKXJJ>}r5|CG|<8`-8M5@nN|Ee [0%,ek2t- <|o咾t.AP:X3| ##+oV99_ihX~:LoG&Px`+%,Pra)0>P &]*`K% =6s?v5{lEsl0̓ jl <)"/K,vZ@@k6%<ז$, lBU6Ͼs?j ?`l=zku2@4*j1zfa!# ljm۷9>in?u=\_8 I}?rflycqp/6O}׽{ Z$!">@߿$@% ?'m&XO5gPs3a j_ @jPaA}V`sNFQٳ?fbԟ/Aeyy71Ҡ> lϼxxN>84M߾}1C]99‡W=pBJj'/1@u811PP`0by2_3BQ]lBBmp<II4(&6oʠ *e@1 (s 6}?"70ybD]*8!!cg`/ iV`'X4ϰUBbo RVWhFjb"}!㇕߿Js~bfg>] d6@0А_j@C4=`97u}IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_KGPG_Import.png0000664000000000000000000001112310125245344020747 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@C###mLdg`Pg```? ?~l C4F +"@n#?1 MGQ?`fgdcg L _}zzyo;@3zB hVB@3a``:/oMWu 8`a`fx0ٱ'腦A0 Xh8 //Hr5LL" S I'<_0} =*I^yh <U# D 7PG"=+*cÃ{ pb`Y peb%  /1v$**1؀Q @[1 }9 z@ Z(zDR4KAc94v"@G}z@أ ?exPÊD,s@iP1'34HB; ǣx/0)|PRy+}n2{ݗ 2>_T z@@r0|aNǟ}SY` P 7@Z0+3P5ՌG 7[u?"ӳ'vme}%+'++; 0/k^(f, 3#O^0ςr TmVx$ ; @}aVϠ['`(,R8lea ,6i\+v>f?p!n`+h0l,ʶ[ N?Ec+:  &RgYJz&S 0L '?V`>`aab Cag{) N_7+nu0k;; 0)sp1 Ϯ| }MHm Sew0 b, 4lٰf6cef`6WR.$8W;#O 1!cCQ:90X)!XU\vaڣ'm 3T%wp oZd:0(FXyi70C `9>OespSEL(M7 @0f8l!Ǘ_[G%gx T01tt˳>|ơc(ϰv1/~z0Ѕ8d> q@R(~p4BX80ɀ  .V`Y/ e?ꚉZ0摿`ÏB3,b > |@QZ0\׫a QpǃĀ)a)Nǃ@P"#xFh@V`Y:maPYH 703p 0ڊK`?zI kg x$F ov{-#>ϣ?CT#{!*kׁGAYAH=+~vfX3öIہVJP^g` l|5@!p_v{ ޘ'0 6d1~ y`|tovcASi`?T[, 2,ᣋ@@a){~`@jX@=@+02YA:pxY *@ZAQ_X9x ,.1|ʰ1Ñ#ah`"{ y, Ӏm -!? 7$Ă;,2t#4W`>6YmdXѸw;qdA, x7QJ ZO3AꑏВV;2C1'M 僪 >ڛfaw O3̯pW@o D;y,cP 4H#@ dt\_6|zI@ LRO03p3HiJ10':1_,C1sШR6`@a ByD "[b t=#1bKP:Ё#10w2lـ&^,nU\7dXP{{׀tAm."{ F&i?G@7̈ Tag< Q Z +fk\@h!߁HAR؄0/~UW_2\02 V\))@8'8@}d[h=F5j1P ]Xecx:0=K2%S4@u8t ρ͵/ZWfcC5mg>Pl6FA[y  AYk`> d˜>QNO]`E Pqe4ChtW`10\yrd~ vrv"j  ^RC0z+*ihȰAK5` )" c.X\zOԃ-*AN X t;@4G&FJZȽXzA}11Ȁ4 Le |@Cv4a߱d#,? Hyŷ6-HRCPܵ|>CP;0]p `hzwg3ܓdAO/!mFH"k CHH\Mj 3Eƛ^x+&10YA\&&Y =cA=Ã,Xh 4BtD8+Ҕ0dX0Q @Bky`BF 0~Ơ,\}d ׇl>@v2ZʎV (6gAwHIP 4g`5V?a h;э>) aWԁb<x9N|X;wi0v ^@]=nФč|~ ķŷ.|I {=4JА@(҂KtLMIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_FilePrint.png0000664000000000000000000000645110133505000020554 0ustar rootrootPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe< IDATx՚o\}?gI Eq%*YLKTQ;4.K4A(6m}K@"}p AF E. jHu쪑Ťgr>YZwx9~緜=j"}/=M?2:{v,A ^S!OeyeLJ?կ*Px뭟|2}R gphdXJM>_^-_SLhxy4[{ΑCx9?Ϧlݰ1)|Ǐ;u4tB8pNZCӇx7Y.z )]07[g׸u/_beez7ߕRCF-cMNNto /,gvvaB2d =%ٳr5Y3B‰'֢C֭.^ٳP_Av.$0>5::7Ɵ1?,0#IZxA)ѰwwVH8sJ@7](Rx#Ԓū)%R-gz?qw(x,,~y]Òh%dCIvA?:OVj')gSk H) "P'###9#MvJ!z4:́q bgA1~hZ"RvJ\cуᇙ=pŧu?MNNC}p4 &X4_yޓZf<'YՋD$N||7՚yVssX\xsvaffBD$do-K5hun:"UMa5J 4)e;LDH%+P9Es(%Bω&4&S78,ѐ#$ ^es W&>)aKjqbW`(B0 αo|{0Β9 !! Mz=VkϏ$!BA*2$1fGIp<5dqcڪĶs!YJ1 Zn٘( \*LӊV-'RR (lHE:TwN>ڄ@!m\Oo%s.b7 p|an~d1ϓWzA@7pάt !UE7n|g) XkI{Ig*A&Mirh h"B*Ƙ.)'F)sƝR(`aa39]v =CC8gÑMMz~K@)QRJ X)EQZC!'~4Mg!Qq9~`BaDZ2RRQ;w yfӳw4Vnp)cwIt>\=>1{G8̣h  !ƈ6I$Z 4+.&ٳ_=֪? |t{uA6uΡfff3gD8q8N1ơuҕ+RS0)%JxB\:D^|eڇ֪}QH)BKyy0Zߝ+ɵ#tIbE!ZkƘI)]@g^aqqJF"I2׫ܺu#Gګucu|sisj} ePTܸq_.\ߢ(z?fz!7~7{;wZ(w q.,;vbd"YfN.pgߛM =z=f||'kGQl6okJR8zU؊Bi|[~zûWrЮNhhgzyjѣ[K.!Z%!D*"|ȷemTJA Si.8HIaIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_KaboodleLoop.png0000664000000000000000000000645710133442774021262 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?:`4@  001OJ & C h2Y9X~ N=- yifFG$`23(e @2AAȌab, ÷_! 71-=L exLaBCjߵ FZ^g`0AzK Gf?N5" ,bׂ'ҘQ7&goֿTj*[`"A>eؾ4@_1S!:DB2\EK?2 6(^~df|j Tc`6ÜI~tEtD(t]/ûHc@-lo\~=`i~M-@608APˁ'O`ˁics_؀+0c PTwG'3<|79-¦ yovqc1Ui@Gp"+2V`9Ço~9# '!iX|p '/3|{hI'U,å py@Q S-4ß_@8(\9zʡ _;F^Ԗ`g! vax})l}:P9X \aCZX>k 1CR`tˏ2\st,>^+@11v Á_=ptYgn-m P py,& 2 ?€{pi% p ,,&021fs ?YŒ3>[x{֝c80o}U;>PR &fQVclA `Qہ p5AI~= )~O˰eiWހb;k5u@FP.˛@?ý[/.c67 '%ML|ck/3\:Ht&P ~Fnk { )gL8L m@zH0+`&; î-FZ`)mC_ πR~0253öMW{{`b9 l۴e7Q@ 0)A GܒOXj<*@,xzS/( P/X~/-}D>1#r<< ;~=Da'bÅ|Lft>m#I;wޱK`nZ \`RCZd  s10ӪI* 3dZ00dTqm8t`w 8 jx|=y\<9\z쭁{ b1{Gi 2r?yO1*@Q-Hw# 6o1/`1 ?08y ]0a1V ϾCR/@h5Udp 6a7}6Џ ZWG<7._`K6`ֽqï@cwXD,cGKPZ˘AT[J7@,>+$4܍^ ]p$^}0v֫@zhY0p3h90:3 s2|:7:P7 A=_$3 n𗕓G97.=``8aD*O2^i=uuk=I%q`I _bfufFxq! %I?{T3Iʩ 4` XT*b_qIqEK#)-%pz4 ALk \DDb :a py LX,r)i1H;# >C, 4:r;@| >GpaaO^>N=@(ANL&+@3+y 8pFca~y? {g}6 _q@@XU\M>22\ ̘`y  4=tYA~:E1ٯ0lZ|ǠLHhgs -=Q㏛$/&_`'x(#8UE 055xG/{pp]Oz 1 VBaW?3Mc@G}4RWS5A?/0ܺk`9 Թ/th2`t" &L*_f!⪶7@Q {Qh)=2""{RV@V>~7z' JzJ f6Ç\h p/.F&`/+@L@kvKAXwԦU`H0N]ӞzCD.$B=" !f@#sis r{d!j ,#~~|w 55v PX":Np@t)߃[,zO~MPQ7  j􉁵Cq^{/ÐiE~HbjkkdOX}2:[)@NYL1ɌoEI`V1`$(UIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_FTP.png0000664000000000000000000001310310126472420017314 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@,p02o+: 3OQ@1Ͽ{@M 9p[ % x {%U_cyE5%X%e%88ـng`7^~O{omfo-G: 󀍊0K9Y\e44 ؕDX8Q ~0|dxp-k_3<|uG = bc@Xi`g񻒕:@CDފՎA.&1f/+ JB@o@ O O2s 7?`8w?cx @ " v:812gPfaab ж :;;0[e`zo@?٘aʟ 2y{ Gv~ P <`Ŵ+MF_A=9030g??0Kb`w/;@Wm618[Kw|ʞo\N 0raZRȩd#щ_Af '031303S?3 ×_ VKB @ # P O[NmgaS O[poP\ 0a^ҫ,`Տǐ7T(óW1_ T'8G+ QɠƉK\B>feaef; ;8~;{ ɰ klԕM;i w=E ? )W2pCf _`ppp0p;?'?rpR`$!6û/1 v lR&,Ü=~Up:ȥ@a7*}Q3yO62J77;;.`o8ǯ_ XB߁QĀjΐhpwGLt]\N Ls$0w՛C0s q1J 0psO_ Z:D;{2|/Z7 AҊ7!E/a۲ J& &" @ 7?W;DJrp}sᅢKq3򱀓1,a˧ >eePSVb&%fpav(/}x? ?~_@>(O73x30. XC@z@G[˛g s`8(fH%I_  w?dx%>~pedo?޾ q?v2L^7_2*3( 20x]*bA ?A1\/bxu*޿x`/` *,+&Pf6 3/y{xGx~e\{ 9Tw03<{a]  2;o vNZ eʰZ~ ؙ'h:0򈁋AU`p9?2p01>Peó_~/&f&͘papRbV`J}ϰIW/0|lAComy+ʮM@jj qipoo1{I&`~f |b8w9T8UإX1<ӟ70VѠaҿ1O{O3\yz֋ oC$&!ג^\&߬ B7Ş=( HZ#- ?vaKy߃=s6afQkׁ ¼Zy#z;` $'O@;aĠ*?0} 7yeŀ _GHd }+NQ`# }X /bxW㳞3ZPd&pAu€Tq8023 0!SWR@!`Kyc>AB@@01 ˰1õ ?^Mق 1e)&)] ' `8=O`n3A<*7XY+?6``T ?'3Jg Lg s1ǻ lL`} oO=A"I l <l&+#ó߁3kӁz{ҬvOr|| h"7P5+@!< JL G0 W3=UfHJL |`L z?pi+u6>FK_% ./eIA s@-6P5@,HdE3 S0-`ڿ 18ҿ!TP^ j /Nj&6+ߪơ40Ocexq;׻ gPPgPg`V<@py@2y3|A>P_Af/6A(_)/24[?&0hu'~2<_AUKA\H?Pr^?#0AC?P `ǣ%tPӀEȠM?+LVI]n@0<9Cwfn>i1Q>Vǟ07t?@!Ud|ۑ_ Ϭ[e l123H8=,bXc(;[#ᠼX6`alr1 121/^a<nyA[K,XPJ e 1i+*`MhQX" a&xgU`R`Vg`>'+' ߀g\xX32pK4*Š,¯WjS?'~c\BSP6N&!Qcx`;X}aXzd;>a8й9̋2B @XCy*2mI V ߁BC+VjAHo @ B31e`P[[ N`虽偏O 44A3?@6O(2(JLaV8w_?[~rO7zokv7\?d? ̠fqD+89z0pkh1Y3=onqq! _=aRFDTDEE CܲQV5?a0Ѻjc@qIJ1<)gPQa a`@{g0PRe1b) @UTW3'زh&99`3"AA @ǝln`x LGJ 2 @?w09ቑ D`1kSZp@OUU0,]bb\c%Ir@6 ߃1S7o2<1bPc`bgFfDx =Xv}e9#672l t(3?? epr<(A}y${oʠ7m: ''&Brꉿ SS0ò1f0طX'RA/P#>ax?}60ٰ1E yM b!m.A ,E.43h3(0SzޕA{4`x&5Rk I! 0}} f ?0Onn10 1q32Z3&& HH:r&c԰`Z`@71|FH-P( 6 _^Rٖ ׀S0 Xj?K? r ?+J abF)/in2YQ;6GD zaȭJ.]0,ZΈf8#0 8] g+r3#'%\ T:'9`##)iPxjs:#DB PUICArVGhf &BPlLe c@8aJ]@Id`+(cxTP򄲎 Or?L@ X G%kO d&1͜ ,*Yn 1;d;>&Fm!b•?TVe4+o1qHc  t,[YrU9seãwo14ln|e !QIL @=4,H% KA +0|&XytF` Svv <g5󅋗~g1piբw™G5̜ G@+4%1hLAtLMßR30 t 1,eJ7c[Ăg`3*4*`v3é ǥ0M YfHxq 055 πK3sp053E3y&"jbb!T2b6 Xc91< G=J34 xYGkGF }E QGb!6܇!'xTdwFp j+%8t<RP lQPP;I#B&fH8G9l'$ q;Cc$"s)5IN6 +6IB`3~/j;ژ 126њh4&^ H3BDL )6@L8f)_RˀAEd18481X, {S{gDTXZW?M`пޕ }؄ͩĈmdw2#`6$hJeXR+$^x?3b=hȯ!P!ʆIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Package_Settings.png0000664000000000000000000001355210130241032022072 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@FFFτO>޲e-/ Jr'T7o={dwbfhSc֔G]VVV.{igJ<r80P܌ebXp˗/ >^F o`x5kJ31[ppК#GNOLL~TCgu?|?-/}:P@Q-艋˘jhBB ~4ra&O2 ׯeqm`z T ""W%% ik+3rpprmիw߿{틧O~ AYTTd䈈h.)) ݻ3-E%30ع:00M_>2ySλrb ЈgOqttvuk]vKg ¢ .f(Vc0g`: u1-'; GW19}w+@pwl`8xÆ =zN1(ͿŕwhDGGZ2sss1ݻX3>gc8#Cv2 \@0ġx,H1Ei{8~g̳bS3{NKYN+3*ãT cŰ XݵӇ@94nHLL \;;gpu~~/_?2څ 2 ǿ ̨ Rr.ϡ(Z30c@AKӄa 7ep3`r1Ξ89  T ,I X/ru65V̓] Ľ ߿axr{Cw1÷? K1Xb0 pßW~SWsF c`PV6`Xa#Ã[ \|1ro1ffb=yjyB X>/Z_߄7xF`˷ a1d$ɰOv ,Usy+k0\]5 0 I31dX 6Æ ^=``gO!5 o/ݼ@=93Z7É[732gW`z C3>w&;~ 70X[Y3\?v _0q30i2(*2lܴكC 6 Y=gbВ*"Cf'+VKFYg|T+. 5f 0ϟm3432!' (%T8,cf0yx r rJ +W`x"C|BCf9w=3_ ``WfHMgT6VY,+&ht78@174404662<#"uʹ ͸G6EsE00 d11dЗ+a  ,}Xe1 {1\y aJ A ,|J |o~~pK_~3(Iq]CA[C;o?^jK?ܷoϽ3gPdU" BLW8LE};l|grDw×[7yx>bxwÍWO,5;R\ \r xEAG׀﷧$Xi=) E?m O~7P[X w'3?_0(cTa`B " o?/= &?7~n iɭx"^8]a **<,~|]O2| ޾a'33H3|Xq_;dM, <a`aԐb`JN<$T Sw?`O˘OFy;>l9Zɠ ߁؃]?_ }l}gbd =A~r?3x/? ,Z!`+ۇֿg0O?/'|xi`#={22ç~<~)0gt4o^' R rBo~?,y)ƿ@w00&=2z)÷zpG᣾ O[/x;zl I蒸1ܻAH oeO ?p;ؤY+6a>>y` n8_T¤>w׳ ķ<j/ñ [~|:2A({[U2ȞU'`23)b)a lVWİcەϿ=wEA &/cܳ3?gg/4t9ÏۯIi;C[X΃ {wGrTZ܃6т}N6f&d[9KO>;А' @0S s ?+3 ҟW?9M/5#8E':dR BF끚pȴhfK @,͋oș  > ͼCk|b-@KN0 \#«IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Reload_Page.png0000664000000000000000000001013210133443444021026 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb? 0f32@5i@5&@\%&L} ?&3TӐ@m!dS:TD  PxG@$ZnJ xfdcаee9߿C@ՎZ@֘?tWmctNf`׈@X@'2o'88eaXSAO@$xbX9`U z@ X; 2 ӲN^8Tu Y`#0:]bH^#r 3`01UGxuR0,۽؄s##SP9B C bbdeab8\7к?C?_L gv1b|Ϟϰ`:$CϪ L*;QDԀx20@#Ci,52+3{$?O &/2Yę_P7Ai#7P\F#5/0Cc1'n2Cɠ TG@,8u fQ c󪇁pf`:QV #.cN- [F֋_V LwC`K3!7ΝkڅwPa\f fI pGM'b2~:`O&1E210|ݷ \$) ^qg@O E2W2 3N]: r*<|@,h! P~̵Ì 33/P%p)= Gdx#3!Ŀ) zJ xL}7Wh$If0T,*gW d́8wgT32FS/`@32LT .еiCn?~g`:A  Tc0 V V O?a8_>2 Cx<ãOwAlSdԬ& 2L&Hz XP3P90@@1 *Ф҆>`&0[>νGHP_*6cW'0iZ$C T0p|!qyE(! (~ڹA3\]HCB<  W^z=ɳE*p,0@eb~8{OHA LjHLl ߀P@ t5=H 숀`R@=@6(e`Z=`È1ojc.h;뇳D{߀t7H,W0۰s3/Tt#}@~v‡S .@Gu$:+; ^anwc(k`x%Czg÷_r{@P rQKqffXp' %0\w`' + XwаS!ʐXW΃(c3 X0:iax1Ï?Yu?1P@$ 3fK>'(dCas}O2v3ܻ{5@E% \,Xp(+g nar=C:?dž`a).uf!* ϡ`(` g 9;2Z%Trp9@ Z c`+!qٽeCG1;7CBw^.!_`kn|HKϯ 7g81aѮ- >ρ/Ǖl@n}C&ٗ^32LPP ,3o`S17cZ'Pݫ={[?_j <Ӂj'c1@D= yM:]Շ7 SjcUN_r7 ~+S81AzCL803f.R1r]sxڂ+40|0 X?`duȎv iJ0,[@_@+ ~DJwer87m*L`!›0> 1W3.79a12🴙2@3ʒ ,V=v-պ>=vQ ^`v`>5SQ_d3~<@Nt:,N )2l``Of@.=@OZIDATxl 0:6`kCԈ*q "|qӌSQD'A@wW,Z lSծ@U7p dOJ+SI}y Jce ٺ,\| B |, l ? /dx'Ï~=xic;J1@A2 F2b NZ$,f`&`.Ƞ TR!S71ݏ ^}J;4ҭNJ  {hPEꂌ &B | DhF  1 pfol#C^{h& { (,~-SRMRa2:;_@|xÛ nfxv-0b`cd_p23ȩ1H11=4K70Xsܥ7/@G'"2@3X٘c|<y>2}wn? " "B bb ga'^Ɵ~11`dfP3aec?v!Âw޿~4@Č ҭ0`0gx;_1;yA+,'30 'Ý{; 0Y2|O Gg3>:40*3i2O?ox Q@Bbf.ĤfI JKiYa'?phyGv1D 327, L^l /_f+%Sc`ga01`P{v30 2`fgpdz-GXN}~3 G$ Ւ\ l|| ?00\=Ē ΎΞ .0X f^AYҕ JR8pcgfg/`fk85` DX,jc`gx w2+220lݺASS\)NCAWXXAUUAHHb˗/0_!22XAOƱ[ fP`n+pkO?95@}Ev/@13C j󯊍1؊[B 04 CN: 09c X 2 ~ &%SpLrp1 0O * 1f.pC?Cj {A8 _ f3Ve O0f3 iP:SSScgNHڇyHHu q< 3B @@12_GO." NYQvSG>j>s3@13= ̴KdT-nfax;Ç'ʲ$i#AA{Hx"6w/ԣPjyDKk / 3bbx=Ó[oIi>н?@ &H ĿZMXû oWb}%TA8# C2*,B</y93#hfg!jX|>A>UOg/2|& c`cKF @@=#Ve֔'0~81'3}\rWX 6ѓ$@|ꍃ 2g_x=P098)  }A ''͙>r 3}l;Cxx 2\S"B  wO?q@E/6`5` w!ßAX\T;>p,<}ŋ j⁊JxRyI7YaϾg 8~d},u U&?:L%>à>C8;''<%ՁmF`l;8i /0+_2̺@f ؀no؁3g3\qކw`PTGlƔA[[a.PenǏ?2ܔaf0O}99!`J` pq ,D^dϟ?vpu|vV`373'@=l5@ rާO|_?`i"((0mR󂮊 7n`ყ30ĥ :d>.'Pr{=î93h,?ؼdy ؙ3Rl#2rT'@髩fPga UU,-]O`3 hP+0Hzl? | Vdd!)X2?hFĉ yxx**AE pA x+× r s3?X2q1pʊ1<{' R4!Wiİr%×ӧg7H;?C߁/@wP@zx 3×Oߡ ! 4{7͛2p7 (Qc'G~1+Y`'o@1z qo& ''mPhxοhx xr<\p=Xy 4t1k* h]zۿ@EgXN|g`g'`I ,+W&(=w,E ï3~fe3E!K`'8YY.^x 32pP=t]u@Abx4ý 7o>`X|铁ͅ`π c`(V;;YZ2:800x ɓ' e5k 7;XR* 7> eR<0Ƙ]d_mSIf6mLL̠! =P}IJ'9dxz+6Bo$X?0<X7;* b ֖6DU aMNU$ydC ,''j 'g~Õc@t_@@0313vLOl_@_3؞yKٶmavÿ `kiP k`+`H ( `XeCbT~xa{ Z ~}e6^'d lCqJ3hZi 1NOgwç^1`q_$C!bMfVͰy]`s]\G;v;`7aag) @_ɼyݘWZAFAVX/< , 1}bٺUP8灝/v h >d(H@.5P "" Űe{,}cd8{'Υw 4; @ ™Mh׳$$p] 'm^#co2LL  5ؿ, ,0808q%yf 0<&4+w?.ϰa#6IÀn|^bfF#`>qrH1Ȉ21ZH0|Űf[)fgw;o¢(kPPshXuA%Qen1I3x:u ó:;K(m@x(~~t6Q^)`L 2I1l\{ʕ 624349@c1++G&w}X\}=bd}?] \Vc+ 34w8_w ( `i%*po˗?`wPʕX /`vŠgg !pÊV/{6h)h,اA"VPNbð X9h31x00K20| gO=fLǬ6?' 8طx nϿ| Eex?|! *-K ˷~cp u%+Sÿ?2/1%uD?r 6| Al  "$,<,^3k?~{o /]V`7ԄL$Sȉ a8[_ @/Dc3LJf&%QENCnSKu10;d>ͱ#&D?o3<ضa*@ iLF60Yi0Hɲ11h)032H 10\쐮OݯA3Fwp/!9>x_b<@x@'2z1czƅQfbb``bd/?yT~ 3w2u@{B;P1*LF@t"S@6 UH~@G?׀PdI@e­ ]IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Color_Fill.png0000664000000000000000000000643210133443244020716 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P0@ yА@ h 03fbb`012ׯ_`>@8ҀM:˗/sc9xC, Z%!V nL^^^֒ &0ȀBnP _ ppp0033e@@rrr  VVV <<ѠER 4== b@䣣ܹpҥXgk@ $x0t[EDD***Y *@AAN yyy %b?:t 0 0TUU1hkkCP( AIDyRF %%`'O+"dHMMe8{,ؑ G߼y@q=(` (@n  @ yx.qY=0@^gxC0_lm.3%(*A5-(c<=j:Bݻw`=Z@1C @P ^`zn7XN [ @c70dz?x:` \ 1 Xkk222&( ʜ.9m$'^x6   ǎС+6{YV fـ%6U(-,%~8^k<3UkNИcDpݽ/DAaBY`DXf'bA<\B$ʩz;|G+1,~;w.X] | σ3$8 GJ:XuPm,, >-x-#$۷Ձ1 ONuYxxNKyx+$^  %`+h"'8@!E:n@1KpyԩS O>%@e! ^6Cͮ_ׯ*rJHH`'`yTjmٲ ` ΁ 憆 DϷoႠ9_bUxpOWl޾JK$2P J+ 1jS 8.c)566U.'|~23[-HLl翯_@-PSJݻ /k(Px#@K!P&%z߿E΁b%޻w/UhĠRT%&! ы߬lw= \4=Iȑ#p71l%1C\X6caaAmP=i@ jl޼|P P o2V*ެLhTu T`ڀ l35քĠ6lpuPdPhb6%P00Ng`Xs)cb lMC[ ,z Up*@lJ0lڴ VME}  Xe 000  pgCQ`|vN *x5@l /Rkdz*U L?JM@6 X`I 8 ,vP<(_!B'+WM 9Gvc\ vAw8ytH`wpgO |@i4mTX0;Д@:DXޠ^kFA=2Prrzrr3K81\0_J:q |@# O@$h~ ;HJ BOa YٖG@: @142gϠ΢, L,珧 ^c<û'.Myڎ%bD=෋OoD4e8EyDx9cd7û?g^`lk ._d7<@{c1?fI)OO3YSuQ&Vo?~?F04Ͽ 7|a8yÃ'@Ɨ[Kex~1ğ@׍Lmn|a@G23<}dD[ ( L?11Ѕ{ ?߸tG)Ý凁P ~mc~/mG=3?fdz?3Py& pu1|xu-ãE Vn@'@n *~, 7bЗccW`331edd_ #ԏ_Ԥ]q 0s3[ =H9 1`6OXdZ\íNPJ* ʌ@10|@&)x,,uKnNbxutI^دgdb鴷b4P`?Ûa~CDYGAA -&O JAB?<0*}ʀ61'91@*V4TLE~f`xx`2@|:;1 GJ bf|E&p RKY}eVA'd$T~~7s0Wd`~rGw/أw>f߁@5xLA>I(C3$+N,A|!.GuVfF1,=܀F1"g@e@ 0| lmgR24@zd23G؄CX0"J ʣsΑ ΀ _C z'΁0#7tg`@X~cbt/ #((x?!?CbT| H+\l?ÑbГ\d L9ܚj ,< \'?y؀3`M'1(v‹Ov J @؀j@4'+#c}?}@`cd` *V 1L L4H+Ph6~fl`ߠ,?)*!.!񝟏oll8RS@}'N@d@BLe68Q2<_ )U65=o)?GdZ(dd+_^i X~:uaǎ^x J: E5$2bC=R1aGNL @i XbdJ wb=Cev;Hn]{'@/EAm!À^Gm>3G Ab4ZAc/~~^Q&`defbJ˗@.jM> I)I㈡!A\HlXW""7/4B ?x) *Q.GX +' P0 V _X}9;` |e`Db4 9_VAJVX(@b\f`@#ps%~\=Ǘ`eF'6z p:/4X|h ?0@@zW ߬~0Op2Fh?T@CTgn _)P.;@70g?>ܹ *jBTz VNbz 9T}/AK@ٿ5 ) 1Q 祗xuyo03ѰR `3-f~: 9+XܷeƿH4,_=aP cЌŝ['u??<) #ת7aO7(#e(M<  Pǃ1~v)_A2J7< Gĸc J8^fRq1Ej710t0cOḥ,@ÒDzp6CrCJ4LQ- hOB<װOeJ0mb|% Ĵ!*3X4-fFƿH(2FH2Lg`y,X3R"Đq'!9:;O;Mkߋǐ?()1 f eF$ cf^4c}!$Da~MԱ O P /21]/d` tq`L:5) xXR99׷%/ue9^Dπ0Qb!i`a U?10;̂h:+0g!%0O10 ! A}dV6` ق] 1NPCc/_ ayÙ=e, 5b`o`F C̅TGll lܠlH̀ `&. ddRu[?þ _0X;=48,RAEO` Rn8d&|?a T@=  h-v !A܂ _mɠŠhT I|4 GJBc xezw1.)$/3X03~a`fdl ?AI4 lstLMLy$ ͼ.@8=Gokwf) PL p lvzNmi5Uno9{H3*;gRs_e~rŘ x/>}ȳR fDSKXŲʔUzvd:Ug: 8]6JXjbGv@# ڨ7`?d4xZs hgfد@`s#б >3fWe |h? u>YN֋Ndbӿy[ - To%P] f^3?؂gb{/fb9 |@"*k} Q#JK IIIJrAF%@y s Xh9 ~L bW~>/X҃"m7VSX Ԗ@| hjC iOZvbm 44IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_KGPG_Gen.png0000664000000000000000000001202410125245344020207 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@C4=@C4=@pD0220ğN003@|2xr;@a@ltoȮ#$fŠi$w7_2<㧿?}ϻ@20gg`!ЬTr= ~`(``ee`4Q:XBAK_A^ 1Щ8>~dx_ ~e8KWgc e O<@p32V+ʴD3h1(*21p~b``t4P",0^3@Pct Cg#er&U}؀y X|han) h5``C=S1a _S=𤛁'0 2 bg fP1{ C]3#yY yfb&&n02le_X䙀Az  $@Gߧ@w L;?:HB~F2I#ß^tE%І/-JCm^2| $ 0)=Â2(f_T/3` 8E ?&NVk(06 ]o30Z02pd`ÑHٿ" . Ma LݟPu`1i 'k0\E +% gÖ/ОKj@ &3F^ӫ@{8 !8k LN@6334& h6'ßw/Dx34dX{^#Ay = ^kfe[?;0`,?M- H<%_`gFȘAA f ׀K  B @a k ttC  WJL`eÊ a 50+; Cl?4 1`T~H-=\;#ϐb7#ܵ`B|2б@iXgY#V Z \5[~:~#r@+H?6"PA ;v#jPT1s" tO`~#aJ`ۼr-xiA]iW9  @ȍ{yMVa@z o9p!雂 0$AG5 *_dD1roH@< ~pXU Lc п : ^eXN@Sb{a!ʆ@@pD12/RPweu;;| 21xիW ?ퟗ o}b`zc?2hntgP+D,dx-oh ,,O%C^3+ *!ˠ(/ )! ,`6V6,,L #_&W.~N6P gO-+  VPHz@>`Xd_Fj<|p9-f-ac,op[A11Ann.?/_o K? ZJb wd>^z$; 16s@ NV`'pzp(ۈ6Gp;?z%-R D)$- /_|``6 Ņ! -((ęx1glNvv2 䡶@Z"8< [Re. ?:ֵ@pjʕ1H z`eo/V%>`{Yٟ_lgdbʠ ZXY98lz2 #m$)^I[풆 _~?F&NX'N* \Pr= 쨀Bիw W|'nn`l3pqqCg&#?<@1Ll ?fxe;s;l" ܒj2 v>۵Ak@_ ԣ6 PBr×޼yάR@eUf ZV`s7TT@r;(A | !)\ nc 좰G1F3cd8z>JKg O@ : ŧO`ś7/%\\쁭 J Ƒ@D=]~7 TS2 Nbx lj3@m[`aĠoms6i00310s%1h??@(P0_} KG'ܻ ^YYÇO$I^yR#>(f#S Ov3W08g8Up?o *0:u?}gx8-?pCڀ OB'()Č~C~\ރ2P`;w^0x ofx7çO30Y7F.^)Ko6,3>=` P 詙 sXTUМKA7vdoffHO cTpRJJ֭M@Յ*0p?#6̬ Z҉^Z1AK 8(t1YR̓, 3pY38,c^a`vd 'X2.]bߑᓟ?g123j2X@e>uuU`.(EEp J^:L38IK0 1'sp>á& ߂no;BӻXV0z/X`ZaPR_`qrr,F-J!4У??.1_ $A7f07W3b`2@: rz=S/XFkg N2k!܏SrNPv`y |L쓂2_%*6pWPXkMRV0pCa_}HhOA҈A@:w]?) r1NϿ?RHݟ?}{@gF..~10lѲAR,hAI?D)p^a@H1 {Pgdd1<ˈ9`ƍ;:߿dgϵ*R`e6ic`CI~0<=h?\y&fV?qMH%@!+ jJ22 l15A QC޽u00}O^V?qd%+°Jcr87[|;"M"D>ë?9~"C4k ld .]=}ޯn1|98fPYɃ\@ t_ /fxg`Z,Bo3p)\u99[Es=cbt6ß?C;28wERh)H7PO0?G&VB.Vo߾}E@91z}U`j} 6I3h , I2b`xpL?óhvp0~N+fe^ZLQ74lbl1=a s;iݻo޼5mc#?xXc{ d?21Z4lQDBuCȺ, n`xne8paBP+x?XyD8 l?\cAkW6dxF$:7jd)?{E6+}_!`L[0Çw`=?~|;O(L`6+foaj+L Kab##-fPAթ4 i y܂Nhc9ԃ-R L=@jH}͡IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Make_KDevelop.png0000664000000000000000000000616610133444030021336 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@p02&+303&և Y=  $$nqvbP/4J|IJz!A1I/ /`͉X @,g(O`b C|<\*BCf g``8=-4` $01gfb+`$1" d0,`bGQőC },v2L,`\ jjA[>  4%7fG4iVApP u5QtbAV~b-? CI?ýT„kB/`erSf`ee@gG^p?y P?g4@ my?4c<;{#Q_߽V>߾]//33[X0dx 'JQB$ Oy# wee 7oDyTxyEDΜ o_C=bb+bRr&!Bx bxt(ã'~|36 _`uoX>es']??IȍM $Db: b M`i5ueKϫWՀ<~fE >> l {Cq~aq.ÿ/y `*Ic qõ'l v<$ İ$ g"BxIB.d]m-??ï? v?V6FiF`-@#˽pi|+k-)LBAbW ~/[|'`X}@[48-AX# >`c/Z^(~ &(4}V..f66AX@f0Ca4 S3\߽ Q/ $JHI  (| <Z UQ 2?~{`7֯ex#zfhf+CP21@!yL,pap[cP77?E%@N.+[ )sDv``69ʂQ|;`y<@#qXLK aRr 4[X10(20101'%f`f7bg7IH44<@,(yȚX܂̢ ߼c$?޾a>zo 'LF#( `He p "7?@:z PK%!.`aaMp`%C050DWeXfx /Ȇ;?$oԦ@8%Է0.ee12d`}3(a a`Y!5 pFD 637 ë<xĿ$R)@L9R [m=?fHA|Xp? 7a!C`ZtCĨ51j J=\aw<,-VX elm2e>ȼWpP>ا/2|6R!jE &RҔko_gVP#/20c }3`F?3oík4 ?RlCmJ ֘c`@w?!!aఴdxk"A: :`X&W.1xۃ * Y  L`EI>Qxr)@h&?M|Tp~` l@0?mr$#^Y6`GƆA9%ABI~HAu8zEڔ@$ˆ.r, Wa/`{FCῩÓ}{O&`Hz0iVϝaɠʠ , &~dx?Dc~p r?{Ü&K,PlHza! _ (7K!~OF8P+6F(4, Y:J pe8XRJ 20 ;Q>C< @Ubbb"" BB" ,, ~dx޾}_3ⓀyO < aNN70--uAA~vff&1| nݒ8spÓ'w1r < };yaaAVV&O_| etzb-=@LDz??ssӦ- `O?3z(: hb—ly?k]PgcgX`bbd+;;3 ߿'€V &j`r߿0q -ao{ ¼,@0cABBϟ?1@1a)*UYY"|T`߿<_a{knp ř`{D,9H[:b 0<F@@YKK!<<Ƌm)~:@i߿mϞ= eb̌ m EZx 0_#qpb`7;py$?~'߿se'!P $6$$l@@)F% 1  ?=/ȴ0|ׯ߻wϟ`23,@1Lb" S@`0tR~\ڸ8w߾uP 7TEI`PBAfb@6 ;PTÂ<e?33H מ=d12S166Cs<$ׯ_ _~\ GP@# 6\{?7_|\`/P^9^RR^@<NJ?~ ={7di)rT^997KK'55M11q`;TB\x 3Ф[)S&3l޼ 9\L _xb@3= J3v+9 bcVܔ%5 Oa:u Æ +0n"`+CHـM+T166 %577}m`-֬Yr@x XHJo}>f M+cD;33Vě9PVV#ګW/ Yb@LT+n-ؽ{E2ܿX|#T< ,~8E,@1Qe`~҇ J>S=7 5@O,z" 'nJk]7o&O=&@#PQp-$PTTFPL H<0&WZpcΜx+\ }Fʨ: .'H6KND@=LNQ+V{ 'OނYaU~0ObX,cb<@4t, ́K~8g4pGx J:Xsp22$$dc6扳x񬫳fM&?(& ߿`xlK= ə?<@449X fk#%!.m- uu1L`g͚tcԉ$PL R" 12v v9a Q>%3\+ h{ ?qy /(:T^?@07?WOSN1t!W_Sg[EI)V ^>QQA.a~nVIAeQ6Ev!6aVV&f_?=>b`a1c>3 xa`+Р!SPVmO+7vv&AQ1A>N.)A6&iAvq6I~6P 2q03r00m4С_oo= !age@̎/5,LJl\  .4ԁ ALZj  JzrҟRd&(|Q:]`1??|qq1#542 ȡh䂒ct%ٿ8 ,1yby9AIM_Ki ~OcZ0H3"BK, ŠPh B+x$yBNfbcfcbbb`&w?gvg{>3ymN $] ="A3R 'A4' 74;7+#+P X_}3:@__o=~ىIh((QZRBN + E1qa',,,#? L< L, ?bGPv DcO^q?e8P߀H37R-!:HR2gj$ *Jگ_ :?30d_WMz @d߿F5)@~l˼6=>+/ p)S@'QfFDt4ƀD ?:"+ϯ@7>8ۣ@#^~=럯,e,D (~ ^g!Z'fg5@ }F40Ty iwP!ç<(/__|_Yi+Q?g{@sBm u4, ǁB?fG k(#K_7 ?OGBxǛW??y/e 1.`47A+cw3EJiNdf&h(3B0!, 9X,"_gxp>0z02Ʌ n%2b{o ?y;8ta֝`|`_D +>Ml0D7R k'2|i??=,X1~~P_*qbb@W߾;8A5$#0=za͉n2$Z_8uR~#xXg^2{3L ;C XP<+з;Of,8@(CZC E`avɂ|@J-,RB l:yar '`ŵÝ~*}BU 8$A}S0{XG ]PLA<t'XL Vcʑ  ߮  ?>+0oOw(鼆N>zßX@Iĵ)TA<C`O8<ghfbfUbX r҂׳lX bۣ/OL c`ub@BK&x: 0X#- !xgo&1{ Pd`q&k??~? Tקo^+w` G:^fJCG&H229dЌZT`KB #23da8}ANAAKE >gXf@1xsW_?^@2\@_PQ bAO$6@ 2 V:R fb I/ |d'׋O[5bH_( `c{a%0.@\ %PL 6+ $3f`y۳' O9d 3|+2|ٮ@m <ˈbb *T5 0/ndJ1K,6&VVfbP_߁u/~?y >]X 񯷟~y'?]vc LBf&Lt\dĕ\ X5VNfv``6tXXC _`~e÷}~BG_} 0xl}tGh@iP}~!; y$=gZ J)3| о_?0(4 닯v@!0}G_o> _P$T"_А -2P.\ŝE}?|Q ?1: @MߠQ? '@2Z@lP˾EW$ߡDAH+gS`1'4 Ɂ4s$>@C~ h{ h{  / }kIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Error.png0000664000000000000000000001057510131211552017757 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@CFFFr55CLcׯo߁*!0G߿3qaϟR76= AdkiE20,UIo p>*D'{4/=w>d?jJc9::I@6߳Xx[!! sݻ>l*H'zY]#`cϟ?p 豮bepN?&>X>}O *"F=Z@ )-ϯ_2|ga65eaa+fb%_ fE7 z S_?y۷\N3p 6AhJׯ\bfplM'E~C^NS+м R " DD,0`a `djE9R#~ y~nnX݁Yg^2|z揸8~`Hos}&¼$ _ s䊊vuL?G.v@@yvbnhhtÆ&ϟ3? dc[@7@CU''#0Q>xCQ?q9CXX߿Ź@G LFf3rq1()1{A|EC-E30*t?BIBYX*UK|>0Z*+$;У6@O upq}bb@O.tWTdx`OLd'ß5^^OOXc&1=FLbA4&  @Kr *XX~qf;YYvv ɂ̥?F)ZEEE~7_VF%\FU""e/?@G3 1'fƄ(##'~5% ~ @(ϱ{~7!z4 d( LhMspHS=8OtKHg;7oH=* \lB+K8_f]6[@@_1p13H @x z|=bP޲ Q v0'33Th(o`xk^&2`ltINN;G $ǨƠL~ F`)-۷Xđ# -B/+!<В_P# 1Ce fPPVf8Tw`ct)c@$@0Бkw:5 V'7=t4@6+L+`W2ǫW-"_v؁"Ś_(_g’Am]]T#Z/+yBWw/1 &b! y݁i]ؽ yJ,Rutt%$$&{5P@c@[W xHko8*1P'`57,tuAMI/&~ef{_7212neMAM?副,@A22 Sܙ}@ጁ\==p:Xy`Qˠljsp0\ֲ_8o@lK:X@a4]]kv|OIAk?CDXXX0hKKK7ه k 20j_<&-"q<;JUC~gcg`L P TZYY1?rDٳ Q@@(͋v`a&}s<'W:20N-aۥO1JNёA[AA8)(y PDžj!r'Y! lϟvkwn|댜6m3 $-0c?z4jATs b Po6AEE.K9V셟?ƇoN?y XSف*Bv`Ϟes` @(_wTeerrQ8pj0ǁQ{?߼9u7Xȟ{[͛)ށzfX26H"9 G|y(P>tj Л Ls| ῡTÉ X:p߿_޼9wpN# K G` ,rA jr1hx#0=zׯ/&'(_()u*qs;f@O0Aɠo!!`yn!B @?+!! ;mmp+ x`f8 t<2|t^`s46 r;@ЀlRz~vB=pW\8pfgvaf'..bL^ X,y uA@둁cO^SJMhu`koJt'< *+k7n0g` wKwP~ ~r͛K~b;cהLQX_$4܁<>1+t4 jA|B?#tHA4@C;a b;x=Ă@ 53( b:tIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Personal.png0000664000000000000000000001111410132777116020455 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?PĂKd1i+ 4׷/~v'cؽ# F\1@'3OV%J@݆_ł[Zğ@[ ex8Oڿt8-$9I1MH2W `g` _@exw㣛xAO??E8T!bѮ.kt0Ё1б?@`|__2<ڿԱSS}?I@큣9lIsC!" r<AƆ2vl޽3}{@99d1>Zo%?APef``bbvd4#Ah@t<1b& :@a)| 6@dyF1YWrA]L:C90t!b01#;P9P8Y&h-f(f L_!eڿ IL~B8HHR?%T  8€V1+ =/a I#'"m93t?qi3Xi b@yu@˭"Rj?!E%{T ؀xxH,_`RbbPUדeg H  <(2333?!"rK$O<ƿ!t`*2p1+b@ @$DXX!!Z021#?H}j2{ ~YYX H_Y3g:rdsfPy?~C=IJ Cï_?4pb2H`QdfKY!;xPavz?e}]0T']?"W|)5RYfGgUH&;晿~ƿe˿o~}&xDR&[˳/~ C߁l ftN@a3 ?={ړ_/@@Z{ӎW.=9!!"r4 Xyo/ ??fT"BP,꿀i+}A 0l: ğu@0T=Db&4\Z/Z~AJP ؆_@Oybǀ.#b0@xA7>f1 V2)XSBcE%0 *.0*q~6??|DrF<7c& 1v38 &%}Hq@1iK?@v+{ۆa6UC-:uhkּ41")OreX$9Ó?'1W3~ _\b5o} ߾g;|k Ͼr3he漒Ww2pFF%719>kAk$Õ;_̽`b` ,ˇv2\ڶ..q_|`bf mܫ \epqdvcXCt)H@4?ZpL by̐ (p)qYnff`Ǡ53] &``8/ؾ-8$\Ha F Ynlpf{ہ*JN @N/~A^ɹ<@l=AB\WAQpfd/ y#*cxX%}{ d) N XH~A؝U`dЖcct`~LO&X~8?hg zyҌ w^fr+ ÏƧsd~A $$ĸ2L_cPTVf`ᣰ0`SIN`Ǜ31@߁T6 /c*;UQϵC: ߿#,uX8Iы bPUg b1z+0ڄK`1 X}ecc```X/@У? b -ګi'c&~Ow@͍̃)?xXcԘ</`'ٟ#;003II1Kw3| q8 bȼ@q A/J21(kq~~b.'w2HHp3|y y# $bf`_`z>H @h7; -efVKc$e  珉0Ck `8 #fa ,YY~_~ex%Ļ B OճO`?>}adT /P[X0 $? @8=̤' _KnppI6~3|X-Fg}!_^Fpmz``/o@;xAHWJZr y@|} 4?,<'`r`fdPL2|dçߦ‡X'L f|&9? L,6't # N$hV?3o`MXȳ0"%w2 0h>&PiC@Жg LN\p/@YJ`tsr 9Ф* ϟ0Hss[b$'c 5'nJPS`TVb?330_/nBjT3h, :FAHeeu˾Ӣ3,0'PK:Fk[9ГaH-"1n1t/ˇ3|3{U{R #@?@g+g/UggVce`,,FHF}S;@ '}; RX%-h'[6XƄ@b-!U ӻᦼIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_EditPaste.png0000664000000000000000000000522010133443114020542 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< "IDATxb?P8=@=`i2900Qdtg`w~A7 _~oF?u/W>ĐC_ 3 S r}A џ^0=OGUVԋw gğAw~33|*a`b`WL@?UIFZ?s#xI^_5Jcb&Pe,@23(=esaM;n/ ABT2AB7cI" ?H3ݷ7 տ T HB< 3Y&PTE- G?0l|1@xc#/i@#^=IIgY$U:Pz㘘@Dφa) PccB3p @0 iP3"<2/иo!yd63ȹ,?-8@! XOqHr$27gPłTHAv nb[H)xaș9V0n@( 3 "CN6e;(ؓ?L1G#\K qIai?\aq8zA_hr<+F ?؎?Fv?!l/̈́G@x? HʔÉI6j9M2@k #>,II6p5P[ 5 gbfz<ؒ_,lV70ȘDKɈ9 xǬk\&@1m2gXN@OZ螇QpMwT`BdbЀ3#F)B@txT0pM @ITRb;O܈$)CEnC-b #/^T_"DĨ#ig!gI>3s03^8c_(  7u z& B1@&dX~"ßfF?ah)ҮBgV^E?l~킖@EpM L+, e?!NئbP h6HW E)okx@ďfQp=q? @h+Q ww \ (!t31?( ,-w 0{+$PC3/]HXЀ{@9SGO$1`v>7hMXaCg Bl!V h{ h' ( dIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Redo.png0000664000000000000000000000476110125245344017570 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?0222 X @,=Zf}@C7e0@ l@+HA<# @ 02t,[ ` {J z 8%Z3E3(q0 p20z\ #kLd@9$)|z+Vзec@\zBqys 3d641e{0p0*C߿7?}ZI }`O#n` 0|r+6uϟ7EXPHY u`fUְN.py泗/7eA _ \1j{. uc/>3L/pj( ˗ˁ!fXTX8\~P=c'Ȱme}̛/_z޺%?!| \Hu=5cX{*FP΃x{rf "I+dfd8t!k`={ӧ@?B lX59)|F/ -Zne PbT@+;&oAvHB j ׏?> 5- ̎,/P/2t@axٳКwPbBoF~gsB`}`6=@T4n@@]kd̨IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_FileQuickPrint.png0000664000000000000000000001174710133443136021570 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<yIDATxb?P@dd&IdzHPĥ _|"FFƽ\|:@c?TB(@FF1LPu/#H@,dh&9 or@zaas2PNY <dbAX@I@ES204?d/3J  L,d $#GT` E+(g1,.`Pc? k%xaµ 1a5Nׯ>cef`gg`ff{LPF fje`<t#?Pcdg{ ߹8ɂa., A/ϟ~ *C@L|S?=2+,hgd|`0rav b`ta,Oj. &A @211 X  @)o3B <<`BL@ Qȫ3T y[ rN`8}Ciu9íE $9}`AnCB >3@C89111~cI8i13G:/ÿk?ˠ``nw $ J?>N1@1%ûw?ؑBSg8~dPF+4 (ñ UؙX@bl(߿tx`=2o@OgZ9!{u ’@Coh0Ջ 03XezҜϟ@>p@Uop7;6,C Amg,ɇ} zO21;XABvH2;OW0 Қ <@r//2tA|@Vt{|w$Od8_ cZF`R,^@[ n?lUVV6y%0F u$U1(BHv3B ).`l lf`a`PbaRRW c`YYYNc$x͝a+**,-- ,,| R kl`PS}(f"0H1'1@Af60 @޻w!11^ӧ2޽exݻw^zǏoǁ1}Ăl.KK.MMYnn66H n+##` ßd\UɇZ|Bz`aetPZFj+Ng`p+cT',=\k!'N yA?Ph+IŠoJ^^1:4 6?`t2|W`;#fwo3{e`1 .z b^Ȱ{7͉ ço$@&xAYYASS֞ѣGW:d@cXa97xW!0 ?eU`cgf̰kJ"  < "vBZ'G/Naa7ß_ ª ?0zAT3/_%`X?Ͱp2@%@@;'BNNpʃ}#4?aofGx"ƿ ?c0R "gx1e)%%L?qɁ#`t4,ã$v-#sC4}{ 6U 7}>h20s< Ye{JA< 0p0Z .\r@288ZkL?`t?bh0~ sleĀ7И2wf&&C^;0i3MXϿ 8b`:?P( σ:_ prr(@=`Ka5,o` qexoV`<G2d?Π2 ؘ 2]X /}c8#p=0Tـ9T/S@ \ B*K`h.aa!P`@,*" yAZky 4SMep-AaHE;'EPb v];͇ *⬠d t??(A^&!&+!66`fo?hL>~) %{ ?$K垗 _>b/Pcܬ ?Wg9_ԿG˯ ᄒ 1:/_ L ߾H2HH00"VV&zCE+01<;&,CģU *d=l0p:Li`X CC`b٠JҠT r_^o &Fb7o>s<; /' lpK'6` 01|pPT' Ϛ2pJ0dO- 72tugft<3 fx]،Lb+0~` EU?Aibb%'Pӷg9Dd~X? `4aW,F& ~e%E3K2gfH.` A8ío^߀/+uy[{`ccw&ŗ/?gzƁ90,zL&vN72k4rڗaaq%é J= %xXy `,y>p_h['Q31A  5 Av`FEBl%0-~ws铉Xnt0H6~ǟ 7O33b74d` o+2^6hb{@! n6#0VΜ9pi<69OBx?37fXq _& 9h#'' C*+]OX@Q Tu?{n``(lR^ua; o_ex)'-O;rLRׯ@| b~9%a> _QQ1p2ؚ!촨Z h )}_~pnga z_'dݻw?~ T20ֹ*5FpG bǰ> -B5@Qnii?A-ׯ&  oUc^ n˹sV^NBh(.'(oV >xa} )) K}}p2u1u!w L<,å |z#,)i &Jl'^Z޽讀息;wt0 !!'ޖ%< @ -X!t ?Med`hc/Ax qPڗ{p:Sɱc޽@=za &πe O.dʕ JJ`1H(Lbϵ |b g5:÷|k+6FȬ 9|fp3tc`Hy;@ys[NĄ(.No3',5yye8%cVXSpqT7BV "U 9=K6JAeCLaÆ?&_|~ ,d|0+ĂVeee[,aֿ|Ogc?Dt_\;PLLHاv<Es

x0ݝ!ΎA?nb I9 ~̔ v0<@C@|i)  lC21< {Ob(>pxf'!fe`q0 C`rC&P,;;Û7 s`=f] Kvsrs'L OU}TXa66 FgQpO1X*<$O,ػ10{Xg,(莇^ eAz ɜKp0N0T~Ȱwn߆ GH O18q8d /0(c q/b P6 ȞҜX]\ `0,Ǽ87A@Xh^`Q R@ `aOc`@ [`db>002(CpB5@J!5mmHu218 J!.X7Coq1X*!'`l|x1C10qxb$'m @0(20| ia.3]oa!AOpk{.h%ɡ0 `t)#@LpGO>80goANL16`|a R@ XPBXbrV$ڷ7?oLt<0ss!`㑓` TB9`IB`PQ RSI 7[dST˅t&h! # qtB*P@=a`!@0ISWcԮB}b=@=@\/3<6E*1P } 4 of38YlիD8=p Gr $  .<>A 7l3>c  ==cP!<yV%/{ F/yᱤ$Q5,15}}Dx_@* `WAFoKKK2Nx(xҺ@(8̐( r|1,PE79'@u]$G;K  a`8+)`o TO3)7) '@Q~4` @1H@!6}ϘI)/ 2<^ P5,s%Dq#.!XDg 2`+4Ăd_"bL_'+A V4 @Z@8<O {;4^6vw| R扙Ձu  030Pf M£IfytgXl ș:L6!c b Iy[ |`=45#@QVBXA!d2A7 .8̬C< #VA#מV̀E//zJ؛X|7XG4 Fj.%1hf" !`!F~IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_BlockDevice.png0000664000000000000000000000644510125245344021052 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@C4=@C###\0?3@ @{6 o u ` A$0D1kw݁koK~(0wxt oT0d`(2!Æwma`( 13blbk'V]P~̄ pA5Ե`/,+õg?w_304#%L Q 2@s1@2:176kFV'UnO9:?8=@p,z$ vvVK>}33`TCw T }G0l|` b`@ 5Envn`a9qT*  /Y|}<@pbd;J&*)0KJ- (7c82æӧl<C3Pg{51mΔ?%7е CFCf~7s'>{ 0<tV< K(20|pP ؠ+x~ A 3#o e"?cqpYSW7cbT:0@%`Ԟd8[pC dIEF2++-Ȏa0 86N\Ȱܹ_[޼QC w)%@ePGfDJPm ?.0tyP0 ,JƮӳ.,d`abfɏA)E 4_XXY1 Uǯk/N3I|c 3zA L t.0'{w].Eփc`ٴ d1 t1#0?|=v/0/ #00nB6 3̅ 0r3eadI ~e@Ch(0*@Ff 0N`xs:8֙!0},(SB+.t/@%] ~Fa5 @1!ca:Ԁr<`+AA Uh:(B_a u,3؀s u< D_Ԫ cIʤ[20\ L`RPPL.0Oᾯ$C:K,2#bYC0 Ny%4Ԭ @( g`>ё1|y8Z0!TAE!K/YK C !'~dhQ )ASy1_&,yj@@]nb^߾1jz3|͠"/+C0fN]`8!m~^hoA@OBF&"{P%p*D!B3|Ji iZ1(I0,a߁O 1HXP_H &@p= r1n(Y%O7 ߀y!0@&C!#$~ *p;Cor^g+!Eo`7ĄB`yo' ~fUQ Q - D͚_PPZI?pFAG?Lkbh) Og?0ibBz`,X{'f Tlaߋ0V8!s8f2B;g&6þνgc`feaGsO00,>p>C u|S@,hz^3g<$D+"FPr7OV3}PΉL(9t3`y*od˄м X"]g K3U@P_dVc=uNPPNb:{ {n -j9e,Ll@_O3y/v c;T O>v֑3_f&h'0o[槼fpx x 6%De= )I />|~'QQQ^^^`Zgbp#3VT²o&";qaks3@(yn.03C#`ȇS6ƊO*3,ةy+?+76`3Iqfe_b|zá 7u\]xshuAIhq( !NJB|Ԅ=X>< lME+# *~tv࿿pg{ B$sW4@ &P03N@Ӏ5?2@uA z} pzߌ/|v'#ycLP?.?1 7gגw1f"VVh)qB`+9 y孁X2RB6&`^w=@y (_~*3:n"0Pw} &̡գo &gb- 4/.'B_ z H@77_,U;Cw(2'q:@_՞e>cx(V Hxtw~A<ߘ#{ \y.dd8thPp$7cz he@z_2 _$9" xn:s ^V1Z0w&N@B9C >`x:H@mАb!!!0=/^IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_1DownArrow.png0000664000000000000000000000463310133444020020667 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< -IDATxb?P8=@C4=@C4=@C4=@C4=@X=h2HUq&sJ2133b`b.`7?DfP@Sf21h 2@Xd2-Y s8=.*4g2by)( ȨC7 py Dq3p2`F)fE@K쁂߰{l0x&fN.`D312c; 13lwgWb (f7 hn'J3b`Se֑ad?@ S`B/b2/~pK.v~E caa `UdL0&၂a1]!r?C4&`@11@?F0;$32TuY{aGXa`w`4| TC-C) HS0&F hiA hB? lR\ I @ _⯟0|}/bs*@1XNnRaރ 6 / >Q`бCi 0e Tt4`dccehJP`mHYJ2 A7` -4#29 p3P'S,;뻷o3dv`x78OUe߁} !%U`_ -.D2^2%G!Ohb0}߿ ԛwS \n?'ϼd9L N.PEG'L%5I PccDZAWGa%H: }d;pL nv534ͿN  p`}Od``, `fĺt1e/ðPOђ0Z iP{- {d1CjFAiv [b`: h4 e<g5QYAP~ i@/f#(ð6ë  ?b$M11Ș?`߿ %1\X | t,pMQ!]N;/?2{pedm|$TL̊}͛ e/2< AŁ,W 30) s3XKJP 67\A5fpfM`ieߠ  '!d|hp'k3t-N)L5\,wdԴi؞b`eBǧ :(20 5 @,8K!` Ђ y>cge`:BS O? i[UC/0 )+i" I sn`@Ҝ 131=a N9n`V8O-( " ̿v/Pc|qydL:@pa`Ɣr5qO+W`~(h9%/r|Nbf~t|, @,0+p? SVcx/Q&%``-F@ *GK@9=2"' |`{ƭO s6=fՠXXp0@h(V߿̚ 9> L /^`y=8ٰY`մ<4j  $D+cū_8D e x@a؊~@N#vkA4V`- `a~ $6F#!@ԎPX`:/(_ t)U@G OJG' @F;S2H$hTW})"RrIpwsnf Y{2րWk]wv>}F ˁBs!NZd`e y ~R@L$#6%ba0(^ f 1iX$)!A T9YJq1LAL\N@ h*0Cxex?Á_&~ XϿ$ X< yFG_1lLY/_?g͠ΰ+ŏ_?x %fx/f&Fc  ` >|ͰganIO x88xXؘ!Xb';` 0hgp'Â-Ɏf@1*30\v8? ; ?i@ gdb`̫ l _|e3ׯ߀;W^p ý)@]30wsW>1\" lJq[W)}n?~p `1ʗ LLL ܜ ? 7a ?dcPqd8r C?Pf[ bTp;g`db𓙓(k! l#ЃOXX I'T˷n?yp]?n3<{pû_889@~1'X0C0^c`p;O3Xw f`e`fcc`_߿2y>Ã'չ@=bs@0?G`p2gxp Ã$ uXL20([0\}a} t_pl00=& 20H3pr1 (W=-`i?z m!bbfxß`faxr.ó~KCSC`&z{0vfr2;"3ۥeDDxy~}]Z VdV6VVv^xx9xp @00|%$+& ,$``l23x gW``x%4åw8eq<<@D@y!nF`뒅'*XG?E/7Yy/1?0ԙ 7l-c@3gBjë "*👝OÉAX7`PY5*{BHAJQ(f`L0=*'% `cxd/?Vc":@zUINd#WK sO_q1Rô "u-ePßAKWAMM̞>| 8TD9}`???ï?Bl 8ce0WfP6'@S]3Dz@QA[E [@ nQbWV/P!< Po: ՠ t'öT\ * C@K]@ XV3`aP7?`,AIA3ıy HuA%Io ڪ \ @q@h(GفҼjAa \bư%!b!?)tI5'C Z _% DL 00 ձ |12 XHضѕe(0{UdL~~fpl>D` `? v\c*Cu*<Ÿ@DWd1 Вch ec.$~`X${?`+' O_aVb+n3PDT1==Bb*n=zp]s/0óŸ? @)JXK[OLE@$z@gPbPdآ7_~K VXJJ[f&4`A-D0@U3b:s0+2h0B=\/36гB? $]l bh "vƒ|y r e>bO p<"{I |5,)C0@xsԚtr_c 0``8|ᅩ ?02$x0||x ^c6=+_Cyn\'^=pw5Ǘ\*#R|Da`8~ϛ H10D_z;a l;D% PpNN{H$/:c[28zXÓ ^bçG@O!d3@PB3ۼX8e`I!Y*p1én~VF?oϟϟn^23D30 8j@1˯2' l8Ñ r|$C0Շ@?;^8^ p:fWN}4/O￘E~?q*ٷk(lI (BQSݞfw&s9VC ?pk5÷?B.3Y`_\t@.C<6Ӎ?6M? H;qjCضbs@P(Β5Jsb2ee8 Lof8>a- 6| 7ߠ:6VBjXg[租؟\ !.\ ,L֯Xf0V XHwB1SfW# &S@ǟHrMC/5/ pc8 *V3_t35k4=˖2 ȰEDbȃ`(p ߁!yO?%/;Lpǫ2lP̰fP tfWgV9u;  Zv 2u &_%`ܗ`%pXao"_[Bmy l`xsl.a/CJ1EIJ  rj "N ~ L\@R. "_-jژP̠#p0m}pl A & AM>\R,c8?b4=C%~``Xq?ó~}yrСvB! b`xpy## aiq4qbs?2yf>>Pc_l6,Õ Kp8ބSxGl^ӛ30<=篇2 KDV*2h;Ó˧^ Lz. <PI/fPk#Oa8ڵ]ZܟEKW3]ח[RgBK~0J b @?>ǯ2pjJG+%3{zkGn lC+qFCzt9!us0pH1W1i2y td{w8WC z ' C~? ONm <6RB ׁv?7720|;lVɿIj ʼ á/cUy-f#^pvwo3fx? K)`o=M?<=xWSM%F$7$[/ûk[nV`ՐF)dD5`1 tcN+)^Uߊ@'!;Ùd y.f!! tmpD_`,v``xtb?Obt f8 lnfw7_ނ @X<Π,mCjާ '{W0k0T #à gɣ``+ر4 yßAXio';cx||O ,*! V ]:ÿ@ǟ%W@Xb cAN/Pd VT*%01<:~~`9 rM6(PuqwCOg!%}BŒV&.X /TaH4 2Vzjg0903<:~ O/d%A:C|$ifU0<;(;UA 0e`&4D`$CHVVF.miu[ 9 L6&`昌eoT-ߟ XإDYx؄XBD.|`a軼I&7 | @O0'@ObV&`e-` * L?3?#m& {OYzݫ.@LxPL @eo]c(3!om(_W.%?3? ?!3Ʊ asvCyõ?>FC{{o ɳ1S0X`0C;G̼ww`J gPaef.`p&pHq!-p( &` `W Ì`Pd`ffb`eaa`0cpdraޏ9 : ?cx/`&1o %L}d"M86 ,YPuTo-GL>}=a=##k?0"?ؘ'Y[&[Sbdh 40 3ry ˉ ?23!p(QC[" N.fxx1#*`b`xT!D3!זAJcC" Ñ f4b({M zxf+O2dwD@`ː,$ d\@03Ddho z2\ X8_a^F?C*uW71|߁u ?Tx-,16X8Ͽ0HJ0: XL{FW_38(Ï?? 1̈,<A@M6/ f)1I_c8⥭&j!"_34n=2A@AQFϞ0kh- s?4~0mpAo0y*V.L38#3A➁чG {cEI *R78&= 4Xg/33fx`. rl ;߼dqu ~U ` &h a ޼rĄ~1I}fXr(+4+1+{f9 IQa&P J1.=x%) kfx٫ oaOû/w}lf ,Hb X8zп6O7?:  Xn}Կ2O\a|×^+?p/G~3<݇? ߾c7!Ou%n>7'! _ePfzAa +0LepU ǀ!?e}'Sws115qޜİ`rn F/o ?~`8|3/3, 3FEyE`̰0cD\`"ư3h-;O)M KfxGv72b!Pc , _ξ0ucG3s}!Eq^ ?2zAM  `l 2 ḛ{O?mE~3Jg8M.y j\/uOW38XPb(Q0 Xb= ҙA[~2~dì-ױ7 _@ hFdCr9Ykg`p d`!Cw /I3|~`y_31p3[@E aceT eXrb -CA"0V0ldq@U.??k3,IE/܌ԑ@GO}鸳lপg/_>0AUA^AV9# `b,Q~O=p+YO?6!Iˇ!8@!/Ȁ!RՍ_+24Ԁ,oY8TdIį`C >~b^<\ _l?1,>ܜ7C .`u^POR_!Pٗaɻ w_b`ʠ+`?PaX)9)Ltku^́0V??aی\q8m>2_f3$ wFEv9i6) 6afp?w7?k?0 }fm/I2T220 ^BzT_P5KF뺇 (Xրr^jbP:C_`> ه? 2 . O?ex!>ͷ|ǰv[  N f'y`1V okJ`; ,pX?H;R+Z}Ĭ "|>2,>\߸z ‰ص`fgeacbq`&u`xMЬ3| 5>dز3ß 6`mjaC,3GhT`F ]T$BȐ"ur`)O 1]&?d L:JP~AX!An`ej`X 4X_3ߟ2Uga `d}a d|áǿEՀS+#c`do{(Н/=;`T>6T<` Tcgx 2<f;A`rz ?~g. o 0`OK1$1xS( ֝x*&̠#`o&e*Π!l]P22@`:!P?<=zfk]i! I⃯=1`Zt /9U`1)I`egflq1VN`G\Aۜb>/\ 4Mfw|gf0VwYH`dK`'_Q&%L @ĵ Xq<03s_`6|p;G2(J*< oK Vpu/H2zg1qbbPpebF@ ^8l _o30p[Lo^3\ƃO ‚ j "~3K"^~Vp!`H?28v9X$$@yLÉ.U\~(C27#$⁻@i ^}.?E8#7 L}lqp ˝ (VJ@:kP'XcBF;l \&J_DVp2-Ym`bav`dȀ P< %#P&W>TF\5?2,7~vKcP/]$ QP$ l;u bqqn9 ;a /0d)p;qo3q30 =v!VP~1309 qi?EԃW6ΰws{uD2f`AKWA,< A ,Yi&֮ o3@Ao߽̠-} tX3;FMX@c2 ~fd`&]`X Ge8pV6͟z!6-x; vj Xd$X4xe#320  660LQ;~ys =Q@C73D?e:Ew v& g#` rKTCW`/0f ߁5^ a`7;̍CAc6 s0õt zOb⭓ U03pz3.3e8 t?? :2ҍ3ة|a0 /4쯗'@]I` 16s/n?B+R/`w+gaoN>@1: qJ-+"@30H4 )ůge`3ثaPx͠&XG| i KfCW>cH`C=zۧ@6}?{ lE}hV r;@40@Chu6vەX䁼߂PJ|a};3"F"kf`/`+>o^ex7} ď0sc`N%XMr;@t flHl*0A,[g`_F,ypkA7C@]gQj|ĂK'8ꙟYc v 13|ֲo| T/CCC!(T?! b _e j Z ղ쌲QsC?@G} i8W A@ n40؁f7pبq/!V  )lfJIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_WWW.png0000664000000000000000000001273210126472604017362 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<lIDATxb?P8=@,p02oV?u1fˠ̤.4/_?_1}M=>v[J<@ <} 3p h(*2HJ2K1pr t?/0xɓO Ǘ?n-GT'y6bP%eg %ʠ, #3P$0Кc`7.~pp?obU@/N <9J6^"P=^]c=AUpf1 `π|?dbƽo eضOcuݶ @߁` =eI?͒BA/4?`2|d￿dd`b/'Ȋ_@~3 Yf_Xb/ G^dص뿟O`x1e@.ova9"N1 4r  &F&~.!3p ?~}g~~a7@zafbK^ߘ\xȰ`o94bDL\1̚CKO*y+˧qsk:C-_ 1b$ο,`A`l|#Xb"@pcD4&nbxr*g@%y p{ lg q0H2^`pP`l, "2 }dY!On3_D;0Xuw V :1uË]@y  s?($d- I`;0A[AGCA_ fFV++71`?'w  fseJ`3L-2v^eafpt'Q`}W`fddT`fZ).6~` J2q3/?~?Q߁ILCe&7Ȇ߻2uP-TN}.",WMV2 gggZ ₦ | jp}pm_&@o?8dsׯ <" F KwU0:22Hd( ,Se]+=U ?|& >QS..i`Fw_(i<|O Zr RL@Gs2 ûM ?~_? ~1ڋ  ܆ <@a 4t(y0;ADa ރ L> _|(Tgx>ß_>|piۏcARTARD۷o o=!q_`7аv2L^~[PW\ŐX-×kA ?B/mq &6K2F0he0W^A h(7#0ܻ{ = Ljh-@f Lw~d.õ/<{h;0dB.\;/8*@< dɫ3}hw~1eVPXBk=&Hh L.@ }d`6{Wn2AXH=@͎KO `xw> ga-أ'zӇ ^cPVgr@\(%j20(j92:3r~ *e t(0aUa|z70ɈX3lW/ lP;lp/Ѐ?ELL@À?>0i;39?+s1|?Bs0D@!yI]LNkz>o{Nx=1*u@au]`Ȱ}C_4 ,C| lZ*@XAiM ,1p1Ikkp;W22{} &~ \@'Z'fa8|l/8ů?prQi# q)]xyh`1w*: d0op2%`W``R`lɰjy"Т BB 으>VBx,l ~``6Yam_VY6^`K+YpP 6 6P_z8Oy gc  V JjQ _>=`fVex$=*0O 2 F#X؀B(-<fvgOw18Ơm-̠oR (f@4Y 0K ys20?` q0X;w0j2Xmex y01h(px1A X00@ & H2mRje @ gi.+ 8 fs`Ap`^͠j !$ {A}x@ߵy?`Th*$.#$z:*_T*a0ϯ 2. **_XlydD%xOM_~CBJB?Q@Aq** zb#)Fz _Xp 3h0p)OAGfb 1g?2UunxUXKA%0;) >(ԁn./ T`&' #i toN_eg/3X  @]~Rk;W0( 030gd&X: 3#jN yP r/_p3b`ed|` ( AY`ipr3ڝpbƿ :;OB_=~ Ù[{c;pbM An` ʬ(&pg6+4;`g XgP6-v'%$``d#{=[π߃b b`^mp ^ ((Q9-.8rBL2C$CiP(I0H3d|ƢBZ P:vu^`7kĄ< Nw <:ܡ۵V#``b';~>('<ـ2 z)C@ I{=`_Ǡ#kV#̠g0PcQ=çX6lgx֡Yp+ G67 g8t6) rzqA,C+vAR2 FrXaIgxb!؞pX-wV238ؤ@m@O0@}b`~>y՜0x2/ |lQgP0 M +f`Pl@E#T]#AO #D!DbX<0>`>Н$* s|iOo^2Cy- 7á m(%PlHyPyrJӟ.?#X}W]ew44KeduFJ  0Hp3|Hv(&H?)nРVbay \y=Ú2]uo`&`- p -;.OԢyf('`[h!/d/H)i`0A=0P1 bba {Y|͚@c)PgPFH']H)a9 ^ L_)#`?jI 3r %Pn E}!h4PP^Ryd~+CR"(sCC ˆS&h2>W ^qCcawn:J`p QD<1# FN]f3/FknQ=%U5yV9 `IALK#` ?ÇL O`x,a}o C++qL|33{ r "B\B|̠@O_` y=m4TZEC4c" P JfA'nhcFv $0Bκ (}}P4C3>3R{?3? d(3IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Toggle_Log.png0000664000000000000000000000774510133714020020715 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<wIDATxb?P8=@C4=@C 70刲8U 1 )nfíij+y|gP/J1 za9Y yrܲ/598D퀲M14``bO1HcI4gЖa`f*$xj8J7X1=g~t20ȖU1+!3`a](!ͤ͐iý& à* T-NȍDw0q-LrYj^c+Ɨ ^!,\r9 |@%@ѷv^ao`͋/A=u025.b[MŌ'2w72ب1De1ܸ/ *_te+J偘 D7pK)15bw }e1^Go2|!"A'G>}ĠiACуA[* Z?0 @@sTANJ2ÿ g ÝW_9tM{)[=W1'7l"0?MDD{xZ4+b-(tG^Gf&% pN6R"|[s~^CjVf-v.dE&ìDyf#cn?`}9ן~2q0<~TIʼ-O_2|b0Ud0Q`g+t0󏿁/0?~X1?x| dFLo'0~awpED;i:)70?`f{V`,|zן `}헟 v1 ^}Y $"1/  ukŧ P) P<ۆu_QeX&ưᢾ $" p@73 L., ,@Gl~c/P \|o  b" bx Nw_f8rob 6^xp9 ğ jM|_7F o0,{+#m`HK p `oX*AXcPz?cADX7 ofdo?2Ġ(ưgǭ_ V"s_?le @7%=`Д{pkV0E ALIX lP/00+.Vpy,MP4"& %n2~Xp1[ /2p ~gص9û#7o0vWa @'Tzީ \ 7^yqymJ3, p0 ـp0p3) ’UeԐV\ ."A5, + k402?3`-(s< #xVyzHn('WyVwc$lgxxTWv @ A`SXW00z:8{F; &S1\ùG[vbP[D1lmq:IJ62)}A۞aY31?`rd$akgo ?eq=Å??õǀg?P ~j3: @ĴF$MdV&oz!}LcJ_W2zk x~dxp%ɫ_ӟ3:gPfmVa@ۜf0NַUe=r"Cg Ͼ0HnfcxG</ ׿ }c8wٿs^}K7[sw14AE%X<@z""̳,2y}`pY / jNw^0?}O[phSh} mۼT4DJؑdqVِgjRASAUA]O Oa8~O~ax>ó7eShH?:=:/B w)IQq[73v헿^zՏ P@}M =W]JȘtg-7;>0_>@ PG( i| r<҅bh94M:;1 r<kC@fXi+!53R4=@C 2ƁEZIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Identity.png0000664000000000000000000000572010133443054020461 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< bIDATxb?P8=@C4=@C4=@C4=@CIf~ ($XQ crXrbĐ͆n/#l f`{ʜt,@|&aa~WggCVVЈA8f;8ÀXdqLs`@F}( ~mPY=_`\\ "1#~~}gD# ; PJ 7AR2| L~}? Yxdt`(0~ և+|as p033i&&!@1?`1 :ϟ E+Dû3x~X$D^\_"-O?c LLB FNI춿@X $|v@`%o/o0a;`0 TY~2IJ0AɵAGG0Ř  }H &&䁿`O!'!bAeP F(` DǓ ܼbAUTK a6# f#F U 9D  &RQ y Q#g{SM0{ f8G=%/`)hp*Q@ćHXH`!I"ѰLbRbeb{u +*Ël8ܹi_ltjD34@ d aɋJBh X>  1{ 7i÷oovn~X3 p'@G@GfPz@9k2ocʃ )@h1Ig?=|/95[/v .= DzCPM4 y /4?Q%.OhH+?J+ PK!x&Ƭn'XhJÚΠ $ ""`/r’.`FFÞ* *``e0|fxs 0Q <>w<`0w)~P 3Rܡ_d@XnHf L5febfb%mFg&N N Lg`)0}sʠ#+ e fDb3c(P/( fs?hNJ|s{" Þ#[`ZMNneXZpwPFMuK`3 A3N ܸCB0t/_8 1d_ op V1<~^6 lgc$ggC߾?Zs P ǀ>ׯaeX ?g>FHC OMU0~Σ>TȀ1 Ȁ1䈩8j`ߕG  f~ o;@/?P85<8ˀ 8r Lhb`q`1;`!?@C4=@C4=@C4=@C4=`zџ:IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_View_Detailed.png0000664000000000000000000000532010133443366021377 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< bIDATxb?P8=@C4=@p02&+303&և Y=  ܿ >.Z 12z/4J|IJz!A1I/ /MPjB/o}k/ ?(?ʇšbP,$9qj~&3ݲJjBf&onF#€HB &H|tXU,?b'3v+`v6s!BT'EӳJuEvrOT"ބIT&Nl d~a`8_h.FN?:t93Kh L ?30ptDr5@2hC=  $?{ Y lL 6g^JP| @(L"" An H4+v##"JF3@c?4 yvD}"FOW0x ,cXed1a`df!πa1R)@H$1|2@v)L_%G'>2o-B|a`bbD BX$\I `b,:4A U b Z1|y#T lllp5fJrAfC*< o<@a&!,GgA3 Z1s6?a:'9CAA6g\a4i8&& )!! I5QZ3`-H:_,t ϟ?v'<i@u#%iX凜fH)聏 _/F?f̙SPJP2/@a֬h?ZJBlf L `1.>N72ܝ/(O}cj0Jԃ2'@/w(cb"$/F 21# b 1pa`1*톖0vD/%D, Rz#y~y䤃\@)6e A`$BPfS PJ!pKB_%3,31fL ǣP/3T Fc'U _^eTS`P_<g@)QC+Fb Pc{| #dQ O2=!AM6gAm#5e@a<HXOBH]]B) M ,>A@FA3{ e$>>:oxȃW˗$TUj@~ŭ[w1J&Dށ BBBYZEc l6?6}e` T_p2iz ޘ-Ceeit-^r1 l: ?IF`s÷?f`fR=iذ("#mP򑕕k@9LZZ!""HF@eeeIC<@1ܬE?2 }`` Z b76K{^3efw ~- i2| AA7Fi(ЋQc Z A"! at$4(@5$# F6~@Gc8D4P gX@iTW F<#C ꑿw`3yQ`x@)HoFch?'ZLE]F@6#g@dxGwQQBPfVzNF $>$ Ҭ45&Agt`H>fب;ۍzhZG1Xc6;%9>0gJїo;I˧D=a=L L,ρJ=L <1@ yА@ yА@1-\IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_FileSaveAs.png0000664000000000000000000000740610133443076020661 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?PĈ}Ve; Jgd)_LYXGV=0 @,',1|3_]UT.s|!s|Op`d` XSr;E9%9t~`3vpVlB 8e pϒĬj -`YY'3@c pyTFqd)Qf L/  . Md*A6삗 2Fpf`:%ק!ý\1W@8<;MY5٭2A[? /x@213̿A@D Bp@偘㻯 f/gu gj 0=@_```fc(b-M?eo l젌v?@F`1K`!hFÙ F`> #? j*"7220p&- L n` #&y0@="&,0.~iFA;PǣxFVPaiK'b0}C〾: @3nl^Ý% +<2B#jyn ;1ZQĐXW)(a4-ttb`ϰ{_.}Č o;401x=#3< >d=%!.n8PhÏ@)q؀ co$ 3r&FIb  ˨ynOu'3(*fpIlYゴ,?n6B 90L`N1K߂@Gg730h'`VW`0cw0eJNT@j0c)* ;o`p!T (QきWk/1Z$͠`l'H1 jB=@( <KB0C,bǷ@Wp?g6=3;%'c!LX?)`([/-˷g1maê B B ʆ On^   `) =@İɏ 'Z7@Ll=fxm&Cj670 /'8zUrcd0in]? U@ʔx'Vpz跽'bM?fW`G)y Z?v`XI.Ík03X8 Z0 K!@e/fI<3 πmА* c8pa"n% D?n& C2<@xcfSXz: #B&622fdc`~ p uõ[ .G0\R``=Vfg9PbPE@+2}6_3(3Xc R"@6'0`-d*`/n6)/CJ^F3LbxXEK2zj,JB"C` ѿ J< 3@ g>2y2w z% \" w2\>aC.%uyp /Q o03pԋ#T%@O`z?ß K=ypC6Pÿ_w@pz"=CxK ÷EO'V$P F:>`?FVG0G c  fz3,uT.;';0} `ccaxUC3# Qd<Tex É80?v r\ Br y *Fdb÷//0cb(eV0p IFFP򒁓"YTt5>t4='[ K!"Xh /`1؃ ' 3&{ 5-*EWPh7RcV$Wh?(z #1@=?LSJa|^`RE 0b1@@A ~31*3:[[wXfд6%# b)`$Rq3_  F Co _ P=0I *(1k2Y'PKu73|pl=+?!_UCRz`Lc \t``XpM7d@x/XD?0&ɉ"`o_j͠*pX:GH'`| X8@A L*Hj& r2 '1\9ta*LK?!I#$ PL= ēu@j@5M|+`-p@ǿ9{_1\=qj ?dp{` tԴ, <"t|0&< OJPaj3?õ).Cӯ wc2[@ּ ^a6 ,|~u=bbefVa` F@k3`, @'0̀yԞAIM3~o g (D*2>'C Ifx 3##WF Z0=1 3NB @.0jSI!9BFSa`]pE>c,L%@0$ N]p],gD S.f`yy bdr&Q"w 5\ -nf` l߼ )q@w]N@׭:n2(@3[{S `/+=")' $% Ŕ D>>\`¡l:0L@WpA T`l$1L@O,z\C֍ r5$) R/.>hQ0o@Gh 0 T a8p ?A` ( 0rْ &FB@?82$Oa 41ڔAs`- t#(@ c젨n\(43 Mc`w_0g{`o*Sfg0*ejfGlN `g`a&/1y׿ ?e/^q<J - gPIJ:67>2ܹ?0䁑_3I3T/ͩĈmdA e',؀?pXbq WHer(i dGP cVD-m10`.!- o>!# Y1H J,<<ļ`T0̈C< Xb-`; :`3`&; o`L| 4#hL` i@`B ,&@;b3 ,%@ i!!!!ooIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Keyboard_Layout.png0000664000000000000000000000673410131465220021770 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< nIDATxb?###=@迿dda`Pb`e^{x_>xg&@1I&&̿UfˎSQAXXPAd d }ӧ_qW^4.^$?K>|A0`fo?BvaeҔfeRP````0̿~`XY 4=ϟg=~{ > | lg[/o}~fFR||A>gfffz__k?L߼1VOYY^RWFAL 8.`ab 40,~f`!$t 4,g* py zߌr|E={x˗G;Əp*ԯ_|ҿ~1KCNMXAD p< {\ZE, @G)o>p-fB~ L@L`G` (ā` ?H@IPFdZ P`:Ayb0!١ Pp03B? z0UPAs#U 5/,@(*Дc`&$$UI(/@@s{ {cc/@ !\@L, + , oOFNB4Gk< @iCT6r0pe}3Ï/@}dF`3]z @+00(HK!C~c 9Ffh2۠P MB(%UkV.m! n; ?od7 74Б<:sC?e]@** r& *ӥy@,DdPhƌ@TW1C0 j <oY޿faxqXsK+Kڈ qv<@ne`"#I 7'}fp|a]߿a{w o.|懏 <+3t #R X'^2<|[v^C%-=7 G^| 4$}ҟYq(tOQ[@g/D!qx#ןl+7(dAu;0&f1|x; ^~fTB: zr b |R&0ifP LgLBY{g m,dV U`{FG7?3eeӒdO& %N9]Sa؀j3 _~?xYG[?~` (^03TuruFh SC\A{p1Ó^,CQ)`Gؔ8c73? t?'Xf! z u`<6|c AL`՘a]1~ # ブaa=J^///W?! dr ï?17XI&6f_ j 0Td-ep~qĴN|jh,5L l3?`~dl %ȿPU`5[@2F`R`d_N`ӷ jo`@= pii1`/óg/M&i)q`'ÃE=A'p _|c0e5+EDAe z.\e8}Ǐ GN73S`g0hth0j6?u)޽{@9` c`1,ܯ  K5vp |Tɳgρrs^^npO I07CfĂ܍eg4A1 ))LF ԃ<XYoR,A+`L2 k 1pJd=1@LƠ O?⒟XJJC\FFB44bAPqrr0ۛ3f RRp[#  ,@23+!yp,< dd$"{\?u DKA31A OXt Tj&@cHPEDh%㭱1\zH012"갫 `bG+ U?i'00A AvXY;@@A*G%@CO82;5a@Z}zëG_Y a//"f/#l(B*)fEu'9w޿g|9ugO^o^Ǘ6xxyE%ed~YRr@jtHcJ8Al>xڵw۷v*{ ã\ EOi9_?~ ?Aw9/xy(*2{pO=G޽{ݻwA@1Ap|oĔlק_}$@ݻ/>=yy1h2"?&>};L uuͻS^yo^BAr4VA= @?pKI 1s Ob3ks++ `deߓgϟ'A;?A X`{\>|lNɇ! 4oRRKn@*1ׯ?fx bn"?0\X€ 8A!MB?}@$ ' q Lvo;Ь ܦY ۷o I-=w ~7#4'.L 0;ȣFAG+aS߼yҥ'B& Z v<qohQwoA30@!/y4KWhU 5pj˄;IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_2DownArrow.png0000664000000000000000000000712710133443754020706 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=,Di =LDk($.R9Eh QZ@Tf{oD [ JFh(_Pxd+뙼םbb#XXYDL 4?ÿ 6 L@_xl@4, xHW5  ̰BAL?@&E[^2ܹݛa?PG,'b@h 0@t-K\  W ( pZ|oF5G1ɰ3xp2(q2Hr0Hq0(p2d2hj60̶ux9 MEA_@S'0DF ߿vaLLYw!Ç?X~10|3(33I0%1Jm <& -YĘn>a``9PC#10\e @'ön -޾`, !?_ F[0 0R`*z6d -İ o9|@G/ uf=,~Hz9\  ga{/ |cЗ``Pc` _PHX؀ԗd0o`eOgİ9:񟿂Hz| XH!r񛿭O: bm`JU\^'B;clcfvae8aEAlx !;Ý Թ@?r@Yj9?}% 2.=qh7`dcPc,@`1p#`:xPg @2H b!Wxe&5(R]yic-I.00ll, /32|p<eܷ0~\ރkЎR*b"^ 0`Qx Mk?3HrkEU` _A雉A ʬ x.A߀O! @Ld6AK(o.kb(\KWmHP߁I:T΃+.xt<]FCU<#6\ɼߥ s1|V!̌AV@!I2m?VR@(+  Xc` @cf@i Fp'6:*g//3X˞HK=9 ǃɃb\A G\X2|# 3wky3?@ֶ|@ZHakq2p10L %, FH@uD.S8vp%Oo?FƋ3eȬonH*l]B" ʺFϯ@ֈ,FF f O .^y!UN w!L/p9 awMf>S[7eH.?l`P!n{ Jba} /fz@ r IƂ&`ǜ1HQ"7X_Ja Fp!r47(=O_0|=@;A{@B&+VXK [BHI+`[C:/=;|?,)$ΰ$c'p[?h}:ȕRX @Ġj [s~!KT!i{]`6ac#ƿ3sJ3|%X(CĠ%_i.0Â@w(#& 238X>1ew'`w2LX:0s 0K3 H?1< Eg"fa r[RX݁!l⼻ 3pc6H!;0Y@Hy @Gx J'X}ظCa5pB!X3/J`{LLTЬU: 8l Sw3`rJ2# o_Y -rDYcn ?'֞}\`^2l ^\S@=^> y@O,~7Cq}˷24`l, _>3a`]oSbF%TûxİG~19 ص @5ḑ@}lмqb l _}< ZeD $`1؎O5RZX@C~ h{  -,ez IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_EditCopy.png0000664000000000000000000000370510133521100020376 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<WIDATxb?P8=@CI:!u 20300h L Y @,Dw\_P?Tt au=#Çdl\;[R@J"98rb*Bp[@1c#1=/H ~wvn+fbE,u"a^Ő_?vZ-`Tb@u8rlAr@A<Ȥce`)O< `` F六Gh1 @,(rJXCbG8 u0GC(d‡6B K\ZCk h́h=@PZC?jf1DH!WH XJ%x@ XN6H9MπT:g b8Cr&T3B'lebd@,$d  ه ,K& zdE9@1lBX?ђ/ HHd6n  8KH1D(+Õb Xqd+PE#J |rw1CZa>CȖ# _  z ĈF33buè4#Zc) dCaQ3?bYFyd%cZD@`aai<[3rR{`#e^\(4F e!-1bLȹ €=1uF]O$1W0#( T ̨̰Zu d?DYτ`:#733VF0aEFt$ߋ}@l[ϝ<2AA a|c#B٫7 Onc4fh(1K]gbbbx $@nZÂwQj_~4А@ yGTOIENDB`Ext/Images_App_HighRes/Nuvola/B32x32_KRec_Record.png0000664000000000000000000000275312666315506021014 0ustar rootrootPNG  IHDR szzIDATXŗ[lUs[/Жjд\ Dh &@| $L !H|E#( 5"iPݦmf Ɠ9s9HBϦ:tQRhB ( P IpMz ~b7 sN @mm-'NT4=iҚ3J^twf&,4:;?gup1sB,#t% ÕʼKg*dBv8@0ud8L[ .{:{+ 2 E+^lMYU8NEq:B&$)g[^μ (r婆'?tҀ$+L>ZzuQ]偪a`hڸd5Cny9+aLѣGm8%p/ Uu{,(޴ d3D8,ٶEr;>p_GP[p[ys1Ix4Ձyؼ{v!%Fdʵ[H) `NE[(q 8זl܈,f,(CXPYIͷo?'0$ESTVMȑm5gC>YXOSzY jYVz: 4'L=q?S(uSDȄ0#!tաl #@#c .]$C!d 9" [u&h_Q$=ۥ@[]--8m$h)!#(!n CQ?P_=7n '@ܒ~t N\`$ B"g9K8W3GXv\. $Y:QM#a$8F!p/eXFma`jMC\e$YU-M!0MC1ժc,4y uh*\ l>wSu]qh -o=^ Ҙ\"|, 2@r7@ cxҭ<4݄l>ڔ6grÞefA]RjGjʸ J,V8S~;PT4 1: \mW }M@Z  )@m×?@{xj@ A0g'I2Ae~8# 2W3ܙ}Lǻo = ܞ@Ӂqw _9_H^g`z [h B "I ‰N n޽a`Ѝ:S_о_fzZ -{>텪)@g@B3^_0|{ U~Aj#BF 0: &l1vfs% C{@ǿ~f XwR  qvF*:2 Beޞ~R;? r4!9?j &Ơb 9DP#-<@0d:?o !$ b'f)v  aB F LNChJldDlk`Vs"xI69 O; ev`[0#`0 hnR hFs/@VRfCφsh200?u<+a'A< o6@iIhjx Xp7D9!Z<&B0(?B @0} }c+ÇwAH l07̤ t~u=CVK 3|E72|m>5׏Y!t$X,$݃<'ûg@q֔!A][a̙Bk/Wkȳg 0A? Ƈ[ L1(gd`"Q,m<& ]SV﹚6 0U== +gX0AIIa K/Ɩb7Aϟ?`'π ,3gD(/#\:{g Ba_>@mݼXuuu1203'ϛ?+33s #oR@@|~+5Cf.(sx[ރ/3|,pp%721ܺu!++!<,,oJN &kd+ly'lpMԼO>1Q"Z/, % k۟?/,&%o B"" O֭[1JN )@Yx X(@ijBhc/$$Tx @`„ MMM 5SLΞJ NF 9Z@@TVVǏ``nVVV֔o@Dbb>>zIIn&&&0T2ܾ}!###=JB<<P#k @HX8A$LNy3f\U2(] kłdc̝; PY@11 .D75ş Xt 0@4XP#+ Xr PlK`hLML@@W@C~ h{  #TLIENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Apply.png0000664000000000000000000000544710133445206017764 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?P8=@C4=@C4=@Ca^N.sPym?w%}`>0i(Y`!e}* h-Ao 44O>(x{{xw0Lpx}` Y`^NAqQ3aQaC ]@ Rǫ:3g޽  ߿ ]\RZ* * >}fx5:h0y@ߟUed6?ưU7޽dbb)D@o)\"| nBb K_^!S])`%iC>A`-ð n1<7c+)ȸ (򚊎z34C$73 ?߿g~ @bddej/0  0c,`egfbed01d/ hz0C,0n}ʰC10~gvF&aUgSe}?`=!C #+s2(C<Ͽ0?&` Ņ@1afbL~|Գ Z Z *& ,|@O7ҋ90eSg3f1daV:X(&0>yǰKs>1}33s(Ʒ4'No]҇ ~ q &\ ,^3uZje. C:1/o~1  46@ax aƷ3yr ‘ R܁^ H47A6QPEsnP+CN$;o߯6{pW_`b`UJ0Ê^3Fzqgau[!oZk}o߿`dVdcgapWbe`/ o :뿗 d8uï[232G3Y`҄K\ 0+*0H 0j13˃3ߠto^1z_ ߮9?^B @a_##.Z&4"(0x ^2^No dC0_2м?ߙ!/x 0c7 )ü2aPe t(#т, /`e N6 oCȹ@3guJO $!ft>3>zI#q)`Ì? :yG+2`#-KFR*[ ,S~=`a l^ae`´1 ؾcT@X3//n%AOP`?p,BT~a) `;;O_L غ3c? gA1 0?,*02=q/)1}c iӽ &l1 310Obz#G_2|e >a8{I,W"Iٔτ30aʼ-N/2|6Ⱦ,0m&7'ebfvG X?c~{ g l0c g7@|o7xu+}f#=^W'nfdtP%UYcƧ Ipz Ok?Ggw?Z""C>36},(rWP 5&WZ@%@712[5cf^X@C~ h{ h{ h{ Cu:IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Folder_Yellow_Open.png0000664000000000000000000000715710126547500022430 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ yА@ yА@ yА@FFF02_ 2H A(,ɠ۟6ofɵh_ 1HA2 *\ : Xf]aH;p H .KQQAPAPARK~a P+ Ձ a/43+OM.>892e`ڧ ßzM hpvE R , L~:ٳ ) d8? 1àĠ @Jp 22Ipp0Jq2(  B@{+oh@G `)P| XX2B ď ? h-. ~0p0 r1J11-Aq~`10pj/ 9@+$2! t 2 "@APLKIB J π7+$a:85(YA< @w300@1} ߇fPAŠj1=F"<<@`=9k0YQjfa 4 \@h_ tGP&&8/Hh3"AhFoh?= +OAw| ~bRۆA7@3CJ@ tHLȎ盿G1B y s?C+ 3`SazZ{O{ ,~_Pt3Bb uRH"iR4@~!w` N5l?C+ @`̵@zAY'u9OH 3<+8Ə/fZv`I\ pMÓoc{?+ -HBbhy/_"+@YXX@c/^3ds XH*F )d1b JJd7нXA_A)Z#4#,WYv{w3XB2,C[L<8"'?д߀oFH &@`^fbp'Fa2,0 db^`?˰ 98Χ~C,#244Z@ _ K@'a`G0?f_?`f@.30 X?jOw w% 3KHZ'#eHi4 A4lhbrP=&ga6R" 0~lK#S7 o!m2k`R;`;aIyH c06w@*07n2|(y&)p_3 N6L #"3Aիd` *f@K>12aZ|EP A7_-]gP!b6+# `GrhSdYA͌,پBćE&#h:(7ßbݿ?32<X+O F##"q*s0V`ؤX`t`1 Xs@wdAGo8z7_O{`[5ß7g~z/>cd/`iOπ׿X0c 0<j#D 1)0ga0:p'0z e&|c r 3a~?Þ2}@~g÷?>\2|?B74J +_Ȏ lj "IB B Zڟ~L{e#{>d ½_ >e1_Z~2 k5B @<+eϖdha}'0$O0|yt؃_ bxNA ?rF: \y4.@, ZtEaCXz u$>@<h\F:/,hH| L=@ 92!!.Ҏu+IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_KGPG_Key3.png0000664000000000000000000001205710125245344020317 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@p022H_ ? R?,30xu8^00@|;L fTpo4>. bXYDȆS@Z]YRXA]_ǟ naxvëG/>xoM @|y z@H1;᠐`crTSԳTeбPdPVd {~|aaxKV+3l43*xd7 _<@px= rtLHapW/21j1)A '7@+`{ _at5Cǿ~VfLd{T #d̈4'nANÖ= k2((2lqY' zz  r0bEN-_~_`a'70 =šYP % u @$ @p4?ӿo eXwP]Myy}u?0xa߾ ke `o/`j*  |\~> 8F @wga%㯿?>Z 1Ă=0#qjFnF[YxeTUXXXy ,,+3|ӧ ϟ`hi9!3_ 08cϏ? B?3(a#cЬ, N~eX3߿UNGl{j_% -l g\`ضm7_m^^>}}-5k2DAD:s$(A03BP?0ȉ33(*X0j2͋Zs7@3qo}  @3pK}?ý{.^fO_LLt֯_Cjj~PA'PPjF$ &F/4J1>y/'v}U=x:{i wQYv<\8G!,YW]ȑ >|Ƃ<0)I3 caɒE NN _|c8xc`|C߿G  <3@!$/Ҥyyy9 03`h''@ `s œ۷nxpI%u>ëW<+íN:Ǐ99:_2 ,WN30=;,CA!hi{ ""׻Y 3CT:4XQlll`|%`,b3LJ˗ ]Uɯ h`?߾00~ v˓_: AKի@|K @@ ,R5$ r(0?()h $ d33{@Os0HJ c!<}N?~EXL@?~-{=0\=Ea۷_ Gr@}߿vJ3Yo_a~P3rfaa>k, ;@K3g`L0󃴴0:ف@\\,v30C73] /^90Yz LJr@ Kg .ԔAy2엑QB@B/֜.ce9O 0@1Cp++pp5!% Z@|o{ÿށCҥ 0Yax09]LI (0px i%i 9P4h k.`tZ3cEEY%yy!pEt0A! ƚXzO kn̈FHj ,uW utT= t ~Ap`_X@&H*]@Lk:`c1ׯ׿{O +Ã00C=0rK ZFk7;I,X~@{W28p `QPi"H]P2""8?u..22Rl V UU5O?=t{t #Ê@㪌fsrrRTf@NvXcٯ^=&pON489v#RA馦:}eb+ /_;@5Yz %(%Lk` ,O0H`ŊXG _5S`wqX1sPLu\\ r>K3PЂIPF{n[;lQ`Zl@w @3]ʇ͇Q==Ø_hxpC`xZ}\`quz j=}\*󯀝Ϟ} K>nppp-ŀ *DV 44 :Dtumx +05KDPgaa6M1߿ IbbJ;WJpp}P,2=??;al&8߂+JaaQp@yV$} 5 li*o\uWނ _Kr@Qx6z5޼y lЭgT Yp_ ,lV ޑ|@QO6\ r-FF6`{^0f`m~kC@%5vU<^t< \P=nxxO<)U@G OJG' @F;R# 1TW})".f^[. sNclwZZ+V)eSUϸ󙎷#0b]ȞCYt\uj`l666pba`1= ++T H=@ax a4({ ` 1 2HIIŐxA 1i%Wh.]c  f@!K ɓ$ad \bB@2j8 `][@d-BFK$py{` Hr<,۷ "~d@J!1@dl>(Г3$@,;%ɁT31112+@VVV`H |:.P3ͣ''PhbP nѠ@7[ jdXr<p8#*1Pe*N@1h汉?{͛ ϟ?'X @$BH$nz>PCTSbD<@ISRm!bFA4k'`s@pYJ4_*BA"D5da2Bn |I<@~;`L[ &bBʉT} GbH0 zdԤaσ3 &z gv%ElիWaj Pڠ%!P0j1@qz*(F"{T߽{ O B,`4"'&&İ_ z x&DXX 6b!@dn&(A&5Q(-!#0 3,"\za޽`}L[ &bQZ%bƟI XaqkJ*0Pe՘DD(:٠ºQb5*A 3|@##s$ FA511=2ۘ@/6 ǂ< ЃOrki/TUU r[@$r0?@axׯk-[HGD6jձPPPAS oc@NZZ:حmӧO>y(o@w?60)I 6b- V*j7(Y t7 =I {l-h 7IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Colorize.png0000664000000000000000000001104210133443200020441 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8=@C4=@p1_\2(ˠ?_y" 1И?@[fL W @1bA`? @kxY88X0 >exk}补@ ж v.!aY^MaY-~E]^I%/8003f`d ~'01|~qK0\;_ nup@Qy`HŐĠ&,jh(t(//?Оc`` H2||aӒ[ 6gVxk<@z@o8DXELT |tTx }d&<#'?1p:Ý 2sc`.}ɰ<Ës00u_B@J*dH4g0 bS"0_& f`fb.` [1np36M:&`F ^bҜà/ [0ܺ%;/=@x 9ԭ<}^:wkqy6CjFA~w?1axM2;[^<@ĔB,C{U:Ј C ÏoJc$<~a#þ~P!`l. LRTax/ Q` t۟ c`-ɰ?JJa & ** cH\5A\v20? o ?12ݻð^(?;g`V̌ , ,3T;{!׿^p?@fe>03_?282nb`e {q5c`Ɛ t ́1l\P0m~ 266wo2lO &`F%MƿL < υ~0ܿy=2L*b0!+2;;n`c_ bZ3gͽ8X"0G.ZX,a$݈D{; VML ,ZDE33<>rݗ ?e`pL3+C/ê k3v. mv2Hrc?3")96aPfs(@a@+;g'Ûݳ^a`de%^FAV.7kɭ'v{Nf&? $ EI/aa`cБg|bos& %$~gS?Ϡ#0xR`Q D2k193 {L@w= *L> Oc`zAJW_  ;~$ !jgfx1Ò)~ym aBq`ަͧ~^HPX~g&o>3=AY YDtD $?tܟ$@(1c a!H R )5`dfaFq7@xhg<7MR*W !i00 $(w^ @4*jl`[\# 2>g??0p1Is3HA~Cw` J N3:A" ~mǀ ̔o^`PV =PC?, :5~0ܕbVa0V`m?T ￀ X @3et<% ;f?P1C볗 ggQcVe?P9Ph8 !Ë/ ;N2>A($*>1?phY"03׿ _^= ) 0(3 /3}iˀ~~axw.-BcX-35( /20l 1H0AZexkmcӷ ߲=:bA򀎰0]C4хwcVRp_$DeO2Cc YB$0CdbG~}ksh18^h{aϔ  fs7?˩c0w R&'0,>]6$9}pg Lܼ < @et)v@4`gFhV69>O>1@ w@1\ \z4?pnbAJK<쬐P$?P: H r%% 4f@f}]3 *Z>SÁ8g0b5 oeiBdb&@=?d愤cP1e<0AC'DCr')'8[=Ù]z>## #`c ho  ڍ\"~'dĊ\nC3" HE gЌa`@t=^~o~-!.P=Õۏ\gx+CP?J Xjk^vn3)*# ?2<Fg& 1{Rv3"aX҂p FTAT]@c2 2r` Bor \Ós'B A 7=dxu. @1 |cHAy 6a3K}c6>2|z=P @LH8oz7!&~0#{a GWg|(اλ+b޽> /f5 _0\cdxr 3;CEԪa &+/ݻpZEٖaxx -g^:۟MtϛC #!mC1#D! 2\9v~R02B#g =.m`(v[ >~Be@ -?&3uF°u@#Kw1ܹ*#nrfh3 @D3#9Mwddxp÷+ρ=X8ҁG`JAE?%_W`74ܘcjDto`9k O=`0+, w?,W`&`Pm@ ߿2rZ'GGJ7pˊw.xp"7ë3zx`P |pht }c9A O5Y9IQ+[u/o3MN1|n b=@Z l򭃌¢& <5afb`ZȈ$<3cj_?pOwX>]ǟ@%~  |[KP7f` NȍFJx&P ./72|)h/RФ ؕ}` _>g8w íkl-קMoeGd@?~1|~p_ XsAFB '~dx}' ylܙ."Rm-t6 !Kpy .a Wo RQ2@Dy_uȰ򑛕ҦdM `  [o 0i|ӷjfI(jUfDɰΆ(qU`tU[NATǏ /dx :%Ч`_h9Nq1.ӌ+o10rG VP@@obdd.@Qe袙@(?d7i`>@yrhOtА@ yА@>&\IENDB`Ext/Images_App_HighRes/Nuvola/B48x48_Binary.png0000664000000000000000000000525010130001206020074 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< :IDATxb?P8=@`dddptttP222}ˇ޾}{7o^ @,,6p)((0$  >)U@G OJG' @F;S2H$hTW})"RrIpwsnf Y{2րWk]wv>}F ˁBs!NZd`e y ~R@L$J &&&0-yA[alr0}< @/ _0IC 00&+!&?vB%+d ;gD0 lgRRDsNRJ8ŋ 3#`ɝs{fXQZCsCո7ƀڰ+Ur@  TLO!XF1ǁ'"?hfZ+WP 5 7|ޕ-D_ 3MKG1*%%%9 fA4 jjj23K@r WUUc`i9BZZALL yd8}h1 d``@D'M%ec^sCC;ZJlM9;Ĺcz't @!D/ڥl, EY@{'#?*f&!)c @Z+Q{R /\TUA8k->oNϼ;u9/hJ3Av G Xi qC/^-[L@惒 q_ɁɁb ?*[42H=@aMBQ3&2Y\D` ASRJR@6@G_ |z8l հVઙ%!Y Z< Ăt%#bW \GW - Q|} b!@q%L![U^ b1ZY>XӇ/p]6 dTق`HY>vҧxZK>~S˺[Z, wgyd͘536*4dxfJD79 m)a"1K7j@wDPl4!iA(NVwߌV"0 [/a.Bޛ~tl?PD41Đ Aul(3 ~Oо(pEx{ɓ' ׯ_7'@M`7ܾ8MhPA-X'''r%[7 "؜`mv<ɁW@ c J5=rLU elP B B)R[DyVDָUoYAa_WUM\^y]qs{_|.P\YY ɁB 9PȾ}A^^AII AB8P1^AjA,ATl]Yd@Q`qرcvuaKa 1% 6 aY8y 06L 9P̀y0fQZDC`2&Ɂ0Qd#Wk#Y3~C[  AG jPD?@/c6-Zz_ b0 ҁ,%+2ћ/b6b"&Ja@!B*rS4 6C\@r6/  NAةė'tWprBvCB:Qdf7lf67CajB%y%GUA}ȹZтGB[P &ys9T޻w%B}}}p(VVV7K@cMd yPj}Pqʕ /_$@LQyTKذ"( 5 ǂ j<󸊊  USDSr `Ű&aX JV-Vg`@kuZo޼7"AvFp%!b"vp]pG^uh@zjx%9P a^g:Ɂ . 3A@|@l&<2 Ɯ7nJ0 07\-l6DR" OFKXs }Ƚ2P3d X(FAjiiʡ4`cy֡%Îș z(r2 -ĐG@lА$LGoc[+݄L;[眐>d;eb0z?416Һ $r09?@ax{F`$ zQsY(2yAAkA &@ؖ:ii`&mӧ{>)ڪ<Nu.~p0n%Ba%]]&|OtYY'?7yZSm#OP.GFƪE)kj"¬Y򾬬(#ɋ_:U#7 _<Īܸ/^,ey~I|7NV~XpvQa:9y2b5kdd^Xa^\>)\pz8N_^Hj=IJ9<,zH33v::QӿXfώ >>2Rs .6̶ZMSs箿)竦zp2{6QsJc1}۽uө\koS RSת8ii #99%mm뵋 D@F녑P!eBY=f|XQρX2by*!tW9KBo/hDp8{E݁mC}A#t.|>Z]M47WnlhuS4-mZ5l~sѨ[Lu׃=pÇgņ.و ~uOIyo) 6 SrUpM8;xun^Xue (@@>lե{7FΜi$OF(+Kd ]D_C+耝;@@y4'@mS[ө|hhk@Jh97Ѩ&L焮ߏ$ByyʇF!صqꚸ:v!,:^ á|6HJZ5k̙J5!)l__McqudD4m߾V< /.u?oMy ʡ?n[\zV|z]aa.,Cb A0FAJǏ۱Cľ;׍ };>`8B_;R֬~!(}3ӕ o-x92 k~>rd$D"9MMmrB_BfTg[1ePqxqH޶MwnsPpsA>Ò۪\ヒ@MJBh=½or E7EU%؇{'d?xq)PZ {Aͧo}NoD߱Qav%W,)+*zM3z[ZS$iٌ95a6_R"C+p(qA!E`>\qU dB2  n:L _X8kW=}Ƥ'iL7nbY\PTvب(B`2.)%BUQ-4ddzŔS]rI7K~_ { !]f{dMK"C}_7XҎ;L0 mqie 32t*p" Ąi(b2hf2٧No((%pϣeD k ,@9g@d4~i.2Ǐ.le咯8뭷T1y}B(ҧBӴZ,=QRUe9Wtu7Ax>-t3\_|2#^Z .^Fn2- d•(S:2L/PdRo,(ïXy${VѫbCR |@44-JkkMe WSknLk){"duZAĸ5]0Bs`0dQ$/mBQХD&i:"žp)U- m.(juuF@'LK?+#tey n̈́h,0Y)0'(DУ!>"˧!v<,5B+4 wTU1ܡ2L$f#w2{˜4ܲeRfnv͊rmq5&M쇗nRn d'$yun#ssxIg!MnPhEŢ}G|>%4bqNZ>KRҊ1&J\T~E3@MSyNE啕72i>8gC(YVnna0c P_;\tǏolFoZc6 YZI]׷z)̙TTdaXPM&PUl}YMYYUɰ庛RݕCnգX쩔ϳSuFc$GD$>FЙ{peT0It>q<-v[owGg CS)߸cBM<|BQ)Yx챭pYHV2{"Ip `xA9 I>bgwBC7(qj(RUiizczҸXFUջuC)oPV+(ԕNS3厧޺ =ʽet&qHg(j ,Gelf@DA8ITzfèBQ?J,\./SѴiSS=\ߠܑDSeܯ< $Ɣ(:צ1U8-3˳D* ep ~6ێ&ý† σrIS7oOJk&l=dܘYJ>obcDƘ{)0]AR^>2(M=čٗ» lOAo9I--ƍ٪S:1@`.k> 4!R'9Qh#T^aa⬫9ggx?7?jcUpi\8a7P~%?f'b@(ŐSkn!( 8\J$yLOd]x%`D}0v4\Сl9L.X J5;5d, 9@ p ̠`Np ZNR!m|Y8|Q>lsTx]Ba~괱r:qg/Չ<@'I1|S\:@ǖF > C/5hoh 1Nuv3{&l3a!y4[{s,=P >ufmJ >23S$0yG ,#'f3NfWBuI*[H[~)iZlа}HZθ`>!#~ 6Q]N{ע= (p01 8'C8iIENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_TextAlignCenter.png0000664000000000000000000000171212505260400023364 0ustar rootrootPNG  IHDR00WbKGDIDAThZ=o@~.HB`(jJY:5HؙPvn11003"vj*I*َG&ǝ}I''yy;s) ˕{D/ c9}t܀9Sz||VV!PP7% [qNw<`|>;; !HAy4u]r] r!۶ɶm,,"9qΩSߧ^G^L$"s$;RYZϸN^KjL666pB5xedE}O28]}d2N:uՉݮ ouvvfַWJYf<(K z||^x!wرcɵ^qPsr%G맯'Q(~;66SP[~_ fpX5k.b͡/޾lkccӮX,vwww_۶jժb%@mmYM6GSaM6]W"yDu>ꕗ\r<\.s!yy/=( $vOxA=ۮ+nU.ض.  T)9a`6/D<$G 8ٳ=$Ó@\U3na1 S_CH]Eݒ~_#P񶶶ض纈H( xi薋f 3idf$cӛ2̔͘\\ XBD 2CChܼ_6 Ec]RoK慸EeiSE *gS6XC0؎E"!Ft).iq3Ida`3Yɕ!ua_jC,Yu,opwӬ]P8\B`f&͉/|kY,}Z.6 rۯYˮ~A4HJ|OM O0lHv}q\?$,d0Y4m' 8n"HU1ӺSg [S@`~ nxąRl~^ʳha@Q/Y} ?;w7 6"Hdeض㸈H6ĉT*5 $, O_CS jS}~Ґ$PtJ4@@1C @pED Bl4IfǙPUAItgh쏈(s, f<=s/%຾"QR 0LA1z{ $x>d MaE& G-@UCn*n(z3N-uQ0 @_k%͛"('y-e$%$ (_Xq^_~_HG%װ-I(tMƁ2GOd%+o$oYۛq}wB]]-.$LJ8~ 4?_YOЦr)]vԶkz]*(򿐦W\n#P^w.HϷot,z2HdFuB(ވ+v}@w=yS^| L͠'33Ȓ?CUU^a}vN{ W,#:a`]%vm7Һ+xW|OۘZOJrliLM 8i}¥[f ̹S(bg387"UJ[UErĜK) 1&L&W"+"TN-%70g?;@^kC{Q^X@u2(b 'm<%S*J( uȪBqj/}z,h%iJ5f2(Div'o2;?.g"g$18Y}g^U06)]5@}6+Ρ.d:lhnidԕҜ+⪵xKf$9Ԃ\sxfWz:QmϵoÈ8LKw}[8q~j{њ?c8xxź!^M xr Ao|_E*J* Oe'ّy[EV􂆗9R@xN+kS3E5+'7rcB($\ȵD@lZ.yBGnǭU;hAB˩\?g Hp ٌOZ^3yMlm-$Ň;(?:[z-] HsÜH`uΣt$CX8ێxBU)W`xp@Q#L(8I:9 `˟h"w붼-_N4ޚHz Җ&6M` ,oi=^ĕƖCbHtz/ێ*zd 5A GQYҞx>R_k+ )JIVE,IEbR=.,7`: \J="ZEB!CTCjLL2=+ϺAEn1 INf׿/}LyCrյ|r13YGxM{Za`!\}trjh)Wճ@ abз~3W )j"AP%tF7m-aDq =?OH%}s>p uT֝7/ sW>k0})l!]r.FݰM?mlZO7#J$ TXU}j!Q<)J^~.^Г/khܽQQ*fr~+oū3OP xLEk ey;yվoެؖme[',b& WI'D5kF I3}==1s} ~%݇+tnD%\OSe?-`^`-.>S=1 Ů 2<`͑PJr ͣNOL"ࡏKyZmj~G]JxpSloq9aG2V?V`ߠ $3V=QI8yxdcLe ZX(뮭d'_^;a!غ.k:5ה0__(C\' X57c~Z m(Q/x ],cet4 wٔUL' ̜6b/ae XL=.d!80s,x x:-E[ujhJɊ!L/@vS7E1~xm`+eg<-?czVwE H =9kp|ˁ" /SʇeNkw^vvEDOPBdMw$Vr.:v_^~ӇXt3 V!PTe ܣ2VfngR @ .u??'k:nksuNll̙TsAΟǠY%)_A4@k&NXuط>(Z:O Qԋ@<60h\&UwIENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_TextAlignRight.png0000664000000000000000000000172012505260102023217 0ustar rootrootPNG  IHDR00WbKGDIDAThZo@P(m*U Ebح[{ɐ.WֿuСsǪK2EUAH gcuLN:{w޻3Ko0P_/--}Z]]!"/K{{쳦ilsf }pZuDv|>eU5M8YP\669,J`q!F*HV`8Kė6w+(kQ/0=&>]H|TRƁN+Յ(]3FdUYZ 뉉+ڿ5M*4OLBeyy9Hjb%́EJ-\.&WsaR\h\H̥v4`mmMf,?slVҹH҈D.$cAӴԹˀW;-7n Xt/\vqX}}Sf]g4&Nzrs8tY;[G}cS@h?xhS.;/^kM@aZ 8s&Ck}BQ?Ȃ' H5wU8HuucJ^Y TeǼB4MCQf٢Z^)B{?( Jp]qrK.#NHR&y2"˒LH$rYRlٶYs4 rEqH8~8 /J`LTMSS#Bjjj8z(`29͋J`b8|0RJnJ6%u@ @(BuBţ1L&åKxwbds9jJR`ʕ۷{n`y̫X(dX,R 0uݏ !@uJd.]˗ٸq#J|^JضM?`f>R#ƫlذ˗ŦMƲaʲ t1r>u׳|rb7o4MU)`v: G~dn͚5a8vidytuu<`i:RA΃>u1L&Æ Hٳs"o:BfdY! aK R&OR@4zilf455.eyTUUZP:ljN*q43`H:vM{vAcc#"LӃR )%y\%YRIuYb---X)%J)N| ee*p[z(c%b!sXt9rO?hii+gPr}v[lO /"+VRoL1M6AOOO>$RJ^۽t9l0M遦 !Jz@!WE!x_ իWsYfϞt-lyJ3DMә7;F0ɖ-[8o|vb|o1crPYБq\H 4 tZ F4Z˲߅q(_qqx]T\u"SIY * $4mVzNU6X6vo (=wc-#ÖfQ-}O ݍTcGP7*,_iu VƳi9bd6\vhIENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_File_Close.png0000664000000000000000000000576610125245344022353 0ustar rootrootPNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?###5@?2b( .=#@1R@9@lD!] Gsrq1033p0jj203|5o/^0:s a;ȸ@'3D:^@MW9(LJALAHh06Ȟ_=c`x {bu.4yx0ݝ!ΎA?nb I9 ~̔ v0<@C@|i)  lC21< {Ob(>pxf'!fe`q0 C`rC&P,;;Û7 s`=f] Kvsrs'L OU}TXa66 FgQpO1X*<$O,ػ10{Xg,(莇^ eAz ɜKp0N0T~Ȱwn߆ GH O18q8d /0(c q/b P6 ȞҜX]\ `0,Ǽ87A@Xh^`Q R@ `aOc`@ [`db>002(CpB5@J!5mmHu218 J!.X7Coq1X*!'`l|x1C10qxb$'m @0(20| ia.3]oa!AOpk{.h%ɡ0 `t)#@LpGO>80goANL16`|a R@ XPBXbrV$ڷ7?oLt<0ss!`㑓` TB9`IB`PQ RSI 7[dST˅t&h! # qtB*P@=a`!@0ISWcԮB}b=@=@\/3<6E*1P } 4 of38YlիD8=p Gr $  .<>A 7l3>c  ==cP!<yV%/{ F/yᱤ$Q5,15}}Dx_@* `WAFoKKK2Nx(xҺ@(8̐( r|1,PE79'@u]$G;K  a`8+)`o TO3)7) '@Q~4` @1H@!6}ϘI)/ 2<^ P5,s%Dq#.!XDg 2`+4Ăd_"bL_'+A V4 @Z@8<O {;4^6vw| R扙Ձu  030Pf M£IfytgXl ș:L6!c b Iy[ |`=45#@QVBXA!d2A7 .8̬C< #VA#מV̀E//zJ؛X|7XG4 Fj.%1hf" !`!F~IENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_EditCopyUrl.png0000664000000000000000000000701612504533504022541 0ustar rootrootPNG  IHDR00WbKGD IDATh޽yp]yYղlٖ%o lRP\2%CNRhڴHf2@'QhJ @\P8 Ll lcYJWw9|?νֽa9::wg37ǽ&E1X?wz3vmH 3M D3<={Jؘpԛ-mwA 8U `o_>,X̗|a^qut}ѱޱ#a}"?i;O&ᢏ K;=Zُ\ߗ'wȫ䍑I [yb>oN{CEfl2Y p?cn^-m7.:? ݲ/FrlqL|ysZE2Vx7쿟^d͟>Gro ~XkO^05\)C̾fFeplXF$)d$@^V^VzFz{[gG kXW}k^3tuF cEhhy>~O{xHiu(7;2vޫi+:Gv B%l:>۾s]޺#_u;|#v) d(ꐔ+6a/ÌH+}mzwC_8K`.` 7s,;ivwLY@x"N*9L*6^KmC!h< Z4Yfr{>!WtN`ǁf~ǞOE,_Fͭ)CI2^Csc##Y"$E?X:} ?ls%;\nykԥ\u㦵n _ﷶ7'nɛ<" "hee"ڛqbY2Yt`(=l00{#>йv"cu=;jƶ{&νdSխ?[xW[t˜˧ps-t$:EԎPyl6hR(F"qo/4&[:jWy4- pK,ﴳ{8~ mCJʜEݖN44VEzpaW1v2k  m &/dD5ƶ΍@FP"t!l 庑R|&,8MA)k Zlea їĭ/P`4bD¨&vTi@ϋ CMUK_s'Z|!sk˜3^7eZL1pbsCr Fh ~G 9xS^ITJ}i#NBVJkRK31"V(66}^SPDôDgs:Ӓ";2sYH'a%HX N#DU䜔L+=b;jB udluWGvyV"kkI9)jjvJ%@QC_ 6Eߑn~\{U2k.[N%mI;in:.pkԡcFZ4Givirhtirhtiti4i8&9 ~6v”H,Isut7|”H v#MNMHS$7ڍ4LSYSX-.*C<1ҢoǞF~J}v L'>4Y'"[0Am&|jCKJn-ZF_.u#! P>jl$e e([~  e`|v;sz#BKLQ:g4zJa`wIZIꥁpuI:a"UFa–d/*{a,g:@vϻ7 ݨTߍ]ºu\5ĴG0@ɰ=ۙL)#N_2 S6bC|^pC/sǦYsWO~04ihtßg7ׇnN.dѲ謅VˬzL6œ]&0'f"7ٞXh?~.OKɏGFֽ\5ӈ."X徽2a_Jr $iW%1MԙG'trg ROIm_ A‚TTf.?|ŽgBs C,3OPҟ)ETV W&_˪V#Ηdr+TNr*YtldU1^PK L\m&iטEEL '- K Wl.Ul'Y&yhL*Odȁu'BT/L Ej˜"uY@ + W̄[.Fu2*,MN*FWH%_&~bYEpĀFtHQq4U[~'1bueDleP@ o_}+5KʼnILemW* -yjY3>L֌u`-(QRS;R lT+']'Ϣc{Ȯ_pٻ}:V9\^ ey?XCD܈ ZIENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_Window_2Horz1Vert.png0000664000000000000000000000334512504603072023612 0ustar rootrootPNG  IHDR00WbKGDIDAThZ͋E1YxBB Dz~jHDp;_}UAN 7C"ǾȽ:̾=pL`x.Xmw}ǶoX}ý|'܌OxٿDƛNj~v'~ǡ-9C㎱Rs8 XJ8J-1'q҂_DIcMˀ 6L`#$L0frYB&a?/G5q(/ LsR{*=R0^~`R؃jkB%X׶M)K<#[+DǴhdpc g,\z򲕁2fAoM vá`[v߯2oj!^;x m}2z=y5088wiLclr'^zn'z=\_&Tju7<~e`P0(F@JwH c1 &')^T<(f֪BR0GG&U !'kDXXBdvVc"AF!]7[mzX+y%`Dn ^B>E &x4P˙'J BmĆV P *+).g1.h[h@ˍ8 &^@p¼f.9 z2b*#Go D!Eyv̧wQ$]6` B%B"ܨ)B&ܗ&D6%$~!in '#^,ō%r!P,Eya:g!%S`$361̍t]RɜZ+$6gD/ޥPN|3/"l-SIƋ1"JSE?`<`` XcC0en^^U5'{FYVR11#ln7JmfqW1ПpcY iĹY9yj2&n陳yP;9V ;i(}E[ F|ǔ2%iM bRѣRGȓ9?:.V6%7%Ӓ>ďw`B$Z䞻Yt? MDF8,vs1 dЀ0wyoO^ [gɚRWoN){@?s{`t/W6܃W?#qvG!NSc4:n`vإڽ[f&v T}ࡧ¹ g}Oh/cb+.oaXUn~~|wpqN :K<5g%Y_1Qf;1ݶg~wfJ*VA˜R}WuO8T,IENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_TextAlignLeft.png0000664000000000000000000000172212505257734023057 0ustar rootrootPNG  IHDR00WbKGDIDAThZo@.2H-*eTea`G_C7&fFNBR%\%9ql?82;NO:޻サr)ၗ14ͣDi c9OE`yșs׳ Y8N d\[4eEQhK+N88ٶMmx&hkI\MIENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_File_SaveAll.png0000664000000000000000000000601512504535010022614 0ustar rootrootPNG  IHDR00WbKGD IDATh޽[lyoHDQ)ZJT)$Gq\N#)\EuP  EZHbp\I5&ĖȖ`9 )Rv;3>3$e ,f8wفn>r;]dfn2irH޹e?θoĆKd@Z0d%*3 c1֮mmu5v8P.]z/ iX{5 O}K`2;b|j +u.q2C0WO=GO#E>MFЉ`1 `" ´9?]80^3~g9ɟ>I^zu}&,w0͔ !Y 8O?ǯĿ>ivfK% K$Z 㒖hTpK%AHP|~תӋsց7`@66}¯;§Ҵ!+6FB0z({-ܒ$&NĀR)rVIphM0 wV X CΜ#.M-prf̋4m77J_m:`,ӏcz qHT* !i Rrwnb]J22<;d<ηTi}YPnz|WxYW֍jMnхԞ.1 蝊xQӬks \}߿!xy2ƸsNn,P%',C,DL,V[Ptko ľ ܩεfahg /:Ki41J=9n,+4Xs͚}MFnXeIlB7^8}|(i=R 3k၄a@A7chDnr%/a&ײnCrB Ń8֭^|Dˁq.X\D@T 6RZ0nsI(nu!5aUSA`:Fp{ Ci8<(Y8X3T\Qa߷Mų9}\yM`lDoF1Br^rU tӝOgzSuO,z))KqD0)aoBS,X%jw5m ql?vyDa0:>@ߨb G݄h!HvYz-,/.RҤT*+KQ;&#р>2ǿv28l̓edޤ=SJJS4h+721чѶ+<)[O'8р Mߢ*|ayڄ<<}.\xhͣ`5+f$2n@HK/>w 067Aϫ<tRʕ'z f|ʳ0#`!Ơ!΁{<ihj(R}d{x_<M{.yF?9HѠ[<ƶ7NV ;xР;ЧMfJ"@xxA2(x~553+ ?Em5jX 6yვv@G[!-!V(OEA$ DKzFS@m~~H#A K5{1a|Ї*hNDhDvH5GLיL3G[OkC%,-5?#KtiWOجVVf|F-טĩi!&iݛ2)1a":fD7h`V5^g"TYٴ(4skJHvFLc&HG17'LƧm(bm5ՀֆF#!c~=;VD1kР?oY:#QֺfZZAiվ I!GI5w.aZ oܺ~/hΡB54ox;u>d ^T/9竿,1LNpu%Qt?_u5XufT:+ Ь1X:̞_x2`ˇ;G~v'C[|uC㞱Rshy3N}|>d B!g, XMW-1'eˉZgZ4 uf0l!aj jT%qkB FxTtP0*I4za:RŃjkB%`=^ cF/< )pӟphaH[ }`60 y{da~Ŷ6o'#_˥UFk} _!a{«/c0s'؂+/Eإ XNN7U@%h#}(\MJ1 v| 0K 8^17&BŢ+=P,<@BNV,"A_Y/ Qr^QNcD8yD"sR- Zub .R>٩2tIa1Ч|RHi/ 0d<#$)p7OԴ\T{_)8N1`} !" \K VƇx.|"e< T+9Oy}F+#vebCxHU\>,3eVr5uL{$}1`| !Qt(AU\eKu!QsZ) %A\%W9Y&h9]ʋU|?,ϥ X4cUFMb BM!Xq%c@+_B3SX0rJԙW+!T*ĽlRB0\zEKђc 1Yf!_JUB, $MZ2\iƾDg&&7+TM[&\ LIKJ; fnk襄e2 eD-WT\D&0}+\M#o1}ʷJ<6GebB`Z5mvǀQO[2♉,d@Ijk+`?JgBYNd !DFE1'*Kc<Li\Is1g_Q;}&dJk-Uu|#5 1=C[1 먐vjF# c(C񀀰q}oN]``*qss [3:{Mc *_rDȑ* 6m /mC;Ȗe1u]pƄg454d.,apW1 '?_HD] M3uy\ >|bPh0\;|-t)PrDT߱jtȷr33ʕ ]ص7mc;X4`{i_ 6>(qIENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_File_SaveAll_Disabled.png0000664000000000000000000000544412504535244024421 0ustar rootrootPNG  IHDR00WbKGD IDATh޽[lWzR&qIh !i)$ px+[Z奨HBA\^zIoݤh5N⮯ݹsx؝z]2=s}leX}}ni-/_tbqnL`X wK4 dsMBHPֺykc̺EZkͶm#Xp] 8z*xu&8 w#={VyKo,!3]M[>~c0$#-m3==M\}G}8<^ϻp.N=~;G?<v.z8$UVY^)9<*Nw.^⮠RHz&1M#DǤH4HX T*O'ۃ-lR2EJX-2_ǒ&B0Ѩcq"wWJu?]a胃Z'pFWIgRo;ݍ%,[e?~c l6A%,"ˑdd``Y" )Z)dʙJYߕW?&հϯ13>bmϱcǘl"AВ`3-AYW'͌7Ü7G)37JT7<4;h5PuL#mt:s⍬7WUu LJ!S \MFgHtGyxی@k9m)6>^{S.B*GU(,6ǫSW\I(Ykd7|_!}6~ޤ4xGbd2A>'Ns}%f,vؑۅ annϯv210tɓLNNn"Oe\ԩSضdY\\\xg>;wl.:& .]~y=@`!T`DkW\w~ǥ7[RvL9_ՍnhhYONJ7@Gs 'h7`3y4 fxPHЩ7`k ÍIF@)[Mx( iUyNQt؊4@F'NAkrl6K2-{ިi}6u؊41L49FJ%Q ̄RJ.A0::JTVl& );DJ&XaXhhjRHF1 ,J)nVRζBI=+:{FIoLjIٿB^y`aabWWW)*J)FFF v6?Z. "΁_`)?x#ZkjZ[-98s̟:ʮ_okӗ#`| QOk7|IENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_Folder_2.png0000664000000000000000000000663112504536506022001 0ustar rootrootPNG  IHDR00WbKGD NIDAThy\uzMhF@ )2{D $@\Mpb@1T HT H!1vL c(%`HHY bFh,{ޓ?ЌvUyUvwwν߽D_K+~Վf/-߾]fG*Ӓ)>vMdQ_|V$@{ kN+-uw`6>3)?&KI@KH]OA+DkiL¾}|-Aot3KᇚT>7}"+WIk604yOJ\rz 7=uyEc jI=3U~hc1x饍-xEsnP1bd+-M4pIiVNќ< ~OԦ_ 3ՏRG~N.oijh{DiЮ0XTS zզGw6mυ3,rF+i洠芏Q=#`Y !9'iRe@$jUZAOWq''028(~ 90 ~}\2XPI(XVS,@(`,Vrq 0Q-FQ!ձQF-ff''PWmU03 h B9oA `D!m ނ  Z?ѳh` BM  (?ÀTMVFm2Д|h9"SX R(8^q?e'/ae`]xnMFTe <BB F"AM ݋&n TbmkhnJN@9&7{ Lt:6ZX=;"v%d,n-9팷޼~M~UEK}g٬wd.RR ;HR 󨚞;XБsih] IEJ~j|t; gTyj6lI<=xמ;o:[W?鹬-2=j:PA;kE7E\ "Wg[LV&QyR#;W[MThԘPoiN ƖOsWϰs;:5R2a66d2=zC9 >cs8μ;Rurgឣ+/\F=[[VWU9XLm}Togzz~e{zu.Ϻ{uӮ'q|-2cVG_tyۺ.0U&ʣ_[W Lez^/4;I^PΑ7'%?Uh^5sKdzF> Tۉ.Vj.LqMS:QmޭoDaO|hfz*"G'% @>6ez&ȈJ^(ұ) @MV"OxX# 1=I(1LJ@ś{{8pdџcEF ~o045l=o?j_&0тGRiND ~[RǑW*.q$F 'Mԋ5^t:H|S ٪@b8Bͤ:UMw6;ƴ PaՒ.< gO`zWju\a`Mg9;7(RxW6T-Fo*GՀq&?g.WY=s%Ik<\crqã?ӝ7=㺓 UUHB_h `нq3\>woY1(9U)!6e'5=(U`YZ hhokS.%%gyp7܆t5"Z2jpD:qTlVGfNnzg"bD J+W4:2` o<^|͘~G)49>xhrba1yfݱpKK7{+Qr,HBG)ZHze*Fca528`Mq,$%}{ٵ޷Kv:Zz@B7?ɭs8eN+Z { wn_xÿZ%JJOR* ]ԃQa7 =Gg'a~'Jtk +VJ7Zas3tx PVtv&˗z٥97l,)z(Dv.c>s8P`hx>{1ʖF0pl2 k\X CWf4NF%[2w\ *^y IENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_Key_New.png0000664000000000000000000001027512504537612021704 0ustar rootrootPNG  IHDR00WbKGDrIDAThՙytUս? wȜb@&(KxXXA-k._Z[8]-"*VA s!1 ޳BqzUZ{sNr}-| *!6GO:*d9^;n{4 v$saP6D9@J{L3!KrX}EekL.k)6dQ!1 vh<>OU"}oY9idcQ(P{hg;:z+gMq0t@$.U zΦ'P\f8 J3{CrS/ 2%nuϕATG"E$')f_)R_LR_+̰vݰlـz p7͖NI eȽm>3OṁMuŻ'~u+CdIDpmiٵjw4X'`W  :ԗosUsOV+ÏxCv@/n}Q3tTPM!#Otl:O>W f~1IQ̤=Oٱ ǶvL@iج%k-6$j& (AX|Mq c!d C>X)G< vw:MQl~[F*͏Jv m[؟G'M5`A͠uڴӇp_NlY 2~̼q8TL^ظg ƿET:z<DַFy<:Pk޶[o8fP40ˏ\.X',a8bB Iў} ;wx. F=~z͐%2 >>qN^Czo 8vs﶑NJ.YĭMRU&{1!B\el~`yZ1`Tn5|:|R4!m@ tTCZUyц:aG휫Ժ!,¶+O0j.k}'"LC !O|"!ʯsɍL&ZA[H r !|$:-<2`yP|9laXVI3^痿Rʐ(TC6t!Ю d he-y@ D@P{ ݼ Xx1>h QF:dB}q奍`JJaBPmך~#k6YjR3aq xE@: s6@t\ Ÿ{`ۍi?tt6zk;U8YřCI)h"jAIXJXx51*[0?"V2'JlmWZ h/x${ﳀ b;)$R :Z0lG’H(˅8UZB$&᭻kP`_&*Y>FHָLԠ고 ^+Dްp4KV=_J0z3TL@3 (hHr65$=]&m3yWUzc[, kjm_ @csw,nժh*g{(3AU>6./TU~9[7hk{2"4@+@VB4{V*{5񠄟 &p /YL$,Uk:TK.OCsr4S3`$PªGs|zܯΌzC^TLn H4%oQðVۢB H_ Tw8Ʀ1$ im VK= UP@` F ^PCg@ V=A7vX̂$U@{82&#ڦ3\ySul~$`{66Yw&F*|? 63{ReBMZ _w3  W,ӊ5 ujD$T(?~:LּPh^0/'[H?T@ Bp?'HM?\KX8*t%5!/G*1{iml%4Ȳ͐iޕ ϸ Mp$q0"**s6#_> m1SY(ۊul ~WlGor,\rP2Y Kvuy6v8t{J8cL SXuG"cOh/~b\*}KZ m.'rpũ-/cՓB?5Nb"L ENvϿmU /'$&!̓Jlz:Aސ Nݑ" 0r ?w;zejXs0N6xT94 F@ k[r7YVSCy-$ǴBEI_r YڊhߜС(7e3ynh.$[Q tuԐ7!3%txܺ>5zL;f`g)A @]C ,h Ͻ qy2ȄOC::MV!t*xYMY_1fY}rHh'yZ@Y$Y~] 5IENDB`Ext/Images_App_HighRes/Nuvola_Derived/B48x48_FileSave_Disabled.png0000664000000000000000000000262412504535600023622 0ustar rootrootPNG  IHDR00WbKGDIIDAThYKk#G{1~ ",$ч_ٻOI\s@.>||`lfmCf;M=%9 nWwWUWuH)%/|Swh߿R@)$Pv|]>~|{,句HYw:7t u7jl>8R^/?=筭.:!0DVR_ћ=!s}stt{vz9,ZRJtBp?+8X[[CL !,nzPJe!R!cZ-K'V& XJ Ji ]1ҿS2(j=9)|QZ􆩰*lnnR`0(#l*$(w tY10t/LN `XQŪ@Tr̵^QQ d(lSꮬZЌQ]E!]NQc@Y- J"JYRS [6,9e1i`wJêD2.W}[e<+ -*@&S8S܅l@ =uNJ3oLaeUf^9/:tuK bRLW\Wey@p8Y?zTD)E2L8.T3@yaL*;ifU1VHxesg*tB1NOOXY>(L@"1`*uM:cH8??_dt]ATj6u|߇jpShbNWPu)TA籢Ȳ cY\U圉&9HB`nnn cc B)SSȬ$(H>|Fey_gt(T֖)B8<iq\qH1xI4e8E!=cJi:SHm9REeY]eLchVŜ^P]]]A^O +l Ѯ΄aMZIENDB`Ext/Images_App_HighRes/Nuvola_Assembled/0000775000000000000000000000000012606740432017163 5ustar rootrootExt/Images_App_HighRes/Nuvola_Assembled/B48x48_Folder_Outbox.png0000664000000000000000000000216212505231516023422 0ustar rootrootPNG  IHDR00WbKGD'IDAThKlE3޵c&mRJ%< C Q5QZ.@*;6R$$TB &*TVHp@84$ ]Nivfov2(3D1:K DQXdWaGg%ZeJGvUMU!npdAɨkg:5N?Bg6Fe16H)H6ŨKHyS![ބgA[D$nvp\'oKiҰ#A*kOtW0^>X9 0k6Mq M7n^r`XWlO6 P\]3B$yh`rsʀg;bLMpK^8<4TP,m@T" i>+5c^`/a {7#;Î, ִg G<N8%4&"j+$Ó8]lgW7ׂہx̄˼6i U_J 6f_6L8`||+Z:NA[>/[ZGJ06'xL]@=`_*Dm:DKM#U8Qjٞ[$"9p3 EuUwnATomnthD[#އ9F(bøAY/DYd) ƍCMҍ>%Wځc╂a*/@ϮuiXAE kzN`~xgk=1E?㒺tSN8 O%]aXS`[tL.YiPFl,3߉b:}yRy'l5^:6{ymf =ZeŅX6f6 sLSMOb )ʟ8jظ*\yBW¸l2ؠNGIENDB`Ext/Images_App_HighRes/Nuvola_Assembled/B48x48_Folder_Inbox.png0000664000000000000000000000235412505231064023222 0ustar rootrootPNG  IHDR00WbKGDIDATh[U{3r/aEEI [T||豗F"!( 1"( 1gҰQ/3r̜sޫgN̨go߷k TPAšJp&lF$B|_P(S q NJyaK('{J+ә準7i>Z0rJ~|#cq84b۹z٩P͎ "G G1PQ HэEhB,<'S*&yAzc^D>,nL88;92$F!]|-ʹ BLMG:'Yjc% ޴s`@0(3)^d{YG<1kD=uB:JHFҞ #z8N)MĈG*V|Cyzrۨ[6qDbE}BNH>A@(M&*D"BTe? tD P* D,] *Ajx dbsq?YdBMǝjt4@]'.w>ݟW/E\k<1ZB+s"8BA{ 2~5 p"8ɺıW.<"*AiV_\SƐj%Y} xz {'?t<GSST٘lTD8k0qb}ޔbWIvI*M~4z"Fq7ËT~cC@Dq*O_{d܂g'&5ߺlx6]ȵ=ФFz\=3onu,9wSvnJ6M3337r镗GB>O_v69K?bG̏Mܝg4M.doޫBtw LIENDB`Ext/XSL/0000775000000000000000000000000012606740432010770 5ustar rootrootExt/XSL/KDBX_PasswordsOnly.xsl0000664000000000000000000000162711061221400015144 0ustar rootroot Ext/XSL/KDBX_DetailsFull.xsl0000664000000000000000000000517311774332420014545 0ustar rootroot <xsl:value-of select="DatabaseName" />
Title:
User Name:
Password:
URL:
Notes:
:
Creation Time:
Last Access Time:
Last Modification Time:
Expires: Expires: Never expires

Ext/XSL/TableHeader.gif0000664000000000000000000000067510045734350013624 0ustar rootrootGIF89ad,d@H*\ȰaB#JHŋ3jxǏ CIɓ(S$˗0cʜI͛3ɳϟ@ JhPH*]ʴӧPJԀիXjʵׯ`vU@ٳhӪ]˶۷kȝKݻx˷o^  LÈ+^|8ǐ#KL˘3WϠCMӣ ^ͺװc˞Mvsͻ ;ȓ+_μУ7_@سkνCOӫ_Ͼ}˟O?(h&X 6F(Vh;Ext/XSL/KDBX_DetailsLite.xsl0000664000000000000000000000446211774332412014541 0ustar rootroot <xsl:value-of select="DatabaseName" />
Title:
User Name:
Password:
URL:
Notes:
:
Expires:

Ext/XSL/KDBX_Tabular.xsl0000664000000000000000000000472211774332400013724 0ustar rootroot <xsl:value-of select="DatabaseName" />
Title User Name Password URL Notes
Ext/XSL/KDBX_Styles.css0000664000000000000000000000366510471561622013607 0ustar rootrootbody, p, div, h1, h2, h3, h4, h5, h6, li, ol, ul, td, th, dd, dt { font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12px; color: #000000; } table.tablebox { width: 100%; background-color: #AFB5CF; font-size: 12px; margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px; border-left: 1px solid #AFB5CF; border-right: 0px; border-top-width: 0px; border-bottom-width: 0px; border-collapse: collapse; } td.boxcontent { background-color: #F0F0F0; font-family: Verdana, Helvetica, Arial, sans-serif; color: #000000; font-weight: normal; font-size: 12px; border-bottom: 1px solid #AFB5CF; border-left: 0px; border-right: 1px solid #AFB5CF; border-top: 0px; padding: 5px 5px 5px 5px; empty-cells: show; } td.smallboxtitle { background-color: #EEEEEE; font-weight: bold; color: #000000; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12px; background: url(TableHeader.gif) repeat-x top; border-bottom: 1px solid #AFB5CF; border-left: 0px; border-right: 1px solid #AFB5CF; border-top: 1px solid #AFB5CF; empty-cells: show; padding: 2px 2px 2px 5px; } a:visited { text-decoration: none; color: #0000DD; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal; } a:active { text-decoration: none; color: #6699FF; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal; } a:link { text-decoration: none; color: #0000DD; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal; } a:hover { text-decoration: underline; color: #6699FF; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal; } body { font-family: Verdana, Helvetica, Arial, sans-serif; background-color: #FFFFFF; color: #000000; font-size: 12px; background-repeat: repeat; background-attachment: fixed; } Ext/Resources/0000775000000000000000000000000012606740432012274 5ustar rootrootExt/Resources/LockOverlay32.png0000664000000000000000000000401311436206114015371 0ustar rootrootPNG  IHDR szzsRGBgAMA a cHRMz&u0`:pQ<tEXtSoftwarePaint.NET v3.5.5IdIDATXG p a5ŽB, *0U,B,[ T-%D@Sm1 LRҤj*[3b$${!y}T g|g)3O0Y2>MA^6?v3;gbsC~ag~i,feQ,< Qv@`f2 䯋͚`xL,|#7ܠMIӣw߭SiPX:f{٘B`[7N`o]}T碢|-iF)9YJJ֯W嫯̴iʺ>m<$45k$w{Zٱp)6VJInl>kl|^j(WbVz.$Sz CFyg8ݨ2TŜ9uڵRB•qXR1XTGO ٬ݷzqMq𡇤s%K_/6TS1}vu'Q6W͚_i}# 5x4c)͞]3DD'kW' pA2v| 4pƷF?t`qY*=O7{faa*^60t蠳b U,t\x~< S%T  U[Tܲ! 4n6G >+J_R|7\RΈE 7&MTx:UE5Ju-TՉ+ m`c'<>t}Wxo?ϲ[tvڍw3#(OQnRCt7k:uJGͦJx/!xo/hI|$S2xq7#Gz>lۦ5ԔC^-of ݹ~f̃!*[oA^XO*SM].Lγ|C.&T4Hr`/inY׽**f;|P'("{I-П2FAQҨn<T,E?KlfhBnT8uP(fR%S;w6<c1n$?l\6ݭ88cR?S2.ghBv )߿hrGV.zc:9a♠(沛/L 2Li`xd'P cǪq^xb%(z=9NUkvVQpNt\xFϋcbt|rWeT/f*N8DCHm&'*aQ^vW̏K勋ӎYvRg`-/GM3'Q%/2:Zy~Gfj̚5*b\ bB QvG߳1Wc1?d}qrYT}'RֵzT iZs*ߩ{ |wnu9u9pTM/Թ97ΒES\qyήGTR])Bٖa6{L2&N" 2"G1IaߍIENDB`Ext/Resources/LockOverlay16.png0000664000000000000000000000144411436204034015377 0ustar rootrootPNG  IHDRasRGBgAMA a cHRMz&u0`:pQ<tEXtSoftwarePaint.NET v3.5.5I}IDAT8OS[HTQ]wCԘ)>RA;Ͱ@S|a~"?%%G}Q b1&ab՞Q6,8:{ﳎ]Dz pH_ -`}7ǽoԭ@{nDEEhmzSrsy=<T*0$Hmͫ!!RWG\QZ9lF"?""w-4?^WU_DN]Ҧ RRQ޴&$GJ tJ,.&KJ kga!yy̅8S2 N~~(rߟkn}*90L!S^HLLM~LM=NEY^fE0'--|#τs xvEyRin䚄S d.'|7033r*# g9n'%ђNsL =˵i4<\F1}=1;3+M6b:;:ߨR[AADPb2ёAinh[`i v;e磚 mojEE>, Y_mÎIN;YEv[eoo8w}IENDB`KeePass/0000775000000000000000000000000012670011326011107 5ustar rootrootKeePass/App/0000775000000000000000000000000012665311132011631 5ustar rootrootKeePass/App/Configuration/0000775000000000000000000000000012665300316014442 5ustar rootrootKeePass/App/Configuration/AppConfigEx.cs0000664000000000000000000003142312641461334017141 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Windows.Forms; using System.Xml; using System.Xml.Serialization; using System.Diagnostics; using KeePass.UI; using KeePass.Util; using KeePass.Util.XmlSerialization; using KeePassLib.Native; using KeePassLib.Serialization; using KeePassLib.Utility; namespace KeePass.App.Configuration { [XmlType(TypeName = "Configuration")] public sealed class AppConfigEx { public AppConfigEx() { } private AceMeta m_meta = null; public AceMeta Meta { get { if(m_meta == null) m_meta = new AceMeta(); return m_meta; } set { if(value == null) throw new ArgumentNullException("value"); m_meta = value; } } private AceApplication m_aceApp = null; public AceApplication Application { get { if(m_aceApp == null) m_aceApp = new AceApplication(); return m_aceApp; } set { if(value == null) throw new ArgumentNullException("value"); m_aceApp = value; } } private AceLogging m_aceLogging = null; public AceLogging Logging { get { if(m_aceLogging == null) m_aceLogging = new AceLogging(); return m_aceLogging; } set { if(value == null) throw new ArgumentNullException("value"); m_aceLogging = value; } } private AceMainWindow m_uiMainWindow = null; public AceMainWindow MainWindow { get { if(m_uiMainWindow == null) m_uiMainWindow = new AceMainWindow(); return m_uiMainWindow; } set { if(value == null) throw new ArgumentNullException("value"); m_uiMainWindow = value; } } private AceUI m_aceUI = null; public AceUI UI { get { if(m_aceUI == null) m_aceUI = new AceUI(); return m_aceUI; } set { if(value == null) throw new ArgumentNullException("value"); m_aceUI = value; } } private AceSecurity m_sec = null; public AceSecurity Security { get { if(m_sec == null) m_sec = new AceSecurity(); return m_sec; } set { if(value == null) throw new ArgumentNullException("value"); m_sec = value; } } private AceNative m_native = null; public AceNative Native { get { if(m_native == null) m_native = new AceNative(); return m_native; } set { if(value == null) throw new ArgumentNullException("value"); m_native = value; } } private AcePasswordGenerator m_pwGen = null; public AcePasswordGenerator PasswordGenerator { get { if(m_pwGen == null) m_pwGen = new AcePasswordGenerator(); return m_pwGen; } set { if(value == null) throw new ArgumentNullException("value"); m_pwGen = value; } } private AceDefaults m_def = null; public AceDefaults Defaults { get { if(m_def == null) m_def = new AceDefaults(); return m_def; } set { if(value == null) throw new ArgumentNullException("value"); m_def = value; } } private AceIntegration m_int = null; public AceIntegration Integration { get { if(m_int == null) m_int = new AceIntegration(); return m_int; } set { if(value == null) throw new ArgumentNullException("value"); m_int = value; } } private AceCustomConfig m_cc = null; [XmlIgnore] public AceCustomConfig CustomConfig { get { if(m_cc == null) m_cc = new AceCustomConfig(); return m_cc; } set { if(value == null) throw new ArgumentNullException("value"); m_cc = value; } } [XmlArray("Custom")] [XmlArrayItem("Item")] public AceKvp[] CustomSerialized { get { return this.CustomConfig.Serialize(); // m_cc might be null } set { if(value == null) throw new ArgumentNullException("value"); this.CustomConfig.Deserialize(value); // m_cc might be null } } ///

/// Prepare for saving the configuration to disk. None of the /// modifications in this method need to be rolled back /// (for rollback, use OnSavePre / OnSavePost). /// private void PrepareSave() { AceMeta aceMeta = this.Meta; // m_meta might be null AceApplication aceApp = this.Application; // m_aceApp might be null AceDefaults aceDef = this.Defaults; // m_def might be null aceMeta.OmitItemsWithDefaultValues = true; aceApp.LastUsedFile.ClearCredentials(true); foreach(IOConnectionInfo iocMru in aceApp.MostRecentlyUsed.Items) iocMru.ClearCredentials(true); if(aceDef.RememberKeySources == false) aceDef.KeySources.Clear(); aceApp.TriggerSystem = Program.TriggerSystem; SearchUtil.PrepareForSerialize(aceDef.SearchParameters); } internal void OnLoad() { AceMainWindow aceMainWindow = this.MainWindow; // m_uiMainWindow might be null AceDefaults aceDef = this.Defaults; // m_def might be null // aceInt.UrlSchemeOverrides.SetDefaultsIfEmpty(); ObfuscateCred(false); ChangePathsRelAbs(true); // Remove invalid columns List vColumns = aceMainWindow.EntryListColumns; int i = 0; while(i < vColumns.Count) { if(((int)vColumns[i].Type < 0) || ((int)vColumns[i].Type >= (int)AceColumnType.Count)) vColumns.RemoveAt(i); else ++i; } SearchUtil.FinishDeserialize(aceDef.SearchParameters); if(NativeLib.IsUnix()) { this.Security.MasterKeyOnSecureDesktop = false; AceIntegration aceInt = this.Integration; aceInt.HotKeyGlobalAutoType = (ulong)Keys.None; aceInt.HotKeySelectedAutoType = (ulong)Keys.None; aceInt.HotKeyShowWindow = (ulong)Keys.None; } if(MonoWorkarounds.IsRequired(1378)) { AceWorkspaceLocking aceWL = this.Security.WorkspaceLocking; aceWL.LockOnSessionSwitch = false; aceWL.LockOnSuspend = false; aceWL.LockOnRemoteControlChange = false; } if(MonoWorkarounds.IsRequired(1418)) { aceMainWindow.MinimizeAfterOpeningDatabase = false; this.Application.Start.MinimizedAndLocked = false; } } internal void OnSavePre() { PrepareSave(); ChangePathsRelAbs(false); ObfuscateCred(true); } internal void OnSavePost() { ObfuscateCred(false); ChangePathsRelAbs(true); } private void ChangePathsRelAbs(bool bMakeAbsolute) { AceApplication aceApp = this.Application; // m_aceApp might be null AceDefaults aceDef = this.Defaults; // m_def might be null ChangePathRelAbs(aceApp.LastUsedFile, bMakeAbsolute); foreach(IOConnectionInfo iocMru in aceApp.MostRecentlyUsed.Items) ChangePathRelAbs(iocMru, bMakeAbsolute); List lWDKeys = aceApp.GetWorkingDirectoryContexts(); foreach(string strWDKey in lWDKeys) aceApp.SetWorkingDirectory(strWDKey, ChangePathRelAbsStr( aceApp.GetWorkingDirectory(strWDKey), bMakeAbsolute)); foreach(AceKeyAssoc kfp in aceDef.KeySources) { kfp.DatabasePath = ChangePathRelAbsStr(kfp.DatabasePath, bMakeAbsolute); kfp.KeyFilePath = ChangePathRelAbsStr(kfp.KeyFilePath, bMakeAbsolute); } } private static void ChangePathRelAbs(IOConnectionInfo ioc, bool bMakeAbsolute) { if(ioc == null) { Debug.Assert(false); return; } if(!ioc.IsLocalFile()) return; // Update path separators for current system if(!UrlUtil.IsUncPath(ioc.Path)) ioc.Path = UrlUtil.ConvertSeparators(ioc.Path); string strBase = WinUtil.GetExecutable(); bool bIsAbs = UrlUtil.IsAbsolutePath(ioc.Path); if(bMakeAbsolute && !bIsAbs) ioc.Path = UrlUtil.MakeAbsolutePath(strBase, ioc.Path); else if(!bMakeAbsolute && bIsAbs) ioc.Path = UrlUtil.MakeRelativePath(strBase, ioc.Path); } private static string ChangePathRelAbsStr(string strPath, bool bMakeAbsolute) { if(strPath == null) { Debug.Assert(false); return string.Empty; } if(strPath.Length == 0) return strPath; IOConnectionInfo ioc = IOConnectionInfo.FromPath(strPath); ChangePathRelAbs(ioc, bMakeAbsolute); return ioc.Path; } private void ObfuscateCred(bool bObf) { AceApplication aceApp = this.Application; // m_aceApp might be null AceIntegration aceInt = this.Integration; // m_int might be null if(aceApp.LastUsedFile == null) { Debug.Assert(false); } else aceApp.LastUsedFile.Obfuscate(bObf); foreach(IOConnectionInfo iocMru in aceApp.MostRecentlyUsed.Items) { if(iocMru == null) { Debug.Assert(false); } else iocMru.Obfuscate(bObf); } if(bObf) aceInt.ProxyUserName = StrUtil.Obfuscate(aceInt.ProxyUserName); else aceInt.ProxyUserName = StrUtil.Deobfuscate(aceInt.ProxyUserName); if(bObf) aceInt.ProxyPassword = StrUtil.Obfuscate(aceInt.ProxyPassword); else aceInt.ProxyPassword = StrUtil.Deobfuscate(aceInt.ProxyPassword); } private static Dictionary m_dictXmlPathCache = new Dictionary(); public static bool IsOptionEnforced(object pContainer, PropertyInfo pi) { if(pContainer == null) { Debug.Assert(false); return false; } if(pi == null) { Debug.Assert(false); return false; } XmlDocument xdEnforced = AppConfigSerializer.EnforcedConfigXml; if(xdEnforced == null) return false; string strObjPath; if(!m_dictXmlPathCache.TryGetValue(pContainer, out strObjPath)) { strObjPath = XmlUtil.GetObjectXmlPath(Program.Config, pContainer); if(string.IsNullOrEmpty(strObjPath)) { Debug.Assert(false); return false; } m_dictXmlPathCache[pContainer] = strObjPath; } string strProp = XmlSerializerEx.GetXmlName(pi); if(string.IsNullOrEmpty(strProp)) { Debug.Assert(false); return false; } string strPre = strObjPath; if(!strPre.EndsWith("/")) strPre += "/"; string strXPath = strPre + strProp; XmlNode xn = xdEnforced.SelectSingleNode(strXPath); return (xn != null); } public static bool IsOptionEnforced(object pContainer, string strPropertyName) { if(pContainer == null) { Debug.Assert(false); return false; } if(string.IsNullOrEmpty(strPropertyName)) { Debug.Assert(false); return false; } // To improve performance (avoid type queries), check here, too XmlDocument xdEnforced = AppConfigSerializer.EnforcedConfigXml; if(xdEnforced == null) return false; Type tContainer = pContainer.GetType(); PropertyInfo pi = tContainer.GetProperty(strPropertyName); return IsOptionEnforced(pContainer, pi); } public static void ClearXmlPathCache() { m_dictXmlPathCache.Clear(); } public void Apply(AceApplyFlags f) { AceSecurity aceSec = this.Security; // m_sec might be null AceIntegration aceInt = this.Integration; // m_int might be null if((f & AceApplyFlags.Proxy) != AceApplyFlags.None) IOConnection.SetProxy(aceInt.ProxyType, aceInt.ProxyAddress, aceInt.ProxyPort, aceInt.ProxyAuthType, aceInt.ProxyUserName, aceInt.ProxyPassword); if((f & AceApplyFlags.Ssl) != AceApplyFlags.None) IOConnection.SslCertsAcceptInvalid = aceSec.SslCertsAcceptInvalid; } } [Flags] public enum AceApplyFlags { None = 0, Proxy = 0x1, Ssl = 0x2, All = 0x7FFF } public sealed class AceMeta { public AceMeta() { } private bool m_bPrefLocalCfg = false; public bool PreferUserConfiguration { get { return m_bPrefLocalCfg; } set { m_bPrefLocalCfg = value; } } // private bool m_bIsEnforced = false; // [XmlIgnore] // public bool IsEnforcedConfiguration // { // get { return m_bIsEnforced; } // set { m_bIsEnforced = value; } // } private bool m_bOmitDefaultValues = true; // Informational property only (like an XML comment); // currently doesn't have any effect (the XmlSerializer // always omits default values, independent of this // property) public bool OmitItemsWithDefaultValues { get { return m_bOmitDefaultValues; } set { m_bOmitDefaultValues = value; } } } } KeePass/App/Configuration/AceDefaults.cs0000664000000000000000000001675712641461334017173 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; using System.ComponentModel; using KeePass.Util; using KeePassLib; using KeePassLib.Keys; using KeePassLib.Serialization; using KeePassLib.Utility; namespace KeePass.App.Configuration { public sealed class AceKeyAssoc { private string m_strDb = string.Empty; public string DatabasePath { get { return m_strDb; } set { if(value == null) throw new ArgumentNullException("value"); m_strDb = value; } } private string m_strKey = string.Empty; [DefaultValue("")] public string KeyFilePath { get { return m_strKey; } set { if(value == null) throw new ArgumentNullException("value"); m_strKey = value; } } private string m_strProv = string.Empty; [DefaultValue("")] public string KeyProvider { get { return m_strProv; } set { if(value == null) throw new ArgumentNullException("value"); m_strProv = value; } } private bool m_bUserAcc = false; [DefaultValue(false)] public bool UserAccount { get { return m_bUserAcc; } set { m_bUserAcc = value; } } public AceKeyAssoc() { } } public sealed class AceDefaults { public AceDefaults() { } private int m_nNewEntryExpireDays = -1; [DefaultValue(-1)] public int NewEntryExpiresInDays { get { return m_nNewEntryExpireDays; } set { m_nNewEntryExpireDays = value; } } private uint m_uDefaultOptionsTab = 0; public uint OptionsTabIndex { get { return m_uDefaultOptionsTab; } set { m_uDefaultOptionsTab = value; } } private const string DefaultTanChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"; private string m_strTanChars = DefaultTanChars; [DefaultValue(DefaultTanChars)] public string TanCharacters { get { return m_strTanChars; } set { if(value == null) throw new ArgumentNullException("value"); m_strTanChars = value; } } private bool m_bExpireTansOnUse = true; [DefaultValue(true)] public bool TanExpiresOnUse { get { return m_bExpireTansOnUse; } set { m_bExpireTansOnUse = value; } } private SearchParameters m_searchParams = new SearchParameters(); public SearchParameters SearchParameters { get { return m_searchParams; } set { if(value == null) throw new ArgumentNullException("value"); m_searchParams = value; } } private string m_strDbSaveAsPath = string.Empty; [DefaultValue("")] public string FileSaveAsDirectory { get { return m_strDbSaveAsPath; } set { if(value == null) throw new ArgumentNullException("value"); m_strDbSaveAsPath = value; } } private bool m_bRememberKeySources = true; [DefaultValue(true)] public bool RememberKeySources { get { return m_bRememberKeySources; } set { m_bRememberKeySources = value; } } private List m_vKeySources = new List(); [XmlArrayItem("Association")] public List KeySources { get { return m_vKeySources; } set { if(value == null) throw new ArgumentNullException("value"); m_vKeySources = value; } } private string m_strCustomColors = string.Empty; [DefaultValue("")] public string CustomColors { get { return m_strCustomColors; } set { if(value == null) throw new ArgumentNullException("value"); m_strCustomColors = value; } } private string m_strWinFavsBaseName = string.Empty; [DefaultValue("")] public string WinFavsBaseFolderName { get { return m_strWinFavsBaseName; } set { if(value == null) throw new ArgumentNullException("value"); m_strWinFavsBaseName = value; } } private string m_strWinFavsFilePrefix = string.Empty; [DefaultValue("")] public string WinFavsFileNamePrefix { get { return m_strWinFavsFilePrefix; } set { if(value == null) throw new ArgumentNullException("value"); m_strWinFavsFilePrefix = value; } } private string m_strWinFavsFileSuffix = string.Empty; [DefaultValue("")] public string WinFavsFileNameSuffix { get { return m_strWinFavsFileSuffix; } set { if(value == null) throw new ArgumentNullException("value"); m_strWinFavsFileSuffix = value; } } private bool m_bCollapseRecycleBin = false; [DefaultValue(false)] public bool RecycleBinCollapse { get { return m_bCollapseRecycleBin; } set { m_bCollapseRecycleBin = value; } } private static string GetKeyAssocID(IOConnectionInfo iocDb) { if(iocDb == null) throw new ArgumentNullException("iocDb"); string strDb = iocDb.Path; if((strDb.Length > 0) && iocDb.IsLocalFile() && !UrlUtil.IsAbsolutePath(strDb)) strDb = UrlUtil.MakeAbsolutePath(WinUtil.GetExecutable(), strDb); return strDb; } private int GetKeyAssocIndex(string strID) { for(int i = 0; i < m_vKeySources.Count; ++i) { if(strID.Equals(m_vKeySources[i].DatabasePath, StrUtil.CaseIgnoreCmp)) return i; } return -1; } public void SetKeySources(IOConnectionInfo iocDb, CompositeKey cmpKey) { string strID = GetKeyAssocID(iocDb); int idx = GetKeyAssocIndex(strID); if((cmpKey == null) || !m_bRememberKeySources) { if(idx >= 0) m_vKeySources.RemoveAt(idx); return; } AceKeyAssoc a = new AceKeyAssoc(); a.DatabasePath = strID; IUserKey kcpFile = cmpKey.GetUserKey(typeof(KcpKeyFile)); if(kcpFile != null) { string strKeyFile = ((KcpKeyFile)kcpFile).Path; if(!string.IsNullOrEmpty(strKeyFile) && !StrUtil.IsDataUri(strKeyFile)) { if(!UrlUtil.IsAbsolutePath(strKeyFile)) strKeyFile = UrlUtil.MakeAbsolutePath(WinUtil.GetExecutable(), strKeyFile); a.KeyFilePath = strKeyFile; } } IUserKey kcpCustom = cmpKey.GetUserKey(typeof(KcpCustomKey)); if(kcpCustom != null) a.KeyProvider = ((KcpCustomKey)kcpCustom).Name; IUserKey kcpUser = cmpKey.GetUserKey(typeof(KcpUserAccount)); a.UserAccount = (kcpUser != null); bool bAtLeastOne = ((a.KeyFilePath.Length > 0) || (a.KeyProvider.Length > 0) || a.UserAccount); if(bAtLeastOne) { if(idx >= 0) m_vKeySources[idx] = a; else m_vKeySources.Add(a); } else if(idx >= 0) m_vKeySources.RemoveAt(idx); } public AceKeyAssoc GetKeySources(IOConnectionInfo iocDb) { string strID = GetKeyAssocID(iocDb); int idx = GetKeyAssocIndex(strID); if(!m_bRememberKeySources) return null; if(idx >= 0) return m_vKeySources[idx]; return null; } } } KeePass/App/Configuration/AppConfigSerializer.cs0000664000000000000000000002611512641461334020700 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Diagnostics; using System.Xml; using System.IO; using KeePass.Resources; using KeePass.Util; using KeePass.Util.XmlSerialization; using KeePassLib; using KeePassLib.Serialization; using KeePassLib.Utility; namespace KeePass.App.Configuration { public static class AppConfigSerializer { private static string m_strBaseName = null; // Null prop allowed private static string m_strCreateDir = null; private static string m_strCreateDirLocal = null; private static string m_strEnforcedConfigFile = null; private static string m_strGlobalConfigFile = null; private static string m_strUserConfigFile = null; public static string AppDataDirectory { get { AppConfigSerializer.GetConfigPaths(); return m_strCreateDir; } } public static string LocalAppDataDirectory { get { AppConfigSerializer.GetConfigPaths(); return m_strCreateDirLocal; } } /// /// Get/set the base name for the configuration. If this property is /// null, the class constructs names based on the current /// assembly and the product name. /// public static string BaseName { get { return m_strBaseName; } set { m_strBaseName = value; m_strCreateDir = null; m_strCreateDirLocal = null; m_strEnforcedConfigFile = null; // Invalidate paths m_strGlobalConfigFile = null; m_strUserConfigFile = null; } } private static XmlDocument m_xdEnforced = null; public static XmlDocument EnforcedConfigXml { get { return m_xdEnforced; } } private static void GetConfigPaths() { if(m_strGlobalConfigFile == null) { Assembly asm = Assembly.GetExecutingAssembly(); Debug.Assert(asm != null); if(asm == null) return; #if !KeePassLibSD string strFile = null; try { strFile = asm.Location; } catch(Exception) { } if(string.IsNullOrEmpty(strFile)) strFile = UrlUtil.FileUrlToPath(asm.GetName().CodeBase); #else string strFile = UrlUtil.FileUrlToPath(asm.GetName().CodeBase); #endif Debug.Assert(strFile != null); if(strFile == null) return; if(string.IsNullOrEmpty(m_strBaseName)) { // Remove assembly extension if(strFile.EndsWith(".exe", StrUtil.CaseIgnoreCmp)) strFile = strFile.Substring(0, strFile.Length - 4); else if(strFile.EndsWith(".dll", StrUtil.CaseIgnoreCmp)) strFile = strFile.Substring(0, strFile.Length - 4); } else // Base name != null strFile = UrlUtil.GetFileDirectory(strFile, true, false) + m_strBaseName; m_strGlobalConfigFile = strFile + ".config.xml"; m_strEnforcedConfigFile = strFile + ".config.enforced.xml"; } if(m_strUserConfigFile == null) { string strBaseDirName = PwDefs.ShortProductName; if((m_strBaseName != null) && (m_strBaseName.Length > 0)) strBaseDirName = m_strBaseName; string strUserDir; try { strUserDir = Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData); } catch(Exception) { strUserDir = UrlUtil.GetFileDirectory(UrlUtil.FileUrlToPath( Assembly.GetExecutingAssembly().GetName().CodeBase), true, false); } strUserDir = UrlUtil.EnsureTerminatingSeparator(strUserDir, false); string strUserDirLocal; try { strUserDirLocal = Environment.GetFolderPath( Environment.SpecialFolder.LocalApplicationData); } catch(Exception) { strUserDirLocal = strUserDir; } strUserDirLocal = UrlUtil.EnsureTerminatingSeparator(strUserDirLocal, false); m_strCreateDir = strUserDir + strBaseDirName; m_strCreateDirLocal = strUserDirLocal + strBaseDirName; m_strUserConfigFile = m_strCreateDir + Path.DirectorySeparatorChar + strBaseDirName + ".config.xml"; } string strLocalOvr = Program.CommandLineArgs[ AppDefs.CommandLineOptions.ConfigPathLocal]; if(!string.IsNullOrEmpty(strLocalOvr)) { string strWD = UrlUtil.EnsureTerminatingSeparator( WinUtil.GetWorkingDirectory(), false); m_strUserConfigFile = UrlUtil.MakeAbsolutePath(strWD + "Sentinel.txt", strLocalOvr); } Debug.Assert(!string.IsNullOrEmpty(m_strCreateDir)); } private static void EnsureAppDataDirAvailable() { if(string.IsNullOrEmpty(m_strCreateDir)) { Debug.Assert(false); return; } try { if(Directory.Exists(m_strCreateDir) == false) Directory.CreateDirectory(m_strCreateDir); } catch(Exception) { Debug.Assert(false); } } private static XmlDocument LoadEnforcedConfigFile() { #if DEBUG Stopwatch sw = Stopwatch.StartNew(); #endif m_xdEnforced = null; try { // Performance optimization if(!File.Exists(m_strEnforcedConfigFile)) return null; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(m_strEnforcedConfigFile); m_xdEnforced = xmlDoc; return xmlDoc; } catch(Exception) { Debug.Assert(false); } #if DEBUG finally { sw.Stop(); } #endif return null; } private static AppConfigEx LoadConfigFileEx(string strFilePath, XmlDocument xdEnforced) { if(string.IsNullOrEmpty(strFilePath)) return null; AppConfigEx tConfig = null; XmlSerializerEx xmlSerial = new XmlSerializerEx(typeof(AppConfigEx)); if(xdEnforced == null) { FileStream fs = null; try { fs = new FileStream(strFilePath, FileMode.Open, FileAccess.Read, FileShare.Read); tConfig = (AppConfigEx)xmlSerial.Deserialize(fs); } catch(Exception) { } // Do not assert if(fs != null) { fs.Close(); fs = null; } } else // Enforced configuration { try { XmlDocument xd = new XmlDocument(); xd.Load(strFilePath); XmlUtil.MergeNodes(xd, xd.DocumentElement, xdEnforced.DocumentElement); MemoryStream msAsm = new MemoryStream(); xd.Save(msAsm); MemoryStream msRead = new MemoryStream(msAsm.ToArray(), false); tConfig = (AppConfigEx)xmlSerial.Deserialize(msRead); msRead.Close(); msAsm.Close(); } catch(FileNotFoundException) { } catch(Exception) { Debug.Assert(false); } } if(tConfig != null) tConfig.OnLoad(); return tConfig; } public static AppConfigEx Load() { AppConfigSerializer.GetConfigPaths(); // AppConfigEx cfgEnf = LoadConfigFileEx(m_strEnforcedConfigFile); // if(cfgEnf != null) // { // cfgEnf.Meta.IsEnforcedConfiguration = true; // return cfgEnf; // } XmlDocument xdEnforced = LoadEnforcedConfigFile(); AppConfigEx cfgGlobal = LoadConfigFileEx(m_strGlobalConfigFile, xdEnforced); AppConfigEx cfgUser = LoadConfigFileEx(m_strUserConfigFile, xdEnforced); if((cfgGlobal == null) && (cfgUser == null)) { if(xdEnforced != null) { XmlSerializerEx xmlSerial = new XmlSerializerEx(typeof(AppConfigEx)); try { MemoryStream msEnf = new MemoryStream(); xdEnforced.Save(msEnf); MemoryStream msRead = new MemoryStream(msEnf.ToArray(), false); AppConfigEx cfgEnf = (AppConfigEx)xmlSerial.Deserialize(msRead); cfgEnf.OnLoad(); msRead.Close(); msEnf.Close(); return cfgEnf; } catch(Exception) { Debug.Assert(false); } } AppConfigEx cfgNew = new AppConfigEx(); cfgNew.OnLoad(); // Create defaults return cfgNew; } else if((cfgGlobal != null) && (cfgUser == null)) return cfgGlobal; else if((cfgGlobal == null) && (cfgUser != null)) return cfgUser; cfgUser.Meta.PreferUserConfiguration = cfgGlobal.Meta.PreferUserConfiguration; return (cfgGlobal.Meta.PreferUserConfiguration ? cfgUser : cfgGlobal); } private static bool SaveConfigFileEx(AppConfigEx tConfig, string strFilePath, bool bRemoveConfigPref) { tConfig.OnSavePre(); XmlSerializerEx xmlSerial = new XmlSerializerEx(typeof(AppConfigEx)); bool bResult = true; // FileStream fs = null; IOConnectionInfo iocPath = IOConnectionInfo.FromPath(strFilePath); FileTransactionEx fts = new FileTransactionEx(iocPath, true); Stream fs = null; // Temporarily remove user file preference (restore after saving) bool bConfigPref = tConfig.Meta.PreferUserConfiguration; if(bRemoveConfigPref) tConfig.Meta.PreferUserConfiguration = false; XmlWriterSettings xws = new XmlWriterSettings(); xws.Encoding = StrUtil.Utf8; xws.Indent = true; xws.IndentChars = "\t"; try { // fs = new FileStream(strFilePath, FileMode.Create, // FileAccess.Write, FileShare.None); fs = fts.OpenWrite(); if(fs == null) throw new InvalidOperationException(); XmlWriter xw = XmlWriter.Create(fs, xws); xmlSerial.Serialize(xw, tConfig); xw.Close(); } catch(Exception) { bResult = false; } // Do not assert if(fs != null) { fs.Close(); fs = null; } if(bResult) { try { fts.CommitWrite(); } catch(Exception) { Debug.Assert(false); } } if(bRemoveConfigPref) tConfig.Meta.PreferUserConfiguration = bConfigPref; tConfig.OnSavePost(); return bResult; } public static bool Save(AppConfigEx tConfig) { Debug.Assert(tConfig != null); if(tConfig == null) throw new ArgumentNullException("tConfig"); AppConfigSerializer.GetConfigPaths(); bool bPreferUser = false; XmlDocument xdEnforced = LoadEnforcedConfigFile(); AppConfigEx cfgGlobal = LoadConfigFileEx(m_strGlobalConfigFile, xdEnforced); if((cfgGlobal != null) && cfgGlobal.Meta.PreferUserConfiguration) bPreferUser = true; if(bPreferUser) { EnsureAppDataDirAvailable(); if(SaveConfigFileEx(tConfig, m_strUserConfigFile, true)) return true; if(SaveConfigFileEx(tConfig, m_strGlobalConfigFile, false)) return true; } else // Don't prefer user -- use global first { if(SaveConfigFileEx(tConfig, m_strGlobalConfigFile, false)) return true; EnsureAppDataDirAvailable(); if(SaveConfigFileEx(tConfig, m_strUserConfigFile, true)) return true; } #if !KeePassLibSD if(Program.MainForm != null) Program.MainForm.SetStatusEx(KPRes.ConfigSaveFailed); #endif return false; } } } KeePass/App/Configuration/AceIntegration.cs0000664000000000000000000003426012665300316017672 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Xml.Serialization; using System.ComponentModel; using System.Diagnostics; using KeePassLib; using KeePassLib.Interfaces; using KeePassLib.Utility; namespace KeePass.App.Configuration { public sealed class AceIntegration { private ulong m_hkAutoType = (ulong)(Keys.Control | Keys.Alt | Keys.A); public ulong HotKeyGlobalAutoType { get { return m_hkAutoType; } set { m_hkAutoType = value; } } private ulong m_hkAutoTypeSel = (ulong)Keys.None; public ulong HotKeySelectedAutoType { get { return m_hkAutoTypeSel; } set { m_hkAutoTypeSel = value; } } private ulong m_hkShowWindow = (ulong)(Keys.Control | Keys.Alt | Keys.K); public ulong HotKeyShowWindow { get { return m_hkShowWindow; } set { m_hkShowWindow = value; } } private ulong m_hkEntryMenu = (ulong)Keys.None; public ulong HotKeyEntryMenu { get { return m_hkEntryMenu; } set { m_hkEntryMenu = value; } } private string m_strUrlOverride = string.Empty; [DefaultValue("")] public string UrlOverride { get { return m_strUrlOverride; } set { if(value == null) throw new ArgumentNullException("value"); m_strUrlOverride = value; } } private AceUrlSchemeOverrides m_vSchemeOverrides = new AceUrlSchemeOverrides(); public AceUrlSchemeOverrides UrlSchemeOverrides { get { return m_vSchemeOverrides; } set { if(value == null) throw new ArgumentNullException("value"); m_vSchemeOverrides = value; } } private bool m_bSearchKeyFiles = true; [DefaultValue(true)] public bool SearchKeyFiles { get { return m_bSearchKeyFiles; } set { m_bSearchKeyFiles = value; } } private bool m_bSearchKeyFilesOnRemovable = false; [DefaultValue(false)] public bool SearchKeyFilesOnRemovableMedia { get { return m_bSearchKeyFilesOnRemovable; } set { m_bSearchKeyFilesOnRemovable = value; } } private bool m_bSingleInstance = true; [DefaultValue(true)] public bool LimitToSingleInstance { get { return m_bSingleInstance; } set { m_bSingleInstance = value; } } private bool m_bMatchByTitle = true; [DefaultValue(true)] public bool AutoTypeMatchByTitle { get { return m_bMatchByTitle; } set { m_bMatchByTitle = value; } } private bool m_bMatchByUrlInTitle = false; [DefaultValue(false)] public bool AutoTypeMatchByUrlInTitle { get { return m_bMatchByUrlInTitle; } set { m_bMatchByUrlInTitle = value; } } private bool m_bMatchByUrlHostInTitle = false; [DefaultValue(false)] public bool AutoTypeMatchByUrlHostInTitle { get { return m_bMatchByUrlHostInTitle; } set { m_bMatchByUrlHostInTitle = value; } } private bool m_bMatchByTagInTitle = false; [DefaultValue(false)] public bool AutoTypeMatchByTagInTitle { get { return m_bMatchByTagInTitle; } set { m_bMatchByTagInTitle = value; } } private bool m_bExpiredCanMatch = false; [DefaultValue(false)] public bool AutoTypeExpiredCanMatch { get { return m_bExpiredCanMatch; } set { m_bExpiredCanMatch = value; } } private bool m_bAutoTypeAlwaysShowSelDlg = false; [DefaultValue(false)] public bool AutoTypeAlwaysShowSelDialog { get { return m_bAutoTypeAlwaysShowSelDlg; } set { m_bAutoTypeAlwaysShowSelDlg = value; } } private bool m_bPrependInitSeqIE = true; [DefaultValue(true)] public bool AutoTypePrependInitSequenceForIE { get { return m_bPrependInitSeqIE; } set { m_bPrependInitSeqIE = value; } } private bool m_bSpecialReleaseAlt = true; [DefaultValue(true)] public bool AutoTypeReleaseAltWithKeyPress { get { return m_bSpecialReleaseAlt; } set { m_bSpecialReleaseAlt = value; } } private bool m_bAdjustKeybLayout = true; [DefaultValue(true)] public bool AutoTypeAdjustKeyboardLayout { get { return m_bAdjustKeybLayout; } set { m_bAdjustKeybLayout = value; } } private bool m_bAllowInterleaved = false; [DefaultValue(false)] public bool AutoTypeAllowInterleaved { get { return m_bAllowInterleaved; } set { m_bAllowInterleaved = value; } } private bool m_bCancelOnWindowChange = false; [DefaultValue(false)] public bool AutoTypeCancelOnWindowChange { get { return m_bCancelOnWindowChange; } set { m_bCancelOnWindowChange = value; } } private bool m_bCancelOnTitleChange = false; [DefaultValue(false)] public bool AutoTypeCancelOnTitleChange { get { return m_bCancelOnTitleChange; } set { m_bCancelOnTitleChange = value; } } private int m_iInterKeyDelay = -1; [DefaultValue(-1)] public int AutoTypeInterKeyDelay { get { return m_iInterKeyDelay; } set { m_iInterKeyDelay = value; } } private ProxyServerType m_pstProxyType = ProxyServerType.System; public ProxyServerType ProxyType { get { return m_pstProxyType; } set { m_pstProxyType = value; } } private string m_strProxyAddr = string.Empty; [DefaultValue("")] public string ProxyAddress { get { return m_strProxyAddr; } set { if(value == null) throw new ArgumentNullException("value"); m_strProxyAddr = value; } } private string m_strProxyPort = string.Empty; [DefaultValue("")] public string ProxyPort { get { return m_strProxyPort; } set { if(value == null) throw new ArgumentNullException("value"); m_strProxyPort = value; } } private ProxyAuthType m_pstProxyAuthType = ProxyAuthType.Auto; public ProxyAuthType ProxyAuthType { get { return m_pstProxyAuthType; } set { m_pstProxyAuthType = value; } } private string m_strProxyUser = string.Empty; [DefaultValue("")] public string ProxyUserName { get { return m_strProxyUser; } set { if(value == null) throw new ArgumentNullException("value"); m_strProxyUser = value; } } private string m_strProxyPassword = string.Empty; [DefaultValue("")] public string ProxyPassword { get { return m_strProxyPassword; } set { if(value == null) throw new ArgumentNullException("value"); m_strProxyPassword = value; } } public AceIntegration() { } } public sealed class AceUrlSchemeOverrides : IDeepCloneable { private List m_lBuiltInOverrides = new List(); [XmlIgnore] public List BuiltInOverrides { get { return m_lBuiltInOverrides; } set { if(value == null) throw new ArgumentNullException("value"); m_lBuiltInOverrides = value; } } public ulong BuiltInOverridesEnabled { get { return GetEnabledBuiltInOverrides(); } set { SetEnabledBuiltInOverrides(value); } } private List m_lCustomOverrides = new List(); [XmlArrayItem("Override")] public List CustomOverrides { get { return m_lCustomOverrides; } set { if(value == null) throw new ArgumentNullException("value"); m_lCustomOverrides = value; } } public AceUrlSchemeOverrides() { MakeBuiltInList(); } private void MakeBuiltInList() { m_lBuiltInOverrides.Clear(); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(true, "ssh", @"cmd://PuTTY.exe -ssh {USERNAME}@{BASE:RMVSCM}", 0x1)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "http", "cmd://{INTERNETEXPLORER} \"{BASE}\"", 0x2)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "https", "cmd://{INTERNETEXPLORER} \"{BASE}\"", 0x4)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "http", "cmd://{INTERNETEXPLORER} -private \"{BASE}\"", 0x10000)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "https", "cmd://{INTERNETEXPLORER} -private \"{BASE}\"", 0x20000)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "http", "microsoft-edge:{BASE}", 0x4000)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "https", "microsoft-edge:{BASE}", 0x8000)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "http", "cmd://{FIREFOX} \"{BASE}\"", 0x8)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "https", "cmd://{FIREFOX} \"{BASE}\"", 0x10)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "chrome", "cmd://{FIREFOX} -chrome \"{BASE}\"", 0x20)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "http", "cmd://{GOOGLECHROME} \"{BASE}\"", 0x100)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "https", "cmd://{GOOGLECHROME} \"{BASE}\"", 0x200)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "http", "cmd://{GOOGLECHROME} --incognito \"{BASE}\"", 0x40000)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "https", "cmd://{GOOGLECHROME} --incognito \"{BASE}\"", 0x80000)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "http", "cmd://{OPERA} \"{BASE}\"", 0x40)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "https", "cmd://{OPERA} \"{BASE}\"", 0x80)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "http", "cmd://{SAFARI} \"{BASE}\"", 0x400)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "https", "cmd://{SAFARI} \"{BASE}\"", 0x800)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "kdbx", "cmd://\"{APPDIR}\\KeePass.exe\" \"{BASE:RMVSCM}\" -pw-enc:\"{PASSWORD_ENC}\"", 0x1000)); m_lBuiltInOverrides.Add(new AceUrlSchemeOverride(false, "kdbx", "cmd://mono \"{APPDIR}/KeePass.exe\" \"{BASE:RMVSCM}\" -pw-enc:\"{PASSWORD_ENC}\"", 0x2000)); // Free: 0x100000 #if DEBUG ulong u = 0; foreach(AceUrlSchemeOverride o in m_lBuiltInOverrides) { Debug.Assert(o.IsBuiltIn); ulong f = o.BuiltInFlagID; Debug.Assert((f != 0) && ((f & (f - 1)) == 0)); // Check power of 2 u += f; } Debug.Assert(u == ((1UL << m_lBuiltInOverrides.Count) - 1UL)); #endif } public string GetOverrideForUrl(string strUrl) { if(string.IsNullOrEmpty(strUrl)) return null; for(int i = 0; i < 2; ++i) { List l = ((i == 0) ? m_lBuiltInOverrides : m_lCustomOverrides); foreach(AceUrlSchemeOverride ovr in l) { if(!ovr.Enabled) continue; if(strUrl.StartsWith(ovr.Scheme + ":", StrUtil.CaseIgnoreCmp)) return ovr.UrlOverride; } } return null; } public AceUrlSchemeOverrides CloneDeep() { AceUrlSchemeOverrides ovr = new AceUrlSchemeOverrides(); CopyTo(ovr); return ovr; } public void CopyTo(AceUrlSchemeOverrides ovrTarget) { ovrTarget.m_lBuiltInOverrides.Clear(); foreach(AceUrlSchemeOverride shB in m_lBuiltInOverrides) { ovrTarget.m_lBuiltInOverrides.Add(shB.CloneDeep()); } ovrTarget.m_lCustomOverrides.Clear(); foreach(AceUrlSchemeOverride shC in m_lCustomOverrides) { ovrTarget.m_lCustomOverrides.Add(shC.CloneDeep()); } } public ulong GetEnabledBuiltInOverrides() { ulong u = 0; for(int i = 0; i < m_lBuiltInOverrides.Count; ++i) { if(m_lBuiltInOverrides[i].Enabled) u |= m_lBuiltInOverrides[i].BuiltInFlagID; } return u; } public void SetEnabledBuiltInOverrides(ulong uFlags) { for(int i = 0; i < m_lBuiltInOverrides.Count; ++i) m_lBuiltInOverrides[i].Enabled = ((uFlags & m_lBuiltInOverrides[i].BuiltInFlagID) != 0UL); } } public sealed class AceUrlSchemeOverride : IDeepCloneable { private bool m_bEnabled = true; public bool Enabled { get { return m_bEnabled; } set { m_bEnabled = value; } } private string m_strScheme = string.Empty; public string Scheme { get { return m_strScheme; } set { if(value == null) throw new ArgumentNullException("value"); m_strScheme = value; } } private string m_strOvr = string.Empty; public string UrlOverride { get { return m_strOvr; } set { if(value == null) throw new ArgumentNullException("value"); m_strOvr = value; } } private ulong m_uBuiltInFlagID = 0; [XmlIgnore] internal ulong BuiltInFlagID { get { return m_uBuiltInFlagID; } } [XmlIgnore] public bool IsBuiltIn { get { return (m_uBuiltInFlagID != 0UL); } } public AceUrlSchemeOverride() { } public AceUrlSchemeOverride(bool bEnable, string strScheme, string strUrlOverride) { Init(bEnable, strScheme, strUrlOverride, 0); } internal AceUrlSchemeOverride(bool bEnable, string strScheme, string strUrlOverride, ulong uBuiltInFlagID) { Init(bEnable, strScheme, strUrlOverride, uBuiltInFlagID); } private void Init(bool bEnable, string strScheme, string strUrlOverride, ulong uBuiltInFlagID) { if(strScheme == null) throw new ArgumentNullException("strScheme"); if(strUrlOverride == null) throw new ArgumentNullException("strUrlOverride"); m_bEnabled = bEnable; m_strScheme = strScheme; m_strOvr = strUrlOverride; m_uBuiltInFlagID = uBuiltInFlagID; } public AceUrlSchemeOverride CloneDeep() { return new AceUrlSchemeOverride(m_bEnabled, m_strScheme, m_strOvr, m_uBuiltInFlagID); } } } KeePass/App/Configuration/AceToolBar.cs0000664000000000000000000000230312641461334016744 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace KeePass.App.Configuration { public sealed class AceToolBar { public AceToolBar() { } private bool m_bShow = true; [DefaultValue(true)] public bool Show { get { return m_bShow; } set { m_bShow = value; } } } } KeePass/App/Configuration/AceMainWindow.cs0000664000000000000000000003526712641461334017475 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Windows.Forms; using System.Xml.Serialization; using System.ComponentModel; using System.Diagnostics; using KeePass.Resources; using KeePass.UI; using KeePassLib; using KeePassLib.Security; namespace KeePass.App.Configuration { public enum AceMainWindowLayout { Default = 0, SideBySide = 1 } [Flags] public enum AceListGrouping { Auto = 0, On = 1, Off = 2, // Additional flags: use value > Primary Primary = 0x0F // Auto/On/Off are primary states } public sealed class AceMainWindow { public AceMainWindow() { } private int m_posX = AppDefs.InvalidWindowValue; public int X { get { return m_posX; } set { m_posX = value; } } private int m_posY = AppDefs.InvalidWindowValue; public int Y { get { return m_posY; } set { m_posY = value; } } private int m_sizeW = AppDefs.InvalidWindowValue; public int Width { get { return m_sizeW; } set { m_sizeW = value; } } private int m_sizeH = AppDefs.InvalidWindowValue; public int Height { get { return m_sizeH; } set { m_sizeH = value; } } private bool m_bMax = false; [DefaultValue(false)] public bool Maximized { get { return m_bMax; } set { m_bMax = value; } } private double m_dSplitterHorz = double.Epsilon; public double SplitterHorizontalFrac { get { return m_dSplitterHorz; } set { m_dSplitterHorz = value; } } private double m_dSplitterVert = double.Epsilon; public double SplitterVerticalFrac { get { return m_dSplitterVert; } set { m_dSplitterVert = value; } } private AceMainWindowLayout m_layout = AceMainWindowLayout.Default; public AceMainWindowLayout Layout { get { return m_layout; } set { m_layout = value; } } private bool m_bTop = false; [DefaultValue(false)] public bool AlwaysOnTop { get { return m_bTop; } set { m_bTop = value; } } private bool m_bCloseMin = false; [DefaultValue(false)] public bool CloseButtonMinimizesWindow { get { return m_bCloseMin; } set { m_bCloseMin = value; } } private bool m_bMinToTray = false; [DefaultValue(false)] public bool MinimizeToTray { get { return m_bMinToTray; } set { m_bMinToTray = value; } } private bool m_bFullPath = false; [DefaultValue(false)] public bool ShowFullPathInTitle { get { return m_bFullPath; } set { m_bFullPath = value; } } private bool m_bDropToBackAfterCopy = false; [DefaultValue(false)] public bool DropToBackAfterClipboardCopy { get { return m_bDropToBackAfterCopy; } set { m_bDropToBackAfterCopy = value; } } private bool m_bMinAfterCopy = false; [DefaultValue(false)] public bool MinimizeAfterClipboardCopy { get { return m_bMinAfterCopy; } set { m_bMinAfterCopy = value; } } private bool m_bMinAfterLocking = true; [DefaultValue(true)] public bool MinimizeAfterLocking { get { return m_bMinAfterLocking; } set { m_bMinAfterLocking = value; } } private bool m_bMinAfterOpeningDb = false; [DefaultValue(false)] public bool MinimizeAfterOpeningDatabase { get { return m_bMinAfterOpeningDb; } set { m_bMinAfterOpeningDb = value; } } private bool m_bQuickFindSearchInPasswords = false; [DefaultValue(false)] public bool QuickFindSearchInPasswords { get { return m_bQuickFindSearchInPasswords; } set { m_bQuickFindSearchInPasswords = value; } } private bool m_bQuickFindExcludeExpired = false; [DefaultValue(false)] public bool QuickFindExcludeExpired { get { return m_bQuickFindExcludeExpired; } set { m_bQuickFindExcludeExpired = value; } } private bool m_bQuickFindDerefData = false; [DefaultValue(false)] public bool QuickFindDerefData { get { return m_bQuickFindDerefData; } set { m_bQuickFindDerefData = value; } } private bool m_bFocusResAfterQuickFind = false; [DefaultValue(false)] public bool FocusResultsAfterQuickFind { get { return m_bFocusResAfterQuickFind; } set { m_bFocusResAfterQuickFind = value; } } private bool m_bFocusQuickFindOnRestore = false; /// /// Focus the quick search box when restoring the main /// window. Here 'restoring' actually means unminimizing, /// i.e. restoring or maximizing the window. /// [DefaultValue(false)] public bool FocusQuickFindOnRestore { get { return m_bFocusQuickFindOnRestore; } set { m_bFocusQuickFindOnRestore = value; } } private bool m_bFocusQuickFindOnUntray = false; [DefaultValue(false)] public bool FocusQuickFindOnUntray { get { return m_bFocusQuickFindOnUntray; } set { m_bFocusQuickFindOnUntray = value; } } private bool m_bCopyUrls = false; [DefaultValue(false)] public bool CopyUrlsInsteadOfOpening { get { return m_bCopyUrls; } set { m_bCopyUrls = value; } } private bool m_bDisableSaveIfNotModified = false; /// /// Disable 'Save' button (instead of graying it out) if the database /// hasn't been modified. /// [DefaultValue(false)] public bool DisableSaveIfNotModified { get { return m_bDisableSaveIfNotModified; } set { m_bDisableSaveIfNotModified = value; } } private AceToolBar m_tb = new AceToolBar(); public AceToolBar ToolBar { get { return m_tb; } set { if(value == null) throw new ArgumentNullException("value"); m_tb = value; } } private AceEntryView m_ev = new AceEntryView(); public AceEntryView EntryView { get { return m_ev; } set { if(value == null) throw new ArgumentNullException("value"); m_ev = value; } } private AceTanView m_tan = new AceTanView(); public AceTanView TanView { get { return m_tan; } set { if(value == null) throw new ArgumentNullException("value"); m_tan = value; } } private List m_aceColumns = new List(); [XmlArray("EntryListColumnCollection")] public List EntryListColumns { get { return m_aceColumns; } set { if(value == null) throw new ArgumentNullException("value"); m_aceColumns = value; } } private string m_strDisplayIndices = string.Empty; [DefaultValue("")] public string EntryListColumnDisplayOrder { get { return m_strDisplayIndices; } set { if(value == null) throw new ArgumentNullException("value"); m_strDisplayIndices = value; } } private bool m_bAutoResizeColumns = false; [DefaultValue(false)] public bool EntryListAutoResizeColumns { get { return m_bAutoResizeColumns; } set { m_bAutoResizeColumns = value; } } private bool m_bAlternatingBgColor = true; [DefaultValue(true)] public bool EntryListAlternatingBgColors { get { return m_bAlternatingBgColor; } set { m_bAlternatingBgColor = value; } } private bool m_bResolveFieldRefs = false; [DefaultValue(false)] public bool EntryListShowDerefData { get { return m_bResolveFieldRefs; } set { m_bResolveFieldRefs = value; } } private bool m_bResolveFieldRefsAsync = false; [DefaultValue(false)] public bool EntryListShowDerefDataAsync { get { return m_bResolveFieldRefsAsync; } set { m_bResolveFieldRefsAsync = value; } } private bool m_bDerefDataWithRefs = true; [DefaultValue(true)] public bool EntryListShowDerefDataAndRefs { get { return m_bDerefDataWithRefs; } set { m_bDerefDataWithRefs = value; } } // private bool m_bGridLines = false; // public bool ShowGridLines // { // get { return m_bGridLines; } // set { m_bGridLines = value; } // } private ListSorter m_pListSorter = null; public ListSorter ListSorting { get { if(m_pListSorter == null) m_pListSorter = new ListSorter(); return m_pListSorter; } set { if(value == null) throw new ArgumentNullException("value"); m_pListSorter = value; } } private int m_iLgMain = (int)AceListGrouping.Auto; [DefaultValue(0)] public int ListGrouping // AceListGrouping { get { return m_iLgMain; } set { m_iLgMain = value; } } private bool m_bShowEntriesOfSubGroups = false; [DefaultValue(false)] public bool ShowEntriesOfSubGroups { get { return m_bShowEntriesOfSubGroups; } set { m_bShowEntriesOfSubGroups = value; } } public AceColumn FindColumn(AceColumnType t) { foreach(AceColumn c in m_aceColumns) { if(c.Type == t) return c; } return null; } public bool IsColumnHidden(AceColumnType t) { return IsColumnHidden(t, (t == AceColumnType.Password)); } public bool IsColumnHidden(AceColumnType t, bool bDefault) { foreach(AceColumn c in m_aceColumns) { if(c.Type == t) return c.HideWithAsterisks; } return bDefault; } public bool ShouldHideCustomString(string strCustomName, ProtectedString psValue) { foreach(AceColumn c in m_aceColumns) { if((c.Type == AceColumnType.CustomString) && (c.CustomName == strCustomName)) return c.HideWithAsterisks; } if(psValue != null) return psValue.IsProtected; return false; } } public sealed class AceEntryView { public AceEntryView() { } private bool m_bShow = true; [DefaultValue(true)] public bool Show { get { return m_bShow; } set { m_bShow = value; } } // private bool m_bHideProtectedCustomStrings = true; // [DefaultValue(true)] // public bool HideProtectedCustomStrings // { // get { return m_bHideProtectedCustomStrings; } // set { m_bHideProtectedCustomStrings = value; } // } } public sealed class AceTanView { public AceTanView() { } private bool m_bSimple = true; [DefaultValue(true)] public bool UseSimpleView { get { return m_bSimple; } set { m_bSimple = value; } } private bool m_bIndices = true; [DefaultValue(true)] public bool ShowIndices { get { return m_bIndices; } set { m_bIndices = value; } } } public enum AceColumnType { Title = 0, UserName, Password, Url, Notes, CreationTime, LastModificationTime, LastAccessTime, ExpiryTime, Uuid, Attachment, CustomString, PluginExt, // Column data provided by a plugin OverrideUrl, Tags, ExpiryTimeDateOnly, Size, HistoryCount, AttachmentCount, Count // Virtual identifier representing the number of types } [XmlType(TypeName = "Column")] public sealed class AceColumn { private AceColumnType m_type = AceColumnType.Count; public AceColumnType Type { get { return m_type; } set { if(((int)value >= 0) && ((int)value < (int)AceColumnType.Count)) m_type = value; else { Debug.Assert(false); } } } private string m_strCustomName = string.Empty; [DefaultValue("")] public string CustomName { get { return m_strCustomName; } set { if(value == null) throw new ArgumentNullException("value"); m_strCustomName = value; } } private int m_nWidth = -1; public int Width { get { return m_nWidth; } set { m_nWidth = value; } } private bool m_bHide = false; [DefaultValue(false)] public bool HideWithAsterisks { get { return m_bHide; } set { m_bHide = value; } } public AceColumn() { } public AceColumn(AceColumnType t) { m_type = t; } public AceColumn(AceColumnType t, string strCustomName, bool bHide, int nWidth) { m_type = t; m_strCustomName = strCustomName; m_bHide = bHide; m_nWidth = nWidth; } public string GetDisplayName() { string str = string.Empty; switch(m_type) { case AceColumnType.Title: str = KPRes.Title; break; case AceColumnType.UserName: str = KPRes.UserName; break; case AceColumnType.Password: str = KPRes.Password; break; case AceColumnType.Url: str = KPRes.Url; break; case AceColumnType.Notes: str = KPRes.Notes; break; case AceColumnType.CreationTime: str = KPRes.CreationTime; break; case AceColumnType.LastModificationTime: str = KPRes.LastModificationTime; break; case AceColumnType.LastAccessTime: str = KPRes.LastAccessTime; break; case AceColumnType.ExpiryTime: str = KPRes.ExpiryTime; break; case AceColumnType.Uuid: str = KPRes.Uuid; break; case AceColumnType.Attachment: str = KPRes.Attachments; break; case AceColumnType.CustomString: str = m_strCustomName; break; case AceColumnType.PluginExt: str = m_strCustomName; break; case AceColumnType.OverrideUrl: str = KPRes.UrlOverride; break; case AceColumnType.Tags: str = KPRes.Tags; break; case AceColumnType.ExpiryTimeDateOnly: str = KPRes.ExpiryTimeDateOnly; break; case AceColumnType.Size: str = KPRes.Size; break; case AceColumnType.HistoryCount: str = KPRes.History + " (" + KPRes.Count + ")"; break; case AceColumnType.AttachmentCount: str = KPRes.Attachments + " (" + KPRes.Count + ")"; break; default: Debug.Assert(false); break; }; return str; } public int SafeGetWidth(int nDefaultWidth) { if(m_nWidth >= 0) return m_nWidth; return nDefaultWidth; } public static bool IsTimeColumn(AceColumnType t) { return ((t == AceColumnType.CreationTime) || (t == AceColumnType.LastAccessTime) || (t == AceColumnType.LastModificationTime) || (t == AceColumnType.ExpiryTime) || (t == AceColumnType.ExpiryTimeDateOnly)); } public static HorizontalAlignment GetTextAlign(AceColumnType t) { if((t == AceColumnType.Size) || (t == AceColumnType.HistoryCount) || (t == AceColumnType.AttachmentCount)) return HorizontalAlignment.Right; return HorizontalAlignment.Left; } } } KeePass/App/Configuration/AceApplication.cs0000664000000000000000000002206212641461334017651 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; using System.ComponentModel; using System.Diagnostics; using KeePass.Ecas; using KeePassLib.Serialization; namespace KeePass.App.Configuration { public sealed class AceApplication { public AceApplication() { } private string m_strLanguageFile = string.Empty; // = English [DefaultValue("")] public string LanguageFile { get { return m_strLanguageFile; } set { if(value == null) throw new ArgumentNullException("value"); m_strLanguageFile = value; } } private bool m_bHelpUseLocal = false; [DefaultValue(false)] public bool HelpUseLocal { get { return m_bHelpUseLocal; } set { m_bHelpUseLocal = value; } } // Serialize DateTime with TimeUtil private string m_strLastUpdChk = string.Empty; [DefaultValue("")] public string LastUpdateCheck { get { return m_strLastUpdChk; } set { if(value == null) throw new ArgumentNullException("value"); m_strLastUpdChk = value; } } private IOConnectionInfo m_ioLastDb = null; public IOConnectionInfo LastUsedFile { get { if(m_ioLastDb == null) m_ioLastDb = new IOConnectionInfo(); return m_ioLastDb; } set { if(value == null) throw new ArgumentNullException("value"); m_ioLastDb = value; } } private AceMru m_mru = null; public AceMru MostRecentlyUsed { get { if(m_mru == null) m_mru = new AceMru(); return m_mru; } set { if(value == null) throw new ArgumentNullException("value"); m_mru = value; } } private bool m_bRememberWorkDirs = true; [DefaultValue(true)] public bool RememberWorkingDirectories { get { return m_bRememberWorkDirs; } set { m_bRememberWorkDirs = value; } } private Dictionary m_dictWorkingDirs = new Dictionary(); /// /// For serialization only; use the *WorkingDirectory /// methods instead. /// [XmlArray("WorkingDirectories")] [XmlArrayItem("Item")] public string[] WorkingDirectoriesSerialized { get { return SerializeWorkingDirectories(); } set { if(value == null) throw new ArgumentNullException("value"); DeserializeWorkingDirectories(value); } } private AceStartUp m_su = null; public AceStartUp Start { get { if(m_su == null) m_su = new AceStartUp(); return m_su; } set { if(value == null) throw new ArgumentNullException("value"); m_su = value; } } private AceOpenDb m_fo = null; public AceOpenDb FileOpening { get { if(m_fo == null) m_fo = new AceOpenDb(); return m_fo; } set { if(value == null) throw new ArgumentNullException("value"); m_fo = value; } } private bool m_bVerifyFile = true; [DefaultValue(true)] public bool VerifyWrittenFileAfterSaving { get { return m_bVerifyFile; } set { m_bVerifyFile = value; } } private bool m_bTransactedWrites = true; [DefaultValue(true)] public bool UseTransactedFileWrites { get { return m_bTransactedWrites; } set { m_bTransactedWrites = value; } } private bool m_bFileLocks = false; [DefaultValue(false)] public bool UseFileLocks { get { return m_bFileLocks; } set { m_bFileLocks = value; } } private bool m_bSaveForceSync = false; [DefaultValue(false)] public bool SaveForceSync { get { return m_bSaveForceSync; } set { m_bSaveForceSync = value; } } private AceCloseDb m_fc = new AceCloseDb(); public AceCloseDb FileClosing { get { return m_fc; } set { if(value == null) throw new ArgumentNullException("value"); m_fc = value; } } private EcasTriggerSystem m_triggers = new EcasTriggerSystem(); public EcasTriggerSystem TriggerSystem { get { return m_triggers; } set { if(value == null) throw new ArgumentNullException("value"); m_triggers = value; } } private string m_strPluginCachePath = string.Empty; [DefaultValue("")] public string PluginCachePath { get { return m_strPluginCachePath; } set { if(value == null) throw new ArgumentNullException("value"); m_strPluginCachePath = value; } } public string GetWorkingDirectory(string strContext) { // strContext may be null if(!m_bRememberWorkDirs) return null; string str; m_dictWorkingDirs.TryGetValue(strContext ?? string.Empty, out str); return str; } public void SetWorkingDirectory(string strContext, string strDir) { // Both parameters may be null // if(!m_bRememberWorkDirs) return; if(string.IsNullOrEmpty(strContext)) return; m_dictWorkingDirs[strContext] = (strDir ?? string.Empty); } internal List GetWorkingDirectoryContexts() { if(!m_bRememberWorkDirs) return new List(); return new List(m_dictWorkingDirs.Keys); } private string[] SerializeWorkingDirectories() { if(!m_bRememberWorkDirs) return new string[0]; List l = new List(); foreach(KeyValuePair kvp in m_dictWorkingDirs) l.Add(kvp.Key + @"@" + kvp.Value); return l.ToArray(); } private void DeserializeWorkingDirectories(string[] v) { // Do not check m_bRememberWorkDirs, because it might not // have been deserialized yet m_dictWorkingDirs.Clear(); foreach(string str in v) { if(str == null) { Debug.Assert(false); continue; } int iSep = str.IndexOf('@'); if(iSep <= 0) { Debug.Assert(false); continue; } m_dictWorkingDirs[str.Substring(0, iSep)] = str.Substring(iSep + 1); } } } public sealed class AceStartUp { public AceStartUp() { } private bool m_bOpenLastDb = true; [DefaultValue(true)] public bool OpenLastFile { get { return m_bOpenLastDb; } set { m_bOpenLastDb = value; } } private bool m_bCheckForUpdate = false; // [DefaultValue(false)] // Avoid user confusion with 'Configured' setting public bool CheckForUpdate { get { return m_bCheckForUpdate; } set { m_bCheckForUpdate = value; } } private bool m_bCheckForUpdateCfg = false; [DefaultValue(false)] public bool CheckForUpdateConfigured { get { return m_bCheckForUpdateCfg; } set { m_bCheckForUpdateCfg = value; } } private bool m_bMinimizedAndLocked = false; [DefaultValue(false)] public bool MinimizedAndLocked { get { return m_bMinimizedAndLocked; } set { m_bMinimizedAndLocked = value; } } private bool m_bPlgDeleteOld = true; [DefaultValue(true)] public bool PluginCacheDeleteOld { get { return m_bPlgDeleteOld; } set { m_bPlgDeleteOld = value; } } private bool m_bClearPlgCache = false; [DefaultValue(false)] public bool PluginCacheClearOnce { get { return m_bClearPlgCache; } set { m_bClearPlgCache = value; } } } public sealed class AceOpenDb { public AceOpenDb() { } private bool m_bShowExpiredEntries = false; [DefaultValue(false)] public bool ShowExpiredEntries { get { return m_bShowExpiredEntries; } set { m_bShowExpiredEntries = value; } } private bool m_bShowSoonToExpireEntries = false; [DefaultValue(false)] public bool ShowSoonToExpireEntries { get { return m_bShowSoonToExpireEntries; } set { m_bShowSoonToExpireEntries = value; } } } public sealed class AceCloseDb { public AceCloseDb() { } private bool m_bAutoSave = false; [DefaultValue(false)] public bool AutoSave { get { return m_bAutoSave; } set { m_bAutoSave = value; } } } public sealed class AceMru { public const uint DefaultMaxItemCount = 12; public AceMru() { } private uint m_uMaxItems = DefaultMaxItemCount; public uint MaxItemCount { get { return m_uMaxItems; } set { m_uMaxItems = value; } } private List m_vItems = new List(); [XmlArrayItem("ConnectionInfo")] public List Items { get { return m_vItems; } set { m_vItems = value; } } } } KeePass/App/Configuration/AceLogging.cs0000664000000000000000000000232112641461334016770 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace KeePass.App.Configuration { public sealed class AceLogging { public AceLogging() { } private bool m_bEnabled = false; [DefaultValue(false)] public bool Enabled { get { return m_bEnabled; } set { m_bEnabled = value; } } } } KeePass/App/Configuration/AceCustomConfig.cs0000664000000000000000000001405412641461334020010 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; using System.Globalization; using KeePassLib.Utility; namespace KeePass.App.Configuration { public sealed class AceKvp { private string m_strKey = null; public string Key { get { return m_strKey; } set { m_strKey = value; } } private string m_strValue = null; public string Value { get { return m_strValue; } set { m_strValue = value; } } public AceKvp() { } public AceKvp(string strKey, string strValue) { m_strKey = strKey; m_strValue = strValue; } } public sealed class AceCustomConfig { private Dictionary m_vItems = new Dictionary(); public AceCustomConfig() { } internal AceKvp[] Serialize() { List v = new List(); foreach(KeyValuePair kvp in m_vItems) v.Add(new AceKvp(kvp.Key, kvp.Value)); return v.ToArray(); } internal void Deserialize(AceKvp[] v) { if(v == null) throw new ArgumentNullException("v"); m_vItems.Clear(); foreach(AceKvp kvp in v) m_vItems[kvp.Key] = kvp.Value; } /// /// Set a configuration item's value. /// /// ID of the configuration item. This identifier /// should consist only of English characters (a-z, A-Z, 0-9, '.', /// ',', '-', '_') and should be unique -- for example (without quotes): /// "PluginName.YourConfigGroupName.ItemName". Use upper camel /// case as naming convention. /// New value of the configuration item. public void SetString(string strID, string strValue) { if(strID == null) throw new ArgumentNullException("strID"); if(strID.Length == 0) throw new ArgumentException(); if(strValue == null) m_vItems.Remove(strID); else m_vItems[strID] = strValue; } /// /// Set a configuration item's value. /// /// ID of the configuration item. This identifier /// should consist only of English characters (a-z, A-Z, 0-9, '.', /// ',', '-', '_') and should be unique -- for example (without quotes): /// "PluginName.YourConfigGroupName.ItemName". Use upper camel /// case as naming convention. /// New value of the configuration item. public void SetBool(string strID, bool bValue) { SetString(strID, StrUtil.BoolToString(bValue)); } /// /// Set a configuration item's value. /// /// ID of the configuration item. This identifier /// should consist only of English characters (a-z, A-Z, 0-9, '.', /// ',', '-', '_') and should be unique -- for example (without quotes): /// "PluginName.YourConfigGroupName.ItemName". Use upper camel /// case as naming convention. /// New value of the configuration item. public void SetLong(string strID, long lValue) { SetString(strID, lValue.ToString(NumberFormatInfo.InvariantInfo)); } /// /// Set a configuration item's value. /// /// ID of the configuration item. This identifier /// should consist only of English characters (a-z, A-Z, 0-9, '.', /// ',', '-', '_') and should be unique -- for example (without quotes): /// "PluginName.YourConfigGroupName.ItemName". Use upper camel /// case as naming convention. /// New value of the configuration item. public void SetULong(string strID, ulong uValue) { SetString(strID, uValue.ToString(NumberFormatInfo.InvariantInfo)); } public string GetString(string strID) { return GetString(strID, null); } /// /// Get the current value of a custom configuration string. /// /// ID of the configuration item. /// Default value that is returned if /// the specified configuration does not exist. /// Value of the configuration item. public string GetString(string strID, string strDefault) { if(strID == null) throw new ArgumentNullException("strID"); if(strID.Length == 0) throw new ArgumentException(); string strValue; if(m_vItems.TryGetValue(strID, out strValue)) return strValue; return strDefault; } public bool GetBool(string strID, bool bDefault) { string strValue = GetString(strID, null); if(string.IsNullOrEmpty(strValue)) return bDefault; return StrUtil.StringToBool(strValue); } public long GetLong(string strID, long lDefault) { string strValue = GetString(strID, null); if(string.IsNullOrEmpty(strValue)) return lDefault; long lValue; if(StrUtil.TryParseLongInvariant(strValue, out lValue)) return lValue; return lDefault; } public ulong GetULong(string strID, ulong uDefault) { string strValue = GetString(strID, null); if(string.IsNullOrEmpty(strValue)) return uDefault; ulong uValue; if(StrUtil.TryParseULongInvariant(strValue, out uValue)) return uValue; return uDefault; } } } KeePass/App/Configuration/AceNative.cs0000664000000000000000000000236312641461334016636 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace KeePass.App.Configuration { public sealed class AceNative { public AceNative() { } private bool m_bNativeKeyTrans = true; [DefaultValue(true)] public bool NativeKeyTransformations { get { return m_bNativeKeyTrans; } set { m_bNativeKeyTrans = value; } } } } KeePass/App/Configuration/AceSecurity.cs0000664000000000000000000001224512641461334017217 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace KeePass.App.Configuration { public sealed class AceSecurity { public AceSecurity() { } private AceWorkspaceLocking m_wsl = new AceWorkspaceLocking(); public AceWorkspaceLocking WorkspaceLocking { get { return m_wsl; } set { if(value == null) throw new ArgumentNullException("value"); m_wsl = value; } } private AppPolicyFlags m_appPolicy = new AppPolicyFlags(); public AppPolicyFlags Policy { get { return m_appPolicy; } set { if(value == null) throw new ArgumentNullException("value"); m_appPolicy = value; } } private AceMasterPassword m_mp = new AceMasterPassword(); public AceMasterPassword MasterPassword { get { return m_mp; } set { if(value == null) throw new ArgumentNullException("value"); m_mp = value; } } private bool m_bSecureDesktop = false; [DefaultValue(false)] public bool MasterKeyOnSecureDesktop { get { return m_bSecureDesktop; } set { m_bSecureDesktop = value; } } private bool m_bClipClearOnExit = true; [DefaultValue(true)] public bool ClipboardClearOnExit { get { return m_bClipClearOnExit; } set { m_bClipClearOnExit = value; } } private int m_nClipClearSeconds = 12; [DefaultValue(12)] public int ClipboardClearAfterSeconds { get { return m_nClipClearSeconds; } set { m_nClipClearSeconds = value; } } // Disabled by default, because Office's clipboard tools // crash with the Clipboard Viewer Ignore format // (when it is set using OleSetClipboard) private bool m_bUseClipboardViewerIgnoreFmt = false; [DefaultValue(false)] public bool UseClipboardViewerIgnoreFormat { get { return m_bUseClipboardViewerIgnoreFmt; } set { m_bUseClipboardViewerIgnoreFmt = value; } } private bool m_bClearKeyCmdLineOpt = true; [DefaultValue(true)] public bool ClearKeyCommandLineParams { get { return m_bClearKeyCmdLineOpt; } set { m_bClearKeyCmdLineOpt = value; } } private bool m_bSslCertsAcceptInvalid = false; [DefaultValue(false)] public bool SslCertsAcceptInvalid { get { return m_bSslCertsAcceptInvalid; } set { m_bSslCertsAcceptInvalid = value; } } } public sealed class AceWorkspaceLocking { public AceWorkspaceLocking() { } private bool m_bOnMinimize = false; [DefaultValue(false)] public bool LockOnWindowMinimize { get { return m_bOnMinimize; } set { m_bOnMinimize = value; } } private bool m_bOnSessionSwitch = false; [DefaultValue(false)] public bool LockOnSessionSwitch { get { return m_bOnSessionSwitch; } set { m_bOnSessionSwitch = value; } } private bool m_bOnSuspend = false; [DefaultValue(false)] public bool LockOnSuspend { get { return m_bOnSuspend; } set { m_bOnSuspend = value; } } private bool m_bOnRemoteControlChange = false; [DefaultValue(false)] public bool LockOnRemoteControlChange { get { return m_bOnRemoteControlChange; } set { m_bOnRemoteControlChange = value; } } private uint m_uLockAfterTime = 0; public uint LockAfterTime { get { return m_uLockAfterTime; } set { m_uLockAfterTime = value; } } private uint m_uLockAfterGlobalTime = 0; public uint LockAfterGlobalTime { get { return m_uLockAfterGlobalTime; } set { m_uLockAfterGlobalTime = value; } } private bool m_bExitInsteadOfLockingAfterTime = false; [DefaultValue(false)] public bool ExitInsteadOfLockingAfterTime { get { return m_bExitInsteadOfLockingAfterTime; } set { m_bExitInsteadOfLockingAfterTime = value; } } private bool m_bAlwaysExitInsteadOfLocking = false; [DefaultValue(false)] public bool AlwaysExitInsteadOfLocking { get { return m_bAlwaysExitInsteadOfLocking; } set { m_bAlwaysExitInsteadOfLocking = value; } } } public sealed class AceMasterPassword { public AceMasterPassword() { } private uint m_uMinLength = 0; public uint MinimumLength { get { return m_uMinLength; } set { m_uMinLength = value; } } private uint m_uMinQuality = 0; public uint MinimumQuality { get { return m_uMinQuality; } set { m_uMinQuality = value; } } } } KeePass/App/Configuration/AceUI.cs0000664000000000000000000002353012641461334015724 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.ComponentModel; using System.Diagnostics; using KeePass.UI; namespace KeePass.App.Configuration { [Flags] public enum AceKeyUIFlags : ulong { None = 0, EnablePassword = 0x1, EnableKeyFile = 0x2, EnableUserAccount = 0x4, EnableHidePassword = 0x8, DisablePassword = 0x100, DisableKeyFile = 0x200, DisableUserAccount = 0x400, DisableHidePassword = 0x800, CheckPassword = 0x10000, CheckKeyFile = 0x20000, CheckUserAccount = 0x40000, CheckHidePassword = 0x80000, UncheckPassword = 0x1000000, UncheckKeyFile = 0x2000000, UncheckUserAccount = 0x4000000, UncheckHidePassword = 0x8000000 } [Flags] public enum AceUIFlags : ulong { None = 0, DisableOptions = 0x1, DisablePlugins = 0x2, DisableTriggers = 0x4, DisableKeyChangeDays = 0x8, HidePwQuality = 0x10, HideBuiltInPwGenPrfInEntryDlg = 0x10000, ShowLastAccessTime = 0x20000 } [Flags] public enum AceAutoTypeCtxFlags : long { None = 0, ColTitle = 0x1, ColUserName = 0x2, ColPassword = 0x4, ColUrl = 0x8, ColNotes = 0x10, ColSequence = 0x20, ColSequenceComments = 0x40, Default = (ColTitle | ColUserName | ColUrl | ColSequence) } public sealed class AceUI { public AceUI() { } private AceTrayIcon m_tray = new AceTrayIcon(); public AceTrayIcon TrayIcon { get { return m_tray; } set { if(value == null) throw new ArgumentNullException("value"); m_tray = value; } } private AceHiding m_uiHiding = new AceHiding(); public AceHiding Hiding { get { return m_uiHiding; } set { if(value == null) throw new ArgumentNullException("value"); m_uiHiding = value; } } private bool m_bRepeatPwOnlyWhenHidden = true; [DefaultValue(true)] public bool RepeatPasswordOnlyWhenHidden { get { return m_bRepeatPwOnlyWhenHidden; } set { m_bRepeatPwOnlyWhenHidden = value; } } private AceFont m_font = new AceFont(); public AceFont StandardFont { get { return m_font; } set { if(value == null) throw new ArgumentNullException("value"); m_font = value; } } private AceFont m_fontPasswords = new AceFont(true); public AceFont PasswordFont { get { return m_fontPasswords; } set { if(value == null) throw new ArgumentNullException("value"); m_fontPasswords = value; } } private bool m_bForceSysFont = true; [DefaultValue(true)] public bool ForceSystemFontUnix { get { return m_bForceSysFont; } set { m_bForceSysFont = value; } } private BannerStyle m_bannerStyle = BannerStyle.WinVistaBlack; public BannerStyle BannerStyle { get { return m_bannerStyle; } set { m_bannerStyle = value; } } private bool m_bShowImportStatusDlg = true; [DefaultValue(true)] public bool ShowImportStatusDialog { get { return m_bShowImportStatusDlg; } set { m_bShowImportStatusDlg = value; } } private bool m_bShowDbMntncResDlg = true; [DefaultValue(true)] public bool ShowDbMntncResultsDialog { get { return m_bShowDbMntncResDlg; } set { m_bShowDbMntncResDlg = value; } } private bool m_bShowRecycleDlg = true; [DefaultValue(true)] public bool ShowRecycleConfirmDialog { get { return m_bShowRecycleDlg; } set { m_bShowRecycleDlg = value; } } // private bool m_bUseCustomTsRenderer = true; // [DefaultValue(true)] // public bool UseCustomToolStripRenderer // { // get { return m_bUseCustomTsRenderer; } // set { m_bUseCustomTsRenderer = value; } // } private string m_strToolStripRenderer = string.Empty; [DefaultValue("")] public string ToolStripRenderer { get { return m_strToolStripRenderer; } set { if(value == null) throw new ArgumentNullException("value"); m_strToolStripRenderer = value; } } private bool m_bOptScreenReader = false; [DefaultValue(false)] public bool OptimizeForScreenReader { get { return m_bOptScreenReader; } set { m_bOptScreenReader = value; } } private string m_strDataEditorRect = string.Empty; [DefaultValue("")] public string DataEditorRect { get { return m_strDataEditorRect; } set { if(value == null) throw new ArgumentNullException("value"); m_strDataEditorRect = value; } } private AceFont m_deFont = new AceFont(); public AceFont DataEditorFont { get { return m_deFont; } set { if(value == null) throw new ArgumentNullException("value"); m_deFont = value; } } private bool m_bDeWordWrap = true; [DefaultValue(true)] public bool DataEditorWordWrap { get { return m_bDeWordWrap; } set { m_bDeWordWrap = value; } } private string m_strCharPickerRect = string.Empty; [DefaultValue("")] public string CharPickerRect { get { return m_strCharPickerRect; } set { if(value == null) throw new ArgumentNullException("value"); m_strCharPickerRect = value; } } private string m_strAutoTypeCtxRect = string.Empty; [DefaultValue("")] public string AutoTypeCtxRect { get { return m_strAutoTypeCtxRect; } set { if(value == null) throw new ArgumentNullException("value"); m_strAutoTypeCtxRect = value; } } private long m_lAutoTypeCtxFlags = (long)AceAutoTypeCtxFlags.Default; [DefaultValue((long)AceAutoTypeCtxFlags.Default)] public long AutoTypeCtxFlags { get { return m_lAutoTypeCtxFlags; } set { m_lAutoTypeCtxFlags = value; } } private string m_strAutoTypeCtxColWidths = string.Empty; [DefaultValue("")] public string AutoTypeCtxColumnWidths { get { return m_strAutoTypeCtxColWidths; } set { if(value == null) throw new ArgumentNullException("value"); m_strAutoTypeCtxColWidths = value; } } private ulong m_uUIFlags = (ulong)AceUIFlags.None; public ulong UIFlags { get { return m_uUIFlags; } set { m_uUIFlags = value; } } private ulong m_uKeyCreationFlags = (ulong)AceKeyUIFlags.None; public ulong KeyCreationFlags { get { return m_uKeyCreationFlags; } set { m_uKeyCreationFlags = value; } } private ulong m_uKeyPromptFlags = (ulong)AceKeyUIFlags.None; public ulong KeyPromptFlags { get { return m_uKeyPromptFlags; } set { m_uKeyPromptFlags = value; } } // private bool m_bEditCancelConfirmation = true; // public bool EntryEditCancelConfirmation // { // get { return m_bEditCancelConfirmation; } // set { m_bEditCancelConfirmation = value; } // } private bool m_bSecDeskSound = true; [DefaultValue(true)] public bool SecureDesktopPlaySound { get { return m_bSecDeskSound; } set { m_bSecDeskSound = value; } } } public sealed class AceHiding { public AceHiding() { } private bool m_bSepHiding = false; [DefaultValue(false)] public bool SeparateHidingSettings { get { return m_bSepHiding; } set { m_bSepHiding = value; } } private bool m_bHideInEntryDialog = true; [DefaultValue(true)] public bool HideInEntryWindow { get { return m_bHideInEntryDialog; } set { m_bHideInEntryDialog = value; } } private bool m_bUnhideBtnAlsoUnhidesSec = false; [DefaultValue(false)] public bool UnhideButtonAlsoUnhidesSource { get { return m_bUnhideBtnAlsoUnhidesSec; } set { m_bUnhideBtnAlsoUnhidesSec = value; } } } public sealed class AceFont { private Font m_fCached = null; private bool m_bCacheValid = false; private string m_strFamily = "Microsoft Sans Serif"; public string Family { get { return m_strFamily; } set { if(value == null) throw new ArgumentNullException("value"); m_strFamily = value; m_bCacheValid = false; } } private float m_fSize = 8.25f; public float Size { get { return m_fSize; } set { m_fSize = value; m_bCacheValid = false; } } private GraphicsUnit m_gu = GraphicsUnit.Point; public GraphicsUnit GraphicsUnit { get { return m_gu; } set { m_gu = value; m_bCacheValid = false; } } private FontStyle m_fStyle = FontStyle.Regular; public FontStyle Style { get { return m_fStyle; } set { m_fStyle = value; m_bCacheValid = false; } } private bool m_bOverrideUIDefault = false; public bool OverrideUIDefault { get { return m_bOverrideUIDefault; } set { m_bOverrideUIDefault = value; } } public AceFont() { } public AceFont(Font f) { if(f == null) throw new ArgumentNullException("f"); this.Family = f.FontFamily.Name; m_fSize = f.Size; m_fStyle = f.Style; m_gu = f.Unit; } public AceFont(bool bMonospace) { if(bMonospace) m_strFamily = "Courier New"; } public Font ToFont() { if(m_bCacheValid) return m_fCached; m_fCached = FontUtil.CreateFont(m_strFamily, m_fSize, m_fStyle, m_gu); m_bCacheValid = true; return m_fCached; } } } KeePass/App/Configuration/AcePasswordGenerator.cs0000664000000000000000000000370012641461334021055 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; using KeePassLib.Cryptography.PasswordGenerator; namespace KeePass.App.Configuration { public sealed class AcePasswordGenerator { public AcePasswordGenerator() { } private PwProfile m_pwgoAutoProfile = new PwProfile(); public PwProfile AutoGeneratedPasswordsProfile { get { return m_pwgoAutoProfile; } set { if(value == null) throw new ArgumentNullException("value"); m_pwgoAutoProfile = value; } } private PwProfile m_pwgoLastProfile = new PwProfile(); public PwProfile LastUsedProfile { get { return m_pwgoLastProfile; } set { if(value == null) throw new ArgumentNullException("value"); m_pwgoLastProfile = value; } } private List m_vUserProfiles = new List(); [XmlArrayItem("Profile")] public List UserProfiles { get { return m_vUserProfiles; } set { if(value == null) throw new ArgumentNullException("value"); m_vUserProfiles = value; } } } } KeePass/App/Configuration/AceTrayIcon.cs0000664000000000000000000000266612641461334017146 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace KeePass.App.Configuration { public sealed class AceTrayIcon { public AceTrayIcon() { } private bool m_bOnlyIfTrayed = false; [DefaultValue(false)] public bool ShowOnlyIfTrayed { get { return m_bOnlyIfTrayed; } set { m_bOnlyIfTrayed = value; } } private bool m_bSingleClickDefault = false; [DefaultValue(false)] public bool SingleClickDefault { get { return m_bSingleClickDefault; } set { m_bSingleClickDefault = value; } } } } KeePass/App/AppPolicy.cs0000664000000000000000000002512312641461334014067 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Windows.Forms; using System.ComponentModel; using System.Diagnostics; using KeePass.Resources; using KeePassLib; using KeePassLib.Utility; namespace KeePass.App { /// /// Application policy IDs. /// public enum AppPolicyId { Plugins = 0, Export, ExportNoKey, // Don't require the current key to be repeated Import, Print, PrintNoKey, // Don't require the current key to be repeated NewFile, SaveFile, AutoType, AutoTypeWithoutContext, CopyToClipboard, CopyWholeEntries, DragDrop, UnhidePasswords, ChangeMasterKey, ChangeMasterKeyNoKey, // Don't require the current key to be repeated EditTriggers } /// /// Application policy flags. /// public sealed class AppPolicyFlags { private bool m_bPlugins = true; [DefaultValue(true)] public bool Plugins { get { return m_bPlugins; } set { m_bPlugins = value; } } private bool m_bExport = true; [DefaultValue(true)] public bool Export { get { return m_bExport;} set { m_bExport = value;} } private bool m_bExportNoKey = true; [DefaultValue(true)] public bool ExportNoKey { get { return m_bExportNoKey; } set { m_bExportNoKey = value; } } private bool m_bImport = true; [DefaultValue(true)] public bool Import { get { return m_bImport; } set { m_bImport = value; } } private bool m_bPrint = true; [DefaultValue(true)] public bool Print { get { return m_bPrint; } set { m_bPrint = value; } } private bool m_bPrintNoKey = true; [DefaultValue(true)] public bool PrintNoKey { get { return m_bPrintNoKey; } set { m_bPrintNoKey = value; } } private bool m_bNewFile = true; [DefaultValue(true)] public bool NewFile { get { return m_bNewFile; } set { m_bNewFile = value; } } private bool m_bSave = true; [DefaultValue(true)] public bool SaveFile { get { return m_bSave; } set { m_bSave = value; } } private bool m_bAutoType = true; [DefaultValue(true)] public bool AutoType { get { return m_bAutoType; } set { m_bAutoType = value; } } private bool m_bAutoTypeWithoutContext = true; [DefaultValue(true)] public bool AutoTypeWithoutContext { get { return m_bAutoTypeWithoutContext; } set { m_bAutoTypeWithoutContext = value; } } private bool m_bClipboard = true; [DefaultValue(true)] public bool CopyToClipboard { get { return m_bClipboard; } set { m_bClipboard = value; } } private bool m_bCopyWholeEntries = true; [DefaultValue(true)] public bool CopyWholeEntries { get { return m_bCopyWholeEntries; } set { m_bCopyWholeEntries = value; } } private bool m_bDragDrop = true; [DefaultValue(true)] public bool DragDrop { get { return m_bDragDrop; } set { m_bDragDrop = value; } } private bool m_bUnhidePasswords = true; [DefaultValue(true)] public bool UnhidePasswords { get { return m_bUnhidePasswords; } set { m_bUnhidePasswords = value; } } private bool m_bChangeMasterKey = true; [DefaultValue(true)] public bool ChangeMasterKey { get { return m_bChangeMasterKey; } set { m_bChangeMasterKey = value; } } private bool m_bChangeMasterKeyNoKey = true; [DefaultValue(true)] public bool ChangeMasterKeyNoKey { get { return m_bChangeMasterKeyNoKey; } set { m_bChangeMasterKeyNoKey = value; } } private bool m_bTriggersEdit = true; [DefaultValue(true)] public bool EditTriggers { get { return m_bTriggersEdit; } set { m_bTriggersEdit = value; } } public AppPolicyFlags CloneDeep() { return (AppPolicyFlags)this.MemberwiseClone(); } } /// /// Application policy settings. /// public static class AppPolicy { private static AppPolicyFlags m_apfCurrent = new AppPolicyFlags(); // private static AppPolicyFlags m_apfNew = new AppPolicyFlags(); public static AppPolicyFlags Current { get { return m_apfCurrent; } set { if(value == null) throw new ArgumentNullException("value"); m_apfCurrent = value; } } /* public static AppPolicyFlags New { get { return m_apfNew; } set { if(value == null) throw new ArgumentNullException("value"); m_apfNew = value; } } */ private static string PolicyToString(AppPolicyId flag, bool bPrefix) { string str = (bPrefix ? "* " : string.Empty); str += KPRes.Feature + ": "; switch(flag) { case AppPolicyId.Plugins: str += KPRes.Plugins; break; case AppPolicyId.Export: str += KPRes.Export; break; case AppPolicyId.ExportNoKey: str += KPRes.Export + " - " + KPRes.NoKeyRepeat; break; case AppPolicyId.Import: str += KPRes.Import; break; case AppPolicyId.Print: str += KPRes.Print; break; case AppPolicyId.PrintNoKey: str += KPRes.Print + " - " + KPRes.NoKeyRepeat; break; case AppPolicyId.NewFile: str += KPRes.NewDatabase; break; case AppPolicyId.SaveFile: str += KPRes.SaveDatabase; break; case AppPolicyId.AutoType: str += KPRes.AutoType; break; case AppPolicyId.AutoTypeWithoutContext: str += KPRes.AutoType + " - " + KPRes.WithoutContext; break; case AppPolicyId.CopyToClipboard: str += KPRes.Clipboard; break; case AppPolicyId.CopyWholeEntries: str += KPRes.CopyWholeEntries; break; case AppPolicyId.DragDrop: str += KPRes.DragDrop; break; case AppPolicyId.UnhidePasswords: str += KPRes.UnhidePasswords; break; case AppPolicyId.ChangeMasterKey: str += KPRes.ChangeMasterKey; break; case AppPolicyId.ChangeMasterKeyNoKey: str += KPRes.ChangeMasterKey + " - " + KPRes.NoKeyRepeat; break; case AppPolicyId.EditTriggers: str += KPRes.TriggersEdit; break; default: Debug.Assert(false); str += KPRes.Unknown + "."; break; } str += MessageService.NewLine; if(bPrefix) str += "* "; str += KPRes.Description + ": "; switch(flag) { case AppPolicyId.Plugins: str += KPRes.PolicyPluginsDesc; break; case AppPolicyId.Export: str += KPRes.PolicyExportDesc2; break; case AppPolicyId.ExportNoKey: str += KPRes.PolicyExportNoKeyDesc; break; case AppPolicyId.Import: str += KPRes.PolicyImportDesc; break; case AppPolicyId.Print: str += KPRes.PolicyPrintDesc; break; case AppPolicyId.PrintNoKey: str += KPRes.PolicyPrintNoKeyDesc; break; case AppPolicyId.NewFile: str += KPRes.PolicyNewDatabaseDesc; break; case AppPolicyId.SaveFile: str += KPRes.PolicySaveDatabaseDesc; break; case AppPolicyId.AutoType: str += KPRes.PolicyAutoTypeDesc; break; case AppPolicyId.AutoTypeWithoutContext: str += KPRes.PolicyAutoTypeWithoutContextDesc; break; case AppPolicyId.CopyToClipboard: str += KPRes.PolicyClipboardDesc; break; case AppPolicyId.CopyWholeEntries: str += KPRes.PolicyCopyWholeEntriesDesc; break; case AppPolicyId.DragDrop: str += KPRes.PolicyDragDropDesc; break; case AppPolicyId.UnhidePasswords: str += KPRes.UnhidePasswordsDesc; break; case AppPolicyId.ChangeMasterKey: str += KPRes.PolicyChangeMasterKey; break; case AppPolicyId.ChangeMasterKeyNoKey: str += KPRes.PolicyChangeMasterKeyNoKeyDesc; break; case AppPolicyId.EditTriggers: str += KPRes.PolicyTriggersEditDesc; break; default: Debug.Assert(false); str += KPRes.Unknown + "."; break; } return str; } public static string RequiredPolicyMessage(AppPolicyId flag) { string str = KPRes.PolicyDisallowed + MessageService.NewParagraph; str += KPRes.PolicyRequiredFlag + ":" + MessageService.NewLine; str += PolicyToString(flag, true); return str; } public static bool Try(AppPolicyId flag) { bool bAllowed = true; switch(flag) { case AppPolicyId.Plugins: bAllowed = m_apfCurrent.Plugins; break; case AppPolicyId.Export: bAllowed = m_apfCurrent.Export; break; case AppPolicyId.ExportNoKey: bAllowed = m_apfCurrent.ExportNoKey; break; case AppPolicyId.Import: bAllowed = m_apfCurrent.Import; break; case AppPolicyId.Print: bAllowed = m_apfCurrent.Print; break; case AppPolicyId.PrintNoKey: bAllowed = m_apfCurrent.PrintNoKey; break; case AppPolicyId.NewFile: bAllowed = m_apfCurrent.NewFile; break; case AppPolicyId.SaveFile: bAllowed = m_apfCurrent.SaveFile; break; case AppPolicyId.AutoType: bAllowed = m_apfCurrent.AutoType; break; case AppPolicyId.AutoTypeWithoutContext: bAllowed = m_apfCurrent.AutoTypeWithoutContext; break; case AppPolicyId.CopyToClipboard: bAllowed = m_apfCurrent.CopyToClipboard; break; case AppPolicyId.CopyWholeEntries: bAllowed = m_apfCurrent.CopyWholeEntries; break; case AppPolicyId.DragDrop: bAllowed = m_apfCurrent.DragDrop; break; case AppPolicyId.UnhidePasswords: bAllowed = m_apfCurrent.UnhidePasswords; break; case AppPolicyId.ChangeMasterKey: bAllowed = m_apfCurrent.ChangeMasterKey; break; case AppPolicyId.ChangeMasterKeyNoKey: bAllowed = m_apfCurrent.ChangeMasterKeyNoKey; break; case AppPolicyId.EditTriggers: bAllowed = m_apfCurrent.EditTriggers; break; default: Debug.Assert(false); break; } if(bAllowed == false) { string strMsg = RequiredPolicyMessage(flag); MessageService.ShowWarning(strMsg); } return bAllowed; } } } KeePass/App/AppDefs.cs0000664000000000000000000002350612665311132013510 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using KeePass.UI; using KeePass.Resources; using KeePassLib; using KeePassLib.Utility; namespace KeePass.App { public static class AppDefs { public static readonly Color ColorControlNormal = SystemColors.Window; public static readonly Color ColorControlDisabled = SystemColors.Control; public static readonly Color ColorEditError = Color.FromArgb(255, 192, 192); public const string XslFilesDir = "XSL"; public const string XslFileHtmlLite = "KDBX_DetailsLite.xsl"; public const string XslFileHtmlFull = "KDBX_DetailsFull.xsl"; public const string XslFileHtmlTabular = "KDBX_Tabular.xsl"; public const string ShInstUtil = "ShInstUtil.exe"; public const string PluginProductName = "KeePass Plugin"; // public const string MruNameValueSplitter = @"/::/"; /// /// Hot key IDs (used in WM_HOTKEY window messages). /// public static class GlobalHotKeyId { public const int AutoType = 195; public const int AutoTypeSelected = 196; public const int ShowWindow = 226; public const int EntryMenu = 227; internal const int TempRegTest = 225; } public static class HelpTopics { public const string Acknowledgements = "base/credits"; public const string License = "v2/license"; public const string DatabaseSettings = "v2/dbsettings"; public const string DbSettingsGeneral = "general"; public const string DbSettingsSecurity = "security"; // public const string DbSettingsProtection = "protection"; public const string DbSettingsCompression = "compression"; public const string AutoType = "base/autotype"; public const string AutoTypeObfuscation = "v2/autotype_obfuscation"; public const string AutoTypeWindowFilters = "autowindows"; public const string Entry = "v2/entry"; public const string EntryGeneral = "general"; public const string EntryStrings = "advanced"; public const string EntryAutoType = "autotype"; public const string EntryHistory = "history"; public const string KeySources = "base/keys"; public const string PwGenerator = "base/pwgenerator"; public const string IOConnections = "v2/ioconnect"; public const string UrlField = "base/autourl"; public const string CommandLine = "base/cmdline"; public const string FieldRefs = "base/fieldrefs"; public const string ImportExport = "base/importexport"; public const string ImportExportGenericCsv = "genericcsv"; public const string ImportExportSteganos = "imp_steganos"; public const string ImportExportPassKeeper = "imp_passkeeper"; public const string AppPolicy = "v2/policy"; public const string Triggers = "v2/triggers"; public const string TriggersEvents = "events"; public const string TriggersConditions = "conditions"; public const string TriggersActions = "actions"; public const string Setup = "v2/setup"; public const string SetupMono = "mono"; // public const string FaqTech = "base/faq_tech"; // public const string FaqTechMemProt = "memprot"; public const string XmlReplace = "v2/xml_replace"; } public static class CommandLineOptions { public const string Password = "pw"; public const string KeyFile = "keyfile"; public const string UserAccount = "useraccount"; public const string PasswordEncrypted = "pw-enc"; public const string PasswordStdIn = "pw-stdin"; public const string PreSelect = "preselect"; public const string IoCredUserName = "iousername"; public const string IoCredPassword = "iopassword"; public const string IoCredFromRecent = "iocredfromrecent"; public const string IoCredIsComplete = "ioiscomplete"; // User-friendly Pascal-case (shown in UAC dialog) public const string FileExtRegister = "RegisterFileExt"; public const string FileExtUnregister = "UnregisterFileExt"; public const string PreLoad = "preload"; // public const string PreLoadRegister = "registerpreload"; // public const string PreLoadUnregister = "unregisterpreload"; public const string ExitAll = "exit-all"; public const string Minimize = "minimize"; public const string AutoType = "auto-type"; public const string AutoTypeSelected = "auto-type-selected"; public const string OpenEntryUrl = "entry-url-open"; public const string LockAll = "lock-all"; public const string UnlockAll = "unlock-all"; public const string IpcEvent = "e"; public const string Uuid = "uuid"; public const string Help = @"?"; public const string HelpLong = "help"; public const string WorkaroundDisable = "wa-disable"; public const string ConfigPathLocal = "cfg-local"; public const string ConfigSetUrlOverride = "set-urloverride"; public const string ConfigClearUrlOverride = "clear-urloverride"; public const string ConfigGetUrlOverride = "get-urloverride"; public const string ConfigSetLanguageFile = "set-languagefile"; public const string PlgxCreate = "plgx-create"; public const string PlgxCreateInfo = "plgx-create-info"; public const string PlgxPrereqKP = "plgx-prereq-kp"; public const string PlgxPrereqNet = "plgx-prereq-net"; public const string PlgxPrereqOS = "plgx-prereq-os"; public const string PlgxPrereqPtr = "plgx-prereq-ptr"; public const string PlgxBuildPre = "plgx-build-pre"; public const string PlgxBuildPost = "plgx-build-post"; public const string Debug = "debug"; public const string DebugThrowException = "debug-throwexcp"; // public const string SavePluginCompileRes = "saveplgxcr"; // Now: Debug public const string ShowAssemblyInfo = "showasminfo"; public const string MakeXmlSerializerEx = "makexmlserializerex"; public const string MakeXspFile = "makexspfile"; #if DEBUG public const string TestGfx = "testgfx"; #endif public const string Version = "version"; // For Unix // #if (DEBUG && !KeePassLibSD) // public const string MakePopularPasswordTable = "makepopularpasswordtable"; // #endif } public static class FileExtension { public const string FileExt = "kdbx"; public const string ExtId = "kdbxfile"; public const string KeyFile = "key"; } public const string AutoRunName = "KeePass Password Safe 2"; public const string PreLoadName = "KeePass 2 PreLoad"; public const string MutexName = "KeePassAppMutex"; public const string MutexNameGlobal = "KeePassAppMutexEx"; // public const string ScriptExtension = "kps"; public const int InvalidWindowValue = -16381; public static class NamedEntryColor { public static readonly Color LightRed = Color.FromArgb(255, 204, 204); public static readonly Color LightGreen = Color.FromArgb(204, 255, 204); public static readonly Color LightBlue = Color.FromArgb(153, 204, 255); public static readonly Color LightYellow = Color.FromArgb(255, 255, 153); } public static class FileDialogContext { // Values must not contain '@' public const string Database = "Database"; public const string Sync = "Sync"; public const string KeyFile = "KeyFile"; public const string Import = "Import"; public const string Export = "Export"; public const string Attachments = "Attachments"; public const string Xsl = "Xsl"; } public const string DefaultTrlAuthor = "Dominik Reichl"; public const string DefaultTrlContact = @"http://www.dominik-reichl.de/"; // public const string LanguageInfoFileName = "LanguageInfo.xml"; public const string ColumnIdnGroup = "Group"; public const string ColumnIdnCreationTime = "CreationTime"; public const string ColumnIdnLastModificationTime = "LastModificationTime"; public const string ColumnIdnLastAccessTime = "LastAccessTime"; public const string ColumnIdnExpiryTime = "ExpiryTime"; public const string ColumnIdnUuid = "UUID"; public const string ColumnIdnAttachment = "Attachment"; public static string GetEntryField(PwEntry pe, string strFieldId) { if(pe == null) throw new ArgumentNullException("pe"); if(strFieldId == null) throw new ArgumentNullException("strFieldId"); if(strFieldId == AppDefs.ColumnIdnGroup) return ((pe.ParentGroup != null) ? pe.ParentGroup.Name : string.Empty); else if(strFieldId == AppDefs.ColumnIdnCreationTime) return TimeUtil.ToDisplayString(pe.CreationTime); else if(strFieldId == AppDefs.ColumnIdnLastModificationTime) return TimeUtil.ToDisplayString(pe.LastModificationTime); else if(strFieldId == AppDefs.ColumnIdnLastAccessTime) return TimeUtil.ToDisplayString(pe.LastAccessTime); else if(strFieldId == AppDefs.ColumnIdnExpiryTime) return (pe.Expires ? TimeUtil.ToDisplayString(pe.ExpiryTime) : KPRes.NeverExpires); else if(strFieldId == AppDefs.ColumnIdnUuid) return pe.Uuid.ToHexString(); else if(strFieldId == AppDefs.ColumnIdnAttachment) return pe.Binaries.UCount.ToString(); return pe.Strings.ReadSafe(strFieldId); } } } KeePass/App/AppHelp.cs0000664000000000000000000001177212641461334013525 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.IO; using System.Diagnostics; using System.Threading; using KeePass.Util; using KeePassLib; using KeePassLib.Utility; namespace KeePass.App { public enum AppHelpSource { Local, Online } /// /// Application help provider. Starts an external application that /// shows help on a specified topic. /// public static class AppHelp { private static string m_strLocalHelpFile = null; /// /// Get/set the path of the local help file. /// public static string LocalHelpFile { get { return m_strLocalHelpFile; } set { m_strLocalHelpFile = value; } } public static bool LocalHelpAvailable { get { if(m_strLocalHelpFile == null) return false; try { return File.Exists(m_strLocalHelpFile); } catch(Exception) { } return false; } } public static AppHelpSource PreferredHelpSource { get { return ((Program.Config.Application.HelpUseLocal) ? AppHelpSource.Local : AppHelpSource.Online); } set { Program.Config.Application.HelpUseLocal = (value == AppHelpSource.Local); } } /// /// Show a help page. /// /// Topic name. May be null. /// Section name. May be null. Must not start /// with the '#' character. public static void ShowHelp(string strTopic, string strSection) { AppHelp.ShowHelp(strTopic, strSection, false); } /// /// Show a help page. /// /// Topic name. May be null. /// Section name. May be null. Must not start /// with the '#' character. /// Specify if the local help file should be /// preferred. If no local help file is available, the online help /// system will be used, independent of the bPreferLocal flag. public static void ShowHelp(string strTopic, string strSection, bool bPreferLocal) { if(AppHelp.LocalHelpAvailable) { if(bPreferLocal || (AppHelp.PreferredHelpSource == AppHelpSource.Local)) AppHelp.ShowHelpLocal(strTopic, strSection); else AppHelp.ShowHelpOnline(strTopic, strSection); } else AppHelp.ShowHelpOnline(strTopic, strSection); } private static void ShowHelpLocal(string strTopic, string strSection) { Debug.Assert(m_strLocalHelpFile != null); // Unblock CHM file for proper display of help contents WinUtil.RemoveZoneIdentifier(m_strLocalHelpFile); string strCmd = "\"ms-its:" + m_strLocalHelpFile; if(strTopic != null) strCmd += @"::/help/" + strTopic + ".html"; if(strSection != null) { Debug.Assert(strTopic != null); // Topic must be present for section strCmd += @"#" + strSection; } strCmd += "\""; try { Process.Start(WinUtil.LocateSystemApp("hh.exe"), strCmd); } catch(Exception exStart) { MessageService.ShowWarning(@"hh.exe " + strCmd, exStart); } } private static void ShowHelpOnline(string strTopic, string strSection) { string strCmd = PwDefs.HelpUrl; if(strTopic != null) strCmd += strTopic + ".html"; if(strSection != null) { Debug.Assert(strTopic != null); // Topic must be present for section strCmd += @"#" + strSection; } try { ParameterizedThreadStart pts = new ParameterizedThreadStart(AppHelp.RunCommandAsync); Thread th = new Thread(pts); // Local, but thread will continue to run anyway th.Start(strCmd); } catch(Exception exThread) { MessageService.ShowWarning(strCmd, exThread); } } private static void RunCommandAsync(object pData) { Debug.Assert(pData != null); if(pData == null) throw new ArgumentNullException("pData"); string strCommand = (pData as string); Debug.Assert(strCommand != null); if(strCommand == null) throw new ArgumentException(); try { Process.Start(strCommand); } catch(Exception exStart) { MessageService.ShowWarning(strCommand, exStart); } } } } KeePass/Native/0000775000000000000000000000000012641461342012342 5ustar rootrootKeePass/Native/NativeMethods.Defs.cs0000664000000000000000000003055112641461342016327 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Text; using System.Security; using System.Runtime.InteropServices; using System.Diagnostics; using System.Windows.Forms; namespace KeePass.Native { internal static partial class NativeMethods { internal const int WM_SETFOCUS = 0x0007; internal const int WM_KILLFOCUS = 0x0008; internal const int WM_KEYDOWN = 0x0100; internal const int WM_KEYUP = 0x0101; internal const int WM_DRAWCLIPBOARD = 0x0308; internal const int WM_CHANGECBCHAIN = 0x030D; internal const int WM_HOTKEY = 0x0312; internal const int WM_USER = 0x0400; internal const int WM_SYSCOMMAND = 0x0112; internal const int WM_POWERBROADCAST = 0x0218; internal const int WM_COPYDATA = 0x004A; // internal const int WM_MOUSEMOVE = 0x0200; internal const int WM_LBUTTONDOWN = 0x0201; internal const int WM_RBUTTONDOWN = 0x0204; internal const int WM_MBUTTONDOWN = 0x0207; // internal const int WM_MOUSEWHEEL = 0x020A; // internal const int WM_ERASEBKGND = 0x0014; internal const int WM_NOTIFY = 0x004E; // See Control.ReflectMessageInternal; // http://msdn.microsoft.com/en-us/library/eeah46xd.aspx internal const int WM_REFLECT = 0x2000; internal const int WM_NOTIFY_REFLECT = (WM_NOTIFY + WM_REFLECT); internal const int WM_GETTEXTLENGTH = 0x000E; internal const int WM_GETICON = 0x007F; internal const int HWND_BROADCAST = 0xFFFF; internal const uint SMTO_NORMAL = 0x0000; internal const uint SMTO_BLOCK = 0x0001; internal const uint SMTO_ABORTIFHUNG = 0x0002; internal const uint SMTO_NOTIMEOUTIFNOTHUNG = 0x0008; internal const uint INPUT_MOUSE = 0; internal const uint INPUT_KEYBOARD = 1; internal const uint INPUT_HARDWARE = 2; internal const int VK_RETURN = 0x0D; internal const int VK_SHIFT = 0x10; internal const int VK_CONTROL = 0x11; internal const int VK_MENU = 0x12; internal const int VK_CAPITAL = 0x14; internal const int VK_LSHIFT = 0xA0; internal const int VK_RSHIFT = 0xA1; internal const int VK_LCONTROL = 0xA2; internal const int VK_RCONTROL = 0xA3; internal const int VK_LMENU = 0xA4; internal const int VK_RMENU = 0xA5; internal const int VK_LWIN = 0x5B; internal const int VK_RWIN = 0x5C; internal const int VK_SNAPSHOT = 0x2C; // internal const int VK_F5 = 0x74; // internal const int VK_F6 = 0x75; // internal const int VK_F7 = 0x76; // internal const int VK_F8 = 0x77; internal const uint KEYEVENTF_EXTENDEDKEY = 1; internal const uint KEYEVENTF_KEYUP = 2; internal const uint KEYEVENTF_UNICODE = 4; // internal const uint GW_CHILD = 5; internal const uint GW_HWNDNEXT = 2; internal const int GWL_STYLE = -16; internal const int GWL_EXSTYLE = -20; internal const int WS_VISIBLE = 0x10000000; // internal const int WS_EX_COMPOSITED = 0x02000000; internal const int SW_SHOW = 5; internal const int GCLP_HICON = -14; internal const int GCLP_HICONSM = -34; internal const int ICON_SMALL = 0; internal const int ICON_BIG = 1; internal const int ICON_SMALL2 = 2; internal const int EM_GETCHARFORMAT = WM_USER + 58; internal const int EM_SETCHARFORMAT = WM_USER + 68; internal const int ES_WANTRETURN = 0x1000; internal const int SCF_SELECTION = 0x0001; internal const uint CFM_LINK = 0x00000020; internal const uint CFE_LINK = 0x00000020; internal const int SC_MINIMIZE = 0xF020; internal const int SC_MAXIMIZE = 0xF030; internal const int IDANI_CAPTION = 3; internal const int PBT_APMQUERYSUSPEND = 0x0000; internal const int PBT_APMSUSPEND = 0x0004; internal const int ECM_FIRST = 0x1500; internal const int EM_SETCUEBANNER = ECM_FIRST + 1; internal const uint INVALID_FILE_ATTRIBUTES = 0xFFFFFFFFU; internal const uint FSCTL_LOCK_VOLUME = 589848; internal const uint FSCTL_UNLOCK_VOLUME = 589852; internal const int LVM_FIRST = 0x1000; // internal const int LVM_ENSUREVISIBLE = LVM_FIRST + 19; internal const int LVM_SCROLL = LVM_FIRST + 20; // internal const int LVM_SETGROUPINFO = LVM_FIRST + 147; // >= Vista // internal const int LVM_GETGROUPINFOBYINDEX = LVM_FIRST + 153; // >= Vista internal const int TV_FIRST = 0x1100; internal const int TVM_SETEXTENDEDSTYLE = TV_FIRST + 44; internal const int WM_MOUSEACTIVATE = 0x21; internal const int MA_ACTIVATE = 1; internal const int MA_ACTIVATEANDEAT = 2; internal const int MA_NOACTIVATE = 3; internal const int MA_NOACTIVATEANDEAT = 4; internal const int BCM_SETSHIELD = 0x160C; internal const int SHCNE_ASSOCCHANGED = 0x08000000; internal const uint SHCNF_IDLIST = 0x0000; // internal const uint SW_INVALIDATE = 0x0002; internal const uint TVS_FULLROWSELECT = 0x1000; internal const uint TVS_NONEVENHEIGHT = 0x4000; internal const uint TVS_EX_DOUBLEBUFFER = 0x0004; internal const uint TVS_EX_FADEINOUTEXPANDOS = 0x0040; internal const int HDI_FORMAT = 0x0004; internal const int HDF_SORTUP = 0x0400; internal const int HDF_SORTDOWN = 0x0200; internal const int LVM_GETHEADER = LVM_FIRST + 31; internal const int HDM_FIRST = 0x1200; internal const int HDM_GETITEMA = HDM_FIRST + 3; internal const int HDM_GETITEMW = HDM_FIRST + 11; internal const int HDM_SETITEMA = HDM_FIRST + 4; internal const int HDM_SETITEMW = HDM_FIRST + 12; internal const int OFN_DONTADDTORECENT = 0x02000000; internal const uint SHGFI_DISPLAYNAME = 0x000000200; internal const uint SHGFI_ICON = 0x000000100; internal const uint SHGFI_TYPENAME = 0x000000400; internal const uint SHGFI_SMALLICON = 0x000000001; internal const uint MOD_ALT = 1; internal const uint MOD_CONTROL = 2; internal const uint MOD_SHIFT = 4; internal const uint MOD_WIN = 8; internal const int IDHOT_SNAPDESKTOP = -2; internal const int IDHOT_SNAPWINDOW = -1; internal const uint GHND = 0x0042; internal const uint GMEM_MOVEABLE = 0x0002; internal const uint GMEM_ZEROINIT = 0x0040; internal const uint CF_TEXT = 1; internal const uint CF_UNICODETEXT = 13; internal const uint SND_ASYNC = 0x0001; internal const uint SND_FILENAME = 0x00020000; internal const uint SND_NODEFAULT = 0x0002; internal const int LOGPIXELSX = 88; internal const int LOGPIXELSY = 90; // internal const int SM_CXSMICON = 49; // internal const int SM_CYSMICON = 50; // internal const uint PROCESS_QUERY_INFORMATION = 0x0400; internal const uint ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID = 0x04; internal const int INFOTIPSIZE = 1024; // internal const uint DI_NORMAL = 0x0003; // internal const int LVN_FIRST = -100; // internal const int LVN_LINKCLICK = LVN_FIRST - 84; // internal const uint LVGF_NONE = 0x00000000; // internal const uint LVGF_HEADER = 0x00000001; // internal const uint LVGF_FOOTER = 0x00000002; // internal const uint LVGF_STATE = 0x00000004; // internal const uint LVGF_ALIGN = 0x00000008; // internal const uint LVGF_GROUPID = 0x00000010; // internal const uint LVGF_SUBTITLE = 0x00000100; // internal const uint LVGF_TASK = 0x00000200; // internal const uint LVGF_DESCRIPTIONTOP = 0x00000400; // internal const uint LVGF_DESCRIPTIONBOTTOM = 0x00000800; // internal const uint LVGF_TITLEIMAGE = 0x00001000; // internal const uint LVGF_EXTENDEDIMAGE = 0x00002000; // internal const uint LVGF_ITEMS = 0x00004000; // internal const uint LVGF_SUBSET = 0x00008000; // internal const uint LVGF_SUBSETITEMS = 0x00010000; // internal const uint LVGS_NORMAL = 0x00000000; // internal const uint LVGS_COLLAPSED = 0x00000001; // internal const uint LVGS_HIDDEN = 0x00000002; // internal const uint LVGS_NOHEADER = 0x00000004; // internal const uint LVGS_COLLAPSIBLE = 0x00000008; // internal const uint LVGS_FOCUSED = 0x00000010; // internal const uint LVGS_SELECTED = 0x00000020; // internal const uint LVGS_SUBSETED = 0x00000040; // internal const uint LVGS_SUBSETLINKFOCUSED = 0x00000080; // private const int TTN_FIRST = -520; // internal const int TTN_NEEDTEXTA = TTN_FIRST; // internal const int TTN_NEEDTEXTW = TTN_FIRST - 10; [return: MarshalAs(UnmanagedType.Bool)] internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); internal enum ComboBoxButtonState : uint { STATE_SYSTEM_NONE = 0, STATE_SYSTEM_INVISIBLE = 0x00008000, STATE_SYSTEM_PRESSED = 0x00000008 } [Flags] internal enum DesktopFlags : uint { ReadObjects = 0x0001, CreateWindow = 0x0002, CreateMenu = 0x0004, HookControl = 0x0008, JournalRecord = 0x0010, JournalPlayback = 0x0020, Enumerate = 0x0040, WriteObjects = 0x0080, SwitchDesktop = 0x0100, } [Flags] internal enum EFileAccess : uint { GenericRead = 0x80000000, GenericWrite = 0x40000000, GenericExecute = 0x20000000, GenericAll = 0x10000000 } [Flags] internal enum EFileShare : uint { None = 0x00000000, Read = 0x00000001, Write = 0x00000002, Delete = 0x00000004 } internal enum ECreationDisposition : uint { CreateNew = 1, CreateAlways = 2, OpenExisting = 3, OpenAlways = 4, TruncateExisting = 5 } private enum ScrollBarDirection : int { SB_HORZ = 0, SB_VERT = 1, SB_CTL = 2, SB_BOTH = 3 } private enum ScrollInfoMask : uint { SIF_RANGE = 0x1, SIF_PAGE = 0x2, SIF_POS = 0x4, SIF_DISABLENOSCROLL = 0x8, SIF_TRACKPOS = 0x10, SIF_ALL = SIF_RANGE + SIF_PAGE + SIF_POS + SIF_TRACKPOS } [Flags] internal enum MessageBoxFlags : uint { // Buttons MB_ABORTRETRYIGNORE = 0x00000002, MB_CANCELTRYCONTINUE = 0x00000006, MB_HELP = 0x00004000, MB_OK = 0, MB_OKCANCEL = 0x00000001, MB_RETRYCANCEL = 0x00000005, MB_YESNO = 0x00000004, MB_YESNOCANCEL = 0x00000003, // Icons MB_ICONEXCLAMATION = 0x00000030, MB_ICONWARNING = 0x00000030, MB_ICONINFORMATION = 0x00000040, MB_ICONASTERISK = 0x00000040, MB_ICONQUESTION = 0x00000020, MB_ICONSTOP = 0x00000010, MB_ICONERROR = 0x00000010, MB_ICONHAND = 0x00000010, // Default buttons MB_DEFBUTTON1 = 0, MB_DEFBUTTON2 = 0x00000100, MB_DEFBUTTON3 = 0x00000200, MB_DEFBUTTON4 = 0x00000300, // Modality MB_APPLMODAL = 0, MB_SYSTEMMODAL = 0x00001000, MB_TASKMODAL = 0x00002000, // Other options MB_DEFAULT_DESKTOP_ONLY = 0x00020000, MB_RIGHT = 0x00080000, MB_RTLREADING = 0x00100000, MB_SETFOREGROUND = 0x00010000, MB_TOPMOST = 0x00040000, MB_SERVICE_NOTIFICATION = 0x00200000 } // See DialogResult /* internal enum CommandID { None = 0, OK = 1, // IDOK Cancel = 2, // IDCANCEL Abort = 3, // IDABORT Retry = 4, // IDRETRY Ignore = 5, // IDIGNORE Yes = 6, // IDYES No = 7, // IDNO Close = 8, // IDCLOSE Help = 9, // IDHELP TryAgain = 10, // IDTRYAGAIN Continue = 11, // IDCONTINUE TimeOut = 32000 // IDTIMEOUT } */ [Flags] internal enum ToolHelpFlags : uint { SnapHeapList = 0x00000001, SnapProcess = 0x00000002, SnapThread = 0x00000004, SnapModule = 0x00000008, SnapModule32 = 0x00000010, SnapAll = (SnapHeapList | SnapProcess | SnapThread | SnapModule), Inherit = 0x80000000U } // https://msdn.microsoft.com/en-us/library/windows/desktop/aa380337.aspx [Flags] internal enum STGM : uint { Read = 0x00000000, Write = 0x00000001, ReadWrite = 0x00000002, ShareDenyNone = 0x00000040, ShareDenyRead = 0x00000030, ShareDenyWrite = 0x00000020, ShareExclusive = 0x00000010 } } } KeePass/Native/ShellLinkEx.cs0000664000000000000000000001225012641461342015053 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; using System.Diagnostics; using KeePassLib.Utility; namespace KeePass.Native { internal sealed class ShellLinkEx { private string m_strPath = null; public string Path { get { return m_strPath; } set { m_strPath = value; } } private string m_strArgs = null; public string Arguments { get { return m_strArgs; } set { m_strArgs = value; } } private string m_strDesc = null; public string Description { get { return m_strDesc; } set { if((value != null) && (value.Length >= NativeMethods.INFOTIPSIZE)) { Debug.Assert(false); m_strDesc = StrUtil.CompactString3Dots(value, NativeMethods.INFOTIPSIZE - 1); } else m_strDesc = value; } } public ShellLinkEx() { } public ShellLinkEx(string strPath, string strArgs, string strDesc) { m_strPath = strPath; m_strArgs = strArgs; this.Description = strDesc; // Shortens description if necessary } public static ShellLinkEx Load(string strLnkFilePath) { try { CShellLink csl = new CShellLink(); IShellLinkW sl = (csl as IShellLinkW); if(sl == null) { Debug.Assert(false); return null; } IPersistFile pf = (csl as IPersistFile); if(pf == null) { Debug.Assert(false); return null; } pf.Load(strLnkFilePath, (int)(NativeMethods.STGM.Read | NativeMethods.STGM.ShareDenyWrite)); const int ccMaxPath = KeePassLib.Native.NativeMethods.MAX_PATH; const int ccInfoTip = NativeMethods.INFOTIPSIZE; ShellLinkEx r = new ShellLinkEx(); StringBuilder sb = new StringBuilder(ccMaxPath + 1); sl.GetPath(sb, sb.Capacity, IntPtr.Zero, 0); r.Path = sb.ToString(); sb = new StringBuilder(ccInfoTip + 1); sl.GetArguments(sb, sb.Capacity); r.Arguments = sb.ToString(); sb = new StringBuilder(ccInfoTip + 1); sl.GetDescription(sb, sb.Capacity); r.Description = sb.ToString(); return r; } catch(Exception) { Debug.Assert(false); } return null; } public bool Save(string strLnkFilePath) { try { CShellLink csl = new CShellLink(); IShellLinkW sl = (csl as IShellLinkW); if(sl == null) { Debug.Assert(false); return false; } IPersistFile pf = (csl as IPersistFile); if(pf == null) { Debug.Assert(false); return false; } if(!string.IsNullOrEmpty(m_strPath)) sl.SetPath(m_strPath); if(!string.IsNullOrEmpty(m_strArgs)) sl.SetArguments(m_strArgs); if(!string.IsNullOrEmpty(m_strDesc)) sl.SetDescription(m_strDesc); pf.Save(strLnkFilePath, true); return true; } catch(Exception) { Debug.Assert(false); } return false; } } [ComImport] [Guid("000214F9-0000-0000-C000-000000000046")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] internal interface IShellLinkW { void GetPath([MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cch, IntPtr pfd, uint fFlags); void GetIDList(out IntPtr ppidl); void SetIDList(IntPtr pidl); void GetDescription([MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cch); void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName); void GetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cch); void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir); void GetArguments([MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cch); void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs); void GetHotkey(out ushort pwHotkey); void SetHotkey(ushort wHotkey); void GetShowCmd(out int piShowCmd); void SetShowCmd(int iShowCmd); void GetIconLocation([MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cch, out int piIcon); void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon); void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, uint dwReserved); void Resolve(IntPtr hwnd, uint fFlags); void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); } [ComImport] [Guid("00021401-0000-0000-C000-000000000046")] internal class CShellLink { } } KeePass/Native/NativeProgressDialog.cs0000664000000000000000000001051312641461342016764 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* using System; using System.Runtime.InteropServices; using System.Diagnostics; using KeePass.Util; using KeePassLib; using KeePassLib.Interfaces; namespace KeePass.Native { [Flags] public enum ProgDlgFlags { Normal = 0x0, Modal = 0x1, AutoTime = 0x2, NoTime = 0x4, NoMinimize = 0x8, NoProgressBar = 0x10, MarqueeProgress = 0x20, NoCancel = 0x40 } public sealed class NativeProgressDialog : IStatusLogger { private IProgressDialog m_p; private uint m_uFlags; private IntPtr m_hWndParent; private uint m_uLastPercent = 0; private const uint PDTIMER_RESET = 0x1; private const uint PDTIMER_PAUSE = 0x2; private const uint PDTIMER_RESUME = 0x3; public static bool IsSupported { get { return (WinUtil.IsAtLeastWindowsVista && !KeePassLib.Native.NativeLib.IsUnix()); } } public NativeProgressDialog(IntPtr hWndParent, ProgDlgFlags fl) { m_hWndParent = hWndParent; m_uFlags = (uint)fl; try { m_p = (IProgressDialog)(new Win32ProgressDialog()); } catch(Exception) { Debug.Assert(false); m_p = null; } } ~NativeProgressDialog() { EndLogging(); } public void StartLogging(string strOperation, bool bWriteOperationToLog) { if(m_p == null) { Debug.Assert(false); return; } m_p.SetTitle(PwDefs.ShortProductName); m_p.StartProgressDialog(m_hWndParent, IntPtr.Zero, m_uFlags, IntPtr.Zero); m_p.Timer(PDTIMER_RESET, IntPtr.Zero); m_p.SetLine(1, strOperation, false, IntPtr.Zero); m_p.SetProgress(0, 100); m_uLastPercent = 0; } public void EndLogging() { if(m_p == null) return; // Might be freed/null already, don't assert m_p.StopProgressDialog(); try { Marshal.ReleaseComObject(m_p); } catch(Exception) { Debug.Assert(false); } m_p = null; } public bool SetProgress(uint uPercent) { if(m_p == null) { Debug.Assert(false); return true; } if(uPercent != m_uLastPercent) { m_p.SetProgress(uPercent, 100); m_uLastPercent = uPercent; } return !m_p.HasUserCancelled(); } public bool SetText(string strNewText, LogStatusType lsType) { if(m_p == null) { Debug.Assert(false); return true; } m_p.SetLine(2, strNewText, false, IntPtr.Zero); return !m_p.HasUserCancelled(); } public bool ContinueWork() { if(m_p == null) { Debug.Assert(false); return true; } return !m_p.HasUserCancelled(); } } [ComImport] [Guid("EBBC7C04-315E-11D2-B62F-006097DF5BD4")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] internal interface IProgressDialog { void StartProgressDialog(IntPtr hwndParent, IntPtr punkEnableModless, uint dwFlags, IntPtr pvReserved); void StopProgressDialog(); void SetTitle([MarshalAs(UnmanagedType.LPWStr)] string pwzTitle); void SetAnimation(IntPtr hInstAnimation, uint idAnimation); [PreserveSig] [return: MarshalAs(UnmanagedType.Bool)] bool HasUserCancelled(); void SetProgress(uint dwCompleted, uint dwTotal); void SetProgress64(ulong ullCompleted, ulong ullTotal); void SetLine(uint dwLineNum, [MarshalAs(UnmanagedType.LPWStr)] string pwzString, [MarshalAs(UnmanagedType.Bool)] bool fCompactPath, IntPtr pvReserved); void SetCancelMsg([MarshalAs(UnmanagedType.LPWStr)] string pwzCancelMsg, IntPtr pvReserved); void Timer(uint dwTimerAction, IntPtr pvReserved); } [ComImport] [Guid("F8383852-FCD3-11D1-A6B9-006097DF5BD4")] internal class Win32ProgressDialog { } } */ KeePass/Native/NativeMethods.New.cs0000664000000000000000000004520212641461342016176 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Text; using System.Security; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Diagnostics; using KeePass.UI; using KeePass.Util; using KeePassLib.Utility; using NativeLib = KeePassLib.Native.NativeLib; namespace KeePass.Native { internal static partial class NativeMethods { internal static string GetWindowText(IntPtr hWnd, bool bTrim) { int nLength = GetWindowTextLength(hWnd); if(nLength <= 0) return string.Empty; StringBuilder sb = new StringBuilder(nLength + 1); GetWindowText(hWnd, sb, sb.Capacity); string strWindow = sb.ToString(); return (bTrim ? strWindow.Trim() : strWindow); } /* internal static string GetWindowClassName(IntPtr hWnd) { try { StringBuilder sb = new StringBuilder(260); if(GetClassName(hWnd, sb, 258) > 0) return sb.ToString(); else { Debug.Assert(false); } return string.Empty; } catch(Exception) { Debug.Assert(false); } return null; } */ internal static IntPtr GetForegroundWindowHandle() { if(!NativeLib.IsUnix()) return GetForegroundWindow(); // Windows API try { return new IntPtr(int.Parse(RunXDoTool("getactivewindow"))); } catch(Exception) { Debug.Assert(false); } return IntPtr.Zero; } private static readonly char[] m_vWindowTrim = { '\r', '\n' }; internal static void GetForegroundWindowInfo(out IntPtr hWnd, out string strWindowText, bool bTrimWindow) { hWnd = GetForegroundWindowHandle(); if(!NativeLib.IsUnix()) // Windows strWindowText = GetWindowText(hWnd, bTrimWindow); else // Unix { strWindowText = RunXDoTool("getactivewindow getwindowname"); if(!string.IsNullOrEmpty(strWindowText)) { if(bTrimWindow) strWindowText = strWindowText.Trim(); else strWindowText = strWindowText.Trim(m_vWindowTrim); } } } internal static bool IsWindowEx(IntPtr hWnd) { if(!NativeLib.IsUnix()) // Windows return IsWindow(hWnd); return true; } internal static int GetWindowStyle(IntPtr hWnd) { return GetWindowLong(hWnd, GWL_STYLE); } internal static IntPtr GetClassLongPtr(IntPtr hWnd, int nIndex) { if(IntPtr.Size > 4) return GetClassLongPtr64(hWnd, nIndex); return GetClassLongPtr32(hWnd, nIndex); } internal static bool SetForegroundWindowEx(IntPtr hWnd) { if(!NativeLib.IsUnix()) return SetForegroundWindow(hWnd); return (RunXDoTool("windowactivate " + hWnd.ToInt64().ToString()).Trim().Length == 0); } internal static bool EnsureForegroundWindow(IntPtr hWnd) { if(!IsWindowEx(hWnd)) return false; if(!SetForegroundWindowEx(hWnd)) { Debug.Assert(false); return false; } int nStartMS = Environment.TickCount; while((Environment.TickCount - nStartMS) < 1000) { IntPtr h = GetForegroundWindowHandle(); if(h == hWnd) return true; Application.DoEvents(); } return false; } internal static IntPtr FindWindow(string strTitle) { if(strTitle == null) { Debug.Assert(false); return IntPtr.Zero; } if(!NativeLib.IsUnix()) return FindWindowEx(IntPtr.Zero, IntPtr.Zero, null, strTitle); // Not --onlyvisible (due to not finding minimized windows) string str = RunXDoTool("search --name \"" + strTitle + "\"").Trim(); if(str.Length == 0) return IntPtr.Zero; long l; if(long.TryParse(str, out l)) return new IntPtr(l); return IntPtr.Zero; } internal static bool LoseFocus(Form fCurrent) { if(NativeLib.IsUnix()) return LoseFocusUnix(fCurrent); try { IntPtr hCurrentWnd = ((fCurrent != null) ? fCurrent.Handle : IntPtr.Zero); IntPtr hWnd = GetWindow(hCurrentWnd, GW_HWNDNEXT); while(true) { if(hWnd != hCurrentWnd) { int nStyle = GetWindowStyle(hWnd); if(((nStyle & WS_VISIBLE) != 0) && (GetWindowTextLength(hWnd) > 0)) { // Skip the taskbar window (required for Windows 7, // when the target window is the only other window // in the taskbar) if(!IsTaskBar(hWnd)) break; } } hWnd = GetWindow(hWnd, GW_HWNDNEXT); if(hWnd == IntPtr.Zero) break; } if(hWnd == IntPtr.Zero) return false; Debug.Assert(GetWindowText(hWnd, true) != "Start"); return EnsureForegroundWindow(hWnd); } catch(Exception) { Debug.Assert(false); } return false; } internal static bool IsTaskBar(IntPtr hWnd) { Process p = null; try { string strText = GetWindowText(hWnd, true); if(strText == null) return false; if(!strText.Equals("Start", StrUtil.CaseIgnoreCmp)) return false; uint uProcessId; NativeMethods.GetWindowThreadProcessId(hWnd, out uProcessId); p = Process.GetProcessById((int)uProcessId); string strExe = UrlUtil.GetFileName(p.MainModule.FileName).Trim(); return strExe.Equals("Explorer.exe", StrUtil.CaseIgnoreCmp); } catch(Exception) { Debug.Assert(false); } finally { try { if(p != null) p.Dispose(); } catch(Exception) { Debug.Assert(false); } } return false; } /* internal static bool IsMetroWindow(IntPtr hWnd) { if(hWnd == IntPtr.Zero) { Debug.Assert(false); return false; } if(NativeLib.IsUnix() || !WinUtil.IsAtLeastWindows8) return false; try { uint uProcessId; NativeMethods.GetWindowThreadProcessId(hWnd, out uProcessId); if(uProcessId == 0) { Debug.Assert(false); return false; } IntPtr h = NativeMethods.OpenProcess(NativeMethods.PROCESS_QUERY_INFORMATION, false, uProcessId); if(h == IntPtr.Zero) return false; // No assert bool bRet = NativeMethods.IsImmersiveProcess(h); NativeMethods.CloseHandle(h); return bRet; } catch(Exception) { Debug.Assert(false); } return false; } */ public static bool IsInvalidHandleValue(IntPtr p) { long h = p.ToInt64(); if(h == -1) return true; if(h == 0xFFFFFFFF) return true; return false; } public static int GetHeaderHeight(ListView lv) { if(lv == null) { Debug.Assert(false); return 0; } try { if((lv.View == View.Details) && (lv.HeaderStyle != ColumnHeaderStyle.None) && (lv.Columns.Count > 0) && !NativeLib.IsUnix()) { IntPtr hHeader = NativeMethods.SendMessage(lv.Handle, NativeMethods.LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero); if(hHeader != IntPtr.Zero) { NativeMethods.RECT rect = new NativeMethods.RECT(); if(NativeMethods.GetWindowRect(hHeader, ref rect)) return (rect.Bottom - rect.Top); else { Debug.Assert(false); } } else { Debug.Assert(false); } } } catch(Exception) { Debug.Assert(false); } return 0; } // Workaround for only partially visible list view items /* public static void EnsureVisible(ListView lv, int nIndex, bool bPartialOK) { Debug.Assert(lv != null); if(lv == null) return; Debug.Assert(nIndex >= 0); if(nIndex < 0) return; Debug.Assert(nIndex < lv.Items.Count); if(nIndex >= lv.Items.Count) return; int nPartialOK = (bPartialOK ? 1 : 0); try { NativeMethods.SendMessage(lv.Handle, LVM_ENSUREVISIBLE, new IntPtr(nIndex), new IntPtr(nPartialOK)); } catch(Exception) { Debug.Assert(false); } } */ public static int GetScrollPosY(IntPtr hWnd) { if(NativeLib.IsUnix()) return 0; try { SCROLLINFO si = new SCROLLINFO(); si.cbSize = (uint)Marshal.SizeOf(si); si.fMask = (uint)ScrollInfoMask.SIF_POS; if(GetScrollInfo(hWnd, (int)ScrollBarDirection.SB_VERT, ref si)) return si.nPos; Debug.Assert(false); } catch(Exception) { Debug.Assert(false); } return 0; } public static void Scroll(ListView lv, int dx, int dy) { if(lv == null) throw new ArgumentNullException("lv"); if(NativeLib.IsUnix()) return; try { SendMessage(lv.Handle, LVM_SCROLL, (IntPtr)dx, (IntPtr)dy); } catch(Exception) { Debug.Assert(false); } } /* public static void ScrollAbsY(IntPtr hWnd, int y) { try { SCROLLINFO si = new SCROLLINFO(); si.cbSize = (uint)Marshal.SizeOf(si); si.fMask = (uint)ScrollInfoMask.SIF_POS; si.nPos = y; SetScrollInfo(hWnd, (int)ScrollBarDirection.SB_VERT, ref si, true); } catch(Exception) { Debug.Assert(false); } } */ /* public static void Scroll(IntPtr h, int dx, int dy) { if(h == IntPtr.Zero) { Debug.Assert(false); return; } // No throw try { ScrollWindowEx(h, dx, dy, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, SW_INVALIDATE); } catch(Exception) { Debug.Assert(false); } } */ /* internal static void ClearIconicBitmaps(IntPtr hWnd) { // TaskbarList.SetThumbnailClip(hWnd, new Rectangle(0, 0, 1, 1)); // TaskbarList.SetThumbnailClip(hWnd, null); try { DwmInvalidateIconicBitmaps(hWnd); } catch(Exception) { Debug.Assert(!WinUtil.IsAtLeastWindows7); } } */ internal static uint? GetLastInputTime() { try { LASTINPUTINFO lii = new LASTINPUTINFO(); lii.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO)); if(!GetLastInputInfo(ref lii)) { Debug.Assert(false); return null; } return lii.dwTime; } catch(Exception) { Debug.Assert(NativeLib.IsUnix() || WinUtil.IsWindows9x); } return null; } internal static bool SHGetFileInfo(string strPath, int nPrefImgDim, out Image img, out string strDisplayName) { img = null; strDisplayName = null; try { SHFILEINFO fi = new SHFILEINFO(); IntPtr p = SHGetFileInfo(strPath, 0, ref fi, (uint)Marshal.SizeOf(typeof( SHFILEINFO)), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_DISPLAYNAME); if(p == IntPtr.Zero) return false; if(fi.hIcon != IntPtr.Zero) { using(Icon ico = Icon.FromHandle(fi.hIcon)) // Doesn't take ownership { img = new Bitmap(nPrefImgDim, nPrefImgDim); using(Graphics g = Graphics.FromImage(img)) { g.Clear(Color.Transparent); g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.SmoothingMode = SmoothingMode.HighQuality; g.DrawIcon(ico, new Rectangle(0, 0, nPrefImgDim, nPrefImgDim)); } } if(!DestroyIcon(fi.hIcon)) { Debug.Assert(false); } } strDisplayName = fi.szDisplayName; return true; } catch(Exception) { Debug.Assert(false); } return false; } /// /// Method for testing whether a file exists or not. Also /// supports NTFS alternate data streams. /// /// Path of the file or stream. /// true if the file exists. public static bool FileExists(string strFilePath) { if(strFilePath == null) throw new ArgumentNullException("strFilePath"); try { // https://sourceforge.net/p/keepass/discussion/329221/thread/65244cc9/ if(!NativeLib.IsUnix()) return (GetFileAttributes(strFilePath) != INVALID_FILE_ATTRIBUTES); } catch(Exception) { Debug.Assert(false); } // Fallback to .NET method (for Unix-like systems) try { return File.Exists(strFilePath); } catch(Exception) { Debug.Assert(false); } // Invalid path return false; } /* internal static LVGROUP GetGroupInfoByIndex(ListView lv, uint uIndex) { if(lv == null) throw new ArgumentNullException("lv"); if(uIndex >= (uint)lv.Groups.Count) throw new ArgumentOutOfRangeException("uIndex"); const int nStrLen = 1024; LVGROUP g = new LVGROUP(); g.cbSize = (uint)Marshal.SizeOf(typeof(LVGROUP)); g.mask = ...; g.pszHeader = new StringBuilder(nStrLen); g.cchHeader = nStrLen - 1; g.pszFooter = new StringBuilder(nStrLen); g.cchFooter = nStrLen - 1; g.pszSubtitle = new StringBuilder(nStrLen); g.cchSubtitle = (uint)(nStrLen - 1); g.pszTask = new StringBuilder(nStrLen); g.cchTask = (uint)(nStrLen - 1); g.pszDescriptionTop = new StringBuilder(nStrLen); g.cchDescriptionTop = (uint)(nStrLen - 1); g.pszDescriptionBottom = new StringBuilder(nStrLen); g.cchDescriptionBottom = (uint)(nStrLen - 1); g.pszSubsetTitle = new StringBuilder(nStrLen); g.cchSubsetTitle = (uint)(nStrLen - 1); SendMessageLVGroup(lv.Handle, LVM_GETGROUPINFOBYINDEX, new IntPtr((int)uIndex), ref g); return g; } */ /* internal static uint GetGroupStateByIndex(ListView lv, uint uIndex, uint uStateMask, out int iGroupID) { if(lv == null) throw new ArgumentNullException("lv"); if(uIndex >= (uint)lv.Groups.Count) throw new ArgumentOutOfRangeException("uIndex"); LVGROUP g = new LVGROUP(); g.cbSize = (uint)Marshal.SizeOf(g); g.mask = (LVGF_STATE | LVGF_GROUPID); g.stateMask = uStateMask; SendMessageLVGroup(lv.Handle, LVM_GETGROUPINFOBYINDEX, new IntPtr((int)uIndex), ref g); iGroupID = g.iGroupId; return g.state; } internal static void SetGroupState(ListView lv, int iGroupID, uint uStateMask, uint uState) { if(lv == null) throw new ArgumentNullException("lv"); LVGROUP g = new LVGROUP(); g.cbSize = (uint)Marshal.SizeOf(g); g.mask = LVGF_STATE; g.stateMask = uStateMask; g.state = uState; SendMessageLVGroup(lv.Handle, LVM_SETGROUPINFO, new IntPtr(iGroupID), ref g); } */ /* internal static int GetGroupIDByIndex(ListView lv, uint uIndex) { if(lv == null) { Debug.Assert(false); return 0; } LVGROUP g = new LVGROUP(); g.cbSize = (uint)Marshal.SizeOf(g); g.AssertSize(); g.mask = NativeMethods.LVGF_GROUPID; if(SendMessageLVGroup(lv.Handle, LVM_GETGROUPINFOBYINDEX, new IntPtr((int)uIndex), ref g) == IntPtr.Zero) { Debug.Assert(false); } return g.iGroupId; } internal static void SetGroupTask(ListView lv, int iGroupID, string strTask) { if(lv == null) { Debug.Assert(false); return; } LVGROUP g = new LVGROUP(); g.cbSize = (uint)Marshal.SizeOf(g); g.AssertSize(); g.mask = LVGF_TASK; g.pszTask = strTask; g.cchTask = (uint)((strTask != null) ? strTask.Length : 0); if(SendMessageLVGroup(lv.Handle, LVM_SETGROUPINFO, new IntPtr(iGroupID), ref g) == (new IntPtr(-1))) { Debug.Assert(false); } } */ /* internal static void SetListViewGroupInfo(ListView lv, int iGroupID, string strTask, bool? obCollapsible) { if(lv == null) { Debug.Assert(false); return; } if(!WinUtil.IsAtLeastWindowsVista) return; LVGROUP g = new LVGROUP(); g.cbSize = (uint)Marshal.SizeOf(g); g.AssertSize(); if(strTask != null) { g.mask |= LVGF_TASK; g.pszTask = strTask; g.cchTask = (uint)strTask.Length; } if(obCollapsible.HasValue) { g.mask |= LVGF_STATE; g.stateMask = LVGS_COLLAPSIBLE; g.state = (obCollapsible.Value ? LVGS_COLLAPSIBLE : 0); } if(g.mask == 0) return; if(SendMessageLVGroup(lv.Handle, LVM_SETGROUPINFO, new IntPtr(iGroupID), ref g) == (new IntPtr(-1))) { Debug.Assert(false); } } internal static int GetListViewGroupID(ListViewGroup lvg) { if(lvg == null) { Debug.Assert(false); return -1; } Type t = typeof(ListViewGroup); PropertyInfo pi = t.GetProperty("ID", (BindingFlags.Instance | BindingFlags.NonPublic)); if(pi == null) { Debug.Assert(false); return -1; } if(pi.PropertyType != typeof(int)) { Debug.Assert(false); return -1; } return (int)pi.GetValue(lvg, null); } */ private static bool GetDesktopName(IntPtr hDesk, out string strAnsi, out string strUni) { strAnsi = null; strUni = null; const uint cbZ = 12; // Minimal number of terminating zeros const uint uBufSize = 64 + cbZ; IntPtr pBuf = Marshal.AllocCoTaskMem((int)uBufSize); byte[] pbZero = new byte[uBufSize]; Marshal.Copy(pbZero, 0, pBuf, pbZero.Length); try { uint uReqSize = uBufSize - cbZ; bool bSuccess = GetUserObjectInformation(hDesk, 2, pBuf, uBufSize - cbZ, ref uReqSize); if(uReqSize > (uBufSize - cbZ)) { Marshal.FreeCoTaskMem(pBuf); pBuf = Marshal.AllocCoTaskMem((int)(uReqSize + cbZ)); pbZero = new byte[uReqSize + cbZ]; Marshal.Copy(pbZero, 0, pBuf, pbZero.Length); bSuccess = GetUserObjectInformation(hDesk, 2, pBuf, uReqSize, ref uReqSize); Debug.Assert((uReqSize + cbZ) == (uint)pbZero.Length); } if(bSuccess) { try { strAnsi = Marshal.PtrToStringAnsi(pBuf).Trim(); } catch(Exception) { } try { strUni = Marshal.PtrToStringUni(pBuf).Trim(); } catch(Exception) { } return true; } } finally { Marshal.FreeCoTaskMem(pBuf); } Debug.Assert(false); return false; } // The GetUserObjectInformation function apparently returns the // desktop name using ANSI encoding even on Windows 7 systems. // As the encoding is not documented, we test both ANSI and // Unicode versions of the name. internal static bool? DesktopNameContains(IntPtr hDesk, string strName) { if(string.IsNullOrEmpty(strName)) { Debug.Assert(false); return false; } string strAnsi, strUni; if(!GetDesktopName(hDesk, out strAnsi, out strUni)) return null; if((strAnsi == null) && (strUni == null)) return null; try { if((strAnsi != null) && (strAnsi.IndexOf(strName, StringComparison.OrdinalIgnoreCase) >= 0)) return true; } catch(Exception) { Debug.Assert(false); } try { if((strUni != null) && (strUni.IndexOf(strName, StringComparison.OrdinalIgnoreCase) >= 0)) return true; } catch(Exception) { Debug.Assert(false); } return false; } } } KeePass/Native/NativeMethods.Structs.cs0000664000000000000000000002042112641461342017110 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Text; using System.Security; using System.Runtime.InteropServices; using System.Diagnostics; using System.Windows.Forms; using System.Drawing; namespace KeePass.Native { internal static partial class NativeMethods { [StructLayout(LayoutKind.Sequential, Pack = 1)] internal struct MOUSEINPUT32_WithSkip { public uint __Unused0; // See INPUT32 structure public int X; public int Y; public uint MouseData; public uint Flags; public uint Time; public IntPtr ExtraInfo; } [StructLayout(LayoutKind.Sequential, Pack = 1)] internal struct KEYBDINPUT32_WithSkip { public uint __Unused0; // See INPUT32 structure public ushort VirtualKeyCode; public ushort ScanCode; public uint Flags; public uint Time; public IntPtr ExtraInfo; } [StructLayout(LayoutKind.Explicit)] internal struct INPUT32 { [FieldOffset(0)] public uint Type; [FieldOffset(0)] public MOUSEINPUT32_WithSkip MouseInput; [FieldOffset(0)] public KEYBDINPUT32_WithSkip KeyboardInput; } // INPUT.KI (40). vk: 8, sc: 10, fl: 12, t: 16, ex: 24 [StructLayout(LayoutKind.Explicit, Size = 40)] internal struct SpecializedKeyboardINPUT64 { [FieldOffset(0)] public uint Type; [FieldOffset(8)] public ushort VirtualKeyCode; [FieldOffset(10)] public ushort ScanCode; [FieldOffset(12)] public uint Flags; [FieldOffset(16)] public uint Time; [FieldOffset(24)] public IntPtr ExtraInfo; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] internal struct CHARFORMAT2 { public UInt32 cbSize; public UInt32 dwMask; public UInt32 dwEffects; public Int32 yHeight; public Int32 yOffset; public UInt32 crTextColor; public Byte bCharSet; public Byte bPitchAndFamily; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string szFaceName; public UInt16 wWeight; public UInt16 sSpacing; public Int32 crBackColor; public Int32 lcid; public UInt32 dwReserved; public Int16 sStyle; public Int16 wKerning; public Byte bUnderlineType; public Byte bAnimation; public Byte bRevAuthor; public Byte bReserved1; } [StructLayout(LayoutKind.Sequential)] internal struct RECT { public Int32 Left; public Int32 Top; public Int32 Right; public Int32 Bottom; public RECT(Rectangle rect) { this.Left = rect.Left; this.Top = rect.Top; this.Right = rect.Right; this.Bottom = rect.Bottom; } } [StructLayout(LayoutKind.Sequential)] internal struct COMBOBOXINFO { public Int32 cbSize; public RECT rcItem; public RECT rcButton; [MarshalAs(UnmanagedType.U4)] public ComboBoxButtonState buttonState; public IntPtr hwndCombo; public IntPtr hwndEdit; public IntPtr hwndList; } [StructLayout(LayoutKind.Sequential)] internal struct MARGINS { public Int32 Left; public Int32 Right; public Int32 Top; public Int32 Bottom; } [StructLayout(LayoutKind.Sequential)] internal struct COPYDATASTRUCT { public IntPtr dwData; public Int32 cbData; public IntPtr lpData; } [StructLayout(LayoutKind.Sequential)] private struct SCROLLINFO { public uint cbSize; public uint fMask; public int nMin; public int nMax; public uint nPage; public int nPos; public int nTrackPos; } [StructLayout(LayoutKind.Sequential)] internal struct HDITEM { public UInt32 mask; public Int32 cxy; [MarshalAs(UnmanagedType.LPTStr)] public string pszText; public IntPtr hbm; public Int32 cchTextMax; public Int32 fmt; public IntPtr lParam; public Int32 iImage; public Int32 iOrder; } [StructLayout(LayoutKind.Sequential)] internal struct NMHDR { public IntPtr hwndFrom; public IntPtr idFrom; public uint code; } [StructLayout(LayoutKind.Sequential)] private struct LASTINPUTINFO { public uint cbSize; public uint dwTime; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] private struct SHFILEINFO { public IntPtr hIcon; public int iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = KeePassLib.Native.NativeMethods.MAX_PATH)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; } /* // LVGROUP for Windows Vista and higher [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] private struct LVGROUP { public uint cbSize; public uint mask; // [MarshalAs(UnmanagedType.LPWStr)] // public StringBuilder pszHeader; public IntPtr pszHeader; public int cchHeader; // [MarshalAs(UnmanagedType.LPWStr)] // public StringBuilder pszFooter; public IntPtr pszFooter; public int cchFooter; public int iGroupId; public uint stateMask; public uint state; public uint uAlign; // [MarshalAs(UnmanagedType.LPWStr)] // public StringBuilder pszSubtitle; public IntPtr pszSubtitle; public uint cchSubtitle; [MarshalAs(UnmanagedType.LPWStr)] public string pszTask; // public StringBuilder pszTask; // public IntPtr pszTask; public uint cchTask; // [MarshalAs(UnmanagedType.LPWStr)] // public StringBuilder pszDescriptionTop; public IntPtr pszDescriptionTop; public uint cchDescriptionTop; // [MarshalAs(UnmanagedType.LPWStr)] // public StringBuilder pszDescriptionBottom; public IntPtr pszDescriptionBottom; public uint cchDescriptionBottom; public int iTitleImage; public int iExtendedImage; public int iFirstItem; public uint cItems; // [MarshalAs(UnmanagedType.LPWStr)] // public StringBuilder pszSubsetTitle; public IntPtr pszSubsetTitle; public uint cchSubsetTitle; [Conditional("DEBUG")] internal void AssertSize() { if(IntPtr.Size == 4) { Debug.Assert(Marshal.SizeOf(this) == 96); } else if(IntPtr.Size == 8) { Debug.Assert(Marshal.SizeOf(this) == 152); } else { Debug.Assert(false); } } } */ internal const uint PROCESSENTRY32SizeUni32 = 556; internal const uint PROCESSENTRY32SizeUni64 = 568; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] internal struct PROCESSENTRY32 { public uint dwSize; public uint cntUsage; public uint th32ProcessID; public UIntPtr th32DefaultHeapID; public uint th32ModuleID; public uint cntThreads; public uint th32ParentProcessID; public int pcPriClassBase; public uint dwFlags; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = KeePassLib.Native.NativeMethods.MAX_PATH)] public string szExeFile; } internal const uint ACTCTXSize32 = 32; internal const uint ACTCTXSize64 = 56; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] internal struct ACTCTX { public uint cbSize; public uint dwFlags; [MarshalAs(UnmanagedType.LPTStr)] // Not LPWStr, see source code public string lpSource; public ushort wProcessorArchitecture; public ushort wLangId; [MarshalAs(UnmanagedType.LPTStr)] public string lpAssemblyDirectory; [MarshalAs(UnmanagedType.LPTStr)] public string lpResourceName; [MarshalAs(UnmanagedType.LPTStr)] public string lpApplicationName; public IntPtr hModule; } } } KeePass/Native/NativeMethods.Unix.cs0000664000000000000000000001500412641461342016365 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Diagnostics; using KeePass.Forms; using KeePass.UI; using KeePassLib.Utility; using NativeLib = KeePassLib.Native.NativeLib; namespace KeePass.Native { internal static partial class NativeMethods { /* private const string PathLibDo = "/usr/lib/gnome-do/libdo"; private const UnmanagedType NtvStringType = UnmanagedType.LPStr; [DllImport(PathLibDo)] internal static extern void gnomedo_keybinder_init(); [DllImport(PathLibDo)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool gnomedo_keybinder_bind( [MarshalAs(NtvStringType)] string strKey, BindKeyHandler lpfnHandler); [DllImport(PathLibDo)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool gnomedo_keybinder_unbind( [MarshalAs(NtvStringType)] string strKey, BindKeyHandler lpfnHandler); internal delegate void BindKeyHandler([MarshalAs(NtvStringType)] string strKey, IntPtr lpUserData); */ /* private const string PathLibTomBoy = "/usr/lib/tomboy/libtomboy.so"; [DllImport(PathLibTomBoy)] internal static extern void tomboy_keybinder_init(); [DllImport(PathLibTomBoy)] internal static extern void tomboy_keybinder_bind(string strKey, BindKeyHandler lpHandler); [DllImport(PathLibTomBoy)] internal static extern void tomboy_keybinder_unbind(string strKey, BindKeyHandler lpHandler); internal delegate void BindKeyHandler(string strKey, IntPtr lpUserData); */ private static bool LoseFocusUnix(Form fCurrent) { if(fCurrent == null) { Debug.Assert(false); return true; } try { string strCurrent = RunXDoTool("getwindowfocus -f"); long lCurrent; long.TryParse(strCurrent.Trim(), out lCurrent); MainForm mf = Program.MainForm; Debug.Assert(mf == fCurrent); if(mf != null) mf.UIBlockWindowStateAuto(true); UIUtil.SetWindowState(fCurrent, FormWindowState.Minimized); int nStart = Environment.TickCount; while((Environment.TickCount - nStart) < 1000) { Application.DoEvents(); string strActive = RunXDoTool("getwindowfocus -f"); long lActive; long.TryParse(strActive.Trim(), out lActive); if(lActive != lCurrent) break; } if(mf != null) mf.UIBlockWindowStateAuto(false); return true; } catch(Exception) { Debug.Assert(false); } return false; } internal static bool TryXDoTool() { return !string.IsNullOrEmpty(RunXDoTool("help")); } internal static bool TryXDoTool(bool bRequireWindowNameSupport) { if(!bRequireWindowNameSupport) return TryXDoTool(); string str = RunXDoTool("getactivewindow getwindowname"); if(string.IsNullOrEmpty(str)) return false; return !(str.Trim().Equals("usage: getactivewindow", StrUtil.CaseIgnoreCmp)); } internal static string RunXDoTool(string strParams) { try { Application.DoEvents(); // E.g. for clipboard updates string strOutput = NativeLib.RunConsoleApp("xdotool", strParams); Application.DoEvents(); // E.g. for clipboard updates return (strOutput ?? string.Empty); } catch(Exception) { Debug.Assert(false); } return string.Empty; } /* private static Dictionary m_dAsms = null; internal static Assembly LoadAssembly(string strAsmName, string strFileName) { if(m_dAsms == null) m_dAsms = new Dictionary(); Assembly asm; if(m_dAsms.TryGetValue(strAsmName, out asm)) return asm; try { asm = Assembly.Load(strAsmName); if(asm != null) { m_dAsms[strAsmName] = asm; return asm; } } catch(Exception) { } try { asm = Assembly.LoadFrom(strFileName); if(asm != null) { m_dAsms[strAsmName] = asm; return asm; } } catch(Exception) { } for(int d = 0; d < 4; ++d) { string strDir; switch(d) { case 0: strDir = "/usr/lib/mono/gac"; break; case 1: strDir = "/usr/lib/cli"; break; case 2: strDir = "/usr/lib/mono"; break; case 3: strDir = "/lib/mono"; break; default: strDir = null; break; } if(string.IsNullOrEmpty(strDir)) { Debug.Assert(false); continue; } try { string[] vFiles = Directory.GetFiles(strDir, strFileName, SearchOption.AllDirectories); if(vFiles == null) continue; for(int i = vFiles.Length - 1; i >= 0; --i) { string strFoundName = UrlUtil.GetFileName(vFiles[i]); if(!strFileName.Equals(strFoundName, StrUtil.CaseIgnoreCmp)) continue; try { asm = Assembly.LoadFrom(vFiles[i]); if(asm != null) { m_dAsms[strAsmName] = asm; return asm; } } catch(Exception) { } } } catch(Exception) { } } m_dAsms[strAsmName] = null; return null; } private static bool m_bGtkInitialized = false; internal static bool GtkEnsureInit() { if(m_bGtkInitialized) return true; try { Assembly asm = LoadAssembly("gtk-sharp", "gtk-sharp.dll"); if(asm == null) return false; Type tApp = asm.GetType("Gtk.Application", true); MethodInfo miInitCheck = tApp.GetMethod("InitCheck", BindingFlags.Public | BindingFlags.Static); if(miInitCheck == null) { Debug.Assert(false); return false; } string[] vArgs = new string[0]; bool bResult = (bool)miInitCheck.Invoke(null, new object[] { PwDefs.ShortProductName, vArgs }); if(!bResult) return false; m_bGtkInitialized = true; return true; } catch(Exception) { Debug.Assert(false); } return false; } */ } } KeePass/Native/NativeMethods.cs0000664000000000000000000004312512641461342015450 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Text; using System.Security; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Diagnostics; using KeePass.UI; namespace KeePass.Native { internal static partial class NativeMethods { [DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool SetDllDirectory(string lpPathName); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool IsWindow(IntPtr hWnd); [DllImport("User32.dll")] internal static extern IntPtr SendMessage(IntPtr hWnd, int nMsg, IntPtr wParam, IntPtr lParam); [DllImport("User32.dll", EntryPoint = "SendMessage")] internal static extern IntPtr SendMessageHDItem(IntPtr hWnd, int nMsg, IntPtr wParam, ref HDITEM hdItem); // [DllImport("User32.dll", EntryPoint = "SendMessage")] // private static extern IntPtr SendMessageLVGroup(IntPtr hWnd, int nMsg, // IntPtr wParam, ref LVGROUP lvGroup); [DllImport("User32.dll", SetLastError = true)] internal static extern IntPtr SendMessageTimeout(IntPtr hWnd, int nMsg, IntPtr wParam, IntPtr lParam, uint fuFlags, uint uTimeout, ref IntPtr lpdwResult); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool PostMessage(IntPtr hWnd, int nMsg, IntPtr wParam, IntPtr lParam); // [DllImport("User32.dll")] // internal static extern uint GetMessagePos(); [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Auto)] internal static extern int RegisterWindowMessage(string lpString); // [DllImport("User32.dll")] // internal static extern IntPtr GetDesktopWindow(); [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Auto)] internal static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("User32.dll")] internal static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd); [DllImport("User32.dll")] internal static extern int GetWindowLong(IntPtr hWnd, int nIndex); [DllImport("User32.dll", SetLastError = true)] internal static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); [DllImport("User32.dll", EntryPoint = "GetClassLong")] private static extern IntPtr GetClassLongPtr32(IntPtr hWnd, int nIndex); [DllImport("User32.dll", EntryPoint = "GetClassLongPtr")] private static extern IntPtr GetClassLongPtr64(IntPtr hWnd, int nIndex); // [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Auto)] // private static extern int GetClassName(IntPtr hWnd, // StringBuilder lpClassName, int nMaxCount); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool IsIconic(IntPtr hWnd); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool IsZoomed(IntPtr hWnd); [DllImport("User32.dll", SetLastError = true)] private static extern int GetWindowTextLength(IntPtr hWnd); [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); [DllImport("User32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); // [DllImport("User32.dll")] // internal static extern IntPtr GetActiveWindow(); [DllImport("User32.dll")] private static extern IntPtr GetForegroundWindow(); // Private, is wrapped [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool UnregisterHotKey(IntPtr hWnd, int id); [DllImport("User32.dll", EntryPoint = "SendInput", SetLastError = true)] internal static extern uint SendInput32(uint nInputs, INPUT32[] pInputs, int cbSize); [DllImport("User32.dll", EntryPoint = "SendInput", SetLastError = true)] internal static extern uint SendInput64Special(uint nInputs, SpecializedKeyboardINPUT64[] pInputs, int cbSize); [DllImport("User32.dll")] internal static extern IntPtr GetMessageExtraInfo(); // [DllImport("User32.dll")] // internal static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, // IntPtr dwExtraInfo); [DllImport("User32.dll")] internal static extern uint MapVirtualKey(uint uCode, uint uMapType); [DllImport("User32.dll", CharSet = CharSet.Auto)] internal static extern ushort VkKeyScan(char ch); [DllImport("User32.dll", CharSet = CharSet.Auto)] internal static extern ushort VkKeyScanEx(char ch, IntPtr hKL); [DllImport("User32.dll")] internal static extern ushort GetKeyState(int vKey); [DllImport("User32.dll")] internal static extern ushort GetAsyncKeyState(int vKey); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool BlockInput([MarshalAs(UnmanagedType.Bool)] bool fBlockIt); // [DllImport("User32.dll")] // [return: MarshalAs(UnmanagedType.Bool)] // internal static extern bool AttachThreadInput(uint idAttach, // uint idAttachTo, [MarshalAs(UnmanagedType.Bool)] bool fAttach); [DllImport("User32.dll")] internal static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool OpenClipboard(IntPtr hWndNewOwner); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool EmptyClipboard(); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool CloseClipboard(); [DllImport("User32.dll", SetLastError = true)] internal static extern IntPtr SetClipboardData(uint uFormat, IntPtr hMem); [DllImport("User32.dll", SetLastError = true)] internal static extern IntPtr GetClipboardData(uint uFormat); [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Auto)] internal static extern uint RegisterClipboardFormat(string lpszFormat); [DllImport("User32.dll")] internal static extern uint GetClipboardSequenceNumber(); [DllImport("Kernel32.dll")] internal static extern IntPtr GlobalAlloc(uint uFlags, UIntPtr dwBytes); [DllImport("Kernel32.dll")] internal static extern IntPtr GlobalFree(IntPtr hMem); [DllImport("Kernel32.dll")] internal static extern IntPtr GlobalLock(IntPtr hMem); [DllImport("Kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool GlobalUnlock(IntPtr hMem); [DllImport("Kernel32.dll")] internal static extern UIntPtr GlobalSize(IntPtr hMem); [DllImport("ShlWApi.dll", CharSet = CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool PathCompactPathEx(StringBuilder pszOut, string szPath, uint cchMax, uint dwFlags); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool DrawAnimatedRects(IntPtr hWnd, int idAni, [In] ref RECT lprcFrom, [In] ref RECT lprcTo); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool GetComboBoxInfo(IntPtr hWnd, ref COMBOBOXINFO pcbi); [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Auto)] internal static extern IntPtr CreateDesktop(string lpszDesktop, string lpszDevice, IntPtr pDevMode, UInt32 dwFlags, [MarshalAs(UnmanagedType.U4)] DesktopFlags dwDesiredAccess, IntPtr lpSecurityAttributes); [DllImport("User32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool CloseDesktop(IntPtr hDesktop); // [DllImport("User32.dll", SetLastError = true)] // internal static extern IntPtr OpenDesktop(string lpszDesktop, // UInt32 dwFlags, [MarshalAs(UnmanagedType.Bool)] bool fInherit, // [MarshalAs(UnmanagedType.U4)] DesktopFlags dwDesiredAccess); [DllImport("User32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool SwitchDesktop(IntPtr hDesktop); [DllImport("User32.dll", SetLastError = true)] internal static extern IntPtr OpenInputDesktop(uint dwFlags, [MarshalAs(UnmanagedType.Bool)] bool fInherit, [MarshalAs(UnmanagedType.U4)] DesktopFlags dwDesiredAccess); [DllImport("User32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool GetUserObjectInformation(IntPtr hObj, int nIndex, IntPtr pvInfo, uint nLength, ref uint lpnLengthNeeded); [DllImport("User32.dll", SetLastError = true)] internal static extern IntPtr GetThreadDesktop(uint dwThreadId); [DllImport("User32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool SetThreadDesktop(IntPtr hDesktop); [DllImport("Kernel32.dll")] internal static extern uint GetCurrentThreadId(); // [DllImport("Imm32.dll")] // [return: MarshalAs(UnmanagedType.Bool)] // internal static extern bool ImmDisableIME(uint idThread); // [DllImport("Imm32.dll")] // internal static extern IntPtr ImmAssociateContext(IntPtr hWnd, IntPtr hIMC); [DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] internal static extern IntPtr CreateFile(string lpFileName, [MarshalAs(UnmanagedType.U4)] EFileAccess dwDesiredAccess, [MarshalAs(UnmanagedType.U4)] EFileShare dwShareMode, IntPtr lpSecurityAttributes, [MarshalAs(UnmanagedType.U4)] ECreationDisposition dwCreationDisposition, [MarshalAs(UnmanagedType.U4)] uint dwFlagsAndAttributes, IntPtr hTemplateFile); [DllImport("Kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool CloseHandle(IntPtr hObject); [DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] internal static extern uint GetFileAttributes(string lpFileName); [DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool DeleteFile(string lpFileName); [DllImport("Kernel32.dll", ExactSpelling = true, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode, IntPtr lpInBuffer, uint nInBufferSize, IntPtr lpOutBuffer, uint nOutBufferSize, out uint lpBytesReturned, IntPtr lpOverlapped); [DllImport("ComCtl32.dll", CharSet = CharSet.Auto)] internal static extern Int32 TaskDialogIndirect([In] ref VtdConfig pTaskConfig, [Out] out int pnButton, [Out] out int pnRadioButton, [Out] [MarshalAs(UnmanagedType.Bool)] out bool pfVerificationFlagChecked); [DllImport("UxTheme.dll", ExactSpelling = true, CharSet = CharSet.Unicode)] internal static extern int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList); [DllImport("Shell32.dll")] internal static extern void SHChangeNotify(int wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool GetScrollInfo(IntPtr hwnd, int fnBar, ref SCROLLINFO lpsi); // [DllImport("User32.dll")] // private static extern int SetScrollInfo(IntPtr hwnd, int fnBar, // [In] ref SCROLLINFO lpsi, [MarshalAs(UnmanagedType.Bool)] bool fRedraw); // [DllImport("User32.dll")] // private static extern int ScrollWindowEx(IntPtr hWnd, int dx, int dy, // IntPtr prcScroll, IntPtr prcClip, IntPtr hrgnUpdate, IntPtr prcUpdate, // uint flags); [DllImport("User32.dll")] internal static extern IntPtr GetKeyboardLayout(uint idThread); [DllImport("User32.dll")] internal static extern IntPtr ActivateKeyboardLayout(IntPtr hkl, uint uFlags); [DllImport("User32.dll")] internal static extern uint GetWindowThreadProcessId(IntPtr hWnd, [Out] out uint lpdwProcessId); // [DllImport("UxTheme.dll")] // internal static extern IntPtr OpenThemeData(IntPtr hWnd, // [MarshalAs(UnmanagedType.LPWStr)] string pszClassList); // [DllImport("UxTheme.dll")] // internal static extern uint CloseThemeData(IntPtr hTheme); // [DllImport("UxTheme.dll")] // internal extern static uint DrawThemeBackground(IntPtr hTheme, IntPtr hdc, // int iPartId, int iStateId, ref RECT pRect, ref RECT pClipRect); [DllImport("Gdi32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool DeleteObject(IntPtr hObject); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); [DllImport("Shell32.dll", CharSet = CharSet.Auto)] private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool DestroyIcon(IntPtr hIcon); // [DllImport("User32.dll", SetLastError = true)] // [return: MarshalAs(UnmanagedType.Bool)] // internal static extern bool DrawIconEx(IntPtr hdc, int xLeft, int yTop, // IntPtr hIcon, int cxWidth, int cyWidth, uint istepIfAniCur, // IntPtr hbrFlickerFreeDraw, uint diFlags); [DllImport("User32.dll")] internal static extern IntPtr GetDC(IntPtr hWnd); [DllImport("User32.dll")] internal static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); [DllImport("Gdi32.dll")] internal static extern int GetDeviceCaps(IntPtr hdc, int nIndex); [DllImport("WinMM.dll", CharSet = CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool PlaySound(string pszSound, IntPtr hmod, uint fdwSound); [DllImport("Shell32.dll", CharSet = CharSet.Auto)] internal static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd); [DllImport("User32.dll", CharSet = CharSet.Auto)] internal static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, [MarshalAs(UnmanagedType.U4)] MessageBoxFlags uType); [DllImport("User32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool SetProcessDPIAware(); [DllImport("Kernel32.dll")] internal static extern IntPtr CreateToolhelp32Snapshot( [MarshalAs(UnmanagedType.U4)] ToolHelpFlags dwFlags, uint th32ProcessID); [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool Process32First(IntPtr hSnapshot, ref PROCESSENTRY32 lppe); [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool Process32Next(IntPtr hSnapshot, ref PROCESSENTRY32 lppe); // [DllImport("Kernel32.dll", SetLastError = true)] // internal static extern IntPtr OpenProcess(uint dwDesiredAccess, // [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwProcessId); // [DllImport("User32.dll")] // [return: MarshalAs(UnmanagedType.Bool)] // internal static extern bool IsImmersiveProcess(IntPtr hProcess); [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] internal static extern IntPtr CreateActCtx(ref ACTCTX pActCtx); [DllImport("Kernel32.dll")] internal static extern void ReleaseActCtx(IntPtr hActCtx); [DllImport("Kernel32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool ActivateActCtx(IntPtr hActCtx, ref UIntPtr lpCookie); [DllImport("Kernel32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool DeactivateActCtx(uint dwFlags, UIntPtr ulCookie); [DllImport("User32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool ShutdownBlockReasonCreate(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)] string pwszReason); [DllImport("User32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool ShutdownBlockReasonDestroy(IntPtr hWnd); // [DllImport("User32.dll")] // internal static extern int GetSystemMetrics(int nIndex); } } KeePass/Properties/0000775000000000000000000000000012655117056013255 5ustar rootrootKeePass/Properties/AssemblyInfo.cs0000664000000000000000000000311012670010470016157 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General assembly properties [assembly: AssemblyTitle("KeePass")] [assembly: AssemblyDescription("KeePass Password Safe")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Dominik Reichl")] [assembly: AssemblyProduct("KeePass")] [assembly: AssemblyCopyright("Copyright © 2003-2016 Dominik Reichl")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // COM settings [assembly: ComVisible(false)] // Assembly GUID [assembly: Guid("02020c52-c0da-47c0-9f3f-a6fe76cee400")] // Assembly version information [assembly: AssemblyVersion("2.32.0.*")] [assembly: AssemblyFileVersion("2.32.0.0")] KeePass/Properties/Resources.resx0000664000000000000000000014626612655117056016151 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ..\Resources\Nuvola\B16x16_Reload_Page.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Folder_Home.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Keyboard_Layout.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Browser.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_FileNew.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Cut.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_LockWorkspace.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_FileSave.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KGPG_Sign.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Font.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_KGPG_Sign.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_FilePrint.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_DeleteEntry.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_2DownArrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Folder_Blue_Open.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_History.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Apply.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Configure.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_FileQuickPrint.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_XMag.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Error.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_FTP.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Folder_Yellow_Open.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_2UpArrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_1DownArrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KGPG_Key3.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_FileSaveAs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_XMag.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Exit.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Source_Moc.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Folder_Locked.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Package_Development.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KGPG_Key1.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_KGPG_Key2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_1UpArrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_KCMSystem.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Package_Settings.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_No.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KGPG_Key2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B15x14_FileNew.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KRec_Record.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Ark.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KGPG_Import.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Keyboard_Layout.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Attach.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_EditCopy.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Folder_Txt.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Folder_Download.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_MessageBox_Info.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_FilePrint.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_ASCII.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Binary.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_HTML.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Spreadsheet.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Misc.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_BlockDevice.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_KMag.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Trashcan_Full.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Laptop_Charge.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Folder_Txt.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_EditDelete.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_KeePass.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\KeePass.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_FileSave_Disabled.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_CompFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_KGPG_Gen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_History_Clear.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Binary.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Wizard.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Wizard.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_HwInfo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Identity.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Toggle_Log.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_File_Locked.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_BlockDevice.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_View_Detailed.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B32x32_Trashcan_Full.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_KOrganizer.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Package_Settings.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KGPG_Info.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Personal.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KOrganizer.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Undo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_EditPaste.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Edit.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_EditShred.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KGPG_Gen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_Window_2Horz1Vert.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_Window_3Horz.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Icons\QuadLocked.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Icons\QuadNormal.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_WWW.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_WWW.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Run.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_AmP.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_AnyPw.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_CWallet.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_PINs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_PVault.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_PwAgent.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_PwDepot.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_PwSafe.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_Security.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Folder_Inbox.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_Whisper32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_Steganos.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_File_SaveAll.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_File_SaveAll_Disabled.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_File_Close.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_PwTresor.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_SplashID.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_RoboForm.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Folder_Outbox.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_PwMem2008.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_PassKeeper.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Make_KDevelop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_Make_KDevelop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_OnePwPro.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_FlexWallet.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_FontBold.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_FontItalic.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_FontUnderline.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_FontStrikeout.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Colorize.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Color_Fill.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_Redo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_KeePassX.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_HandySafe.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_ZdnPwPro.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_HandySafePro.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B48x48_View_Detailed.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KNotes.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_WinFavs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Icons\LockOverlay.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_PwPrompter.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_Revelation.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_DataVault.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_MenuRadio.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KaboodleLoop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_PwsPlus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_StickyPw.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_KasperskyPwMgr.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_EditCopyLink.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_Key_New.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_DesktopKnox.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_LastPass.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_SafeWallet.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_TurboPws.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_NetworkPwMgr.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_Folder_2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_KTouch.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_EditCopyUrl.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Data\MostPopularPasswords.txt.gz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ..\Resources\Images\B16x16_Imp_NortonIdSafe.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_Dashlane.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_VisKeeper.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_MenuCheck.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B19x07_3BlackDots.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Transparent.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_MessageBox_Critical.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_MessageBox_Info.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola\B16x16_MessageBox_Warning.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Data\Images_App_HighRes.bin;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ..\Resources\Data\Images_Client_16.bin;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ..\Resources\Data\Images_Client_HighRes.bin;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ..\Resources\Nuvola_Derived\B16x16_TextAlignCenter.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_TextAlignLeft.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_TextAlignRight.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Nuvola_Derived\B16x16_Folder_New_Ex.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\B16x16_Imp_NPassword.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a KeePass/Properties/Resources.Designer.cs0000664000000000000000000014044012655117060017313 0ustar rootroot//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:2.0.50727.8670 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace KeePass.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KeePass.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal static System.Drawing.Bitmap B15x14_FileNew { get { object obj = ResourceManager.GetObject("B15x14_FileNew", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_1DownArrow { get { object obj = ResourceManager.GetObject("B16x16_1DownArrow", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_1UpArrow { get { object obj = ResourceManager.GetObject("B16x16_1UpArrow", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_2DownArrow { get { object obj = ResourceManager.GetObject("B16x16_2DownArrow", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_2UpArrow { get { object obj = ResourceManager.GetObject("B16x16_2UpArrow", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Apply { get { object obj = ResourceManager.GetObject("B16x16_Apply", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_ASCII { get { object obj = ResourceManager.GetObject("B16x16_ASCII", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Attach { get { object obj = ResourceManager.GetObject("B16x16_Attach", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Binary { get { object obj = ResourceManager.GetObject("B16x16_Binary", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_BlockDevice { get { object obj = ResourceManager.GetObject("B16x16_BlockDevice", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Browser { get { object obj = ResourceManager.GetObject("B16x16_Browser", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Color_Fill { get { object obj = ResourceManager.GetObject("B16x16_Color_Fill", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Colorize { get { object obj = ResourceManager.GetObject("B16x16_Colorize", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_CompFile { get { object obj = ResourceManager.GetObject("B16x16_CompFile", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Configure { get { object obj = ResourceManager.GetObject("B16x16_Configure", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Cut { get { object obj = ResourceManager.GetObject("B16x16_Cut", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_DeleteEntry { get { object obj = ResourceManager.GetObject("B16x16_DeleteEntry", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Edit { get { object obj = ResourceManager.GetObject("B16x16_Edit", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_EditCopy { get { object obj = ResourceManager.GetObject("B16x16_EditCopy", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_EditCopyLink { get { object obj = ResourceManager.GetObject("B16x16_EditCopyLink", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_EditCopyUrl { get { object obj = ResourceManager.GetObject("B16x16_EditCopyUrl", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_EditDelete { get { object obj = ResourceManager.GetObject("B16x16_EditDelete", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_EditPaste { get { object obj = ResourceManager.GetObject("B16x16_EditPaste", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_EditShred { get { object obj = ResourceManager.GetObject("B16x16_EditShred", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Error { get { object obj = ResourceManager.GetObject("B16x16_Error", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Exit { get { object obj = ResourceManager.GetObject("B16x16_Exit", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_File_Close { get { object obj = ResourceManager.GetObject("B16x16_File_Close", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_File_Locked { get { object obj = ResourceManager.GetObject("B16x16_File_Locked", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_File_SaveAll { get { object obj = ResourceManager.GetObject("B16x16_File_SaveAll", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_File_SaveAll_Disabled { get { object obj = ResourceManager.GetObject("B16x16_File_SaveAll_Disabled", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FileNew { get { object obj = ResourceManager.GetObject("B16x16_FileNew", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FilePrint { get { object obj = ResourceManager.GetObject("B16x16_FilePrint", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FileQuickPrint { get { object obj = ResourceManager.GetObject("B16x16_FileQuickPrint", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FileSave { get { object obj = ResourceManager.GetObject("B16x16_FileSave", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FileSave_Disabled { get { object obj = ResourceManager.GetObject("B16x16_FileSave_Disabled", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FileSaveAs { get { object obj = ResourceManager.GetObject("B16x16_FileSaveAs", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Folder_2 { get { object obj = ResourceManager.GetObject("B16x16_Folder_2", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Folder_Blue_Open { get { object obj = ResourceManager.GetObject("B16x16_Folder_Blue_Open", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Folder_Home { get { object obj = ResourceManager.GetObject("B16x16_Folder_Home", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Folder_Inbox { get { object obj = ResourceManager.GetObject("B16x16_Folder_Inbox", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Folder_Locked { get { object obj = ResourceManager.GetObject("B16x16_Folder_Locked", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Folder_New_Ex { get { object obj = ResourceManager.GetObject("B16x16_Folder_New_Ex", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Folder_Outbox { get { object obj = ResourceManager.GetObject("B16x16_Folder_Outbox", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Folder_Txt { get { object obj = ResourceManager.GetObject("B16x16_Folder_Txt", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Folder_Yellow_Open { get { object obj = ResourceManager.GetObject("B16x16_Folder_Yellow_Open", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FontBold { get { object obj = ResourceManager.GetObject("B16x16_FontBold", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FontItalic { get { object obj = ResourceManager.GetObject("B16x16_FontItalic", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FontStrikeout { get { object obj = ResourceManager.GetObject("B16x16_FontStrikeout", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FontUnderline { get { object obj = ResourceManager.GetObject("B16x16_FontUnderline", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_FTP { get { object obj = ResourceManager.GetObject("B16x16_FTP", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Help { get { object obj = ResourceManager.GetObject("B16x16_Help", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_History { get { object obj = ResourceManager.GetObject("B16x16_History", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_History_Clear { get { object obj = ResourceManager.GetObject("B16x16_History_Clear", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_HTML { get { object obj = ResourceManager.GetObject("B16x16_HTML", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_HwInfo { get { object obj = ResourceManager.GetObject("B16x16_HwInfo", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Identity { get { object obj = ResourceManager.GetObject("B16x16_Identity", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_AmP { get { object obj = ResourceManager.GetObject("B16x16_Imp_AmP", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_AnyPw { get { object obj = ResourceManager.GetObject("B16x16_Imp_AnyPw", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_CWallet { get { object obj = ResourceManager.GetObject("B16x16_Imp_CWallet", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_Dashlane { get { object obj = ResourceManager.GetObject("B16x16_Imp_Dashlane", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_DataVault { get { object obj = ResourceManager.GetObject("B16x16_Imp_DataVault", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_DesktopKnox { get { object obj = ResourceManager.GetObject("B16x16_Imp_DesktopKnox", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_FlexWallet { get { object obj = ResourceManager.GetObject("B16x16_Imp_FlexWallet", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_HandySafe { get { object obj = ResourceManager.GetObject("B16x16_Imp_HandySafe", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_HandySafePro { get { object obj = ResourceManager.GetObject("B16x16_Imp_HandySafePro", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_KasperskyPwMgr { get { object obj = ResourceManager.GetObject("B16x16_Imp_KasperskyPwMgr", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_KeePassX { get { object obj = ResourceManager.GetObject("B16x16_Imp_KeePassX", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_LastPass { get { object obj = ResourceManager.GetObject("B16x16_Imp_LastPass", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_NetworkPwMgr { get { object obj = ResourceManager.GetObject("B16x16_Imp_NetworkPwMgr", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_NortonIdSafe { get { object obj = ResourceManager.GetObject("B16x16_Imp_NortonIdSafe", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_NPassword { get { object obj = ResourceManager.GetObject("B16x16_Imp_NPassword", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_OnePwPro { get { object obj = ResourceManager.GetObject("B16x16_Imp_OnePwPro", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_PassKeeper { get { object obj = ResourceManager.GetObject("B16x16_Imp_PassKeeper", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_PINs { get { object obj = ResourceManager.GetObject("B16x16_Imp_PINs", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_PVault { get { object obj = ResourceManager.GetObject("B16x16_Imp_PVault", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_PwAgent { get { object obj = ResourceManager.GetObject("B16x16_Imp_PwAgent", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_PwDepot { get { object obj = ResourceManager.GetObject("B16x16_Imp_PwDepot", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_PwMem2008 { get { object obj = ResourceManager.GetObject("B16x16_Imp_PwMem2008", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_PwPrompter { get { object obj = ResourceManager.GetObject("B16x16_Imp_PwPrompter", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_PwSafe { get { object obj = ResourceManager.GetObject("B16x16_Imp_PwSafe", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_PwsPlus { get { object obj = ResourceManager.GetObject("B16x16_Imp_PwsPlus", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_PwTresor { get { object obj = ResourceManager.GetObject("B16x16_Imp_PwTresor", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_Revelation { get { object obj = ResourceManager.GetObject("B16x16_Imp_Revelation", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_RoboForm { get { object obj = ResourceManager.GetObject("B16x16_Imp_RoboForm", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_SafeWallet { get { object obj = ResourceManager.GetObject("B16x16_Imp_SafeWallet", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_Security { get { object obj = ResourceManager.GetObject("B16x16_Imp_Security", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_SplashID { get { object obj = ResourceManager.GetObject("B16x16_Imp_SplashID", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_Steganos { get { object obj = ResourceManager.GetObject("B16x16_Imp_Steganos", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_StickyPw { get { object obj = ResourceManager.GetObject("B16x16_Imp_StickyPw", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_TurboPws { get { object obj = ResourceManager.GetObject("B16x16_Imp_TurboPws", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_VisKeeper { get { object obj = ResourceManager.GetObject("B16x16_Imp_VisKeeper", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_Whisper32 { get { object obj = ResourceManager.GetObject("B16x16_Imp_Whisper32", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Imp_ZdnPwPro { get { object obj = ResourceManager.GetObject("B16x16_Imp_ZdnPwPro", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KaboodleLoop { get { object obj = ResourceManager.GetObject("B16x16_KaboodleLoop", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KeePass { get { object obj = ResourceManager.GetObject("B16x16_KeePass", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Key_New { get { object obj = ResourceManager.GetObject("B16x16_Key_New", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Keyboard_Layout { get { object obj = ResourceManager.GetObject("B16x16_Keyboard_Layout", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KGPG_Gen { get { object obj = ResourceManager.GetObject("B16x16_KGPG_Gen", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KGPG_Import { get { object obj = ResourceManager.GetObject("B16x16_KGPG_Import", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KGPG_Info { get { object obj = ResourceManager.GetObject("B16x16_KGPG_Info", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KGPG_Key1 { get { object obj = ResourceManager.GetObject("B16x16_KGPG_Key1", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KGPG_Key2 { get { object obj = ResourceManager.GetObject("B16x16_KGPG_Key2", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KGPG_Key3 { get { object obj = ResourceManager.GetObject("B16x16_KGPG_Key3", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KGPG_Sign { get { object obj = ResourceManager.GetObject("B16x16_KGPG_Sign", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KNotes { get { object obj = ResourceManager.GetObject("B16x16_KNotes", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KOrganizer { get { object obj = ResourceManager.GetObject("B16x16_KOrganizer", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KRec_Record { get { object obj = ResourceManager.GetObject("B16x16_KRec_Record", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_KTouch { get { object obj = ResourceManager.GetObject("B16x16_KTouch", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Laptop_Charge { get { object obj = ResourceManager.GetObject("B16x16_Laptop_Charge", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_LockWorkspace { get { object obj = ResourceManager.GetObject("B16x16_LockWorkspace", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Make_KDevelop { get { object obj = ResourceManager.GetObject("B16x16_Make_KDevelop", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_MenuCheck { get { object obj = ResourceManager.GetObject("B16x16_MenuCheck", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_MenuRadio { get { object obj = ResourceManager.GetObject("B16x16_MenuRadio", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_MessageBox_Critical { get { object obj = ResourceManager.GetObject("B16x16_MessageBox_Critical", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_MessageBox_Info { get { object obj = ResourceManager.GetObject("B16x16_MessageBox_Info", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_MessageBox_Warning { get { object obj = ResourceManager.GetObject("B16x16_MessageBox_Warning", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Misc { get { object obj = ResourceManager.GetObject("B16x16_Misc", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_No { get { object obj = ResourceManager.GetObject("B16x16_No", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Package_Development { get { object obj = ResourceManager.GetObject("B16x16_Package_Development", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Package_Settings { get { object obj = ResourceManager.GetObject("B16x16_Package_Settings", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Personal { get { object obj = ResourceManager.GetObject("B16x16_Personal", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Redo { get { object obj = ResourceManager.GetObject("B16x16_Redo", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Reload_Page { get { object obj = ResourceManager.GetObject("B16x16_Reload_Page", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Spreadsheet { get { object obj = ResourceManager.GetObject("B16x16_Spreadsheet", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_TextAlignCenter { get { object obj = ResourceManager.GetObject("B16x16_TextAlignCenter", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_TextAlignLeft { get { object obj = ResourceManager.GetObject("B16x16_TextAlignLeft", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_TextAlignRight { get { object obj = ResourceManager.GetObject("B16x16_TextAlignRight", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Toggle_Log { get { object obj = ResourceManager.GetObject("B16x16_Toggle_Log", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Transparent { get { object obj = ResourceManager.GetObject("B16x16_Transparent", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Trashcan_Full { get { object obj = ResourceManager.GetObject("B16x16_Trashcan_Full", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Undo { get { object obj = ResourceManager.GetObject("B16x16_Undo", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_View_Detailed { get { object obj = ResourceManager.GetObject("B16x16_View_Detailed", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Window_2Horz1Vert { get { object obj = ResourceManager.GetObject("B16x16_Window_2Horz1Vert", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Window_3Horz { get { object obj = ResourceManager.GetObject("B16x16_Window_3Horz", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_WinFavs { get { object obj = ResourceManager.GetObject("B16x16_WinFavs", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_Wizard { get { object obj = ResourceManager.GetObject("B16x16_Wizard", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_WWW { get { object obj = ResourceManager.GetObject("B16x16_WWW", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B16x16_XMag { get { object obj = ResourceManager.GetObject("B16x16_XMag", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B19x07_3BlackDots { get { object obj = ResourceManager.GetObject("B19x07_3BlackDots", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B32x32_Trashcan_Full { get { object obj = ResourceManager.GetObject("B32x32_Trashcan_Full", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Ark { get { object obj = ResourceManager.GetObject("B48x48_Ark", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Binary { get { object obj = ResourceManager.GetObject("B48x48_Binary", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_BlockDevice { get { object obj = ResourceManager.GetObject("B48x48_BlockDevice", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_FilePrint { get { object obj = ResourceManager.GetObject("B48x48_FilePrint", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Folder_Download { get { object obj = ResourceManager.GetObject("B48x48_Folder_Download", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Folder_Txt { get { object obj = ResourceManager.GetObject("B48x48_Folder_Txt", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Font { get { object obj = ResourceManager.GetObject("B48x48_Font", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_KCMSystem { get { object obj = ResourceManager.GetObject("B48x48_KCMSystem", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Keyboard_Layout { get { object obj = ResourceManager.GetObject("B48x48_Keyboard_Layout", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_KGPG_Gen { get { object obj = ResourceManager.GetObject("B48x48_KGPG_Gen", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_KGPG_Key2 { get { object obj = ResourceManager.GetObject("B48x48_KGPG_Key2", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_KGPG_Sign { get { object obj = ResourceManager.GetObject("B48x48_KGPG_Sign", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_KMag { get { object obj = ResourceManager.GetObject("B48x48_KMag", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_KOrganizer { get { object obj = ResourceManager.GetObject("B48x48_KOrganizer", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Make_KDevelop { get { object obj = ResourceManager.GetObject("B48x48_Make_KDevelop", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_MessageBox_Info { get { object obj = ResourceManager.GetObject("B48x48_MessageBox_Info", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Package_Settings { get { object obj = ResourceManager.GetObject("B48x48_Package_Settings", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Run { get { object obj = ResourceManager.GetObject("B48x48_Run", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Source_Moc { get { object obj = ResourceManager.GetObject("B48x48_Source_Moc", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_View_Detailed { get { object obj = ResourceManager.GetObject("B48x48_View_Detailed", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_Wizard { get { object obj = ResourceManager.GetObject("B48x48_Wizard", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_WWW { get { object obj = ResourceManager.GetObject("B48x48_WWW", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static System.Drawing.Bitmap B48x48_XMag { get { object obj = ResourceManager.GetObject("B48x48_XMag", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } internal static byte[] Images_App_HighRes { get { object obj = ResourceManager.GetObject("Images_App_HighRes", resourceCulture); return ((byte[])(obj)); } } internal static byte[] Images_Client_16 { get { object obj = ResourceManager.GetObject("Images_Client_16", resourceCulture); return ((byte[])(obj)); } } internal static byte[] Images_Client_HighRes { get { object obj = ResourceManager.GetObject("Images_Client_HighRes", resourceCulture); return ((byte[])(obj)); } } internal static System.Drawing.Icon KeePass { get { object obj = ResourceManager.GetObject("KeePass", resourceCulture); return ((System.Drawing.Icon)(obj)); } } internal static System.Drawing.Icon LockOverlay { get { object obj = ResourceManager.GetObject("LockOverlay", resourceCulture); return ((System.Drawing.Icon)(obj)); } } internal static byte[] MostPopularPasswords { get { object obj = ResourceManager.GetObject("MostPopularPasswords", resourceCulture); return ((byte[])(obj)); } } internal static System.Drawing.Icon QuadLocked { get { object obj = ResourceManager.GetObject("QuadLocked", resourceCulture); return ((System.Drawing.Icon)(obj)); } } internal static System.Drawing.Icon QuadNormal { get { object obj = ResourceManager.GetObject("QuadNormal", resourceCulture); return ((System.Drawing.Icon)(obj)); } } } } KeePass/KeePass.pfx0000664000000000000000000000333410576764760013210 0ustar rootroot00 *H 0}0 *H 00 *H  00 *H  05D?*dI& |i&fKG;#!΀%R[m)ZwQoT>ybv[O$Rd3OWo7c4;תBvft87 5SG LLP4AiF2L[+ )$as(Q+Oݷ+hț[#~)[jgriL8V(C3=JpzĺV 3:|<`N8+؃8, tjؚyD5֙,X2ut_."h/^+ɳ)oAL̒*Yv3V윎,J3kgLp/s(AqPԼH^˪Ͳ;6L$ 8̒/Ya\J7zl0+/eϬ!!v,(7w&ٝ|mQZmI];8FVW.";> r'E gӟ.4{j<(C ҉v9&g>+9= 9}z7Dݗ]2>y%o,^9߸E69Rd_yYaļI6h>'3s=7haT<$t\1BOJuHsw3dMBjW"F~aؒz>um+yj8S!X*ZР#D!;*q^1-28=p'>[ɠ> !\8CY5qM~}dWBx~I`߃m@%wz'mBqlCd |~E~Q4nvwm0d΢pJ4\Z46`W|Uc Ut10;00+&cr{ 5FL~!4Sqn.CKeePass/UI/0000775000000000000000000000000012666331234011434 5ustar rootrootKeePass/UI/ListViewSortMenu.cs0000664000000000000000000001454312641461344015234 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.Resources; using KeePassLib.Utility; namespace KeePass.UI { public delegate void SortCommandHandler(bool bEnableSorting, int nColumn, SortOrder? soForce, bool bUpdateEntryList); public sealed class ListViewSortMenu { private ToolStripMenuItem m_tsmiMenu; private ListView m_lv; private SortCommandHandler m_h; private int m_iCurSortColumn = -1; private bool m_bCurSortAsc = true; private ToolStripMenuItem m_tsmiInitDummy = null; private ToolStripMenuItem m_tsmiNoSort = null; private ToolStripSeparator m_tssSep0 = null; private List m_vColumns = null; private ToolStripSeparator m_tssSep1 = null; private ToolStripMenuItem m_tsmiAsc = null; private ToolStripMenuItem m_tsmiDesc = null; public ListViewSortMenu(ToolStripMenuItem tsmiContainer, ListView lvTarget, SortCommandHandler h) { if(tsmiContainer == null) throw new ArgumentNullException("tsmiContainer"); if(lvTarget == null) throw new ArgumentNullException("lvTarget"); if(h == null) throw new ArgumentNullException("h"); m_tsmiMenu = tsmiContainer; m_lv = lvTarget; m_h = h; m_tsmiInitDummy = new ToolStripMenuItem(KPRes.NoSort); m_tsmiMenu.DropDownItems.Add(m_tsmiInitDummy); m_tsmiMenu.DropDownOpening += this.UpdateMenu; } #if DEBUG ~ListViewSortMenu() { Debug.Assert(m_tsmiMenu == null); // Release should have been called } #endif public void Release() { if(m_tsmiMenu != null) { DeleteMenuItems(); m_tsmiMenu.DropDownOpening -= this.UpdateMenu; m_tsmiMenu = null; m_lv = null; m_h = null; } } private void DeleteMenuItems() { if(m_tsmiInitDummy != null) { m_tsmiMenu.DropDownItems.Remove(m_tsmiInitDummy); m_tsmiInitDummy = null; } if(m_tsmiNoSort == null) return; m_tsmiNoSort.Click -= this.OnNoSort; foreach(ToolStripMenuItem tsmiCol in m_vColumns) tsmiCol.Click -= this.OnSortColumn; m_tsmiAsc.Click -= this.OnSortAscDesc; m_tsmiDesc.Click -= this.OnSortAscDesc; m_tsmiMenu.DropDownItems.Clear(); m_tsmiNoSort = null; m_tssSep0 = null; m_vColumns = null; m_tssSep1 = null; m_tsmiAsc = null; m_tsmiDesc = null; } private void UpdateMenu(object sender, EventArgs e) { if(m_lv == null) { Debug.Assert(false); return; } DeleteMenuItems(); IComparer icSorter = m_lv.ListViewItemSorter; ListSorter ls = ((icSorter != null) ? (icSorter as ListSorter) : null); if(ls != null) { m_iCurSortColumn = ls.Column; m_bCurSortAsc = (ls.Order != SortOrder.Descending); if((ls.Order == SortOrder.None) || (m_iCurSortColumn >= m_lv.Columns.Count)) m_iCurSortColumn = -1; } else m_iCurSortColumn = -1; m_tsmiNoSort = new ToolStripMenuItem(KPRes.NoSort); if(m_iCurSortColumn < 0) UIUtil.SetRadioChecked(m_tsmiNoSort, true); m_tsmiNoSort.Click += this.OnNoSort; m_tsmiMenu.DropDownItems.Add(m_tsmiNoSort); m_tssSep0 = new ToolStripSeparator(); m_tsmiMenu.DropDownItems.Add(m_tssSep0); m_vColumns = new List(); foreach(ColumnHeader ch in m_lv.Columns) { string strText = (ch.Text ?? string.Empty); strText = StrUtil.EncodeMenuText(strText); ToolStripMenuItem tsmi = new ToolStripMenuItem(strText); if(ch.Index == m_iCurSortColumn) UIUtil.SetRadioChecked(tsmi, true); tsmi.Click += this.OnSortColumn; m_vColumns.Add(tsmi); m_tsmiMenu.DropDownItems.Add(tsmi); } m_tssSep1 = new ToolStripSeparator(); m_tsmiMenu.DropDownItems.Add(m_tssSep1); m_tsmiAsc = new ToolStripMenuItem(KPRes.Ascending); if((m_iCurSortColumn >= 0) && m_bCurSortAsc) UIUtil.SetRadioChecked(m_tsmiAsc, true); m_tsmiAsc.Click += this.OnSortAscDesc; if(m_iCurSortColumn < 0) m_tsmiAsc.Enabled = false; m_tsmiMenu.DropDownItems.Add(m_tsmiAsc); m_tsmiDesc = new ToolStripMenuItem(KPRes.Descending); if((m_iCurSortColumn >= 0) && !m_bCurSortAsc) UIUtil.SetRadioChecked(m_tsmiDesc, true); m_tsmiDesc.Click += this.OnSortAscDesc; if(m_iCurSortColumn < 0) m_tsmiDesc.Enabled = false; m_tsmiMenu.DropDownItems.Add(m_tsmiDesc); } private void OnNoSort(object sender, EventArgs e) { if(m_h == null) { Debug.Assert(false); return; } m_h(false, 0, null, true); } private void OnSortColumn(object sender, EventArgs e) { if(m_h == null) { Debug.Assert(false); return; } ToolStripMenuItem tsmi = (sender as ToolStripMenuItem); if(tsmi == null) { Debug.Assert(false); return; } for(int i = 0; i < m_vColumns.Count; ++i) { if(m_vColumns[i] == tsmi) { bool bAsc = m_bCurSortAsc; if(i == m_iCurSortColumn) bAsc = !bAsc; // Toggle m_h(true, i, bAsc ? SortOrder.Ascending : SortOrder.Descending, true); break; } } } private void OnSortAscDesc(object sender, EventArgs e) { if(m_h == null) { Debug.Assert(false); return; } if(m_iCurSortColumn < 0) { Debug.Assert(false); return; } ToolStripMenuItem tsmi = (sender as ToolStripMenuItem); if(tsmi == null) { Debug.Assert(false); return; } if((tsmi == m_tsmiAsc) && !m_bCurSortAsc) m_h(true, m_iCurSortColumn, SortOrder.Ascending, true); else if((tsmi == m_tsmiDesc) && m_bCurSortAsc) m_h(true, m_iCurSortColumn, SortOrder.Descending, true); } } } KeePass/UI/DwmUtil.cs0000664000000000000000000001612112641461342013346 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Windows.Forms; using System.Diagnostics; using KeePass.App; using KeePass.Forms; using KeePass.Native; using KeePass.Util; using KeePassLib.Utility; namespace KeePass.UI { public static class DwmUtil { private const uint DWMWA_FORCE_ICONIC_REPRESENTATION = 7; // private const uint DWMWA_FLIP3D_POLICY = 8; private const uint DWMWA_HAS_ICONIC_BITMAP = 10; // private const uint DWMWA_DISALLOW_PEEK = 11; private const uint DWM_SIT_DISPLAYFRAME = 1; public const int WM_DWMSENDICONICTHUMBNAIL = 0x0323; public const int WM_DWMSENDICONICLIVEPREVIEWBITMAP = 0x0326; // private const int DWMFLIP3D_DEFAULT = 0; // private const int DWMFLIP3D_EXCLUDEBELOW = 1; // [DllImport("DwmApi.dll")] // private static extern Int32 DwmExtendFrameIntoClientArea(IntPtr hWnd, // ref MARGINS pMarInset); // [DllImport("DwmApi.dll")] // private static extern Int32 DwmIsCompositionEnabled(ref Int32 pfEnabled); [DllImport("DwmApi.dll")] private static extern int DwmInvalidateIconicBitmaps(IntPtr hWnd); [DllImport("DwmApi.dll", EntryPoint = "DwmSetWindowAttribute")] private static extern int DwmSetWindowAttributeInt(IntPtr hWnd, uint dwAttribute, [In] ref int pvAttribute, uint cbAttribute); [DllImport("DwmApi.dll")] private static extern int DwmSetIconicThumbnail(IntPtr hWnd, IntPtr hBmp, uint dwSITFlags); [DllImport("DwmApi.dll")] private static extern int DwmSetIconicLivePreviewBitmap(IntPtr hWnd, IntPtr hBmp, IntPtr pptClient, uint dwSITFlags); internal static void EnableWindowPeekPreview(MainForm mf) { if(mf == null) { Debug.Assert(false); return; } FormWindowState ws = mf.WindowState; bool bPeek = ((ws == FormWindowState.Normal) || (ws == FormWindowState.Maximized) || !mf.IsFileLocked(null)); EnableWindowPeekPreview(mf, bPeek); } public static void EnableWindowPeekPreview(Form f, bool bEnable) { try { // Static iconic bitmaps only supported by Windows >= 7 if(!WinUtil.IsAtLeastWindows7) return; IntPtr h = f.Handle; if(h == IntPtr.Zero) { Debug.Assert(false); return; } int s = (bEnable ? 0 : 1); // DwmSetWindowAttributeInt(h, DWMWA_DISALLOW_PEEK, ref iNoPeek, 4); // int iFlip3D = (bEnable ? DWMFLIP3D_DEFAULT : // DWMFLIP3D_EXCLUDEBELOW); // DwmSetWindowAttributeInt(h, DWMWA_FLIP3D_POLICY, ref iFlip3D, 4); DwmSetWindowAttributeInt(h, DWMWA_HAS_ICONIC_BITMAP, ref s, 4); DwmSetWindowAttributeInt(h, DWMWA_FORCE_ICONIC_REPRESENTATION, ref s, 4); DwmInvalidateIconicBitmaps(h); } catch(Exception) { Debug.Assert(false); } } public static void SetIconicThumbnail(Form f, Icon ico, ref Message m) { int iInfo = (int)m.LParam.ToInt64(); Size sz = new Size((iInfo >> 16) & 0xFFFF, iInfo & 0xFFFF); SetIconicBitmap(f, ico, sz, true); m.Result = IntPtr.Zero; } public static void SetIconicPreview(Form f, Icon ico, ref Message m) { if(f == null) { Debug.Assert(false); return; } Size sz = new Size(0, 0); MainForm mf = (f as MainForm); if(mf != null) sz = mf.LastClientSize; if((sz.Width <= 0) || (sz.Height <= 0)) sz = f.ClientSize; SetIconicBitmap(f, ico, sz, false); m.Result = IntPtr.Zero; } private static void SetIconicBitmap(Form f, Icon ico, Size sz, bool bThumbnail) { Image img = null; Bitmap bmp = null; IntPtr hBmp = IntPtr.Zero; try { IntPtr hWnd = f.Handle; if(hWnd == IntPtr.Zero) { Debug.Assert(false); return; } img = UIUtil.ExtractVistaIcon(ico); if(img == null) img = ico.ToBitmap(); if(img == null) { Debug.Assert(false); return; } int sw = sz.Width, sh = sz.Height; if(sw <= 0) { Debug.Assert(false); sw = 200; } // Default Windows 7 if(sh <= 0) { Debug.Assert(false); sh = 109; } // Default Windows 7 int iImgW = Math.Min(img.Width, 128); int iImgH = Math.Min(img.Height, 128); int iImgWMax = (sw * 4) / 6; int iImgHMax = (sh * 4) / 6; if(iImgW > iImgWMax) { float fRatio = (float)iImgWMax / (float)iImgW; iImgW = iImgWMax; iImgH = (int)((float)iImgH * fRatio); } if(iImgH > iImgHMax) { float fRatio = (float)iImgHMax / (float)iImgH; iImgW = (int)((float)iImgW * fRatio); iImgH = iImgHMax; } if((iImgW <= 0) || (iImgH <= 0)) { Debug.Assert(false); return; } if(iImgW > sw) { Debug.Assert(false); iImgW = sw; } if(iImgH > sh) { Debug.Assert(false); iImgH = sh; } int iImgX = (sw - iImgW) / 2; int iImgY = (sh - iImgH) / 2; // 32-bit color depth required by API bmp = new Bitmap(sw, sh, PixelFormat.Format32bppArgb); using(Graphics g = Graphics.FromImage(bmp)) { Color clr = AppDefs.ColorControlDisabled; g.Clear(clr); using(LinearGradientBrush br = new LinearGradientBrush( new Point(0, 0), new Point(sw, sh), UIUtil.LightenColor( clr, 0.25), UIUtil.DarkenColor(clr, 0.25))) { g.FillRectangle(br, 0, 0, sw, sh); } // *After* drawing the gradient (otherwise border bug) g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.SmoothingMode = SmoothingMode.HighQuality; RectangleF rSource = new RectangleF(0.0f, 0.0f, img.Width, img.Height); RectangleF rDest = new RectangleF(iImgX, iImgY, iImgW, iImgH); GfxUtil.AdjustScaleRects(ref rSource, ref rDest); // g.DrawImage(img, iImgX, iImgY, iImgW, iImgH); g.DrawImage(img, rDest, rSource, GraphicsUnit.Pixel); } hBmp = bmp.GetHbitmap(); if(bThumbnail) DwmSetIconicThumbnail(hWnd, hBmp, DWM_SIT_DISPLAYFRAME); else DwmSetIconicLivePreviewBitmap(hWnd, hBmp, IntPtr.Zero, DWM_SIT_DISPLAYFRAME); } catch(Exception) { Debug.Assert(!WinUtil.IsAtLeastWindows7); } finally { if(hBmp != IntPtr.Zero) { try { NativeMethods.DeleteObject(hBmp); } catch(Exception) { Debug.Assert(false); } } if(bmp != null) bmp.Dispose(); if(img != null) img.Dispose(); } } } } KeePass/UI/BackgroundForm.cs0000664000000000000000000000304212641461342014662 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Diagnostics; namespace KeePass.UI { public sealed class BackgroundForm : Form { public BackgroundForm(Bitmap bmpBackground, Screen sc) { Screen s = (sc ?? Screen.PrimaryScreen); this.ShowIcon = false; this.ShowInTaskbar = false; this.FormBorderStyle = FormBorderStyle.None; this.StartPosition = FormStartPosition.Manual; this.Location = s.Bounds.Location; this.Size = s.Bounds.Size; this.DoubleBuffered = true; this.BackColor = Color.Black; if(bmpBackground != null) this.BackgroundImage = bmpBackground; } } } KeePass/UI/MruList.cs0000664000000000000000000002362412641461344013370 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Globalization; using System.Diagnostics; using KeePass.Resources; using KeePassLib; using KeePassLib.Serialization; using KeePassLib.Utility; namespace KeePass.UI { /// /// MRU handler interface. An MRU handler must support executing an MRU /// item and clearing the MRU list. /// public interface IMruExecuteHandler { /// /// Function that is called when an MRU item is executed (i.e. when /// the user has clicked the menu item). /// void OnMruExecute(string strDisplayName, object oTag, ToolStripMenuItem tsmiParent); /// /// Function to clear the MRU (for example all menu items must be /// removed from the menu). /// void OnMruClear(); } public sealed class MruList { private List> m_vItems = new List>(); private IMruExecuteHandler m_handler = null; private List m_lContainers = new List(); private ToolStripMenuItem m_tsmiClear = null; private List m_lMruMenuItems = new List(); private enum MruMenuItemType { None = 0, Item, Clear } // private Font m_fItalic = null; private uint m_uMaxItemCount = 0; public uint MaxItemCount { get { return m_uMaxItemCount; } set { m_uMaxItemCount = value; } } private bool m_bMarkOpened = false; public bool MarkOpened { get { return m_bMarkOpened; } set { m_bMarkOpened = value; } } public uint ItemCount { get { return (uint)m_vItems.Count; } } public bool IsValid { get { return (m_handler != null); } } public MruList() { } public void Initialize(IMruExecuteHandler handler, params ToolStripMenuItem[] vContainers) { Release(); Debug.Assert(handler != null); // No throw m_handler = handler; if(vContainers != null) { foreach(ToolStripMenuItem tsmi in vContainers) { if(tsmi != null) { m_lContainers.Add(tsmi); tsmi.DropDownOpening += this.OnDropDownOpening; } } } } public void Release() { ReleaseMenuItems(); foreach(ToolStripMenuItem tsmi in m_lContainers) { tsmi.DropDownOpening -= this.OnDropDownOpening; } m_lContainers.Clear(); m_handler = null; } private void ReleaseMenuItems() { if(m_tsmiClear != null) { m_tsmiClear.Click -= this.ClearHandler; m_tsmiClear = null; } foreach(ToolStripMenuItem tsmi in m_lMruMenuItems) { tsmi.Click -= this.ClickHandler; } m_lMruMenuItems.Clear(); } public void Clear() { m_vItems.Clear(); } [Obsolete] public void AddItem(string strDisplayName, object oTag, bool bUpdateMenu) { AddItem(strDisplayName, oTag); } public void AddItem(string strDisplayName, object oTag) { Debug.Assert(strDisplayName != null); if(strDisplayName == null) throw new ArgumentNullException("strDisplayName"); // oTag may be null bool bExists = false; foreach(KeyValuePair kvp in m_vItems) { Debug.Assert(kvp.Key != null); if(kvp.Key.Equals(strDisplayName, StrUtil.CaseIgnoreCmp)) { bExists = true; break; } } if(bExists) MoveItemToTop(strDisplayName, oTag); else { m_vItems.Insert(0, new KeyValuePair( strDisplayName, oTag)); if(m_vItems.Count > m_uMaxItemCount) m_vItems.RemoveAt(m_vItems.Count - 1); } // if(bUpdateMenu) UpdateMenu(); } private void MoveItemToTop(string strName, object oNewTag) { for(int i = 0; i < m_vItems.Count; ++i) { if(m_vItems[i].Key.Equals(strName, StrUtil.CaseIgnoreCmp)) { KeyValuePair t = new KeyValuePair(strName, oNewTag); m_vItems.RemoveAt(i); m_vItems.Insert(0, t); return; } } Debug.Assert(false); } [Obsolete] public void UpdateMenu() { } private void UpdateMenu(object oContainer) { ToolStripMenuItem tsmiContainer = (oContainer as ToolStripMenuItem); if(tsmiContainer == null) { Debug.Assert(false); return; } if(!m_lContainers.Contains(tsmiContainer)) { Debug.Assert(false); return; } tsmiContainer.DropDown.SuspendLayout(); // Verify that the popup arrow has been drawn (i.e. items existed) Debug.Assert(tsmiContainer.DropDownItems.Count > 0); ReleaseMenuItems(); tsmiContainer.DropDownItems.Clear(); uint uAccessKey = 1, uNull = 0; if(m_vItems.Count > 0) { foreach(KeyValuePair kvp in m_vItems) { AddMenuItem(tsmiContainer, MruMenuItemType.Item, StrUtil.EncodeMenuText(kvp.Key), null, kvp.Value, true, ref uAccessKey); } tsmiContainer.DropDownItems.Add(new ToolStripSeparator()); AddMenuItem(tsmiContainer, MruMenuItemType.Clear, KPRes.ClearMru, Properties.Resources.B16x16_EditDelete, null, true, ref uNull); } else { AddMenuItem(tsmiContainer, MruMenuItemType.None, "(" + KPRes.Empty + ")", null, null, false, ref uNull); } tsmiContainer.DropDown.ResumeLayout(true); } private void AddMenuItem(ToolStripMenuItem tsmiParent, MruMenuItemType t, string strText, Image img, object oTag, bool bEnabled, ref uint uAccessKey) { ToolStripMenuItem tsmi = CreateMenuItem(t, strText, img, oTag, bEnabled, uAccessKey); tsmiParent.DropDownItems.Add(tsmi); if(t == MruMenuItemType.Item) m_lMruMenuItems.Add(tsmi); else if(t == MruMenuItemType.Clear) { Debug.Assert(m_tsmiClear == null); m_tsmiClear = tsmi; } if(uAccessKey != 0) ++uAccessKey; } private ToolStripMenuItem CreateMenuItem(MruMenuItemType t, string strText, Image img, object oTag, bool bEnabled, uint uAccessKey) { string strItem = strText; if(uAccessKey >= 1) { NumberFormatInfo nfi = NumberFormatInfo.InvariantInfo; if(uAccessKey < 10) strItem = @"&" + uAccessKey.ToString(nfi) + " " + strItem; else if(uAccessKey == 10) strItem = @"1&0 " + strItem; else strItem = uAccessKey.ToString(nfi) + " " + strItem; } ToolStripMenuItem tsmi = new ToolStripMenuItem(strItem); if(img != null) tsmi.Image = img; if(oTag != null) tsmi.Tag = oTag; IOConnectionInfo ioc = (oTag as IOConnectionInfo); if(m_bMarkOpened && (ioc != null) && (Program.MainForm != null)) { foreach(PwDatabase pd in Program.MainForm.DocumentManager.GetOpenDatabases()) { if(pd.IOConnectionInfo.GetDisplayName().Equals( ioc.GetDisplayName(), StrUtil.CaseIgnoreCmp)) { // if(m_fItalic == null) // { // Font f = tsi.Font; // if(f != null) // m_fItalic = FontUtil.CreateFont(f, FontStyle.Italic); // else { Debug.Assert(false); } // } // if(m_fItalic != null) tsmi.Font = m_fItalic; // 153, 51, 153 tsmi.ForeColor = Color.FromArgb(64, 64, 255); tsmi.Text += " [" + KPRes.Opened + "]"; break; } } } if(t == MruMenuItemType.Item) tsmi.Click += this.ClickHandler; else if(t == MruMenuItemType.Clear) tsmi.Click += this.ClearHandler; // t == MruMenuItemType.None needs no handler if(!bEnabled) tsmi.Enabled = false; return tsmi; } public KeyValuePair GetItem(uint uIndex) { Debug.Assert(uIndex < (uint)m_vItems.Count); if(uIndex >= (uint)m_vItems.Count) throw new ArgumentException(); return m_vItems[(int)uIndex]; } public bool RemoveItem(string strDisplayName) { Debug.Assert(strDisplayName != null); if(strDisplayName == null) throw new ArgumentNullException("strDisplayName"); for(int i = 0; i < m_vItems.Count; ++i) { KeyValuePair kvp = m_vItems[i]; if(kvp.Key.Equals(strDisplayName, StrUtil.CaseIgnoreCmp)) { m_vItems.RemoveAt(i); return true; } } return false; } private void ClickHandler(object sender, EventArgs args) { ToolStripMenuItem tsmi = (sender as ToolStripMenuItem); if(tsmi == null) { Debug.Assert(false); return; } Debug.Assert(m_lMruMenuItems.Contains(tsmi)); ToolStripMenuItem tsmiParent = (tsmi.OwnerItem as ToolStripMenuItem); if(tsmiParent == null) { Debug.Assert(false); return; } if(!m_lContainers.Contains(tsmiParent)) { Debug.Assert(false); return; } if(m_handler == null) { Debug.Assert(false); return; } string strName = tsmi.Text; object oTag = tsmi.Tag; m_handler.OnMruExecute(strName, oTag, tsmiParent); // MoveItemToTop(strName); } private void ClearHandler(object sender, EventArgs e) { if(m_handler != null) m_handler.OnMruClear(); else { Debug.Assert(false); } } private void OnDropDownOpening(object sender, EventArgs e) { UpdateMenu(sender); } } } KeePass/UI/ColumnProviderPool.cs0000664000000000000000000000707012641461342015566 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePassLib; namespace KeePass.UI { public sealed class ColumnProviderPool : IEnumerable { private List m_vProviders = new List(); public int Count { get { return m_vProviders.Count; } } IEnumerator IEnumerable.GetEnumerator() { return m_vProviders.GetEnumerator(); } public IEnumerator GetEnumerator() { return m_vProviders.GetEnumerator(); } public void Add(ColumnProvider prov) { Debug.Assert(prov != null); if(prov == null) throw new ArgumentNullException("prov"); m_vProviders.Add(prov); } public bool Remove(ColumnProvider prov) { Debug.Assert(prov != null); if(prov == null) throw new ArgumentNullException("prov"); return m_vProviders.Remove(prov); } public string[] GetColumnNames() { List v = new List(); foreach(ColumnProvider prov in m_vProviders) { foreach(string strColumn in prov.ColumnNames) { if(!v.Contains(strColumn)) v.Add(strColumn); } } return v.ToArray(); } public HorizontalAlignment GetTextAlign(string strColumnName) { if(strColumnName == null) throw new ArgumentNullException("strColumnName"); foreach(ColumnProvider prov in m_vProviders) { if(Array.IndexOf(prov.ColumnNames, strColumnName) >= 0) return prov.TextAlign; } return HorizontalAlignment.Left; } public string GetCellData(string strColumnName, PwEntry pe) { if(strColumnName == null) throw new ArgumentNullException("strColumnName"); if(pe == null) throw new ArgumentNullException("pe"); foreach(ColumnProvider prov in m_vProviders) { if(Array.IndexOf(prov.ColumnNames, strColumnName) >= 0) return prov.GetCellData(strColumnName, pe); } return string.Empty; } public bool SupportsCellAction(string strColumnName) { if(strColumnName == null) throw new ArgumentNullException("strColumnName"); foreach(ColumnProvider prov in m_vProviders) { if(Array.IndexOf(prov.ColumnNames, strColumnName) >= 0) return prov.SupportsCellAction(strColumnName); } return false; } public void PerformCellAction(string strColumnName, PwEntry pe) { if(strColumnName == null) throw new ArgumentNullException("strColumnName"); foreach(ColumnProvider prov in m_vProviders) { if(Array.IndexOf(prov.ColumnNames, strColumnName) >= 0) { prov.PerformCellAction(strColumnName, pe); break; } } } } } KeePass/UI/CustomMenuStripEx.cs0000664000000000000000000000273412641461342015404 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using KeePass.Native; namespace KeePass.UI { public sealed class CustomMenuStripEx : MenuStrip { public CustomMenuStripEx() : base() { // ThemeToolStripRenderer.AttachTo(this); UIUtil.Configure(this); } protected override void WndProc(ref Message m) { base.WndProc(ref m); // Enable 'click through' behavior if((m.Msg == NativeMethods.WM_MOUSEACTIVATE) && (m.Result == (IntPtr)NativeMethods.MA_ACTIVATEANDEAT)) { m.Result = (IntPtr)NativeMethods.MA_ACTIVATE; } } } } KeePass/UI/UserActivityNotifyFilter.cs0000664000000000000000000000246312641461344016761 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Windows.Forms; using KeePass.Native; namespace KeePass.UI { public sealed class UserActivityNotifyFilter : IMessageFilter { public bool PreFilterMessage(ref Message m) { if((m.Msg == NativeMethods.WM_KEYDOWN) || (m.Msg == NativeMethods.WM_LBUTTONDOWN) || (m.Msg == NativeMethods.WM_RBUTTONDOWN) || (m.Msg == NativeMethods.WM_MBUTTONDOWN)) { Program.NotifyUserActivity(); } return false; } } } KeePass/UI/CheckedLVItemDXList.cs0000664000000000000000000002057012641461342015463 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Reflection; using System.Diagnostics; using KeePass.App; using KeePass.App.Configuration; using KeePass.Util; using KeePassLib.Utility; namespace KeePass.UI { public enum CheckItemLinkType { None = 0, CheckedChecked, UncheckedUnchecked, CheckedUnchecked, UncheckedChecked } public sealed class CheckedLVItemDXList { private ListView m_lv; private List m_lItems = new List(); private List m_lLinks = new List(); private bool m_bUseEnforcedConfig; private sealed class ClviInfo { private object m_o; // Never null public object Object { get { return m_o; } } // private string m_strPropName; // Never null // public string PropertyName { get { return m_strPropName; } } private PropertyInfo m_pi; // Never null public PropertyInfo PropertyInfo { get { return m_pi; } } private ListViewItem m_lvi; // Never null public ListViewItem ListViewItem { get { return m_lvi; } } public bool PropertyValue { get { return (bool)m_pi.GetValue(m_o, null); } set { m_pi.SetValue(m_o, value, null); } } private bool m_bReadOnly = false; public bool ReadOnly { get { return m_bReadOnly; } set { m_bReadOnly = value; } } public ClviInfo(object pContainer, string strPropertyName, ListViewItem lvi) { if(pContainer == null) throw new ArgumentNullException("pContainer"); if(strPropertyName == null) throw new ArgumentNullException("strPropertyName"); if(strPropertyName.Length == 0) throw new ArgumentException("strPropertyName"); // if(lvi == null) throw new ArgumentNullException("lvi"); m_o = pContainer; // m_strPropName = strPropertyName; m_lvi = lvi; Type t = pContainer.GetType(); m_pi = t.GetProperty(strPropertyName); if((m_pi == null) || (m_pi.PropertyType != typeof(bool)) || !m_pi.CanRead || !m_pi.CanWrite) throw new ArgumentException("strPropertyName"); } } private sealed class CheckItemLink { private ListViewItem m_lvSource; public ListViewItem Source { get { return m_lvSource; } } private ListViewItem m_lvTarget; public ListViewItem Target { get { return m_lvTarget; } } private CheckItemLinkType m_t; public CheckItemLinkType Type { get { return m_t; } } public CheckItemLink(ListViewItem lviSource, ListViewItem lviTarget, CheckItemLinkType cilType) { m_lvSource = lviSource; m_lvTarget = lviTarget; m_t = cilType; } } [Obsolete] public CheckedLVItemDXList(ListView lv) { Construct(lv, false); } public CheckedLVItemDXList(ListView lv, bool bUseEnforcedConfig) { Construct(lv, bUseEnforcedConfig); } private void Construct(ListView lv, bool bUseEnforcedConfig) { if(lv == null) throw new ArgumentNullException("lv"); m_lv = lv; m_bUseEnforcedConfig = bUseEnforcedConfig; m_lv.ItemChecked += this.OnItemCheckedChanged; } #if DEBUG ~CheckedLVItemDXList() { Debug.Assert(m_lv == null); // Release should have been called } #endif public void Release() { if(m_lv == null) { Debug.Assert(false); return; } m_lItems.Clear(); m_lLinks.Clear(); m_lv.ItemChecked -= this.OnItemCheckedChanged; m_lv = null; } public void UpdateData(bool bGuiToInternals) { if(m_lv == null) { Debug.Assert(false); return; } Color clr = SystemColors.ControlText; float fH, fS, fV; UIUtil.ColorToHsv(clr, out fH, out fS, out fV); if(fV >= 0.5f) // Text color is rather light clr = UIUtil.ColorFromHsv(fH, 0.0f, 0.40f); else // Text color is rather dark clr = UIUtil.ColorFromHsv(fH, 0.0f, 0.60f); foreach(ClviInfo clvi in m_lItems) { ListViewItem lvi = clvi.ListViewItem; Debug.Assert(lvi.Index >= 0); Debug.Assert(m_lv.Items.IndexOf(lvi) >= 0); if(bGuiToInternals) { bool bChecked = lvi.Checked; clvi.PropertyValue = bChecked; } else // Internals to GUI { bool bValue = clvi.PropertyValue; lvi.Checked = bValue; if(clvi.ReadOnly) lvi.ForeColor = clr; } } } public ListViewItem CreateItem(object pContainer, string strPropertyName, ListViewGroup lvgContainer, string strDisplayString) { return CreateItem(pContainer, strPropertyName, lvgContainer, strDisplayString, null); } public ListViewItem CreateItem(object pContainer, string strPropertyName, ListViewGroup lvgContainer, string strDisplayString, bool? obReadOnly) { if(pContainer == null) throw new ArgumentNullException("pContainer"); if(strPropertyName == null) throw new ArgumentNullException("strPropertyName"); if(strPropertyName.Length == 0) throw new ArgumentException("strPropertyName"); if(strDisplayString == null) throw new ArgumentNullException("strDisplayString"); if(m_lv == null) { Debug.Assert(false); return null; } ListViewItem lvi = new ListViewItem(strDisplayString); ClviInfo clvi = new ClviInfo(pContainer, strPropertyName, lvi); if(obReadOnly.HasValue) clvi.ReadOnly = obReadOnly.Value; else DetermineReadOnlyState(clvi); if(lvgContainer != null) { lvi.Group = lvgContainer; Debug.Assert(lvgContainer.Items.IndexOf(lvi) >= 0); Debug.Assert(m_lv.Groups.IndexOf(lvgContainer) >= 0); } m_lv.Items.Add(lvi); m_lItems.Add(clvi); return lvi; } public void AddLink(ListViewItem lviSource, ListViewItem lviTarget, CheckItemLinkType t) { if(lviSource == null) { Debug.Assert(false); return; } if(lviTarget == null) { Debug.Assert(false); return; } if(m_lv == null) { Debug.Assert(false); return; } Debug.Assert(GetItem(lviSource) != null); Debug.Assert(GetItem(lviTarget) != null); m_lLinks.Add(new CheckItemLink(lviSource, lviTarget, t)); } private ClviInfo GetItem(ListViewItem lvi) { if(lvi == null) { Debug.Assert(false); return null; } foreach(ClviInfo clvi in m_lItems) { if(clvi.ListViewItem == lvi) return clvi; } return null; } private void OnItemCheckedChanged(object sender, ItemCheckedEventArgs e) { ListViewItem lvi = e.Item; if(lvi == null) { Debug.Assert(false); return; } bool bChecked = lvi.Checked; ClviInfo clvi = GetItem(lvi); if(clvi != null) { if(clvi.ReadOnly && (bChecked != clvi.PropertyValue)) { lvi.Checked = clvi.PropertyValue; return; } } foreach(CheckItemLink cl in m_lLinks) { if(cl.Source == lvi) { if(cl.Target.Index < 0) continue; if((cl.Type == CheckItemLinkType.CheckedChecked) && bChecked && !cl.Target.Checked) cl.Target.Checked = true; else if((cl.Type == CheckItemLinkType.UncheckedUnchecked) && !bChecked && cl.Target.Checked) cl.Target.Checked = false; else if((cl.Type == CheckItemLinkType.CheckedUnchecked) && bChecked && cl.Target.Checked) cl.Target.Checked = false; else if((cl.Type == CheckItemLinkType.UncheckedChecked) && !bChecked && !cl.Target.Checked) cl.Target.Checked = true; } } } private void DetermineReadOnlyState(ClviInfo clvi) { if(clvi == null) { Debug.Assert(false); return; } if(!m_bUseEnforcedConfig) clvi.ReadOnly = false; else clvi.ReadOnly = AppConfigEx.IsOptionEnforced(clvi.Object, clvi.PropertyInfo); } } } KeePass/UI/StatusBarLogger.cs0000664000000000000000000000576112641461344015043 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePassLib.Interfaces; namespace KeePass.UI { public sealed class StatusBarLogger : IStatusLogger { private ToolStripStatusLabel m_sbText = null; private ToolStripProgressBar m_pbProgress = null; private bool m_bStartedLogging = false; private bool m_bEndedLogging = false; private uint m_uLastPercent = 0; ~StatusBarLogger() { Debug.Assert(m_bEndedLogging); if(!m_bEndedLogging) EndLogging(); } public void SetControls(ToolStripStatusLabel sbText, ToolStripProgressBar pbProgress) { m_sbText = sbText; m_pbProgress = pbProgress; if(m_pbProgress != null) { if(m_pbProgress.Minimum != 0) m_pbProgress.Minimum = 0; if(m_pbProgress.Maximum != 100) m_pbProgress.Maximum = 100; } } public void StartLogging(string strOperation, bool bWriteOperationToLog) { Debug.Assert(!m_bStartedLogging && !m_bEndedLogging); m_pbProgress.Value = 0; m_uLastPercent = 0; m_pbProgress.Visible = true; m_bStartedLogging = true; this.SetText(strOperation, LogStatusType.Info); } public void EndLogging() { Debug.Assert(m_bStartedLogging && !m_bEndedLogging); if(m_pbProgress != null) { m_pbProgress.Visible = false; m_pbProgress.Value = 100; } m_uLastPercent = 100; m_bEndedLogging = true; } public bool SetProgress(uint uPercent) { Debug.Assert(m_bStartedLogging && !m_bEndedLogging); if((m_pbProgress != null) && (uPercent != m_uLastPercent)) { m_pbProgress.Value = (int)uPercent; m_uLastPercent = uPercent; Application.DoEvents(); } return true; } public bool SetText(string strNewText, LogStatusType lsType) { Debug.Assert(m_bStartedLogging && !m_bEndedLogging); if((m_sbText != null) && (lsType == LogStatusType.Info)) { m_sbText.Text = strNewText; Application.DoEvents(); } return true; } public bool ContinueWork() { Debug.Assert(m_bStartedLogging && !m_bEndedLogging); return true; } } } KeePass/UI/OpenWithMenu.cs0000664000000000000000000002644112647503704014356 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Diagnostics; using Microsoft.Win32; using KeePass.Resources; using KeePass.Util; using KeePassLib; using KeePassLib.Native; using KeePassLib.Utility; namespace KeePass.UI { internal enum OwFilePathType { /// /// Path to an executable file that is invoked with /// the target URI as command line parameter. /// Executable = 0, /// /// Shell path (e.g. URI) in which a placeholder is /// replaced by the target URI. /// ShellExpand } internal sealed class OpenWithItem { private string m_strPath; public string FilePath { get { return m_strPath; } } private OwFilePathType m_tPath; public OwFilePathType FilePathType { get { return m_tPath; } } private string m_strMenuText; // public string MenuText { get { return m_strMenuText; } } private Image m_imgIcon; public Image Image { get { return m_imgIcon; } } private ToolStripMenuItem m_tsmi; public ToolStripMenuItem MenuItem { get { return m_tsmi; } } public OpenWithItem(string strFilePath, OwFilePathType tPath, string strMenuText, Image imgIcon, DynamicMenu dynMenu) { m_strPath = strFilePath; m_tPath = tPath; m_strMenuText = strMenuText; m_imgIcon = imgIcon; m_tsmi = dynMenu.AddItem(m_strMenuText, m_imgIcon, this); try { m_tsmi.ToolTipText = m_strPath; } catch(Exception) { } // Too long? } } public sealed class OpenWithMenu { private ToolStripDropDownItem m_tsmiHost; private DynamicMenu m_dynMenu; private List m_lOpenWith = null; private const string PlhTargetUri = @"{OW_URI}"; public OpenWithMenu(ToolStripDropDownItem tsmiHost) { if(tsmiHost == null) { Debug.Assert(false); return; } m_tsmiHost = tsmiHost; m_dynMenu = new DynamicMenu(m_tsmiHost); m_dynMenu.MenuClick += this.OnOpenUrl; m_tsmiHost.DropDownOpening += this.OnMenuOpening; } ~OpenWithMenu() { Destroy(); } public void Destroy() { if(m_dynMenu != null) { m_dynMenu.Clear(); m_dynMenu.MenuClick -= this.OnOpenUrl; m_dynMenu = null; m_tsmiHost.DropDownOpening -= this.OnMenuOpening; m_tsmiHost = null; // After the menu has been destroyed: ReleaseOpenWithList(); // Release icons, ... } } private void OnMenuOpening(object sender, EventArgs e) { if(m_dynMenu == null) { Debug.Assert(false); return; } if(m_lOpenWith == null) CreateOpenWithList(); PwEntry[] v = Program.MainForm.GetSelectedEntries(); if(v == null) v = new PwEntry[0]; bool bCanOpenWith = true; uint uValidUrls = 0; foreach(PwEntry pe in v) { string strUrl = pe.Strings.ReadSafe(PwDefs.UrlField); if(string.IsNullOrEmpty(strUrl)) continue; ++uValidUrls; bCanOpenWith &= !WinUtil.IsCommandLineUrl(strUrl); } if((v.Length == 0) || (uValidUrls == 0)) bCanOpenWith = false; foreach(OpenWithItem it in m_lOpenWith) it.MenuItem.Enabled = bCanOpenWith; } private void CreateOpenWithList() { ReleaseOpenWithList(); m_dynMenu.Clear(); m_dynMenu.AddSeparator(); m_lOpenWith = new List(); FindAppsByKnown(); FindAppsByRegistry(); if(m_lOpenWith.Count == 0) m_dynMenu.Clear(); // Remove separator } private void ReleaseOpenWithList() { if(m_lOpenWith == null) return; foreach(OpenWithItem it in m_lOpenWith) { if(it.Image != null) it.Image.Dispose(); } m_lOpenWith = null; } private void OnOpenUrl(object sender, DynamicMenuEventArgs e) { if(e == null) { Debug.Assert(false); return; } OpenWithItem it = (e.Tag as OpenWithItem); if(it == null) { Debug.Assert(false); return; } string strApp = it.FilePath; PwEntry[] v = Program.MainForm.GetSelectedEntries(); if(v == null) { Debug.Assert(false); return; } foreach(PwEntry pe in v) { string strUrl = pe.Strings.ReadSafe(PwDefs.UrlField); if(string.IsNullOrEmpty(strUrl)) continue; if(it.FilePathType == OwFilePathType.Executable) WinUtil.OpenUrlWithApp(strUrl, pe, strApp); else if(it.FilePathType == OwFilePathType.ShellExpand) { string str = strApp.Replace(PlhTargetUri, strUrl); WinUtil.OpenUrl(str, pe, false); } else { Debug.Assert(false); } } } private void AddAppByFile(string strAppCmdLine, string strName) { if(string.IsNullOrEmpty(strAppCmdLine)) return; // No assert string strPath = UrlUtil.GetShortestAbsolutePath( UrlUtil.GetQuotedAppPath(strAppCmdLine).Trim()); if(strPath.Length == 0) { Debug.Assert(false); return; } foreach(OpenWithItem it in m_lOpenWith) { if(it.FilePath.Equals(strPath, StrUtil.CaseIgnoreCmp)) return; // Already have an item for this } // Filter non-existing/legacy applications try { if(!File.Exists(strPath)) return; } catch(Exception) { Debug.Assert(false); return; } if(string.IsNullOrEmpty(strName)) strName = UrlUtil.StripExtension(UrlUtil.GetFileName(strPath)); Image img = UIUtil.GetFileIcon(strPath, DpiUtil.ScaleIntX(16), DpiUtil.ScaleIntY(16)); string strMenuText = KPRes.OpenWith.Replace(@"{PARAM}", strName); OpenWithItem owi = new OpenWithItem(strPath, OwFilePathType.Executable, strMenuText, img, m_dynMenu); m_lOpenWith.Add(owi); } private void AddAppByShellExpand(string strShell, string strName, string strIconExe) { if(string.IsNullOrEmpty(strShell)) return; if(string.IsNullOrEmpty(strName)) strName = strShell; Image img = null; if(!string.IsNullOrEmpty(strIconExe)) img = UIUtil.GetFileIcon(strIconExe, DpiUtil.ScaleIntX(16), DpiUtil.ScaleIntY(16)); string strMenuText = KPRes.OpenWith.Replace(@"{PARAM}", strName); OpenWithItem owi = new OpenWithItem(strShell, OwFilePathType.ShellExpand, strMenuText, img, m_dynMenu); m_lOpenWith.Add(owi); } private void FindAppsByKnown() { string strIE = AppLocator.InternetExplorerPath; if(!string.IsNullOrEmpty(strIE)) { AddAppByFile(strIE, @"&Internet Explorer"); // https://msdn.microsoft.com/en-us/library/hh826025.aspx AddAppByShellExpand("cmd://\"" + strIE + "\" -private \"" + PlhTargetUri + "\"", "Internet Explorer (" + KPRes.Private + ")", strIE); } if(AppLocator.EdgeProtocolSupported) AddAppByShellExpand("microsoft-edge:" + PlhTargetUri, @"&Edge", AppLocator.EdgePath); string strFF = AppLocator.FirefoxPath; if(!string.IsNullOrEmpty(strFF)) { AddAppByFile(strFF, @"&Firefox"); // The command line options -private and -private-window do not work; // https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options // https://bugzilla.mozilla.org/show_bug.cgi?id=856839 // https://bugzilla.mozilla.org/show_bug.cgi?id=829180 // AddAppByShellExpand("cmd://\"" + strFF + "\" -private-window \"" + // PlhTargetUri + "\"", "Firefox (" + KPRes.Private + ")", strFF); } string strCh = AppLocator.ChromePath; if(!string.IsNullOrEmpty(strCh)) { AddAppByFile(strCh, @"&Google Chrome"); // https://www.chromium.org/developers/how-tos/run-chromium-with-flags // http://peter.sh/examples/?/chromium-switches.html AddAppByShellExpand("cmd://\"" + strCh + "\" --incognito \"" + PlhTargetUri + "\"", "Google Chrome (" + KPRes.Private + ")", strCh); } string strOp = AppLocator.OperaPath; if(!string.IsNullOrEmpty(strOp)) { AddAppByFile(strOp, @"O&pera"); // Doesn't work with Opera 34.0.2036.25: // AddAppByShellExpand("cmd://\"" + strOp + "\" -newprivatetab \"" + // PlhTargetUri + "\"", "Opera (" + KPRes.Private + ")", strOp); } AddAppByFile(AppLocator.SafariPath, @"&Safari"); if(NativeLib.IsUnix()) { AddAppByFile(AppLocator.FindAppUnix("epiphany-browser"), @"&Epiphany"); AddAppByFile(AppLocator.FindAppUnix("galeon"), @"Ga&leon"); AddAppByFile(AppLocator.FindAppUnix("konqueror"), @"&Konqueror"); AddAppByFile(AppLocator.FindAppUnix("rekonq"), @"&Rekonq"); AddAppByFile(AppLocator.FindAppUnix("arora"), @"&Arora"); AddAppByFile(AppLocator.FindAppUnix("midori"), @"&Midori"); AddAppByFile(AppLocator.FindAppUnix("Dooble"), @"&Dooble"); // Upper-case } } private void FindAppsByRegistry() { const string strSmiDef = "SOFTWARE\\Clients\\StartMenuInternet"; const string strSmiWow = "SOFTWARE\\Wow6432Node\\Clients\\StartMenuInternet"; // https://msdn.microsoft.com/en-us/library/windows/desktop/dd203067.aspx try { FindAppsByRegistryPriv(Registry.CurrentUser, strSmiDef); } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } try { FindAppsByRegistryPriv(Registry.CurrentUser, strSmiWow); } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } try { FindAppsByRegistryPriv(Registry.LocalMachine, strSmiDef); } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } try { FindAppsByRegistryPriv(Registry.LocalMachine, strSmiWow); } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } } private void FindAppsByRegistryPriv(RegistryKey kBase, string strRootSubKey) { RegistryKey kRoot = kBase.OpenSubKey(strRootSubKey, false); if(kRoot == null) return; // No assert, key might not exist string[] vAppSubKeys = kRoot.GetSubKeyNames(); foreach(string strAppSubKey in vAppSubKeys) { RegistryKey kApp = kRoot.OpenSubKey(strAppSubKey, false); string strName = (kApp.GetValue(string.Empty) as string); string strAltName = null; RegistryKey kCmd = kApp.OpenSubKey("shell\\open\\command", false); if(kCmd == null) { kApp.Close(); continue; } // No assert (XP) string strCmdLine = (kCmd.GetValue(string.Empty) as string); kCmd.Close(); RegistryKey kCaps = kApp.OpenSubKey("Capabilities", false); if(kCaps != null) { strAltName = (kCaps.GetValue("ApplicationName") as string); kCaps.Close(); } kApp.Close(); string strDisplayName = string.Empty; if(strName != null) strDisplayName = strName; if((strAltName != null) && (strAltName.Length <= strDisplayName.Length)) strDisplayName = strAltName; AddAppByFile(strCmdLine, strDisplayName); } kRoot.Close(); } } } KeePass/UI/UISystemFonts.cs0000664000000000000000000001305412641461344014521 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.IO; using System.Diagnostics; using System.Xml; using KeePass.Util; using KeePassLib.Native; using KeePassLib.Utility; namespace KeePass.UI { public static class UISystemFonts { private static bool m_bInitialized = false; private static Font m_fontUI = null; public static Font DefaultFont { get { EnsureInitialized(); return m_fontUI; } } private static Font m_fontList = null; public static Font ListFont { get { EnsureInitialized(); return m_fontList; } } private static void EnsureInitialized() { if(m_bInitialized) return; if(NativeLib.IsUnix()) { try { UnixLoadFonts(); } catch(Exception) { Debug.Assert(false); } } if(m_fontUI == null) m_fontUI = SystemFonts.DefaultFont; if(m_fontList == null) { if(UIUtil.VistaStyleListsSupported) { string str1 = SystemFonts.IconTitleFont.ToString(); string str2 = SystemFonts.StatusFont.ToString(); if(str1 == str2) m_fontList = SystemFonts.StatusFont; else m_fontList = m_fontUI; } else m_fontList = m_fontUI; } m_bInitialized = true; } private static void UnixLoadFonts() { // string strSession = Environment.GetEnvironmentVariable("DESKTOP_SESSION"); // "Default", "KDE", "Gnome", "Ubuntu", ... // string strKde = Environment.GetEnvironmentVariable("KDE_FULL_SESSION"); string strHome = Environment.GetFolderPath(Environment.SpecialFolder.Personal); if(string.IsNullOrEmpty(strHome)) { Debug.Assert(false); return; } strHome = UrlUtil.EnsureTerminatingSeparator(strHome, false); KdeLoadFonts(strHome); if(m_fontUI == null) GnomeLoadFonts(strHome); if(m_fontUI == null) UbuntuLoadFonts(); } private static void KdeLoadFonts(string strHome) { string strKdeConfig = strHome + ".kde/share/config/kdeglobals"; if(!File.Exists(strKdeConfig)) { strKdeConfig = strHome + ".kde4/share/config/kdeglobals"; if(!File.Exists(strKdeConfig)) { strKdeConfig = strHome + ".kde3/share/config/kdeglobals"; if(!File.Exists(strKdeConfig)) return; } } IniFile ini = IniFile.Read(strKdeConfig, Encoding.UTF8); string strFont = ini.Get("General", "font"); if(string.IsNullOrEmpty(strFont)) { Debug.Assert(false); return; } m_fontUI = KdeCreateFont(strFont); } private static Font KdeCreateFont(string strDef) { string[] v = strDef.Split(new char[] { ',' }); if((v == null) || (v.Length < 6)) { Debug.Assert(false); return null; } for(int i = 0; i < v.Length; ++i) v[i] = v[i].Trim(); float fSize; if(!float.TryParse(v[1], out fSize)) { Debug.Assert(false); return null; } FontStyle fs = FontStyle.Regular; if(v[4] == "75") fs |= FontStyle.Bold; if(v[5] == "2") fs |= FontStyle.Italic; return FontUtil.CreateFont(v[0], fSize, fs); } private static void GnomeLoadFonts(string strHome) { string strConfig = strHome + @".gconf/desktop/gnome/interface/%gconf.xml"; if(!File.Exists(strConfig)) return; XmlDocument doc = new XmlDocument(); doc.Load(strConfig); foreach(XmlNode xn in doc.DocumentElement.ChildNodes) { if(string.Equals(xn.Name, "entry") && string.Equals(xn.Attributes.GetNamedItem("name").Value, "font_name")) { m_fontUI = GnomeCreateFont(xn.FirstChild.InnerText); break; } } } private static Font GnomeCreateFont(string strDef) { int iSep = strDef.LastIndexOf(' '); if(iSep < 0) { Debug.Assert(false); return null; } string strName = strDef.Substring(0, iSep); float fSize = float.Parse(strDef.Substring(iSep + 1)); FontStyle fs = FontStyle.Regular; // Name can end with "Bold", "Italic", "Bold Italic", ... if(strName.EndsWith(" Oblique", StrUtil.CaseIgnoreCmp)) // Gnome { fs |= FontStyle.Italic; strName = strName.Substring(0, strName.Length - 8); } if(strName.EndsWith(" Italic", StrUtil.CaseIgnoreCmp)) // Ubuntu { fs |= FontStyle.Italic; strName = strName.Substring(0, strName.Length - 7); } if(strName.EndsWith(" Bold", StrUtil.CaseIgnoreCmp)) { fs |= FontStyle.Bold; strName = strName.Substring(0, strName.Length - 5); } return FontUtil.CreateFont(strName, fSize, fs); } private static void UbuntuLoadFonts() { string strDef = NativeLib.RunConsoleApp("gsettings", "get org.gnome.desktop.interface font-name"); if(strDef == null) return; strDef = strDef.Trim(new char[] { ' ', '\t', '\r', '\n', '\'', '\"' }); if(strDef.Length == 0) return; m_fontUI = GnomeCreateFont(strDef); } } } KeePass/UI/EnableThemingInScope.cs0000664000000000000000000000751412641461342015752 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Windows.Forms; using System.Diagnostics; using KeePass.Native; using KeePass.Util; namespace KeePass.UI { // Code derived from http://support.microsoft.com/kb/830033/ public sealed class EnableThemingInScope : IDisposable { private UIntPtr? m_nuCookie = null; private static object m_oSync = new object(); private static IntPtr? m_nhCtx = null; public EnableThemingInScope(bool bEnable) { if(!bEnable) return; if(KeePassLib.Native.NativeLib.IsUnix()) return; try { if(OSFeature.Feature.IsPresent(OSFeature.Themes)) { if(EnsureActCtxCreated()) { UIntPtr u = UIntPtr.Zero; if(NativeMethods.ActivateActCtx(m_nhCtx.Value, ref u)) m_nuCookie = u; else { Debug.Assert(false); } } else { Debug.Assert(false); } } } catch(Exception) { Debug.Assert(false); } } ~EnableThemingInScope() { Debug.Assert(!m_nuCookie.HasValue); Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool bDisposing) { if(!m_nuCookie.HasValue) return; try { if(NativeMethods.DeactivateActCtx(0, m_nuCookie.Value)) m_nuCookie = null; else { Debug.Assert(false); } } catch(Exception) { Debug.Assert(false); } } public static void StaticDispose() { if(!m_nhCtx.HasValue) return; try { NativeMethods.ReleaseActCtx(m_nhCtx.Value); m_nhCtx = null; } catch(Exception) { Debug.Assert(false); } } private static bool EnsureActCtxCreated() { lock(m_oSync) { if(m_nhCtx.HasValue) return true; string strAsmLoc; FileIOPermission p = new FileIOPermission(PermissionState.None); p.AllFiles = FileIOPermissionAccess.PathDiscovery; p.Assert(); try { strAsmLoc = typeof(object).Assembly.Location; } finally { CodeAccessPermission.RevertAssert(); } if(string.IsNullOrEmpty(strAsmLoc)) { Debug.Assert(false); return false; } string strInstDir = Path.GetDirectoryName(strAsmLoc); string strMfLoc = Path.Combine(strInstDir, "XPThemes.manifest"); NativeMethods.ACTCTX ctx = new NativeMethods.ACTCTX(); ctx.cbSize = (uint)Marshal.SizeOf(typeof(NativeMethods.ACTCTX)); Debug.Assert(((IntPtr.Size == 4) && (ctx.cbSize == NativeMethods.ACTCTXSize32)) || ((IntPtr.Size == 8) && (ctx.cbSize == NativeMethods.ACTCTXSize64))); ctx.lpSource = strMfLoc; ctx.lpAssemblyDirectory = strInstDir; ctx.dwFlags = NativeMethods.ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID; m_nhCtx = NativeMethods.CreateActCtx(ref ctx); if(NativeMethods.IsInvalidHandleValue(m_nhCtx.Value)) { Debug.Assert(false); m_nhCtx = null; return false; } } return true; } } } KeePass/UI/SplitButtonEx.cs0000664000000000000000000000523712641461344014555 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Windows.Forms; using System.ComponentModel; using System.Diagnostics; using KeePass.Native; using KeePass.Util; namespace KeePass.UI { public sealed class SplitButtonEx : Button { private const int BS_SPLITBUTTON = 0x0000000C; private const uint BCN_FIRST = unchecked((uint)(-1250)); private const uint BCN_DROPDOWN = (BCN_FIRST + 0x0002); private readonly bool m_bSupported; private ContextMenuStrip m_ctx = null; [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public ContextMenuStrip SplitDropDownMenu { get { return m_ctx; } set { m_ctx = value; } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; if(m_bSupported) cp.Style |= BS_SPLITBUTTON; return cp; } } public SplitButtonEx() : base() { m_bSupported = (WinUtil.IsAtLeastWindowsVista && !KeePassLib.Native.NativeLib.IsUnix() && !Program.DesignMode); if(m_bSupported) { this.FlatStyle = FlatStyle.System; } } protected override void WndProc(ref Message m) { if((m.Msg == NativeMethods.WM_NOTIFY_REFLECT) && m_bSupported) { try { NativeMethods.NMHDR nm = (NativeMethods.NMHDR)m.GetLParam( typeof(NativeMethods.NMHDR)); if(nm.code == BCN_DROPDOWN) { if(m_ctx != null) { m_ctx.Show(this, new Point(0, this.Height)); return; // We handled it } else { Debug.Assert(false); } } } catch(Exception) { Debug.Assert(false); } } base.WndProc(ref m); } } } KeePass/UI/ImageComboBoxEx.cs0000664000000000000000000000767112641461342014743 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Windows.Forms; using System.Drawing; using System.Drawing.Drawing2D; using System.Diagnostics; using KeePassLib.Native; namespace KeePass.UI { public sealed class ImageComboBoxEx : ComboBox { private List m_vImages = null; [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public List OrderedImageList { get { return m_vImages; } set { m_vImages = value; } // Null allowed } public ImageComboBoxEx() : base() { if(Program.DesignMode) return; if(NativeLib.IsUnix()) return; Debug.Assert(this.DrawMode == DrawMode.Normal); this.DrawMode = DrawMode.OwnerDrawVariable; this.DropDownHeight = GetStdItemHeight(null) * 12 + 2; this.MaxDropDownItems = 12; Debug.Assert(!this.Sorted); } private int GetStdItemHeight(Graphics g) { if(g == null) return Math.Max(18, TextRenderer.MeasureText("Wg", this.Font).Height); return Math.Max(18, TextRenderer.MeasureText(g, "Wg", this.Font).Height); } protected override void OnMeasureItem(MeasureItemEventArgs e) { base.OnMeasureItem(e); e.ItemHeight = GetStdItemHeight(e.Graphics); } protected override void OnDrawItem(DrawItemEventArgs e) { Color clrBack = e.BackColor, clrFore = e.ForeColor; if((e.State & DrawItemState.Selected) != DrawItemState.None) { clrBack = SystemColors.Highlight; clrFore = SystemColors.HighlightText; } int nIdx = e.Index; Rectangle rectClip = e.Bounds; int dImg = rectClip.Height - 2; bool bRtl = Program.Translation.Properties.RightToLeft; Graphics g = e.Graphics; SolidBrush brBack = new SolidBrush(clrBack); g.FillRectangle(brBack, rectClip); Rectangle rectImg = new Rectangle(bRtl ? (rectClip.Right - dImg - 1) : (rectClip.Left + 1), rectClip.Top + 1, dImg, dImg); if((m_vImages != null) && (nIdx >= 0) && (nIdx < m_vImages.Count) && (m_vImages[nIdx] != null)) { g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.SmoothingMode = SmoothingMode.HighQuality; g.DrawImage(m_vImages[nIdx], rectImg); } Rectangle rectText = new Rectangle(bRtl ? (rectClip.Left + 1) : (rectClip.Left + dImg + 2 + 1), rectClip.Top + 1, rectClip.Width - dImg - 5, rectClip.Height - 2); TextFormatFlags tff = (TextFormatFlags.PreserveGraphicsClipping | TextFormatFlags.EndEllipsis | TextFormatFlags.NoPrefix | TextFormatFlags.SingleLine | TextFormatFlags.VerticalCenter); if(bRtl) tff |= (TextFormatFlags.RightToLeft | TextFormatFlags.Right); string strText = string.Empty; if((nIdx >= 0) && (nIdx < this.Items.Count)) strText = ((this.Items[nIdx] as string) ?? string.Empty); TextRenderer.DrawText(g, strText, e.Font, rectText, clrFore, clrBack, tff); if(((e.State & DrawItemState.Focus) != DrawItemState.None) && ((e.State & DrawItemState.NoFocusRect) == DrawItemState.None)) e.DrawFocusRectangle(); brBack.Dispose(); } } } KeePass/UI/CustomSplitContainerEx.cs0000664000000000000000000001241512641461342016411 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Windows.Forms; using System.Reflection; using System.Diagnostics; using KeePassLib.Native; namespace KeePass.UI { public sealed class CustomSplitContainerEx : SplitContainer { private ControlCollection m_ccControls = null; private Control m_cDefault = null; private Control m_cFocused = null; private Control m_cLastKnown = null; [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public double SplitterDistanceFrac { get { bool bVert = (this.Orientation == Orientation.Vertical); int m = (bVert ? this.Width : this.Height); if(m <= 0) { Debug.Assert(false); return 0.0; } int d = this.SplitterDistance; if(d < 0) { Debug.Assert(false); return 0.0; } if(d == 0) return 0.0; // Avoid fExact infinity double f = (double)d / (double)m; try { FieldInfo fi = GetRatioField(bVert); if(fi != null) { double fExact = (double)fi.GetValue(this); if(fExact > double.Epsilon) { fExact = 1.0 / fExact; // Test whether fExact makes sense and if so, // use it instead of f; 1/m as boundary is // slightly too strict if(Math.Abs(fExact - f) <= (1.5 / (double)m)) return fExact; else { Debug.Assert(false); } } else { Debug.Assert(false); } } else { Debug.Assert(false); } } catch(Exception) { Debug.Assert(false); } return f; } set { if((value < 0.0) || (value > 1.0)) { Debug.Assert(false); return; } bool bVert = (this.Orientation == Orientation.Vertical); int m = (bVert ? this.Width : this.Height); if(m <= 0) { Debug.Assert(false); return; } int d = (int)Math.Round(value * (double)m); if(d < 0) { Debug.Assert(false); d = 0; } if(d > m) { Debug.Assert(false); d = m; } this.SplitterDistance = d; if(d == 0) return; // Avoid infinity / division by zero // If the position was auto-adjusted (e.g. due to // minimum size constraints), skip the rest if(this.SplitterDistance != d) return; try { FieldInfo fi = GetRatioField(bVert); if(fi != null) { double fEst = (double)fi.GetValue(this); if(fEst <= double.Epsilon) { Debug.Assert(false); return; } fEst = 1.0 / fEst; // m/d -> d/m // Test whether fEst makes sense and if so, // overwrite it with the exact value; // we must test for 1.5/m, not 1/m, because .NET // uses Math.Floor and we use Math.Round if(Math.Abs(fEst - value) <= (1.5 / (double)m)) fi.SetValue(this, 1.0 / value); // d/m -> m/d else { Debug.Assert(false); } } else { Debug.Assert(false); } } catch(Exception) { Debug.Assert(false); } } } public CustomSplitContainerEx() : base() { } public void InitEx(ControlCollection cc, Control cDefault) { m_ccControls = cc; m_cDefault = m_cLastKnown = cDefault; } private static Control FindInputFocus(ControlCollection cc) { if(cc == null) { Debug.Assert(false); return null; } foreach(Control c in cc) { if(c.Focused) return c; else if(c.ContainsFocus) return FindInputFocus(c.Controls); } return null; } protected override void OnMouseDown(MouseEventArgs e) { m_cFocused = FindInputFocus(m_ccControls); if(m_cFocused == null) m_cFocused = m_cDefault; if(m_cFocused != null) m_cLastKnown = m_cFocused; base.OnMouseDown(e); } protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); if(m_cFocused != null) { UIUtil.SetFocus(m_cFocused, null); m_cFocused = null; } else { Debug.Assert(false); } } protected override void OnEnter(EventArgs e) { base.OnEnter(e); if(this.Focused && (m_cFocused == null)) { if(m_cLastKnown != null) UIUtil.SetFocus(m_cLastKnown, null); else if(m_cDefault != null) UIUtil.SetFocus(m_cDefault, null); } } private static FieldInfo GetRatioField(bool bVert) { // Both .NET and Mono store 'max/pos', not 'pos/max' return typeof(SplitContainer).GetField( (NativeLib.IsUnix() ? "fixed_none_ratio" : (bVert ? "ratioWidth" : "ratioHeight")), (BindingFlags.Instance | BindingFlags.NonPublic)); } } } KeePass/UI/ProtectedDialog.cs0000664000000000000000000002720112641461344015035 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Threading; using System.Drawing; using KeePass.Native; using KeePass.Resources; using KeePass.Util; using KeePassLib; using KeePassLib.Cryptography; using KeePassLib.Utility; // using KpLibNativeMethods = KeePassLib.Native.NativeMethods; namespace KeePass.UI { public delegate Form UIFormConstructor(object objParam); public delegate object UIFormResultBuilder(Form f); public sealed class ProtectedDialog { private UIFormConstructor m_fnConstruct; private UIFormResultBuilder m_fnResultBuilder; private enum SecureThreadState { None = 0, ShowingDialog, Terminated } private sealed class SecureThreadInfo { public List BackgroundBitmaps = new List(); public IntPtr ThreadDesktop = IntPtr.Zero; public object FormConstructParam = null; public DialogResult DialogResult = DialogResult.None; public object ResultObject = null; public SecureThreadState State = SecureThreadState.None; } public ProtectedDialog(UIFormConstructor fnConstruct, UIFormResultBuilder fnResultBuilder) { if(fnConstruct == null) { Debug.Assert(false); throw new ArgumentNullException("fnConstruct"); } if(fnResultBuilder == null) { Debug.Assert(false); throw new ArgumentNullException("fnResultBuilder"); } m_fnConstruct = fnConstruct; m_fnResultBuilder = fnResultBuilder; } public DialogResult ShowDialog(out object objResult, object objConstructParam) { objResult = null; ProcessMessagesEx(); // Creating a window on the new desktop spawns a CtfMon.exe child // process by default. On Windows Vista, this process is terminated // correctly when the desktop is closed. However, on Windows 7 it // isn't terminated (probably a bug); creating multiple desktops // accumulates CtfMon.exe child processes. ChildProcessesSnapshot cpsCtfMons = new ChildProcessesSnapshot( "CtfMon.exe"); ClipboardEventChainBlocker ccb = new ClipboardEventChainBlocker(); byte[] pbClipHash = ClipboardUtil.ComputeHash(); SecureThreadInfo stp = new SecureThreadInfo(); foreach(Screen sc in Screen.AllScreens) { Bitmap bmpBack = UIUtil.CreateScreenshot(sc); if(bmpBack != null) UIUtil.DimImage(bmpBack); stp.BackgroundBitmaps.Add(bmpBack); } DialogResult dr = DialogResult.None; try { uint uOrgThreadId = NativeMethods.GetCurrentThreadId(); IntPtr pOrgDesktop = NativeMethods.GetThreadDesktop(uOrgThreadId); string strName = "D" + Convert.ToBase64String( CryptoRandom.Instance.GetRandomBytes(16), Base64FormattingOptions.None); strName = strName.Replace(@"+", string.Empty); strName = strName.Replace(@"/", string.Empty); strName = strName.Replace(@"=", string.Empty); if(strName.Length > 15) strName = strName.Substring(0, 15); NativeMethods.DesktopFlags deskFlags = (NativeMethods.DesktopFlags.CreateMenu | NativeMethods.DesktopFlags.CreateWindow | NativeMethods.DesktopFlags.ReadObjects | NativeMethods.DesktopFlags.WriteObjects | NativeMethods.DesktopFlags.SwitchDesktop); IntPtr pNewDesktop = NativeMethods.CreateDesktop(strName, null, IntPtr.Zero, 0, deskFlags, IntPtr.Zero); if(pNewDesktop == IntPtr.Zero) throw new InvalidOperationException(); bool bNameSupported = NativeMethods.DesktopNameContains(pNewDesktop, strName).GetValueOrDefault(false); Debug.Assert(bNameSupported); stp.ThreadDesktop = pNewDesktop; stp.FormConstructParam = objConstructParam; Thread th = new Thread(this.SecureDialogThread); th.CurrentCulture = Thread.CurrentThread.CurrentCulture; th.CurrentUICulture = Thread.CurrentThread.CurrentUICulture; th.Start(stp); SecureThreadState st = SecureThreadState.None; while(st != SecureThreadState.Terminated) { th.Join(150); lock(stp) { st = stp.State; } if((st == SecureThreadState.ShowingDialog) && bNameSupported) { IntPtr hCurDesk = NativeMethods.OpenInputDesktop(0, false, NativeMethods.DesktopFlags.ReadObjects); if(hCurDesk == IntPtr.Zero) { Debug.Assert(false); continue; } if(hCurDesk == pNewDesktop) { if(!NativeMethods.CloseDesktop(hCurDesk)) { Debug.Assert(false); } continue; } bool? obOnSec = NativeMethods.DesktopNameContains(hCurDesk, strName); if(!NativeMethods.CloseDesktop(hCurDesk)) { Debug.Assert(false); } lock(stp) { st = stp.State; } // Update; might have changed if(obOnSec.HasValue && !obOnSec.Value && (st == SecureThreadState.ShowingDialog)) HandleUnexpectedDesktopSwitch(pOrgDesktop, pNewDesktop, stp); } } if(!NativeMethods.SwitchDesktop(pOrgDesktop)) { Debug.Assert(false); } NativeMethods.SetThreadDesktop(pOrgDesktop); th.Join(); // Ensure thread terminated before closing desktop if(!NativeMethods.CloseDesktop(pNewDesktop)) { Debug.Assert(false); } NativeMethods.CloseDesktop(pOrgDesktop); // Optional dr = stp.DialogResult; objResult = stp.ResultObject; } catch(Exception) { Debug.Assert(false); } byte[] pbNewClipHash = ClipboardUtil.ComputeHash(); if((pbClipHash != null) && (pbNewClipHash != null) && !MemUtil.ArraysEqual(pbClipHash, pbNewClipHash)) ClipboardUtil.Clear(); ccb.Dispose(); foreach(Bitmap bmpBack in stp.BackgroundBitmaps) { if(bmpBack != null) bmpBack.Dispose(); } stp.BackgroundBitmaps.Clear(); cpsCtfMons.TerminateNewChildsAsync(4100); // If something failed, show the dialog on the normal desktop if(dr == DialogResult.None) { Form f = m_fnConstruct(objConstructParam); dr = f.ShowDialog(); objResult = m_fnResultBuilder(f); UIUtil.DestroyForm(f); } return dr; } private static void ProcessMessagesEx() { Application.DoEvents(); Thread.Sleep(5); Application.DoEvents(); } private void SecureDialogThread(object oParam) { SecureThreadInfo stp = (oParam as SecureThreadInfo); if(stp == null) { Debug.Assert(false); return; } List lBackForms = new List(); BackgroundForm formBackPrimary = null; // bool bLangBar = false; try { if(!NativeMethods.SetThreadDesktop(stp.ThreadDesktop)) { Debug.Assert(false); return; } ProcessMessagesEx(); // Test whether we're really on the secure desktop if(NativeMethods.GetThreadDesktop(NativeMethods.GetCurrentThreadId()) != stp.ThreadDesktop) { Debug.Assert(false); return; } // Disabling IME is not required anymore; we terminate // CtfMon.exe child processes manually // try { NativeMethods.ImmDisableIME(0); } // Always false on 2000/XP // catch(Exception) { Debug.Assert(!WinUtil.IsAtLeastWindows2000); } ProcessMessagesEx(); Screen[] vScreens = Screen.AllScreens; Screen scPrimary = Screen.PrimaryScreen; Debug.Assert(vScreens.Length == stp.BackgroundBitmaps.Count); int sMin = Math.Min(vScreens.Length, stp.BackgroundBitmaps.Count); for(int i = sMin - 1; i >= 0; --i) { Bitmap bmpBack = stp.BackgroundBitmaps[i]; if(bmpBack == null) continue; Debug.Assert(bmpBack.Size == vScreens[i].Bounds.Size); BackgroundForm formBack = new BackgroundForm(bmpBack, vScreens[i]); lBackForms.Add(formBack); if(vScreens[i].Equals(scPrimary)) formBackPrimary = formBack; formBack.Show(); } if(formBackPrimary == null) { Debug.Assert(false); if(lBackForms.Count > 0) formBackPrimary = lBackForms[lBackForms.Count - 1]; } ProcessMessagesEx(); if(!NativeMethods.SwitchDesktop(stp.ThreadDesktop)) { Debug.Assert(false); } ProcessMessagesEx(); Form f = m_fnConstruct(stp.FormConstructParam); if(f == null) { Debug.Assert(false); return; } if(Program.Config.UI.SecureDesktopPlaySound) UIUtil.PlayUacSound(); // bLangBar = ShowLangBar(true); lock(stp) { stp.State = SecureThreadState.ShowingDialog; } stp.DialogResult = f.ShowDialog(formBackPrimary); stp.ResultObject = m_fnResultBuilder(f); UIUtil.DestroyForm(f); } catch(Exception) { Debug.Assert(false); } finally { // if(bLangBar) ShowLangBar(false); foreach(BackgroundForm formBack in lBackForms) { try { formBack.Close(); UIUtil.DestroyForm(formBack); } catch(Exception) { Debug.Assert(false); } } lock(stp) { stp.State = SecureThreadState.Terminated; } } } /* private static bool ShowLangBar(bool bShow) { try { return KpLibNativeMethods.TfShowLangBar(bShow ? KpLibNativeMethods.TF_SFT_SHOWNORMAL : KpLibNativeMethods.TF_SFT_HIDDEN); } catch(Exception) { } return false; } */ private static void HandleUnexpectedDesktopSwitch(IntPtr pOrgDesktop, IntPtr pNewDesktop, SecureThreadInfo stp) { NativeMethods.SwitchDesktop(pOrgDesktop); NativeMethods.SetThreadDesktop(pOrgDesktop); ProcessMessagesEx(); // Do not use MessageService.ShowWarning, because // it uses the top form's thread MessageService.ExternalIncrementMessageCount(); NativeMethods.MessageBoxFlags mbf = (NativeMethods.MessageBoxFlags.MB_ICONWARNING | NativeMethods.MessageBoxFlags.MB_TASKMODAL | NativeMethods.MessageBoxFlags.MB_SETFOREGROUND | NativeMethods.MessageBoxFlags.MB_TOPMOST); if(StrUtil.RightToLeft) mbf |= (NativeMethods.MessageBoxFlags.MB_RTLREADING | NativeMethods.MessageBoxFlags.MB_RIGHT); NativeMethods.MessageBox(IntPtr.Zero, KPRes.SecDeskOtherSwitched + MessageService.NewParagraph + KPRes.SecDeskSwitchBack, PwDefs.ShortProductName, mbf); MessageService.ExternalDecrementMessageCount(); SecureThreadState st; lock(stp) { st = stp.State; } if(st != SecureThreadState.Terminated) { NativeMethods.SwitchDesktop(pNewDesktop); ProcessMessagesEx(); } } /* private static void BlockPrintScreen(Form f, bool bBlock) { if(f == null) { Debug.Assert(false); return; } try { if(bBlock) { NativeMethods.RegisterHotKey(f.Handle, NativeMethods.IDHOT_SNAPDESKTOP, 0, NativeMethods.VK_SNAPSHOT); NativeMethods.RegisterHotKey(f.Handle, NativeMethods.IDHOT_SNAPWINDOW, NativeMethods.MOD_ALT, NativeMethods.VK_SNAPSHOT); } else { NativeMethods.UnregisterHotKey(f.Handle, NativeMethods.IDHOT_SNAPWINDOW); NativeMethods.UnregisterHotKey(f.Handle, NativeMethods.IDHOT_SNAPDESKTOP); } } catch(Exception) { Debug.Assert(false); } } */ } } KeePass/UI/ShowWarningsLogger.cs0000664000000000000000000001310512641461344015553 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.Forms; using KeePassLib; using KeePassLib.Interfaces; namespace KeePass.UI { /// /// This logger displays the current status in a status bar. /// As soon as a warning or error is logged, a dialog is opened /// and all consecutive log lines are sent to both loggers /// (status bar and dialog). /// public sealed class ShowWarningsLogger : IStatusLogger { private StatusBarLogger m_sbDefault = null; private StatusLoggerForm m_slForm = null; private Form m_fTaskbarWindow = null; private bool m_bStartedLogging = false; private bool m_bEndedLogging = false; private List> m_vCachedMessages = new List>(); [Obsolete] public ShowWarningsLogger(StatusBarLogger sbDefault) { m_sbDefault = sbDefault; } public ShowWarningsLogger(StatusBarLogger sbDefault, Form fTaskbarWindow) { m_sbDefault = sbDefault; m_fTaskbarWindow = fTaskbarWindow; } ~ShowWarningsLogger() { Debug.Assert(m_bEndedLogging); if(!m_bEndedLogging) EndLogging(); } public void StartLogging(string strOperation, bool bWriteOperationToLog) { Debug.Assert(!m_bStartedLogging && !m_bEndedLogging); if(m_sbDefault != null) m_sbDefault.StartLogging(strOperation, bWriteOperationToLog); if(m_slForm != null) m_slForm.StartLogging(strOperation, bWriteOperationToLog); if(m_fTaskbarWindow != null) { TaskbarList.SetProgressValue(m_fTaskbarWindow, 0, 100); TaskbarList.SetProgressState(m_fTaskbarWindow, TbpFlag.Normal); } m_bStartedLogging = true; if(bWriteOperationToLog) m_vCachedMessages.Add(new KeyValuePair( LogStatusType.Info, strOperation)); } public void EndLogging() { Debug.Assert(m_bStartedLogging && !m_bEndedLogging); if(m_sbDefault != null) m_sbDefault.EndLogging(); if(m_slForm != null) m_slForm.EndLogging(); if(m_fTaskbarWindow != null) TaskbarList.SetProgressState(m_fTaskbarWindow, TbpFlag.NoProgress); m_bEndedLogging = true; } /// /// Set the current progress in percent. /// /// Percent of work finished. /// Returns true if the caller should continue /// the current work. public bool SetProgress(uint uPercent) { Debug.Assert(m_bStartedLogging && !m_bEndedLogging); bool b = true; if(m_sbDefault != null) { if(!m_sbDefault.SetProgress(uPercent)) b = false; } if(m_slForm != null) { if(!m_slForm.SetProgress(uPercent)) b = false; } if(m_fTaskbarWindow != null) TaskbarList.SetProgressValue(m_fTaskbarWindow, uPercent, 100); return b; } /// /// Set the current status text. /// /// Status text. /// Type of the message. /// Returns true if the caller should continue /// the current work. public bool SetText(string strNewText, LogStatusType lsType) { Debug.Assert(m_bStartedLogging && !m_bEndedLogging); if((m_slForm == null) && ((lsType == LogStatusType.Warning) || (lsType == LogStatusType.Error))) { m_slForm = new StatusLoggerForm(); m_slForm.InitEx(false); m_slForm.Show(); m_slForm.BringToFront(); bool bLoggingStarted = false; foreach(KeyValuePair kvp in m_vCachedMessages) { if(!bLoggingStarted) { m_slForm.StartLogging(kvp.Value, true); bLoggingStarted = true; } else m_slForm.SetText(kvp.Value, kvp.Key); } Debug.Assert(bLoggingStarted); m_vCachedMessages.Clear(); } bool b = true; if(m_sbDefault != null) { if(!m_sbDefault.SetText(strNewText, lsType)) b = false; } if(m_slForm != null) { if(!m_slForm.SetText(strNewText, lsType)) b = false; } if(m_slForm == null) m_vCachedMessages.Add(new KeyValuePair( lsType, strNewText)); return b; } /// /// Check if the user cancelled the current work. /// /// Returns true if the caller should continue /// the current work. public bool ContinueWork() { Debug.Assert(m_bStartedLogging && !m_bEndedLogging); bool b = true; if(m_slForm != null) { if(!m_slForm.ContinueWork()) b = false; } if(m_sbDefault != null) { if(!m_sbDefault.ContinueWork()) b = false; } return b; } } } KeePass/UI/TaskbarList.cs0000664000000000000000000001131612641461344014207 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Diagnostics; using System.Windows.Forms; using System.Drawing; // using KeePass.Native; namespace KeePass.UI { public static class TaskbarList { private static bool m_bInitialized = false; private static ITaskbarList3 m_tbList = null; private static bool EnsureInitialized() { if(m_bInitialized) return (m_tbList != null); try { m_tbList = (ITaskbarList3)(new CTaskbarList()); m_tbList.HrInit(); } catch(Exception) { m_tbList = null; } m_bInitialized = true; return (m_tbList != null); } public static void SetProgressValue(Form fWindow, UInt64 ullCompleted, UInt64 ullTotal) { if(!EnsureInitialized()) return; try { m_tbList.SetProgressValue(fWindow.Handle, ullCompleted, ullTotal); } catch(Exception) { Debug.Assert(false); } } public static void SetProgressState(Form fWindow, TbpFlag tbpFlags) { if(!EnsureInitialized()) return; try { m_tbList.SetProgressState(fWindow.Handle, tbpFlags); } catch(Exception) { Debug.Assert(false); } } public static void SetOverlayIcon(Form fWindow, Icon iconOverlay, string strDescription) { if(!EnsureInitialized()) return; try { m_tbList.SetOverlayIcon(fWindow.Handle, ((iconOverlay == null) ? IntPtr.Zero : iconOverlay.Handle), strDescription); } catch(Exception) { Debug.Assert(false); } } /* public static void SetThumbnailClip(IntPtr hWnd, Rectangle? rect) { if(!EnsureInitialized()) return; try { if(!rect.HasValue) m_tbList.SetThumbnailClip(hWnd, IntPtr.Zero); else { NativeMethods.RECT rc = new NativeMethods.RECT(rect.Value); IntPtr prc = Marshal.AllocCoTaskMem(Marshal.SizeOf( typeof(NativeMethods.RECT))); Marshal.StructureToPtr(rc, prc, false); m_tbList.SetThumbnailClip(hWnd, prc); Marshal.DestroyStructure(prc, typeof(NativeMethods.RECT)); Marshal.FreeCoTaskMem(prc); } } catch(Exception) { Debug.Assert(false); } } */ } // States are mutually exclusive, see MSDN public enum TbpFlag { NoProgress = 0x0, Indeterminate = 0x1, Normal = 0x2, Error = 0x4, Paused = 0x8 } internal enum TbatFlag { None = 0x0, UseMdiThumbnail = 0x1, UseMdiLivePreview = 0x2 } [ComImport] [Guid("EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF")] // [Guid("C43DC798-95D1-4BEA-9030-BB99E2983A1A")] // 4 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] internal interface ITaskbarList3 { // ITaskbarList void HrInit(); void AddTab(IntPtr hwnd); void DeleteTab(IntPtr hwnd); void ActivateTab(IntPtr hwnd); void SetActiveAlt(IntPtr hwnd); // ITaskbarList2 void MarkFullscreenWindow(IntPtr hwnd, [MarshalAs(UnmanagedType.Bool)] bool fFullscreen); // ITaskbarList3 void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal); void SetProgressState(IntPtr hwnd, TbpFlag tbpFlags); void RegisterTab(IntPtr hwndTab, IntPtr hwndMDI); void UnregisterTab(IntPtr hwndTab); void SetTabOrder(IntPtr hwndTab, IntPtr hwndInsertBefore); void SetTabActive(IntPtr hwndTab, IntPtr hwndMDI, TbatFlag tbatFlags); void ThumbBarAddButtons(IntPtr hwnd, uint cButtons, IntPtr pButtons); void ThumbBarUpdateButtons(IntPtr hwnd, uint cButtons, IntPtr pButtons); void ThumbBarSetImageList(IntPtr hwnd, IntPtr himl); void SetOverlayIcon(IntPtr hwnd, IntPtr hIcon, [MarshalAs(UnmanagedType.LPWStr)] string pszDescription); void SetThumbnailTooltip(IntPtr hwnd, [MarshalAs(UnmanagedType.LPWStr)] string pszTip); void SetThumbnailClip(IntPtr hwnd, IntPtr prcClip); } [ComImport] [Guid("56FDF344-FD6D-11D0-958A-006097C9A090")] [ClassInterface(ClassInterfaceType.None)] internal class CTaskbarList { } } KeePass/UI/ToolStripRendering/0000775000000000000000000000000012641461344015230 5ustar rootrootKeePass/UI/ToolStripRendering/TsrPool.cs0000664000000000000000000001073512641461344017167 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.Windows.Forms; using KeePass.Util; using KeePassLib; using KeePassLib.Native; namespace KeePass.UI.ToolStripRendering { public static class TsrPool { private static List g_lFacs = null; private static int g_nStdFac = 0; internal static List Factories { get { EnsureFactories(); return g_lFacs; } } private static void EnsureFactories() { if(g_lFacs != null) return; TsrFactory fKP = new KeePassTsrFactory(); TsrFactory f81 = new Win81TsrFactory(); TsrFactory f10 = new Win10TsrFactory(); TsrFactory fP = new ProExtTsrFactory(); TsrFactory fS; try { fS = new SystemTsrFactory(); } catch(Exception) { Debug.Assert(false); fS = fP; } // https://sourceforge.net/p/keepass/discussion/329220/thread/fab85f1d/ // http://keepass.info/help/kb/tsrstyles_survey.html TsrFactory[] vPref; if(WinUtil.IsAtLeastWindows10) vPref = new TsrFactory[] { f10, f81, fKP, fP, fS }; else if(WinUtil.IsAtLeastWindows8) vPref = new TsrFactory[] { f81, f10, fKP, fP, fS }; else if(NativeLib.IsUnix()) vPref = new TsrFactory[] { f81, f10, fKP, fP, fS }; else // Older Windows systems vPref = new TsrFactory[] { fKP, f10, f81, fP, fS }; List l = new List(vPref); #if DEBUG for(int i = 0; i < l.Count; ++i) { TsrFactory f1 = l[i]; if(f1 == null) { Debug.Assert(false); continue; } if(f1.Uuid == null) { Debug.Assert(false); continue; } for(int j = i + 1; j < l.Count; ++j) { TsrFactory f2 = l[j]; if(f2 == null) { Debug.Assert(false); continue; } if(f2.Uuid == null) { Debug.Assert(false); continue; } Debug.Assert(!f1.Uuid.Equals(f2.Uuid)); } } #endif g_lFacs = l; g_nStdFac = l.Count; } private static TsrFactory GetFactory(PwUuid u) { if(u == null) { Debug.Assert(false); return null; } foreach(TsrFactory f in TsrPool.Factories) { if(u.Equals(f.Uuid)) return f; } return null; } public static bool AddFactory(TsrFactory f) { if(f == null) { Debug.Assert(false); return false; } TsrFactory fEx = GetFactory(f.Uuid); if(fEx != null) return false; // Exists already TsrPool.Factories.Add(f); return true; } public static bool RemoveFactory(PwUuid u) { if(u == null) { Debug.Assert(false); return false; } List l = TsrPool.Factories; int cInitial = l.Count; for(int i = l.Count - 1; i >= g_nStdFac; --i) { if(u.Equals(l[i].Uuid)) l.RemoveAt(i); } return (l.Count != cInitial); } internal static ToolStripRenderer GetBestRenderer(string strUuid) { PwUuid u = PwUuid.Zero; try { if(!string.IsNullOrEmpty(strUuid)) u = new PwUuid(Convert.FromBase64String(strUuid)); } catch(Exception) { Debug.Assert(false); } return GetBestRenderer(u); } internal static ToolStripRenderer GetBestRenderer(PwUuid u) { TsrFactory fPref = null; if((u == null) || PwUuid.Zero.Equals(u)) { } else fPref = GetFactory(u); List lPref = new List(); if(fPref != null) lPref.Add(fPref); lPref.AddRange(TsrPool.Factories); foreach(TsrFactory fCand in lPref) { if((fCand != null) && fCand.IsSupported()) { try { ToolStripRenderer tsr = fCand.CreateInstance(); if(tsr != null) return tsr; } catch(Exception) { Debug.Assert(false); } } } return null; } } } KeePass/UI/ToolStripRendering/Win10Tsr.cs0000664000000000000000000002266412641461344017160 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; using KeePassLib; namespace KeePass.UI.ToolStripRendering { internal sealed class Win10TsrFactory : TsrFactory { private PwUuid m_uuid = new PwUuid(new byte[] { 0x39, 0xE5, 0x05, 0x04, 0xB6, 0x56, 0x14, 0xE7, 0x4F, 0x13, 0x68, 0x51, 0x85, 0xB3, 0x87, 0xC6 }); public override PwUuid Uuid { get { return m_uuid; } } public override string Name { get { return "Windows 10"; } // Version 1511 } public override bool IsSupported() { return !UIUtil.IsHighContrast; } public override ToolStripRenderer CreateInstance() { return new Win10Tsr(); } } internal sealed class Win10Tsr : ProExtTsr { private sealed class Win10TsrColorTable : ProfessionalColorTable { private Color m_clrItemActiveBack = Color.FromArgb(204, 232, 255); private Color m_clrItemActiveBorder = Color.FromArgb(153, 209, 255); private Color m_clrItemSelBack = Color.FromArgb(229, 243, 255); private Color m_clrItemSelBorder = Color.FromArgb(204, 232, 255); private Color m_clrBarBack = Color.FromArgb(255, 255, 255); private Color m_clrMenuBack = Color.FromArgb(242, 242, 242); private Color m_clrImageBack = Color.FromArgb(240, 240, 240); private Color m_clrSubItemSelBack = Color.FromArgb(145, 201, 247); private Color m_clrSubItemSelBorder = Color.FromArgb(145, 201, 247); public override Color ButtonCheckedGradientBegin { get { return m_clrItemActiveBack; } } public override Color ButtonCheckedGradientEnd { get { return m_clrItemActiveBack; } } public override Color ButtonCheckedGradientMiddle { get { return m_clrItemActiveBack; } } public override Color ButtonCheckedHighlight { get { return m_clrItemActiveBack; } // Untested } public override Color ButtonCheckedHighlightBorder { get { return m_clrItemActiveBorder; } // Untested } public override Color ButtonPressedBorder { get { return m_clrItemActiveBorder; } } public override Color ButtonPressedGradientBegin { get { return m_clrItemActiveBack; } } public override Color ButtonPressedGradientEnd { get { return m_clrItemActiveBack; } } public override Color ButtonPressedGradientMiddle { get { return m_clrItemActiveBack; } } public override Color ButtonPressedHighlight { get { return m_clrItemActiveBack; } // Untested } public override Color ButtonPressedHighlightBorder { get { return m_clrItemActiveBorder; } // Untested } public override Color ButtonSelectedBorder { get { return m_clrItemSelBorder; } } public override Color ButtonSelectedGradientBegin { get { return m_clrItemSelBack; } } public override Color ButtonSelectedGradientEnd { get { return m_clrItemSelBack; } } public override Color ButtonSelectedGradientMiddle { get { return m_clrItemSelBack; } } public override Color ButtonSelectedHighlight { get { return m_clrItemSelBack; } // Untested } public override Color ButtonSelectedHighlightBorder { get { return m_clrItemSelBorder; } } public override Color CheckBackground { get { return Color.FromArgb(144, 200, 246); } } public override Color CheckPressedBackground { get { return Color.FromArgb(86, 176, 250); } } public override Color CheckSelectedBackground { get { return Color.FromArgb(86, 176, 250); } } public override Color GripDark { get { return Color.FromArgb(195, 195, 195); } } public override Color GripLight { get { return Color.FromArgb(228, 228, 228); } } public override Color ImageMarginGradientBegin { get { return m_clrImageBack; } } public override Color ImageMarginGradientEnd { get { return m_clrImageBack; } } public override Color ImageMarginGradientMiddle { get { return m_clrImageBack; } } public override Color ImageMarginRevealedGradientBegin { get { return m_clrImageBack; } } public override Color ImageMarginRevealedGradientEnd { get { return m_clrImageBack; } } public override Color ImageMarginRevealedGradientMiddle { get { return m_clrImageBack; } } public override Color MenuBorder { get { return Color.FromArgb(204, 204, 204); } } public override Color MenuItemBorder { get { return m_clrSubItemSelBorder; } } public override Color MenuItemSelected { get { return m_clrSubItemSelBack; } } public override Color MenuItemPressedGradientBegin { // Used by pressed root menu items and inactive drop-down // arrow buttons in toolbar comboboxes (?!) get { return m_clrItemActiveBack; } } public override Color MenuItemPressedGradientEnd { get { return m_clrItemActiveBack; } } public override Color MenuItemPressedGradientMiddle { get { return m_clrItemActiveBack; } } public override Color MenuItemSelectedGradientBegin { get { return m_clrItemSelBack; } } public override Color MenuItemSelectedGradientEnd { get { return m_clrItemSelBack; } } public override Color MenuStripGradientBegin { get { return m_clrBarBack; } } public override Color MenuStripGradientEnd { get { return m_clrBarBack; } } public override Color OverflowButtonGradientBegin { get { return Color.FromArgb(245, 245, 245); } } public override Color OverflowButtonGradientEnd { get { return Color.FromArgb(229, 229, 229); } } public override Color OverflowButtonGradientMiddle { get { return Color.FromArgb(237, 237, 237); } } public override Color RaftingContainerGradientBegin { get { return m_clrMenuBack; } // Untested } public override Color RaftingContainerGradientEnd { get { return m_clrMenuBack; } // Untested } public override Color SeparatorDark { // Menu separators are (215, 215, 215), // toolbar separators are (140, 140, 140); // SeparatorDark is used for both the menu and the toolbar get { return Color.FromArgb(177, 177, 177); } } public override Color SeparatorLight { get { return m_clrBarBack; } } public override Color StatusStripGradientBegin { get { return m_clrMenuBack; } } public override Color StatusStripGradientEnd { get { return m_clrMenuBack; } } public override Color ToolStripBorder { get { return m_clrMenuBack; } } public override Color ToolStripContentPanelGradientBegin { get { return m_clrMenuBack; } // Untested } public override Color ToolStripContentPanelGradientEnd { get { return m_clrMenuBack; } // Untested } public override Color ToolStripDropDownBackground { get { return m_clrMenuBack; } } public override Color ToolStripGradientBegin { get { return m_clrBarBack; } } public override Color ToolStripGradientEnd { get { return m_clrBarBack; } } public override Color ToolStripGradientMiddle { get { return m_clrBarBack; } } public override Color ToolStripPanelGradientBegin { get { return m_clrBarBack; } // Untested } public override Color ToolStripPanelGradientEnd { get { return m_clrBarBack; } // Untested } } public Win10Tsr() : base(new Win10TsrColorTable()) { } protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { ToolStripItem tsi = ((e != null) ? e.Item : null); if((tsi != null) && ((tsi.Owner is ContextMenuStrip) || (tsi.OwnerItem != null)) && tsi.Selected && !tsi.Enabled) { Rectangle rect = tsi.ContentRectangle; rect.Offset(0, -1); rect.Height += 1; // In image area (228, 228, 228), in text area (230, 230, 230) Color clrBack = Color.FromArgb(229, 229, 229); Color clrBorder = Color.FromArgb(229, 229, 229); SolidBrush br = new SolidBrush(clrBack); Pen p = new Pen(clrBorder); Graphics g = e.Graphics; if(g != null) { g.FillRectangle(br, rect); g.DrawRectangle(p, rect); } else { Debug.Assert(false); } p.Dispose(); br.Dispose(); } else base.OnRenderMenuItemBackground(e); } } } KeePass/UI/ToolStripRendering/VisualStyleTsr.cs0000664000000000000000000001667312641461344020551 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; using System.Drawing; using System.Diagnostics; // Parts and States: // http://msdn.microsoft.com/en-us/library/bb773210.aspx // How to Implement a Custom ToolStripRenderer: // http://msdn.microsoft.com/en-us/library/ms229720.aspx namespace KeePass.UI.ToolStripRendering { public sealed class VisualStyleTsr : ProExtTsr { private const string VsClassMenu = "MENU"; private const string VsClassToolBar = "TOOLBAR"; private const string VsClassReBar = "REBAR"; private enum VsMenuPart : int { MenuItemTmSchema = 1, MenuDropDownTmSchema = 2, MenuBarItemTmSchema = 3, MenuBarDropDownTmSchema = 4, ChevronTmSchema = 5, SeparatorTmSchema = 6, BarBackground = 7, BarItem = 8, PopupBackground = 9, PopupBorders = 10, PopupCheck = 11, PopupCheckBackground = 12, PopupGutter = 13, PopupItem = 14, PopupSeparator = 15, PopupSubMenu = 16, SystemClose = 17, SystemMaximize = 18, SystemMinimize = 19, SystemRestore = 20 } private enum VsMenuState : int { Default = 0, MbActive = 1, MbInactive = 2, MbiNormal = 1, MbiHot = 2, MbiPushed = 3, MbiDisabled = 4, MbiDisabledHot = 5, MbiDisabledPushed = 6, McCheckMarkNormal = 1, McCheckMarkDisabled = 2, McBulletNormal = 3, McBulletDisabled = 4, McbDisabled = 1, McbNormal = 2, McbBitmap = 3, MpiNormal = 1, MpiHot = 2, MpiDisabled = 3, MpiDisabledHot = 4, MsmNormal = 1, MsmDisabled = 2 }; private enum VsReBarPart : int { Gripper = 1, GripperVert = 2, Band = 3, Chevron = 4, ChevronVert = 5, Background = 6, Splitter = 7, SplitterVert = 8 } private VisualStyleRenderer m_r = null; private bool IsSupported { get { return (m_r != null); } } public VisualStyleTsr() : base() { try { if(VisualStyleRenderer.IsSupported) m_r = new VisualStyleRenderer(VsClassMenu, (int)VsMenuPart.BarBackground, (int)VsMenuState.MbActive); } catch(Exception) { } } private void DrawBackgroundEx(Graphics g, Rectangle rect, Control c, bool bCanPaintParent) { if(bCanPaintParent && m_r.IsBackgroundPartiallyTransparent() && (c != null)) m_r.DrawParentBackground(g, rect, c); m_r.DrawBackground(g, rect); #if DEBUG Color clr = Color.Red; string str = Environment.StackTrace; if(str.IndexOf("OnRenderMenuItemBackground") >= 0) clr = Color.Green; if(str.IndexOf("OnRenderToolStripBackground") >= 0) clr = Color.Blue; if(str.IndexOf("OnRenderToolStripBorder") >= 0) clr = Color.Pink; using(SolidBrush br = new SolidBrush(clr)) { using(Pen p = new Pen(UIUtil.LightenColor(clr, 0.5))) { g.FillRectangle(br, rect); g.DrawRectangle(p, rect); } } #endif } private void ConfigureForItem(ToolStripItem tsi) { bool bEnabled = tsi.Enabled; bool bPressed = tsi.Pressed; bool bHot = tsi.Selected; string c = VsClassMenu; if(tsi.IsOnDropDown) { const int p = (int)VsMenuPart.PopupItem; if(bEnabled) m_r.SetParameters(c, p, (int)(bHot ? VsMenuState.MpiHot : VsMenuState.MpiNormal)); else m_r.SetParameters(c, p, (int)(bHot ? VsMenuState.MpiDisabledHot : VsMenuState.MpiDisabled)); } else { const int p = (int)VsMenuPart.BarItem; if(tsi.Pressed) m_r.SetParameters(c, p, (int)(bEnabled ? VsMenuState.MbiPushed : VsMenuState.MbiDisabledPushed)); else if(bEnabled) m_r.SetParameters(c, p, (int)(bHot ? VsMenuState.MbiHot : VsMenuState.MbiNormal)); else m_r.SetParameters(c, p, (int)(bHot ? VsMenuState.MbiDisabledHot : VsMenuState.MbiDisabled)); } } private delegate bool TsrBoolDelegate(); private delegate void TsrFuncDelegate(T e); private void RenderOrBase(T e, TsrBoolDelegate f, TsrFuncDelegate fBase) { bool bBase = true; try { if(this.IsSupported) bBase = !f(); } catch(Exception) { Debug.Assert(false); } if(bBase) fBase(e); } private Rectangle GetBackgroundRect(Graphics g, ToolStripItem tsi) { if(!tsi.IsOnDropDown) return new Rectangle(0, 0, tsi.Width, tsi.Height - 1); Rectangle rect = new Rectangle(Point.Empty, tsi.Size); Size szBorder = GetPopupBorderSize(g); rect.Inflate(-szBorder.Width, 0); rect.X += 1; rect.Width -= 1; return rect; } private Size GetPopupBorderSize(Graphics g) { Size sz = m_r.GetPartSize(g, ThemeSizeType.Minimum); if(sz.Width < 1) { Debug.Assert(false); sz.Width = 1; } if(sz.Height < 1) { Debug.Assert(false); sz.Height = 1; } return sz; } protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { TsrBoolDelegate f = delegate() { ConfigureForItem(e.Item); DrawBackgroundEx(e.Graphics, GetBackgroundRect(e.Graphics, e.Item), e.ToolStrip, false); return true; }; RenderOrBase(e, f, base.OnRenderMenuItemBackground); } protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) { TsrBoolDelegate f = delegate() { Debug.Assert(e.AffectedBounds == e.ToolStrip.ClientRectangle); VisualStyleElement vse = VisualStyleElement.CreateElement(VsClassMenu, (int)VsMenuPart.BarBackground, (int)VsMenuState.MbInactive); if(!VisualStyleRenderer.IsElementDefined(vse)) vse = VisualStyleElement.CreateElement(VsClassMenu, (int)VsMenuPart.BarBackground, 0); m_r.SetParameters(vse); DrawBackgroundEx(e.Graphics, e.ToolStrip.ClientRectangle, e.ToolStrip, true); return true; }; RenderOrBase(e, f, base.OnRenderToolStripBackground); } protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) { TsrBoolDelegate f = delegate() { Debug.Assert(e.AffectedBounds == e.ToolStrip.ClientRectangle); m_r.SetParameters(VsClassMenu, (int)VsMenuPart.PopupBorders, 0); Graphics g = e.Graphics; Rectangle rectClient = e.ToolStrip.ClientRectangle; Rectangle rect = rectClient; Size szBorder = GetPopupBorderSize(e.Graphics); rect.Inflate(-szBorder.Width, -szBorder.Height); Region rgOrgClip = g.Clip.Clone(); g.ExcludeClip(rect); DrawBackgroundEx(g, rectClient, e.ToolStrip, false); g.Clip = rgOrgClip; return true; }; RenderOrBase(e, f, base.OnRenderToolStripBorder); } } } */ KeePass/UI/ToolStripRendering/Win81Tsr.cs0000664000000000000000000002256312641461344017166 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; using KeePassLib; namespace KeePass.UI.ToolStripRendering { internal sealed class Win81TsrFactory : TsrFactory { private PwUuid m_uuid = new PwUuid(new byte[] { 0xEF, 0x5B, 0x4B, 0xE8, 0x49, 0xD1, 0x5E, 0x71, 0x65, 0xE0, 0x26, 0x3B, 0x03, 0xBD, 0x8C, 0x3B }); public override PwUuid Uuid { get { return m_uuid; } } public override string Name { get { return "Windows 8.1"; } } public override bool IsSupported() { return !UIUtil.IsHighContrast; } public override ToolStripRenderer CreateInstance() { return new Win81Tsr(); } } internal sealed class Win81Tsr : ProExtTsr { private sealed class Win81TsrColorTable : ProfessionalColorTable { private Color m_clrItemActiveBack = Color.FromArgb(184, 216, 249); private Color m_clrItemActiveBorder = Color.FromArgb(98, 163, 229); private Color m_clrItemSelBack = Color.FromArgb(213, 231, 248); private Color m_clrItemSelBorder = Color.FromArgb(122, 177, 232); private Color m_clrBarBack = Color.FromArgb(245, 246, 247); private Color m_clrMenuBack = Color.FromArgb(240, 240, 240); private Color m_clrImageBack = Color.FromArgb(240, 240, 240); private Color m_clrSubItemSelBack = Color.FromArgb(209, 226, 242); private Color m_clrSubItemSelBorder = Color.FromArgb(120, 174, 229); public override Color ButtonCheckedGradientBegin { get { return m_clrItemActiveBack; } } public override Color ButtonCheckedGradientEnd { get { return m_clrItemActiveBack; } } public override Color ButtonCheckedGradientMiddle { get { return m_clrItemActiveBack; } } public override Color ButtonCheckedHighlight { get { return m_clrItemActiveBack; } // Untested } public override Color ButtonCheckedHighlightBorder { get { return m_clrItemActiveBorder; } // Untested } public override Color ButtonPressedBorder { get { return m_clrItemActiveBorder; } } public override Color ButtonPressedGradientBegin { get { return m_clrItemActiveBack; } } public override Color ButtonPressedGradientEnd { get { return m_clrItemActiveBack; } } public override Color ButtonPressedGradientMiddle { get { return m_clrItemActiveBack; } } public override Color ButtonPressedHighlight { get { return m_clrItemActiveBack; } // Untested } public override Color ButtonPressedHighlightBorder { get { return m_clrItemActiveBorder; } // Untested } public override Color ButtonSelectedBorder { get { return m_clrItemSelBorder; } } public override Color ButtonSelectedGradientBegin { get { return m_clrItemSelBack; } } public override Color ButtonSelectedGradientEnd { get { return m_clrItemSelBack; } } public override Color ButtonSelectedGradientMiddle { get { return m_clrItemSelBack; } } public override Color ButtonSelectedHighlight { get { return m_clrItemSelBack; } // Untested } public override Color ButtonSelectedHighlightBorder { get { return m_clrItemSelBorder; } } public override Color CheckBackground { get { return Color.FromArgb(192, 221, 235); } } public override Color CheckPressedBackground { get { return Color.FromArgb(168, 210, 236); } } public override Color CheckSelectedBackground { get { return Color.FromArgb(168, 210, 236); } } public override Color GripDark { get { return Color.FromArgb(187, 188, 189); } } public override Color GripLight { get { return Color.FromArgb(252, 252, 253); } } public override Color ImageMarginGradientBegin { get { return m_clrImageBack; } } public override Color ImageMarginGradientEnd { get { return m_clrImageBack; } } public override Color ImageMarginGradientMiddle { get { return m_clrImageBack; } } public override Color ImageMarginRevealedGradientBegin { get { return m_clrImageBack; } } public override Color ImageMarginRevealedGradientEnd { get { return m_clrImageBack; } } public override Color ImageMarginRevealedGradientMiddle { get { return m_clrImageBack; } } public override Color MenuBorder { get { return Color.FromArgb(151, 151, 151); } } public override Color MenuItemBorder { get { return m_clrSubItemSelBorder; } } public override Color MenuItemSelected { get { return m_clrSubItemSelBack; } } public override Color MenuItemPressedGradientBegin { // Used by pressed root menu items and inactive drop-down // arrow buttons in toolbar comboboxes (?!) get { return m_clrItemActiveBack; } } public override Color MenuItemPressedGradientEnd { get { return m_clrItemActiveBack; } } public override Color MenuItemPressedGradientMiddle { get { return m_clrItemActiveBack; } } public override Color MenuItemSelectedGradientBegin { get { return m_clrItemSelBack; } } public override Color MenuItemSelectedGradientEnd { get { return m_clrItemSelBack; } } public override Color MenuStripGradientBegin { get { return m_clrBarBack; } } public override Color MenuStripGradientEnd { get { return m_clrBarBack; } } public override Color OverflowButtonGradientBegin { get { return Color.FromArgb(245, 245, 245); } } public override Color OverflowButtonGradientEnd { get { return Color.FromArgb(229, 229, 229); } } public override Color OverflowButtonGradientMiddle { get { return Color.FromArgb(237, 237, 237); } } public override Color RaftingContainerGradientBegin { get { return m_clrMenuBack; } // Untested } public override Color RaftingContainerGradientEnd { get { return m_clrMenuBack; } // Untested } public override Color SeparatorDark { // Menu separators are (215, 215, 215), // toolbar separators are (135, 135, 136); // SeparatorDark is used for both the menu and the toolbar get { return Color.FromArgb(175, 175, 175); } } public override Color SeparatorLight { get { return Color.FromArgb(248, 249, 249); } } public override Color StatusStripGradientBegin { get { return m_clrMenuBack; } } public override Color StatusStripGradientEnd { get { return m_clrMenuBack; } } public override Color ToolStripBorder { get { return m_clrMenuBack; } } public override Color ToolStripContentPanelGradientBegin { get { return m_clrMenuBack; } // Untested } public override Color ToolStripContentPanelGradientEnd { get { return m_clrMenuBack; } // Untested } public override Color ToolStripDropDownBackground { get { return m_clrMenuBack; } } public override Color ToolStripGradientBegin { get { return m_clrBarBack; } } public override Color ToolStripGradientEnd { get { return m_clrBarBack; } } public override Color ToolStripGradientMiddle { get { return m_clrBarBack; } } public override Color ToolStripPanelGradientBegin { get { return m_clrBarBack; } // Untested } public override Color ToolStripPanelGradientEnd { get { return m_clrBarBack; } // Untested } } public Win81Tsr() : base(new Win81TsrColorTable()) { } protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { ToolStripItem tsi = ((e != null) ? e.Item : null); if((tsi != null) && ((tsi.Owner is ContextMenuStrip) || (tsi.OwnerItem != null)) && tsi.Selected && !tsi.Enabled) { Rectangle rect = tsi.ContentRectangle; rect.Offset(0, -1); rect.Height += 1; Color clrBack = Color.FromArgb(225, 225, 225); Color clrBorder = Color.FromArgb(174, 174, 174); SolidBrush br = new SolidBrush(clrBack); Pen p = new Pen(clrBorder); Graphics g = e.Graphics; if(g != null) { g.FillRectangle(br, rect); g.DrawRectangle(p, rect); } else { Debug.Assert(false); } p.Dispose(); br.Dispose(); } else base.OnRenderMenuItemBackground(e); } } } KeePass/UI/ToolStripRendering/KeePassTsr.cs0000664000000000000000000001322412641461344017605 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; using KeePass.Resources; using KeePassLib; using KeePassLib.Utility; namespace KeePass.UI.ToolStripRendering { internal sealed class KeePassTsrFactory : TsrFactory { private PwUuid m_uuid = new PwUuid(new byte[] { 0x05, 0x0A, 0x57, 0xF0, 0x7B, 0xBC, 0x34, 0xAF, 0x5B, 0x8F, 0xA1, 0x31, 0xDB, 0xBF, 0x2B, 0xEC }); public override PwUuid Uuid { get { return m_uuid; } } public override string Name { get { return (PwDefs.ShortProductName + " - " + KPRes.Gradient); } } public override bool IsSupported() { // bool bVisualStyles = true; // try { bVisualStyles = VisualStyleRenderer.IsSupported; } // catch(Exception) { Debug.Assert(false); bVisualStyles = false; } // Various drawing bugs under Mono (gradients too light, incorrect // painting of popup menus, paint method not invoked for disabled // items, ...) bool bMono = MonoWorkarounds.IsRequired(); return (!UIUtil.IsHighContrast && !bMono); } public override ToolStripRenderer CreateInstance() { return new KeePassTsr(); } } internal sealed class KeePassTsr : ProExtTsr { private sealed class KeePassTsrColorTable : ProfessionalColorTable { private const double m_dblLight = 0.75; private const double m_dblDark = 0.05; internal static Color StartGradient(Color clr) { return UIUtil.LightenColor(clr, m_dblLight); } internal static Color EndGradient(Color clr) { return UIUtil.DarkenColor(clr, m_dblDark); } public override Color ButtonPressedGradientBegin { get { return StartGradient(this.ButtonPressedGradientMiddle); } } public override Color ButtonPressedGradientEnd { get { return EndGradient(this.ButtonPressedGradientMiddle); } } public override Color ButtonSelectedGradientBegin { get { return StartGradient(this.ButtonSelectedGradientMiddle); } } public override Color ButtonSelectedGradientEnd { get { return EndGradient(this.ButtonSelectedGradientMiddle); } } public override Color ImageMarginGradientBegin { get { return StartGradient(this.ImageMarginGradientMiddle); } } public override Color ImageMarginGradientEnd { get { return EndGradient(this.ImageMarginGradientMiddle); } } /* public override Color MenuItemPressedGradientBegin { get { return StartGradient(this.MenuItemPressedGradientMiddle); } } public override Color MenuItemPressedGradientEnd { get { return EndGradient(this.MenuItemPressedGradientMiddle); } } */ public override Color MenuItemSelectedGradientBegin { get { return StartGradient(this.MenuItemSelected); } } public override Color MenuItemSelectedGradientEnd { get { return EndGradient(this.MenuItemSelected); } } } public KeePassTsr() : base(new KeePassTsrColorTable()) { } protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { ToolStripItem tsi = ((e != null) ? e.Item : null); if((tsi != null) && ((tsi.Owner is ContextMenuStrip) || (tsi.OwnerItem != null)) && tsi.Selected) { Rectangle rect = tsi.ContentRectangle; rect.Offset(0, -1); rect.Height += 1; Color clrStart = KeePassTsrColorTable.StartGradient(this.ColorTable.MenuItemSelected); Color clrEnd = KeePassTsrColorTable.EndGradient(this.ColorTable.MenuItemSelected); Color clrBorder = this.ColorTable.MenuItemBorder; if(!tsi.Enabled) { Color clrBase = this.ColorTable.MenuStripGradientEnd; clrStart = UIUtil.ColorTowardsGrayscale(clrStart, clrBase, 0.5); clrEnd = UIUtil.ColorTowardsGrayscale(clrEnd, clrBase, 0.2); clrBorder = UIUtil.ColorTowardsGrayscale(clrBorder, clrBase, 0.2); } Graphics g = e.Graphics; if(g != null) { LinearGradientBrush br = new LinearGradientBrush(rect, clrStart, clrEnd, LinearGradientMode.Vertical); Pen p = new Pen(clrBorder); SmoothingMode smOrg = g.SmoothingMode; g.SmoothingMode = SmoothingMode.HighQuality; GraphicsPath gp = UIUtil.CreateRoundedRectangle(rect.X, rect.Y, rect.Width, rect.Height, DpiUtil.ScaleIntY(2)); if(gp != null) { g.FillPath(br, gp); g.DrawPath(p, gp); gp.Dispose(); } else // Shouldn't ever happen... { Debug.Assert(false); g.FillRectangle(br, rect); g.DrawRectangle(p, rect); } g.SmoothingMode = smOrg; p.Dispose(); br.Dispose(); return; } else { Debug.Assert(false); } } base.OnRenderMenuItemBackground(e); } } } KeePass/UI/ToolStripRendering/SystemTsr.cs0000664000000000000000000003042012641461344017533 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; using KeePass.Resources; using KeePassLib; namespace KeePass.UI.ToolStripRendering { internal sealed class SystemTsrFactory : TsrFactory { private PwUuid m_uuid = new PwUuid(new byte[] { 0x6B, 0xCD, 0x45, 0xFA, 0xA1, 0x3F, 0x71, 0xEC, 0x7B, 0x5E, 0x97, 0x38, 0x8D, 0xB1, 0xCB, 0x09 }); public override PwUuid Uuid { get { return m_uuid; } } public override string Name { get { return (KPRes.System + " - " + KPRes.ClassicAdj); } } public override ToolStripRenderer CreateInstance() { return new SystemTsr(); } } // Checkboxes are rendered incorrectly /* internal sealed class SystemTsrFactory : TsrFactory { private PwUuid m_uuid = new PwUuid(new byte[] { 0x03, 0xF8, 0x67, 0xAB, 0x21, 0x96, 0x43, 0xED, 0xA5, 0xFE, 0x9E, 0x43, 0x4A, 0x35, 0x89, 0xAA }); public override PwUuid Uuid { get { return m_uuid; } } public override string Name { get { return (KPRes.System + " - " + KPRes.ClassicAdj); } } public override ToolStripRenderer CreateInstance() { return new ToolStripSystemRenderer(); } } */ internal sealed class SystemTsr : ProExtTsr { private sealed class SystemTsrColorTable : ProfessionalColorTable { private Color m_clrItemActiveBack = SystemColors.Control; private Color m_clrItemActiveBorder = SystemColors.ControlDarkDark; private Color m_clrItemSelBack = SystemColors.Control; private Color m_clrItemSelBorder = SystemColors.ControlDark; private Color m_clrBarBack = SystemColors.MenuBar; private Color m_clrMenuBack = SystemColors.Menu; private Color m_clrImageBack = SystemColors.Menu; private Color m_clrSubItemSelBack = SystemColors.MenuHighlight; private Color m_clrSubItemSelBorder = SystemColors.MenuHighlight; public override Color ButtonCheckedGradientBegin { get { return m_clrItemActiveBack; } } public override Color ButtonCheckedGradientEnd { get { return m_clrItemActiveBack; } } public override Color ButtonCheckedGradientMiddle { get { return m_clrItemActiveBack; } } public override Color ButtonCheckedHighlight { get { return m_clrItemActiveBack; } // Untested } public override Color ButtonCheckedHighlightBorder { get { return m_clrItemActiveBorder; } // Untested } public override Color ButtonPressedBorder { get { return m_clrItemActiveBorder; } } public override Color ButtonPressedGradientBegin { get { return m_clrItemActiveBack; } } public override Color ButtonPressedGradientEnd { get { return m_clrItemActiveBack; } } public override Color ButtonPressedGradientMiddle { get { return m_clrItemActiveBack; } } public override Color ButtonPressedHighlight { get { return m_clrItemActiveBack; } // Untested } public override Color ButtonPressedHighlightBorder { get { return m_clrItemActiveBorder; } // Untested } public override Color ButtonSelectedBorder { get { return m_clrItemSelBorder; } } public override Color ButtonSelectedGradientBegin { get { return m_clrItemSelBack; } } public override Color ButtonSelectedGradientEnd { get { return m_clrItemSelBack; } } public override Color ButtonSelectedGradientMiddle { get { return m_clrItemSelBack; } } public override Color ButtonSelectedHighlight { get { return m_clrItemSelBack; } // Untested } public override Color ButtonSelectedHighlightBorder { get { return m_clrItemSelBorder; } } public override Color CheckBackground { get { return m_clrMenuBack; } } public override Color CheckPressedBackground { get { return m_clrMenuBack; } } public override Color CheckSelectedBackground { get { return m_clrMenuBack; } } public override Color GripDark { get { return SystemColors.ControlDark; } } public override Color GripLight { get { return SystemColors.ControlLight; } } public override Color ImageMarginGradientBegin { get { return m_clrImageBack; } } public override Color ImageMarginGradientEnd { get { return m_clrImageBack; } } public override Color ImageMarginGradientMiddle { get { return m_clrImageBack; } } public override Color ImageMarginRevealedGradientBegin { get { return m_clrImageBack; } } public override Color ImageMarginRevealedGradientEnd { get { return m_clrImageBack; } } public override Color ImageMarginRevealedGradientMiddle { get { return m_clrImageBack; } } public override Color MenuBorder { get { return SystemColors.ActiveBorder; } } public override Color MenuItemBorder { get { return m_clrSubItemSelBorder; } } public override Color MenuItemSelected { get { return m_clrSubItemSelBack; } } public override Color MenuItemPressedGradientBegin { // Used by pressed root menu items and inactive drop-down // arrow buttons in toolbar comboboxes (?!) get { return m_clrMenuBack; } } public override Color MenuItemPressedGradientEnd { get { return m_clrItemActiveBack; } } public override Color MenuItemPressedGradientMiddle { get { return m_clrItemActiveBack; } } public override Color MenuItemSelectedGradientBegin { get { return m_clrItemSelBack; } } public override Color MenuItemSelectedGradientEnd { get { return m_clrItemSelBack; } } public override Color MenuStripGradientBegin { get { return m_clrBarBack; } } public override Color MenuStripGradientEnd { get { return m_clrBarBack; } } public override Color OverflowButtonGradientBegin { get { return SystemColors.ControlLight; } } public override Color OverflowButtonGradientEnd { get { return SystemColors.ControlDark; } } public override Color OverflowButtonGradientMiddle { get { return SystemColors.Control; } } public override Color RaftingContainerGradientBegin { get { return m_clrMenuBack; } // Untested } public override Color RaftingContainerGradientEnd { get { return m_clrMenuBack; } // Untested } public override Color SeparatorDark { // SeparatorDark is used for both the menu and the toolbar get { return SystemColors.ControlDark; } } public override Color SeparatorLight { get { return m_clrBarBack; } } public override Color StatusStripGradientBegin { get { return m_clrMenuBack; } } public override Color StatusStripGradientEnd { get { return m_clrMenuBack; } } public override Color ToolStripBorder { get { return m_clrMenuBack; } } public override Color ToolStripContentPanelGradientBegin { get { return m_clrMenuBack; } // Untested } public override Color ToolStripContentPanelGradientEnd { get { return m_clrMenuBack; } // Untested } public override Color ToolStripDropDownBackground { get { return m_clrMenuBack; } } public override Color ToolStripGradientBegin { get { return m_clrBarBack; } } public override Color ToolStripGradientEnd { get { return m_clrBarBack; } } public override Color ToolStripGradientMiddle { get { return m_clrBarBack; } } public override Color ToolStripPanelGradientBegin { get { return m_clrBarBack; } // Untested } public override Color ToolStripPanelGradientEnd { get { return m_clrBarBack; } // Untested } } protected override bool EnsureTextContrast { get { return false; } // Prevent color override by base class } public SystemTsr() : base(new SystemTsrColorTable()) { } protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) { if(e != null) { ToolStripItem tsi = e.Item; if(tsi != null) { bool bDropDown = (tsi.OwnerItem != null); bool bCtxMenu = (tsi.Owner is ContextMenuStrip); Color clr = tsi.ForeColor; if(!tsi.Enabled && !tsi.Selected) { if(!UIUtil.IsHighContrast) { // Draw light "shadow" Rectangle r = e.TextRectangle; int dx = DpiUtil.ScaleIntX(128) / 128; // Force floor int dy = DpiUtil.ScaleIntY(128) / 128; // Force floor r.Offset(dx, dy); TextRenderer.DrawText(e.Graphics, e.Text, e.TextFont, r, SystemColors.HighlightText, e.TextFormat); } clr = SystemColors.GrayText; } else if(tsi.Selected && (bDropDown || bCtxMenu)) clr = SystemColors.HighlightText; else if(clr.ToArgb() == Control.DefaultForeColor.ToArgb()) clr = SystemColors.MenuText; else { bool bDarkBack = this.IsDarkStyle; bool bDarkText = UIUtil.IsDarkColor(clr); if((bDarkBack && bDarkText) || (!bDarkBack && !bDarkText)) { Debug.Assert(false); clr = SystemColors.MenuText; } } e.TextColor = clr; } } else { Debug.Assert(false); } base.OnRenderItemText(e); } protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { ToolStripItem tsi = ((e != null) ? e.Item : null); bool bCtxItem = ((tsi != null) ? (tsi.Owner is ContextMenuStrip) : false); if((tsi != null) && (bCtxItem || (tsi.OwnerItem != null)) && tsi.Selected && !tsi.Enabled) { Rectangle rect = tsi.ContentRectangle; rect.Offset(0, -1); rect.Height += 1; Color clrBack = this.ColorTable.MenuItemSelected; Color clrBorder = clrBack; SolidBrush br = new SolidBrush(clrBack); Pen p = new Pen(clrBorder); Graphics g = e.Graphics; if(g != null) { g.FillRectangle(br, rect); g.DrawRectangle(p, rect); } else { Debug.Assert(false); } p.Dispose(); br.Dispose(); } /* else if((tsi != null) && !bCtxItem && (tsi.OwnerItem == null) && (tsi.Selected || tsi.Pressed)) { Rectangle rect = tsi.ContentRectangle; rect.Offset(0, -1); rect.Height += 1; // ButtonState bs = (tsi.Pressed ? ButtonState.Pushed : ButtonState.Normal); // if(!tsi.Enabled) bs = ButtonState.Inactive; // ControlPaint.DrawButton(e.Graphics, rect, bs); DrawButton(e.Graphics, rect, tsi.Pressed); } */ else base.OnRenderMenuItemBackground(e); } /* private static void DrawButton(Graphics g, Rectangle r, bool bPressed) { using(SolidBrush brBack = new SolidBrush(SystemColors.Control)) { g.FillRectangle(brBack, r); } Color clrTL = (bPressed ? SystemColors.ButtonShadow : SystemColors.ButtonHighlight); Color clrBR = (bPressed ? SystemColors.ButtonHighlight : SystemColors.ButtonShadow); int x1 = r.Left + 2, y1 = r.Top; int x2 = r.Right - 3, y2 = r.Bottom; using(Pen pTL = new Pen(clrTL)) { g.DrawLine(pTL, x1, y1, x2, y1); g.DrawLine(pTL, x1, y1, x1, y2); } using(Pen pBR = new Pen(clrBR)) { g.DrawLine(pBR, x1, y2, x2, y2); g.DrawLine(pBR, x2, y1, x2, y2); } } */ } } KeePass/UI/ToolStripRendering/TsrFactory.cs0000664000000000000000000000237112641461344017662 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using KeePassLib; namespace KeePass.UI.ToolStripRendering { public abstract class TsrFactory { public abstract PwUuid Uuid { get; } public abstract string Name { get; } public virtual bool IsSupported() { return true; } public abstract ToolStripRenderer CreateInstance(); } } KeePass/UI/ToolStripRendering/ProExtTsr.cs0000664000000000000000000002017012641461344017471 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Text; using System.Windows.Forms; using KeePass.Resources; using KeePassLib; using KeePassLib.Native; using KeePassLib.Utility; namespace KeePass.UI.ToolStripRendering { internal sealed class ProExtTsrFactory : TsrFactory { private PwUuid m_uuid = new PwUuid(new byte[] { 0x21, 0xED, 0x54, 0x1A, 0xE2, 0xEB, 0xCB, 0x0C, 0x57, 0x18, 0x41, 0x32, 0x70, 0xD8, 0xE0, 0xE9 }); public override PwUuid Uuid { get { return m_uuid; } } public override string Name { get { return (".NET/Office - " + KPRes.Professional); } } public override ToolStripRenderer CreateInstance() { return new ProExtTsr(); } } public class ProExtTsr : ToolStripProfessionalRenderer { private bool m_bCustomColorTable = false; protected bool IsDarkStyle { get { ProfessionalColorTable ct = this.ColorTable; if(ct == null) { Debug.Assert(false); return false; } return UIUtil.IsDarkColor(ct.ToolStripDropDownBackground); } } protected virtual bool EnsureTextContrast { get { return true; } } public ProExtTsr() : base() { } public ProExtTsr(ProfessionalColorTable ct) : base(ct) { m_bCustomColorTable = true; } protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) { base.OnRenderButtonBackground(e); // .NET incorrectly draws the border using // this.ColorTable.ButtonSelectedBorder even when the button // is pressed; thus in this case we draw it again using the // correct color ToolStripItem tsi = ((e != null) ? e.Item : null); if((tsi != null) && tsi.Pressed && !NativeLib.IsUnix()) { using(Pen p = new Pen(this.ColorTable.ButtonPressedBorder)) { e.Graphics.DrawRectangle(p, 0, 0, tsi.Width - 1, tsi.Height - 1); } } } protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { Image imgToDispose = null; try { Graphics g = e.Graphics; Image imgOrg = e.Image; Rectangle rOrg = e.ImageRectangle; ToolStripItem tsi = e.Item; Image img = imgOrg; Rectangle r = rOrg; Debug.Assert(r.Width == r.Height); Debug.Assert(DpiUtil.ScalingRequired || (r.Size == ((img != null) ? img.Size : new Size(3, 5)))); // Override the .NET checkmark bitmap ToolStripMenuItem tsmi = (tsi as ToolStripMenuItem); if((tsmi != null) && tsmi.Checked && (tsmi.Image == null)) img = Properties.Resources.B16x16_MenuCheck; if(tsi != null) { Rectangle rContent = tsi.ContentRectangle; Debug.Assert(rContent.Contains(r) || DpiUtil.ScalingRequired); r.Intersect(rContent); if(r.Height < r.Width) r.Width = r.Height; } else { Debug.Assert(false); } if((img != null) && (r.Size != img.Size)) { img = GfxUtil.ScaleImage(img, r.Width, r.Height, ScaleTransformFlags.UIIcon); imgToDispose = img; } if((img != imgOrg) || (r != rOrg)) { ToolStripItemImageRenderEventArgs eNew = new ToolStripItemImageRenderEventArgs(g, tsi, img, r); base.OnRenderItemCheck(eNew); return; } /* ToolStripMenuItem tsmi = (tsi as ToolStripMenuItem); if((tsmi != null) && tsmi.Checked && (r.Width > 0) && (r.Height > 0) && (img != null) && ((img.Width != r.Width) || (img.Height != r.Height))) { Rectangle rContent = tsmi.ContentRectangle; r.Intersect(rContent); if(r.Height < r.Width) r.Width = r.Height; ProfessionalColorTable ct = this.ColorTable; Color clrBorder = ct.ButtonSelectedBorder; Color clrBG = ct.CheckBackground; if(tsmi.Selected) clrBG = ct.CheckSelectedBackground; if(tsmi.Pressed) clrBG = ct.CheckPressedBackground; Color clrFG = ((UIUtil.ColorToGrayscale(clrBG).R >= 128) ? Color.Black : Color.White); using(SolidBrush sb = new SolidBrush(clrBG)) { g.FillRectangle(sb, r); } using(Pen p = new Pen(clrBorder)) { g.DrawRectangle(p, r.X, r.Y, r.Width - 1, r.Height - 1); } ControlPaint.DrawMenuGlyph(g, r, MenuGlyph.Checkmark, clrFG, Color.Transparent); // if((img.Width == r.Width) && (img.Height == r.Height)) // g.DrawImage(img, r); // else // { // Image imgScaled = GfxUtil.ScaleImage(img, // r.Width, r.Height, ScaleTransformFlags.UIIcon); // g.DrawImage(imgScaled, r); // imgScaled.Dispose(); // } return; } */ /* if((img != null) && (r.Width > 0) && (r.Height > 0) && ((img.Width != r.Width) || (img.Height != r.Height)) && (tsi != null)) { // This should only happen on high DPI Debug.Assert(DpiUtil.ScalingRequired); Image imgScaled = GfxUtil.ScaleImage(img, r.Width, r.Height, ScaleTransformFlags.UIIcon); // Image imgScaled = new Bitmap(r.Width, r.Height, // PixelFormat.Format32bppArgb); // using(Graphics gScaled = Graphics.FromImage(imgScaled)) // { // gScaled.Clear(Color.Transparent); // Color clrFG = ((UIUtil.ColorToGrayscale( // this.ColorTable.CheckBackground).R >= 128) ? // Color.FromArgb(18, 24, 163) : Color.White); // Rectangle rGlyph = new Rectangle(0, 0, r.Width, r.Height); // // rGlyph.Inflate(-r.Width / 12, -r.Height / 12); // ControlPaint.DrawMenuGlyph(gScaled, rGlyph, // MenuGlyph.Bullet, clrFG, Color.Transparent); // } ToolStripItemImageRenderEventArgs eMod = new ToolStripItemImageRenderEventArgs(g, e.Item, imgScaled, r); base.OnRenderItemCheck(eMod); imgScaled.Dispose(); return; } */ } catch(Exception) { Debug.Assert(false); } finally { if(imgToDispose != null) imgToDispose.Dispose(); } base.OnRenderItemCheck(e); } protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) { if(e != null) { ToolStripItem tsi = e.Item; // In high contrast mode, various colors of the default // color table are incorrect, thus check m_bCustomColorTable if((tsi != null) && this.EnsureTextContrast && m_bCustomColorTable) { bool bDarkBack = this.IsDarkStyle; if(tsi.Selected || tsi.Pressed) { if((tsi.Owner is ContextMenuStrip) || (tsi.OwnerItem != null)) bDarkBack = UIUtil.IsDarkColor(this.ColorTable.MenuItemSelected); else // Top menu item { if(tsi.Pressed) bDarkBack = UIUtil.IsDarkColor( this.ColorTable.MenuItemPressedGradientMiddle); else bDarkBack = UIUtil.IsDarkColor(UIUtil.ColorMiddle( this.ColorTable.MenuItemSelectedGradientBegin, this.ColorTable.MenuItemSelectedGradientEnd)); } } // e.TextColor might be incorrect, thus use tsi.ForeColor bool bDarkText = UIUtil.IsDarkColor(tsi.ForeColor); if(bDarkBack && bDarkText) { Debug.Assert(false); e.TextColor = Color.White; } else if(!bDarkBack && !bDarkText) { Debug.Assert(false); e.TextColor = Color.Black; } } } else { Debug.Assert(false); } base.OnRenderItemText(e); } } } KeePass/UI/ExpiryControlGroup.cs0000664000000000000000000000611712641461342015623 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Globalization; using System.Diagnostics; using KeePassLib; namespace KeePass.UI { public sealed class ExpiryControlGroup { private CheckBox m_cb = null; private DateTimePicker m_dtp = null; public bool Checked { get { if(m_cb == null) { Debug.Assert(false); return false; } return m_cb.Checked; } set { UIUtil.SetChecked(m_cb, value); } } public DateTime Value { get { if(m_dtp == null) { Debug.Assert(false); return DateTime.Now; } // Force validation/update of incomplete edit // (workaround for KPB 3505269) if(m_dtp.Focused && m_dtp.Visible) { m_dtp.Visible = false; m_dtp.Visible = true; } return m_dtp.Value; } set { if(m_dtp == null) { Debug.Assert(false); return; } m_dtp.Value = value; } } public ExpiryControlGroup() { } #if DEBUG ~ExpiryControlGroup() { Debug.Assert(m_cb == null); // Owner should call Release() } #endif public void Attach(CheckBox cb, DateTimePicker dtp) { if(cb == null) throw new ArgumentNullException("cb"); if(dtp == null) throw new ArgumentNullException("dtp"); m_cb = cb; m_dtp = dtp; // m_dtp.ShowUpDown = true; m_dtp.CustomFormat = DateTimeFormatInfo.CurrentInfo.ShortDatePattern + " " + DateTimeFormatInfo.CurrentInfo.LongTimePattern; m_dtp.ValueChanged += this.OnExpiryValueChanged; // Also handle key press event (workaround for KPB 3505269) m_dtp.KeyPress += this.OnExpiryKeyPress; } public void Release() { if(m_cb == null) return; m_dtp.ValueChanged -= this.OnExpiryValueChanged; m_dtp.KeyPress -= this.OnExpiryKeyPress; m_cb = null; m_dtp = null; } private void UpdateUI(bool? pbSetCheck) { if(pbSetCheck.HasValue) UIUtil.SetChecked(m_cb, pbSetCheck.Value); UIUtil.SetEnabled(m_dtp, m_cb.Enabled); } private void OnExpiryValueChanged(object sender, EventArgs e) { UpdateUI(true); } private void OnExpiryKeyPress(object sender, KeyPressEventArgs e) { if(char.IsDigit(e.KeyChar)) UpdateUI(true); } } } KeePass/UI/HotKeyControlEx.cs0000664000000000000000000002023412641461342015022 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // This control is based on the following article: // http://www.codeproject.com/useritems/hotkeycontrol.asp using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.ComponentModel; using System.Diagnostics; using KeePass.Resources; namespace KeePass.UI { public sealed class HotKeyControlEx : TextBox { private Keys m_kHotKey = Keys.None; private Keys m_kModifiers = Keys.None; private static List m_vNeedNonShiftModifier = new List(); private static List m_vNeedNonAltGrModifier = new List(); private ContextMenu m_ctxNone = new ContextMenu(); [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Keys HotKey { get { return m_kHotKey; } set { m_kHotKey = value; } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Keys HotKeyModifiers { get { return m_kModifiers; } set { m_kModifiers = value; } } private bool m_bNoRightModKeys = false; [DefaultValue(false)] public bool NoRightModKeys { get { return m_bNoRightModKeys; } set { m_bNoRightModKeys = value; } } private string m_strTextNone = KPRes.None; [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public string TextNone { get { return m_strTextNone; } set { if(value == null) throw new ArgumentNullException("value"); m_strTextNone = value; } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override ContextMenu ContextMenu { get { return m_ctxNone; } set { base.ContextMenu = m_ctxNone; } } // Hot key control is single-line [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool Multiline { get { return base.Multiline; } set { base.Multiline = false; } } public HotKeyControlEx() { this.ContextMenu = m_ctxNone; // No context menu available this.Text = m_strTextNone; this.KeyPress += new KeyPressEventHandler(this.OnKeyPressEx); this.KeyUp += new KeyEventHandler(this.OnKeyUpEx); this.KeyDown += new KeyEventHandler(this.OnKeyDownEx); if(m_vNeedNonShiftModifier.Count == 0) PopulateModifierLists(); } private static void PopulateModifierLists() { for(Keys k = Keys.D0; k <= Keys.Z; ++k) m_vNeedNonShiftModifier.Add(k); for(Keys k = Keys.NumPad0; k <= Keys.NumPad9; ++k) m_vNeedNonShiftModifier.Add(k); for(Keys k = Keys.Oem1; k <= Keys.OemBackslash; ++k) m_vNeedNonShiftModifier.Add(k); for(Keys k = Keys.Space; k <= Keys.Home; ++k) m_vNeedNonShiftModifier.Add(k); m_vNeedNonShiftModifier.Add(Keys.Insert); m_vNeedNonShiftModifier.Add(Keys.Help); m_vNeedNonShiftModifier.Add(Keys.Multiply); m_vNeedNonShiftModifier.Add(Keys.Add); m_vNeedNonShiftModifier.Add(Keys.Subtract); m_vNeedNonShiftModifier.Add(Keys.Divide); m_vNeedNonShiftModifier.Add(Keys.Decimal); m_vNeedNonShiftModifier.Add(Keys.Return); m_vNeedNonShiftModifier.Add(Keys.Escape); m_vNeedNonShiftModifier.Add(Keys.NumLock); m_vNeedNonShiftModifier.Add(Keys.Scroll); m_vNeedNonShiftModifier.Add(Keys.Pause); for(Keys k = Keys.D0; k <= Keys.D9; ++k) m_vNeedNonAltGrModifier.Add(k); } public new void Clear() { m_kHotKey = Keys.None; m_kModifiers = Keys.None; } private void OnKeyDownEx(object sender, KeyEventArgs e) { if((e.KeyCode == Keys.Back) || (e.KeyCode == Keys.Delete)) ResetHotKey(); else { m_kHotKey = e.KeyCode; m_kModifiers = e.Modifiers; RenderHotKey(); } } private void OnKeyUpEx(object sender, KeyEventArgs e) { if((m_kHotKey == Keys.None) && (Control.ModifierKeys == Keys.None)) ResetHotKey(); } private void OnKeyPressEx(object sender, KeyPressEventArgs e) { e.Handled = true; } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if((keyData == Keys.Delete) || (keyData == (Keys.Control | Keys.Delete))) { ResetHotKey(); return true; } if(keyData == (Keys.Shift | Keys.Insert)) // Paste command return true; // Not allowed if((keyData & Keys.KeyCode) == Keys.F12) return true; // Reserved for debugger, see MSDN return base.ProcessCmdKey(ref msg, keyData); } private void ResetHotKey() { m_kHotKey = Keys.None; m_kModifiers = Keys.None; RenderHotKey(); } public void ResetIfModifierOnly() { if((m_kHotKey == Keys.None) && (m_kModifiers != Keys.None)) ResetHotKey(); } public void RenderHotKey() { if(m_kHotKey == Keys.None) { this.Text = m_strTextNone; return; } if((m_kHotKey == Keys.LWin) || (m_kHotKey == Keys.RWin)) { ResetHotKey(); return; } if(((m_kModifiers == Keys.Shift) || (m_kModifiers == Keys.None)) && m_vNeedNonShiftModifier.Contains(m_kHotKey)) { if(m_kModifiers == Keys.None) { if(m_vNeedNonAltGrModifier.Contains(m_kHotKey) == false) m_kModifiers = (Keys.Alt | Keys.Control); else m_kModifiers = (Keys.Alt | Keys.Shift); } else { m_kHotKey = Keys.None; this.Text = ModifiersToString(m_kModifiers) + " + " + KPRes.InvalidKey; return; } } if((m_kModifiers == (Keys.Alt | Keys.Control)) && m_vNeedNonAltGrModifier.Contains(m_kHotKey)) { m_kHotKey = Keys.None; this.Text = ModifiersToString(m_kModifiers) + " + " + KPRes.InvalidKey; return; } if(m_kModifiers == Keys.None) { if(m_kHotKey == Keys.None) { this.Text = m_strTextNone; return; } else { this.Text = m_kHotKey.ToString(); return; } } if((m_kHotKey == Keys.Menu) || (m_kHotKey == Keys.ShiftKey) || (m_kHotKey == Keys.ControlKey)) { m_kHotKey = Keys.None; } this.Text = ModifiersToString(m_kModifiers) + " + " + m_kHotKey.ToString(); } private string ModifiersToString(Keys kModifiers) { string str = string.Empty; if((kModifiers & Keys.Shift) != Keys.None) str = (m_bNoRightModKeys ? KPRes.KeyboardKeyShiftLeft : KPRes.KeyboardKeyShift); if((kModifiers & Keys.Control) != Keys.None) { if(str.Length > 0) str += ", "; str += (m_bNoRightModKeys ? KPRes.KeyboardKeyCtrlLeft : KPRes.KeyboardKeyCtrl); } if((kModifiers & Keys.Alt) != Keys.None) { if(str.Length > 0) str += ", "; str += KPRes.KeyboardKeyAlt; } return str; } [Obsolete] public static HotKeyControlEx ReplaceTextBox(Control cContainer, TextBox tb) { return ReplaceTextBox(cContainer, tb, false); } public static HotKeyControlEx ReplaceTextBox(Control cContainer, TextBox tb, bool bNoRightModKeys) { Debug.Assert(tb != null); if(tb == null) throw new ArgumentNullException("tb"); tb.Enabled = false; tb.Visible = false; cContainer.Controls.Remove(tb); HotKeyControlEx hk = new HotKeyControlEx(); hk.Location = tb.Location; hk.Size = tb.Size; hk.NoRightModKeys = bNoRightModKeys; cContainer.Controls.Add(hk); cContainer.PerformLayout(); return hk; } } } KeePass/UI/RichTextBuilder.cs0000664000000000000000000001424412641461344015030 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Drawing; using KeePassLib.Utility; namespace KeePass.UI { public sealed class RichTextBuilder { private StringBuilder m_sb = new StringBuilder(); private static List m_vTags = null; private sealed class RtfbTag { public string IdCode { get; private set; } public string RtfCode { get; private set; } public bool StartTag { get; private set; } public FontStyle Style { get; private set; } public RtfbTag(string strId, string strRtf, bool bStartTag, FontStyle fs) { if(string.IsNullOrEmpty(strId)) strId = GenerateRandomIdCode(); this.IdCode = strId; this.RtfCode = strRtf; this.StartTag = bStartTag; this.Style = fs; } internal static string GenerateRandomIdCode() { StringBuilder sb = new StringBuilder(14); for(int i = 0; i < 12; ++i) { int n = Program.GlobalRandom.Next(62); if(n < 26) sb.Append((char)('A' + n)); else if(n < 52) sb.Append((char)('a' + (n - 26))); else sb.Append((char)('0' + (n - 52))); } return sb.ToString(); } } private Font m_fDefault = null; public Font DefaultFont { get { return m_fDefault; } set { m_fDefault = value; } } public RichTextBuilder() { EnsureInitializedStatic(); } private static void EnsureInitializedStatic() { if(m_vTags != null) return; List l = new List(); l.Add(new RtfbTag(null, "\\b ", true, FontStyle.Bold)); l.Add(new RtfbTag(null, "\\b0 ", false, FontStyle.Bold)); l.Add(new RtfbTag(null, "\\i ", true, FontStyle.Italic)); l.Add(new RtfbTag(null, "\\i0 ", false, FontStyle.Italic)); l.Add(new RtfbTag(null, "\\ul ", true, FontStyle.Underline)); l.Add(new RtfbTag(null, "\\ul0 ", false, FontStyle.Underline)); l.Add(new RtfbTag(null, "\\strike ", true, FontStyle.Strikeout)); l.Add(new RtfbTag(null, "\\strike0 ", false, FontStyle.Strikeout)); m_vTags = l; } public static KeyValuePair GetStyleIdCodes(FontStyle fs) { string strL = null, strR = null; foreach(RtfbTag rTag in m_vTags) { if(rTag.Style == fs) { if(rTag.StartTag) strL = rTag.IdCode; else strR = rTag.IdCode; } } return new KeyValuePair(strL, strR); } public void Append(string str) { m_sb.Append(str); } public void AppendLine() { m_sb.AppendLine(); } public void AppendLine(string str) { m_sb.AppendLine(str); } public void Append(string str, FontStyle fs) { Append(str, fs, null, null, null, null); } public void Append(string str, FontStyle fs, string strOuterPrefix, string strInnerPrefix, string strInnerSuffix, string strOuterSuffix) { KeyValuePair kvpTags = GetStyleIdCodes(fs); if(!string.IsNullOrEmpty(strOuterPrefix)) m_sb.Append(strOuterPrefix); if(!string.IsNullOrEmpty(kvpTags.Key)) m_sb.Append(kvpTags.Key); if(!string.IsNullOrEmpty(strInnerPrefix)) m_sb.Append(strInnerPrefix); m_sb.Append(str); if(!string.IsNullOrEmpty(strInnerSuffix)) m_sb.Append(strInnerSuffix); if(!string.IsNullOrEmpty(kvpTags.Value)) m_sb.Append(kvpTags.Value); if(!string.IsNullOrEmpty(strOuterSuffix)) m_sb.Append(strOuterSuffix); } public void AppendLine(string str, FontStyle fs, string strOuterPrefix, string strInnerPrefix, string strInnerSuffix, string strOuterSuffix) { Append(str, fs, strOuterPrefix, strInnerPrefix, strInnerSuffix, strOuterSuffix); m_sb.AppendLine(); } public void AppendLine(string str, FontStyle fs) { Append(str, fs); m_sb.AppendLine(); } private static RichTextBox CreateOpRtb() { RichTextBox rtbOp = new RichTextBox(); rtbOp.Visible = false; // Ensure invisibility rtbOp.DetectUrls = false; rtbOp.HideSelection = true; rtbOp.Multiline = true; rtbOp.WordWrap = false; return rtbOp; } public void Build(RichTextBox rtb) { if(rtb == null) throw new ArgumentNullException("rtb"); RichTextBox rtbOp = CreateOpRtb(); string strText = m_sb.ToString(); Dictionary dEnc = new Dictionary(); if(MonoWorkarounds.IsRequired(586901)) { StringBuilder sbEnc = new StringBuilder(); for(int i = 0; i < strText.Length; ++i) { char ch = strText[i]; if((int)ch <= 255) sbEnc.Append(ch); else { string strCharEnc; if(!dEnc.TryGetValue(ch, out strCharEnc)) { strCharEnc = RtfbTag.GenerateRandomIdCode(); dEnc[ch] = strCharEnc; } sbEnc.Append(strCharEnc); } } strText = sbEnc.ToString(); } rtbOp.Text = strText; Debug.Assert(rtbOp.Text == strText); // Test committed if(m_fDefault != null) { rtbOp.Select(0, rtbOp.TextLength); rtbOp.SelectionFont = m_fDefault; } string strRtf = rtbOp.Rtf; rtbOp.Dispose(); foreach(KeyValuePair kvpEnc in dEnc) { strRtf = strRtf.Replace(kvpEnc.Value, StrUtil.RtfEncodeChar(kvpEnc.Key)); } foreach(RtfbTag rTag in m_vTags) { strRtf = strRtf.Replace(rTag.IdCode, rTag.RtfCode); } rtb.Rtf = strRtf; } } } KeePass/UI/QualityProgressBar.cs0000664000000000000000000001620412641461344015567 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; using System.Drawing; using System.Drawing.Drawing2D; using System.ComponentModel; using System.Diagnostics; using KeePass.Util; using KeePassLib.Native; namespace KeePass.UI { public sealed class QualityProgressBar : Control { public QualityProgressBar() : base() { this.DoubleBuffered = true; } private int m_nMinimum = 0; [DefaultValue(0)] public int Minimum { get { return m_nMinimum; } set { m_nMinimum = value; this.Invalidate(); } } private int m_nMaximum = 100; [DefaultValue(100)] public int Maximum { get { return m_nMaximum; } set { m_nMaximum = value; this.Invalidate(); } } private int m_nPosition = 0; [DefaultValue(0)] public int Value { get { return m_nPosition; } set { m_nPosition = value; this.Invalidate(); } } private ProgressBarStyle m_pbsStyle = ProgressBarStyle.Continuous; [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public ProgressBarStyle Style { get { return m_pbsStyle; } set { m_pbsStyle = value; this.Invalidate(); } } private string m_strText = string.Empty; [DefaultValue("")] public string ProgressText { get { return m_strText; } set { m_strText = value; this.Invalidate(); } } protected override void OnPaint(PaintEventArgs e) { try { PaintPriv(e); } catch(Exception) { Debug.Assert(false); } } private void PaintPriv(PaintEventArgs e) { Graphics g = e.Graphics; if(g == null) { base.OnPaint(e); return; } int nNormPos = m_nPosition - m_nMinimum; int nNormMax = m_nMaximum - m_nMinimum; if(nNormMax <= 0) { Debug.Assert(false); nNormMax = 100; } if(nNormPos < 0) { Debug.Assert(false); nNormPos = 0; } if(nNormPos > nNormMax) { Debug.Assert(false); nNormPos = nNormMax; } Rectangle rectClient = this.ClientRectangle; Rectangle rectDraw; VisualStyleElement vse = VisualStyleElement.ProgressBar.Bar.Normal; if(VisualStyleRenderer.IsSupported && VisualStyleRenderer.IsElementDefined(vse)) { VisualStyleRenderer vsr = new VisualStyleRenderer(vse); if(vsr.IsBackgroundPartiallyTransparent()) vsr.DrawParentBackground(g, rectClient, this); vsr.DrawBackground(g, rectClient); rectDraw = vsr.GetBackgroundContentRectangle(g, rectClient); } else { g.FillRectangle(SystemBrushes.Control, rectClient); Pen penGray = SystemPens.ControlDark; Pen penWhite = SystemPens.ControlLight; g.DrawLine(penGray, 0, 0, rectClient.Width - 1, 0); g.DrawLine(penGray, 0, 0, 0, rectClient.Height - 1); g.DrawLine(penWhite, rectClient.Width - 1, 0, rectClient.Width - 1, rectClient.Height - 1); g.DrawLine(penWhite, 0, rectClient.Height - 1, rectClient.Width - 1, rectClient.Height - 1); rectDraw = new Rectangle(rectClient.X + 1, rectClient.Y + 1, rectClient.Width - 2, rectClient.Height - 2); } int nDrawWidth = (int)((float)rectDraw.Width * (float)nNormPos / (float)nNormMax); Color clrStart = Color.FromArgb(255, 128, 0); Color clrEnd = Color.FromArgb(0, 255, 0); if(!this.Enabled) { clrStart = UIUtil.ColorToGrayscale(SystemColors.ControlDark); clrEnd = UIUtil.ColorToGrayscale(SystemColors.ControlLight); } bool bRtl = (this.RightToLeft == RightToLeft.Yes); if(bRtl) { Color clrTemp = clrStart; clrStart = clrEnd; clrEnd = clrTemp; } // Workaround for Windows <= XP Rectangle rectGrad = new Rectangle(rectDraw.X, rectDraw.Y, rectDraw.Width, rectDraw.Height); if(!WinUtil.IsAtLeastWindowsVista && !NativeLib.IsUnix()) rectGrad.Inflate(1, 0); using(LinearGradientBrush brush = new LinearGradientBrush(rectGrad, clrStart, clrEnd, LinearGradientMode.Horizontal)) { g.FillRectangle(brush, (bRtl ? (rectDraw.Width - nDrawWidth + 1) : rectDraw.Left), rectDraw.Top, nDrawWidth, rectDraw.Height); } PaintText(g, rectDraw); } private void PaintText(Graphics g, Rectangle rectDraw) { if(string.IsNullOrEmpty(m_strText)) return; Font f = (FontUtil.DefaultFont ?? this.Font); Color clrFG = UIUtil.ColorToGrayscale(this.ForeColor); Color clrBG = Color.FromArgb(clrFG.ToArgb() ^ 0x20FFFFFF); // Instead of an ellipse, Mono draws a circle, which looks ugly if(!NativeLib.IsUnix()) { int dx = rectDraw.X; int dy = rectDraw.Y; int dw = rectDraw.Width; int dh = rectDraw.Height; Rectangle rectGlow = rectDraw; rectGlow.Width = TextRenderer.MeasureText(g, m_strText, f).Width; rectGlow.X = ((dw - rectGlow.Width) / 2) + dx; rectGlow.Inflate(rectGlow.Width / 2, rectGlow.Height / 2); using(GraphicsPath gpGlow = new GraphicsPath()) { gpGlow.AddEllipse(rectGlow); using(PathGradientBrush pgbGlow = new PathGradientBrush(gpGlow)) { pgbGlow.CenterPoint = new PointF((dw / 2.0f) + dx, (dh / 2.0f) + dy); pgbGlow.CenterColor = clrBG; pgbGlow.SurroundColors = new Color[] { Color.Transparent }; Region rgOrgClip = g.Clip; g.SetClip(rectDraw); g.FillPath(pgbGlow, gpGlow); g.Clip = rgOrgClip; } } } // With ClearType on, text drawn using Graphics.DrawString // looks better than TextRenderer.DrawText; // https://sourceforge.net/p/keepass/discussion/329220/thread/06ef4466/ // TextFormatFlags tff = (TextFormatFlags.HorizontalCenter | TextFormatFlags.SingleLine | // TextFormatFlags.VerticalCenter); // TextRenderer.DrawText(g, m_strText, f, rectDraw, clrFG, tff); using(SolidBrush br = new SolidBrush(clrFG)) { StringFormatFlags sff = (StringFormatFlags.FitBlackBox | StringFormatFlags.NoClip); using(StringFormat sf = new StringFormat(sff)) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; RectangleF rf = new RectangleF(rectDraw.X, rectDraw.Y, rectDraw.Width, rectDraw.Height); g.DrawString(m_strText, f, br, rf, sf); } } } protected override void OnPaintBackground(PaintEventArgs pEvent) { // base.OnPaintBackground(pevent); } } } KeePass/UI/CustomRichTextBoxEx.cs0000664000000000000000000002754312641461342015666 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.ComponentModel; using System.Drawing; using System.Diagnostics; using KeePass.Util; using KeePassLib.Utility; namespace KeePass.UI { public sealed class CustomRichTextBoxEx : RichTextBox { private static bool? m_bForceRedrawOnScroll = null; private bool m_bSimpleTextOnly = false; [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [DefaultValue(false)] public bool SimpleTextOnly { get { return m_bSimpleTextOnly; } set { m_bSimpleTextOnly = value; } } private bool m_bCtrlEnterAccepts = false; [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [DefaultValue(false)] public bool CtrlEnterAccepts { get { return m_bCtrlEnterAccepts; } set { m_bCtrlEnterAccepts = value; } } public CustomRichTextBoxEx() : base() { // We cannot use EnableAutoDragDrop, because moving some text // using drag&drop can remove the selected text from the box // (even when read-only is enabled!), which is usually not a // good behavior in the case of KeePass; // reproducible e.g. with LibreOffice Writer, not WordPad // this.EnableAutoDragDrop = true; // this.AllowDrop = true; // The following is intended to set a default value; // also see OnHandleCreated this.AutoWordSelection = false; } private CriticalSectionEx m_csAutoProps = new CriticalSectionEx(); protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); // The following operations should not recreate the handle if(m_csAutoProps.TryEnter()) { // Workaround for .NET bug: // AutoWordSelection remembers the value of the property // correctly, but incorrectly sends a message as follows: // SendMessage(EM_SETOPTIONS, value ? ECOOP_OR : ECOOP_XOR, // ECO_AUTOWORDSELECTION); // So, when setting AutoWordSelection to false, the control // style is toggled instead of turned off (the internal value // is updated correctly) bool bAutoWord = this.AutoWordSelection; // Internal, no message if(!bAutoWord) // Only 'false' needs workaround { // Ensure control style is on (currently we're in a // random state, as it could be set to false multiple // times; e.g. base.OnHandleCreated does the following: // 'this.AutoWordSelection = this.AutoWordSelection;') this.AutoWordSelection = true; // Toggle control style to false this.AutoWordSelection = false; } m_csAutoProps.Exit(); } else { Debug.Assert(false); } } private static bool IsPasteCommand(KeyEventArgs e) { if(e == null) { Debug.Assert(false); return false; } // Also check for modifier keys being up; // https://sourceforge.net/p/keepass/bugs/1185/ if((e.KeyCode == Keys.V) && e.Control && !e.Alt) // e.Shift arb. return true; if((e.KeyCode == Keys.Insert) && e.Shift && !e.Alt) // e.Control arb. return true; return false; } protected override void OnKeyDown(KeyEventArgs e) { if(UIUtil.HandleCommonKeyEvent(e, true, this)) return; if(m_bSimpleTextOnly && IsPasteCommand(e)) { UIUtil.SetHandled(e, true); PasteAcceptable(); return; } if(m_bCtrlEnterAccepts && e.Control && ((e.KeyCode == Keys.Return) || (e.KeyCode == Keys.Enter))) { UIUtil.SetHandled(e, true); Debug.Assert(this.Multiline); Control p = this; Form f; while(true) { f = (p as Form); if(f != null) break; Control pParent = p.Parent; if((pParent == null) || (pParent == p)) break; p = pParent; } if(f != null) { IButtonControl btn = f.AcceptButton; if(btn != null) btn.PerformClick(); else { Debug.Assert(false); } } else { Debug.Assert(false); } return; } base.OnKeyDown(e); } protected override void OnKeyUp(KeyEventArgs e) { if(UIUtil.HandleCommonKeyEvent(e, false, this)) return; if(m_bSimpleTextOnly && IsPasteCommand(e)) { UIUtil.SetHandled(e, true); return; } if(m_bCtrlEnterAccepts && e.Control && ((e.KeyCode == Keys.Return) || (e.KeyCode == Keys.Enter))) { UIUtil.SetHandled(e, true); return; } base.OnKeyUp(e); } public void PasteAcceptable() { try { if(!m_bSimpleTextOnly) Paste(); else if(ClipboardUtil.ContainsData(DataFormats.UnicodeText)) Paste(DataFormats.GetFormat(DataFormats.UnicodeText)); else if(ClipboardUtil.ContainsData(DataFormats.Text)) Paste(DataFormats.GetFormat(DataFormats.Text)); } catch(Exception) { Debug.Assert(false); } } // ////////////////////////////////////////////////////////////////// // Drag&Drop Source Support /* private Rectangle m_rectDragBox = Rectangle.Empty; private bool m_bCurDragSource = false; protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); if(((e.Button & MouseButtons.Left) == MouseButtons.Left) && (this.SelectionLength > 0)) { Size szDrag = SystemInformation.DragSize; m_rectDragBox = new Rectangle(new Point(e.X - (szDrag.Width / 2), e.Y - (szDrag.Height / 2)), szDrag); } } protected override void OnMouseUp(MouseEventArgs mevent) { m_rectDragBox = Rectangle.Empty; base.OnMouseUp(mevent); } protected override void OnMouseMove(MouseEventArgs e) { if(m_bCurDragSource) { base.OnMouseMove(e); return; } if(((e.Button & MouseButtons.Left) == MouseButtons.Left) && !m_rectDragBox.IsEmpty) { if(!m_rectDragBox.Contains(e.X, e.Y)) { m_rectDragBox = Rectangle.Empty; string strText = this.SelectedText; // int iSelStart = this.SelectionStart; // int iSelLen = this.SelectionLength; if(!string.IsNullOrEmpty(strText)) { m_bCurDragSource = true; DoDragDrop(strText, (DragDropEffects.Move | DragDropEffects.Copy | DragDropEffects.Scroll)); m_bCurDragSource = false; // Select(iSelStart, iSelLen); return; } else { Debug.Assert(false); } } } base.OnMouseMove(e); } */ // ////////////////////////////////////////////////////////////////// // Drag&Drop Target Support /* private static bool ObjectHasText(DragEventArgs e) { if(e == null) { Debug.Assert(false); return false; } IDataObject ido = e.Data; if(ido == null) { Debug.Assert(false); return false; } return (ido.GetDataPresent(DataFormats.Text) || ido.GetDataPresent(DataFormats.UnicodeText)); } private bool IsDropAcceptable(DragEventArgs e) { if(e == null) { Debug.Assert(false); return false; } if(this.ReadOnly) return false; // Currently, in-control drag&drop is unsupported if(m_bCurDragSource) return false; return ObjectHasText(e); } private bool CustomizeDropEffect(DragEventArgs e) { if(e == null) { Debug.Assert(false); return false; } if(!IsDropAcceptable(e)) { e.Effect = DragDropEffects.None; return true; } return false; } protected override void OnDragEnter(DragEventArgs drgevent) { base.OnDragEnter(drgevent); CustomizeDropEffect(drgevent); } protected override void OnDragOver(DragEventArgs drgevent) { base.OnDragOver(drgevent); CustomizeDropEffect(drgevent); } protected override void OnDragDrop(DragEventArgs drgevent) { if(drgevent == null) { Debug.Assert(false); return; } if(!IsDropAcceptable(drgevent)) { drgevent.Effect = DragDropEffects.None; return; } if(m_bSimpleTextOnly) { IDataObject d = drgevent.Data; string str = null; if(d.GetDataPresent(DataFormats.UnicodeText)) str = (d.GetData(DataFormats.UnicodeText) as string); if((str == null) && d.GetDataPresent(DataFormats.Text)) str = (d.GetData(DataFormats.Text) as string); if(str == null) { Debug.Assert(false); drgevent.Effect = DragDropEffects.None; return; } Point pt = new Point(drgevent.X, drgevent.Y); pt = PointToClient(pt); drgevent.Effect = DragDropEffects.None; int pIns = GetCharIndexFromPosition(pt); InsertTextAt(str, pIns); } else base.OnDragDrop(drgevent); } private void InsertTextAt(string str, int pIns) { if(string.IsNullOrEmpty(str)) return; string strText = this.Text; if((pIns < 0) || (pIns > strText.Length)) { Debug.Assert(false); return; } this.Text = strText.Insert(pIns, str); Select(pIns + str.Length, 0); // Data was inserted, not moved ScrollToCaret(); } */ // ////////////////////////////////////////////////////////////////// // Simple Selection Support // The following selection code is not required, because // AutoWordSelection can be used with a workaround // private int? m_oiMouseSelStart = null; /* protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); if(((e.Button & MouseButtons.Left) != MouseButtons.None) && (this.SelectionLength == 0)) m_oiMouseSelStart = this.SelectionStart; } protected override void OnMouseMove(MouseEventArgs e) { if(UpdateSelectionEx(e)) return; base.OnMouseMove(e); } protected override void OnMouseUp(MouseEventArgs mevent) { if((mevent.Button & MouseButtons.Left) != MouseButtons.None) m_oiMouseSelStart = null; base.OnMouseUp(mevent); } private bool UpdateSelectionEx(MouseEventArgs e) { if(!m_oiMouseSelStart.HasValue) return false; if((e.Button & MouseButtons.Left) == MouseButtons.None) return false; try { int iSelS = m_oiMouseSelStart.Value; int iSelE = Math.Max(GetCharIndexFromPosition(e.Location), 0); if(iSelE == (this.TextLength - 1)) { Font f = this.SelectionFont; if(f == null) { Select(iSelE, 1); f = (this.SelectionFont ?? this.Font); } // Measuring a single character is imprecise (padding, ...) Size szLastChar = TextRenderer.MeasureText(new string( this.Text[iSelE], 20), f); int wLastChar = szLastChar.Width / 20; Point ptLastChar = GetPositionFromCharIndex(iSelE); if(e.X >= (ptLastChar.X + (wLastChar / 2))) ++iSelE; } if(iSelS <= iSelE) Select(iSelS, iSelE - iSelS); else Select(iSelE, iSelS - iSelE); } catch(Exception) { Debug.Assert(false); return false; } return true; } */ protected override void OnHScroll(EventArgs e) { base.OnHScroll(e); MonoRedrawOnScroll(); } protected override void OnVScroll(EventArgs e) { base.OnVScroll(e); MonoRedrawOnScroll(); } private void MonoRedrawOnScroll() { if(!m_bForceRedrawOnScroll.HasValue) m_bForceRedrawOnScroll = MonoWorkarounds.IsRequired(1366); if(m_bForceRedrawOnScroll.Value) Invalidate(); } } } KeePass/UI/CustomListViewEx.cs0000664000000000000000000001207312641461342015221 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Threading; using System.Diagnostics; using KeePass.Native; using KeePassLib.Utility; namespace KeePass.UI { public sealed class CustomListViewEx : ListView { public CustomListViewEx() : base() { try { this.DoubleBuffered = true; } catch(Exception) { Debug.Assert(false); } } /* private Color m_clrPrev = Color.Black; private Point m_ptLast = new Point(-1, -1); protected override void OnMouseHover(EventArgs e) { if((m_ptLast.X >= 0) && (m_ptLast.X < this.Columns.Count) && (m_ptLast.Y >= 0) && (m_ptLast.Y < this.Items.Count)) { this.Items[m_ptLast.Y].SubItems[m_ptLast.X].ForeColor = m_clrPrev; } ListViewHitTestInfo lh = this.HitTest(this.PointToClient(Cursor.Position)); if((lh.Item != null) && (lh.SubItem != null)) { m_ptLast = new Point(lh.Item.SubItems.IndexOf(lh.SubItem), lh.Item.Index); m_clrPrev = lh.SubItem.ForeColor; lh.SubItem.ForeColor = Color.LightBlue; } base.OnMouseHover(e); } */ /* protected override void OnKeyUp(KeyEventArgs e) { base.OnKeyUp(e); UnfocusGroupInSingleMode(); } private void UnfocusGroupInSingleMode() { try { if(!WinUtil.IsAtLeastWindowsVista) return; if(KeePassLib.Native.NativeLib.IsUnix()) return; if(!this.ShowGroups) return; if(this.MultiSelect) return; const uint m = (NativeMethods.LVGS_FOCUSED | NativeMethods.LVGS_SELECTED); uint uGroups = (uint)this.Groups.Count; for(uint u = 0; u < uGroups; ++u) { int iGroupID; if(NativeMethods.GetGroupStateByIndex(this, u, m, out iGroupID) == m) { NativeMethods.SetGroupState(this, iGroupID, m, NativeMethods.LVGS_SELECTED); return; } } } catch(Exception) { Debug.Assert(false); } } */ protected override void OnKeyDown(KeyEventArgs e) { if(UIUtil.HandleCommonKeyEvent(e, true, this)) return; try { if(SkipGroupHeaderIfRequired(e)) return; } catch(Exception) { Debug.Assert(false); } base.OnKeyDown(e); } protected override void OnKeyUp(KeyEventArgs e) { if(UIUtil.HandleCommonKeyEvent(e, false, this)) return; base.OnKeyUp(e); } private bool SkipGroupHeaderIfRequired(KeyEventArgs e) { if(!UIUtil.GetGroupsEnabled(this)) return false; if(this.MultiSelect) return false; if(MonoWorkarounds.IsRequired(836428016)) return false; ListViewItem lvi = this.FocusedItem; if(lvi != null) { ListViewGroup g = lvi.Group; ListViewItem lviChangeTo = null; if((e.KeyCode == Keys.Up) && IsFirstLastItemInGroup(g, lvi, true)) lviChangeTo = (GetNextLvi(g, true) ?? lvi); // '??' for top item else if((e.KeyCode == Keys.Down) && IsFirstLastItemInGroup(g, lvi, false)) lviChangeTo = (GetNextLvi(g, false) ?? lvi); // '??' for bottom item if(lviChangeTo != null) { foreach(ListViewItem lviEnum in this.Items) lviEnum.Selected = false; EnsureVisible(lviChangeTo.Index); UIUtil.SetFocusedItem(this, lviChangeTo, true); UIUtil.SetHandled(e, true); return true; } } return false; } private static bool IsFirstLastItemInGroup(ListViewGroup g, ListViewItem lvi, bool bFirst) { if(g == null) { Debug.Assert(false); return false; } ListViewItemCollection c = g.Items; if(c.Count == 0) { Debug.Assert(false); return false; } return (bFirst ? (c[0] == lvi) : (c[c.Count - 1] == lvi)); } private ListViewItem GetNextLvi(ListViewGroup gBaseExcl, bool bUp) { if(gBaseExcl == null) { Debug.Assert(false); return null; } int i = this.Groups.IndexOf(gBaseExcl); if(i < 0) { Debug.Assert(false); return null; } if(bUp) { --i; while(i >= 0) { ListViewGroup g = this.Groups[i]; if(g.Items.Count > 0) return g.Items[g.Items.Count - 1]; --i; } } else // Down { ++i; int nGroups = this.Groups.Count; while(i < nGroups) { ListViewGroup g = this.Groups[i]; if(g.Items.Count > 0) return g.Items[0]; ++i; } } return null; } } } KeePass/UI/FontUtil.cs0000664000000000000000000001262012641461342013525 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Windows.Forms; using System.Diagnostics; namespace KeePass.UI { public static class FontUtil { public static Font CreateFont(string strFamily, float fEmSize, FontStyle fs) { return CreateFont(strFamily, fEmSize, fs, GraphicsUnit.Point); } public static Font CreateFont(string strFamily, float fEmSize, FontStyle fs, GraphicsUnit gu) { try { return new Font(strFamily, fEmSize, fs, gu); } catch(Exception) { Debug.Assert(false); } // Style unsupported? return new Font(strFamily, fEmSize, gu); // Regular style } public static Font CreateFont(FontFamily ff, float fEmSize, FontStyle fs) { try { return new Font(ff, fEmSize, fs); } catch(Exception) { Debug.Assert(false); } // Style unsupported? return new Font(ff, fEmSize); } public static Font CreateFont(Font fBase, FontStyle fs) { try { return new Font(fBase, fs); } catch(Exception) { Debug.Assert(false); } // Style unsupported? return new Font(fBase, fBase.Style); // Clone } private static Font m_fontDefault = null; /// /// Get the default UI font. This might be null! /// public static Font DefaultFont { get { return m_fontDefault; } } public static void SetDefaultFont(Control c) { if(c == null) throw new ArgumentNullException("c"); if(m_fontDefault == null) m_fontDefault = c.Font; } public static void AssignDefault(Control c) { if(c == null) throw new ArgumentNullException("c"); if(m_fontDefault != null) c.Font = m_fontDefault; } private static Font m_fontBold = null; public static void AssignDefaultBold(Control c) { if(c == null) throw new ArgumentNullException("c"); if(m_fontBold == null) { try { m_fontBold = new Font(c.Font, FontStyle.Bold); } catch(Exception) { Debug.Assert(false); m_fontBold = c.Font; } } if(m_fontBold != null) c.Font = m_fontBold; } private static Font m_fontItalic = null; public static void AssignDefaultItalic(Control c) { if(c == null) throw new ArgumentNullException("c"); if(m_fontItalic == null) { try { m_fontItalic = new Font(c.Font, FontStyle.Italic); } catch(Exception) { Debug.Assert(false); m_fontItalic = c.Font; } } if(m_fontItalic != null) c.Font = m_fontItalic; } private static Font m_fontMono = null; /// /// Get the default UI monospace font. This might be null! /// public static Font MonoFont { get { return m_fontMono; } } public static void AssignDefaultMono(Control c, bool bIsPasswordBox) { if(c == null) throw new ArgumentNullException("c"); if(m_fontMono == null) { try { m_fontMono = new Font(FontFamily.GenericMonospace, c.Font.SizeInPoints); Debug.Assert(c.Font.Height == m_fontMono.Height); } catch(Exception) { Debug.Assert(false); m_fontMono = c.Font; } } if(bIsPasswordBox && Program.Config.UI.PasswordFont.OverrideUIDefault) c.Font = Program.Config.UI.PasswordFont.ToFont(); else if(m_fontMono != null) c.Font = m_fontMono; } /* private const string FontPartsSeparator = @"/:/"; public static Font FontIDToFont(string strFontID) { Debug.Assert(strFontID != null); if(strFontID == null) return null; string[] vParts = strFontID.Split(new string[] { FontPartsSeparator }, StringSplitOptions.None); if((vParts == null) || (vParts.Length != 6)) return null; float fSize; if(!float.TryParse(vParts[1], out fSize)) { Debug.Assert(false); return null; } FontStyle fs = FontStyle.Regular; if(vParts[2] == "1") fs |= FontStyle.Bold; if(vParts[3] == "1") fs |= FontStyle.Italic; if(vParts[4] == "1") fs |= FontStyle.Underline; if(vParts[5] == "1") fs |= FontStyle.Strikeout; return FontUtil.CreateFont(vParts[0], fSize, fs); } public static string FontToFontID(Font f) { Debug.Assert(f != null); if(f == null) return string.Empty; StringBuilder sb = new StringBuilder(); sb.Append(f.Name); sb.Append(FontPartsSeparator); sb.Append(f.SizeInPoints.ToString()); sb.Append(FontPartsSeparator); sb.Append(f.Bold ? "1" : "0"); sb.Append(FontPartsSeparator); sb.Append(f.Italic ? "1" : "0"); sb.Append(FontPartsSeparator); sb.Append(f.Underline ? "1" : "0"); sb.Append(FontPartsSeparator); sb.Append(f.Strikeout ? "1" : "0"); return sb.ToString(); } */ } } KeePass/UI/KeyboardControl.cs0000664000000000000000000001011012641461344015054 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Diagnostics; namespace KeePass.UI { public sealed class KblButton { public string Text = null; public string Command = null; public Rectangle Position = Rectangle.Empty; public KblButton() { } public KblButton(string strText, string strCommand) { this.Text = strText; this.Command = strCommand; } } public sealed class KbcLayout { public List> Rows = new List>(); public static KbcLayout Default { get { KbcLayout l = new KbcLayout(); List r = new List(); r.Add(new KblButton("1", null)); r.Add(new KblButton("2", null)); r.Add(new KblButton("3", null)); r.Add(new KblButton("4", null)); r.Add(new KblButton("5", null)); r.Add(new KblButton("6", null)); r.Add(new KblButton("7", null)); r.Add(new KblButton("8", null)); r.Add(new KblButton("9", null)); r.Add(new KblButton("0", null)); l.Rows.Add(r); return l; } } } public sealed class KeyboardControl : Control { private KbcLayout m_l = null; private int m_iLayoutW = -1, m_iLayoutH = -1; private CustomToolStripRendererEx m_renderer = new CustomToolStripRendererEx(); public void InitEx(KbcLayout l) { m_l = l; } private void ComputeLayoutEx() { if(m_l == null) { Debug.Assert(false); return; } int w = this.ClientSize.Width, h = this.ClientSize.Height; int nRows = m_l.Rows.Count; float fBtnH = (float)h / (float)(nRows + 1); float fBtnHSkip = ((float)h - (fBtnH * (float)nRows)) / (float)(nRows + 1); float y = 0.0f; for(int iy = 0; iy < nRows; ++iy) { y += fBtnHSkip; int nColumns = m_l.Rows[iy].Count; float fBtnW = (float)w / (nColumns + 1); float fBtnWSkip = ((float)w - (fBtnW * (float)nColumns)) / (float)(nColumns + 1); float x = 0.0f; for(int ix = 0; ix < nColumns; ++ix) { x += fBtnWSkip; m_l.Rows[iy][ix].Position = new Rectangle((int)(x + 0.00001f), (int)(y + 0.00001f), (int)fBtnW, (int)fBtnH); } } } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); // Required if(m_l == null) return; Size szCli = this.ClientSize; if((m_iLayoutW != szCli.Width) || (m_iLayoutH != szCli.Height)) ComputeLayoutEx(); Graphics g = e.Graphics; Rectangle rectClip = e.ClipRectangle; foreach(List vRow in m_l.Rows) { foreach(KblButton btn in vRow) { if(btn.Position.IntersectsWith(rectClip)) DrawButtonEx(btn, g); } } } private void DrawButtonEx(KblButton btn, Graphics g) { string strText = ((btn.Text ?? btn.Command) ?? string.Empty); ToolStripItemRenderEventArgs e = new ToolStripItemRenderEventArgs(g, new ToolStripButton(strText)); m_renderer.DrawMenuItemBackground(e); } protected override void OnPaintBackground(PaintEventArgs pevent) { using(SolidBrush brush = new SolidBrush(SystemColors.Control)) { pevent.Graphics.FillRectangle(brush, pevent.ClipRectangle); } } } } */ KeePass/UI/PwInputControlGroup.cs0000664000000000000000000003323312641461344015752 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Windows.Forms; using System.Threading; using System.Diagnostics; using KeePass.App; using KeePass.App.Configuration; using KeePass.Forms; using KeePass.Resources; using KeePassLib; using KeePassLib.Cryptography; using KeePassLib.Utility; namespace KeePass.UI { public sealed class PwInputControlGroup { private TextBox m_tbPassword = null; private CheckBox m_cbHide = null; private Label m_lblRepeat = null; private TextBox m_tbRepeat = null; private Label m_lblQualityPrompt = null; private QualityProgressBar m_pbQuality = null; private Label m_lblQualityInfo = null; private ToolTip m_ttHint = null; private Form m_fParent = null; private SecureEdit m_secPassword = null; private SecureEdit m_secRepeat = null; private bool m_bInitializing = false; private uint m_uPrgmCheck = 0; private bool m_bEnabled = true; public bool Enabled { get { return m_bEnabled; } set { if(value != m_bEnabled) { m_bEnabled = value; UpdateUI(); } } } public uint PasswordLength { get { if(m_secPassword == null) { Debug.Assert(false); return 0; } return m_secPassword.TextLength; } } private bool AutoRepeat { get { if(!Program.Config.UI.RepeatPasswordOnlyWhenHidden) return false; if(m_cbHide == null) { Debug.Assert(false); return false; } return !m_cbHide.Checked; } } public PwInputControlGroup() { } #if DEBUG ~PwInputControlGroup() { Debug.Assert(m_tbPassword == null); // Owner should call Release() Debug.Assert(m_uBlockUIUpdate == 0); Debug.Assert(m_lUqiTasks.Count == 0); } #endif public void Attach(TextBox tbPassword, CheckBox cbHide, Label lblRepeat, TextBox tbRepeat, Label lblQualityPrompt, QualityProgressBar pbQuality, Label lblQualityInfo, ToolTip ttHint, Form fParent, bool bInitialHide, bool bSecureDesktopMode) { if(tbPassword == null) throw new ArgumentNullException("tbPassword"); if(cbHide == null) throw new ArgumentNullException("cbHide"); if(lblRepeat == null) throw new ArgumentNullException("lblRepeat"); if(tbRepeat == null) throw new ArgumentNullException("tbRepeat"); if(lblQualityPrompt == null) throw new ArgumentNullException("lblQualityPrompt"); if(pbQuality == null) throw new ArgumentNullException("pbQuality"); if(lblQualityInfo == null) throw new ArgumentNullException("lblQualityInfo"); // ttHint may be null if(fParent == null) throw new ArgumentNullException("fParent"); Release(); m_bInitializing = true; m_tbPassword = tbPassword; m_cbHide = cbHide; m_lblRepeat = lblRepeat; m_tbRepeat = tbRepeat; m_lblQualityPrompt = lblQualityPrompt; m_pbQuality = pbQuality; m_lblQualityInfo = lblQualityInfo; m_ttHint = ttHint; m_fParent = fParent; m_secPassword = new SecureEdit(); m_secPassword.SecureDesktopMode = bSecureDesktopMode; m_secPassword.Attach(m_tbPassword, this.OnPasswordTextChanged, bInitialHide); m_secRepeat = new SecureEdit(); m_secRepeat.SecureDesktopMode = bSecureDesktopMode; m_secRepeat.Attach(m_tbRepeat, this.OnRepeatTextChanged, bInitialHide); ConfigureHideButton(m_cbHide, m_ttHint); m_cbHide.Checked = bInitialHide; m_cbHide.CheckedChanged += this.OnHideCheckedChanged; Debug.Assert(m_pbQuality.Minimum == 0); Debug.Assert(m_pbQuality.Maximum == 100); m_bInitializing = false; UpdateUI(); } public void Release() { Debug.Assert(!m_bInitializing); if(m_tbPassword == null) return; m_secPassword.Detach(); m_secRepeat.Detach(); m_cbHide.CheckedChanged -= this.OnHideCheckedChanged; m_tbPassword = null; m_cbHide = null; m_lblRepeat = null; m_tbRepeat = null; m_lblQualityPrompt = null; m_pbQuality = null; m_lblQualityInfo = null; m_ttHint = null; m_fParent = null; m_secPassword = null; m_secRepeat = null; } private uint m_uBlockUIUpdate = 0; private void UpdateUI() { if((m_uBlockUIUpdate > 0) || m_bInitializing) return; ++m_uBlockUIUpdate; ulong uFlags = 0; if(m_fParent is KeyCreationForm) uFlags = Program.Config.UI.KeyCreationFlags; byte[] pbUtf8 = m_secPassword.ToUtf8(); m_tbPassword.Enabled = m_bEnabled; m_cbHide.Enabled = (m_bEnabled && ((uFlags & (ulong)AceKeyUIFlags.DisableHidePassword) == 0)); if((uFlags & (ulong)AceKeyUIFlags.CheckHidePassword) != 0) { ++m_uPrgmCheck; m_cbHide.Checked = true; --m_uPrgmCheck; } if((uFlags & (ulong)AceKeyUIFlags.UncheckHidePassword) != 0) { ++m_uPrgmCheck; m_cbHide.Checked = false; --m_uPrgmCheck; } bool bAutoRepeat = this.AutoRepeat; if(bAutoRepeat && (m_secRepeat.TextLength > 0)) m_secRepeat.SetPassword(new byte[0]); byte[] pbRepeat = m_secRepeat.ToUtf8(); if(!MemUtil.ArraysEqual(pbUtf8, pbRepeat) && !bAutoRepeat) m_tbRepeat.BackColor = AppDefs.ColorEditError; else m_tbRepeat.ResetBackColor(); bool bRepeatEnable = (m_bEnabled && !bAutoRepeat); m_lblRepeat.Enabled = bRepeatEnable; m_tbRepeat.Enabled = bRepeatEnable; m_lblQualityPrompt.Enabled = m_bEnabled; m_pbQuality.Enabled = m_bEnabled; m_lblQualityInfo.Enabled = m_bEnabled; if((Program.Config.UI.UIFlags & (ulong)AceUIFlags.HidePwQuality) != 0) { m_lblQualityPrompt.Visible = false; m_pbQuality.Visible = false; m_lblQualityInfo.Visible = false; } else UpdateQualityInfo(pbUtf8); // MemUtil.ZeroByteArray(pbUtf8); // MemUtil.ZeroByteArray(pbRepeat); --m_uBlockUIUpdate; } private void OnPasswordTextChanged(object sender, EventArgs e) { UpdateUI(); } private void OnRepeatTextChanged(object sender, EventArgs e) { UpdateUI(); } private void OnHideCheckedChanged(object sender, EventArgs e) { if(m_bInitializing) return; bool bHide = m_cbHide.Checked; if(!bHide && (m_uPrgmCheck == 0)) { if(!AppPolicy.Try(AppPolicyId.UnhidePasswords)) { ++m_uPrgmCheck; m_cbHide.Checked = true; --m_uPrgmCheck; return; } } m_secPassword.EnableProtection(bHide); m_secRepeat.EnableProtection(bHide); bool bWasAutoRepeat = Program.Config.UI.RepeatPasswordOnlyWhenHidden; if(bHide && (m_uPrgmCheck == 0) && bWasAutoRepeat) { ++m_uBlockUIUpdate; byte[] pb = GetPasswordUtf8(); m_secRepeat.SetPassword(pb); MemUtil.ZeroByteArray(pb); --m_uBlockUIUpdate; } UpdateUI(); if(m_uPrgmCheck == 0) UIUtil.SetFocus(m_tbPassword, m_fParent); } public void SetPassword(byte[] pbUtf8, bool bSetRepeatPw) { if(pbUtf8 == null) { Debug.Assert(false); return; } ++m_uBlockUIUpdate; m_secPassword.SetPassword(pbUtf8); if(bSetRepeatPw && !this.AutoRepeat) m_secRepeat.SetPassword(pbUtf8); --m_uBlockUIUpdate; UpdateUI(); } public void SetPasswords(string strPassword, string strRepeat) { byte[] pbP = ((strPassword != null) ? StrUtil.Utf8.GetBytes( strPassword) : null); byte[] pbR = ((strRepeat != null) ? StrUtil.Utf8.GetBytes( strRepeat) : null); SetPasswords(pbP, pbR); } public void SetPasswords(byte[] pbPasswordUtf8, byte[] pbRepeatUtf8) { ++m_uBlockUIUpdate; if(pbPasswordUtf8 != null) m_secPassword.SetPassword(pbPasswordUtf8); if((pbRepeatUtf8 != null) && !this.AutoRepeat) m_secRepeat.SetPassword(pbRepeatUtf8); --m_uBlockUIUpdate; UpdateUI(); } public string GetPassword() { return StrUtil.Utf8.GetString(m_secPassword.ToUtf8()); } public byte[] GetPasswordUtf8() { return m_secPassword.ToUtf8(); } public string GetRepeat() { if(this.AutoRepeat) return GetPassword(); return StrUtil.Utf8.GetString(m_secRepeat.ToUtf8()); } public byte[] GetRepeatUtf8() { if(this.AutoRepeat) return GetPasswordUtf8(); return m_secRepeat.ToUtf8(); } public bool ValidateData(bool bUIOnError) { if(this.AutoRepeat) return true; if(m_secPassword.ContentsEqualTo(m_secRepeat)) return true; if(bUIOnError) { if(!VistaTaskDialog.ShowMessageBox(KPRes.PasswordRepeatFailed, KPRes.ValidationFailed, PwDefs.ShortProductName, VtdIcon.Warning, m_fParent)) MessageService.ShowWarning(KPRes.PasswordRepeatFailed); } return false; } private List m_lUqiTasks = new List(); private void UpdateQualityInfo(byte[] pbUtf8) { if(pbUtf8 == null) { Debug.Assert(false); return; } string str = StrUtil.Utf8.GetString(pbUtf8); #if DEBUG byte[] pbTest = StrUtil.Utf8.GetBytes(str); Debug.Assert(MemUtil.ArraysEqual(pbUtf8, pbTest)); #endif int nTasks; lock(m_lUqiTasks) { if(m_lUqiTasks.Contains(str)) return; nTasks = m_lUqiTasks.Count; m_lUqiTasks.Add(str); } int nPoolWorkers, nPoolCompletions; ThreadPool.GetAvailableThreads(out nPoolWorkers, out nPoolCompletions); if((nTasks <= 3) && (nPoolWorkers >= 2)) ThreadPool.QueueUserWorkItem(new WaitCallback( this.UpdateQualityInfoTh), str); else { ParameterizedThreadStart pts = new ParameterizedThreadStart( this.UpdateQualityInfoTh); Thread th = new Thread(pts); th.Start(str); } } private void UpdateQualityInfoTh(object oPassword) { string str = (oPassword as string); if(str == null) { Debug.Assert(false); return; } try { Debug.Assert(m_tbPassword.InvokeRequired); // byte[] pbUtf8 = (m_tbPassword.Invoke(new UqiGetPasswordFn( // this.UqiGetPassword)) as byte[]); // if(pbUtf8 == null) { Debug.Assert(false); return; } byte[] pbUtf8 = StrUtil.Utf8.GetBytes(str); // str = StrUtil.Utf8.GetString(pbUtf8); // lock(m_lUqiTasks) { m_lUqiTasks.Add(str); } uint uBits = QualityEstimation.EstimatePasswordBits(pbUtf8); TextBox tb = m_tbPassword; if(tb == null) return; // Control disposed in the meanwhile byte[] pbNewUtf8 = (tb.Invoke(new UqiGetPasswordDelegate( this.UqiGetPassword)) as byte[]); if(pbNewUtf8 == null) { Debug.Assert(false); return; } // Test whether password has changed in the meanwhile if(!MemUtil.ArraysEqual(pbUtf8, pbNewUtf8)) return; tb.Invoke(new UqiShowQualityDelegate(this.UqiShowQuality), uBits, (uint)str.Length); } catch(Exception) { Debug.Assert(false); } finally { lock(m_lUqiTasks) { m_lUqiTasks.Remove(str); } } } private delegate byte[] UqiGetPasswordDelegate(); private byte[] UqiGetPassword() { try { return m_secPassword.ToUtf8(); } catch(Exception) { Debug.Assert(false); } return null; } private delegate void UqiShowQualityDelegate(uint uBits, uint uLength); private void UqiShowQuality(uint uBits, uint uLength) { try { string strBits = uBits.ToString() + " " + KPRes.BitsStc; m_pbQuality.ProgressText = strBits; int iPos = (int)((100 * uBits) / (256 / 2)); if(iPos < 0) iPos = 0; else if(iPos > 100) iPos = 100; m_pbQuality.Value = iPos; string strInfo = uLength.ToString() + " " + KPRes.CharsAbbr; if(Program.Config.UI.OptimizeForScreenReader) strInfo = strBits + ", " + strInfo; m_lblQualityInfo.Text = strInfo; if(m_ttHint != null) m_ttHint.SetToolTip(m_lblQualityInfo, KPRes.PasswordLength + ": " + uLength.ToString() + " " + KPRes.CharsStc); } catch(Exception) { Debug.Assert(false); } } private static Bitmap g_bmpLightDots = null; internal static void ConfigureHideButton(CheckBox cb, ToolTip tt) { if(cb == null) { Debug.Assert(false); return; } Debug.Assert(!cb.AutoSize); Debug.Assert(cb.Appearance == Appearance.Button); Debug.Assert(cb.Image == null); Debug.Assert(cb.Text == "***"); Debug.Assert(cb.TextAlign == ContentAlignment.MiddleCenter); Debug.Assert(cb.TextImageRelation == TextImageRelation.Overlay); Debug.Assert(cb.UseVisualStyleBackColor); Debug.Assert((cb.Width == 32) || DpiUtil.ScalingRequired); Debug.Assert((cb.Height == 23) || DpiUtil.ScalingRequired); // Too much spacing between the dots when using the default font // cb.Text = new string(SecureEdit.PasswordChar, 3); cb.Text = string.Empty; Image img = Properties.Resources.B19x07_3BlackDots; if(UIUtil.IsDarkTheme) { if(g_bmpLightDots == null) g_bmpLightDots = UIUtil.InvertImage(img); if(g_bmpLightDots != null) img = g_bmpLightDots; } else { Debug.Assert(g_bmpLightDots == null); } // Always or never cb.Image = img; Debug.Assert(cb.ImageAlign == ContentAlignment.MiddleCenter); if(tt != null) tt.SetToolTip(cb, KPRes.TogglePasswordAsterisks); } } } KeePass/UI/ColumnProvider.cs0000664000000000000000000000405212641461342014731 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using KeePassLib; namespace KeePass.UI { public abstract class ColumnProvider { /// /// Names of all provided columns. /// Querying this property should be fast, i.e. it's recommended that /// you cache the returned string array. /// public abstract string[] ColumnNames { get; } public virtual HorizontalAlignment TextAlign { get { return HorizontalAlignment.Left; } } public abstract string GetCellData(string strColumnName, PwEntry pe); public virtual bool SupportsCellAction(string strColumnName) { return false; } /// /// KeePass calls this method when a user double-clicks onto a cell /// of a column provided by the plugin. /// This method is only called, if the provider returns true /// in the SupportsCellAction method for the specified column. /// /// Name of the active column. /// Entry to which the active cell belongs. public virtual void PerformCellAction(string strColumnName, PwEntry pe) { } } } KeePass/UI/PromptedTextBox.cs0000664000000000000000000000376212641461344015102 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.ComponentModel; using System.Drawing; namespace KeePass.UI { public sealed class PromptedTextBox : TextBox { private const int WM_PAINT = 0x000F; private string m_strPrompt = string.Empty; [DefaultValue("")] public string PromptText { get { return m_strPrompt; } set { if(value == null) throw new ArgumentNullException("value"); m_strPrompt = value; this.Invalidate(); } } protected override void WndProc(ref Message m) { base.WndProc(ref m); if((m.Msg == WM_PAINT) && !this.Focused && (this.Text.Length == 0) && (m_strPrompt.Length > 0)) { TextFormatFlags tff = (TextFormatFlags.EndEllipsis | TextFormatFlags.NoPrefix | TextFormatFlags.Left | TextFormatFlags.Top | TextFormatFlags.NoPadding); using(Graphics g = this.CreateGraphics()) { Rectangle rect = this.ClientRectangle; rect.Offset(1, 1); TextRenderer.DrawText(g, m_strPrompt, this.Font, rect, SystemColors.GrayText, this.BackColor, tff); } } } } } KeePass/UI/ListViewStateEx.cs0000664000000000000000000000327612641461344015036 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; namespace KeePass.UI { internal sealed class ListViewStateEx { public readonly int[] ColumnWidths; public ListViewStateEx(ListView lv) { if(lv == null) throw new ArgumentNullException("lv"); this.ColumnWidths = new int[lv.Columns.Count]; for(int iColumn = 0; iColumn < lv.Columns.Count; ++iColumn) this.ColumnWidths[iColumn] = lv.Columns[iColumn].Width; } public bool CompareTo(ListView lv) { if(lv == null) throw new ArgumentNullException("lv"); if(lv.Columns.Count != this.ColumnWidths.Length) return false; for(int iColumn = 0; iColumn < this.ColumnWidths.Length; ++iColumn) { if(lv.Columns[iColumn].Width != this.ColumnWidths[iColumn]) return false; } return true; } } } KeePass/UI/UIUtil.cs0000664000000000000000000024744612666052264013162 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; using System.Runtime.InteropServices; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Threading; using System.IO; using System.Media; using Microsoft.Win32; using KeePass.App; using KeePass.App.Configuration; using KeePass.Native; using KeePass.Resources; using KeePass.UI.ToolStripRendering; using KeePass.Util; using KeePass.Util.Spr; using KeePassLib; using KeePassLib.Collections; using KeePassLib.Delegates; using KeePassLib.Interfaces; using KeePassLib.Utility; using NativeLib = KeePassLib.Native.NativeLib; namespace KeePass.UI { public sealed class UIScrollInfo { private readonly int m_dx; public int ScrollX { get { return m_dx; } } private readonly int m_dy; public int ScrollY { get { return m_dy; } } private readonly int m_idxTop; public int TopIndex { get { return m_idxTop; } } public UIScrollInfo(int iScrollX, int iScrollY, int iTopIndex) { m_dx = iScrollX; m_dy = iScrollY; m_idxTop = iTopIndex; } } public static class UIUtil { private static bool m_bVistaStyleLists = false; public static bool VistaStyleListsSupported { get { return m_bVistaStyleLists; } } public static bool IsDarkTheme { get { return !IsDarkColor(SystemColors.ControlText); } } public static bool IsHighContrast { get { try { return SystemInformation.HighContrast; } catch(Exception) { Debug.Assert(false); } return false; } } public static void Initialize(bool bReinitialize) { // bReinitialize is currently not used, but not removed // for plugin backward compatibility string strUuid = Program.Config.UI.ToolStripRenderer; ToolStripRenderer tsr = TsrPool.GetBestRenderer(strUuid); if(tsr == null) { Debug.Assert(false); tsr = new ToolStripProfessionalRenderer(); } ToolStripManager.Renderer = tsr; m_bVistaStyleLists = (WinUtil.IsAtLeastWindowsVista && (Environment.Version.Major >= 2)); } public static void RtfSetSelectionLink(RichTextBox richTextBox) { IntPtr pCF = IntPtr.Zero; try { NativeMethods.CHARFORMAT2 cf = new NativeMethods.CHARFORMAT2(); cf.cbSize = (uint)Marshal.SizeOf(cf); cf.dwMask = NativeMethods.CFM_LINK; cf.dwEffects = NativeMethods.CFE_LINK; IntPtr wParam = (IntPtr)NativeMethods.SCF_SELECTION; pCF = Marshal.AllocCoTaskMem(Marshal.SizeOf(cf)); Marshal.StructureToPtr(cf, pCF, false); NativeMethods.SendMessage(richTextBox.Handle, NativeMethods.EM_SETCHARFORMAT, wParam, pCF); } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } finally { if(pCF != IntPtr.Zero) Marshal.FreeCoTaskMem(pCF); } } private static NativeMethods.CHARFORMAT2 RtfGetCharFormat(RichTextBox rtb) { NativeMethods.CHARFORMAT2 cf = new NativeMethods.CHARFORMAT2(); cf.cbSize = (uint)Marshal.SizeOf(cf); try { IntPtr wParam = (IntPtr)NativeMethods.SCF_SELECTION; IntPtr lParam = Marshal.AllocCoTaskMem(Marshal.SizeOf(cf)); Marshal.StructureToPtr(cf, lParam, false); NativeMethods.SendMessage(rtb.Handle, NativeMethods.EM_GETCHARFORMAT, wParam, lParam); cf = (NativeMethods.CHARFORMAT2)Marshal.PtrToStructure(lParam, typeof(NativeMethods.CHARFORMAT2)); Marshal.FreeCoTaskMem(lParam); } catch(Exception) { Debug.Assert(false); } return cf; } public static bool RtfIsFirstCharLink(RichTextBox rtb) { NativeMethods.CHARFORMAT2 cf = RtfGetCharFormat(rtb); return ((cf.dwEffects & NativeMethods.CFE_LINK) != 0); } public static void RtfLinkifyExtUrls(RichTextBox richTextBox, bool bResetSelection) { const string strProto = "cmd://"; try { string strText = richTextBox.Text; int nOffset = 0; while(nOffset < strText.Length) { int nStart = strText.IndexOf(strProto, nOffset, StrUtil.CaseIgnoreCmp); if(nStart < 0) break; richTextBox.Select(nStart, UrlUtil.GetUrlLength(strText, nStart)); RtfSetSelectionLink(richTextBox); nOffset = nStart + 1; } if(bResetSelection) richTextBox.Select(0, 0); } catch(Exception) { Debug.Assert(false); } } public static void RtfLinkifyText(RichTextBox rtb, string strLinkText, bool bResetTempSelection) { if(rtb == null) throw new ArgumentNullException("rtb"); if(string.IsNullOrEmpty(strLinkText)) return; // No assert try { string strText = rtb.Text; int nStart = strText.IndexOf(strLinkText); if(nStart >= 0) { rtb.Select(nStart, strLinkText.Length); RtfSetSelectionLink(rtb); if(bResetTempSelection) rtb.Select(0, 0); } } catch(Exception) { Debug.Assert(false); } } public static void RtfLinkifyReferences(RichTextBox rtb, bool bResetTempSelection) { try { string str = rtb.Text; int iOffset = 0; while(true) { int iStart = str.IndexOf(SprEngine.StrRefStart, iOffset, StrUtil.CaseIgnoreCmp); if(iStart < 0) break; int iEnd = str.IndexOf(SprEngine.StrRefEnd, iStart + 1, StrUtil.CaseIgnoreCmp); if(iEnd <= iStart) break; string strRef = str.Substring(iStart, iEnd - iStart + 1); RtfLinkifyText(rtb, strRef, bResetTempSelection); iOffset = iStart + 1; } } catch(Exception) { Debug.Assert(false); } } [Obsolete("Use GfxUtil.LoadImage instead.")] public static Image LoadImage(byte[] pb) { return GfxUtil.LoadImage(pb); } public static Image CreateColorBitmap24(int nWidth, int nHeight, Color color) { Bitmap bmp = new Bitmap(nWidth, nHeight, PixelFormat.Format24bppRgb); using(Graphics g = Graphics.FromImage(bmp)) { g.Clear(color); } return bmp; } public static ImageList BuildImageListUnscaled(List lImages, int nWidth, int nHeight) { ImageList imgList = new ImageList(); imgList.ImageSize = new Size(nWidth, nHeight); imgList.ColorDepth = ColorDepth.Depth32Bit; if((lImages != null) && (lImages.Count > 0)) imgList.Images.AddRange(lImages.ToArray()); return imgList; } public static ImageList BuildImageList(List vImages, int nWidth, int nHeight) { ImageList imgList = new ImageList(); imgList.ImageSize = new Size(nWidth, nHeight); imgList.ColorDepth = ColorDepth.Depth32Bit; List lImages = BuildImageListEx(vImages, nWidth, nHeight); if((lImages != null) && (lImages.Count > 0)) imgList.Images.AddRange(lImages.ToArray()); return imgList; } public static List BuildImageListEx(List vImages, int nWidth, int nHeight) { List lImages = new List(); foreach(PwCustomIcon pwci in vImages) { Image img = pwci.GetImage(nWidth, nHeight); if(img == null) { Debug.Assert(false); img = UIUtil.CreateColorBitmap24(nWidth, nHeight, Color.White); } if((img.Width != nWidth) || (img.Height != nHeight)) { Debug.Assert(false); img = new Bitmap(img, new Size(nWidth, nHeight)); } lImages.Add(img); } return lImages; } public static ImageList ConvertImageList24(List vImages, int nWidth, int nHeight, Color clrBack) { ImageList ilNew = new ImageList(); ilNew.ImageSize = new Size(nWidth, nHeight); ilNew.ColorDepth = ColorDepth.Depth24Bit; List vNewImages = new List(); foreach(Image img in vImages) { Bitmap bmpNew = new Bitmap(nWidth, nHeight, PixelFormat.Format24bppRgb); using(Graphics g = Graphics.FromImage(bmpNew)) { g.Clear(clrBack); if((img.Width == nWidth) && (img.Height == nHeight)) g.DrawImageUnscaled(img, 0, 0); else { g.InterpolationMode = InterpolationMode.High; g.DrawImage(img, 0, 0, nWidth, nHeight); } } vNewImages.Add(bmpNew); } ilNew.Images.AddRange(vNewImages.ToArray()); return ilNew; } public static ImageList CloneImageList(ImageList ilSource, bool bCloneImages) { Debug.Assert(ilSource != null); if(ilSource == null) throw new ArgumentNullException("ilSource"); ImageList ilNew = new ImageList(); ilNew.ColorDepth = ilSource.ColorDepth; ilNew.ImageSize = ilSource.ImageSize; foreach(Image img in ilSource.Images) { if(bCloneImages) ilNew.Images.Add(new Bitmap(img)); else ilNew.Images.Add(img); } return ilNew; } public static bool DrawAnimatedRects(Rectangle rectFrom, Rectangle rectTo) { bool bResult; try { NativeMethods.RECT rnFrom = new NativeMethods.RECT(rectFrom); NativeMethods.RECT rnTo = new NativeMethods.RECT(rectTo); bResult = NativeMethods.DrawAnimatedRects(IntPtr.Zero, NativeMethods.IDANI_CAPTION, ref rnFrom, ref rnTo); } catch(Exception) { Debug.Assert(false); bResult = false; } return bResult; } private static void SetCueBanner(IntPtr hWnd, string strText) { Debug.Assert(strText != null); if(strText == null) throw new ArgumentNullException("strText"); IntPtr pText = IntPtr.Zero; try { pText = Marshal.StringToHGlobalUni(strText); NativeMethods.SendMessage(hWnd, NativeMethods.EM_SETCUEBANNER, IntPtr.Zero, pText); } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } finally { if(pText != IntPtr.Zero) Marshal.FreeHGlobal(pText); } } public static void SetCueBanner(TextBox tb, string strText) { SetCueBanner(tb.Handle, strText); } public static void SetCueBanner(ToolStripTextBox tb, string strText) { SetCueBanner(tb.TextBox, strText); } public static void SetCueBanner(ToolStripComboBox tb, string strText) { try { NativeMethods.COMBOBOXINFO cbi = new NativeMethods.COMBOBOXINFO(); cbi.cbSize = Marshal.SizeOf(cbi); NativeMethods.GetComboBoxInfo(tb.ComboBox.Handle, ref cbi); SetCueBanner(cbi.hwndEdit, strText); } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } } public static Bitmap CreateScreenshot() { return CreateScreenshot(null); } public static Bitmap CreateScreenshot(Screen sc) { try { Screen s = (sc ?? Screen.PrimaryScreen); Bitmap bmp = new Bitmap(s.Bounds.Width, s.Bounds.Height); using(Graphics g = Graphics.FromImage(bmp)) { g.CopyFromScreen(s.Bounds.Location, new Point(0, 0), s.Bounds.Size); } return bmp; } catch(Exception) { } // Throws on Cocoa and Quartz return null; } public static void DimImage(Image bmp) { if(bmp == null) { Debug.Assert(false); return; } using(Brush b = new SolidBrush(Color.FromArgb(192, Color.Black))) { using(Graphics g = Graphics.FromImage(bmp)) { g.FillRectangle(b, 0, 0, bmp.Width, bmp.Height); } } } public static void PrepareStandardMultilineControl(RichTextBox rtb, bool bSimpleTextOnly, bool bCtrlEnterAccepts) { Debug.Assert(rtb != null); if(rtb == null) throw new ArgumentNullException("rtb"); try { int nStyle = NativeMethods.GetWindowStyle(rtb.Handle); if((nStyle & NativeMethods.ES_WANTRETURN) == 0) { NativeMethods.SetWindowLong(rtb.Handle, NativeMethods.GWL_STYLE, nStyle | NativeMethods.ES_WANTRETURN); Debug.Assert((NativeMethods.GetWindowStyle(rtb.Handle) & NativeMethods.ES_WANTRETURN) != 0); } } catch(Exception) { } CustomRichTextBoxEx crtb = (rtb as CustomRichTextBoxEx); if(crtb != null) { crtb.SimpleTextOnly = bSimpleTextOnly; crtb.CtrlEnterAccepts = bCtrlEnterAccepts; } else { Debug.Assert(!bSimpleTextOnly && !bCtrlEnterAccepts); } } public static void SetMultilineText(TextBox tb, string str) { if(tb == null) { Debug.Assert(false); return; } if(str == null) str = string.Empty; if(!NativeLib.IsUnix()) str = StrUtil.NormalizeNewLines(str, true); tb.Text = str; } /// /// Fill a ListView with password entries. /// /// ListView to fill. /// Entries. /// Columns of the ListView. The first /// parameter of the key-value pair is the internal string field name, /// and the second one the text displayed in the column header. public static void CreateEntryList(ListView lv, IEnumerable vEntries, List> vColumns, ImageList ilIcons) { if(lv == null) throw new ArgumentNullException("lv"); if(vEntries == null) throw new ArgumentNullException("vEntries"); if(vColumns == null) throw new ArgumentNullException("vColumns"); if(vColumns.Count == 0) throw new ArgumentException(); // ilIcons may be null lv.BeginUpdate(); lv.Items.Clear(); lv.Columns.Clear(); lv.ShowGroups = true; lv.SmallImageList = ilIcons; foreach(KeyValuePair kvp in vColumns) { lv.Columns.Add(kvp.Value); } DocumentManagerEx dm = Program.MainForm.DocumentManager; ListViewGroup lvg = new ListViewGroup(Guid.NewGuid().ToString()); DateTime dtNow = DateTime.Now; bool bFirstEntry = true; foreach(PwEntry pe in vEntries) { if(pe == null) { Debug.Assert(false); continue; } if(pe.ParentGroup != null) { string strGroup = pe.ParentGroup.GetFullPath(" - ", false); if(strGroup != lvg.Header) { lvg = new ListViewGroup(strGroup, HorizontalAlignment.Left); lv.Groups.Add(lvg); } } ListViewItem lvi = new ListViewItem(AppDefs.GetEntryField(pe, vColumns[0].Key)); if(ilIcons != null) { if(pe.Expires && (pe.ExpiryTime <= dtNow)) lvi.ImageIndex = (int)PwIcon.Expired; else if(pe.CustomIconUuid == PwUuid.Zero) lvi.ImageIndex = (int)pe.IconId; else { lvi.ImageIndex = (int)pe.IconId; foreach(PwDocument ds in dm.Documents) { int nInx = ds.Database.GetCustomIconIndex(pe.CustomIconUuid); if(nInx > -1) { ilIcons.Images.Add(new Bitmap(DpiUtil.GetIcon( ds.Database, pe.CustomIconUuid))); lvi.ImageIndex = ilIcons.Images.Count - 1; break; } } } } for(int iCol = 1; iCol < vColumns.Count; ++iCol) lvi.SubItems.Add(AppDefs.GetEntryField(pe, vColumns[iCol].Key)); if(!pe.ForegroundColor.IsEmpty) lvi.ForeColor = pe.ForegroundColor; if(!pe.BackgroundColor.IsEmpty) lvi.BackColor = pe.BackgroundColor; lvi.Tag = pe; lv.Items.Add(lvi); lvg.Items.Add(lvi); if(bFirstEntry) { UIUtil.SetFocusedItem(lv, lvi, true); bFirstEntry = false; } } int nColWidth = (lv.ClientRectangle.Width - GetVScrollBarWidth()) / vColumns.Count; foreach(ColumnHeader ch in lv.Columns) { ch.Width = nColWidth; } lv.EndUpdate(); } /// /// Fill a ListView with password entries. /// public static void CreateEntryList(ListView lv, List lCtxs, AceAutoTypeCtxFlags f, ImageList ilIcons) { if(lv == null) throw new ArgumentNullException("lv"); if(lCtxs == null) throw new ArgumentNullException("lCtxs"); lv.BeginUpdate(); lv.Items.Clear(); lv.Columns.Clear(); lv.ShowGroups = true; lv.SmallImageList = ilIcons; Debug.Assert((f & AceAutoTypeCtxFlags.ColTitle) != AceAutoTypeCtxFlags.None); f |= AceAutoTypeCtxFlags.ColTitle; // Enforce title lv.Columns.Add(KPRes.Title); if((f & AceAutoTypeCtxFlags.ColUserName) != AceAutoTypeCtxFlags.None) lv.Columns.Add(KPRes.UserName); if((f & AceAutoTypeCtxFlags.ColPassword) != AceAutoTypeCtxFlags.None) lv.Columns.Add(KPRes.Password); if((f & AceAutoTypeCtxFlags.ColUrl) != AceAutoTypeCtxFlags.None) lv.Columns.Add(KPRes.Url); if((f & AceAutoTypeCtxFlags.ColNotes) != AceAutoTypeCtxFlags.None) lv.Columns.Add(KPRes.Notes); if((f & AceAutoTypeCtxFlags.ColSequenceComments) != AceAutoTypeCtxFlags.None) lv.Columns.Add(KPRes.Sequence + " - " + KPRes.Comments); if((f & AceAutoTypeCtxFlags.ColSequence) != AceAutoTypeCtxFlags.None) lv.Columns.Add(KPRes.Sequence); ListViewGroup lvg = new ListViewGroup(Guid.NewGuid().ToString()); DateTime dtNow = DateTime.Now; Regex rxSeqCmt = null; bool bFirstEntry = true; foreach(AutoTypeCtx ctx in lCtxs) { if(ctx == null) { Debug.Assert(false); continue; } PwEntry pe = ctx.Entry; if(pe == null) { Debug.Assert(false); continue; } PwDatabase pd = ctx.Database; if(pd == null) { Debug.Assert(false); continue; } if(pe.ParentGroup != null) { string strGroup = pe.ParentGroup.GetFullPath(" - ", true); if(strGroup != lvg.Header) { lvg = new ListViewGroup(strGroup, HorizontalAlignment.Left); lv.Groups.Add(lvg); } } SprContext sprCtx = new SprContext(pe, pd, SprCompileFlags.Deref); sprCtx.ForcePlainTextPasswords = false; ListViewItem lvi = new ListViewItem(SprEngine.Compile( pe.Strings.ReadSafe(PwDefs.TitleField), sprCtx)); if(pe.Expires && (pe.ExpiryTime <= dtNow)) lvi.ImageIndex = (int)PwIcon.Expired; else if(pe.CustomIconUuid == PwUuid.Zero) lvi.ImageIndex = (int)pe.IconId; else { int nInx = pd.GetCustomIconIndex(pe.CustomIconUuid); if(nInx > -1) { ilIcons.Images.Add(new Bitmap(DpiUtil.GetIcon( pd, pe.CustomIconUuid))); lvi.ImageIndex = ilIcons.Images.Count - 1; } else { Debug.Assert(false); lvi.ImageIndex = (int)pe.IconId; } } if((f & AceAutoTypeCtxFlags.ColUserName) != AceAutoTypeCtxFlags.None) lvi.SubItems.Add(SprEngine.Compile(pe.Strings.ReadSafe( PwDefs.UserNameField), sprCtx)); if((f & AceAutoTypeCtxFlags.ColPassword) != AceAutoTypeCtxFlags.None) lvi.SubItems.Add(SprEngine.Compile(pe.Strings.ReadSafe( PwDefs.PasswordField), sprCtx)); if((f & AceAutoTypeCtxFlags.ColUrl) != AceAutoTypeCtxFlags.None) lvi.SubItems.Add(SprEngine.Compile(pe.Strings.ReadSafe( PwDefs.UrlField), sprCtx)); if((f & AceAutoTypeCtxFlags.ColNotes) != AceAutoTypeCtxFlags.None) lvi.SubItems.Add(StrUtil.MultiToSingleLine(SprEngine.Compile( pe.Strings.ReadSafe(PwDefs.NotesField), sprCtx))); if((f & AceAutoTypeCtxFlags.ColSequenceComments) != AceAutoTypeCtxFlags.None) { if(rxSeqCmt == null) rxSeqCmt = new Regex("\\{[Cc]:[^\\}]*\\}"); string strSeqCmt = string.Empty, strImpSeqCmt = string.Empty; foreach(Match m in rxSeqCmt.Matches(ctx.Sequence)) { string strPart = m.Value; if(strPart == null) { Debug.Assert(false); continue; } if(strPart.Length < 4) { Debug.Assert(false); continue; } strPart = strPart.Substring(3, strPart.Length - 4).Trim(); bool bImp = strPart.StartsWith("!"); // Important comment if(bImp) strPart = strPart.Substring(1); if(strPart.Length == 0) continue; if(bImp) { if(strImpSeqCmt.Length > 0) strImpSeqCmt += " - "; strImpSeqCmt += strPart; } else { if(strSeqCmt.Length > 0) strSeqCmt += " - "; strSeqCmt += strPart; } } lvi.SubItems.Add((strImpSeqCmt.Length > 0) ? strImpSeqCmt : strSeqCmt); } if((f & AceAutoTypeCtxFlags.ColSequence) != AceAutoTypeCtxFlags.None) lvi.SubItems.Add(ctx.Sequence); Debug.Assert(lvi.SubItems.Count == lv.Columns.Count); if(!pe.ForegroundColor.IsEmpty) lvi.ForeColor = pe.ForegroundColor; if(!pe.BackgroundColor.IsEmpty) lvi.BackColor = pe.BackgroundColor; lvi.Tag = ctx; lv.Items.Add(lvi); lvg.Items.Add(lvi); if(bFirstEntry) { UIUtil.SetFocusedItem(lv, lvi, true); bFirstEntry = false; } } lv.EndUpdate(); // Resize columns *after* EndUpdate, otherwise sizing problem // caused by the scrollbar UIUtil.ResizeColumns(lv, true); } public static int GetVScrollBarWidth() { try { return SystemInformation.VerticalScrollBarWidth; } catch(Exception) { Debug.Assert(false); } return 18; // Default theme on Windows Vista } /// /// Create a file type filter specification string. /// /// Default extension(s), without leading /// dot. Multiple extensions must be separated by a '|' (e.g. /// "html|htm", having the same description "HTML Files"). public static string CreateFileTypeFilter(string strExtension, string strDescription, bool bIncludeAllFiles) { StringBuilder sb = new StringBuilder(); if(!string.IsNullOrEmpty(strExtension) && !string.IsNullOrEmpty( strDescription)) { // str += strDescription + @" (*." + strExtension + // @")|*." + strExtension; string[] vExts = strExtension.Split(new char[]{ '|' }, StringSplitOptions.RemoveEmptyEntries); if(vExts.Length > 0) { sb.Append(strDescription); sb.Append(@" (*."); for(int i = 0; i < vExts.Length; ++i) { if(i > 0) sb.Append(@", *."); sb.Append(vExts[i]); } sb.Append(@")|*."); for(int i = 0; i < vExts.Length; ++i) { if(i > 0) sb.Append(@";*."); sb.Append(vExts[i]); } } } if(bIncludeAllFiles) { if(sb.Length > 0) sb.Append(@"|"); sb.Append(KPRes.AllFiles); sb.Append(@" (*.*)|*.*"); } return sb.ToString(); } public static string GetPrimaryFileTypeExt(string strExtensions) { if(strExtensions == null) { Debug.Assert(false); return string.Empty; } int i = strExtensions.IndexOf('|'); if(i >= 0) return strExtensions.Substring(0, i); return strExtensions; // Single extension } [Obsolete("Use the overload with the strContext parameter.")] public static OpenFileDialog CreateOpenFileDialog(string strTitle, string strFilter, int iFilterIndex, string strDefaultExt, bool bMultiSelect, bool bRestoreDirectory) { return (OpenFileDialog)(CreateOpenFileDialog(strTitle, strFilter, iFilterIndex, strDefaultExt, bMultiSelect, string.Empty).FileDialog); } public static OpenFileDialogEx CreateOpenFileDialog(string strTitle, string strFilter, int iFilterIndex, string strDefaultExt, bool bMultiSelect, string strContext) { OpenFileDialogEx ofd = new OpenFileDialogEx(strContext); if(!string.IsNullOrEmpty(strDefaultExt)) ofd.DefaultExt = strDefaultExt; if(!string.IsNullOrEmpty(strFilter)) { ofd.Filter = strFilter; if(iFilterIndex > 0) ofd.FilterIndex = iFilterIndex; } ofd.Multiselect = bMultiSelect; if(!string.IsNullOrEmpty(strTitle)) ofd.Title = strTitle; return ofd; } [Obsolete("Use the overload with the strContext parameter.")] public static SaveFileDialog CreateSaveFileDialog(string strTitle, string strSuggestedFileName, string strFilter, int iFilterIndex, string strDefaultExt, bool bRestoreDirectory) { return (SaveFileDialog)(CreateSaveFileDialog(strTitle, strSuggestedFileName, strFilter, iFilterIndex, strDefaultExt, string.Empty).FileDialog); } [Obsolete("Use the overload with the strContext parameter.")] public static SaveFileDialog CreateSaveFileDialog(string strTitle, string strSuggestedFileName, string strFilter, int iFilterIndex, string strDefaultExt, bool bRestoreDirectory, bool bIsDatabaseFile) { return (SaveFileDialog)(CreateSaveFileDialog(strTitle, strSuggestedFileName, strFilter, iFilterIndex, strDefaultExt, (bIsDatabaseFile ? AppDefs.FileDialogContext.Database : string.Empty)).FileDialog); } public static SaveFileDialogEx CreateSaveFileDialog(string strTitle, string strSuggestedFileName, string strFilter, int iFilterIndex, string strDefaultExt, string strContext) { SaveFileDialogEx sfd = new SaveFileDialogEx(strContext); if(!string.IsNullOrEmpty(strDefaultExt)) sfd.DefaultExt = strDefaultExt; if(!string.IsNullOrEmpty(strSuggestedFileName)) sfd.FileName = strSuggestedFileName; if(!string.IsNullOrEmpty(strFilter)) { sfd.Filter = strFilter; if(iFilterIndex > 0) sfd.FilterIndex = iFilterIndex; } if(!string.IsNullOrEmpty(strTitle)) sfd.Title = strTitle; if(strContext != null) { if((strContext == AppDefs.FileDialogContext.Database) && (Program.Config.Defaults.FileSaveAsDirectory.Length > 0)) sfd.InitialDirectory = Program.Config.Defaults.FileSaveAsDirectory; } return sfd; } public static FolderBrowserDialog CreateFolderBrowserDialog(string strDescription) { FolderBrowserDialog fbd = new FolderBrowserDialog(); if((strDescription != null) && (strDescription.Length > 0)) fbd.Description = strDescription; fbd.ShowNewFolderButton = true; return fbd; } private static ColorDialog CreateColorDialog(Color clrDefault) { ColorDialog dlg = new ColorDialog(); dlg.AllowFullOpen = true; dlg.AnyColor = true; if(!clrDefault.IsEmpty) dlg.Color = clrDefault; dlg.FullOpen = true; dlg.ShowHelp = false; // dlg.SolidColorOnly = false; try { string strColors = Program.Config.Defaults.CustomColors; if(!string.IsNullOrEmpty(strColors)) { int[] vColors = StrUtil.DeserializeIntArray(strColors); if((vColors != null) && (vColors.Length > 0)) dlg.CustomColors = vColors; } } catch(Exception) { Debug.Assert(false); } return dlg; } private static void SaveCustomColors(ColorDialog dlg) { if(dlg == null) { Debug.Assert(false); return; } try { int[] vColors = dlg.CustomColors; if((vColors == null) || (vColors.Length == 0)) Program.Config.Defaults.CustomColors = string.Empty; else Program.Config.Defaults.CustomColors = StrUtil.SerializeIntArray(vColors); } catch(Exception) { Debug.Assert(false); } } public static Color? ShowColorDialog(Color clrDefault) { ColorDialog dlg = CreateColorDialog(clrDefault); GlobalWindowManager.AddDialog(dlg); DialogResult dr = dlg.ShowDialog(); GlobalWindowManager.RemoveDialog(dlg); SaveCustomColors(dlg); Color? clrResult = null; if(dr == DialogResult.OK) clrResult = dlg.Color; dlg.Dispose(); return clrResult; } public static FontDialog CreateFontDialog(bool bEffects) { FontDialog dlg = new FontDialog(); dlg.FontMustExist = true; dlg.ShowEffects = bEffects; return dlg; } public static void SetGroupNodeToolTip(TreeNode tn, PwGroup pg) { if((tn == null) || (pg == null)) { Debug.Assert(false); return; } string str = GetPwGroupToolTip(pg); if(str == null) return; try { tn.ToolTipText = str; } catch(Exception) { Debug.Assert(false); } } public static string GetPwGroupToolTip(PwGroup pg) { if(pg == null) { Debug.Assert(false); return null; } StringBuilder sb = new StringBuilder(); sb.Append(pg.Name); string strNotes = pg.Notes.Trim(); if(strNotes.Length > 0) { sb.Append(MessageService.NewParagraph); sb.Append(strNotes); } else return null; // uint uSubGroups, uEntries; // pg.GetCounts(true, out uSubGroups, out uEntries); // sb.Append(MessageService.NewParagraph); // sb.Append(KPRes.Subgroups); sb.Append(": "); sb.Append(uSubGroups); // sb.Append(MessageService.NewLine); // sb.Append(KPRes.Entries); sb.Append(": "); sb.Append(uEntries); return sb.ToString(); } // public static string GetPwGroupToolTipTN(TreeNode tn) // { // if(tn == null) { Debug.Assert(false); return null; } // PwGroup pg = (tn.Tag as PwGroup); // if(pg == null) { Debug.Assert(false); return null; } // return GetPwGroupToolTip(pg); // } public static Color LightenColor(Color clrBase, double dblFactor) { if((dblFactor <= 0.0) || (dblFactor > 1.0)) return clrBase; unchecked { byte r = (byte)((double)(255 - clrBase.R) * dblFactor + clrBase.R); byte g = (byte)((double)(255 - clrBase.G) * dblFactor + clrBase.G); byte b = (byte)((double)(255 - clrBase.B) * dblFactor + clrBase.B); return Color.FromArgb((int)r, (int)g, (int)b); } } public static Color DarkenColor(Color clrBase, double dblFactor) { if((dblFactor <= 0.0) || (dblFactor > 1.0)) return clrBase; unchecked { byte r = (byte)((double)clrBase.R - ((double)clrBase.R * dblFactor)); byte g = (byte)((double)clrBase.G - ((double)clrBase.G * dblFactor)); byte b = (byte)((double)clrBase.B - ((double)clrBase.B * dblFactor)); return Color.FromArgb((int)r, (int)g, (int)b); } } public static void MoveSelectedItemsInternalOne(ListView lv, PwObjectList v, bool bUp) where T : class, IDeepCloneable { if(lv == null) throw new ArgumentNullException("lv"); if(v == null) throw new ArgumentNullException("v"); if(lv.Items.Count != (int)v.UCount) throw new ArgumentException(); ListView.SelectedListViewItemCollection lvsic = lv.SelectedItems; if(lvsic.Count == 0) return; int nStart = (bUp ? 0 : (lvsic.Count - 1)); int nEnd = (bUp ? lvsic.Count : -1); int iStep = (bUp ? 1 : -1); for(int i = nStart; i != nEnd; i += iStep) v.MoveOne((lvsic[i].Tag as T), bUp); } public static void DeleteSelectedItems(ListView lv, PwObjectList vInternalList) where T : class, IDeepCloneable { if(lv == null) throw new ArgumentNullException("lv"); if(vInternalList == null) throw new ArgumentNullException("vInternalList"); ListView.SelectedIndexCollection lvsc = lv.SelectedIndices; int n = lvsc.Count; // Getting Count sends a message if(n == 0) return; // LVSIC: one access by index requires O(n) time, thus copy // all to an array (which requires O(1) for each element) int[] v = new int[n]; lvsc.CopyTo(v, 0); for(int i = 0; i < n; ++i) { int nIndex = v[n - i - 1]; if(vInternalList.Remove(lv.Items[nIndex].Tag as T)) lv.Items.RemoveAt(nIndex); else { Debug.Assert(false); } } } public static object[] GetSelectedItemTags(ListView lv) { if(lv == null) throw new ArgumentNullException("lv"); ListView.SelectedListViewItemCollection lvsc = lv.SelectedItems; if(lvsc == null) { Debug.Assert(false); return new object[0]; } int n = lvsc.Count; // Getting Count sends a message object[] p = new object[n]; int i = 0; // LVSLVIC: one access by index requires O(n) time, thus use // enumerator instead (which requires O(1) for each element) foreach(ListViewItem lvi in lvsc) { if(i >= n) { Debug.Assert(false); break; } p[i] = lvi.Tag; ++i; } Debug.Assert(i == n); return p; } public static void SelectItems(ListView lv, object[] vItemTags) { if(lv == null) throw new ArgumentNullException("lv"); if(vItemTags == null) throw new ArgumentNullException("vItemTags"); for(int i = 0; i < lv.Items.Count; ++i) { if(Array.IndexOf(vItemTags, lv.Items[i].Tag) >= 0) lv.Items[i].Selected = true; } } public static void SetWebBrowserDocument(WebBrowser wb, string strDocumentText) { string strContent = (strDocumentText ?? string.Empty); wb.AllowNavigation = true; wb.DocumentText = strContent; // Wait for document being loaded for(int i = 0; i < 50; ++i) { if(wb.DocumentText == strContent) break; Thread.Sleep(20); Application.DoEvents(); } } public static string GetWebBrowserDocument(WebBrowser wb) { return wb.DocumentText; } public static void SetExplorerTheme(IntPtr hWnd) { if(hWnd == IntPtr.Zero) { Debug.Assert(false); return; } try { NativeMethods.SetWindowTheme(hWnd, "explorer", null); } catch(Exception) { } // Not supported on older operating systems } public static void SetExplorerTheme(Control c, bool bUseListFont) { if(c == null) { Debug.Assert(false); return; } SetExplorerTheme(c.Handle); if(bUseListFont) { if(UISystemFonts.ListFont != null) c.Font = UISystemFonts.ListFont; } } public static void SetShield(Button btn, bool bSetShield) { if(btn == null) throw new ArgumentNullException("btn"); try { if(btn.FlatStyle != FlatStyle.System) { Debug.Assert(false); btn.FlatStyle = FlatStyle.System; } IntPtr h = btn.Handle; if(h == IntPtr.Zero) { Debug.Assert(false); return; } NativeMethods.SendMessage(h, NativeMethods.BCM_SETSHIELD, IntPtr.Zero, (IntPtr)(bSetShield ? 1 : 0)); } catch(Exception) { Debug.Assert(false); } } public static void Configure(ToolStrip ts) { if(ts == null) { Debug.Assert(false); return; } if(Program.DesignMode) return; DpiUtil.Configure(ts); } public static void ConfigureTbButton(ToolStripItem tb, string strText, string strTooltip) { ConfigureTbButton(tb, strText, strTooltip, null); } private static char[] m_vTbTrim = null; public static void ConfigureTbButton(ToolStripItem tb, string strText, string strTooltip, ToolStripMenuItem tsmiEquiv) { if(strText != null) tb.Text = strText; if(m_vTbTrim == null) m_vTbTrim = new char[] { ' ', '\t', '\r', '\n', '.', '\u2026' }; string strTip = (strTooltip ?? strText); if(strTip == null) return; strTip = StrUtil.RemoveAccelerator(strTip); strTip = strTip.Trim(m_vTbTrim); if((tsmiEquiv != null) && (strTip.Length > 0)) { string strShortcut = tsmiEquiv.ShortcutKeyDisplayString; if(!string.IsNullOrEmpty(strShortcut)) strTip += " (" + strShortcut + ")"; } tb.ToolTipText = strTip; } public static void CreateGroupList(PwGroup pgContainer, ComboBox cmb, Dictionary outCreatedItems, PwUuid uuidToSelect, out int iSelectIndex) { iSelectIndex = -1; if(pgContainer == null) { Debug.Assert(false); return; } if(cmb == null) { Debug.Assert(false); return; } // Do not clear the combobox! int iSelectInner = -1; GroupHandler gh = delegate(PwGroup pg) { string str = new string(' ', Math.Abs(8 * ((int)pg.GetLevel() - 1))); str += pg.Name; if((uuidToSelect != null) && pg.Uuid.Equals(uuidToSelect)) iSelectInner = cmb.Items.Count; if(outCreatedItems != null) outCreatedItems[cmb.Items.Count] = pg.Uuid; cmb.Items.Add(str); return true; }; pgContainer.TraverseTree(TraversalMethod.PreOrder, gh, null); iSelectIndex = iSelectInner; } public static void MakeInheritableBoolComboBox(ComboBox cmb, bool? bSelect, bool bInheritedState) { if(cmb == null) { Debug.Assert(false); return; } cmb.Items.Clear(); cmb.Items.Add(KPRes.InheritSettingFromParent + " (" + (bInheritedState ? KPRes.Enabled : KPRes.Disabled) + ")"); cmb.Items.Add(KPRes.Enabled); cmb.Items.Add(KPRes.Disabled); if(bSelect.HasValue) cmb.SelectedIndex = (bSelect.Value ? 1 : 2); else cmb.SelectedIndex = 0; } public static bool? GetInheritableBoolComboBoxValue(ComboBox cmb) { if(cmb == null) { Debug.Assert(false); return null; } if(cmb.SelectedIndex == 1) return true; if(cmb.SelectedIndex == 2) return false; return null; } public static void SetEnabled(Control c, bool bEnabled) { if(c == null) { Debug.Assert(false); return; } if(c.Enabled != bEnabled) c.Enabled = bEnabled; } internal static void SetEnabledFast(bool bEnabled, params ToolStripItem[] v) { if(v == null) { Debug.Assert(false); return; } foreach(ToolStripItem c in v) { if(c == null) { Debug.Assert(false); continue; } c.Enabled = bEnabled; } } public static void SetChecked(CheckBox cb, bool bChecked) { if(cb == null) { Debug.Assert(false); return; } if(cb.Checked != bChecked) cb.Checked = bChecked; } private static Bitmap GetGlyphBitmap(MenuGlyph mg, Color clrFG) { try { Size sz = new Size(DpiUtil.ScaleIntX(16), DpiUtil.ScaleIntY(16)); Bitmap bmp = new Bitmap(sz.Width, sz.Height, PixelFormat.Format32bppArgb); using(Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Transparent); ControlPaint.DrawMenuGlyph(g, new Rectangle(Point.Empty, sz), mg, clrFG, Color.Transparent); } return bmp; } catch(Exception) { Debug.Assert(false); } return null; } private static Bitmap g_bmpCheck = null; private static Bitmap g_bmpCheckLight = null; private static Bitmap g_bmpTrans = null; public static void SetChecked(ToolStripMenuItem tsmi, bool bChecked) { if(tsmi == null) { Debug.Assert(false); return; } const string strIDCheck = "guid:5EAEA440-02AA-4E62-B57E-724A6F89B1EE"; const string strIDTrans = "guid:38DDF11D-F101-468A-A006-9810A95F34F4"; // The image references may change, thus use the Tag instead; // https://sourceforge.net/p/keepass/discussion/329220/thread/e1950e60/ bool bSetImage = false; Image imgCur = tsmi.Image; if(imgCur == null) bSetImage = true; else { string strID = (imgCur.Tag as string); if(strID == null) { } // Unknown image, don't overwrite else if((strID == strIDCheck) || (strID == strIDTrans)) bSetImage = true; } if(bSetImage) { Image img = null; if(bChecked) { if(g_bmpCheck == null) { g_bmpCheck = new Bitmap(Properties.Resources.B16x16_MenuCheck); g_bmpCheck.Tag = strIDCheck; } img = g_bmpCheck; Color clrFG = tsmi.ForeColor; if(!clrFG.IsEmpty && (ColorToGrayscale(clrFG).R >= 128)) { if(g_bmpCheckLight == null) { g_bmpCheckLight = GetGlyphBitmap(MenuGlyph.Checkmark, Color.White); // Not clrFG, for consistency if(g_bmpCheckLight != null) { Debug.Assert(g_bmpCheckLight.Tag == null); g_bmpCheckLight.Tag = strIDCheck; } } if(g_bmpCheckLight != null) img = g_bmpCheckLight; } else { Debug.Assert(g_bmpCheckLight == null); } // Always or never } else { if(g_bmpTrans == null) { g_bmpTrans = new Bitmap(Properties.Resources.B16x16_Transparent); g_bmpTrans.Tag = strIDTrans; } // Assign transparent image instead of null in order to // prevent incorrect menu item heights img = g_bmpTrans; } tsmi.Image = img; } tsmi.Checked = bChecked; } private static Bitmap g_bmpRadioLight = null; public static void SetRadioChecked(ToolStripMenuItem tsmi, bool bChecked) { if(tsmi == null) { Debug.Assert(false); return; } Debug.Assert(!tsmi.CheckOnClick); // Potential to break image if(bChecked) { Image imgCheck = Properties.Resources.B16x16_MenuRadio; Color clrFG = tsmi.ForeColor; if(!clrFG.IsEmpty && (ColorToGrayscale(clrFG).R >= 128)) { if(g_bmpRadioLight == null) g_bmpRadioLight = GetGlyphBitmap(MenuGlyph.Bullet, Color.White); // Not clrFG, for consistency if(g_bmpRadioLight != null) imgCheck = g_bmpRadioLight; } else { Debug.Assert(g_bmpRadioLight == null); } // Always or never tsmi.Image = imgCheck; tsmi.CheckState = CheckState.Checked; } else { // Transparent: see SetChecked method tsmi.Image = Properties.Resources.B16x16_Transparent; tsmi.CheckState = CheckState.Unchecked; } } public static void ResizeColumns(ListView lv, bool bBlockUIUpdate) { ResizeColumns(lv, null, bBlockUIUpdate); } public static void ResizeColumns(ListView lv, int[] vRelWidths, bool bBlockUIUpdate) { if(lv == null) { Debug.Assert(false); return; } // vRelWidths may be null List lCurWidths = new List(); foreach(ColumnHeader ch in lv.Columns) { lCurWidths.Add(ch.Width); } int n = lCurWidths.Count; if(n == 0) return; int[] vRels = new int[n]; int nRelSum = 0; for(int i = 0; i < n; ++i) { if((vRelWidths != null) && (i < vRelWidths.Length)) { if(vRelWidths[i] >= 0) vRels[i] = vRelWidths[i]; else { Debug.Assert(false); vRels[i] = 0; } } else vRels[i] = 1; // Unit width 1 is default nRelSum += vRels[i]; } if(nRelSum == 0) { Debug.Assert(false); return; } int w = lv.ClientSize.Width - 1; if(w <= 0) { Debug.Assert(false); return; } // The client width might include the width of a vertical // scrollbar or not (unreliable; for example the scrollbar // width is not subtracted during a Form.Load even though // a scrollbar is required); try to detect this situation int cwScroll = UIUtil.GetVScrollBarWidth(); if((lv.Width - w) < cwScroll) // Scrollbar not already subtracted { int nItems = lv.Items.Count; if(nItems > 0) { #if DEBUG foreach(ListViewItem lvi in lv.Items) { Debug.Assert(lvi.Bounds.Height == lv.Items[0].Bounds.Height); } #endif if((((long)nItems * (long)lv.Items[0].Bounds.Height) > (long)lv.ClientSize.Height) && (w > cwScroll)) w -= cwScroll; } } double dx = (double)w / (double)nRelSum; int[] vNewWidths = new int[n]; int iFirstVisible = -1, wSum = 0; for(int i = 0; i < n; ++i) { int cw = (int)Math.Floor(dx * (double)vRels[i]); vNewWidths[i] = cw; wSum += cw; if((iFirstVisible < 0) && (cw > 0)) iFirstVisible = i; } if((iFirstVisible >= 0) && (wSum < w)) vNewWidths[iFirstVisible] += (w - wSum); if(bBlockUIUpdate) lv.BeginUpdate(); int iCol = 0; foreach(ColumnHeader ch in lv.Columns) { if(iCol >= n) { Debug.Assert(false); break; } if(vNewWidths[iCol] != lCurWidths[iCol]) ch.Width = vNewWidths[iCol]; ++iCol; } Debug.Assert(iCol == n); if(bBlockUIUpdate) lv.EndUpdate(); } public static bool ColorsEqual(Color c1, Color c2) { return ((c1.R == c2.R) && (c1.G == c2.G) && (c1.B == c2.B) && (c1.A == c2.A)); } public static Color GetAlternateColor(Color clrBase) { if(ColorsEqual(clrBase, Color.White)) return Color.FromArgb(238, 238, 255); float b = clrBase.GetBrightness(); if(b >= 0.5) return UIUtil.DarkenColor(clrBase, 0.1); return UIUtil.LightenColor(clrBase, 0.25); } public static void SetAlternatingBgColors(ListView lv, Color clrAlternate, bool bAlternate) { if(lv == null) throw new ArgumentNullException("lv"); Color clrBg = lv.BackColor; if(!UIUtil.GetGroupsEnabled(lv) || !bAlternate) { for(int i = 0; i < lv.Items.Count; ++i) { ListViewItem lvi = lv.Items[i]; Debug.Assert(lvi.Index == i); Debug.Assert(lvi.UseItemStyleForSubItems); if(!bAlternate) { if(ColorsEqual(lvi.BackColor, clrAlternate)) lvi.BackColor = clrBg; } else if(((i & 1) == 0) && ColorsEqual(lvi.BackColor, clrAlternate)) lvi.BackColor = clrBg; else if(((i & 1) == 1) && ColorsEqual(lvi.BackColor, clrBg)) lvi.BackColor = clrAlternate; } } else // Groups && alternating { foreach(ListViewGroup lvg in lv.Groups) { // Within the group the items are not in display order, // but the order can be derived from the item indices List lItems = new List(); foreach(ListViewItem lviEnum in lvg.Items) lItems.Add(lviEnum); lItems.Sort(UIUtil.LviCompareByIndex); for(int i = 0; i < lItems.Count; ++i) { ListViewItem lvi = lItems[i]; Debug.Assert(lvi.UseItemStyleForSubItems); if(((i & 1) == 0) && ColorsEqual(lvi.BackColor, clrAlternate)) lvi.BackColor = clrBg; else if(((i & 1) == 1) && ColorsEqual(lvi.BackColor, clrBg)) lvi.BackColor = clrAlternate; } } } } private static int LviCompareByIndex(ListViewItem a, ListViewItem b) { return a.Index.CompareTo(b.Index); } public static bool SetSortIcon(ListView lv, int iColumn, SortOrder so) { if(lv == null) { Debug.Assert(false); return false; } if(NativeLib.IsUnix()) return false; try { IntPtr hHeader = NativeMethods.SendMessage(lv.Handle, NativeMethods.LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero); bool bUnicode = (WinUtil.IsWindows2000 || WinUtil.IsWindowsXP || WinUtil.IsAtLeastWindowsVista); int nGetMsg = (bUnicode ? NativeMethods.HDM_GETITEMW : NativeMethods.HDM_GETITEMA); int nSetMsg = (bUnicode ? NativeMethods.HDM_SETITEMW : NativeMethods.HDM_SETITEMA); for(int i = 0; i < lv.Columns.Count; ++i) { IntPtr pColIndex = new IntPtr(i); NativeMethods.HDITEM hdItem = new NativeMethods.HDITEM(); hdItem.mask = NativeMethods.HDI_FORMAT; if(NativeMethods.SendMessageHDItem(hHeader, nGetMsg, pColIndex, ref hdItem) == IntPtr.Zero) { Debug.Assert(false); } if((i != iColumn) || (so == SortOrder.None)) hdItem.fmt &= (~NativeMethods.HDF_SORTUP & ~NativeMethods.HDF_SORTDOWN); else { if(so == SortOrder.Ascending) { hdItem.fmt &= ~NativeMethods.HDF_SORTDOWN; hdItem.fmt |= NativeMethods.HDF_SORTUP; } else // SortOrder.Descending { hdItem.fmt &= ~NativeMethods.HDF_SORTUP; hdItem.fmt |= NativeMethods.HDF_SORTDOWN; } } Debug.Assert(hdItem.mask == NativeMethods.HDI_FORMAT); if(NativeMethods.SendMessageHDItem(hHeader, nSetMsg, pColIndex, ref hdItem) == IntPtr.Zero) { Debug.Assert(false); } } } catch(Exception) { Debug.Assert(false); return false; } return true; } public static void SetDisplayIndices(ListView lv, int[] v) { // Display indices must be assigned in an ordered way (with // respect to the display indices, not the column indices), // otherwise .NET's automatic adjustments result in // different display indices; // https://sourceforge.net/p/keepass/discussion/329221/thread/5e00cffe/ if(lv == null) { Debug.Assert(false); return; } if(v == null) { Debug.Assert(false); return; } int nCols = lv.Columns.Count; int nMin = Math.Min(nCols, v.Length); SortedDictionary d = new SortedDictionary(); for(int i = 0; i < nMin; ++i) { int nIdx = v[i]; if((nIdx >= 0) && (nIdx < nCols)) d[nIdx] = i; } foreach(KeyValuePair kvp in d) lv.Columns[kvp.Value].DisplayIndex = kvp.Key; #if DEBUG int[] vNew = new int[nMin]; for(int i = 0; i < nMin; ++i) vNew[i] = lv.Columns[i].DisplayIndex; Debug.Assert(StrUtil.SerializeIntArray(vNew) == StrUtil.SerializeIntArray(MemUtil.Mid(v, 0, nMin))); #endif } public static Color ColorToGrayscale(Color clr) { int l = (int)((0.3f * clr.R) + (0.59f * clr.G) + (0.11f * clr.B)); if(l >= 256) l = 255; return Color.FromArgb(l, l, l); } public static Color ColorTowards(Color clr, Color clrBase, double dblFactor) { int l = (int)((0.3f * clrBase.R) + (0.59f * clrBase.G) + (0.11f * clrBase.B)); if(l < 128) return DarkenColor(clr, dblFactor); return LightenColor(clr, dblFactor); } public static Color ColorTowardsGrayscale(Color clr, Color clrBase, double dblFactor) { return ColorToGrayscale(ColorTowards(clr, clrBase, dblFactor)); } public static bool IsDarkColor(Color clr) { Color clrLvl = ColorToGrayscale(clr); return (clrLvl.R < 128); } public static Color ColorMiddle(Color clrA, Color clrB) { return Color.FromArgb(((int)clrA.A + (int)clrB.A) / 2, ((int)clrA.R + (int)clrB.R) / 2, ((int)clrA.G + (int)clrB.G) / 2, ((int)clrA.B + (int)clrB.B) / 2); } public static GraphicsPath CreateRoundedRectangle(int x, int y, int dx, int dy, int r) { try { GraphicsPath gp = new GraphicsPath(); gp.AddLine(x + r, y, x + dx - (r * 2), y); gp.AddArc(x + dx - (r * 2), y, r * 2, r * 2, 270.0f, 90.0f); gp.AddLine(x + dx, y + r, x + dx, y + dy - (r * 2)); gp.AddArc(x + dx - (r * 2), y + dy - (r * 2), r * 2, r * 2, 0.0f, 90.0f); gp.AddLine(x + dx - (r * 2), y + dy, x + r, y + dy); gp.AddArc(x, y + dy - (r * 2), r * 2, r * 2, 90.0f, 90.0f); gp.AddLine(x, y + dy - (r * 2), x, y + r); gp.AddArc(x, y, r * 2, r * 2, 180.0f, 90.0f); gp.CloseFigure(); return gp; } catch(Exception) { Debug.Assert(false); } return null; } public static Control GetActiveControl(ContainerControl cc) { if(cc == null) { Debug.Assert(false); return null; } try { Control c = cc.ActiveControl; if(c == cc) return c; ContainerControl ccSub = (c as ContainerControl); if(ccSub != null) return GetActiveControl(ccSub); else return c; } catch(Exception) { Debug.Assert(false); } return null; } public static void ApplyKeyUIFlags(ulong aceUIFlags, CheckBox cbPassword, CheckBox cbKeyFile, CheckBox cbUserAccount, CheckBox cbHidePassword) { if((aceUIFlags & (ulong)AceKeyUIFlags.EnablePassword) != 0) UIUtil.SetEnabled(cbPassword, true); if((aceUIFlags & (ulong)AceKeyUIFlags.EnableKeyFile) != 0) UIUtil.SetEnabled(cbKeyFile, true); if((aceUIFlags & (ulong)AceKeyUIFlags.EnableUserAccount) != 0) UIUtil.SetEnabled(cbUserAccount, true); if((aceUIFlags & (ulong)AceKeyUIFlags.EnableHidePassword) != 0) UIUtil.SetEnabled(cbHidePassword, true); if((aceUIFlags & (ulong)AceKeyUIFlags.CheckPassword) != 0) UIUtil.SetChecked(cbPassword, true); if((aceUIFlags & (ulong)AceKeyUIFlags.CheckKeyFile) != 0) UIUtil.SetChecked(cbKeyFile, true); if((aceUIFlags & (ulong)AceKeyUIFlags.CheckUserAccount) != 0) UIUtil.SetChecked(cbUserAccount, true); if((aceUIFlags & (ulong)AceKeyUIFlags.CheckHidePassword) != 0) UIUtil.SetChecked(cbHidePassword, true); if((aceUIFlags & (ulong)AceKeyUIFlags.UncheckPassword) != 0) UIUtil.SetChecked(cbPassword, false); if((aceUIFlags & (ulong)AceKeyUIFlags.UncheckKeyFile) != 0) UIUtil.SetChecked(cbKeyFile, false); if((aceUIFlags & (ulong)AceKeyUIFlags.UncheckUserAccount) != 0) UIUtil.SetChecked(cbUserAccount, false); if((aceUIFlags & (ulong)AceKeyUIFlags.UncheckHidePassword) != 0) UIUtil.SetChecked(cbHidePassword, false); if((aceUIFlags & (ulong)AceKeyUIFlags.DisablePassword) != 0) UIUtil.SetEnabled(cbPassword, false); if((aceUIFlags & (ulong)AceKeyUIFlags.DisableKeyFile) != 0) UIUtil.SetEnabled(cbKeyFile, false); if((aceUIFlags & (ulong)AceKeyUIFlags.DisableUserAccount) != 0) UIUtil.SetEnabled(cbUserAccount, false); if((aceUIFlags & (ulong)AceKeyUIFlags.DisableHidePassword) != 0) UIUtil.SetEnabled(cbHidePassword, false); } public static bool GetGroupsEnabled(ListView lv) { if(lv == null) { Debug.Assert(false); return false; } // Corresponds almost with the internal GroupsEnabled property return (lv.ShowGroups && (lv.Groups.Count > 0) && !lv.VirtualMode); } public static int GetMaxVisibleItemCount(ListView lv) { if(lv == null) { Debug.Assert(false); return 0; } int hClient = lv.ClientSize.Height; int hHeader = NativeMethods.GetHeaderHeight(lv); if(hHeader > 0) { if(((lv.Height - hClient) < hHeader) && (hClient > hHeader)) hClient -= hHeader; } int dy = lv.Items[0].Bounds.Height; if(dy <= 1) { Debug.Assert(false); dy = DpiUtil.ScaleIntY(16) + 1; } return (hClient / dy); } public static int GetTopVisibleItem(ListView lv) { if(lv == null) { Debug.Assert(false); return -1; } // The returned value must be an existing index or -1 int nRes = -1; try { if(lv.Items.Count == 0) return nRes; ListViewItem lvi = null; if(!UIUtil.GetGroupsEnabled(lv)) lvi = lv.TopItem; else { // In grouped mode, the TopItem property does not work; // http://connect.microsoft.com/VisualStudio/feedback/details/642188/listview-control-bug-topitem-property-doesnt-work-with-groups // http://msdn.microsoft.com/en-us/library/windows/desktop/bb761087.aspx int dyHeader = NativeMethods.GetHeaderHeight(lv); int yMin = int.MaxValue; foreach(ListViewItem lviEnum in lv.Items) { int yEnum = Math.Abs(lviEnum.Position.Y - dyHeader); if(yEnum < yMin) { yMin = yEnum; lvi = lviEnum; } } } if(lvi != null) nRes = lvi.Index; } catch(Exception) { Debug.Assert(false); } return nRes; } public static void SetTopVisibleItem(ListView lv, int iIndex) { SetTopVisibleItem(lv, iIndex, false); } public static void SetTopVisibleItem(ListView lv, int iIndex, bool bEnsureSelectedVisible) { if(lv == null) { Debug.Assert(false); return; } if(iIndex < 0) return; // No assert int n = lv.Items.Count; if(n <= 0) return; if(iIndex >= n) iIndex = n - 1; // No assert int iOrgTop = GetTopVisibleItem(lv); lv.BeginUpdate(); // Might reduce flicker if(iIndex != iOrgTop) // Prevent unnecessary flicker { // Setting lv.TopItem doesn't work properly // lv.EnsureVisible(n - 1); // if(iIndex != (n - 1)) lv.EnsureVisible(iIndex); #if DEBUG foreach(ListViewItem lvi in lv.Items) { Debug.Assert(lvi.Bounds.Height == lv.Items[0].Bounds.Height); } #endif if(iIndex < iOrgTop) lv.EnsureVisible(iIndex); else { int nVisItems = GetMaxVisibleItemCount(lv); int iNewLast = nVisItems + iIndex - 1; if(iNewLast < 0) { Debug.Assert(false); iNewLast = 0; } iNewLast = Math.Min(iNewLast, n - 1); lv.EnsureVisible(iNewLast); int iNewTop = GetTopVisibleItem(lv); if(iNewTop > iIndex) // Scrolled too far { Debug.Assert(false); lv.EnsureVisible(iIndex); // Scroll back } else if(iNewTop == iIndex) { } // Perfect else { Debug.Assert(iNewLast == (n - 1)); } // int hItem = lv.Items[0].Bounds.Height; // if(hItem <= 0) { Debug.Assert(false); hItem = DpiUtil.ScaleIntY(16) + 1; } // int hToScroll = (iIndex - iOrgTop) * hItem; // NativeMethods.Scroll(lv, 0, hToScroll); // int iNewTop = GetTopVisibleItem(lv); // if(iNewTop > iIndex) // Scrolled too far // { // Debug.Assert(false); // lv.EnsureVisible(iIndex); // Scroll back // } // else if(iNewTop == iIndex) { } // Perfect // else // { // lv.EnsureVisible(n - 1); // if(iIndex != (n - 1)) lv.EnsureVisible(iIndex); // } } } if(bEnsureSelectedVisible) { ListView.SelectedIndexCollection lvsic = lv.SelectedIndices; int nSel = lvsic.Count; if(nSel > 0) { int[] vSel = new int[nSel]; lvsic.CopyTo(vSel, 0); lv.EnsureVisible(vSel[nSel - 1]); if(nSel >= 2) lv.EnsureVisible(vSel[0]); } } lv.EndUpdate(); } public static UIScrollInfo GetScrollInfo(ListView lv, bool bForRestoreOnly) { if(lv == null) { Debug.Assert(false); return null; } int scrY = NativeMethods.GetScrollPosY(lv.Handle); int idxTop = GetTopVisibleItem(lv); // Fix index-based scroll position if((scrY == idxTop) && (idxTop > 0)) { // Groups imply pixel position Debug.Assert(!UIUtil.GetGroupsEnabled(lv)); if(!bForRestoreOnly) { int hSum = 0; foreach(ListViewItem lvi in lv.Items) { if(scrY <= 0) break; int hItem = lvi.Bounds.Height; if(hItem > 1) hSum += hItem; else { Debug.Assert(false); } --scrY; } scrY = hSum; } else scrY = 0; // Pixels not required for restoration } return new UIScrollInfo(0, scrY, idxTop); } public static void Scroll(ListView lv, UIScrollInfo s, bool bEnsureSelectedVisible) { if(lv == null) { Debug.Assert(false); return; } if(s == null) { Debug.Assert(false); return; } if(UIUtil.GetGroupsEnabled(lv) && !NativeLib.IsUnix()) { // Only works correctly when groups are present // (lv.ShowGroups is not sufficient) NativeMethods.Scroll(lv, s.ScrollX, s.ScrollY); if(bEnsureSelectedVisible) { Debug.Assert(false); // Unsupported mode combination SetTopVisibleItem(lv, GetTopVisibleItem(lv), true); } } else SetTopVisibleItem(lv, s.TopIndex, bEnsureSelectedVisible); } /// /// Test whether a screen area is at least partially visible. /// /// Area to test. /// Returns true, if the area is at least partially /// visible. Otherwise, false is returned. public static bool IsScreenAreaVisible(Rectangle rect) { try { foreach(Screen scr in Screen.AllScreens) { Rectangle scrBounds = scr.Bounds; if((rect.Left > scrBounds.Right) || (rect.Right < scrBounds.Left) || (rect.Top > scrBounds.Bottom) || (rect.Bottom < scrBounds.Top)) { } else return true; } } catch(Exception) { Debug.Assert(false); return true; } return false; } public static void EnsureInsideScreen(Form f) { if(f == null) { Debug.Assert(false); return; } try { if(!f.Visible) return; // No assert if(f.WindowState != FormWindowState.Normal) return; int x = f.Location.X; int y = f.Location.Y; int w = f.Size.Width; int h = f.Size.Height; Debug.Assert((x != -32000) && (x != -64000)); Debug.Assert(x != AppDefs.InvalidWindowValue); Debug.Assert((y != -32000) && (y != -64000)); Debug.Assert(y != AppDefs.InvalidWindowValue); Debug.Assert(w != AppDefs.InvalidWindowValue); Debug.Assert(h != AppDefs.InvalidWindowValue); Rectangle rect = new Rectangle(x, y, w, h); if(IsScreenAreaVisible(rect)) return; Screen scr = Screen.PrimaryScreen; Rectangle rectScr = scr.Bounds; BoundsSpecified bs = BoundsSpecified.Location; if((w > rectScr.Width) || (h > rectScr.Height)) { w = Math.Min(w, rectScr.Width); h = Math.Min(h, rectScr.Height); bs |= BoundsSpecified.Size; } x = rectScr.X + ((rectScr.Width - w) / 2); y = rectScr.Y + ((rectScr.Height - h) / 2); f.SetBounds(x, y, w, h, bs); } catch(Exception) { Debug.Assert(false); } } public static string GetWindowScreenRect(Form f) { if(f == null) { Debug.Assert(false); return string.Empty; } StringBuilder sb = new StringBuilder(); Point ptLocation = f.Location; sb.Append(ptLocation.X); sb.Append(", "); sb.Append(ptLocation.Y); if((f.FormBorderStyle == FormBorderStyle.Sizable) || (f.FormBorderStyle == FormBorderStyle.SizableToolWindow)) { Size szSize = f.Size; sb.Append(", "); sb.Append(szSize.Width); sb.Append(", "); sb.Append(szSize.Height); } return sb.ToString(); } public static void SetWindowScreenRect(Form f, string strScreenRect) { if((f == null) || (strScreenRect == null)) { Debug.Assert(false); return; } string[] v = strScreenRect.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); if(v.Length == 4) { int x, y, w, h; if(int.TryParse(v[0], out x) && int.TryParse(v[1], out y) && int.TryParse(v[2], out w) && int.TryParse(v[3], out h)) { Rectangle rect = new Rectangle(x, y, w, h); if(UIUtil.IsScreenAreaVisible(rect)) { f.Location = new Point(x, y); f.Size = new Size(w, h); } } else { Debug.Assert(false); } } else if(v.Length == 2) { int x, y; if(int.TryParse(v[0], out x) && int.TryParse(v[1], out y)) { Size sz = f.Size; Rectangle rect = new Rectangle(x, y, sz.Width, sz.Height); if(UIUtil.IsScreenAreaVisible(rect)) f.Location = new Point(x, y); } else { Debug.Assert(false); } } else { Debug.Assert(false); } } public static string GetColumnWidths(ListView lv) { if(lv == null) { Debug.Assert(false); return string.Empty; } int n = lv.Columns.Count; int[] vSizes = new int[n]; for(int i = 0; i < n; ++i) vSizes[i] = lv.Columns[i].Width; return StrUtil.SerializeIntArray(vSizes); } public static void SetColumnWidths(ListView lv, string strSizes) { if(string.IsNullOrEmpty(strSizes)) return; // No assert int[] vSizes = StrUtil.DeserializeIntArray(strSizes); int n = lv.Columns.Count; Debug.Assert(n == vSizes.Length); for(int i = 0; i < Math.Min(n, vSizes.Length); ++i) lv.Columns[i].Width = vSizes[i]; } public static void SetButtonImage(Button btn, Image img, bool b16To15) { if(btn == null) { Debug.Assert(false); return; } if(img == null) { Debug.Assert(false); return; } if(b16To15 && (btn.Height == 23) && (img.Height == 16)) btn.Image = GfxUtil.ScaleImage(img, img.Width, 15, ScaleTransformFlags.UIIcon); else btn.Image = img; } public static void EnableAutoCompletion(ComboBox cb, bool bAlsoAutoAppend) { if(cb == null) { Debug.Assert(false); return; } Debug.Assert(cb.DropDownStyle != ComboBoxStyle.DropDownList); cb.AutoCompleteMode = (bAlsoAutoAppend ? AutoCompleteMode.SuggestAppend : AutoCompleteMode.Suggest); cb.AutoCompleteSource = AutoCompleteSource.ListItems; } public static void EnableAutoCompletion(ToolStripComboBox cb, bool bAlsoAutoAppend) { if(cb == null) { Debug.Assert(false); return; } Debug.Assert(cb.DropDownStyle != ComboBoxStyle.DropDownList); cb.AutoCompleteMode = (bAlsoAutoAppend ? AutoCompleteMode.SuggestAppend : AutoCompleteMode.Suggest); cb.AutoCompleteSource = AutoCompleteSource.ListItems; } public static void SetFocus(Control c, Form fParent) { if(c == null) { Debug.Assert(false); return; } // fParent may be null try { if(fParent != null) fParent.ActiveControl = c; } catch(Exception) { Debug.Assert(false); } try { if(c.CanSelect) c.Select(); if(c.CanFocus) c.Focus(); } catch(Exception) { Debug.Assert(false); } } public static void ResetFocus(Control c, Form fParent) { if(c == null) { Debug.Assert(false); return; } // fParent may be null try { Control cPre = null; if(fParent != null) cPre = fParent.ActiveControl; bool bStdSetFocus = true; if(c == cPre) { // Special reset for password text boxes that // can show a Caps Lock balloon tip; // https://sourceforge.net/p/keepass/feature-requests/1905/ TextBox tb = (c as TextBox); if((tb != null) && !NativeLib.IsUnix()) { IntPtr h = tb.Handle; bool bCapsLock = ((NativeMethods.GetKeyState( NativeMethods.VK_CAPITAL) & 1) != 0); if((h != IntPtr.Zero) && tb.UseSystemPasswordChar && !tb.ReadOnly && bCapsLock) { NativeMethods.SendMessage(h, NativeMethods.WM_KILLFOCUS, IntPtr.Zero, IntPtr.Zero); NativeMethods.SendMessage(h, NativeMethods.WM_SETFOCUS, IntPtr.Zero, IntPtr.Zero); bStdSetFocus = false; } } } if(bStdSetFocus) UIUtil.SetFocus(c, fParent); } catch(Exception) { Debug.Assert(false); } } /// /// Show a modal dialog and destroy it afterwards. /// /// Form to show and destroy. /// Result from ShowDialog. public static DialogResult ShowDialogAndDestroy(Form f) { if(f == null) { Debug.Assert(false); return DialogResult.None; } DialogResult dr = f.ShowDialog(); UIUtil.DestroyForm(f); return dr; } /// /// Show a modal dialog. If the result isn't the specified value, the /// dialog is disposed and true is returned. Otherwise, false /// is returned (without disposing the dialog!). /// /// Dialog to show. /// Comparison value. /// See description. public static bool ShowDialogNotValue(Form f, DialogResult drNotValue) { if(f == null) { Debug.Assert(false); return true; } if(f.ShowDialog() != drNotValue) { UIUtil.DestroyForm(f); return true; } return false; } public static void DestroyForm(Form f) { if(f == null) { Debug.Assert(false); return; } try { // f.Close(); // Don't trigger closing events f.Dispose(); } catch(Exception) { Debug.Assert(false); } } public static Image ExtractVistaIcon(Icon ico) { if(ico == null) { Debug.Assert(false); return null; } MemoryStream ms = new MemoryStream(); try { ico.Save(ms); byte[] pb = ms.ToArray(); return GfxUtil.LoadImage(pb); // Extracts best image from ICO } catch { Debug.Assert(false); } finally { ms.Close(); } return null; } public static void ColorToHsv(Color clr, out float fHue, out float fSaturation, out float fValue) { int nMax = Math.Max(clr.R, Math.Max(clr.G, clr.B)); int nMin = Math.Min(clr.R, Math.Min(clr.G, clr.B)); fHue = clr.GetHue(); // In degrees fSaturation = ((nMax == 0) ? 0.0f : (1.0f - ((float)nMin / nMax))); fValue = (float)nMax / 255.0f; } public static Color ColorFromHsv(float fHue, float fSaturation, float fValue) { float d = fHue / 60; float fl = (float)Math.Floor(d); float f = d - fl; fValue *= 255.0f; int v = (int)fValue; int p = (int)(fValue * (1.0f - fSaturation)); int q = (int)(fValue * (1.0f - (fSaturation * f))); int t = (int)(fValue * (1.0f - (fSaturation * (1.0f - f)))); try { int hi = (int)fl % 6; if(hi == 0) return Color.FromArgb(255, v, t, p); if(hi == 1) return Color.FromArgb(255, q, v, p); if(hi == 2) return Color.FromArgb(255, p, v, t); if(hi == 3) return Color.FromArgb(255, p, q, v); if(hi == 4) return Color.FromArgb(255, t, p, v); return Color.FromArgb(255, v, p, q); } catch(Exception) { Debug.Assert(false); } return Color.Transparent; } public static Icon CreateColorizedIcon(Icon icoBase, Color clr, int qSize) { if(icoBase == null) { Debug.Assert(false); return null; } if(qSize <= 0) qSize = 48; // Large shell icon size try { Bitmap bmp = new Bitmap(qSize, qSize, PixelFormat.Format32bppArgb); using(Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Transparent); g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.SmoothingMode = SmoothingMode.HighQuality; bool bDrawDefault = true; if((qSize != 16) && (qSize != 32)) { Image imgIco = ExtractVistaIcon(icoBase); if(imgIco != null) { // g.DrawImage(imgIco, 0, 0, bmp.Width, bmp.Height); using(Image imgSc = GfxUtil.ScaleImage(imgIco, bmp.Width, bmp.Height, ScaleTransformFlags.UIIcon)) { g.DrawImageUnscaled(imgSc, 0, 0); } imgIco.Dispose(); bDrawDefault = false; } } if(bDrawDefault) { Icon icoSc = null; try { icoSc = new Icon(icoBase, bmp.Width, bmp.Height); g.DrawIcon(icoSc, new Rectangle(0, 0, bmp.Width, bmp.Height)); } catch(Exception) { Debug.Assert(false); g.DrawIcon(icoBase, new Rectangle(0, 0, bmp.Width, bmp.Height)); } finally { if(icoSc != null) icoSc.Dispose(); } } // IntPtr hdc = g.GetHdc(); // NativeMethods.DrawIconEx(hdc, 0, 0, icoBase.Handle, bmp.Width, // bmp.Height, 0, IntPtr.Zero, NativeMethods.DI_NORMAL); // g.ReleaseHdc(hdc); } BitmapData bd = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); int nBytes = Math.Abs(bd.Stride * bmp.Height); byte[] pbArgb = new byte[nBytes]; Marshal.Copy(bd.Scan0, pbArgb, 0, nBytes); float fHue, fSaturation, fValue; ColorToHsv(clr, out fHue, out fSaturation, out fValue); for(int i = 0; i < nBytes; i += 4) { if(pbArgb[i + 3] == 0) continue; // Transparent if((pbArgb[i] == pbArgb[i + 1]) && (pbArgb[i] == pbArgb[i + 2])) continue; // Gray Color clrPixel = Color.FromArgb((int)pbArgb[i + 2], (int)pbArgb[i + 1], (int)pbArgb[i]); // BGRA float h, s, v; ColorToHsv(clrPixel, out h, out s, out v); Color clrNew = ColorFromHsv(fHue, s, v); pbArgb[i] = clrNew.B; pbArgb[i + 1] = clrNew.G; pbArgb[i + 2] = clrNew.R; } Marshal.Copy(pbArgb, 0, bd.Scan0, nBytes); bmp.UnlockBits(bd); IntPtr hIcon = bmp.GetHicon(); Icon icoBmp = Icon.FromHandle(hIcon); Icon icoResult = (Icon)icoBmp.Clone(); try { NativeMethods.DestroyIcon(hIcon); } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } bmp.Dispose(); return icoResult; } catch(Exception) { Debug.Assert(false); } return (Icon)icoBase.Clone(); } public static Bitmap InvertImage(Image img) { try { int w = img.Width, h = img.Height; Bitmap bmp = new Bitmap(w, h, PixelFormat.Format32bppArgb); using(Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Transparent); g.InterpolationMode = InterpolationMode.NearestNeighbor; g.SmoothingMode = SmoothingMode.None; ColorMatrix cm = new ColorMatrix(new float[][] { new float[] { -1, 0, 0, 0, 0 }, new float[] { 0, -1, 0, 0, 0 }, new float[] { 0, 0, -1, 0, 0 }, new float[] { 0, 0, 0, 1, 0 }, new float[] { 1, 1, 1, 0, 1 } }); ImageAttributes a = new ImageAttributes(); a.SetColorMatrix(cm); g.DrawImage(img, new Rectangle(0, 0, w, h), 0, 0, w, h, GraphicsUnit.Pixel, a); } return bmp; } catch(Exception) { Debug.Assert(false); } return null; } public static Image CreateTabColorImage(Color clr, TabControl cTab) { if(cTab == null) { Debug.Assert(false); return null; } int qSize = cTab.ItemSize.Height - 3; if(MonoWorkarounds.IsRequired()) qSize -= 1; if(qSize < 4) { Debug.Assert(false); return null; } const int dyTrans = 3; int yCenter = (qSize - dyTrans) / 2 + dyTrans; Rectangle rectTop = new Rectangle(0, dyTrans, qSize, yCenter - dyTrans); Rectangle rectBottom = new Rectangle(0, yCenter, qSize, qSize - yCenter); Color clrLight = UIUtil.LightenColor(clr, 0.5); Color clrDark = UIUtil.DarkenColor(clr, 0.1); Bitmap bmp = new Bitmap(qSize, qSize, PixelFormat.Format32bppArgb); using(Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Transparent); using(LinearGradientBrush brLight = new LinearGradientBrush( rectTop, clrLight, clr, LinearGradientMode.Vertical)) { g.FillRectangle(brLight, rectTop); } using(LinearGradientBrush brDark = new LinearGradientBrush( rectBottom, clr, clrDark, LinearGradientMode.Vertical)) { g.FillRectangle(brDark, rectBottom); } } return bmp; } public static bool PlayUacSound() { try { string strRoot = "HKEY_CURRENT_USER\\AppEvents\\Schemes\\Apps\\.Default\\WindowsUAC\\"; string strWav = (Registry.GetValue(strRoot + ".Current", string.Empty, string.Empty) as string); if(string.IsNullOrEmpty(strWav)) strWav = (Registry.GetValue(strRoot + ".Default", string.Empty, string.Empty) as string); if(string.IsNullOrEmpty(strWav)) strWav = @"%SystemRoot%\Media\Windows User Account Control.wav"; strWav = SprEngine.Compile(strWav, null); if(!File.Exists(strWav)) throw new FileNotFoundException(); NativeMethods.PlaySound(strWav, IntPtr.Zero, NativeMethods.SND_FILENAME | NativeMethods.SND_ASYNC | NativeMethods.SND_NODEFAULT); return true; } catch(Exception) { } Debug.Assert(NativeLib.IsUnix() || !WinUtil.IsAtLeastWindowsVista); // Do not play a standard sound here return false; } public static Image GetWindowImage(IntPtr hWnd, bool bPrefSmall) { try { IntPtr hIcon; if(bPrefSmall) { hIcon = NativeMethods.SendMessage(hWnd, NativeMethods.WM_GETICON, new IntPtr(NativeMethods.ICON_SMALL2), IntPtr.Zero); if(hIcon != IntPtr.Zero) return Icon.FromHandle(hIcon).ToBitmap(); } hIcon = NativeMethods.SendMessage(hWnd, NativeMethods.WM_GETICON, new IntPtr(bPrefSmall ? NativeMethods.ICON_SMALL : NativeMethods.ICON_BIG), IntPtr.Zero); if(hIcon != IntPtr.Zero) return Icon.FromHandle(hIcon).ToBitmap(); hIcon = NativeMethods.GetClassLongPtr(hWnd, bPrefSmall ? NativeMethods.GCLP_HICONSM : NativeMethods.GCLP_HICON); if(hIcon != IntPtr.Zero) return Icon.FromHandle(hIcon).ToBitmap(); hIcon = NativeMethods.SendMessage(hWnd, NativeMethods.WM_GETICON, new IntPtr(bPrefSmall ? NativeMethods.ICON_BIG : NativeMethods.ICON_SMALL), IntPtr.Zero); if(hIcon != IntPtr.Zero) return Icon.FromHandle(hIcon).ToBitmap(); hIcon = NativeMethods.GetClassLongPtr(hWnd, bPrefSmall ? NativeMethods.GCLP_HICON : NativeMethods.GCLP_HICONSM); if(hIcon != IntPtr.Zero) return Icon.FromHandle(hIcon).ToBitmap(); if(!bPrefSmall) { hIcon = NativeMethods.SendMessage(hWnd, NativeMethods.WM_GETICON, new IntPtr(NativeMethods.ICON_SMALL2), IntPtr.Zero); if(hIcon != IntPtr.Zero) return Icon.FromHandle(hIcon).ToBitmap(); } } catch(Exception) { Debug.Assert(false); } return null; } /// /// Set the state of a window. This is a workaround for /// https://sourceforge.net/projects/keepass/forums/forum/329221/topic/4610118 /// public static void SetWindowState(Form f, FormWindowState fws) { if(f == null) { Debug.Assert(false); return; } f.WindowState = fws; // If the window state change / resize handler changes // the window state again, the property gets out of sync // with the real state. Therefore, we now make sure that // the property is synchronized with the actual window // state. try { // Get the value that .NET currently caches; note // this isn't necessarily the real window state // due to the bug FormWindowState fwsCached = f.WindowState; IntPtr hWnd = f.Handle; if(hWnd == IntPtr.Zero) { Debug.Assert(false); return; } // Get the real state using Windows API functions bool bIsRealMin = NativeMethods.IsIconic(hWnd); bool bIsRealMax = NativeMethods.IsZoomed(hWnd); FormWindowState? fwsFix = null; if(bIsRealMin && (fwsCached != FormWindowState.Minimized)) fwsFix = FormWindowState.Minimized; else if(bIsRealMax && (fwsCached != FormWindowState.Maximized) && !bIsRealMin) fwsFix = FormWindowState.Maximized; else if(!bIsRealMin && !bIsRealMax && (fwsCached != FormWindowState.Normal)) fwsFix = FormWindowState.Normal; if(fwsFix.HasValue) { // If the window is invisible, no state // change / resize handlers are called bool bVisible = f.Visible; if(bVisible) f.Visible = false; f.WindowState = fwsFix.Value; if(bVisible) f.Visible = true; } } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } } private static KeysConverter m_convKeys = null; public static string GetKeysName(Keys k) { if(m_convKeys == null) m_convKeys = new KeysConverter(); return m_convKeys.ConvertToString(k); } /// /// Assign shortcut keys to a menu item. This method uses /// custom-translated display strings. /// public static void AssignShortcut(ToolStripMenuItem tsmi, Keys k) { if(tsmi == null) { Debug.Assert(false); return; } tsmi.ShortcutKeys = k; string str = string.Empty; if((k & Keys.Control) != Keys.None) str += KPRes.KeyboardKeyCtrl + "+"; if((k & Keys.Alt) != Keys.None) str += KPRes.KeyboardKeyAlt + "+"; if((k & Keys.Shift) != Keys.None) str += KPRes.KeyboardKeyShift + "+"; str += GetKeysName(k & Keys.KeyCode); tsmi.ShortcutKeyDisplayString = str; } /* public static string ImageToDataUri(Image img) { if(img == null) { Debug.Assert(false); return string.Empty; } MemoryStream ms = new MemoryStream(); img.Save(ms, ImageFormat.Png); byte[] pbImage = ms.ToArray(); ms.Close(); return StrUtil.DataToDataUri(pbImage, "image/png"); } */ public static void SetFocusedItem(ListView lv, ListViewItem lvi, bool bAlsoSelect) { if((lv == null) || (lvi == null)) { Debug.Assert(false); return; } if(bAlsoSelect) lvi.Selected = true; try { lv.FocusedItem = lvi; } // .NET catch(Exception) { try { lvi.Focused = true; } // Mono catch(Exception) { Debug.Assert(false); } } } public static Image CreateDropDownImage(Image imgBase) { if(imgBase == null) { Debug.Assert(false); return null; } // Height of the arrow without the glow effect // int hArrow = (int)Math.Ceiling((double)DpiUtil.ScaleIntY(20) / 8.0); // int hArrow = (int)Math.Ceiling((double)DpiUtil.ScaleIntY(28) / 8.0); int hArrow = DpiUtil.ScaleIntY(3); int dx = imgBase.Width, dy = imgBase.Height; if((dx < ((hArrow * 2) + 2)) || (dy < (hArrow + 2))) return new Bitmap(imgBase); bool bStdClr = !UIUtil.IsDarkTheme; Bitmap bmp = new Bitmap(dx, dy, PixelFormat.Format32bppArgb); using(Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Transparent); g.DrawImageUnscaled(imgBase, 0, 0); // Pen penDark = Pens.Black; // g.DrawLine(penDark, dx - 5, dy - 3, dx - 1, dy - 3); // g.DrawLine(penDark, dx - 4, dy - 2, dx - 2, dy - 2); // // g.DrawLine(penDark, dx - 7, dy - 4, dx - 1, dy - 4); // // g.DrawLine(penDark, dx - 6, dy - 3, dx - 2, dy - 3); // // g.DrawLine(penDark, dx - 5, dy - 2, dx - 3, dy - 2); // using(Pen penLight = new Pen(Color.FromArgb( // 160, 255, 255, 255), 1.0f)) // { // g.DrawLine(penLight, dx - 5, dy - 4, dx - 1, dy - 4); // g.DrawLine(penLight, dx - 6, dy - 3, dx - 4, dy - 1); // g.DrawLine(penLight, dx - 2, dy - 1, dx - 1, dy - 2); // // g.DrawLine(penLight, dx - 7, dy - 5, dx - 1, dy - 5); // // g.DrawLine(penLight, dx - 8, dy - 4, dx - 5, dy - 1); // // g.DrawLine(penLight, dx - 3, dy - 1, dx - 1, dy - 3); // } g.SmoothingMode = SmoothingMode.None; Pen penDark = (bStdClr ? Pens.Black : Pens.White); for(int i = 1; i < hArrow; ++i) g.DrawLine(penDark, dx - hArrow - i, dy - 1 - i, dx - hArrow + i, dy - 1 - i); int c = (bStdClr ? 255 : 0); using(Pen penLight = new Pen(Color.FromArgb(160, c, c, c), 1.0f)) { g.DrawLine(penLight, dx - (hArrow * 2) + 1, dy - hArrow - 1, dx - 1, dy - hArrow - 1); g.DrawLine(penLight, dx - (hArrow * 2), dy - hArrow, dx - hArrow - 1, dy - 1); g.DrawLine(penLight, dx - hArrow + 1, dy - 1, dx - 1, dy - hArrow + 1); } } // bmp.SetPixel(dx - 3, dy - 1, Color.Black); // // bmp.SetPixel(dx - 4, dy - 1, Color.Black); bmp.SetPixel(dx - hArrow, dy - 1, (bStdClr ? Color.Black : Color.White)); return bmp; } [Obsolete("Use GfxUtil.ScaleImage instead.")] public static Bitmap CreateScaledImage(Image img, int w, int h) { if(img == null) { Debug.Assert(false); return null; } Bitmap bmp = (GfxUtil.ScaleImage(img, w, h) as Bitmap); Debug.Assert(bmp != null); return bmp; } /* public static T DgvGetComboBoxValue(DataGridViewComboBoxCell c, List> lItems) { if((c == null) || (lItems == null)) { Debug.Assert(false); return default(T); } string strValue = ((c.Value as string) ?? string.Empty); foreach(KeyValuePair kvp in lItems) { if(kvp.Value == strValue) return kvp.Key; } Debug.Assert(false); return default(T); } public static void DgvSetComboBoxValue(DataGridViewComboBoxCell c, T tValue, List> lItems) { if((c == null) || (lItems == null)) { Debug.Assert(false); return; } foreach(KeyValuePair kvp in lItems) { if(kvp.Key.Equals(tValue)) { c.Value = kvp.Value; return; } } Debug.Assert(false); } public static bool GetChecked(DataGridViewCheckBoxCell c) { if(c == null) { Debug.Assert(false); return false; } object o = c.Value; if(o == null) { Debug.Assert(false); return false; } return StrUtil.StringToBool(o.ToString()); } public static void SetChecked(DataGridViewCheckBoxCell c, bool bChecked) { if(c == null) { Debug.Assert(false); return; } c.Value = bChecked; } */ public static Image GetFileIcon(string strFilePath, int w, int h) { Image img = null; try { Icon ico = Icon.ExtractAssociatedIcon(strFilePath); if(ico == null) return null; img = new Bitmap(w, h, PixelFormat.Format32bppArgb); using(Graphics g = Graphics.FromImage(img)) { g.Clear(Color.Transparent); g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.SmoothingMode = SmoothingMode.HighQuality; g.DrawIcon(ico, new Rectangle(0, 0, img.Width, img.Height)); } ico.Dispose(); } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } return img; } public static void SetHandled(KeyEventArgs e, bool bHandled) { if(e == null) { Debug.Assert(false); return; } e.Handled = bHandled; e.SuppressKeyPress = bHandled; } public static bool HandleCommonKeyEvent(KeyEventArgs e, bool bDown, Control cCtx) { if(e == null) { Debug.Assert(false); return false; } if(cCtx == null) { Debug.Assert(false); return false; } // On Windows, all of the following is already supported by .NET if(!NativeLib.IsUnix()) return false; bool bS = e.Shift; bool bC = e.Control; bool bA = e.Alt; Keys k = e.KeyCode; bool bMac = (NativeLib.GetPlatformID() == PlatformID.MacOSX); if(((k == Keys.Apps) && !bA) || // Shift and Control irrelevant ((k == Keys.F10) && bS && !bA) || // Control irrelevant (bMac && (k == Keys.D5) && bC && bA) || (bMac && (k == Keys.NumPad5) && bC)) { bool bOp = bDown; if(k == Keys.Apps) bOp = !bDown; if(bOp) { ContextMenu cm = cCtx.ContextMenu; ContextMenuStrip cms = cCtx.ContextMenuStrip; if(cms != null) cms.Show(Cursor.Position); else if(cm != null) { Point pt = cCtx.PointToClient(Cursor.Position); cm.Show(cCtx, pt); } } UIUtil.SetHandled(e, true); return true; } return false; } internal static Size GetSmallIconSize(int wDefault, int hDefault) { // Throws under Mono 4.2.1 on Mac OS X; // https://sourceforge.net/p/keepass/discussion/329221/thread/7c096cfc/ try { return SystemInformation.SmallIconSize; } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } return new Size(wDefault, hDefault); } } } KeePass/UI/CustomToolStripEx.cs0000664000000000000000000000512712641461342015414 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Windows.Forms; using System.Diagnostics; using KeePass.Native; using KeePass.Util; namespace KeePass.UI { public sealed class CustomToolStripEx : ToolStrip { private CriticalSectionEx m_csSizeAuto = new CriticalSectionEx(); private int m_iLockedHeight = 0; public CustomToolStripEx() : base() { // ThemeToolStripRenderer.AttachTo(this); UIUtil.Configure(this); } #if DEBUG ~CustomToolStripEx() { if(m_csSizeAuto.TryEnter()) m_csSizeAuto.Exit(); else { Debug.Assert(false); } // Should have been unlocked } #endif protected override void WndProc(ref Message m) { base.WndProc(ref m); // Enable 'click through' behavior if((m.Msg == NativeMethods.WM_MOUSEACTIVATE) && (m.Result == (IntPtr)NativeMethods.MA_ACTIVATEANDEAT)) { m.Result = (IntPtr)NativeMethods.MA_ACTIVATE; } } public void LockHeight(bool bLock) { Debug.Assert(this.Height > 0); m_iLockedHeight = (bLock ? this.Height : 0); } protected override void OnSizeChanged(EventArgs e) { if(m_csSizeAuto.TryEnter()) { try { Size sz = this.Size; // Ignore zero-size events (which can occur e.g. when // the ToolStrip is being hidden) if((sz.Width > 0) && (sz.Height > 0)) { if((m_iLockedHeight > 0) && (sz.Height != m_iLockedHeight)) { base.OnSizeChanged(e); this.Height = m_iLockedHeight; Debug.Assert(this.Size.Height == m_iLockedHeight); return; } } } catch(Exception) { Debug.Assert(false); } finally { m_csSizeAuto.Exit(); } } base.OnSizeChanged(e); } } } KeePass/UI/CustomTreeViewEx.cs0000664000000000000000000001254312664367016015217 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.Native; using KeePass.Util; using NativeLib = KeePassLib.Native.NativeLib; namespace KeePass.UI { // public delegate string QueryToolTipDelegate(TreeNode tn); public sealed class CustomTreeViewEx : TreeView { // private TreeNode m_tnReadyForLabelEdit = null; // private QueryToolTipDelegate m_fnQueryToolTip = null; // /// // /// This handler will be used to dynamically query tooltip // /// texts for tree nodes. // /// // public QueryToolTipDelegate QueryToolTip // { // get { return m_fnQueryToolTip; } // set { m_fnQueryToolTip = value; } // } public CustomTreeViewEx() : base() { // Enable default double buffering (must be combined with // TVS_EX_DOUBLEBUFFER, see OnHandleCreated) try { this.DoubleBuffered = true; } catch(Exception) { Debug.Assert(!WinUtil.IsAtLeastWindowsVista); } // try // { // IntPtr hWnd = this.Handle; // if((hWnd != IntPtr.Zero) && (this.ItemHeight == 16)) // { // int nStyle = NativeMethods.GetWindowStyle(hWnd); // nStyle |= (int)NativeMethods.TVS_NONEVENHEIGHT; // NativeMethods.SetWindowLong(hWnd, NativeMethods.GWL_STYLE, nStyle); // this.ItemHeight = 17; // } // } // catch(Exception) { } // this.ItemHeight = 18; // try // { // IntPtr hWnd = this.Handle; // if((hWnd != IntPtr.Zero) && UIUtil.VistaStyleListsSupported) // { // int nStyle = NativeMethods.GetWindowStyle(hWnd); // nStyle |= (int)NativeMethods.TVS_FULLROWSELECT; // NativeMethods.SetWindowLong(hWnd, NativeMethods.GWL_STYLE, nStyle); // nStyle = NativeMethods.GetWindowLong(hWnd, NativeMethods.GWL_EXSTYLE); // nStyle |= (int)NativeMethods.TVS_EX_FADEINOUTEXPANDOS; // NativeMethods.SetWindowLong(hWnd, NativeMethods.GWL_EXSTYLE, nStyle); // } // } // catch(Exception) { } } // protected override void WndProc(ref Message m) // { // if(m.Msg == NativeMethods.WM_NOTIFY) // { // NativeMethods.NMHDR nm = (NativeMethods.NMHDR)m.GetLParam( // typeof(NativeMethods.NMHDR)); // if((nm.code == NativeMethods.TTN_NEEDTEXTA) || // (nm.code == NativeMethods.TTN_NEEDTEXTW)) // DynamicAssignNodeToolTip(); // } // base.WndProc(ref m); // } // private void DynamicAssignNodeToolTip() // { // if(m_fnQueryToolTip == null) return; // TreeViewHitTestInfo hti = HitTest(PointToClient(Cursor.Position)); // if(hti == null) { Debug.Assert(false); return; } // TreeNode tn = hti.Node; // if(tn == null) return; // tn.ToolTipText = (m_fnQueryToolTip(tn) ?? string.Empty); // } /* protected override void OnAfterSelect(TreeViewEventArgs e) { base.OnAfterSelect(e); if(!this.Focused) m_tnReadyForLabelEdit = null; else m_tnReadyForLabelEdit = this.SelectedNode; } protected override void OnLeave(EventArgs e) { m_tnReadyForLabelEdit = null; base.OnLeave(e); } protected override void OnBeforeLabelEdit(NodeLabelEditEventArgs e) { if(e != null) { if((m_tnReadyForLabelEdit == null) || (e.Node != m_tnReadyForLabelEdit)) { e.CancelEdit = true; return; } } else { Debug.Assert(false); } base.OnBeforeLabelEdit(e); // Call BeforeLabelEdit event } */ protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); try { if(this.DoubleBuffered) { IntPtr p = new IntPtr((int)NativeMethods.TVS_EX_DOUBLEBUFFER); NativeMethods.SendMessage(this.Handle, NativeMethods.TVM_SETEXTENDEDSTYLE, p, p); } else { Debug.Assert(!WinUtil.IsAtLeastWindowsVista); } } catch(Exception) { Debug.Assert(NativeLib.IsUnix()); } } /* protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= NativeMethods.WS_EX_COMPOSITED; return cp; } } */ /* protected override void WndProc(ref Message m) { if(m.Msg == NativeMethods.WM_ERASEBKGND) { m.Result = IntPtr.Zero; return; } base.WndProc(ref m); } */ protected override void OnKeyDown(KeyEventArgs e) { if(UIUtil.HandleCommonKeyEvent(e, true, this)) return; base.OnKeyDown(e); } protected override void OnKeyUp(KeyEventArgs e) { if(UIUtil.HandleCommonKeyEvent(e, false, this)) return; base.OnKeyUp(e); } } } KeePass/UI/ColorMenuItem.cs0000664000000000000000000000443412641461342014507 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Diagnostics; namespace KeePass.UI { public sealed class ColorMenuItem : MenuItem { private Color m_clr; private int m_qSize; public Color Color { get { return m_clr; } } public ColorMenuItem(Color clr, int qSize) : base() { m_clr = clr; m_qSize = qSize; Debug.Assert(this.CanRaiseEvents); this.ShowShortcut = false; this.OwnerDraw = true; } protected override void OnDrawItem(DrawItemEventArgs e) { // base.OnDrawItem(e); Graphics g = e.Graphics; Rectangle rectBounds = e.Bounds; Rectangle rectFill = new Rectangle(rectBounds.Left + 2, rectBounds.Top + 2, rectBounds.Width - 4, rectBounds.Height - 4); bool bFocused = (((e.State & DrawItemState.Focus) != DrawItemState.None) || ((e.State & DrawItemState.Selected) != DrawItemState.None)); // e.DrawBackground(); // e.DrawFocusRectangle(); using(SolidBrush sbBack = new SolidBrush(bFocused ? SystemColors.Highlight : SystemColors.Menu)) { g.FillRectangle(sbBack, rectBounds); } using(SolidBrush sb = new SolidBrush(m_clr)) { g.FillRectangle(sb, rectFill); } } protected override void OnMeasureItem(MeasureItemEventArgs e) { // base.OnMeasureItem(e); e.ItemWidth = m_qSize; e.ItemHeight = m_qSize; } } } KeePass/UI/ListSorter.cs0000664000000000000000000000677312641461344014111 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections; using System.Windows.Forms; using System.ComponentModel; using System.Diagnostics; using KeePass.Resources; using KeePassLib.Utility; namespace KeePass.UI { public sealed class ListSorter : IComparer { // Cached version of a string representing infinity private readonly string m_strNeverExpires; private int m_nColumn = -1; [DefaultValue(-1)] public int Column { get { return m_nColumn; } /// Only provided for XML serialization, do not use set { m_nColumn = value; } } private SortOrder m_oSort = SortOrder.Ascending; public SortOrder Order { get { return m_oSort; } /// Only provided for XML serialization, do not use set { m_oSort = value; } } private bool m_bCompareNaturally = true; [DefaultValue(true)] public bool CompareNaturally { get { return m_bCompareNaturally; } /// Only provided for XML serialization, do not use set { m_bCompareNaturally = value; } } private bool m_bCompareTimes = false; [DefaultValue(false)] public bool CompareTimes { get { return m_bCompareTimes; } /// Only provided for XML serialization, do not use set { m_bCompareTimes = value; } } public ListSorter() { m_strNeverExpires = KPRes.NeverExpires; } public ListSorter(int nColumn, SortOrder sortOrder, bool bCompareNaturally, bool bCompareTimes) { m_strNeverExpires = KPRes.NeverExpires; m_nColumn = nColumn; Debug.Assert(sortOrder != SortOrder.None); if(sortOrder != SortOrder.None) m_oSort = sortOrder; m_bCompareNaturally = bCompareNaturally; m_bCompareTimes = bCompareTimes; } public int Compare(object x, object y) { bool bSwap = (m_oSort != SortOrder.Ascending); ListViewItem lviX = (bSwap ? (ListViewItem)y : (ListViewItem)x); ListViewItem lviY = (bSwap ? (ListViewItem)x : (ListViewItem)y); string strL, strR; Debug.Assert(lviX.SubItems.Count == lviY.SubItems.Count); if((m_nColumn <= 0) || (lviX.SubItems.Count <= m_nColumn) || (lviY.SubItems.Count <= m_nColumn)) { strL = lviX.Text; strR = lviY.Text; } else { strL = lviX.SubItems[m_nColumn].Text; strR = lviY.SubItems[m_nColumn].Text; } if(m_bCompareTimes) { if((strL == m_strNeverExpires) || (strR == m_strNeverExpires)) return strL.CompareTo(strR); DateTime dtL = TimeUtil.FromDisplayString(strL); DateTime dtR = TimeUtil.FromDisplayString(strR); return dtL.CompareTo(dtR); } if(m_bCompareNaturally) return StrUtil.CompareNaturally(strL, strR); return string.Compare(strL, strR, true); } } } KeePass/UI/RichTextBoxContextMenu.cs0000664000000000000000000001524512641461344016366 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Windows.Forms; using System.Diagnostics; using KeePass.Resources; using KeePass.Util; namespace KeePass.UI { public sealed class RichTextBoxContextMenu { private RichTextBox m_rtb = null; private Form m_form = null; private ContextMenuStrip m_ctx = null; private ToolStripItem[] m_vMenuItems = new ToolStripItem[(int)RtbCtxCommands.Count]; private string m_strCurLink = string.Empty; private enum RtbCtxCommands { Undo = 0, Cut, Copy, Paste, Delete, CopyLink, CopyAll, SelectAll, Count } public RichTextBoxContextMenu() { } ~RichTextBoxContextMenu() { Detach(); } [Obsolete] public void Attach(RichTextBox rtb) { Attach(rtb, null); } public void Attach(RichTextBox rtb, Form fParent) { Detach(); m_rtb = rtb; m_form = fParent; m_ctx = CreateContextMenu(); m_ctx.Opening += this.OnMenuOpening; GlobalWindowManager.CustomizeControl(m_ctx); m_rtb.ContextMenuStrip = m_ctx; } public void Detach() { if(m_rtb != null) { m_rtb.ContextMenuStrip = null; m_ctx.Opening -= this.OnMenuOpening; m_ctx = null; for(int i = 0; i < (int)RtbCtxCommands.Count; ++i) m_vMenuItems[i] = null; m_rtb = null; m_form = null; } } private ContextMenuStrip CreateContextMenu() { CustomContextMenuStripEx ctx = new CustomContextMenuStripEx(); int iPos = -1; m_vMenuItems[++iPos] = ctx.Items.Add(KPRes.Undo, Properties.Resources.B16x16_Undo, this.OnUndoCommand); ctx.Items.Add(new ToolStripSeparator()); m_vMenuItems[++iPos] = ctx.Items.Add(KPRes.Cut, Properties.Resources.B16x16_Cut, this.OnCutCommand); m_vMenuItems[++iPos] = ctx.Items.Add(KPRes.Copy, Properties.Resources.B16x16_EditCopy, this.OnCopyCommand); m_vMenuItems[++iPos] = ctx.Items.Add(KPRes.Paste, Properties.Resources.B16x16_EditPaste, this.OnPasteCommand); m_vMenuItems[++iPos] = ctx.Items.Add(KPRes.Delete, Properties.Resources.B16x16_EditDelete, this.OnDeleteCommand); ctx.Items.Add(new ToolStripSeparator()); m_vMenuItems[++iPos] = ctx.Items.Add(KPRes.CopyLink, Properties.Resources.B16x16_EditCopyLink, this.OnCopyLinkCommand); m_vMenuItems[++iPos] = ctx.Items.Add(KPRes.CopyAll, Properties.Resources.B16x16_EditShred, this.OnCopyAllCommand); m_vMenuItems[++iPos] = ctx.Items.Add(KPRes.SelectAll, Properties.Resources.B16x16_Edit, this.OnSelectAllCommand); Debug.Assert(iPos == ((int)RtbCtxCommands.Count - 1)); return ctx; } private void OnMenuOpening(object sender, EventArgs e) { bool bHasText = (m_rtb.TextLength > 0); bool bHasSel = (m_rtb.SelectionLength > 0); if(m_rtb.ReadOnly) { m_vMenuItems[(int)RtbCtxCommands.Undo].Enabled = false; m_vMenuItems[(int)RtbCtxCommands.Cut].Enabled = false; m_vMenuItems[(int)RtbCtxCommands.Paste].Enabled = false; m_vMenuItems[(int)RtbCtxCommands.Delete].Enabled = false; } else // Editable { m_vMenuItems[(int)RtbCtxCommands.Undo].Enabled = m_rtb.CanUndo; m_vMenuItems[(int)RtbCtxCommands.Cut].Enabled = bHasSel; m_vMenuItems[(int)RtbCtxCommands.Paste].Enabled = true; // Optimistic m_vMenuItems[(int)RtbCtxCommands.Delete].Enabled = bHasSel; } m_vMenuItems[(int)RtbCtxCommands.Copy].Enabled = bHasSel; m_vMenuItems[(int)RtbCtxCommands.CopyAll].Enabled = bHasText; m_vMenuItems[(int)RtbCtxCommands.SelectAll].Enabled = bHasText; m_strCurLink = GetLinkBelowMouse(); m_vMenuItems[(int)RtbCtxCommands.CopyLink].Enabled = (m_strCurLink.Length > 0); } private string GetLinkBelowMouse() { // Save selection int iSelStart = m_rtb.SelectionStart, iSelLength = m_rtb.SelectionLength; string strLink = string.Empty; try { int p = m_rtb.GetCharIndexFromPosition(m_rtb.PointToClient( Cursor.Position)); m_rtb.Select(p, 1); if(UIUtil.RtfIsFirstCharLink(m_rtb)) { int l = p; while((l - 1) >= 0) { m_rtb.Select(l - 1, 1); if(!UIUtil.RtfIsFirstCharLink(m_rtb)) break; --l; } int r = p, n = m_rtb.TextLength; while((r + 1) < n) { m_rtb.Select(r + 1, 1); if(!UIUtil.RtfIsFirstCharLink(m_rtb)) break; ++r; } strLink = m_rtb.Text.Substring(l, r - l + 1); } } catch(Exception) { Debug.Assert(false); } m_rtb.Select(iSelStart, iSelLength); // Restore selection return strLink; } private void OnUndoCommand(object sender, EventArgs e) { m_rtb.Undo(); } private void OnCutCommand(object sender, EventArgs e) { m_rtb.Cut(); } private void OnCopyCommand(object sender, EventArgs e) { m_rtb.Copy(); } private void OnPasteCommand(object sender, EventArgs e) { CustomRichTextBoxEx crtb = (m_rtb as CustomRichTextBoxEx); if(crtb != null) crtb.PasteAcceptable(); else m_rtb.Paste(); } private void OnDeleteCommand(object sender, EventArgs e) { int nStart = m_rtb.SelectionStart, nLength = m_rtb.SelectionLength; if((nStart < 0) || (nLength <= 0)) return; string strText = m_rtb.Text; strText = strText.Remove(nStart, nLength); m_rtb.Text = strText; m_rtb.Select(nStart, 0); } private void OnCopyLinkCommand(object sender, EventArgs e) { ClipboardUtil.Copy(m_strCurLink, false, false, null, null, (m_form != null) ? m_form.Handle : IntPtr.Zero); } private void OnCopyAllCommand(object sender, EventArgs e) { int nStart = m_rtb.SelectionStart, nLength = m_rtb.SelectionLength; m_rtb.SelectAll(); m_rtb.Copy(); m_rtb.Select(nStart, nLength); } private void OnSelectAllCommand(object sender, EventArgs e) { m_rtb.SelectAll(); } } } KeePass/UI/DynamicMenu.cs0000664000000000000000000000726412641461342014202 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Diagnostics; namespace KeePass.UI { public sealed class DynamicMenuEventArgs : EventArgs { private string m_strItemName = string.Empty; private object m_objTag = null; public string ItemName { get { return m_strItemName; } } public object Tag { get { return m_objTag; } } public DynamicMenuEventArgs(string strItemName, object objTag) { Debug.Assert(strItemName != null); if(strItemName == null) throw new ArgumentNullException("strItemName"); m_strItemName = strItemName; m_objTag = objTag; } } public sealed class DynamicMenu { private ToolStripItemCollection m_tsicHost; private List m_vMenuItems = new List(); public event EventHandler MenuClick; // Constructor required by plugins public DynamicMenu(ToolStripDropDownItem tsmiHost) { Debug.Assert(tsmiHost != null); if(tsmiHost == null) throw new ArgumentNullException("tsmiHost"); m_tsicHost = tsmiHost.DropDownItems; } public DynamicMenu(ToolStripItemCollection tsicHost) { Debug.Assert(tsicHost != null); if(tsicHost == null) throw new ArgumentNullException("tsicHost"); m_tsicHost = tsicHost; } ~DynamicMenu() { Clear(); } public void Clear() { for(int i = 0; i < m_vMenuItems.Count; ++i) { ToolStripItem tsi = m_vMenuItems[m_vMenuItems.Count - i - 1]; if(tsi is ToolStripMenuItem) tsi.Click -= this.OnMenuClick; m_tsicHost.Remove(tsi); } m_vMenuItems.Clear(); } public ToolStripMenuItem AddItem(string strItemText, Image imgSmallIcon) { return AddItem(strItemText, imgSmallIcon, null); } public ToolStripMenuItem AddItem(string strItemText, Image imgSmallIcon, object objTag) { Debug.Assert(strItemText != null); if(strItemText == null) throw new ArgumentNullException("strItemText"); ToolStripMenuItem tsmi = new ToolStripMenuItem(strItemText); tsmi.Click += this.OnMenuClick; tsmi.Tag = objTag; if(imgSmallIcon != null) tsmi.Image = imgSmallIcon; m_tsicHost.Add(tsmi); m_vMenuItems.Add(tsmi); return tsmi; } public void AddSeparator() { ToolStripSeparator sep = new ToolStripSeparator(); m_tsicHost.Add(sep); m_vMenuItems.Add(sep); } private void OnMenuClick(object sender, EventArgs e) { ToolStripItem tsi = (sender as ToolStripItem); Debug.Assert(tsi != null); if(tsi == null) return; string strText = tsi.Text; Debug.Assert(strText != null); if(strText == null) return; DynamicMenuEventArgs args = new DynamicMenuEventArgs(strText, tsi.Tag); if(this.MenuClick != null) this.MenuClick(sender, args); } } } KeePass/UI/OnDemandStatusDialog.cs0000664000000000000000000001236312641461344016000 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Threading; using System.Windows.Forms; using KeePass.Forms; using KeePassLib.Interfaces; namespace KeePass.UI { public sealed class OnDemandStatusDialog : IStatusLogger { private readonly bool m_bUseThread; private readonly Form m_fOwner; private Thread m_th = null; private StatusProgressForm m_dlgModal = null; private object m_objSync = new object(); private const uint InitialProgress = 0; private const string InitialStatus = null; private volatile string m_strTitle = null; private volatile bool m_bTerminate = false; private volatile uint m_uProgress = InitialProgress; private volatile string m_strProgress = InitialStatus; public OnDemandStatusDialog(bool bUseThread, Form fOwner) { m_bUseThread = bUseThread; m_fOwner = fOwner; } public void StartLogging(string strOperation, bool bWriteOperationToLog) { m_strTitle = strOperation; } public void EndLogging() { lock(m_objSync) { m_bTerminate = true; } m_th = null; if(m_dlgModal != null) { DestroyStatusDialog(m_dlgModal); m_dlgModal = null; } } public bool SetProgress(uint uPercent) { lock(m_objSync) { m_uProgress = uPercent; } return ((m_dlgModal != null) ? m_dlgModal.SetProgress(uPercent) : true); } public bool SetText(string strNewText, LogStatusType lsType) { if(strNewText == null) return true; if(lsType != LogStatusType.Info) return true; if(m_bUseThread && (m_th == null)) { ThreadStart ts = new ThreadStart(this.GuiThread); m_th = new Thread(ts); m_th.Start(); } if(!m_bUseThread && (m_dlgModal == null)) m_dlgModal = ConstructStatusDialog(); lock(m_objSync) { m_strProgress = strNewText; } return ((m_dlgModal != null) ? m_dlgModal.SetText(strNewText, lsType) : true); } public bool ContinueWork() { return ((m_dlgModal != null) ? m_dlgModal.ContinueWork() : true); } private void GuiThread() { uint uProgress = InitialProgress; string strProgress = InitialStatus; StatusProgressForm dlg = null; while(true) { lock(m_objSync) { if(m_bTerminate) break; if(m_uProgress != uProgress) { uProgress = m_uProgress; if(dlg != null) dlg.SetProgress(uProgress); } if(m_strProgress != strProgress) { strProgress = m_strProgress; if(dlg == null) dlg = ConstructStatusDialog(); dlg.SetText(strProgress, LogStatusType.Info); } } Application.DoEvents(); } DestroyStatusDialog(dlg); } private StatusProgressForm ConstructStatusDialog() { StatusProgressForm dlg = StatusProgressForm.ConstructEx( m_strTitle, false, true, (m_bUseThread ? null : m_fOwner), null); dlg.SetProgress(m_uProgress); MainForm mfOwner = ((m_fOwner != null) ? (m_fOwner as MainForm) : null); if((m_bUseThread == false) && (mfOwner != null)) { // mfOwner.RedirectActivationPush(dlg); mfOwner.UIBlockInteraction(true); } return dlg; } private void DestroyStatusDialog(StatusProgressForm dlg) { if(dlg != null) { MainForm mfOwner = ((m_fOwner != null) ? (m_fOwner as MainForm) : null); if((m_bUseThread == false) && (mfOwner != null)) { // mfOwner.RedirectActivationPop(); mfOwner.UIBlockInteraction(false); } StatusProgressForm.DestroyEx(dlg); // Conflict with 3116455 // if(mfOwner != null) mfOwner.Activate(); // Prevent disappearing } } } public sealed class UIBlockerStatusLogger : IStatusLogger { private MainForm m_mf; public UIBlockerStatusLogger(Form fParent) { m_mf = (fParent as MainForm); } public void StartLogging(string strOperation, bool bWriteOperationToLog) { if(m_mf != null) m_mf.UIBlockInteraction(true); } public void EndLogging() { if(m_mf != null) m_mf.UIBlockInteraction(false); } public bool SetProgress(uint uPercent) { return true; } public bool SetText(string strNewText, LogStatusType lsType) { if(m_mf != null) { if(!string.IsNullOrEmpty(strNewText)) { m_mf.SetStatusEx(strNewText); Application.DoEvents(); } } return true; } public bool ContinueWork() { return true; } } } KeePass/UI/DpiUtil.cs0000664000000000000000000001622012666331234013336 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Text; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Windows.Forms; using System.IO; using System.Reflection; using System.Diagnostics; using KeePass.Native; using KeePass.Util; using KeePassLib; using KeePassLib.Utility; using NativeLib = KeePassLib.Native.NativeLib; namespace KeePass.UI { public static class DpiUtil { private const int StdDpi = 96; private static bool m_bInitialized = false; private static int m_nDpiX = StdDpi; private static int m_nDpiY = StdDpi; private static double m_dScaleX = 1.0; private static double m_dScaleY = 1.0; public static bool ScalingRequired { get { if(Program.DesignMode) return false; EnsureInitialized(); return ((m_nDpiX != StdDpi) || (m_nDpiY != StdDpi)); } } private static void EnsureInitialized() { if(m_bInitialized) return; if(NativeLib.IsUnix()) { m_bInitialized = true; return; } try { IntPtr hDC = NativeMethods.GetDC(IntPtr.Zero); if(hDC != IntPtr.Zero) { m_nDpiX = NativeMethods.GetDeviceCaps(hDC, NativeMethods.LOGPIXELSX); m_nDpiY = NativeMethods.GetDeviceCaps(hDC, NativeMethods.LOGPIXELSY); if((m_nDpiX <= 0) || (m_nDpiY <= 0)) { Debug.Assert(false); m_nDpiX = StdDpi; m_nDpiY = StdDpi; } if(NativeMethods.ReleaseDC(IntPtr.Zero, hDC) != 1) { Debug.Assert(false); } } else { Debug.Assert(false); } } catch(Exception) { Debug.Assert(false); } m_dScaleX = (double)m_nDpiX / (double)StdDpi; m_dScaleY = (double)m_nDpiY / (double)StdDpi; m_bInitialized = true; } public static void ConfigureProcess() { if(NativeLib.IsUnix()) return; // try // { // ConfigurationManager.AppSettings.Set( // "EnableWindowsFormsHighDpiAutoResizing", "true"); // } // catch(Exception) { Debug.Assert(false); } #if DEBUG // Ensure that the .config file enables high DPI features string strExeConfig = WinUtil.GetExecutable() + ".config"; if(File.Exists(strExeConfig)) { string strCM = "System.Configuration.ConfigurationManager, "; strCM += "System.Configuration, Version="; strCM += Environment.Version.Major.ToString() + ".0.0.0, "; strCM += "Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; Type tCM = Type.GetType(strCM, false); if(tCM != null) { PropertyInfo pi = tCM.GetProperty("AppSettings", (BindingFlags.Public | BindingFlags.Static)); if(pi != null) { NameValueCollection nvc = (pi.GetValue(null, null) as NameValueCollection); if(nvc != null) { Debug.Assert(string.Equals(nvc.Get( "EnableWindowsFormsHighDpiAutoResizing"), "true", StrUtil.CaseIgnoreCmp)); } else { Debug.Assert(false); } } else { Debug.Assert(false); } } else { Debug.Assert(false); } // Assembly should be loaded } #endif try { if(WinUtil.IsAtLeastWindowsVista) NativeMethods.SetProcessDPIAware(); } catch(Exception) { Debug.Assert(false); } } internal static void Configure(ToolStrip ts) { if(ts == null) { Debug.Assert(false); return; } if(!DpiUtil.ScalingRequired) return; Size sz = ts.ImageScalingSize; if((sz.Width == 16) && (sz.Height == 16)) { sz.Width = ScaleIntX(16); sz.Height = ScaleIntY(16); ts.ImageScalingSize = sz; } else { Debug.Assert(((sz.Width == ScaleIntX(16)) && (sz.Height == ScaleIntY(16))), sz.ToString()); } } public static int ScaleIntX(int i) { EnsureInitialized(); return (int)Math.Round((double)i * m_dScaleX); } public static int ScaleIntY(int i) { EnsureInitialized(); return (int)Math.Round((double)i * m_dScaleY); } public static Image ScaleImage(Image img, bool bForceNewObject) { if(img == null) { Debug.Assert(false); return null; } // EnsureInitialized(); // Done by ScaleIntX int w = img.Width; int h = img.Height; int sw = ScaleIntX(w); int sh = ScaleIntY(h); if((w == sw) && (h == sh) && !bForceNewObject) return img; return GfxUtil.ScaleImage(img, sw, sh, ScaleTransformFlags.UIIcon); } internal static void ScaleToolStripItems(ToolStripItem[] vItems, int[] vWidths) { if(vItems == null) { Debug.Assert(false); return; } if(vWidths == null) { Debug.Assert(false); return; } if(vItems.Length != vWidths.Length) { Debug.Assert(false); return; } for(int i = 0; i < vItems.Length; ++i) { ToolStripItem tsi = vItems[i]; if(tsi == null) { Debug.Assert(false); continue; } int nWidth = vWidths[i]; int nWidthScaled = ScaleIntX(nWidth); Debug.Assert(nWidth >= 0); if(nWidth == nWidthScaled) { Debug.Assert(tsi.Width == nWidth); continue; } try { int w = tsi.Width; // .NET scales some ToolStripItems, some not Debug.Assert(((w == nWidth) || (w == nWidthScaled)), tsi.Name + ": w = " + w.ToString()); if(Math.Abs(w - nWidth) < Math.Abs(w - nWidthScaled)) tsi.Width = nWidthScaled; } catch(Exception) { Debug.Assert(false); } } } internal static Image GetIcon(PwDatabase pd, PwUuid pwUuid) { if(pd == null) { Debug.Assert(false); return null; } if(pwUuid == null) { Debug.Assert(false); return null; } int w = ScaleIntX(16); int h = ScaleIntY(16); return pd.GetCustomIcon(pwUuid, w, h); } [Conditional("DEBUG")] internal static void AssertUIImage(Image img) { #if DEBUG if(img == null) { Debug.Assert(false); return; } EnsureInitialized(); try { // Windows XP scales images based on the DPI resolution // specified in the image file; thus ensure that the // image file does not specify a DPI resolution; // https://sourceforge.net/p/keepass/bugs/1487/ int d = (int)Math.Round(img.HorizontalResolution); Debug.Assert((d == 0) || (d == m_nDpiX)); d = (int)Math.Round(img.VerticalResolution); Debug.Assert((d == 0) || (d == m_nDpiY)); } catch(Exception) { Debug.Assert(false); } #endif } } } KeePass/UI/GlobalWindowManager.cs0000664000000000000000000001743012641461342015650 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Windows.Forms; using System.Drawing; using KeePass.App; using KeePassLib.Native; using KeePassLib.Utility; namespace KeePass.UI { public sealed class GwmWindowEventArgs : EventArgs { private Form m_form; public Form Form { get { return m_form; } } private IGwmWindow m_gwmWindow; public IGwmWindow GwmWindow { get { return m_gwmWindow; } } public GwmWindowEventArgs(Form form, IGwmWindow gwmWindow) { m_form = form; m_gwmWindow = gwmWindow; } } public static class GlobalWindowManager { private static List> m_vWindows = new List>(); private static List m_vDialogs = new List(); public static uint WindowCount { get { return ((uint)(m_vWindows.Count + m_vDialogs.Count) + MessageService.CurrentMessageCount); } } public static bool CanCloseAllWindows { get { if(m_vDialogs.Count > 0) return false; if(MessageService.CurrentMessageCount > 0) return false; foreach(KeyValuePair kvp in m_vWindows) { if(kvp.Value == null) return false; else if(!kvp.Value.CanCloseWithoutDataLoss) return false; } return true; } } public static Form TopWindow { get { if(m_vWindows.Count == 0) return null; return m_vWindows[m_vWindows.Count - 1].Key; } } public static event EventHandler WindowAdded; public static event EventHandler WindowRemoved; public static void AddWindow(Form form) { AddWindow(form, null); } public static void AddWindow(Form form, IGwmWindow wnd) { Debug.Assert(form != null); if(form == null) throw new ArgumentNullException("form"); KeyValuePair kvp = new KeyValuePair( form, wnd); Debug.Assert(m_vWindows.IndexOf(kvp) < 0); m_vWindows.Add(kvp); // The control box must be enabled, otherwise DPI scaling // doesn't work due to a .NET bug: // http://connect.microsoft.com/VisualStudio/feedback/details/694242/difference-dpi-let-the-button-cannot-appear-completely-while-remove-the-controlbox-for-the-form // http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/67407313-8cb2-42b4-afb9-8be816f0a601/ Debug.Assert(form.ControlBox); form.TopMost = Program.Config.MainWindow.AlwaysOnTop; // Form formParent = form.ParentForm; // if(formParent != null) form.TopMost = formParent.TopMost; // else { Debug.Assert(false); } // form.Font = new System.Drawing.Font(System.Drawing.SystemFonts.MessageBoxFont.Name, 12.0f); CustomizeControl(form); MonoWorkarounds.ApplyTo(form); if(GlobalWindowManager.WindowAdded != null) GlobalWindowManager.WindowAdded(null, new GwmWindowEventArgs( form, wnd)); } public static void AddDialog(CommonDialog dlg) { Debug.Assert(dlg != null); if(dlg == null) throw new ArgumentNullException("dlg"); m_vDialogs.Add(dlg); } public static void RemoveWindow(Form form) { Debug.Assert(form != null); if(form == null) throw new ArgumentNullException("form"); for(int i = 0; i < m_vWindows.Count; ++i) { if(m_vWindows[i].Key == form) { if(GlobalWindowManager.WindowRemoved != null) GlobalWindowManager.WindowRemoved(null, new GwmWindowEventArgs( form, m_vWindows[i].Value)); MonoWorkarounds.Release(form); #if DEBUG DebugClose(form); #endif m_vWindows.RemoveAt(i); return; } } Debug.Assert(false); // Window not found! } public static void RemoveDialog(CommonDialog dlg) { Debug.Assert(dlg != null); if(dlg == null) throw new ArgumentNullException("dlg"); Debug.Assert(m_vDialogs.IndexOf(dlg) >= 0); m_vDialogs.Remove(dlg); } public static void CloseAllWindows() { Debug.Assert(GlobalWindowManager.CanCloseAllWindows); KeyValuePair[] vWindows = m_vWindows.ToArray(); Array.Reverse(vWindows); // Close windows in reverse order foreach(KeyValuePair kvp in vWindows) { if(kvp.Value == null) continue; else if(kvp.Value.CanCloseWithoutDataLoss) { if(kvp.Key.InvokeRequired) kvp.Key.Invoke(new CloseFormDelegate( GlobalWindowManager.CloseForm), kvp.Key); else CloseForm(kvp.Key); Application.DoEvents(); } } } private delegate void CloseFormDelegate(Form f); private static void CloseForm(Form f) { try { f.DialogResult = DialogResult.Cancel; f.Close(); } catch(Exception) { Debug.Assert(false); } } public static bool HasWindow(IntPtr hWindow) { foreach(KeyValuePair kvp in m_vWindows) { if(kvp.Key.Handle == hWindow) return true; } return false; } internal static bool ActivateTopWindow() { try { Form f = GlobalWindowManager.TopWindow; if(f == null) return false; f.Activate(); return true; } catch(Exception) { Debug.Assert(false); } return false; } public static void CustomizeControl(Control c) { if(NativeLib.IsUnix() && Program.Config.UI.ForceSystemFontUnix) { Font font = UISystemFonts.DefaultFont; if(font != null) CustomizeFont(c, font); } } private static void CustomizeFont(Control c, Font font) { if((c is Form) || (c is ToolStrip) || (c is ContextMenuStrip)) c.Font = font; foreach(Control cSub in c.Controls) CustomizeFont(cSub, font); if(c.ContextMenuStrip != null) CustomizeFont(c.ContextMenuStrip, font); } #if DEBUG private static void DebugClose(Control c) { if(c == null) { Debug.Assert(false); return; } List lInv = new List(); lInv.Add(Program.MainForm.ClientIcons); ListView lv = (c as ListView); if(lv != null) { // Image list properties must be set to null manually // when closing, otherwise we get a memory leak // (because the image list holds event handlers to // the list) Debug.Assert(!lInv.Contains(lv.LargeImageList)); Debug.Assert(!lInv.Contains(lv.SmallImageList)); } TreeView tv = (c as TreeView); if(tv != null) { Debug.Assert(!lInv.Contains(tv.ImageList)); // See above } TabControl tc = (c as TabControl); if(tc != null) { Debug.Assert(!lInv.Contains(tc.ImageList)); // See above } ToolStrip ts = (c as ToolStrip); if(ts != null) { Debug.Assert(!lInv.Contains(ts.ImageList)); // See above } Button btn = (c as Button); if(btn != null) { Debug.Assert(!lInv.Contains(btn.ImageList)); // See above } foreach(Control cc in c.Controls) DebugClose(cc); } #endif } } KeePass/UI/TabControlEx.cs0000664000000000000000000000321212641461344014324 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; namespace KeePass.UI { public sealed class TabControlEx : TabControl { private Font m_fBold = null; public TabControlEx() : base() { m_fBold = FontUtil.CreateFont(this.Font, FontStyle.Bold); this.DrawMode = TabDrawMode.OwnerDrawFixed; } protected override void Dispose(bool disposing) { base.Dispose(disposing); if(disposing) m_fBold.Dispose(); } protected override void OnDrawItem(DrawItemEventArgs e) { DrawItemEventArgs ev = e; if(this.SelectedIndex == e.Index) ev = new DrawItemEventArgs(e.Graphics, m_fBold, e.Bounds, e.Index, e.State); e.DrawBackground(); base.OnDrawItem(ev); } } } */ KeePass/UI/CustomContextMenuStripEx.cs0000664000000000000000000000251112641461342016742 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Windows.Forms; using System.Diagnostics; namespace KeePass.UI { public sealed class CustomContextMenuStripEx : ContextMenuStrip { public CustomContextMenuStripEx() : base() { UIUtil.Configure(this); } // Used e.g. by the designer public CustomContextMenuStripEx(IContainer container) : base(container) { UIUtil.Configure(this); } } } KeePass/UI/SecureEdit.cs0000664000000000000000000002644212641461344014026 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Windows.Forms; using System.Security; using System.Diagnostics; using System.Text; using System.Runtime.InteropServices; using System.Threading; using KeePassLib.Security; using KeePassLib.Utility; namespace KeePass.UI { /// /// Secure edit control class. Supports storing passwords in an encrypted /// form in the process memory. /// public sealed class SecureEdit { private static char? m_ochPasswordChar = null; internal static char PasswordChar { get { if(m_ochPasswordChar.HasValue) return m_ochPasswordChar.Value; // On Windows 98 / ME, an ANSI character must be used as // password char m_ochPasswordChar = ((Environment.OSVersion.Platform == PlatformID.Win32Windows) ? '\u00D7' : '\u25CF'); return m_ochPasswordChar.Value; } } private TextBox m_tbPassword = null; private EventHandler m_evTextChanged = null; private static readonly ProtectedString g_psEmpty = new ProtectedString( true, new byte[0]); // With ProtectedString.Empty no incremental protection (Remove/Insert) private ProtectedString m_psText = g_psEmpty; private bool m_bBlockTextChanged = false; private bool m_bFirstGotFocus = true; private bool m_bSecureDesktop = false; public bool SecureDesktopMode { get { return m_bSecureDesktop; } set { m_bSecureDesktop = value; } } public uint TextLength { get { return (uint)m_psText.Length; } } /// /// Construct a new SecureEdit object. You must call the /// Attach member function to associate the secure edit control /// with a text box. /// public SecureEdit() { } ~SecureEdit() { Detach(); } /// /// Associate the current secure edit object with a text box. /// /// Text box to link to. /// Initial protection flag. public void Attach(TextBox tbPasswordBox, EventHandler evTextChanged, bool bHidePassword) { Debug.Assert(tbPasswordBox != null); if(tbPasswordBox == null) throw new ArgumentNullException("tbPasswordBox"); Detach(); m_tbPassword = tbPasswordBox; m_evTextChanged = evTextChanged; // Initialize to zero-length string m_tbPassword.Text = string.Empty; Debug.Assert(m_tbPassword.SelectionStart == 0); Debug.Assert(m_tbPassword.SelectionLength == 0); m_psText = g_psEmpty; EnableProtection(bHidePassword); if(m_evTextChanged != null) m_evTextChanged(m_tbPassword, EventArgs.Empty); if(!m_bSecureDesktop) m_tbPassword.AllowDrop = true; // Register event handler m_tbPassword.TextChanged += this.OnPasswordTextChanged; m_tbPassword.GotFocus += this.OnGotFocus; if(!m_bSecureDesktop) { m_tbPassword.DragEnter += this.OnDragCheck; m_tbPassword.DragOver += this.OnDragCheck; m_tbPassword.DragDrop += this.OnDragDrop; } } /// /// Remove the current association. You should call this before the /// text box is destroyed. /// public void Detach() { if(m_tbPassword != null) { m_tbPassword.TextChanged -= this.OnPasswordTextChanged; m_tbPassword.GotFocus -= this.OnGotFocus; if(!m_bSecureDesktop) { m_tbPassword.DragEnter -= this.OnDragCheck; m_tbPassword.DragOver -= this.OnDragCheck; m_tbPassword.DragDrop -= this.OnDragDrop; } m_tbPassword = null; } } public void EnableProtection(bool bEnable) { if(m_tbPassword == null) { Debug.Assert(false); return; } if(!MonoWorkarounds.IsRequired(5795)) { if(bEnable) FontUtil.AssignDefault(m_tbPassword); else { FontUtil.SetDefaultFont(m_tbPassword); FontUtil.AssignDefaultMono(m_tbPassword, true); } } if(m_tbPassword.UseSystemPasswordChar == bEnable) return; m_tbPassword.UseSystemPasswordChar = bEnable; ShowCurrentPassword(-1, -1); } private void OnPasswordTextChanged(object sender, EventArgs e) { if(m_tbPassword == null) { Debug.Assert(false); return; } if(m_bBlockTextChanged) return; int nSelPos = m_tbPassword.SelectionStart; int nSelLen = m_tbPassword.SelectionLength; if(!m_tbPassword.UseSystemPasswordChar) { RemoveInsert(0, 0, m_tbPassword.Text); ShowCurrentPassword(nSelPos, nSelLen); return; } string strText = m_tbPassword.Text; int inxLeft = -1, inxRight = 0; StringBuilder sbNewPart = new StringBuilder(); char chPasswordChar = SecureEdit.PasswordChar; for(int i = 0; i < strText.Length; ++i) { if(strText[i] != chPasswordChar) { if(inxLeft == -1) inxLeft = i; inxRight = i; sbNewPart.Append(strText[i]); } } if(inxLeft < 0) RemoveInsert(nSelPos, strText.Length - nSelPos, string.Empty); else RemoveInsert(inxLeft, strText.Length - inxRight - 1, sbNewPart.ToString()); ShowCurrentPassword(nSelPos, nSelLen); // Check for m_tbPassword being null from on now; the // control might be disposed already (by the user handler // triggered by the ShowCurrentPassword call) if(m_tbPassword != null) m_tbPassword.ClearUndo(); // Would need special undo buffer } private void ShowCurrentPassword(int nSelStart, int nSelLength) { if(m_tbPassword == null) { Debug.Assert(false); return; } if(nSelStart < 0) nSelStart = m_tbPassword.SelectionStart; if(nSelLength < 0) nSelLength = m_tbPassword.SelectionLength; m_bBlockTextChanged = true; if(!m_tbPassword.UseSystemPasswordChar) m_tbPassword.Text = GetAsString(); else m_tbPassword.Text = new string(SecureEdit.PasswordChar, m_psText.Length); m_bBlockTextChanged = false; int nNewTextLen = m_tbPassword.TextLength; if(nSelStart < 0) { Debug.Assert(false); nSelStart = 0; } if(nSelStart > nNewTextLen) nSelStart = nNewTextLen; // Behind last char if(nSelLength < 0) { Debug.Assert(false); nSelLength = 0; } if((nSelStart + nSelLength) > nNewTextLen) nSelLength = nNewTextLen - nSelStart; m_tbPassword.SelectionStart = nSelStart; m_tbPassword.SelectionLength = nSelLength; if(m_evTextChanged != null) m_evTextChanged(m_tbPassword, EventArgs.Empty); } public byte[] ToUtf8() { // Debug.Assert(sizeof(char) == 2); // if(m_secString != null) // { // char[] vChars = new char[m_secString.Length]; // IntPtr p = Marshal.SecureStringToGlobalAllocUnicode(m_secString); // for(int i = 0; i < m_secString.Length; ++i) // vChars[i] = (char)Marshal.ReadInt16(p, i * 2); // Marshal.ZeroFreeGlobalAllocUnicode(p); // byte[] pb = StrUtil.Utf8.GetBytes(vChars); // Array.Clear(vChars, 0, vChars.Length); // return pb; // } // else return StrUtil.Utf8.GetBytes(m_strAlternativeSecString); return m_psText.ReadUtf8(); } private string GetAsString() { // if(m_secString != null) // { // IntPtr p = Marshal.SecureStringToGlobalAllocUnicode(m_secString); // string str = Marshal.PtrToStringUni(p); // Marshal.ZeroFreeGlobalAllocUnicode(p); // return str; // } // else return m_strAlternativeSecString; return m_psText.ReadString(); } private void RemoveInsert(int nLeftRem, int nRightRem, string strInsert) { Debug.Assert(nLeftRem >= 0); // if(m_secString != null) // { // while(m_secString.Length > (nLeftRem + nRightRem)) // m_secString.RemoveAt(nLeftRem); // for(int i = 0; i < strInsert.Length; ++i) // m_secString.InsertAt(nLeftRem + i, strInsert[i]); // } // else // { // StringBuilder sb = new StringBuilder(m_strAlternativeSecString); // while(sb.Length > (nLeftRem + nRightRem)) // sb.Remove(nLeftRem, 1); // sb.Insert(nLeftRem, strInsert); // m_strAlternativeSecString = sb.ToString(); // } try { int cr = m_psText.Length - (nLeftRem + nRightRem); if(cr >= 0) m_psText = m_psText.Remove(nLeftRem, cr); else { Debug.Assert(false); } Debug.Assert(m_psText.Length == (nLeftRem + nRightRem)); } catch(Exception) { Debug.Assert(false); } try { m_psText = m_psText.Insert(nLeftRem, strInsert); } catch(Exception) { Debug.Assert(false); } } public bool ContentsEqualTo(SecureEdit secOther) { Debug.Assert(secOther != null); if(secOther == null) return false; byte[] pbThis = ToUtf8(); byte[] pbOther = secOther.ToUtf8(); bool bEqual = MemUtil.ArraysEqual(pbThis, pbOther); MemUtil.ZeroByteArray(pbThis); MemUtil.ZeroByteArray(pbOther); return bEqual; } public void SetPassword(byte[] pbUtf8) { Debug.Assert(pbUtf8 != null); if(pbUtf8 == null) throw new ArgumentNullException("pbUtf8"); // if(m_secString != null) // { // m_secString.Clear(); // char[] vChars = StrUtil.Utf8.GetChars(pbUtf8); // for(int i = 0; i < vChars.Length; ++i) // { // m_secString.AppendChar(vChars[i]); // vChars[i] = char.MinValue; // } // } // else m_strAlternativeSecString = StrUtil.Utf8.GetString(pbUtf8); m_psText = new ProtectedString(true, pbUtf8); ShowCurrentPassword(0, 0); } private void OnGotFocus(object sender, EventArgs e) { if(m_tbPassword == null) { Debug.Assert(false); return; } if(m_bFirstGotFocus) { m_bFirstGotFocus = false; // OnGotFocus is not called when the box initially has the // focus; the user can select characters without triggering // OnGotFocus, thus we select all characters only if the // selection is in its original state (0, 0), otherwise // e.g. the selection restoration when hiding/unhiding does // not work the first time (because after restoring the // selection, we would override it here by selecting all) if((m_tbPassword.SelectionStart <= 0) && (m_tbPassword.SelectionLength <= 0)) m_tbPassword.SelectAll(); } } private void OnDragCheck(object sender, DragEventArgs e) { if(e.Data.GetDataPresent(typeof(string))) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; } private void OnDragDrop(object sender, DragEventArgs e) { if(e.Data.GetDataPresent(typeof(string))) { string strData = (e.Data.GetData(typeof(string)) as string); if(strData == null) { Debug.Assert(false); return; } if(m_tbPassword != null) m_tbPassword.Paste(strData); } } } } KeePass/UI/FileDialogsEx.cs0000664000000000000000000002031512641461342014440 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.IO; using System.Diagnostics; using KeePass.Resources; using KeePass.Util; using KeePassLib; using KeePassLib.Utility; namespace KeePass.UI { public enum FileSaveOrigin { Closing = 0, Locking = 1, Exiting = 2 } public static class FileDialogsEx { public static DialogResult ShowFileSaveQuestion(string strFile, FileSaveOrigin fsOrigin) { bool bFile = ((strFile != null) && (strFile.Length > 0)); if(WinUtil.IsAtLeastWindowsVista) { VistaTaskDialog dlg = new VistaTaskDialog(); string strText = KPRes.DatabaseModifiedNoDot; if(bFile) strText += ":\r\n" + strFile; else strText += "."; dlg.CommandLinks = true; dlg.WindowTitle = PwDefs.ShortProductName; dlg.Content = strText; dlg.SetIcon(VtdCustomIcon.Question); bool bShowCheckBox = true; if(fsOrigin == FileSaveOrigin.Locking) { dlg.MainInstruction = KPRes.FileSaveQLocking; dlg.AddButton((int)DialogResult.Yes, KPRes.SaveCmd, KPRes.FileSaveQOpYesLocking); dlg.AddButton((int)DialogResult.No, KPRes.DiscardChangesCmd, KPRes.FileSaveQOpNoLocking); dlg.AddButton((int)DialogResult.Cancel, KPRes.Cancel, KPRes.FileSaveQOpCancel + " " + KPRes.FileSaveQOpCancelLocking); } else if(fsOrigin == FileSaveOrigin.Exiting) { dlg.MainInstruction = KPRes.FileSaveQExiting; dlg.AddButton((int)DialogResult.Yes, KPRes.SaveCmd, KPRes.FileSaveQOpYesExiting); dlg.AddButton((int)DialogResult.No, KPRes.DiscardChangesCmd, KPRes.FileSaveQOpNoExiting); dlg.AddButton((int)DialogResult.Cancel, KPRes.Cancel, KPRes.FileSaveQOpCancel + " " + KPRes.FileSaveQOpCancelExiting); } else { dlg.MainInstruction = KPRes.FileSaveQClosing; dlg.AddButton((int)DialogResult.Yes, KPRes.SaveCmd, KPRes.FileSaveQOpYesClosing); dlg.AddButton((int)DialogResult.No, KPRes.DiscardChangesCmd, KPRes.FileSaveQOpNoClosing); dlg.AddButton((int)DialogResult.Cancel, KPRes.Cancel, KPRes.FileSaveQOpCancel + " " + KPRes.FileSaveQOpCancelClosing); bShowCheckBox = false; } if(Program.Config.Application.FileClosing.AutoSave) bShowCheckBox = false; if(bShowCheckBox) dlg.VerificationText = KPRes.AutoSaveAtExit; if(dlg.ShowDialog()) { if(bShowCheckBox && (dlg.Result == (int)DialogResult.Yes)) Program.Config.Application.FileClosing.AutoSave = dlg.ResultVerificationChecked; return (DialogResult)dlg.Result; } } string strMessage = (bFile ? (strFile + MessageService.NewParagraph) : string.Empty); strMessage += KPRes.DatabaseModifiedNoDot + "." + MessageService.NewParagraph + KPRes.SaveBeforeCloseQuestion; return MessageService.Ask(strMessage, KPRes.SaveBeforeCloseTitle, MessageBoxButtons.YesNoCancel); } } public abstract class FileDialogEx { private readonly bool m_bSaveMode; private readonly string m_strContext; public abstract FileDialog FileDialog { get; } public string DefaultExt { get { return this.FileDialog.DefaultExt; } set { this.FileDialog.DefaultExt = value; } } public string FileName { get { return this.FileDialog.FileName; } set { this.FileDialog.FileName = value; } } public string[] FileNames { get { return this.FileDialog.FileNames; } } public string Filter { get { return this.FileDialog.Filter; } set { this.FileDialog.Filter = value; } } public int FilterIndex { get { return this.FileDialog.FilterIndex; } set { this.FileDialog.FilterIndex = value; } } private string m_strInitialDirectoryOvr = null; public string InitialDirectory { get { return m_strInitialDirectoryOvr; } set { m_strInitialDirectoryOvr = value; } } public string Title { get { return this.FileDialog.Title; } set { this.FileDialog.Title = value; } } protected FileDialogEx(bool bSaveMode, string strContext) { m_bSaveMode = bSaveMode; m_strContext = strContext; // May be null } public DialogResult ShowDialog() { string strPrevWorkDir = PreShowDialog(); DialogResult dr = this.FileDialog.ShowDialog(); PostShowDialog(strPrevWorkDir, dr); return dr; } public DialogResult ShowDialog(IWin32Window owner) { string strPrevWorkDir = PreShowDialog(); DialogResult dr = this.FileDialog.ShowDialog(owner); PostShowDialog(strPrevWorkDir, dr); return dr; } private string PreShowDialog() { MonoWorkarounds.EnsureRecentlyUsedValid(); string strPrevWorkDir = WinUtil.GetWorkingDirectory(); string strNew = Program.Config.Application.GetWorkingDirectory(m_strContext); if(!string.IsNullOrEmpty(m_strInitialDirectoryOvr)) strNew = m_strInitialDirectoryOvr; WinUtil.SetWorkingDirectory(strNew); // Always, even when no context try { string strWD = WinUtil.GetWorkingDirectory(); this.FileDialog.InitialDirectory = strWD; } catch(Exception) { Debug.Assert(false); } return strPrevWorkDir; } private void PostShowDialog(string strPrevWorkDir, DialogResult dr) { string strCur = null; // Modern file dialogs (on Windows >= Vista) do not change the // working directory (in contrast to Windows <= XP), thus we // derive the working directory from the first file try { if(dr == DialogResult.OK) { string strFile = null; if(m_bSaveMode) strFile = this.FileDialog.FileName; else if(this.FileDialog.FileNames.Length > 0) strFile = this.FileDialog.FileNames[0]; if(!string.IsNullOrEmpty(strFile)) strCur = UrlUtil.GetFileDirectory(strFile, false, true); } } catch(Exception) { Debug.Assert(false); } if(!string.IsNullOrEmpty(strCur)) Program.Config.Application.SetWorkingDirectory(m_strContext, strCur); WinUtil.SetWorkingDirectory(strPrevWorkDir); } } public sealed class OpenFileDialogEx : FileDialogEx { private OpenFileDialog m_dlg = new OpenFileDialog(); public override FileDialog FileDialog { get { return m_dlg; } } public bool Multiselect { get { return m_dlg.Multiselect; } set { m_dlg.Multiselect = value; } } public OpenFileDialogEx(string strContext) : base(false, strContext) { m_dlg.CheckFileExists = true; m_dlg.CheckPathExists = true; m_dlg.DereferenceLinks = true; m_dlg.ReadOnlyChecked = false; m_dlg.ShowHelp = false; m_dlg.ShowReadOnly = false; // m_dlg.SupportMultiDottedExtensions = false; // Default m_dlg.ValidateNames = true; m_dlg.RestoreDirectory = false; // Want new working directory } } public sealed class SaveFileDialogEx : FileDialogEx { private SaveFileDialog m_dlg = new SaveFileDialog(); public override FileDialog FileDialog { get { return m_dlg; } } public SaveFileDialogEx(string strContext) : base(true, strContext) { m_dlg.AddExtension = true; m_dlg.CheckFileExists = false; m_dlg.CheckPathExists = true; m_dlg.CreatePrompt = false; m_dlg.DereferenceLinks = true; m_dlg.OverwritePrompt = true; m_dlg.ShowHelp = false; // m_dlg.SupportMultiDottedExtensions = false; // Default m_dlg.ValidateNames = true; m_dlg.RestoreDirectory = false; // Want new working directory } } } KeePass/UI/AsyncPwListUpdate.cs0000664000000000000000000001564312641461342015354 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Threading; using System.Diagnostics; using KeePass.Forms; using KeePass.Util.Spr; using KeePassLib; namespace KeePass.UI { public sealed class PwListItem { private static long m_idNext = 1; private readonly PwEntry m_pe; public PwEntry Entry { get { return m_pe; } } private readonly long m_id; public long ListViewItemID { get { return m_id; } } public PwListItem(PwEntry pe) { if(pe == null) throw new ArgumentNullException("pe"); m_pe = pe; m_id = m_idNext; unchecked { ++m_idNext; } } } public delegate string PwTextUpdateDelegate(string strText, PwListItem li); public sealed class AsyncPwListUpdate { private readonly ListView m_lv; private object m_objListEditSync = new object(); public object ListEditSyncObject { get { return m_objListEditSync; } } private Dictionary m_dValidIDs = new Dictionary(); private object m_objValidIDsSync = new object(); private sealed class LviUpdInfo { public ListView ListView { get; set; } public long UpdateID { get; set; } public string Text { get; set; } public PwListItem ListItem { get; set; } public int IndexHint { get; set; } public int SubItem { get; set; } public PwTextUpdateDelegate Function { get; set; } public object ListEditSyncObject { get; set; } public object ValidIDsSyncObject { get; set; } public Dictionary ValidIDs { get; set; } } public AsyncPwListUpdate(ListView lv) { if(lv == null) throw new ArgumentNullException("lv"); m_lv = lv; } public void Queue(string strText, PwListItem li, int iIndexHint, int iSubItem, PwTextUpdateDelegate f) { if(strText == null) { Debug.Assert(false); return; } if(li == null) { Debug.Assert(false); return; } if(iSubItem < 0) { Debug.Assert(false); return; } if(f == null) { Debug.Assert(false); return; } LviUpdInfo state = new LviUpdInfo(); state.ListView = m_lv; state.UpdateID = unchecked((li.ListViewItemID << 6) + iSubItem); state.Text = strText; state.ListItem = li; state.IndexHint = ((iIndexHint >= 0) ? iIndexHint : 0); state.SubItem = iSubItem; state.Function = f; state.ListEditSyncObject = m_objListEditSync; state.ValidIDsSyncObject = m_objValidIDsSync; state.ValidIDs = m_dValidIDs; lock(m_objValidIDsSync) { Debug.Assert(!m_dValidIDs.ContainsKey(state.UpdateID)); m_dValidIDs[state.UpdateID] = true; } try { if(!ThreadPool.QueueUserWorkItem(new WaitCallback(UpdateItemFn), state)) throw new InvalidOperationException(); } catch(Exception) { Debug.Assert(false); lock(m_objValidIDsSync) { m_dValidIDs.Remove(state.UpdateID); } } } /// /// Cancel all pending updates. This method is asynchronous, /// i.e. it returns immediately and the number of queued /// updates will decrease continually. /// public void CancelPendingUpdatesAsync() { lock(m_objValidIDsSync) { List vKeys = new List(m_dValidIDs.Keys); foreach(long lKey in vKeys) { m_dValidIDs[lKey] = false; } } } public void WaitAll() { while(true) { lock(m_objValidIDsSync) { if(m_dValidIDs.Count == 0) break; } Thread.Sleep(4); Application.DoEvents(); } } private static void UpdateItemFn(object state) { LviUpdInfo lui = (state as LviUpdInfo); if(lui == null) { Debug.Assert(false); return; } try // Avoid cross-thread exceptions { bool bWork; lock(lui.ValidIDsSyncObject) { if(!lui.ValidIDs.TryGetValue(lui.UpdateID, out bWork)) { Debug.Assert(false); return; } } if(bWork) { string strNew = lui.Function(lui.Text, lui.ListItem); if(strNew == null) { Debug.Assert(false); return; } if(strNew == lui.Text) return; // if(lui.ListView.InvokeRequired) lui.ListView.Invoke(new SetItemTextDelegate( SetItemText), new object[] { strNew, lui }); // else SetItemText(strNew, lui); } } catch(Exception) { Debug.Assert(false); } finally { try // Avoid cross-thread exceptions { lock(lui.ValidIDsSyncObject) { if(!lui.ValidIDs.Remove(lui.UpdateID)) { Debug.Assert(false); } } } catch(Exception) { Debug.Assert(false); } } } private delegate void SetItemTextDelegate(string strText, LviUpdInfo lui); private static void SetItemText(string strText, LviUpdInfo lui) { try // Avoid cross-thread exceptions { long lTargetID = lui.ListItem.ListViewItemID; int iIndexHint = lui.IndexHint; lock(lui.ListEditSyncObject) { ListView.ListViewItemCollection lvic = lui.ListView.Items; int nCount = lvic.Count; // for(int i = 0; i < nCount; ++i) for(int i = nCount; i > 0; --i) { int j = ((iIndexHint + i) % nCount); ListViewItem lvi = lvic[j]; PwListItem li = (lvi.Tag as PwListItem); if(li == null) { Debug.Assert(false); continue; } if(li.ListViewItemID != lTargetID) continue; lvi.SubItems[lui.SubItem].Text = strText; break; } } } catch(Exception) { Debug.Assert(false); } } internal static string SprCompileFn(string strText, PwListItem li) { string strCmp = null; while(strCmp == null) { try { strCmp = SprEngine.Compile(strText, MainForm.GetEntryListSprContext( li.Entry, Program.MainForm.DocumentManager.SafeFindContainerOf( li.Entry))); } catch(InvalidOperationException) { } // Probably collection changed catch(NullReferenceException) { } // Objects disposed already catch(Exception) { Debug.Assert(false); } } if(strCmp == strText) return strText; return (Program.Config.MainWindow.EntryListShowDerefDataAndRefs ? (strCmp + " - " + strText) : strCmp); } } } KeePass/UI/BannerFactory.cs0000664000000000000000000003167012641461342014524 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.Windows.Forms; using System.Diagnostics; using KeePass.App; using KeePass.Util; using KeePassLib.Utility; namespace KeePass.UI { public enum BannerStyle { Default = 0, WinXPLogin = 1, WinVistaBlack = 2, KeePassWin32 = 3, BlueCarbon = 4 } public sealed class BfBannerInfo { public int Width { get; private set; } public int Height { get; private set; } public BannerStyle Style { get; private set; } public Image Icon { get; private set; } public string TitleText { get; private set; } public string InfoText { get; private set; } public BfBannerInfo(int nWidth, int nHeight, BannerStyle bs, Image imgIcon, string strTitle, string strLine) { this.Width = nWidth; this.Height = nHeight; this.Style = bs; this.Icon = imgIcon; this.TitleText = strTitle; this.InfoText = strLine; } } public delegate Image BfBannerGenerator(BfBannerInfo bannerInfo); public static class BannerFactory { private const int StdHeight = 60; // Standard height for 96 DPI private const int StdIconDim = 48; private static Dictionary m_vImageCache = new Dictionary(); private const int MaxCachedImages = 32; private static BfBannerGenerator m_pCustomGen = null; public static BfBannerGenerator CustomGenerator { get { return m_pCustomGen; } set { m_pCustomGen = value; } } public static Image CreateBanner(int nWidth, int nHeight, BannerStyle bs, Image imgIcon, string strTitle, string strLine) { return CreateBanner(nWidth, nHeight, bs, imgIcon, strTitle, strLine, false); } public static Image CreateBanner(int nWidth, int nHeight, BannerStyle bs, Image imgIcon, string strTitle, string strLine, bool bNoCache) { // imgIcon may be null Debug.Assert(strTitle != null); if(strTitle == null) throw new ArgumentNullException("strTitle"); Debug.Assert(strLine != null); if(strLine == null) throw new ArgumentNullException("strLine"); Debug.Assert((nHeight == StdHeight) || DpiUtil.ScalingRequired); if(MonoWorkarounds.IsRequired(12525) && (nHeight > 0)) --nHeight; string strImageID = nWidth.ToString() + "x" + nHeight.ToString() + ":"; if(strTitle != null) strImageID += strTitle; strImageID += ":"; if(strLine != null) strImageID += strLine; if(bs == BannerStyle.Default) bs = Program.Config.UI.BannerStyle; if(bs == BannerStyle.Default) { Debug.Assert(false); bs = BannerStyle.WinVistaBlack; } strImageID += ":" + ((uint)bs).ToString(); // Try getting the banner from the banner cache Image img = null; if(!bNoCache && m_vImageCache.TryGetValue(strImageID, out img)) return img; if(m_pCustomGen != null) img = m_pCustomGen(new BfBannerInfo(nWidth, nHeight, bs, imgIcon, strTitle, strLine)); const float fHorz = 0.90f; const float fVert = 90.0f; if(img == null) { img = new Bitmap(nWidth, nHeight, PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(img); int xIcon = DpiScaleInt(10, nHeight); bool bRtl = Program.Translation.Properties.RightToLeft; Matrix mxTrfOrg = g.Transform; if(bRtl) { g.TranslateTransform(nWidth, 0.0f); g.ScaleTransform(-1.0f, 1.0f); } Color clrStart = Color.White; Color clrEnd = Color.LightBlue; float fAngle = fHorz; if(bs == BannerStyle.BlueCarbon) { fAngle = fVert; g.Clear(Color.Black); // Area from 3/8 to 1/2 height clrStart = Color.LightGray; clrEnd = Color.Black; Rectangle rect = new Rectangle(0, 0, nWidth, (nHeight * 3) / 8); using(LinearGradientBrush brCarbonT = new LinearGradientBrush( rect, clrStart, clrEnd, fAngle, true)) { g.FillRectangle(brCarbonT, rect); } // clrStart = Color.FromArgb(0, 0, 32); clrStart = Color.FromArgb(0, 0, 28); // clrEnd = Color.FromArgb(192, 192, 255); clrEnd = Color.FromArgb(155, 155, 214); // rect = new Rectangle(0, nHeight / 2, nWidth, (nHeight * 5) / 8); int hMid = nHeight / 2; rect = new Rectangle(0, hMid - 1, nWidth, nHeight - hMid); using(LinearGradientBrush brCarbonB = new LinearGradientBrush( rect, clrStart, clrEnd, fAngle, true)) { g.FillRectangle(brCarbonB, rect); } // Workaround gradient drawing bug (e.g. occuring on // Windows 8.1 with 150% DPI) using(Pen pen = new Pen(Color.Black)) { g.DrawLine(pen, 0, hMid - 1, nWidth - 1, hMid - 1); } } else { if(bs == BannerStyle.WinXPLogin) { clrStart = Color.FromArgb(200, 208, 248); clrEnd = Color.FromArgb(40, 64, 216); } else if(bs == BannerStyle.WinVistaBlack) { clrStart = Color.FromArgb(151, 154, 173); clrEnd = Color.FromArgb(27, 27, 37); fAngle = fVert; } else if(bs == BannerStyle.KeePassWin32) { clrStart = Color.FromArgb(235, 235, 255); clrEnd = Color.FromArgb(192, 192, 255); } Rectangle rect = new Rectangle(0, 0, nWidth, nHeight); using(LinearGradientBrush brBack = new LinearGradientBrush( rect, clrStart, clrEnd, fAngle, true)) { g.FillRectangle(brBack, rect); } } int wIconScaled = StdIconDim; int hIconScaled = StdIconDim; if(imgIcon != null) { float fIconRel = (float)imgIcon.Width / (float)imgIcon.Height; wIconScaled = (int)Math.Round(DpiScaleFloat(fIconRel * (float)StdIconDim, nHeight)); hIconScaled = DpiScaleInt(StdIconDim, nHeight); int yIcon = (nHeight - hIconScaled) / 2; if(hIconScaled == imgIcon.Height) g.DrawImageUnscaled(imgIcon, xIcon, yIcon); else g.DrawImage(imgIcon, xIcon, yIcon, wIconScaled, hIconScaled); ColorMatrix cm = new ColorMatrix(); cm.Matrix33 = 0.1f; ImageAttributes ia = new ImageAttributes(); ia.SetColorMatrix(cm); int w = wIconScaled * 3, h = hIconScaled * 3; int x = nWidth - w - xIcon, y = (nHeight - h) / 2; Rectangle rectDest = new Rectangle(x, y, w, h); g.DrawImage(imgIcon, rectDest, 0, 0, imgIcon.Width, imgIcon.Height, GraphicsUnit.Pixel, ia); } if((bs == BannerStyle.WinXPLogin) || (bs == BannerStyle.WinVistaBlack) || (bs == BannerStyle.BlueCarbon)) { int sh = DpiUtil.ScaleIntY(20) / 10; // Force floor Rectangle rect = new Rectangle(0, nHeight - sh, 0, sh); rect.Width = nWidth / 2 + 1; rect.X = nWidth / 2; clrStart = Color.FromArgb(248, 136, 24); clrEnd = Color.White; using(LinearGradientBrush brushOrangeWhite = new LinearGradientBrush( rect, clrStart, clrEnd, fHorz, true)) { g.FillRectangle(brushOrangeWhite, rect); } rect.Width = nWidth / 2 + 1; rect.X = 0; clrStart = Color.White; clrEnd = Color.FromArgb(248, 136, 24); using(LinearGradientBrush brushWhiteOrange = new LinearGradientBrush( rect, clrStart, clrEnd, fHorz, true)) { g.FillRectangle(brushWhiteOrange, rect); } } else if(bs == BannerStyle.KeePassWin32) { int sh = DpiUtil.ScaleIntY(10) / 10; // Force floor // Black separator line using(Pen penBlack = new Pen(Color.Black)) { for(int i = 0; i < sh; ++i) g.DrawLine(penBlack, 0, nHeight - i - 1, nWidth - 1, nHeight - i - 1); } } if(bRtl) g.Transform = mxTrfOrg; // Brush brush; Color clrText; if(bs == BannerStyle.KeePassWin32) { // brush = Brushes.Black; clrText = Color.Black; } else { // brush = Brushes.White; clrText = Color.White; } // float fx = 2 * xIcon, fy = 9.0f; int tx = 2 * xIcon, ty = DpiScaleInt(9, nHeight); if(imgIcon != null) tx += wIconScaled; // fx // TextFormatFlags tff = (TextFormatFlags.PreserveGraphicsClipping | // TextFormatFlags.NoPrefix); // if(bRtl) tff |= TextFormatFlags.RightToLeft; float fFontSize = DpiScaleFloat((12.0f * 96.0f) / g.DpiY, nHeight); Font font = FontUtil.CreateFont(FontFamily.GenericSansSerif, fFontSize, FontStyle.Bold); int txs = (!bRtl ? tx : (nWidth - tx)); // - TextRenderer.MeasureText(g, strTitle, font).Width)); // g.DrawString(strTitle, font, brush, fx, fy); BannerFactory.DrawText(g, strTitle, txs, ty, font, clrText, bRtl); font.Dispose(); tx += xIcon; // fx ty += xIcon * 2 + 2; // fy float fFontSizeSm = DpiScaleFloat((9.0f * 96.0f) / g.DpiY, nHeight); Font fontSmall = FontUtil.CreateFont(FontFamily.GenericSansSerif, fFontSizeSm, FontStyle.Regular); int txl = (!bRtl ? tx : (nWidth - tx)); // - TextRenderer.MeasureText(g, strLine, fontSmall).Width)); // g.DrawString(strLine, fontSmall, brush, fx, fy); BannerFactory.DrawText(g, strLine, txl, ty, fontSmall, clrText, bRtl); fontSmall.Dispose(); g.Dispose(); } if(!bNoCache) { while(m_vImageCache.Count >= MaxCachedImages) { foreach(string strKey in m_vImageCache.Keys) { m_vImageCache.Remove(strKey); break; // Remove first item only } } // Save in cache m_vImageCache[strImageID] = img; } return img; } private static void DrawText(Graphics g, string strText, int x, int y, Font font, Color clrForeground, bool bRtl) { // With ClearType on, text drawn using Graphics.DrawString // looks better than TextRenderer.DrawText; // https://sourceforge.net/p/keepass/discussion/329220/thread/06ef4466/ /* // On Windows 2000 the DrawText method taking a Point doesn't // work by design, see MSDN: // http://msdn.microsoft.com/en-us/library/ms160657.aspx if(WinUtil.IsWindows2000) TextRenderer.DrawText(g, strText, font, new Rectangle(pt.X, pt.Y, nWidth - pt.X - 1, nHeight - pt.Y - 1), clrForeground, tff); else TextRenderer.DrawText(g, strText, font, pt, clrForeground, tff); */ using(SolidBrush br = new SolidBrush(clrForeground)) { StringFormatFlags sff = (StringFormatFlags.FitBlackBox | StringFormatFlags.NoClip); if(bRtl) sff |= StringFormatFlags.DirectionRightToLeft; using(StringFormat sf = new StringFormat(sff)) { g.DrawString(strText, font, br, x, y, sf); } } } private static int DpiScaleInt(int x, int nBaseHeight) { return (int)Math.Round((double)(x * nBaseHeight) / (double)StdHeight); } private static float DpiScaleFloat(float x, int nBaseHeight) { return ((x * (float)nBaseHeight) / (float)StdHeight); } public static void CreateBannerEx(Form f, PictureBox picBox, Image imgIcon, string strTitle, string strLine) { CreateBannerEx(f, picBox, imgIcon, strTitle, strLine, false); } public static void CreateBannerEx(Form f, PictureBox picBox, Image imgIcon, string strTitle, string strLine, bool bNoCache) { if(picBox == null) { Debug.Assert(false); return; } try { picBox.Image = CreateBanner(picBox.Width, picBox.Height, BannerStyle.Default, imgIcon, strTitle, strLine, bNoCache); } catch(Exception) { Debug.Assert(false); } } /// /// Update/create a dialog banner. This method is intended for /// updating banners in resizable dialogs. The created banner /// images bypass the cache of the factory and are disposed /// when the dialog is resized (i.e. the caller shouldn't do /// anything with the banner images). /// public static void UpdateBanner(Form f, PictureBox picBox, Image imgIcon, string strTitle, string strLine, ref int nOldWidth) { int nWidth = picBox.Width; if(nWidth != nOldWidth) { Image imgPrev = null; if(nOldWidth >= 0) imgPrev = picBox.Image; BannerFactory.CreateBannerEx(f, picBox, imgIcon, strTitle, strLine, true); if(imgPrev != null) imgPrev.Dispose(); // Release old banner nOldWidth = nWidth; } } } } KeePass/UI/DocumentManagerEx.cs0000664000000000000000000001617312641461342015336 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.App.Configuration; using KeePassLib; using KeePassLib.Delegates; using KeePassLib.Serialization; namespace KeePass.UI { public sealed class DocumentManagerEx { private List m_vDocs = new List(); private PwDocument m_dsActive = new PwDocument(); public event EventHandler ActiveDocumentSelected; public DocumentManagerEx() { Debug.Assert((m_vDocs != null) && (m_dsActive != null)); m_vDocs.Add(m_dsActive); } public PwDocument ActiveDocument { get { return m_dsActive; } set { if(value == null) { Debug.Assert(false); throw new ArgumentNullException("value"); } for(int i = 0; i < m_vDocs.Count; ++i) { if(m_vDocs[i] == value) { m_dsActive = value; NotifyActiveDocumentSelected(); return; } } throw new ArgumentException(); } } public PwDatabase ActiveDatabase { get { return m_dsActive.Database; } set { if(value == null) { Debug.Assert(false); throw new ArgumentNullException("value"); } for(int i = 0; i < m_vDocs.Count; ++i) { if(m_vDocs[i].Database == value) { m_dsActive = m_vDocs[i]; NotifyActiveDocumentSelected(); return; } } throw new ArgumentException(); } } public uint DocumentCount { get { return (uint)m_vDocs.Count; } } public List Documents { get { return m_vDocs; } } public PwDocument CreateNewDocument(bool bMakeActive) { PwDocument ds = new PwDocument(); if((m_vDocs.Count == 1) && (!m_vDocs[0].Database.IsOpen) && (m_vDocs[0].LockedIoc.Path.Length == 0)) { m_vDocs.RemoveAt(0); m_dsActive = ds; } m_vDocs.Add(ds); if(bMakeActive) m_dsActive = ds; NotifyActiveDocumentSelected(); return ds; } public void CloseDatabase(PwDatabase pwDatabase) { int iFoundPos = -1; for(int i = 0; i < m_vDocs.Count; ++i) { if(m_vDocs[i].Database == pwDatabase) { iFoundPos = i; break; } } if(iFoundPos < 0) { Debug.Assert(false); return; } bool bClosingActive = (m_vDocs[iFoundPos] == m_dsActive); m_vDocs.RemoveAt(iFoundPos); if(m_vDocs.Count == 0) m_vDocs.Add(new PwDocument()); if(bClosingActive) { int iNewActive = Math.Min(iFoundPos, m_vDocs.Count - 1); m_dsActive = m_vDocs[iNewActive]; NotifyActiveDocumentSelected(); } else { Debug.Assert(m_vDocs.Contains(m_dsActive)); } } public List GetOpenDatabases() { List list = new List(); foreach(PwDocument ds in m_vDocs) { if(ds.Database.IsOpen) list.Add(ds.Database); } return list; } internal List GetDocuments(int iMoveActive) { List lDocs = new List(m_vDocs); if(iMoveActive != 0) { for(int i = 0; i < lDocs.Count; ++i) { if(lDocs[i] == m_dsActive) { lDocs.RemoveAt(i); if(iMoveActive < 0) lDocs.Insert(0, m_dsActive); else lDocs.Add(m_dsActive); break; } } } return lDocs; } private void NotifyActiveDocumentSelected() { RememberActiveDocument(); if(this.ActiveDocumentSelected != null) this.ActiveDocumentSelected(null, EventArgs.Empty); } internal void RememberActiveDocument() { if(m_dsActive == null) { Debug.Assert(false); return; } if(m_dsActive.LockedIoc != null) SetLastUsedFile(m_dsActive.LockedIoc); if(m_dsActive.Database != null) SetLastUsedFile(m_dsActive.Database.IOConnectionInfo); } private static void SetLastUsedFile(IOConnectionInfo ioc) { if(ioc == null) { Debug.Assert(false); return; } AceApplication aceApp = Program.Config.Application; if(aceApp.Start.OpenLastFile) { if(!string.IsNullOrEmpty(ioc.Path)) aceApp.LastUsedFile = ioc.CloneDeep(); } else aceApp.LastUsedFile = new IOConnectionInfo(); } public PwDocument FindDocument(PwDatabase pwDatabase) { if(pwDatabase == null) throw new ArgumentNullException("pwDatabase"); foreach(PwDocument ds in m_vDocs) { if(ds.Database == pwDatabase) return ds; } return null; } /// /// Search for an entry in all opened databases. The /// entry is identified by its reference (not its UUID). /// /// Entry to search for. /// Database containing the entry. public PwDatabase FindContainerOf(PwEntry peObj) { if(peObj == null) return null; // No assert PwGroup pg = peObj.ParentGroup; if(pg != null) { while(pg.ParentGroup != null) { pg = pg.ParentGroup; } foreach(PwDocument ds in m_vDocs) { PwDatabase pd = ds.Database; if((pd == null) || !pd.IsOpen) continue; if(object.ReferenceEquals(pd.RootGroup, pg)) return pd; } Debug.Assert(false); } return SlowFindContainerOf(peObj); } private PwDatabase SlowFindContainerOf(PwEntry peObj) { PwDatabase pdRet = null; foreach(PwDocument ds in m_vDocs) { PwDatabase pd = ds.Database; if((pd == null) || !pd.IsOpen) continue; EntryHandler eh = delegate(PwEntry pe) { if(object.ReferenceEquals(pe, peObj)) { pdRet = pd; return false; // Stop traversal } return true; }; pd.RootGroup.TraverseTree(TraversalMethod.PreOrder, null, eh); if(pdRet != null) return pdRet; } return null; } public PwDatabase SafeFindContainerOf(PwEntry peObj) { // peObj may be null return (FindContainerOf(peObj) ?? m_dsActive.Database); } } public sealed class PwDocument { private PwDatabase m_pwDb = new PwDatabase(); private IOConnectionInfo m_ioLockedIoc = new IOConnectionInfo(); public PwDatabase Database { get { return m_pwDb; } } public IOConnectionInfo LockedIoc { get { return m_ioLockedIoc; } set { Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); m_ioLockedIoc = value; } } } } KeePass/UI/VistaTaskDialog.cs0000664000000000000000000003207212641461344015017 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Diagnostics; using System.Drawing; using KeePass.Native; using KeePass.Resources; using KeePassLib.Utility; namespace KeePass.UI { [Flags] public enum VtdFlags { None = 0, EnableHyperlinks = 0x0001, UseHIconMain = 0x0002, UseHIconFooter = 0x0004, AllowDialogCancellation = 0x0008, UseCommandLinks = 0x0010, UseCommandLinksNoIcon = 0x0020, ExpandFooterArea = 0x0040, ExpandedByDefault = 0x0080, VerificationFlagChecked = 0x0100, ShowProgressBar = 0x0200, ShowMarqueeProgressBar = 0x0400, CallbackTimer = 0x0800, PositionRelativeToWindow = 0x1000, RtlLayout = 0x2000, NoDefaultRadioButton = 0x4000 } [Flags] public enum VtdCommonButtonFlags { None = 0, OkButton = 0x0001, // Return value: IDOK = DialogResult.OK YesButton = 0x0002, // Return value: IDYES NoButton = 0x0004, // Return value: IDNO CancelButton = 0x0008, // Return value: IDCANCEL RetryButton = 0x0010, // Return value: IDRETRY CloseButton = 0x0020 // Return value: IDCLOSE } public enum VtdIcon { None = 0, Warning = 0xFFFF, Error = 0xFFFE, Information = 0xFFFD, Shield = 0xFFFC } public enum VtdCustomIcon { None = 0, Question = 1 } /* internal enum VtdMsg { Created = 0, Navigated = 1, ButtonClicked = 2, HyperlinkClicked = 3, Timer = 4, Destroyed = 5, RadioButtonClicked = 6, DialogConstructed = 7, VerificationClicked = 8, Help = 9, ExpandoButtonClicked = 10 } */ // Pack = 4 required for 64-bit compatibility [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)] internal struct VtdButton { public int ID; [MarshalAs(UnmanagedType.LPWStr)] public string Text; public VtdButton(bool bConstruct) { Debug.Assert(bConstruct); this.ID = (int)DialogResult.Cancel; this.Text = string.Empty; } } // Pack = 4 required for 64-bit compatibility [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)] internal struct VtdConfig { public uint cbSize; public IntPtr hwndParent; public IntPtr hInstance; [MarshalAs(UnmanagedType.U4)] public VtdFlags dwFlags; [MarshalAs(UnmanagedType.U4)] public VtdCommonButtonFlags dwCommonButtons; [MarshalAs(UnmanagedType.LPWStr)] public string pszWindowTitle; public IntPtr hMainIcon; [MarshalAs(UnmanagedType.LPWStr)] public string pszMainInstruction; [MarshalAs(UnmanagedType.LPWStr)] public string pszContent; public uint cButtons; public IntPtr pButtons; public int nDefaultButton; public uint cRadioButtons; public IntPtr pRadioButtons; public int nDefaultRadioButton; [MarshalAs(UnmanagedType.LPWStr)] public string pszVerificationText; [MarshalAs(UnmanagedType.LPWStr)] public string pszExpandedInformation; [MarshalAs(UnmanagedType.LPWStr)] public string pszExpandedControlText; [MarshalAs(UnmanagedType.LPWStr)] public string pszCollapsedControlText; public IntPtr hFooterIcon; [MarshalAs(UnmanagedType.LPWStr)] public string pszFooter; public TaskDialogCallbackProc pfCallback; public IntPtr lpCallbackData; public uint cxWidth; public VtdConfig(bool bConstruct) { Debug.Assert(bConstruct); cbSize = (uint)Marshal.SizeOf(typeof(VtdConfig)); hwndParent = IntPtr.Zero; hInstance = IntPtr.Zero; dwFlags = VtdFlags.None; if(Program.Translation.Properties.RightToLeft) dwFlags |= VtdFlags.RtlLayout; dwCommonButtons = VtdCommonButtonFlags.None; pszWindowTitle = null; hMainIcon = IntPtr.Zero; pszMainInstruction = string.Empty; pszContent = string.Empty; cButtons = 0; pButtons = IntPtr.Zero; nDefaultButton = 0; cRadioButtons = 0; pRadioButtons = IntPtr.Zero; nDefaultRadioButton = 0; pszVerificationText = null; pszExpandedInformation = null; pszExpandedControlText = null; pszCollapsedControlText = null; hFooterIcon = IntPtr.Zero; pszFooter = null; pfCallback = null; lpCallbackData = IntPtr.Zero; cxWidth = 0; } } internal delegate int TaskDialogCallbackProc(IntPtr hwnd, uint uNotification, UIntPtr wParam, IntPtr lParam, IntPtr lpRefData); public sealed class VistaTaskDialog { private const int VtdConfigSize32 = 96; private const int VtdConfigSize64 = 160; private VtdConfig m_cfg = new VtdConfig(true); private int m_iResult = (int)DialogResult.Cancel; private bool m_bVerification = false; private List m_vButtons = new List(); // private IntPtr m_hWnd = IntPtr.Zero; public string WindowTitle { get { return m_cfg.pszWindowTitle; } set { m_cfg.pszWindowTitle = value; } } public string MainInstruction { get { return m_cfg.pszMainInstruction; } set { m_cfg.pszMainInstruction = value; } } internal ReadOnlyCollection Buttons { get { return m_vButtons.AsReadOnly(); } } public string Content { get { return m_cfg.pszContent; } set { m_cfg.pszContent = value; } } public bool CommandLinks { get { return ((m_cfg.dwFlags & VtdFlags.UseCommandLinks) != VtdFlags.None); } set { if(value) m_cfg.dwFlags |= VtdFlags.UseCommandLinks; else m_cfg.dwFlags &= ~VtdFlags.UseCommandLinks; } } public int DefaultButtonID { get { return m_cfg.nDefaultButton; } set { m_cfg.nDefaultButton = value; } } public string ExpandedInformation { get { return m_cfg.pszExpandedInformation; } set { m_cfg.pszExpandedInformation = value; } } public bool ExpandedByDefault { get { return ((m_cfg.dwFlags & VtdFlags.ExpandedByDefault) != VtdFlags.None); } set { if(value) m_cfg.dwFlags |= VtdFlags.ExpandedByDefault; else m_cfg.dwFlags &= ~VtdFlags.ExpandedByDefault; } } public string FooterText { get { return m_cfg.pszFooter; } set { m_cfg.pszFooter = value; } } public string VerificationText { get { return m_cfg.pszVerificationText; } set { m_cfg.pszVerificationText = value; } } public int Result { get { return m_iResult; } } public bool ResultVerificationChecked { get { return m_bVerification; } } public VistaTaskDialog() { } public void AddButton(int iResult, string strCommand, string strDescription) { if(strCommand == null) throw new ArgumentNullException("strCommand"); VtdButton btn = new VtdButton(true); if(strDescription == null) btn.Text = strCommand; else btn.Text = strCommand + "\n" + strDescription; btn.ID = iResult; m_vButtons.Add(btn); } public void SetIcon(VtdIcon vtdIcon) { m_cfg.dwFlags &= ~VtdFlags.UseHIconMain; m_cfg.hMainIcon = new IntPtr((int)vtdIcon); } public void SetIcon(VtdCustomIcon vtdIcon) { if(vtdIcon == VtdCustomIcon.Question) this.SetIcon(SystemIcons.Question.Handle); } public void SetIcon(IntPtr hIcon) { m_cfg.dwFlags |= VtdFlags.UseHIconMain; m_cfg.hMainIcon = hIcon; } public void SetFooterIcon(VtdIcon vtdIcon) { m_cfg.dwFlags &= ~VtdFlags.UseHIconFooter; m_cfg.hFooterIcon = new IntPtr((int)vtdIcon); } private void ButtonsToPtr() { if(m_vButtons.Count == 0) { m_cfg.pButtons = IntPtr.Zero; return; } int nConfigSize = Marshal.SizeOf(typeof(VtdButton)); m_cfg.pButtons = Marshal.AllocHGlobal(m_vButtons.Count * nConfigSize); m_cfg.cButtons = (uint)m_vButtons.Count; for(int i = 0; i < m_vButtons.Count; ++i) { long l = m_cfg.pButtons.ToInt64() + (i * nConfigSize); Marshal.StructureToPtr(m_vButtons[i], new IntPtr(l), false); } } private void FreeButtonsPtr() { if(m_cfg.pButtons == IntPtr.Zero) return; int nConfigSize = Marshal.SizeOf(typeof(VtdButton)); for(int i = 0; i < m_vButtons.Count; ++i) { long l = m_cfg.pButtons.ToInt64() + (i * nConfigSize); Marshal.DestroyStructure(new IntPtr(l), typeof(VtdButton)); } Marshal.FreeHGlobal(m_cfg.pButtons); m_cfg.pButtons = IntPtr.Zero; m_cfg.cButtons = 0; } public bool ShowDialog() { return ShowDialog(null); } public bool ShowDialog(Form fParent) { MessageService.ExternalIncrementMessageCount(); Form f = fParent; if(f == null) f = MessageService.GetTopForm(); if(f == null) f = GlobalWindowManager.TopWindow; #if DEBUG if(GlobalWindowManager.TopWindow != null) { Debug.Assert(f == GlobalWindowManager.TopWindow); } Debug.Assert(f == MessageService.GetTopForm()); #endif bool bResult; if((f == null) || !f.InvokeRequired) bResult = InternalShowDialog(f); else bResult = (bool)f.Invoke(new InternalShowDialogDelegate( this.InternalShowDialog), f); MessageService.ExternalDecrementMessageCount(); return bResult; } private delegate bool InternalShowDialogDelegate(Form fParent); private bool InternalShowDialog(Form fParent) { if(IntPtr.Size == 4) { Debug.Assert(Marshal.SizeOf(typeof(VtdConfig)) == VtdConfigSize32); } else if(IntPtr.Size == 8) { Debug.Assert(Marshal.SizeOf(typeof(VtdConfig)) == VtdConfigSize64); } else { Debug.Assert(false); } m_cfg.cbSize = (uint)Marshal.SizeOf(typeof(VtdConfig)); if(fParent == null) m_cfg.hwndParent = IntPtr.Zero; else { try { m_cfg.hwndParent = fParent.Handle; } catch(Exception) { Debug.Assert(false); m_cfg.hwndParent = IntPtr.Zero; } } bool bExp = (m_cfg.pszExpandedInformation != null); m_cfg.pszExpandedControlText = (bExp ? KPRes.Details : null); m_cfg.pszCollapsedControlText = (bExp ? KPRes.Details : null); int pnButton = 0, pnRadioButton = 0; bool bVerification = false; try { ButtonsToPtr(); } catch(Exception) { Debug.Assert(false); return false; } // m_cfg.pfCallback = this.OnTaskDialogCallback; try { using(EnableThemingInScope etis = new EnableThemingInScope(true)) { if(NativeMethods.TaskDialogIndirect(ref m_cfg, out pnButton, out pnRadioButton, out bVerification) != 0) throw new NotSupportedException(); } } catch(Exception) { return false; } finally { try { // m_cfg.pfCallback = null; FreeButtonsPtr(); } catch(Exception) { Debug.Assert(false); } } m_iResult = pnButton; m_bVerification = bVerification; return true; } /* private int OnTaskDialogCallback(IntPtr hwnd, uint uNotification, UIntPtr wParam, IntPtr lParam, IntPtr lpRefData) { if((uNotification == (uint)VtdMsg.Created) || (uNotification == (uint)VtdMsg.DialogConstructed)) UpdateHWnd(hwnd); else if(uNotification == (uint)VtdMsg.Destroyed) UpdateHWnd(IntPtr.Zero); return 0; } private void UpdateHWnd(IntPtr hWnd) { if(hWnd != m_hWnd) { } // Unregister m_hWnd // Register hWnd m_hWnd = hWnd; } */ public static bool ShowMessageBox(string strContent, string strMainInstruction, string strWindowTitle, VtdIcon vtdIcon, Form fParent) { return (ShowMessageBoxEx(strContent, strMainInstruction, strWindowTitle, vtdIcon, fParent, null, 0, null, 0) >= 0); } public static int ShowMessageBoxEx(string strContent, string strMainInstruction, string strWindowTitle, VtdIcon vtdIcon, Form fParent, string strButton1, int iResult1, string strButton2, int iResult2) { VistaTaskDialog vtd = new VistaTaskDialog(); vtd.CommandLinks = false; if(strContent != null) vtd.Content = strContent; if(strMainInstruction != null) vtd.MainInstruction = strMainInstruction; if(strWindowTitle != null) vtd.WindowTitle = strWindowTitle; vtd.SetIcon(vtdIcon); bool bCustomButton = false; if(!string.IsNullOrEmpty(strButton1)) { vtd.AddButton(iResult1, strButton1, null); bCustomButton = true; } if(!string.IsNullOrEmpty(strButton2)) { vtd.AddButton(iResult2, strButton2, null); bCustomButton = true; } if(!vtd.ShowDialog(fParent)) return -1; return (bCustomButton ? vtd.Result : 0); } } } KeePass/UI/NotifyIconEx.cs0000664000000000000000000000742412663124600014342 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Text; using System.Windows.Forms; using KeePassLib; using KeePassLib.Native; using KeePassLib.Utility; namespace KeePass.UI { /// /// Exception-safe NotifyIcon wrapper class (workaround /// for exceptions thrown when running KeePass under Mono on /// Mac OS X). /// public sealed class NotifyIconEx { private NotifyIcon m_ntf = null; private Icon m_ico = null; // Property value private Icon m_icoShell = null; // Private copy public NotifyIcon NotifyIcon { get { return m_ntf; } } public ContextMenuStrip ContextMenuStrip { get { try { if(m_ntf != null) return m_ntf.ContextMenuStrip; } catch(Exception) { Debug.Assert(false); } return null; } set { try { if(m_ntf != null) m_ntf.ContextMenuStrip = value; } catch(Exception) { Debug.Assert(false); } } } public bool Visible { get { try { if(m_ntf != null) return m_ntf.Visible; } catch(Exception) { Debug.Assert(false); } return false; } set { try { if(m_ntf != null) m_ntf.Visible = value; } catch(Exception) { Debug.Assert(false); } } } public Icon Icon { get { return m_ico; } set { try { m_ico = value; if(m_ntf == null) return; Icon icoToDispose = m_icoShell; try { if(m_ico != null) { Size sz = SystemInformation.SmallIconSize; m_icoShell = new Icon(m_ico, sz); m_ntf.Icon = m_icoShell; } else m_ntf.Icon = null; } catch(Exception) { Debug.Assert(false); m_ntf.Icon = m_ico; } if(icoToDispose != null) icoToDispose.Dispose(); } catch(Exception) { Debug.Assert(false); } } } public string Text { get { try { if(m_ntf != null) return m_ntf.Text; } catch(Exception) { Debug.Assert(false); } return string.Empty; } set { try { if(m_ntf != null) m_ntf.Text = value; } catch(Exception) { Debug.Assert(false); } } } public NotifyIconEx(IContainer container) { try { bool bNtf = true; DesktopType t = NativeLib.GetDesktopType(); if((t == DesktopType.Unity) || (t == DesktopType.Pantheon)) bNtf = !MonoWorkarounds.IsRequired(1354); if(bNtf) m_ntf = new NotifyIcon(container); } catch(Exception) { Debug.Assert(false); } } public void SetHandlers(EventHandler ehClick, EventHandler ehDoubleClick, MouseEventHandler ehMouseDown) { if(m_ntf == null) return; try { if(ehClick != null) m_ntf.Click += ehClick; if(ehDoubleClick != null) m_ntf.DoubleClick += ehDoubleClick; if(ehMouseDown != null) m_ntf.MouseDown += ehMouseDown; } catch(Exception) { Debug.Assert(false); } } } } KeePass/UI/ListViewGroupingMenu.cs0000664000000000000000000001105212641461344016067 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.App.Configuration; using KeePass.Forms; using KeePass.Resources; using KeePass.Util; using KeePassLib; using KeePassLib.Collections; namespace KeePass.UI { public sealed class ListViewGroupingMenu { private ToolStripMenuItem m_tsmiMenu; private MainForm m_mf; private Dictionary m_dItems = new Dictionary(); public ListViewGroupingMenu(ToolStripMenuItem tsmiContainer, MainForm mf) { if(tsmiContainer == null) throw new ArgumentNullException("tsmiContainer"); if(mf == null) throw new ArgumentNullException("mf"); m_tsmiMenu = tsmiContainer; m_mf = mf; ToolStripMenuItem tsmi = new ToolStripMenuItem(KPRes.On); tsmi.Click += this.OnGroupOn; m_dItems[AceListGrouping.On] = tsmi; m_tsmiMenu.DropDownItems.Add(tsmi); tsmi = new ToolStripMenuItem(KPRes.Auto + " (" + KPRes.RecommendedCmd + ")"); tsmi.Click += this.OnGroupAuto; m_dItems[AceListGrouping.Auto] = tsmi; m_tsmiMenu.DropDownItems.Add(tsmi); tsmi = new ToolStripMenuItem(KPRes.Off); tsmi.Click += this.OnGroupOff; m_dItems[AceListGrouping.Off] = tsmi; m_tsmiMenu.DropDownItems.Add(tsmi); UpdateUI(); } #if DEBUG ~ListViewGroupingMenu() { Debug.Assert(m_tsmiMenu == null); // Release should have been called } #endif public void Release() { if(m_tsmiMenu != null) { m_dItems[AceListGrouping.On].Click -= this.OnGroupOn; m_dItems[AceListGrouping.Auto].Click -= this.OnGroupAuto; m_dItems[AceListGrouping.Off].Click -= this.OnGroupOff; m_dItems.Clear(); m_tsmiMenu.DropDownItems.Clear(); m_tsmiMenu = null; m_mf = null; } } private void UpdateUI() { int lgp = (Program.Config.MainWindow.ListGrouping & (int)AceListGrouping.Primary); foreach(KeyValuePair kvp in m_dItems) { Debug.Assert(((int)kvp.Key & ~(int)AceListGrouping.Primary) == 0); UIUtil.SetRadioChecked(kvp.Value, ((int)kvp.Key == lgp)); } } private void SetGrouping(AceListGrouping lgPrimary) { Debug.Assert(((int)lgPrimary & ~(int)AceListGrouping.Primary) == 0); if((int)lgPrimary == (Program.Config.MainWindow.ListGrouping & (int)AceListGrouping.Primary)) return; Program.Config.MainWindow.ListGrouping &= ~(int)AceListGrouping.Primary; Program.Config.MainWindow.ListGrouping |= (int)lgPrimary; Debug.Assert((Program.Config.MainWindow.ListGrouping & (int)AceListGrouping.Primary) == (int)lgPrimary); UpdateUI(); if(m_mf == null) { Debug.Assert(false); return; } PwDatabase pd = m_mf.ActiveDatabase; PwGroup pg = m_mf.GetCurrentEntries(); if((pd == null) || !pd.IsOpen || (pg == null)) return; // No assert PwObjectList pwl = pg.GetEntries(true); if((pwl.UCount > 0) && EntryUtil.EntriesHaveSameParent(pwl)) m_mf.UpdateUI(false, null, true, pwl.GetAt(0).ParentGroup, true, null, false); else { EntryUtil.ReorderEntriesAsInDatabase(pwl, pd); // Requires open DB pg = new PwGroup(true, true); pg.IsVirtual = true; foreach(PwEntry pe in pwl) pg.AddEntry(pe, false); m_mf.UpdateUI(false, null, false, null, true, pg, false); } } private void OnGroupOn(object sender, EventArgs e) { SetGrouping(AceListGrouping.On); } private void OnGroupAuto(object sender, EventArgs e) { SetGrouping(AceListGrouping.Auto); } private void OnGroupOff(object sender, EventArgs e) { SetGrouping(AceListGrouping.Off); } } } KeePass/UI/StatusUtil.cs0000664000000000000000000000661412641461344014112 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.Forms; using KeePass.Native; using KeePassLib; using KeePassLib.Interfaces; namespace KeePass.UI { public static class StatusUtil { private sealed class StatusProgressFormWrapper : IStatusLogger { private StatusProgressForm m_dlg; public StatusProgressForm Form { get { return m_dlg; } } public StatusProgressFormWrapper(Form fParent, string strTitle, bool bCanCancel, bool bMarqueeProgress) { m_dlg = new StatusProgressForm(); m_dlg.InitEx(strTitle, bCanCancel, bMarqueeProgress, fParent); if(fParent != null) m_dlg.Show(fParent); else m_dlg.Show(); } public void StartLogging(string strOperation, bool bWriteOperationToLog) { if(m_dlg == null) { Debug.Assert(false); return; } m_dlg.StartLogging(strOperation, false); } public void EndLogging() { if(m_dlg == null) { Debug.Assert(false); return; } m_dlg.EndLogging(); m_dlg.Close(); UIUtil.DestroyForm(m_dlg); m_dlg = null; } public bool SetProgress(uint uPercent) { if(m_dlg == null) { Debug.Assert(false); return true; } return m_dlg.SetProgress(uPercent); } public bool SetText(string strNewText, LogStatusType lsType) { if(m_dlg == null) { Debug.Assert(false); return true; } return m_dlg.SetText(strNewText, lsType); } public bool ContinueWork() { if(m_dlg == null) { Debug.Assert(false); return true; } return m_dlg.ContinueWork(); } } public static IStatusLogger CreateStatusDialog(Form fParent, out Form fOptDialog, string strTitle, string strOp, bool bCanCancel, bool bMarqueeProgress) { if(string.IsNullOrEmpty(strTitle)) strTitle = PwDefs.ShortProductName; if(strOp == null) strOp = string.Empty; IStatusLogger sl; // if(NativeProgressDialog.IsSupported) // { // ProgDlgFlags fl = (ProgDlgFlags.AutoTime | ProgDlgFlags.NoMinimize); // if(!bCanCancel) fl |= ProgDlgFlags.NoCancel; // if(bMarqueeProgress) fl |= ProgDlgFlags.MarqueeProgress; // sl = new NativeProgressDialog((fParent != null) ? fParent.Handle : // IntPtr.Zero, fl); // fOptDialog = null; // } // else // { StatusProgressFormWrapper w = new StatusProgressFormWrapper(fParent, strTitle, bCanCancel, bMarqueeProgress); sl = w; fOptDialog = w.Form; // } sl.StartLogging(strOp, false); return sl; } } } KeePass/UI/IGwmWindow.cs0000664000000000000000000000202412641461342014011 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.Text; namespace KeePass.UI { public interface IGwmWindow { bool CanCloseWithoutDataLoss { get; } } } KeePass/Forms/0000775000000000000000000000000012667057034012211 5ustar rootrootKeePass/Forms/EntropyForm.resx0000664000000000000000000001326612501530514015372 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/UrlOverrideForm.Designer.cs0000664000000000000000000001075212501532514017356 0ustar rootrootnamespace KeePass.Forms { partial class UrlOverrideForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_lblScheme = new System.Windows.Forms.Label(); this.m_tbScheme = new System.Windows.Forms.TextBox(); this.m_lblUrlOverride = new System.Windows.Forms.Label(); this.m_tbOverride = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(160, 100); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 3; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(241, 100); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 4; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; // // m_lblScheme // this.m_lblScheme.AutoSize = true; this.m_lblScheme.Location = new System.Drawing.Point(9, 15); this.m_lblScheme.Name = "m_lblScheme"; this.m_lblScheme.Size = new System.Drawing.Size(49, 13); this.m_lblScheme.TabIndex = 5; this.m_lblScheme.Text = "Scheme:"; // // m_tbScheme // this.m_tbScheme.Location = new System.Drawing.Point(64, 12); this.m_tbScheme.Name = "m_tbScheme"; this.m_tbScheme.Size = new System.Drawing.Size(252, 20); this.m_tbScheme.TabIndex = 0; // // m_lblUrlOverride // this.m_lblUrlOverride.AutoSize = true; this.m_lblUrlOverride.Location = new System.Drawing.Point(9, 45); this.m_lblUrlOverride.Name = "m_lblUrlOverride"; this.m_lblUrlOverride.Size = new System.Drawing.Size(73, 13); this.m_lblUrlOverride.TabIndex = 1; this.m_lblUrlOverride.Text = "URL override:"; // // m_tbOverride // this.m_tbOverride.Location = new System.Drawing.Point(12, 63); this.m_tbOverride.Name = "m_tbOverride"; this.m_tbOverride.Size = new System.Drawing.Size(304, 20); this.m_tbOverride.TabIndex = 2; // // UrlOverrideForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(328, 135); this.Controls.Add(this.m_tbOverride); this.Controls.Add(this.m_lblUrlOverride); this.Controls.Add(this.m_tbScheme); this.Controls.Add(this.m_lblScheme); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "UrlOverrideForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.Label m_lblScheme; private System.Windows.Forms.TextBox m_tbScheme; private System.Windows.Forms.Label m_lblUrlOverride; private System.Windows.Forms.TextBox m_tbOverride; } }KeePass/Forms/ProxyForm.cs0000664000000000000000000001207312641461340014477 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using KeePass.App.Configuration; using KeePass.UI; using KeePassLib; using KeePassLib.Serialization; namespace KeePass.Forms { public partial class ProxyForm : Form { public ProxyForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { GlobalWindowManager.AddWindow(this); this.Icon = Properties.Resources.KeePass; ProxyServerType pst = Program.Config.Integration.ProxyType; if(pst == ProxyServerType.None) m_rbNoProxy.Checked = true; else if(pst == ProxyServerType.Manual) m_rbManualProxy.Checked = true; else m_rbSystemProxy.Checked = true; m_tbAddress.Text = Program.Config.Integration.ProxyAddress; m_tbPort.Text = Program.Config.Integration.ProxyPort; string strUserName = Program.Config.Integration.ProxyUserName; string strPassword = Program.Config.Integration.ProxyPassword; ProxyAuthType pat = Program.Config.Integration.ProxyAuthType; if(pat == ProxyAuthType.Auto) { if((strUserName.Length > 0) || (strPassword.Length > 0)) pat = ProxyAuthType.Manual; else pat = ProxyAuthType.Default; } if(pat == ProxyAuthType.None) m_rbAuthNone.Checked = true; else if(pat == ProxyAuthType.Manual) m_rbAuthManual.Checked = true; else m_rbAuthDefault.Checked = true; m_tbUser.Text = strUserName; m_tbPassword.Text = strPassword; EnableControlsEx(); } private void OnFormClosed(object sender, FormClosedEventArgs e) { GlobalWindowManager.RemoveWindow(this); } private void OnBtnOK(object sender, EventArgs e) { ProxyServerType pst = ProxyServerType.System; if(m_rbNoProxy.Checked) pst = ProxyServerType.None; else if(m_rbManualProxy.Checked) pst = ProxyServerType.Manual; ProxyAuthType pat = ProxyAuthType.Default; if(m_rbAuthNone.Checked) pat = ProxyAuthType.None; else if(m_rbAuthManual.Checked) pat = ProxyAuthType.Manual; AceIntegration ace = Program.Config.Integration; ace.ProxyType = pst; ace.ProxyAddress = m_tbAddress.Text; ace.ProxyPort = m_tbPort.Text; ace.ProxyAuthType = pat; ace.ProxyUserName = m_tbUser.Text; ace.ProxyPassword = m_tbPassword.Text; Program.Config.Apply(AceApplyFlags.Proxy); } private void EnableControlsEx() { Control[] vAddr = new Control[] { m_lblAddress, m_tbAddress, m_lblPort, m_tbPort }; Control[] vAuthType = new Control[] { m_rbAuthNone, m_rbAuthDefault, m_rbAuthManual }; Control[] vAuthData = new Control[] { m_lblUser, m_tbUser, m_lblPassword, m_tbPassword }; List lAuthAll = new List(vAuthType); lAuthAll.AddRange(vAuthData); bool bAddr = m_rbManualProxy.Checked; foreach(Control cAddr in vAddr) { cAddr.Enabled = bAddr; } if(m_rbNoProxy.Checked) { foreach(Control c in lAuthAll) { c.Enabled = false; } m_grpAuth.Enabled = false; } else { m_grpAuth.Enabled = true; if(m_rbAuthManual.Checked) { foreach(Control c in lAuthAll) { c.Enabled = true; } } else { foreach(Control cC in vAuthType) { cC.Enabled = true; } foreach(Control cD in vAuthData) { cD.Enabled = false; } } } // if(!m_rbManualProxy.Checked) m_btnOK.Enabled = true; // else m_btnOK.Enabled = (m_tbAddress.Text.Length > 0); } private void OnNoProxyCheckedChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnSystemProxyCheckedChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnManualProxyCheckedChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnAddressTextChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnAuthNoneCheckedChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnAuthDefaultCheckedChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnAuthManualCheckedChanged(object sender, EventArgs e) { EnableControlsEx(); } } } KeePass/Forms/TextEncodingForm.cs0000664000000000000000000000645612641461342015763 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.UI; using KeePass.Util; using KeePass.Resources; using KeePassLib.Utility; namespace KeePass.Forms { public partial class TextEncodingForm : Form { private string m_strContext = string.Empty; private byte[] m_pbData = null; private bool m_bInitializing = false; private Encoding m_encSel = null; private uint m_uStartOffset = 0; public Encoding SelectedEncoding { get { return m_encSel; } } public void InitEx(string strContext, byte[] pbData) { m_strContext = (strContext ?? string.Empty); m_pbData = pbData; } public TextEncodingForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { GlobalWindowManager.AddWindow(this); m_bInitializing = true; FontUtil.AssignDefaultBold(m_lblContext); m_lblContext.Text = m_strContext; m_cmbEnc.Items.Add(KPRes.BinaryNoConv); foreach(StrEncodingInfo sei in StrUtil.Encodings) m_cmbEnc.Items.Add(sei.Name); StrEncodingInfo seiGuess = BinaryDataClassifier.GetStringEncoding( m_pbData, out m_uStartOffset); int iSel = 0; if(seiGuess != null) iSel = Math.Max(m_cmbEnc.FindStringExact(seiGuess.Name), 0); m_cmbEnc.SelectedIndex = iSel; m_bInitializing = false; UpdateTextPreview(); } private void OnFormClosed(object sender, FormClosedEventArgs e) { GlobalWindowManager.RemoveWindow(this); } private Encoding GetSelEnc() { StrEncodingInfo sei = StrUtil.GetEncoding(m_cmbEnc.Text); return ((sei != null) ? sei.Encoding : null); } private void UpdateTextPreview() { if(m_bInitializing) return; m_rtbPreview.Clear(); // Clear formatting try { Encoding enc = GetSelEnc(); if(enc == null) throw new InvalidOperationException(); m_rtbPreview.Text = enc.GetString(m_pbData, (int)m_uStartOffset, m_pbData.Length - (int)m_uStartOffset); } catch(Exception) { m_rtbPreview.Text = string.Empty; } } private void OnEncSelectedIndexChanged(object sender, EventArgs e) { UpdateTextPreview(); } private void OnBtnOK(object sender, EventArgs e) { m_encSel = GetSelEnc(); } private void OnBtnCancel(object sender, EventArgs e) { } } } KeePass/Forms/DuplicationForm.resx0000664000000000000000000001375312501527406016214 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 If this option is enabled, the copies will reference the user names and passwords of the original entries. When a user name or password is changed in an original entry, the copy will automatically use the new data, too. KeePass/Forms/LanguageForm.Designer.cs0000664000000000000000000001117712365174524016654 0ustar rootrootnamespace KeePass.Forms { partial class LanguageForm { /// /// Erforderliche Designervariable. /// private System.ComponentModel.IContainer components = null; /// /// Verwendete Ressourcen bereinigen. /// /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Vom Windows Form-Designer generierter Code /// /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// private void InitializeComponent() { this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_lvLanguages = new KeePass.UI.CustomListViewEx(); this.m_btnClose = new System.Windows.Forms.Button(); this.m_btnMore = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); this.SuspendLayout(); // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(532, 60); this.m_bannerImage.TabIndex = 0; this.m_bannerImage.TabStop = false; // // m_lvLanguages // this.m_lvLanguages.Activation = System.Windows.Forms.ItemActivation.OneClick; this.m_lvLanguages.FullRowSelect = true; this.m_lvLanguages.GridLines = true; this.m_lvLanguages.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.m_lvLanguages.HideSelection = false; this.m_lvLanguages.Location = new System.Drawing.Point(13, 67); this.m_lvLanguages.MultiSelect = false; this.m_lvLanguages.Name = "m_lvLanguages"; this.m_lvLanguages.ShowItemToolTips = true; this.m_lvLanguages.Size = new System.Drawing.Size(507, 248); this.m_lvLanguages.TabIndex = 0; this.m_lvLanguages.UseCompatibleStateImageBehavior = false; this.m_lvLanguages.View = System.Windows.Forms.View.Details; this.m_lvLanguages.ItemActivate += new System.EventHandler(this.OnLanguagesItemActivate); // // m_btnClose // this.m_btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnClose.Location = new System.Drawing.Point(445, 321); this.m_btnClose.Name = "m_btnClose"; this.m_btnClose.Size = new System.Drawing.Size(75, 23); this.m_btnClose.TabIndex = 1; this.m_btnClose.Text = "&Close"; this.m_btnClose.UseVisualStyleBackColor = true; this.m_btnClose.Click += new System.EventHandler(this.OnBtnClose); // // m_btnMore // this.m_btnMore.Image = global::KeePass.Properties.Resources.B16x16_Keyboard_Layout; this.m_btnMore.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.m_btnMore.Location = new System.Drawing.Point(13, 321); this.m_btnMore.Name = "m_btnMore"; this.m_btnMore.Size = new System.Drawing.Size(158, 23); this.m_btnMore.TabIndex = 2; this.m_btnMore.Text = "Get more languages..."; this.m_btnMore.UseVisualStyleBackColor = true; this.m_btnMore.Click += new System.EventHandler(this.OnBtnGetMore); // // LanguageForm // this.AcceptButton = this.m_btnClose; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnClose; this.ClientSize = new System.Drawing.Size(532, 356); this.Controls.Add(this.m_btnMore); this.Controls.Add(this.m_btnClose); this.Controls.Add(this.m_lvLanguages); this.Controls.Add(this.m_bannerImage); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "LanguageForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.PictureBox m_bannerImage; private KeePass.UI.CustomListViewEx m_lvLanguages; private System.Windows.Forms.Button m_btnClose; private System.Windows.Forms.Button m_btnMore; } }KeePass/Forms/SingleLineEditForm.cs0000664000000000000000000000701412641461342016216 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using KeePass.UI; namespace KeePass.Forms { public partial class SingleLineEditForm : Form { private string m_strTitle = string.Empty; private string m_strDesc = string.Empty; private string m_strLongDesc = string.Empty; private Image m_imgIcon = null; private string m_strDefaultText = string.Empty; private string[] m_vSelectable = null; private string m_strResultString = string.Empty; public string ResultString { get { return m_strResultString; } } public SingleLineEditForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } public void InitEx(string strTitle, string strDesc, string strLongDesc, Image imgIcon, string strDefaultText, string[] vSelectable) { m_strTitle = strTitle; m_strDesc = strDesc; m_strLongDesc = strLongDesc; m_imgIcon = imgIcon; m_strDefaultText = strDefaultText; m_vSelectable = vSelectable; } private void OnFormLoad(object sender, EventArgs e) { if(m_strTitle == null) throw new InvalidOperationException(); if(m_strDesc == null) throw new InvalidOperationException(); if(m_strLongDesc == null) throw new InvalidOperationException(); if(m_imgIcon == null) throw new InvalidOperationException(); if(m_strDefaultText == null) throw new InvalidOperationException(); GlobalWindowManager.AddWindow(this); BannerFactory.CreateBannerEx(this, m_bannerImage, m_imgIcon, m_strTitle, m_strDesc); this.Icon = Properties.Resources.KeePass; this.Text = m_strTitle; m_lblLongDesc.Text = m_strLongDesc; Control cFocus = null; if((m_vSelectable == null) || (m_vSelectable.Length == 0)) { m_cmbEdit.Enabled = false; m_cmbEdit.Visible = false; cFocus = m_tbEdit; } else // With selectable values { m_tbEdit.Enabled = false; m_tbEdit.Visible = false; cFocus = m_cmbEdit; foreach(string strPreDef in m_vSelectable) m_cmbEdit.Items.Add(strPreDef); UIUtil.EnableAutoCompletion(m_cmbEdit, false); } cFocus.Text = m_strDefaultText; this.Invalidate(); UIUtil.SetFocus(cFocus, this); } private void OnBtnOK(object sender, EventArgs e) { if((m_vSelectable == null) || (m_vSelectable.Length == 0)) m_strResultString = m_tbEdit.Text; else m_strResultString = m_cmbEdit.Text; } private void OnBtnCancel(object sender, EventArgs e) { } private void OnFormClosed(object sender, FormClosedEventArgs e) { GlobalWindowManager.RemoveWindow(this); } } } KeePass/Forms/UrlOverridesForm.cs0000664000000000000000000001552312641461342016010 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.App.Configuration; using KeePass.Resources; using KeePass.UI; namespace KeePass.Forms { public partial class UrlOverridesForm : Form { private AceUrlSchemeOverrides m_aceOvr = null; private AceUrlSchemeOverrides m_aceTmp = null; private bool m_bEnfSch = false; private bool m_bEnfAll = false; private string m_strUrlOverrideAll = string.Empty; public string UrlOverrideAll { get { return m_strUrlOverrideAll; } } public void InitEx(AceUrlSchemeOverrides aceOvr, string strOverrideAll) { m_aceOvr = aceOvr; Debug.Assert(strOverrideAll != null); m_strUrlOverrideAll = (strOverrideAll ?? string.Empty); } public UrlOverridesForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { if(m_aceOvr == null) throw new InvalidOperationException(); m_aceTmp = m_aceOvr.CloneDeep(); GlobalWindowManager.AddWindow(this); this.Icon = Properties.Resources.KeePass; this.Text = KPRes.UrlOverrides; UIUtil.SetExplorerTheme(m_lvOverrides, false); int nWidth = m_lvOverrides.ClientSize.Width - UIUtil.GetVScrollBarWidth(); m_lvOverrides.Columns.Add(KPRes.Scheme, nWidth / 4); m_lvOverrides.Columns.Add(KPRes.UrlOverride, (nWidth * 3) / 4); m_bEnfSch = AppConfigEx.IsOptionEnforced(Program.Config.Integration, "UrlSchemeOverrides"); m_bEnfAll = AppConfigEx.IsOptionEnforced(Program.Config.Integration, "UrlOverride"); UpdateOverridesList(false, false); m_cbOverrideAll.Checked = (m_strUrlOverrideAll.Length > 0); m_tbOverrideAll.Text = m_strUrlOverrideAll; EnableControlsEx(); } private void OnFormClosed(object sender, FormClosedEventArgs e) { GlobalWindowManager.RemoveWindow(this); } private void UpdateOverridesList(bool bRestoreView, bool bUpdateState) { UIScrollInfo s = (bRestoreView ? UIUtil.GetScrollInfo( m_lvOverrides, true) : null); m_lvOverrides.BeginUpdate(); m_lvOverrides.Items.Clear(); m_lvOverrides.Groups.Clear(); for(int i = 0; i < 2; ++i) { List l = ((i == 0) ? m_aceTmp.BuiltInOverrides : m_aceTmp.CustomOverrides); ListViewGroup lvg = new ListViewGroup((i == 0) ? KPRes.OverridesBuiltIn : KPRes.OverridesCustom); m_lvOverrides.Groups.Add(lvg); foreach(AceUrlSchemeOverride ovr in l) { ListViewItem lvi = new ListViewItem(ovr.Scheme); lvi.SubItems.Add(ovr.UrlOverride); lvi.Tag = ovr; // Set before setting the Checked property lvi.Checked = ovr.Enabled; m_lvOverrides.Items.Add(lvi); lvg.Items.Add(lvi); } } if(bRestoreView) UIUtil.Scroll(m_lvOverrides, s, false); m_lvOverrides.EndUpdate(); if(bUpdateState) EnableControlsEx(); } private void OnOverridesItemChecked(object sender, ItemCheckedEventArgs e) { AceUrlSchemeOverride ovr = (e.Item.Tag as AceUrlSchemeOverride); if(ovr == null) { Debug.Assert(false); return; } ovr.Enabled = e.Item.Checked; } private void EnableControlsEx() { bool bAll = m_cbOverrideAll.Checked; m_cbOverrideAll.Enabled = !m_bEnfAll; m_tbOverrideAll.Enabled = (!m_bEnfAll && bAll); ListView.SelectedListViewItemCollection lvsc = m_lvOverrides.SelectedItems; bool bOne = (lvsc.Count == 1); bool bAtLeastOne = (lvsc.Count >= 1); bool bBuiltIn = false; foreach(ListViewItem lvi in lvsc) { AceUrlSchemeOverride ovr = (lvi.Tag as AceUrlSchemeOverride); if(ovr == null) { Debug.Assert(false); continue; } if(ovr.IsBuiltIn) { bBuiltIn = true; break; } } bool bSch = !m_bEnfSch; m_lvOverrides.Enabled = bSch; m_btnAdd.Enabled = bSch; m_btnEdit.Enabled = (bSch && bOne && !bBuiltIn); m_btnDelete.Enabled = (bSch && bAtLeastOne && !bBuiltIn); } private void OnOverridesSelectedIndexChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnBtnAdd(object sender, EventArgs e) { AceUrlSchemeOverride ovr = new AceUrlSchemeOverride(true, string.Empty, string.Empty); UrlOverrideForm dlg = new UrlOverrideForm(); dlg.InitEx(ovr); if(UIUtil.ShowDialogAndDestroy(dlg) == DialogResult.OK) { m_aceTmp.CustomOverrides.Add(ovr); UpdateOverridesList(true, true); // m_lvOverrides.EnsureVisible(m_lvOverrides.Items.Count - 1); } } private void OnBtnEdit(object sender, EventArgs e) { ListView.SelectedListViewItemCollection lvsic = m_lvOverrides.SelectedItems; if((lvsic == null) || (lvsic.Count != 1)) return; AceUrlSchemeOverride ovr = (lvsic[0].Tag as AceUrlSchemeOverride); if(ovr == null) { Debug.Assert(false); return; } if(ovr.IsBuiltIn) { Debug.Assert(false); return; } UrlOverrideForm dlg = new UrlOverrideForm(); dlg.InitEx(ovr); if(UIUtil.ShowDialogAndDestroy(dlg) == DialogResult.OK) UpdateOverridesList(true, true); } private void OnBtnDelete(object sender, EventArgs e) { ListView.SelectedListViewItemCollection lvsic = m_lvOverrides.SelectedItems; if((lvsic == null) || (lvsic.Count == 0)) return; foreach(ListViewItem lvi in lvsic) { AceUrlSchemeOverride ovr = (lvi.Tag as AceUrlSchemeOverride); if(ovr == null) { Debug.Assert(false); continue; } if(ovr.IsBuiltIn) { Debug.Assert(false); continue; } try { m_aceTmp.CustomOverrides.Remove(ovr); } catch(Exception) { Debug.Assert(false); } } UpdateOverridesList(true, true); } private void OnBtnOK(object sender, EventArgs e) { m_aceTmp.CopyTo(m_aceOvr); if(m_cbOverrideAll.Checked) m_strUrlOverrideAll = m_tbOverrideAll.Text; else m_strUrlOverrideAll = string.Empty; } private void OnOverrideAllCheckedChanged(object sender, EventArgs e) { EnableControlsEx(); } } } KeePass/Forms/FieldRefForm.resx0000664000000000000000000001326612501531036015412 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/ProxyForm.Designer.cs0000664000000000000000000002722012507250626016242 0ustar rootrootnamespace KeePass.Forms { partial class ProxyForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_grpServer = new System.Windows.Forms.GroupBox(); this.m_tbPort = new System.Windows.Forms.TextBox(); this.m_lblPort = new System.Windows.Forms.Label(); this.m_tbAddress = new System.Windows.Forms.TextBox(); this.m_lblAddress = new System.Windows.Forms.Label(); this.m_rbManualProxy = new System.Windows.Forms.RadioButton(); this.m_rbSystemProxy = new System.Windows.Forms.RadioButton(); this.m_rbNoProxy = new System.Windows.Forms.RadioButton(); this.m_grpAuth = new System.Windows.Forms.GroupBox(); this.m_rbAuthManual = new System.Windows.Forms.RadioButton(); this.m_rbAuthDefault = new System.Windows.Forms.RadioButton(); this.m_rbAuthNone = new System.Windows.Forms.RadioButton(); this.m_tbPassword = new System.Windows.Forms.TextBox(); this.m_lblPassword = new System.Windows.Forms.Label(); this.m_tbUser = new System.Windows.Forms.TextBox(); this.m_lblUser = new System.Windows.Forms.Label(); this.m_grpServer.SuspendLayout(); this.m_grpAuth.SuspendLayout(); this.SuspendLayout(); // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(183, 297); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 0; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(264, 297); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 1; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; // // m_grpServer // this.m_grpServer.Controls.Add(this.m_tbPort); this.m_grpServer.Controls.Add(this.m_lblPort); this.m_grpServer.Controls.Add(this.m_tbAddress); this.m_grpServer.Controls.Add(this.m_lblAddress); this.m_grpServer.Controls.Add(this.m_rbManualProxy); this.m_grpServer.Controls.Add(this.m_rbSystemProxy); this.m_grpServer.Controls.Add(this.m_rbNoProxy); this.m_grpServer.Location = new System.Drawing.Point(12, 12); this.m_grpServer.Name = "m_grpServer"; this.m_grpServer.Size = new System.Drawing.Size(327, 120); this.m_grpServer.TabIndex = 2; this.m_grpServer.TabStop = false; this.m_grpServer.Text = "Server"; // // m_tbPort // this.m_tbPort.Location = new System.Drawing.Point(266, 88); this.m_tbPort.Name = "m_tbPort"; this.m_tbPort.Size = new System.Drawing.Size(50, 20); this.m_tbPort.TabIndex = 6; // // m_lblPort // this.m_lblPort.AutoSize = true; this.m_lblPort.Location = new System.Drawing.Point(231, 91); this.m_lblPort.Name = "m_lblPort"; this.m_lblPort.Size = new System.Drawing.Size(29, 13); this.m_lblPort.TabIndex = 5; this.m_lblPort.Text = "Port:"; // // m_tbAddress // this.m_tbAddress.Location = new System.Drawing.Point(79, 88); this.m_tbAddress.Name = "m_tbAddress"; this.m_tbAddress.Size = new System.Drawing.Size(145, 20); this.m_tbAddress.TabIndex = 4; this.m_tbAddress.TextChanged += new System.EventHandler(this.OnAddressTextChanged); // // m_lblAddress // this.m_lblAddress.AutoSize = true; this.m_lblAddress.Location = new System.Drawing.Point(25, 91); this.m_lblAddress.Name = "m_lblAddress"; this.m_lblAddress.Size = new System.Drawing.Size(48, 13); this.m_lblAddress.TabIndex = 3; this.m_lblAddress.Text = "Address:"; // // m_rbManualProxy // this.m_rbManualProxy.AutoSize = true; this.m_rbManualProxy.Location = new System.Drawing.Point(9, 65); this.m_rbManualProxy.Name = "m_rbManualProxy"; this.m_rbManualProxy.Size = new System.Drawing.Size(155, 17); this.m_rbManualProxy.TabIndex = 2; this.m_rbManualProxy.TabStop = true; this.m_rbManualProxy.Text = "&Manual proxy configuration:"; this.m_rbManualProxy.UseVisualStyleBackColor = true; this.m_rbManualProxy.CheckedChanged += new System.EventHandler(this.OnManualProxyCheckedChanged); // // m_rbSystemProxy // this.m_rbSystemProxy.AutoSize = true; this.m_rbSystemProxy.Location = new System.Drawing.Point(9, 42); this.m_rbSystemProxy.Name = "m_rbSystemProxy"; this.m_rbSystemProxy.Size = new System.Drawing.Size(146, 17); this.m_rbSystemProxy.TabIndex = 1; this.m_rbSystemProxy.TabStop = true; this.m_rbSystemProxy.Text = "Use &system proxy settings"; this.m_rbSystemProxy.UseVisualStyleBackColor = true; this.m_rbSystemProxy.CheckedChanged += new System.EventHandler(this.OnSystemProxyCheckedChanged); // // m_rbNoProxy // this.m_rbNoProxy.AutoSize = true; this.m_rbNoProxy.Location = new System.Drawing.Point(9, 19); this.m_rbNoProxy.Name = "m_rbNoProxy"; this.m_rbNoProxy.Size = new System.Drawing.Size(67, 17); this.m_rbNoProxy.TabIndex = 0; this.m_rbNoProxy.TabStop = true; this.m_rbNoProxy.Text = "&No proxy"; this.m_rbNoProxy.UseVisualStyleBackColor = true; this.m_rbNoProxy.CheckedChanged += new System.EventHandler(this.OnNoProxyCheckedChanged); // // m_grpAuth // this.m_grpAuth.Controls.Add(this.m_rbAuthManual); this.m_grpAuth.Controls.Add(this.m_rbAuthDefault); this.m_grpAuth.Controls.Add(this.m_rbAuthNone); this.m_grpAuth.Controls.Add(this.m_tbPassword); this.m_grpAuth.Controls.Add(this.m_lblPassword); this.m_grpAuth.Controls.Add(this.m_tbUser); this.m_grpAuth.Controls.Add(this.m_lblUser); this.m_grpAuth.Location = new System.Drawing.Point(12, 138); this.m_grpAuth.Name = "m_grpAuth"; this.m_grpAuth.Size = new System.Drawing.Size(327, 146); this.m_grpAuth.TabIndex = 3; this.m_grpAuth.TabStop = false; this.m_grpAuth.Text = "Authentication"; // // m_rbAuthManual // this.m_rbAuthManual.AutoSize = true; this.m_rbAuthManual.Location = new System.Drawing.Point(9, 65); this.m_rbAuthManual.Name = "m_rbAuthManual"; this.m_rbAuthManual.Size = new System.Drawing.Size(163, 17); this.m_rbAuthManual.TabIndex = 2; this.m_rbAuthManual.TabStop = true; this.m_rbAuthManual.Text = "Use the following &credentials:"; this.m_rbAuthManual.UseVisualStyleBackColor = true; this.m_rbAuthManual.CheckedChanged += new System.EventHandler(this.OnAuthManualCheckedChanged); // // m_rbAuthDefault // this.m_rbAuthDefault.AutoSize = true; this.m_rbAuthDefault.Location = new System.Drawing.Point(9, 42); this.m_rbAuthDefault.Name = "m_rbAuthDefault"; this.m_rbAuthDefault.Size = new System.Drawing.Size(113, 17); this.m_rbAuthDefault.TabIndex = 1; this.m_rbAuthDefault.TabStop = true; this.m_rbAuthDefault.Text = "&Default credentials"; this.m_rbAuthDefault.UseVisualStyleBackColor = true; this.m_rbAuthDefault.CheckedChanged += new System.EventHandler(this.OnAuthDefaultCheckedChanged); // // m_rbAuthNone // this.m_rbAuthNone.AutoSize = true; this.m_rbAuthNone.Location = new System.Drawing.Point(9, 19); this.m_rbAuthNone.Name = "m_rbAuthNone"; this.m_rbAuthNone.Size = new System.Drawing.Size(93, 17); this.m_rbAuthNone.TabIndex = 0; this.m_rbAuthNone.TabStop = true; this.m_rbAuthNone.Text = "N&o credentials"; this.m_rbAuthNone.UseVisualStyleBackColor = true; this.m_rbAuthNone.CheckedChanged += new System.EventHandler(this.OnAuthNoneCheckedChanged); // // m_tbPassword // this.m_tbPassword.Location = new System.Drawing.Point(92, 114); this.m_tbPassword.Name = "m_tbPassword"; this.m_tbPassword.Size = new System.Drawing.Size(224, 20); this.m_tbPassword.TabIndex = 6; this.m_tbPassword.UseSystemPasswordChar = true; // // m_lblPassword // this.m_lblPassword.AutoSize = true; this.m_lblPassword.Location = new System.Drawing.Point(25, 117); this.m_lblPassword.Name = "m_lblPassword"; this.m_lblPassword.Size = new System.Drawing.Size(56, 13); this.m_lblPassword.TabIndex = 5; this.m_lblPassword.Text = "Password:"; // // m_tbUser // this.m_tbUser.Location = new System.Drawing.Point(92, 88); this.m_tbUser.Name = "m_tbUser"; this.m_tbUser.Size = new System.Drawing.Size(224, 20); this.m_tbUser.TabIndex = 4; // // m_lblUser // this.m_lblUser.AutoSize = true; this.m_lblUser.Location = new System.Drawing.Point(25, 91); this.m_lblUser.Name = "m_lblUser"; this.m_lblUser.Size = new System.Drawing.Size(61, 13); this.m_lblUser.TabIndex = 3; this.m_lblUser.Text = "User name:"; // // ProxyForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(351, 332); this.Controls.Add(this.m_grpAuth); this.Controls.Add(this.m_grpServer); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ProxyForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Proxy Settings"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); this.m_grpServer.ResumeLayout(false); this.m_grpServer.PerformLayout(); this.m_grpAuth.ResumeLayout(false); this.m_grpAuth.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.GroupBox m_grpServer; private System.Windows.Forms.RadioButton m_rbSystemProxy; private System.Windows.Forms.RadioButton m_rbNoProxy; private System.Windows.Forms.GroupBox m_grpAuth; private System.Windows.Forms.TextBox m_tbPassword; private System.Windows.Forms.Label m_lblPassword; private System.Windows.Forms.TextBox m_tbUser; private System.Windows.Forms.Label m_lblUser; private System.Windows.Forms.TextBox m_tbPort; private System.Windows.Forms.Label m_lblPort; private System.Windows.Forms.TextBox m_tbAddress; private System.Windows.Forms.Label m_lblAddress; private System.Windows.Forms.RadioButton m_rbManualProxy; private System.Windows.Forms.RadioButton m_rbAuthDefault; private System.Windows.Forms.RadioButton m_rbAuthNone; private System.Windows.Forms.RadioButton m_rbAuthManual; } }KeePass/Forms/AutoTypeCtxForm.cs0000664000000000000000000002061112666517676015631 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.App; using KeePass.App.Configuration; using KeePass.Resources; using KeePass.UI; using KeePass.Util; using KeePassLib; namespace KeePass.Forms { public partial class AutoTypeCtxForm : Form { private List m_lCtxs = null; private ImageList m_ilIcons = null; private string m_strInitialFormRect = string.Empty; private string m_strInitialColWidths = string.Empty; private int m_nBannerWidth = -1; private bool m_bCanShowPasswords = true; private CustomContextMenuStripEx m_ctxTools = null; private ToolStripMenuItem m_tsmiColumns = null; private AutoTypeCtx m_atcSel = null; public AutoTypeCtx SelectedCtx { get { return m_atcSel; } } public void InitEx(List lCtxs, ImageList ilIcons) { m_lCtxs = lCtxs; m_ilIcons = UIUtil.CloneImageList(ilIcons, true); } public AutoTypeCtxForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { Size sz = this.ClientSize; this.MinimumSize = new Size((int)(0.949f * (float)sz.Width), (int)(0.824f * (float)sz.Height)); GlobalWindowManager.AddWindow(this); m_lblText.Text = KPRes.AutoTypeEntrySelectionDescLong2; this.Text = KPRes.AutoTypeEntrySelection; this.Icon = Properties.Resources.KeePass; string strRect = Program.Config.UI.AutoTypeCtxRect; if(strRect.Length > 0) UIUtil.SetWindowScreenRect(this, strRect); m_strInitialFormRect = UIUtil.GetWindowScreenRect(this); UIUtil.SetExplorerTheme(m_lvItems, true); if(m_ilIcons != null) m_lvItems.SmallImageList = m_ilIcons; else { Debug.Assert(false); m_ilIcons = new ImageList(); } m_bCanShowPasswords = AppPolicy.Current.UnhidePasswords; RecreateEntryList(); string strColWidths = Program.Config.UI.AutoTypeCtxColumnWidths; if(strColWidths.Length > 0) UIUtil.SetColumnWidths(m_lvItems, strColWidths); m_strInitialColWidths = UIUtil.GetColumnWidths(m_lvItems); ProcessResize(); this.BringToFront(); this.Activate(); UIUtil.SetFocus(m_lvItems, this); } private void RecreateEntryList() { long lFlags = Program.Config.UI.AutoTypeCtxFlags; if(!m_bCanShowPasswords) lFlags &= ~(long)AceAutoTypeCtxFlags.ColPassword; UIUtil.CreateEntryList(m_lvItems, m_lCtxs, (AceAutoTypeCtxFlags)lFlags, m_ilIcons); } private void OnFormClosed(object sender, FormClosedEventArgs e) { CleanUpEx(); GlobalWindowManager.RemoveWindow(this); } private void CleanUpEx() { string strColWidths = UIUtil.GetColumnWidths(m_lvItems); if(strColWidths != m_strInitialColWidths) Program.Config.UI.AutoTypeCtxColumnWidths = strColWidths; string strRect = UIUtil.GetWindowScreenRect(this); if(strRect != m_strInitialFormRect) Program.Config.UI.AutoTypeCtxRect = strRect; DestroyToolsContextMenu(); if(m_ilIcons != null) { m_lvItems.SmallImageList = null; // Detach event handlers m_ilIcons.Dispose(); m_ilIcons = null; } } private void ProcessResize() { if(m_lCtxs == null) return; // TrlUtil or design mode string strSub = KPRes.AutoTypeEntrySelectionDescShort; int n = m_lCtxs.Count; if(n == 1) strSub = KPRes.SearchEntriesFound1 + "."; else if(n <= 0) { strSub = KPRes.SearchEntriesFound + "."; strSub = strSub.Replace(@"{PARAM}", "0"); } BannerFactory.UpdateBanner(this, m_bannerImage, Properties.Resources.B48x48_KGPG_Key2, KPRes.AutoTypeEntrySelection, strSub, ref m_nBannerWidth); } private bool GetSelectedEntry() { ListView.SelectedListViewItemCollection slvic = m_lvItems.SelectedItems; if(slvic.Count == 1) { m_atcSel = (slvic[0].Tag as AutoTypeCtx); return (m_atcSel != null); } return false; } private void ProcessItemSelection() { if(this.DialogResult == DialogResult.OK) return; // Already closing if(GetSelectedEntry()) this.DialogResult = DialogResult.OK; } private void OnListItemActivate(object sender, EventArgs e) { ProcessItemSelection(); } private void OnListClick(object sender, EventArgs e) { ProcessItemSelection(); } private void OnFormResize(object sender, EventArgs e) { ProcessResize(); } private void DestroyToolsContextMenu() { if(m_ctxTools == null) return; foreach(ToolStripItem tsi in m_tsmiColumns.DropDownItems) tsi.Click -= this.OnToggleColumn; m_tsmiColumns = null; m_ctxTools.Dispose(); m_ctxTools = null; } private void RecreateToolsContextMenu() { DestroyToolsContextMenu(); m_ctxTools = new CustomContextMenuStripEx(); m_tsmiColumns = new ToolStripMenuItem(KPRes.Columns); m_ctxTools.Items.Add(m_tsmiColumns); long lFlags = Program.Config.UI.AutoTypeCtxFlags; ToolStripMenuItem tsmi = new ToolStripMenuItem(KPRes.Title); UIUtil.SetChecked(tsmi, true); tsmi.Tag = AceAutoTypeCtxFlags.ColTitle; tsmi.Click += this.OnToggleColumn; tsmi.Enabled = false; m_tsmiColumns.DropDownItems.Add(tsmi); tsmi = new ToolStripMenuItem(KPRes.UserName); UIUtil.SetChecked(tsmi, ((lFlags & (long)AceAutoTypeCtxFlags.ColUserName) != 0)); tsmi.Tag = AceAutoTypeCtxFlags.ColUserName; tsmi.Click += this.OnToggleColumn; m_tsmiColumns.DropDownItems.Add(tsmi); tsmi = new ToolStripMenuItem(KPRes.Password); UIUtil.SetChecked(tsmi, (((lFlags & (long)AceAutoTypeCtxFlags.ColPassword) != 0) && m_bCanShowPasswords)); tsmi.Tag = AceAutoTypeCtxFlags.ColPassword; tsmi.Click += this.OnToggleColumn; if(!m_bCanShowPasswords) tsmi.Enabled = false; m_tsmiColumns.DropDownItems.Add(tsmi); tsmi = new ToolStripMenuItem(KPRes.Url); UIUtil.SetChecked(tsmi, ((lFlags & (long)AceAutoTypeCtxFlags.ColUrl) != 0)); tsmi.Tag = AceAutoTypeCtxFlags.ColUrl; tsmi.Click += this.OnToggleColumn; m_tsmiColumns.DropDownItems.Add(tsmi); tsmi = new ToolStripMenuItem(KPRes.Notes); UIUtil.SetChecked(tsmi, ((lFlags & (long)AceAutoTypeCtxFlags.ColNotes) != 0)); tsmi.Tag = AceAutoTypeCtxFlags.ColNotes; tsmi.Click += this.OnToggleColumn; m_tsmiColumns.DropDownItems.Add(tsmi); tsmi = new ToolStripMenuItem(KPRes.Sequence + " - " + KPRes.Comments); UIUtil.SetChecked(tsmi, ((lFlags & (long)AceAutoTypeCtxFlags.ColSequenceComments) != 0)); tsmi.Tag = AceAutoTypeCtxFlags.ColSequenceComments; tsmi.Click += this.OnToggleColumn; m_tsmiColumns.DropDownItems.Add(tsmi); tsmi = new ToolStripMenuItem(KPRes.Sequence); UIUtil.SetChecked(tsmi, ((lFlags & (long)AceAutoTypeCtxFlags.ColSequence) != 0)); tsmi.Tag = AceAutoTypeCtxFlags.ColSequence; tsmi.Click += this.OnToggleColumn; m_tsmiColumns.DropDownItems.Add(tsmi); } private void OnToggleColumn(object sender, EventArgs e) { ToolStripMenuItem tsmi = (sender as ToolStripMenuItem); if(tsmi == null) { Debug.Assert(false); return; } AceAutoTypeCtxFlags f = (AceAutoTypeCtxFlags)tsmi.Tag; long lFlags = Program.Config.UI.AutoTypeCtxFlags; lFlags ^= (long)f; lFlags |= (long)AceAutoTypeCtxFlags.ColTitle; // Enforce title Program.Config.UI.AutoTypeCtxFlags = lFlags; RecreateEntryList(); } private void OnBtnTools(object sender, EventArgs e) { RecreateToolsContextMenu(); m_ctxTools.Show(m_btnTools, 0, m_btnTools.Height); } } } KeePass/Forms/KeyPromptForm.resx0000664000000000000000000001357212501531742015670 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 17, 17 KeePass/Forms/XmlReplaceForm.resx0000664000000000000000000001326612501532574015776 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/PwGeneratorForm.resx0000664000000000000000000001357212501532302016164 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 17, 17 KeePass/Forms/EcasConditionForm.cs0000664000000000000000000000640412641461340016101 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.App; using KeePass.UI; using KeePass.Resources; using KeePass.Ecas; namespace KeePass.Forms { public partial class EcasConditionForm : Form { private EcasCondition m_conditionInOut = null; private EcasCondition m_condition = null; // Working copy private bool m_bBlockTypeSelectionHandler = false; public void InitEx(EcasCondition e) { m_conditionInOut = e; m_condition = e.CloneDeep(); } public EcasConditionForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { GlobalWindowManager.AddWindow(this); this.Text = KPRes.Condition; this.Icon = Properties.Resources.KeePass; m_lblParamHint.Text = KPRes.ParamDescHelp; foreach(EcasConditionProvider cp in Program.EcasPool.ConditionProviders) { foreach(EcasConditionType t in cp.Conditions) m_cmbConditions.Items.Add(t.Name); } UpdateDataEx(m_condition, false, EcasTypeDxMode.Selection); m_cbNegate.Checked = m_condition.Negate; } private void OnFormClosed(object sender, FormClosedEventArgs e) { GlobalWindowManager.RemoveWindow(this); } private bool UpdateDataEx(EcasCondition c, bool bGuiToInternal, EcasTypeDxMode dxType) { m_bBlockTypeSelectionHandler = true; bool bResult = EcasUtil.UpdateDialog(EcasObjectType.Condition, m_cmbConditions, m_dgvParams, c, bGuiToInternal, dxType); m_bBlockTypeSelectionHandler = false; return bResult; } private void OnBtnOK(object sender, EventArgs e) { if(!UpdateDataEx(m_conditionInOut, true, EcasTypeDxMode.Selection)) { this.DialogResult = DialogResult.None; return; } m_conditionInOut.Negate = m_cbNegate.Checked; } private void OnBtnCancel(object sender, EventArgs e) { } private void OnConditionsSelectedIndexChanged(object sender, EventArgs e) { if(m_bBlockTypeSelectionHandler) return; UpdateDataEx(m_condition, true, EcasTypeDxMode.ParamsTag); UpdateDataEx(m_condition, false, EcasTypeDxMode.None); } private void OnBtnHelp(object sender, EventArgs e) { AppHelp.ShowHelp(AppDefs.HelpTopics.Triggers, AppDefs.HelpTopics.TriggersConditions); } } } KeePass/Forms/EcasEventForm.Designer.cs0000664000000000000000000001414312501527726017000 0ustar rootrootnamespace KeePass.Forms { partial class EcasEventForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.m_lblEvent = new System.Windows.Forms.Label(); this.m_cmbEvents = new System.Windows.Forms.ComboBox(); this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_dgvParams = new System.Windows.Forms.DataGridView(); this.m_lblParamHint = new System.Windows.Forms.Label(); this.m_lblSep = new System.Windows.Forms.Label(); this.m_btnHelp = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.m_dgvParams)).BeginInit(); this.SuspendLayout(); // // m_lblEvent // this.m_lblEvent.AutoSize = true; this.m_lblEvent.Location = new System.Drawing.Point(9, 14); this.m_lblEvent.Name = "m_lblEvent"; this.m_lblEvent.Size = new System.Drawing.Size(38, 13); this.m_lblEvent.TabIndex = 7; this.m_lblEvent.Text = "Event:"; // // m_cmbEvents // this.m_cmbEvents.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbEvents.FormattingEnabled = true; this.m_cmbEvents.Location = new System.Drawing.Point(12, 30); this.m_cmbEvents.Name = "m_cmbEvents"; this.m_cmbEvents.Size = new System.Drawing.Size(510, 21); this.m_cmbEvents.TabIndex = 0; this.m_cmbEvents.SelectedIndexChanged += new System.EventHandler(this.OnEventsSelectedIndexChanged); // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(366, 289); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 5; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(447, 289); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 6; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_dgvParams // this.m_dgvParams.AllowUserToAddRows = false; this.m_dgvParams.AllowUserToDeleteRows = false; this.m_dgvParams.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.m_dgvParams.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.m_dgvParams.Location = new System.Drawing.Point(12, 57); this.m_dgvParams.Name = "m_dgvParams"; this.m_dgvParams.Size = new System.Drawing.Size(510, 180); this.m_dgvParams.TabIndex = 1; // // m_lblParamHint // this.m_lblParamHint.Location = new System.Drawing.Point(9, 249); this.m_lblParamHint.Name = "m_lblParamHint"; this.m_lblParamHint.Size = new System.Drawing.Size(513, 15); this.m_lblParamHint.TabIndex = 2; this.m_lblParamHint.Text = "<>"; // // m_lblSep // this.m_lblSep.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.m_lblSep.Location = new System.Drawing.Point(0, 280); this.m_lblSep.Name = "m_lblSep"; this.m_lblSep.Size = new System.Drawing.Size(535, 2); this.m_lblSep.TabIndex = 3; // // m_btnHelp // this.m_btnHelp.Location = new System.Drawing.Point(12, 289); this.m_btnHelp.Name = "m_btnHelp"; this.m_btnHelp.Size = new System.Drawing.Size(75, 23); this.m_btnHelp.TabIndex = 4; this.m_btnHelp.Text = "&Help"; this.m_btnHelp.UseVisualStyleBackColor = true; this.m_btnHelp.Click += new System.EventHandler(this.OnBtnHelp); // // EcasEventForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(534, 324); this.Controls.Add(this.m_btnHelp); this.Controls.Add(this.m_lblSep); this.Controls.Add(this.m_lblParamHint); this.Controls.Add(this.m_dgvParams); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.Controls.Add(this.m_lblEvent); this.Controls.Add(this.m_cmbEvents); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "EcasEventForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); ((System.ComponentModel.ISupportInitialize)(this.m_dgvParams)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Label m_lblEvent; private System.Windows.Forms.ComboBox m_cmbEvents; private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.DataGridView m_dgvParams; private System.Windows.Forms.Label m_lblParamHint; private System.Windows.Forms.Label m_lblSep; private System.Windows.Forms.Button m_btnHelp; } }KeePass/Forms/UpdateCheckForm.cs0000664000000000000000000001404312641461342015537 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.Native; using KeePass.Resources; using KeePass.UI; using KeePass.Util; using KeePassLib; using KeePassLib.Utility; namespace KeePass.Forms { public partial class UpdateCheckForm : Form, IGwmWindow { private List m_lInfo = null; private ImageList m_ilIcons = null; public bool CanCloseWithoutDataLoss { get { return true; } } public void InitEx(List lInfo, bool bModal) { m_lInfo = lInfo; if(!bModal) this.ShowInTaskbar = true; } public UpdateCheckForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { if(m_lInfo == null) throw new InvalidOperationException(); GlobalWindowManager.AddWindow(this, this); BannerFactory.CreateBannerEx(this, m_bannerImage, Properties.Resources.B48x48_WWW, KPRes.UpdateCheck, KPRes.UpdateCheckResults); this.Icon = Properties.Resources.KeePass; this.Text = KPRes.UpdateCheck + " - " + PwDefs.ShortProductName; UIUtil.SetExplorerTheme(m_lvInfo, true); m_lvInfo.Columns.Add(KPRes.Component); m_lvInfo.Columns.Add(KPRes.Status); m_lvInfo.Columns.Add(KPRes.Installed); m_lvInfo.Columns.Add(KPRes.Available); List lImages = new List(); lImages.Add(Properties.Resources.B16x16_Help); lImages.Add(Properties.Resources.B16x16_Apply); lImages.Add(Properties.Resources.B16x16_Redo); lImages.Add(Properties.Resources.B16x16_History); lImages.Add(Properties.Resources.B16x16_Error); m_ilIcons = UIUtil.BuildImageListUnscaled(lImages, DpiUtil.ScaleIntX(16), DpiUtil.ScaleIntY(16)); m_lvInfo.SmallImageList = m_ilIcons; string strCat = string.Empty; ListViewGroup lvg = null; const uint uMinComp = 2; foreach(UpdateComponentInfo uc in m_lInfo) { if(uc.Category != strCat) { lvg = new ListViewGroup(uc.Category); m_lvInfo.Groups.Add(lvg); strCat = uc.Category; } ListViewItem lvi = new ListViewItem(uc.Name); string strStatus = KPRes.Unknown + "."; if(uc.Status == UpdateComponentStatus.UpToDate) { strStatus = KPRes.UpToDate + "."; lvi.ImageIndex = 1; } else if(uc.Status == UpdateComponentStatus.NewVerAvailable) { strStatus = KPRes.NewVersionAvailable + "!"; lvi.ImageIndex = 2; } else if(uc.Status == UpdateComponentStatus.PreRelease) { strStatus = KPRes.PreReleaseVersion + "."; lvi.ImageIndex = 3; } else if(uc.Status == UpdateComponentStatus.DownloadFailed) { strStatus = KPRes.UpdateCheckFailedNoDl; lvi.ImageIndex = 4; } else lvi.ImageIndex = 0; lvi.SubItems.Add(strStatus); lvi.SubItems.Add(StrUtil.VersionToString(uc.VerInstalled, uMinComp)); if((uc.Status == UpdateComponentStatus.UpToDate) || (uc.Status == UpdateComponentStatus.NewVerAvailable) || (uc.Status == UpdateComponentStatus.PreRelease)) lvi.SubItems.Add(StrUtil.VersionToString(uc.VerAvailable, uMinComp)); else lvi.SubItems.Add("?"); if(lvg != null) lvi.Group = lvg; m_lvInfo.Items.Add(lvi); } UIUtil.ResizeColumns(m_lvInfo, new int[] { 2, 2, 1, 1 }, true); } private void CleanUpEx() { if(m_ilIcons != null) { m_lvInfo.SmallImageList = null; // Detach event handlers m_ilIcons.Dispose(); m_ilIcons = null; } } private void OnFormClosed(object sender, FormClosedEventArgs e) { CleanUpEx(); GlobalWindowManager.RemoveWindow(this); } private void OnLinkWeb(object sender, LinkLabelLinkClickedEventArgs e) { OpenUrl(PwDefs.HomepageUrl); } private void OnLinkPlugins(object sender, LinkLabelLinkClickedEventArgs e) { OpenUrl(PwDefs.PluginsUrl); } private void OpenUrl(string strUrl) { if(!KeePassLib.Native.NativeLib.IsUnix()) { // Process.Start has a considerable delay when opening URLs // here (different thread, etc.), therefore try the native // ShellExecute first (which doesn't have any delay) try { IntPtr h = NativeMethods.ShellExecute(this.Handle, null, strUrl, null, null, NativeMethods.SW_SHOW); long l = h.ToInt64(); if((l < 0) || (l > 32)) return; else { Debug.Assert(false); } } catch(Exception) { Debug.Assert(false); } } try { Process.Start(strUrl); } catch(Exception) { Debug.Assert(false); } } private void OnInfoItemActivate(object sender, EventArgs e) { ListView.SelectedListViewItemCollection lvsic = m_lvInfo.SelectedItems; if((lvsic == null) || (lvsic.Count != 1)) { Debug.Assert(false); return; } ListViewItem lvi = lvsic[0]; if((lvi == null) || (lvi.Group == null)) { Debug.Assert(false); return; } string strGroup = (lvi.Group.Header ?? string.Empty); if(strGroup == PwDefs.ShortProductName) OpenUrl(PwDefs.HomepageUrl); else if(strGroup == KPRes.Plugins) OpenUrl(PwDefs.PluginsUrl); else { Debug.Assert(false); } } } } KeePass/Forms/UrlOverrideForm.cs0000664000000000000000000000373012641461342015622 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using KeePass.App.Configuration; using KeePass.Resources; using KeePass.UI; namespace KeePass.Forms { public partial class UrlOverrideForm : Form { private AceUrlSchemeOverride m_ovr = null; public void InitEx(AceUrlSchemeOverride ovr) { m_ovr = ovr; } public UrlOverrideForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { if(m_ovr == null) throw new InvalidOperationException(); GlobalWindowManager.AddWindow(this); this.Icon = Properties.Resources.KeePass; this.Text = KPRes.UrlOverride; m_tbScheme.Text = m_ovr.Scheme; m_tbOverride.Text = m_ovr.UrlOverride; } private void OnFormClosed(object sender, FormClosedEventArgs e) { GlobalWindowManager.RemoveWindow(this); } private void OnBtnOK(object sender, EventArgs e) { m_ovr.Scheme = m_tbScheme.Text; m_ovr.UrlOverride = m_tbOverride.Text; } } } KeePass/Forms/LanguageForm.cs0000664000000000000000000001272612667057034015117 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Diagnostics; using KeePass.App; using KeePass.App.Configuration; using KeePass.UI; using KeePass.Resources; using KeePass.Util; using KeePass.Util.XmlSerialization; using KeePassLib; using KeePassLib.Translation; using KeePassLib.Utility; namespace KeePass.Forms { public partial class LanguageForm : Form, IGwmWindow { private ImageList m_ilIcons = null; public bool CanCloseWithoutDataLoss { get { return true; } } public LanguageForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { GlobalWindowManager.AddWindow(this, this); BannerFactory.CreateBannerEx(this, m_bannerImage, Properties.Resources.B48x48_Keyboard_Layout, KPRes.SelectLanguage, KPRes.SelectLanguageDesc); this.Icon = Properties.Resources.KeePass; this.Text = KPRes.SelectLanguage; List lImg = new List(); lImg.Add(Properties.Resources.B16x16_Browser); m_ilIcons = UIUtil.BuildImageListUnscaled(lImg, DpiUtil.ScaleIntX(16), DpiUtil.ScaleIntY(16)); m_lvLanguages.SmallImageList = m_ilIcons; m_lvLanguages.Columns.Add(KPRes.AvailableLanguages); m_lvLanguages.Columns.Add(KPRes.Version); m_lvLanguages.Columns.Add(KPRes.Author); m_lvLanguages.Columns.Add(KPRes.Contact); ListViewItem lvi = m_lvLanguages.Items.Add("English", 0); lvi.SubItems.Add(PwDefs.VersionString); lvi.SubItems.Add(AppDefs.DefaultTrlAuthor); lvi.SubItems.Add(AppDefs.DefaultTrlContact); List vList = new List(); GetAvailableTranslations(AppConfigSerializer.AppDataDirectory, vList); GetAvailableTranslations(AppConfigSerializer.LocalAppDataDirectory, vList); string strExe = WinUtil.GetExecutable(); string strPath = UrlUtil.GetFileDirectory(strExe, false, true); GetAvailableTranslations(strPath, vList); UIUtil.ResizeColumns(m_lvLanguages, true); } private void GetAvailableTranslations(string strPath, List vList) { try { DirectoryInfo di = new DirectoryInfo(strPath); FileInfo[] vFiles = di.GetFiles(); foreach(FileInfo fi in vFiles) { string strFullName = fi.FullName; if(strFullName.EndsWith("." + KPTranslation.FileExtension, StrUtil.CaseIgnoreCmp)) { string strFileName = UrlUtil.GetFileName(strFullName); bool bFound = false; foreach(string strExisting in vList) { if(strExisting.Equals(strFileName, StrUtil.CaseIgnoreCmp)) { bFound = true; break; } } if(bFound) continue; try { XmlSerializerEx xs = new XmlSerializerEx(typeof(KPTranslation)); KPTranslation kpTrl = KPTranslation.Load(strFullName, xs); ListViewItem lvi = m_lvLanguages.Items.Add( kpTrl.Properties.NameEnglish, 0); lvi.SubItems.Add(kpTrl.Properties.ApplicationVersion); lvi.SubItems.Add(kpTrl.Properties.AuthorName); lvi.SubItems.Add(kpTrl.Properties.AuthorContact); lvi.Tag = strFileName; vList.Add(strFileName); } catch(Exception ex) { MessageService.ShowWarning(ex.Message); } } } } catch(Exception) { } // Directory might not exist or cause access violation } private void OnBtnClose(object sender, EventArgs e) { } private void OnLanguagesItemActivate(object sender, EventArgs e) { ListView.SelectedListViewItemCollection lvic = m_lvLanguages.SelectedItems; if((lvic == null) || (lvic.Count != 1)) return; if(lvic[0].Index == 0) // First item selected = English { if(Program.Config.Application.LanguageFile.Length == 0) return; // Is English already Program.Config.Application.LanguageFile = string.Empty; } else { string strSelID = (lvic[0].Tag as string); if(strSelID == Program.Config.Application.LanguageFile) return; Program.Config.Application.LanguageFile = strSelID; } this.DialogResult = DialogResult.OK; this.Close(); } private void OnFormClosed(object sender, FormClosedEventArgs e) { if(m_ilIcons != null) { m_lvLanguages.SmallImageList = null; m_ilIcons.Dispose(); m_ilIcons = null; } else { Debug.Assert(false); } GlobalWindowManager.RemoveWindow(this); } private void OnBtnGetMore(object sender, EventArgs e) { WinUtil.OpenUrl(PwDefs.TranslationsUrl, null); } } } KeePass/Forms/EditAutoTypeItemForm.cs0000664000000000000000000004760712650646660016602 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; using System.Diagnostics; using KeePass.App; using KeePass.Native; using KeePass.Resources; using KeePass.UI; using KeePass.Util; using KeePass.Util.Spr; using KeePassLib; using KeePassLib.Security; using KeePassLib.Collections; using KeePassLib.Utility; using NativeLib = KeePassLib.Native.NativeLib; namespace KeePass.Forms { public partial class EditAutoTypeItemForm : Form { private AutoTypeConfig m_atConfig = null; private int m_iAssocIndex = -1; private bool m_bEditSequenceOnly = false; private string m_strDefaultSeq = string.Empty; private ProtectedStringDictionary m_vStringDict = null; private object m_objDialogSync = new object(); private bool m_bDialogClosed = false; #if DEBUG private static Dictionary m_dWndTasks = new Dictionary(); #endif // private Color m_clrOriginalForeground = Color.Black; // private Color m_clrOriginalBackground = Color.White; private List m_vWndImages = new List(); private RichTextBoxContextMenu m_ctxKeySeq = new RichTextBoxContextMenu(); private RichTextBoxContextMenu m_ctxKeyCodes = new RichTextBoxContextMenu(); private bool m_bBlockUpdates = false; public EditAutoTypeItemForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } public void InitEx(AutoTypeConfig atConfig, int iAssocIndex, bool bEditSequenceOnly, string strDefaultSeq, ProtectedStringDictionary vStringDict) { Debug.Assert(atConfig != null); if(atConfig == null) throw new ArgumentNullException("atConfig"); m_atConfig = atConfig; m_iAssocIndex = iAssocIndex; m_bEditSequenceOnly = bEditSequenceOnly; m_strDefaultSeq = (strDefaultSeq ?? string.Empty); m_vStringDict = (vStringDict ?? new ProtectedStringDictionary()); } private void OnFormLoad(object sender, EventArgs e) { Debug.Assert(m_atConfig != null); if(m_atConfig == null) throw new InvalidOperationException(); Debug.Assert(m_vStringDict != null); if(m_vStringDict == null) throw new InvalidOperationException(); GlobalWindowManager.AddWindow(this); m_ctxKeySeq.Attach(m_rbKeySeq, this); m_ctxKeyCodes.Attach(m_rtbPlaceholders, this); if(!m_bEditSequenceOnly) { BannerFactory.CreateBannerEx(this, m_bannerImage, Properties.Resources.B48x48_KCMSystem, KPRes.ConfigureAutoTypeItem, KPRes.ConfigureAutoTypeItemDesc); } else // Edit keystrokes only { BannerFactory.CreateBannerEx(this, m_bannerImage, Properties.Resources.B48x48_KCMSystem, KPRes.ConfigureKeystrokeSeq, KPRes.ConfigureKeystrokeSeqDesc); } this.Icon = Properties.Resources.KeePass; // FontUtil.AssignDefaultBold(m_lblTargetWindow); // FontUtil.AssignDefaultBold(m_rbSeqDefault); // FontUtil.AssignDefaultBold(m_rbSeqCustom); UIUtil.EnableAutoCompletion(m_cmbWindow, false); // m_clrOriginalForeground = m_lblOpenHint.ForeColor; // m_clrOriginalBackground = m_cmbWindow.BackColor; // m_strOriginalWindowHint = m_lblTargetWindowInfo.Text; InitPlaceholdersBox(); string strInitSeq = m_atConfig.DefaultSequence; if(m_iAssocIndex >= 0) { AutoTypeAssociation asInit = m_atConfig.GetAt(m_iAssocIndex); m_cmbWindow.Text = asInit.WindowName; if(!m_bEditSequenceOnly) strInitSeq = asInit.Sequence; } else if(m_bEditSequenceOnly) m_cmbWindow.Text = "(" + KPRes.Default + ")"; else strInitSeq = string.Empty; bool bSetDefault = false; m_bBlockUpdates = true; if(strInitSeq.Length > 0) m_rbSeqCustom.Checked = true; else { m_rbSeqDefault.Checked = true; bSetDefault = true; } m_bBlockUpdates = false; if(bSetDefault) m_rbKeySeq.Text = m_strDefaultSeq; else m_rbKeySeq.Text = strInitSeq; try { if(NativeLib.IsUnix()) PopulateWindowsListUnix(); else PopulateWindowsListWin(); } catch(Exception) { Debug.Assert(false); } EnableControlsEx(); } private void InitPlaceholdersBox() { const string VkcBreak = @""; string[] vSpecialKeyCodes = new string[] { "TAB", "ENTER", "UP", "DOWN", "LEFT", "RIGHT", "HOME", "END", "PGUP", "PGDN", "INSERT", "DELETE", "SPACE", VkcBreak, "BACKSPACE", "BREAK", "CAPSLOCK", "ESC", "WIN", "LWIN", "RWIN", "APPS", "HELP", "NUMLOCK", "PRTSC", "SCROLLLOCK", VkcBreak, "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", VkcBreak, "ADD", "SUBTRACT", "MULTIPLY", "DIVIDE", "NUMPAD0", "NUMPAD1", "NUMPAD2", "NUMPAD3", "NUMPAD4", "NUMPAD5", "NUMPAD6", "NUMPAD7", "NUMPAD8", "NUMPAD9" }; string[] vSpecialPlaceholders = new string[] { "GROUP", "GROUP_PATH", "GROUP_NOTES", "PASSWORD_ENC", "URL:RMVSCM", "URL:SCM", "URL:HOST", "URL:PORT", "URL:PATH", "URL:QUERY", "URL:USERINFO", "URL:USERNAME", "URL:PASSWORD", // "BASE", "T-REPLACE-RX:/T/S/R/", "T-CONV:/T/C/", "C:Comment", VkcBreak, "DELAY 1000", "DELAY=200", "VKEY 13", "VKEY-NX 13", "VKEY-EX 13", "PICKCHARS", "PICKCHARS:Password:C=3", "NEWPASSWORD", "NEWPASSWORD:/Profile/", "HMACOTP", "CLEARFIELD", "APPACTIVATE " + KPRes.Title, "BEEP 800 200", VkcBreak, "APPDIR", "DB_PATH", "DB_DIR", "DB_NAME", "DB_BASENAME", "DB_EXT", "ENV_DIRSEP", "ENV_PROGRAMFILES_X86", VkcBreak, // "INTERNETEXPLORER", "FIREFOX", "OPERA", "GOOGLECHROME", // "SAFARI", VkcBreak, "DT_SIMPLE", "DT_YEAR", "DT_MONTH", "DT_DAY", "DT_HOUR", "DT_MINUTE", "DT_SECOND", "DT_UTC_SIMPLE", "DT_UTC_YEAR", "DT_UTC_MONTH", "DT_UTC_DAY", "DT_UTC_HOUR", "DT_UTC_MINUTE", "DT_UTC_SECOND" }; RichTextBuilder rb = new RichTextBuilder(); rb.AppendLine(KPRes.StandardFields, FontStyle.Bold, null, null, ":", null); rb.Append("{" + PwDefs.TitleField + "} "); rb.Append("{" + PwDefs.UserNameField + "} "); rb.Append("{" + PwDefs.PasswordField + "} "); rb.Append("{" + PwDefs.UrlField + "} "); rb.Append("{" + PwDefs.NotesField + "}"); bool bCustomInitialized = false, bFirst = true; foreach(KeyValuePair kvp in m_vStringDict) { if(!PwDefs.IsStandardField(kvp.Key)) { if(bCustomInitialized == false) { rb.AppendLine(); rb.AppendLine(); rb.AppendLine(KPRes.CustomFields, FontStyle.Bold, null, null, ":", null); bCustomInitialized = true; } if(!bFirst) rb.Append(" "); rb.Append("{" + PwDefs.AutoTypeStringPrefix + kvp.Key + "}"); bFirst = false; } } rb.AppendLine(); rb.AppendLine(); rb.AppendLine(KPRes.KeyboardKeyModifiers, FontStyle.Bold, null, null, ":", null); rb.Append(KPRes.KeyboardKeyShift + @": +, "); rb.Append(KPRes.KeyboardKeyCtrl + @": ^, "); rb.Append(KPRes.KeyboardKeyAlt + @": %"); rb.AppendLine(); rb.AppendLine(); rb.AppendLine(KPRes.SpecialKeys, FontStyle.Bold, null, null, ":", null); bFirst = true; foreach(string strNav in vSpecialKeyCodes) { if(strNav == VkcBreak) { rb.AppendLine(); rb.AppendLine(); bFirst = true; } else { if(!bFirst) rb.Append(" "); rb.Append("{" + strNav + "}"); bFirst = false; } } rb.AppendLine(); rb.AppendLine(); rb.AppendLine(KPRes.OtherPlaceholders, FontStyle.Bold, null, null, ":", null); bFirst = true; foreach(string strPH in vSpecialPlaceholders) { if(strPH == VkcBreak) { rb.AppendLine(); rb.AppendLine(); bFirst = true; } else { if(!bFirst) rb.Append(" "); rb.Append("{" + strPH + "}"); bFirst = false; } } if(SprEngine.FilterPlaceholderHints.Count > 0) { rb.AppendLine(); rb.AppendLine(); rb.AppendLine(KPRes.PluginProvided, FontStyle.Bold, null, null, ":", null); bFirst = true; foreach(string strP in SprEngine.FilterPlaceholderHints) { if(string.IsNullOrEmpty(strP)) continue; if(!bFirst) rb.Append(" "); rb.Append(strP); bFirst = false; } } rb.Build(m_rtbPlaceholders); LinkifyRtf(m_rtbPlaceholders); } private void OnFormShown(object sender, EventArgs e) { // Focusing doesn't work in OnFormLoad if(m_cmbWindow.Enabled) UIUtil.SetFocus(m_cmbWindow, this); else if(m_rbKeySeq.Enabled) UIUtil.SetFocus(m_rbKeySeq, this); else UIUtil.SetFocus(m_btnOK, this); } private void CleanUpEx() { lock(m_objDialogSync) { m_bDialogClosed = true; } m_cmbWindow.OrderedImageList = null; foreach(Image img in m_vWndImages) { if(img != null) img.Dispose(); } m_vWndImages.Clear(); m_ctxKeyCodes.Detach(); m_ctxKeySeq.Detach(); #if DEBUG lock(m_dWndTasks) { Debug.Assert(m_dWndTasks.Count == 0); } #endif } private void OnBtnOK(object sender, EventArgs e) { EnableControlsEx(); Debug.Assert(m_btnOK.Enabled); if(!m_btnOK.Enabled) return; string strNewSeq = (m_rbSeqCustom.Checked ? m_rbKeySeq.Text : string.Empty); if(!m_bEditSequenceOnly) { AutoTypeAssociation atAssoc; if(m_iAssocIndex >= 0) atAssoc = m_atConfig.GetAt(m_iAssocIndex); else { atAssoc = new AutoTypeAssociation(); m_atConfig.Add(atAssoc); } atAssoc.WindowName = m_cmbWindow.Text; atAssoc.Sequence = strNewSeq; } else m_atConfig.DefaultSequence = strNewSeq; } private void OnBtnCancel(object sender, EventArgs e) { } private void OnBtnHelp(object sender, EventArgs e) { AppHelp.ShowHelp(AppDefs.HelpTopics.AutoType, null); } private void EnableControlsEx() { if(m_bBlockUpdates) return; m_bBlockUpdates = true; // string strItemName = m_cmbWindow.Text; // bool bEnableOK = true; // // string strError = string.Empty; // if((m_atConfig.Get(strItemName) != null) && !m_bEditSequenceOnly) // { // if((m_strOriginalName == null) || !strItemName.Equals(m_strOriginalName)) // { // bEnableOK = false; // // strError = KPRes.FieldNameExistsAlready; // } // } // // if((strItemName.IndexOf('{') >= 0) || (strItemName.IndexOf('}') >= 0)) // // { // // bEnableOK = false; // // // strError = KPRes.FieldNameInvalid; // // } // if(bEnableOK) // { // // m_lblTargetWindowInfo.Text = m_strOriginalWindowHint; // // m_lblTargetWindowInfo.ForeColor = m_clrOriginalForeground; // m_cmbWindow.BackColor = m_clrOriginalBackground; // m_btnOK.Enabled = true; // } // else // { // // m_lblTargetWindowInfo.Text = strError; // // m_lblTargetWindowInfo.ForeColor = Color.Red; // m_cmbWindow.BackColor = AppDefs.ColorEditError; // m_btnOK.Enabled = false; // } m_lblTargetWindow.Enabled = !m_bEditSequenceOnly; m_cmbWindow.Enabled = !m_bEditSequenceOnly; m_lblOpenHint.Enabled = !m_bEditSequenceOnly; m_lnkWildcardRegexHint.Enabled = !m_bEditSequenceOnly; // Workaround for disabled link render bug (gray too dark) m_lnkWildcardRegexHint.Visible = !m_bEditSequenceOnly; bool bCustom = m_rbSeqCustom.Checked; m_rbKeySeq.Enabled = bCustom; m_lblKeySeqInsertInfo.Enabled = bCustom; m_rtbPlaceholders.Enabled = bCustom; m_bBlockUpdates = false; } private void ColorizeKeySeq() { SprContext ctx = new SprContext(); ctx.EncodeAsAutoTypeSequence = true; PwEntry pe = new PwEntry(true, true); pe.Strings = m_vStringDict; ctx.Entry = pe; SprSyntax.Highlight(m_rbKeySeq, ctx); } /* private void ColorizeKeySeq() { string strText = m_rbKeySeq.Text; int iSelStart = m_rbKeySeq.SelectionStart, iSelLen = m_rbKeySeq.SelectionLength; m_rbKeySeq.SelectAll(); m_rbKeySeq.SelectionBackColor = SystemColors.Window; int iStart = 0; while(true) { int iPos = strText.IndexOf('{', iStart); if(iPos < 0) break; int iEnd = strText.IndexOf('}', iPos + 1); if(iEnd < 0) break; m_rbKeySeq.Select(iPos, iEnd - iPos + 1); m_rbKeySeq.SelectionBackColor = Color.FromArgb(212, 255, 212); iStart = iEnd; } m_rbKeySeq.SelectionStart = iSelStart; m_rbKeySeq.SelectionLength = iSelLen; } */ private void OnTextChangedKeySeq(object sender, EventArgs e) { ColorizeKeySeq(); } private static void LinkifyRtf(RichTextBox rtb) { Debug.Assert(rtb.HideSelection); // Flicker otherwise string str = rtb.Text; int iPos = str.IndexOf('{'); while(iPos >= 0) { int iEnd = str.IndexOf('}', iPos); if(iEnd >= 1) { rtb.Select(iPos, iEnd - iPos + 1); UIUtil.RtfSetSelectionLink(rtb); } iPos = str.IndexOf('{', iPos + 1); } rtb.Select(0, 0); } private void OnPlaceholdersLinkClicked(object sender, LinkClickedEventArgs e) { if(!m_rbSeqCustom.Checked) m_rbSeqCustom.Checked = true; int nSelStart = m_rbKeySeq.SelectionStart; int nSelLength = m_rbKeySeq.SelectionLength; string strText = m_rbKeySeq.Text; string strUrl = e.LinkText; if(nSelLength > 0) strText = strText.Remove(nSelStart, nSelLength); m_rbKeySeq.Text = strText.Insert(nSelStart, strUrl); m_rbKeySeq.Select(nSelStart + strUrl.Length, 0); UIUtil.SetFocus(m_rbKeySeq, this); } private void OnWindowTextUpdate(object sender, EventArgs e) { EnableControlsEx(); } private void OnWindowSelectedIndexChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnFormClosed(object sender, FormClosedEventArgs e) { GlobalWindowManager.RemoveWindow(this); } private void OnWildcardRegexLinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { AppHelp.ShowHelp(AppDefs.HelpTopics.AutoType, AppDefs.HelpTopics.AutoTypeWindowFilters); } private void OnSeqDefaultCheckedChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnSeqCustomCheckedChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnFormClosing(object sender, FormClosingEventArgs e) { CleanUpEx(); } private sealed class PwlwInfo { public EditAutoTypeItemForm Form { get; private set; } public IntPtr WindowHandle { get; private set; } public PwlwInfo(EditAutoTypeItemForm f, IntPtr h) { this.Form = f; this.WindowHandle = h; } } private void PopulateWindowsListWin() { Dictionary dWnds = new Dictionary(); NativeMethods.EnumWindowsProc procEnum = delegate(IntPtr hWnd, IntPtr lParam) { try { if(hWnd != IntPtr.Zero) dWnds[hWnd] = true; } catch(Exception) { Debug.Assert(false); } return true; }; NativeMethods.EnumWindows(procEnum, IntPtr.Zero); GC.KeepAlive(procEnum); // Like in MainWindowFinder.FindMainWindow // On Windows 8 and higher, EnumWindows does not return Metro // app windows, thus we try to discover these windows using // the FindWindowEx function; we do this in addition to EnumWindows, // because calling FindWindowEx in a loop is less reliable (and // by additionally using EnumWindows we at least get all desktop // windows for sure) if(WinUtil.IsAtLeastWindows8) { int nMax = (dWnds.Count * 2) + 2; IntPtr h = NativeMethods.FindWindowEx(IntPtr.Zero, IntPtr.Zero, null, null); for(int i = 0; i < nMax; ++i) { if(h == IntPtr.Zero) break; dWnds[h] = true; h = NativeMethods.FindWindowEx(IntPtr.Zero, h, null, null); } } foreach(KeyValuePair kvp in dWnds) ThreadPool.QueueUserWorkItem(new WaitCallback( EditAutoTypeItemForm.EvalWindowProc), new PwlwInfo(this, kvp.Key)); m_cmbWindow.OrderedImageList = m_vWndImages; } private static void EvalWindowProc(object objState) { #if DEBUG string strTaskID = Guid.NewGuid().ToString(); lock(m_dWndTasks) { m_dWndTasks[strTaskID] = @"<<>>"; } #endif try { PwlwInfo pInfo = (objState as PwlwInfo); IntPtr hWnd = pInfo.WindowHandle; if(hWnd == IntPtr.Zero) { Debug.Assert(false); return; } uint uSmtoFlags = (NativeMethods.SMTO_NORMAL | NativeMethods.SMTO_ABORTIFHUNG); IntPtr pLen = IntPtr.Zero; IntPtr pSmto = NativeMethods.SendMessageTimeout(hWnd, NativeMethods.WM_GETTEXTLENGTH, IntPtr.Zero, IntPtr.Zero, uSmtoFlags, 2000, ref pLen); if(pSmto == IntPtr.Zero) return; string strName = NativeMethods.GetWindowText(hWnd, true); if(string.IsNullOrEmpty(strName)) return; #if DEBUG Debug.Assert(strName.Length <= pLen.ToInt64()); lock(m_dWndTasks) { m_dWndTasks[strTaskID] = strName; } #endif if((NativeMethods.GetWindowStyle(hWnd) & NativeMethods.WS_VISIBLE) == 0) return; if(NativeMethods.IsTaskBar(hWnd)) return; Image img = UIUtil.GetWindowImage(hWnd, true); if(pInfo.Form.InvokeRequired) pInfo.Form.Invoke(new AddWindowProcDelegate( EditAutoTypeItemForm.AddWindowProc), new object[] { pInfo.Form, hWnd, strName, img }); else AddWindowProc(pInfo.Form, hWnd, strName, img); } catch(Exception) { Debug.Assert(false); } #if DEBUG finally { lock(m_dWndTasks) { m_dWndTasks.Remove(strTaskID); } } #endif } private delegate void AddWindowProcDelegate(EditAutoTypeItemForm f, IntPtr h, string strWndName, Image img); private static void AddWindowProc(EditAutoTypeItemForm f, IntPtr h, string strWndName, Image img) { if(f == null) { Debug.Assert(false); return; } if(h == IntPtr.Zero) { Debug.Assert(false); return; } try { if(!AutoType.IsValidAutoTypeWindow(h, false)) return; lock(f.m_objDialogSync) { if(!f.m_bDialogClosed) { f.m_vWndImages.Add(img); f.m_cmbWindow.Items.Add(strWndName); } } } catch(Exception) { Debug.Assert(false); } } private void PopulateWindowsListUnix() { string strWindows = NativeMethods.RunXDoTool( @"search --onlyvisible --name '.+' getwindowname %@"); if(string.IsNullOrEmpty(strWindows)) return; strWindows = StrUtil.NormalizeNewLines(strWindows, false); string[] vWindows = strWindows.Split(new char[]{ '\n' }); List vListed = new List(); for(int i = 0; i < vWindows.Length; ++i) { string str = vWindows[i].Trim(); bool bValid = true; foreach(Form f in Application.OpenForms) { if(IsOwnWindow(f, str)) { bValid = false; break; } } if(!bValid) continue; if((str.Length > 0) && (vListed.IndexOf(str) < 0)) { m_cmbWindow.Items.Add(str); vListed.Add(str); } } } private static bool IsOwnWindow(Control cRoot, string strText) { if(cRoot == null) { Debug.Assert(false); return false; } if(cRoot.Text.Trim() == strText) return true; foreach(Control cSub in cRoot.Controls) { if(cSub == cRoot) { Debug.Assert(false); continue; } if(IsOwnWindow(cSub, strText)) return true; } return false; } } } KeePass/Forms/StatusLoggerForm.cs0000664000000000000000000001154212641461342016003 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.Resources; using KeePass.UI; using KeePassLib; using KeePassLib.Interfaces; namespace KeePass.Forms { public partial class StatusLoggerForm : Form, IStatusLogger { private bool m_bIsModal = false; private bool m_bCancelled = false; private bool m_bCloseMode = false; private uint m_uLastPercent = 0; private uint uWarnings = 0; private uint uErrors = 0; private ImageList m_ilIcons = null; public void InitEx(bool bIsModal) { m_bIsModal = bIsModal; } public void StartLogging(string strOperation, bool bWriteOperationToLog) { if(strOperation != null) { this.Text = PwDefs.ShortProductName + " - " + strOperation; if(bWriteOperationToLog) this.SetText(strOperation, LogStatusType.Info); } m_pbProgress.Value = 0; m_uLastPercent = 0; } public void EndLogging() { m_btnCancel.Text = KPRes.CloseButton; m_bCloseMode = true; this.SetText(string.Empty, LogStatusType.AdditionalInfo); string strFinish = KPRes.Ready + " " + uErrors.ToString() + " " + KPRes.Errors + ", " + uWarnings.ToString() + " " + KPRes.Warnings + "."; this.SetText(strFinish, LogStatusType.Info); m_pbProgress.Value = 100; m_uLastPercent = 100; Application.DoEvents(); } public bool SetProgress(uint uPercent) { if(uPercent != m_uLastPercent) { m_pbProgress.Value = (int)uPercent; m_uLastPercent = uPercent; Application.DoEvents(); } return !m_bCancelled; } public bool SetText(string strNewText, LogStatusType lsType) { if(strNewText != null) { m_lvMessages.Items.Add(strNewText, (int)lsType); m_lvMessages.EnsureVisible(m_lvMessages.Items.Count - 1); } if(lsType == LogStatusType.Warning) ++uWarnings; else if(lsType == LogStatusType.Error) ++uErrors; ProcessResize(); Application.DoEvents(); return !m_bCancelled; } public bool ContinueWork() { Application.DoEvents(); return !m_bCancelled; } public StatusLoggerForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { GlobalWindowManager.AddWindow(this); this.Icon = Properties.Resources.KeePass; this.Text = PwDefs.ShortProductName; m_pbProgress.Minimum = 0; m_pbProgress.Maximum = 100; List lImages = new List(); lImages.Add(Properties.Resources.B16x16_MessageBox_Info); lImages.Add(Properties.Resources.B16x16_MessageBox_Warning); lImages.Add(Properties.Resources.B16x16_MessageBox_Critical); lImages.Add(Properties.Resources.B16x16_Transparent); m_ilIcons = UIUtil.BuildImageListUnscaled(lImages, DpiUtil.ScaleIntX(16), DpiUtil.ScaleIntY(16)); m_lvMessages.SmallImageList = m_ilIcons; m_lvMessages.Columns.Add(KPRes.Status); ProcessResize(); } private void ProcessResize() { UIUtil.ResizeColumns(m_lvMessages, true); } private void OnBtnCancel(object sender, EventArgs e) { if(m_bCloseMode) { if(m_bIsModal) this.DialogResult = DialogResult.Cancel; else Close(); } else { m_bCancelled = true; this.DialogResult = DialogResult.None; } } private void OnMessagesSelectedIndexChanged(object sender, EventArgs e) { ListView.SelectedListViewItemCollection slvic = m_lvMessages.SelectedItems; if(slvic.Count == 0) { m_tbDetails.Text = string.Empty; return; } UIUtil.SetMultilineText(m_tbDetails, slvic[0].Text); } private void OnFormClosed(object sender, FormClosedEventArgs e) { if(m_ilIcons != null) { m_lvMessages.SmallImageList = null; m_ilIcons.Dispose(); m_ilIcons = null; } else { Debug.Assert(false); } GlobalWindowManager.RemoveWindow(this); } } } KeePass/Forms/EcasActionForm.Designer.cs0000664000000000000000000001417712501527572017142 0ustar rootrootnamespace KeePass.Forms { partial class EcasActionForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.m_cmbActions = new System.Windows.Forms.ComboBox(); this.m_lblAction = new System.Windows.Forms.Label(); this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_dgvParams = new System.Windows.Forms.DataGridView(); this.m_lblParamHint = new System.Windows.Forms.Label(); this.m_lblSep = new System.Windows.Forms.Label(); this.m_btnHelp = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.m_dgvParams)).BeginInit(); this.SuspendLayout(); // // m_cmbActions // this.m_cmbActions.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbActions.FormattingEnabled = true; this.m_cmbActions.Location = new System.Drawing.Point(12, 30); this.m_cmbActions.Name = "m_cmbActions"; this.m_cmbActions.Size = new System.Drawing.Size(510, 21); this.m_cmbActions.TabIndex = 0; this.m_cmbActions.SelectedIndexChanged += new System.EventHandler(this.OnActionsSelectedIndexChanged); // // m_lblAction // this.m_lblAction.AutoSize = true; this.m_lblAction.Location = new System.Drawing.Point(9, 14); this.m_lblAction.Name = "m_lblAction"; this.m_lblAction.Size = new System.Drawing.Size(40, 13); this.m_lblAction.TabIndex = 7; this.m_lblAction.Text = "Action:"; // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(366, 289); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 5; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(447, 289); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 6; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_dgvParams // this.m_dgvParams.AllowUserToAddRows = false; this.m_dgvParams.AllowUserToDeleteRows = false; this.m_dgvParams.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.m_dgvParams.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.m_dgvParams.Location = new System.Drawing.Point(12, 57); this.m_dgvParams.Name = "m_dgvParams"; this.m_dgvParams.Size = new System.Drawing.Size(510, 180); this.m_dgvParams.TabIndex = 1; // // m_lblParamHint // this.m_lblParamHint.Location = new System.Drawing.Point(9, 249); this.m_lblParamHint.Name = "m_lblParamHint"; this.m_lblParamHint.Size = new System.Drawing.Size(513, 15); this.m_lblParamHint.TabIndex = 2; this.m_lblParamHint.Text = "<>"; // // m_lblSep // this.m_lblSep.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.m_lblSep.Location = new System.Drawing.Point(0, 280); this.m_lblSep.Name = "m_lblSep"; this.m_lblSep.Size = new System.Drawing.Size(535, 2); this.m_lblSep.TabIndex = 3; // // m_btnHelp // this.m_btnHelp.Location = new System.Drawing.Point(12, 289); this.m_btnHelp.Name = "m_btnHelp"; this.m_btnHelp.Size = new System.Drawing.Size(75, 23); this.m_btnHelp.TabIndex = 4; this.m_btnHelp.Text = "&Help"; this.m_btnHelp.UseVisualStyleBackColor = true; this.m_btnHelp.Click += new System.EventHandler(this.OnBtnHelp); // // EcasActionForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(534, 324); this.Controls.Add(this.m_btnHelp); this.Controls.Add(this.m_lblSep); this.Controls.Add(this.m_lblParamHint); this.Controls.Add(this.m_dgvParams); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.Controls.Add(this.m_lblAction); this.Controls.Add(this.m_cmbActions); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "EcasActionForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); ((System.ComponentModel.ISupportInitialize)(this.m_dgvParams)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.ComboBox m_cmbActions; private System.Windows.Forms.Label m_lblAction; private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.DataGridView m_dgvParams; private System.Windows.Forms.Label m_lblParamHint; private System.Windows.Forms.Label m_lblSep; private System.Windows.Forms.Button m_btnHelp; } }KeePass/Forms/EntropyForm.Designer.cs0000664000000000000000000002220412507245270016555 0ustar rootrootnamespace KeePass.Forms { partial class EntropyForm { /// /// Erforderliche Designervariable. /// private System.ComponentModel.IContainer components = null; /// /// Verwendete Ressourcen bereinigen. /// /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Vom Windows Form-Designer generierter Code /// /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// private void InitializeComponent() { this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_picRandom = new System.Windows.Forms.PictureBox(); this.m_lblHint = new System.Windows.Forms.Label(); this.m_lblGeneratedHint = new System.Windows.Forms.Label(); this.m_lblStatus = new System.Windows.Forms.Label(); this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_grpMouse = new System.Windows.Forms.GroupBox(); this.m_pbGenerated = new KeePass.UI.QualityProgressBar(); this.m_grpKeyboard = new System.Windows.Forms.GroupBox(); this.m_lblKeysDesc = new System.Windows.Forms.Label(); this.m_lblKeysIntro = new System.Windows.Forms.Label(); this.m_tbEdit = new System.Windows.Forms.TextBox(); ((System.ComponentModel.ISupportInitialize)(this.m_picRandom)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); this.m_grpMouse.SuspendLayout(); this.m_grpKeyboard.SuspendLayout(); this.SuspendLayout(); // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(462, 388); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 1; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(543, 388); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 2; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_picRandom // this.m_picRandom.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.m_picRandom.Location = new System.Drawing.Point(10, 47); this.m_picRandom.Name = "m_picRandom"; this.m_picRandom.Size = new System.Drawing.Size(282, 233); this.m_picRandom.TabIndex = 2; this.m_picRandom.TabStop = false; this.m_picRandom.MouseMove += new System.Windows.Forms.MouseEventHandler(this.OnRandomMouseMove); // // m_lblHint // this.m_lblHint.Location = new System.Drawing.Point(6, 16); this.m_lblHint.Name = "m_lblHint"; this.m_lblHint.Size = new System.Drawing.Size(289, 28); this.m_lblHint.TabIndex = 0; this.m_lblHint.Text = "Move the mouse randomly in the following field to generate random bits:"; // // m_lblGeneratedHint // this.m_lblGeneratedHint.AutoSize = true; this.m_lblGeneratedHint.Location = new System.Drawing.Point(6, 289); this.m_lblGeneratedHint.Name = "m_lblGeneratedHint"; this.m_lblGeneratedHint.Size = new System.Drawing.Size(79, 13); this.m_lblGeneratedHint.TabIndex = 1; this.m_lblGeneratedHint.Text = "Generated bits:"; // // m_lblStatus // this.m_lblStatus.Location = new System.Drawing.Point(245, 289); this.m_lblStatus.Name = "m_lblStatus"; this.m_lblStatus.Size = new System.Drawing.Size(50, 13); this.m_lblStatus.TabIndex = 3; this.m_lblStatus.Text = "0 bits"; this.m_lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(630, 60); this.m_bannerImage.TabIndex = 8; this.m_bannerImage.TabStop = false; // // m_grpMouse // this.m_grpMouse.Controls.Add(this.m_lblHint); this.m_grpMouse.Controls.Add(this.m_picRandom); this.m_grpMouse.Controls.Add(this.m_lblGeneratedHint); this.m_grpMouse.Controls.Add(this.m_pbGenerated); this.m_grpMouse.Controls.Add(this.m_lblStatus); this.m_grpMouse.Location = new System.Drawing.Point(12, 66); this.m_grpMouse.Name = "m_grpMouse"; this.m_grpMouse.Size = new System.Drawing.Size(302, 316); this.m_grpMouse.TabIndex = 3; this.m_grpMouse.TabStop = false; this.m_grpMouse.Text = "Random mouse input"; // // m_pbGenerated // this.m_pbGenerated.Location = new System.Drawing.Point(91, 289); this.m_pbGenerated.Name = "m_pbGenerated"; this.m_pbGenerated.Size = new System.Drawing.Size(148, 13); this.m_pbGenerated.TabIndex = 2; this.m_pbGenerated.TabStop = false; // // m_grpKeyboard // this.m_grpKeyboard.Controls.Add(this.m_lblKeysDesc); this.m_grpKeyboard.Controls.Add(this.m_lblKeysIntro); this.m_grpKeyboard.Controls.Add(this.m_tbEdit); this.m_grpKeyboard.Location = new System.Drawing.Point(320, 66); this.m_grpKeyboard.Name = "m_grpKeyboard"; this.m_grpKeyboard.Size = new System.Drawing.Size(298, 316); this.m_grpKeyboard.TabIndex = 0; this.m_grpKeyboard.TabStop = false; this.m_grpKeyboard.Text = "Random keyboard input"; // // m_lblKeysDesc // this.m_lblKeysDesc.Location = new System.Drawing.Point(6, 254); this.m_lblKeysDesc.Name = "m_lblKeysDesc"; this.m_lblKeysDesc.Size = new System.Drawing.Size(286, 56); this.m_lblKeysDesc.TabIndex = 2; this.m_lblKeysDesc.Text = "Just hack some random keys into the box above. You do not need to remember them. " + "They are only used as a random seed for a cryptographically strong random number" + " generator."; // // m_lblKeysIntro // this.m_lblKeysIntro.AutoSize = true; this.m_lblKeysIntro.Location = new System.Drawing.Point(6, 16); this.m_lblKeysIntro.Name = "m_lblKeysIntro"; this.m_lblKeysIntro.Size = new System.Drawing.Size(229, 13); this.m_lblKeysIntro.TabIndex = 1; this.m_lblKeysIntro.Text = "Type random characters into the following field:"; // // m_tbEdit // this.m_tbEdit.AcceptsReturn = true; this.m_tbEdit.Location = new System.Drawing.Point(9, 47); this.m_tbEdit.Multiline = true; this.m_tbEdit.Name = "m_tbEdit"; this.m_tbEdit.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.m_tbEdit.Size = new System.Drawing.Size(279, 204); this.m_tbEdit.TabIndex = 0; // // EntropyForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(630, 423); this.Controls.Add(this.m_grpKeyboard); this.Controls.Add(this.m_grpMouse); this.Controls.Add(this.m_bannerImage); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "EntropyForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); ((System.ComponentModel.ISupportInitialize)(this.m_picRandom)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); this.m_grpMouse.ResumeLayout(false); this.m_grpMouse.PerformLayout(); this.m_grpKeyboard.ResumeLayout(false); this.m_grpKeyboard.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.PictureBox m_picRandom; private System.Windows.Forms.Label m_lblHint; private System.Windows.Forms.Label m_lblGeneratedHint; private KeePass.UI.QualityProgressBar m_pbGenerated; private System.Windows.Forms.Label m_lblStatus; private System.Windows.Forms.PictureBox m_bannerImage; private System.Windows.Forms.GroupBox m_grpMouse; private System.Windows.Forms.GroupBox m_grpKeyboard; private System.Windows.Forms.TextBox m_tbEdit; private System.Windows.Forms.Label m_lblKeysIntro; private System.Windows.Forms.Label m_lblKeysDesc; } }KeePass/Forms/MainForm.resx0000664000000000000000000001604612663077242014632 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 485, 37 242, 0 0, 0 0, 24 0, 464 17, 37 199, 74 KeePass/Forms/DuplicationForm.cs0000664000000000000000000000755412641461340015641 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.App; using KeePass.Resources; using KeePass.UI; using KeePassLib; using KeePassLib.Collections; using KeePassLib.Security; namespace KeePass.Forms { public partial class DuplicationForm : Form { // Copy data from controls to simple member variables, // because ApplyTo must work after the dialog has been destroyed. private bool m_bAppendCopy = true; // public bool AppendCopyToTitles // { // get { return m_bAppendCopy; } // } private bool m_bFieldRefs = false; // public bool ReplaceDataByFieldRefs // { // get { return m_bFieldRefs; } // } private bool m_bCopyHistory = true; // public bool CopyHistory // { // get { return m_bCopyHistory; } // } public void ApplyTo(PwEntry peNew, PwEntry pe, PwDatabase pd) { if((peNew == null) || (pe == null)) { Debug.Assert(false); return; } Debug.Assert(peNew.Strings.ReadSafe(PwDefs.UserNameField) == pe.Strings.ReadSafe(PwDefs.UserNameField)); Debug.Assert(peNew.Strings.ReadSafe(PwDefs.PasswordField) == pe.Strings.ReadSafe(PwDefs.PasswordField)); if(m_bAppendCopy && (pd != null)) { string strTitle = peNew.Strings.ReadSafe(PwDefs.TitleField); peNew.Strings.Set(PwDefs.TitleField, new ProtectedString( pd.MemoryProtection.ProtectTitle, strTitle + " - " + KPRes.CopyOfItem)); } if(m_bFieldRefs && (pd != null)) { string strUser = @"{REF:U@I:" + pe.Uuid.ToHexString() + @"}"; peNew.Strings.Set(PwDefs.UserNameField, new ProtectedString( pd.MemoryProtection.ProtectUserName, strUser)); string strPw = @"{REF:P@I:" + pe.Uuid.ToHexString() + @"}"; peNew.Strings.Set(PwDefs.PasswordField, new ProtectedString( pd.MemoryProtection.ProtectPassword, strPw)); } if(!m_bCopyHistory) peNew.History = new PwObjectList(); } public DuplicationForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { GlobalWindowManager.AddWindow(this); this.Icon = Properties.Resources.KeePass; FontUtil.AssignDefaultBold(m_cbAppendCopy); FontUtil.AssignDefaultBold(m_cbFieldRefs); FontUtil.AssignDefaultBold(m_cbCopyHistory); m_cbAppendCopy.Checked = m_bAppendCopy; m_cbFieldRefs.Checked = m_bFieldRefs; m_cbCopyHistory.Checked = m_bCopyHistory; } private void OnFormClosed(object sender, FormClosedEventArgs e) { GlobalWindowManager.RemoveWindow(this); } private void OnFieldRefsLinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { AppHelp.ShowHelp(AppDefs.HelpTopics.FieldRefs, null); } private void OnBtnOK(object sender, EventArgs e) { m_bAppendCopy = m_cbAppendCopy.Checked; m_bFieldRefs = m_cbFieldRefs.Checked; m_bCopyHistory = m_cbCopyHistory.Checked; } } } KeePass/Forms/AutoTypeCtxForm.Designer.cs0000664000000000000000000001541212501526634017351 0ustar rootrootnamespace KeePass.Forms { partial class AutoTypeCtxForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_lblText = new System.Windows.Forms.Label(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_lvItems = new KeePass.UI.CustomListViewEx(); this.m_pnlTop = new System.Windows.Forms.Panel(); this.m_pnlBottom = new System.Windows.Forms.Panel(); this.m_btnTools = new System.Windows.Forms.Button(); this.m_pnlMiddle = new System.Windows.Forms.Panel(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); this.m_pnlTop.SuspendLayout(); this.m_pnlBottom.SuspendLayout(); this.m_pnlMiddle.SuspendLayout(); this.SuspendLayout(); // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(579, 60); this.m_bannerImage.TabIndex = 0; this.m_bannerImage.TabStop = false; // // m_lblText // this.m_lblText.Dock = System.Windows.Forms.DockStyle.Fill; this.m_lblText.Location = new System.Drawing.Point(9, 11); this.m_lblText.Name = "m_lblText"; this.m_lblText.Size = new System.Drawing.Size(561, 30); this.m_lblText.TabIndex = 0; this.m_lblText.Text = "<>"; // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Dock = System.Windows.Forms.DockStyle.Right; this.m_btnCancel.Location = new System.Drawing.Point(492, 6); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 0; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; // // m_lvItems // this.m_lvItems.Activation = System.Windows.Forms.ItemActivation.OneClick; this.m_lvItems.Dock = System.Windows.Forms.DockStyle.Fill; this.m_lvItems.FullRowSelect = true; this.m_lvItems.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.m_lvItems.HideSelection = false; this.m_lvItems.HotTracking = true; this.m_lvItems.HoverSelection = true; this.m_lvItems.Location = new System.Drawing.Point(12, 0); this.m_lvItems.MultiSelect = false; this.m_lvItems.Name = "m_lvItems"; this.m_lvItems.ShowItemToolTips = true; this.m_lvItems.Size = new System.Drawing.Size(555, 219); this.m_lvItems.TabIndex = 0; this.m_lvItems.UseCompatibleStateImageBehavior = false; this.m_lvItems.View = System.Windows.Forms.View.Details; this.m_lvItems.ItemActivate += new System.EventHandler(this.OnListItemActivate); this.m_lvItems.Click += new System.EventHandler(this.OnListClick); // // m_pnlTop // this.m_pnlTop.Controls.Add(this.m_lblText); this.m_pnlTop.Dock = System.Windows.Forms.DockStyle.Top; this.m_pnlTop.Location = new System.Drawing.Point(0, 60); this.m_pnlTop.Name = "m_pnlTop"; this.m_pnlTop.Padding = new System.Windows.Forms.Padding(9, 11, 9, 3); this.m_pnlTop.Size = new System.Drawing.Size(579, 44); this.m_pnlTop.TabIndex = 1; // // m_pnlBottom // this.m_pnlBottom.Controls.Add(this.m_btnTools); this.m_pnlBottom.Controls.Add(this.m_btnCancel); this.m_pnlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; this.m_pnlBottom.Location = new System.Drawing.Point(0, 323); this.m_pnlBottom.Name = "m_pnlBottom"; this.m_pnlBottom.Padding = new System.Windows.Forms.Padding(12, 6, 12, 12); this.m_pnlBottom.Size = new System.Drawing.Size(579, 41); this.m_pnlBottom.TabIndex = 2; // // m_btnTools // this.m_btnTools.Dock = System.Windows.Forms.DockStyle.Left; this.m_btnTools.Location = new System.Drawing.Point(12, 6); this.m_btnTools.Name = "m_btnTools"; this.m_btnTools.Size = new System.Drawing.Size(75, 23); this.m_btnTools.TabIndex = 1; this.m_btnTools.Text = "&Options"; this.m_btnTools.UseVisualStyleBackColor = true; this.m_btnTools.Click += new System.EventHandler(this.OnBtnTools); // // m_pnlMiddle // this.m_pnlMiddle.Controls.Add(this.m_lvItems); this.m_pnlMiddle.Dock = System.Windows.Forms.DockStyle.Fill; this.m_pnlMiddle.Location = new System.Drawing.Point(0, 104); this.m_pnlMiddle.Name = "m_pnlMiddle"; this.m_pnlMiddle.Padding = new System.Windows.Forms.Padding(12, 0, 12, 0); this.m_pnlMiddle.Size = new System.Drawing.Size(579, 219); this.m_pnlMiddle.TabIndex = 0; // // AutoTypeCtxForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(579, 364); this.Controls.Add(this.m_pnlMiddle); this.Controls.Add(this.m_pnlBottom); this.Controls.Add(this.m_pnlTop); this.Controls.Add(this.m_bannerImage); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "AutoTypeCtxForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); this.Resize += new System.EventHandler(this.OnFormResize); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); this.m_pnlTop.ResumeLayout(false); this.m_pnlBottom.ResumeLayout(false); this.m_pnlMiddle.ResumeLayout(false); this.ResumeLayout(false); } #endregion private System.Windows.Forms.PictureBox m_bannerImage; private System.Windows.Forms.Label m_lblText; private KeePass.UI.CustomListViewEx m_lvItems; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.Panel m_pnlTop; private System.Windows.Forms.Panel m_pnlBottom; private System.Windows.Forms.Panel m_pnlMiddle; private System.Windows.Forms.Button m_btnTools; } }KeePass/Forms/TanWizardForm.cs0000664000000000000000000001040412641461342015257 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.UI; using KeePass.Resources; using KeePassLib; using KeePassLib.Security; namespace KeePass.Forms { public partial class TanWizardForm : Form { private PwDatabase m_pwDatabase = null; private PwGroup m_pgStorage = null; public void InitEx(PwDatabase pwParent, PwGroup pgStorage) { m_pwDatabase = pwParent; m_pgStorage = pgStorage; } public TanWizardForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { Debug.Assert(m_pwDatabase != null); if(m_pwDatabase == null) throw new InvalidOperationException(); Debug.Assert(m_pgStorage != null); if(m_pgStorage == null) throw new InvalidOperationException(); GlobalWindowManager.AddWindow(this); BannerFactory.CreateBannerEx(this, m_bannerImage, KeePass.Properties.Resources.B48x48_Wizard, KPRes.TanWizard, KPRes.TanWizardDesc); this.Icon = Properties.Resources.KeePass; this.Text = KPRes.TanWizard; if((m_pgStorage.Name != null) && (m_pgStorage.Name.Length > 0)) m_lblToGroup.Text += ": " + m_pgStorage.Name + "."; else m_lblToGroup.Text += "."; m_tbTanChars.Text = Program.Config.Defaults.TanCharacters; EnableControlsEx(); } private void OnBtnOK(object sender, EventArgs e) { ParseTans(); } private void OnBtnCancel(object sender, EventArgs e) { } private void CleanUpEx() { Program.Config.Defaults.TanCharacters = m_tbTanChars.Text; } private void EnableControlsEx() { m_numTANsIndex.Enabled = m_cbNumberTans.Checked; } private void ParseTans() { StringBuilder sb = new StringBuilder(); string strText = m_tbTANs.Text; int nTanIndex = (int)m_numTANsIndex.Value; bool bSetIndex = m_cbNumberTans.Checked; string strTanChars = m_tbTanChars.Text; for(int i = 0; i < strText.Length; ++i) { char ch = strText[i]; if(strTanChars.IndexOf(ch) >= 0) sb.Append(ch); else { AddTan(sb.ToString(), bSetIndex, ref nTanIndex); sb = new StringBuilder(); // Reset string } } if(sb.Length > 0) AddTan(sb.ToString(), bSetIndex, ref nTanIndex); } private void AddTan(string strTan, bool bSetIndex, ref int nTanIndex) { if(strTan.Length == 0) return; PwEntry pe = new PwEntry(true, true); pe.Strings.Set(PwDefs.TitleField, new ProtectedString( m_pwDatabase.MemoryProtection.ProtectTitle, PwDefs.TanTitle)); pe.Strings.Set(PwDefs.PasswordField, new ProtectedString( m_pwDatabase.MemoryProtection.ProtectPassword, strTan)); if(bSetIndex && (nTanIndex >= 0)) { Debug.Assert(PwDefs.TanIndexField == PwDefs.UserNameField); pe.Strings.Set(PwDefs.TanIndexField, new ProtectedString( m_pwDatabase.MemoryProtection.ProtectUserName, nTanIndex.ToString())); ++nTanIndex; } m_pgStorage.AddEntry(pe, true); } private void OnNumberTANsCheckedChanged(object sender, EventArgs e) { EnableControlsEx(); } private void OnFormClosed(object sender, FormClosedEventArgs e) { GlobalWindowManager.RemoveWindow(this); } private void OnFormClosing(object sender, FormClosingEventArgs e) { CleanUpEx(); } } } KeePass/Forms/OptionsForm.Designer.cs0000664000000000000000000010310612634240500016541 0ustar rootrootnamespace KeePass.Forms { partial class OptionsForm { /// /// Erforderliche Designervariable. /// private System.ComponentModel.IContainer components = null; /// /// Verwendete Ressourcen bereinigen. /// /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Vom Windows Form-Designer generierter Code /// /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// private void InitializeComponent() { this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_tabMain = new System.Windows.Forms.TabControl(); this.m_tabSecurity = new System.Windows.Forms.TabPage(); this.m_numLockAfterGlobalTime = new System.Windows.Forms.NumericUpDown(); this.m_cbLockAfterGlobalTime = new System.Windows.Forms.CheckBox(); this.m_lvSecurityOptions = new KeePass.UI.CustomListViewEx(); this.m_numClipClearTime = new System.Windows.Forms.NumericUpDown(); this.m_cbClipClearTime = new System.Windows.Forms.CheckBox(); this.m_numDefaultExpireDays = new System.Windows.Forms.NumericUpDown(); this.m_cbDefaultExpireDays = new System.Windows.Forms.CheckBox(); this.m_cbLockAfterTime = new System.Windows.Forms.CheckBox(); this.m_numLockAfterTime = new System.Windows.Forms.NumericUpDown(); this.m_tabPolicy = new System.Windows.Forms.TabPage(); this.m_lvPolicy = new KeePass.UI.CustomListViewEx(); this.m_linkPolicyInfo = new System.Windows.Forms.LinkLabel(); this.m_lblPolicyMore = new System.Windows.Forms.Label(); this.m_lblPolicyRestart = new System.Windows.Forms.Label(); this.m_lblPolicyIntro = new System.Windows.Forms.Label(); this.m_tabGui = new System.Windows.Forms.TabPage(); this.m_cmbMenuStyle = new System.Windows.Forms.ComboBox(); this.m_lblMenuStyle = new System.Windows.Forms.Label(); this.m_btnSelPwFont = new System.Windows.Forms.Button(); this.m_numMruCount = new System.Windows.Forms.NumericUpDown(); this.m_lblMruCount = new System.Windows.Forms.Label(); this.m_btnSelFont = new System.Windows.Forms.Button(); this.m_lvGuiOptions = new KeePass.UI.CustomListViewEx(); this.m_lblBannerStyle = new System.Windows.Forms.Label(); this.m_cmbBannerStyle = new System.Windows.Forms.ComboBox(); this.m_tabIntegration = new System.Windows.Forms.TabPage(); this.m_btnSchemeOverrides = new System.Windows.Forms.Button(); this.m_cbSingleClickTrayAction = new System.Windows.Forms.CheckBox(); this.m_cbAutoRun = new System.Windows.Forms.CheckBox(); this.m_grpFileExt = new System.Windows.Forms.GroupBox(); this.m_btnFileExtRemove = new System.Windows.Forms.Button(); this.m_btnFileExtCreate = new System.Windows.Forms.Button(); this.m_lblFileExtHint = new System.Windows.Forms.Label(); this.m_grpHotKeys = new System.Windows.Forms.GroupBox(); this.m_linkHotKeyHelp = new System.Windows.Forms.LinkLabel(); this.m_lblSelAutoTypeHotKey = new System.Windows.Forms.Label(); this.m_tbSelAutoTypeHotKey = new System.Windows.Forms.TextBox(); this.m_tbShowWindowHotKey = new System.Windows.Forms.TextBox(); this.m_lblGlobalAutoTypeHotKey = new System.Windows.Forms.Label(); this.m_lblRestoreHotKey = new System.Windows.Forms.Label(); this.m_tbGlobalAutoType = new System.Windows.Forms.TextBox(); this.m_tabAdvanced = new System.Windows.Forms.TabPage(); this.m_btnProxy = new System.Windows.Forms.Button(); this.m_lvAdvanced = new KeePass.UI.CustomListViewEx(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); this.m_tabMain.SuspendLayout(); this.m_tabSecurity.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_numLockAfterGlobalTime)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numClipClearTime)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numDefaultExpireDays)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numLockAfterTime)).BeginInit(); this.m_tabPolicy.SuspendLayout(); this.m_tabGui.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_numMruCount)).BeginInit(); this.m_tabIntegration.SuspendLayout(); this.m_grpFileExt.SuspendLayout(); this.m_grpHotKeys.SuspendLayout(); this.m_tabAdvanced.SuspendLayout(); this.SuspendLayout(); // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(586, 60); this.m_bannerImage.TabIndex = 0; this.m_bannerImage.TabStop = false; // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(418, 409); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 0; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(499, 409); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 1; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_tabMain // this.m_tabMain.Controls.Add(this.m_tabSecurity); this.m_tabMain.Controls.Add(this.m_tabPolicy); this.m_tabMain.Controls.Add(this.m_tabGui); this.m_tabMain.Controls.Add(this.m_tabIntegration); this.m_tabMain.Controls.Add(this.m_tabAdvanced); this.m_tabMain.Location = new System.Drawing.Point(12, 66); this.m_tabMain.Name = "m_tabMain"; this.m_tabMain.SelectedIndex = 0; this.m_tabMain.Size = new System.Drawing.Size(562, 337); this.m_tabMain.TabIndex = 2; // // m_tabSecurity // this.m_tabSecurity.Controls.Add(this.m_numLockAfterGlobalTime); this.m_tabSecurity.Controls.Add(this.m_cbLockAfterGlobalTime); this.m_tabSecurity.Controls.Add(this.m_lvSecurityOptions); this.m_tabSecurity.Controls.Add(this.m_numClipClearTime); this.m_tabSecurity.Controls.Add(this.m_cbClipClearTime); this.m_tabSecurity.Controls.Add(this.m_numDefaultExpireDays); this.m_tabSecurity.Controls.Add(this.m_cbDefaultExpireDays); this.m_tabSecurity.Controls.Add(this.m_cbLockAfterTime); this.m_tabSecurity.Controls.Add(this.m_numLockAfterTime); this.m_tabSecurity.Location = new System.Drawing.Point(4, 22); this.m_tabSecurity.Name = "m_tabSecurity"; this.m_tabSecurity.Padding = new System.Windows.Forms.Padding(3); this.m_tabSecurity.Size = new System.Drawing.Size(554, 311); this.m_tabSecurity.TabIndex = 0; this.m_tabSecurity.Text = "Security"; this.m_tabSecurity.UseVisualStyleBackColor = true; // // m_numLockAfterGlobalTime // this.m_numLockAfterGlobalTime.Location = new System.Drawing.Point(327, 37); this.m_numLockAfterGlobalTime.Maximum = new decimal(new int[] { 1209600, 0, 0, 0}); this.m_numLockAfterGlobalTime.Name = "m_numLockAfterGlobalTime"; this.m_numLockAfterGlobalTime.Size = new System.Drawing.Size(66, 20); this.m_numLockAfterGlobalTime.TabIndex = 3; // // m_cbLockAfterGlobalTime // this.m_cbLockAfterGlobalTime.AutoSize = true; this.m_cbLockAfterGlobalTime.Location = new System.Drawing.Point(6, 38); this.m_cbLockAfterGlobalTime.Name = "m_cbLockAfterGlobalTime"; this.m_cbLockAfterGlobalTime.Size = new System.Drawing.Size(279, 17); this.m_cbLockAfterGlobalTime.TabIndex = 2; this.m_cbLockAfterGlobalTime.Text = "Lock workspace after global user inactivity (seconds):"; this.m_cbLockAfterGlobalTime.UseVisualStyleBackColor = true; this.m_cbLockAfterGlobalTime.CheckedChanged += new System.EventHandler(this.OnLockAfterGlobalTimeCheckedChanged); // // m_lvSecurityOptions // this.m_lvSecurityOptions.CheckBoxes = true; this.m_lvSecurityOptions.FullRowSelect = true; this.m_lvSecurityOptions.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; this.m_lvSecurityOptions.Location = new System.Drawing.Point(6, 115); this.m_lvSecurityOptions.Name = "m_lvSecurityOptions"; this.m_lvSecurityOptions.ShowItemToolTips = true; this.m_lvSecurityOptions.Size = new System.Drawing.Size(540, 188); this.m_lvSecurityOptions.TabIndex = 8; this.m_lvSecurityOptions.UseCompatibleStateImageBehavior = false; this.m_lvSecurityOptions.View = System.Windows.Forms.View.Details; // // m_numClipClearTime // this.m_numClipClearTime.Location = new System.Drawing.Point(327, 63); this.m_numClipClearTime.Maximum = new decimal(new int[] { 1209600, 0, 0, 0}); this.m_numClipClearTime.Name = "m_numClipClearTime"; this.m_numClipClearTime.Size = new System.Drawing.Size(66, 20); this.m_numClipClearTime.TabIndex = 5; // // m_cbClipClearTime // this.m_cbClipClearTime.AutoSize = true; this.m_cbClipClearTime.Location = new System.Drawing.Point(6, 64); this.m_cbClipClearTime.Name = "m_cbClipClearTime"; this.m_cbClipClearTime.Size = new System.Drawing.Size(194, 17); this.m_cbClipClearTime.TabIndex = 4; this.m_cbClipClearTime.Text = "Clipboard auto-clear time (seconds):"; this.m_cbClipClearTime.UseVisualStyleBackColor = true; this.m_cbClipClearTime.CheckedChanged += new System.EventHandler(this.OnClipboardClearTimeCheckedChanged); // // m_numDefaultExpireDays // this.m_numDefaultExpireDays.Location = new System.Drawing.Point(327, 89); this.m_numDefaultExpireDays.Maximum = new decimal(new int[] { 2920, 0, 0, 0}); this.m_numDefaultExpireDays.Name = "m_numDefaultExpireDays"; this.m_numDefaultExpireDays.Size = new System.Drawing.Size(66, 20); this.m_numDefaultExpireDays.TabIndex = 7; // // m_cbDefaultExpireDays // this.m_cbDefaultExpireDays.AutoSize = true; this.m_cbDefaultExpireDays.Location = new System.Drawing.Point(6, 90); this.m_cbDefaultExpireDays.Name = "m_cbDefaultExpireDays"; this.m_cbDefaultExpireDays.Size = new System.Drawing.Size(315, 17); this.m_cbDefaultExpireDays.TabIndex = 6; this.m_cbDefaultExpireDays.Text = "By default, new entries expire in the following number of days:"; this.m_cbDefaultExpireDays.UseVisualStyleBackColor = true; this.m_cbDefaultExpireDays.CheckedChanged += new System.EventHandler(this.OnDefaultExpireDaysCheckedChanged); // // m_cbLockAfterTime // this.m_cbLockAfterTime.AutoSize = true; this.m_cbLockAfterTime.Location = new System.Drawing.Point(6, 12); this.m_cbLockAfterTime.Name = "m_cbLockAfterTime"; this.m_cbLockAfterTime.Size = new System.Drawing.Size(270, 17); this.m_cbLockAfterTime.TabIndex = 0; this.m_cbLockAfterTime.Text = "Lock workspace after KeePass inactivity (seconds):"; this.m_cbLockAfterTime.UseVisualStyleBackColor = true; this.m_cbLockAfterTime.CheckedChanged += new System.EventHandler(this.OnLockAfterTimeCheckedChanged); // // m_numLockAfterTime // this.m_numLockAfterTime.Location = new System.Drawing.Point(327, 11); this.m_numLockAfterTime.Maximum = new decimal(new int[] { 1209600, 0, 0, 0}); this.m_numLockAfterTime.Name = "m_numLockAfterTime"; this.m_numLockAfterTime.Size = new System.Drawing.Size(66, 20); this.m_numLockAfterTime.TabIndex = 1; // // m_tabPolicy // this.m_tabPolicy.Controls.Add(this.m_lvPolicy); this.m_tabPolicy.Controls.Add(this.m_linkPolicyInfo); this.m_tabPolicy.Controls.Add(this.m_lblPolicyMore); this.m_tabPolicy.Controls.Add(this.m_lblPolicyRestart); this.m_tabPolicy.Controls.Add(this.m_lblPolicyIntro); this.m_tabPolicy.Location = new System.Drawing.Point(4, 22); this.m_tabPolicy.Name = "m_tabPolicy"; this.m_tabPolicy.Size = new System.Drawing.Size(554, 311); this.m_tabPolicy.TabIndex = 3; this.m_tabPolicy.Text = "Policy"; this.m_tabPolicy.UseVisualStyleBackColor = true; // // m_lvPolicy // this.m_lvPolicy.CheckBoxes = true; this.m_lvPolicy.FullRowSelect = true; this.m_lvPolicy.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.m_lvPolicy.Location = new System.Drawing.Point(6, 46); this.m_lvPolicy.Name = "m_lvPolicy"; this.m_lvPolicy.ShowItemToolTips = true; this.m_lvPolicy.Size = new System.Drawing.Size(540, 240); this.m_lvPolicy.TabIndex = 3; this.m_lvPolicy.UseCompatibleStateImageBehavior = false; this.m_lvPolicy.View = System.Windows.Forms.View.Details; // // m_linkPolicyInfo // this.m_linkPolicyInfo.AutoSize = true; this.m_linkPolicyInfo.Location = new System.Drawing.Point(134, 26); this.m_linkPolicyInfo.Name = "m_linkPolicyInfo"; this.m_linkPolicyInfo.Size = new System.Drawing.Size(115, 13); this.m_linkPolicyInfo.TabIndex = 2; this.m_linkPolicyInfo.TabStop = true; this.m_linkPolicyInfo.Text = "Application Policy Help"; this.m_linkPolicyInfo.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.OnPolicyInfoLinkClicked); // // m_lblPolicyMore // this.m_lblPolicyMore.AutoSize = true; this.m_lblPolicyMore.Location = new System.Drawing.Point(3, 26); this.m_lblPolicyMore.Name = "m_lblPolicyMore"; this.m_lblPolicyMore.Size = new System.Drawing.Size(125, 13); this.m_lblPolicyMore.TabIndex = 1; this.m_lblPolicyMore.Text = "For more information see:"; // // m_lblPolicyRestart // this.m_lblPolicyRestart.AutoSize = true; this.m_lblPolicyRestart.Location = new System.Drawing.Point(3, 289); this.m_lblPolicyRestart.Name = "m_lblPolicyRestart"; this.m_lblPolicyRestart.Size = new System.Drawing.Size(238, 13); this.m_lblPolicyRestart.TabIndex = 4; this.m_lblPolicyRestart.Text = "*Changing the policy requires restarting KeePass."; // // m_lblPolicyIntro // this.m_lblPolicyIntro.Location = new System.Drawing.Point(3, 9); this.m_lblPolicyIntro.Name = "m_lblPolicyIntro"; this.m_lblPolicyIntro.Size = new System.Drawing.Size(548, 14); this.m_lblPolicyIntro.TabIndex = 0; this.m_lblPolicyIntro.Text = "The application policy defines which security-critical operations are allowed and" + " which aren\'t."; // // m_tabGui // this.m_tabGui.Controls.Add(this.m_cmbMenuStyle); this.m_tabGui.Controls.Add(this.m_lblMenuStyle); this.m_tabGui.Controls.Add(this.m_btnSelPwFont); this.m_tabGui.Controls.Add(this.m_numMruCount); this.m_tabGui.Controls.Add(this.m_lblMruCount); this.m_tabGui.Controls.Add(this.m_btnSelFont); this.m_tabGui.Controls.Add(this.m_lvGuiOptions); this.m_tabGui.Controls.Add(this.m_lblBannerStyle); this.m_tabGui.Controls.Add(this.m_cmbBannerStyle); this.m_tabGui.Location = new System.Drawing.Point(4, 22); this.m_tabGui.Name = "m_tabGui"; this.m_tabGui.Size = new System.Drawing.Size(554, 311); this.m_tabGui.TabIndex = 2; this.m_tabGui.Text = "Interface"; this.m_tabGui.UseVisualStyleBackColor = true; // // m_cmbMenuStyle // this.m_cmbMenuStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbMenuStyle.FormattingEnabled = true; this.m_cmbMenuStyle.Location = new System.Drawing.Point(157, 226); this.m_cmbMenuStyle.Name = "m_cmbMenuStyle"; this.m_cmbMenuStyle.Size = new System.Drawing.Size(195, 21); this.m_cmbMenuStyle.TabIndex = 2; // // m_lblMenuStyle // this.m_lblMenuStyle.AutoSize = true; this.m_lblMenuStyle.Location = new System.Drawing.Point(3, 229); this.m_lblMenuStyle.Name = "m_lblMenuStyle"; this.m_lblMenuStyle.Size = new System.Drawing.Size(117, 13); this.m_lblMenuStyle.TabIndex = 1; this.m_lblMenuStyle.Text = "Menu and toolbar style:"; // // m_btnSelPwFont // this.m_btnSelPwFont.Location = new System.Drawing.Point(414, 252); this.m_btnSelPwFont.Name = "m_btnSelPwFont"; this.m_btnSelPwFont.Size = new System.Drawing.Size(133, 23); this.m_btnSelPwFont.TabIndex = 6; this.m_btnSelPwFont.Text = "Select Password Font"; this.m_btnSelPwFont.UseVisualStyleBackColor = true; this.m_btnSelPwFont.Click += new System.EventHandler(this.OnBtnSelPwFont); // // m_numMruCount // this.m_numMruCount.Location = new System.Drawing.Point(157, 280); this.m_numMruCount.Maximum = new decimal(new int[] { 120, 0, 0, 0}); this.m_numMruCount.Name = "m_numMruCount"; this.m_numMruCount.Size = new System.Drawing.Size(53, 20); this.m_numMruCount.TabIndex = 8; this.m_numMruCount.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; // // m_lblMruCount // this.m_lblMruCount.AutoSize = true; this.m_lblMruCount.Location = new System.Drawing.Point(3, 282); this.m_lblMruCount.Name = "m_lblMruCount"; this.m_lblMruCount.Size = new System.Drawing.Size(148, 13); this.m_lblMruCount.TabIndex = 7; this.m_lblMruCount.Text = "Remember recently used files:"; // // m_btnSelFont // this.m_btnSelFont.Location = new System.Drawing.Point(414, 225); this.m_btnSelFont.Name = "m_btnSelFont"; this.m_btnSelFont.Size = new System.Drawing.Size(133, 23); this.m_btnSelFont.TabIndex = 3; this.m_btnSelFont.Text = "Select List Font"; this.m_btnSelFont.UseVisualStyleBackColor = true; this.m_btnSelFont.Click += new System.EventHandler(this.OnBtnSelListFont); // // m_lvGuiOptions // this.m_lvGuiOptions.CheckBoxes = true; this.m_lvGuiOptions.FullRowSelect = true; this.m_lvGuiOptions.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; this.m_lvGuiOptions.Location = new System.Drawing.Point(6, 12); this.m_lvGuiOptions.Name = "m_lvGuiOptions"; this.m_lvGuiOptions.ShowItemToolTips = true; this.m_lvGuiOptions.Size = new System.Drawing.Size(540, 207); this.m_lvGuiOptions.TabIndex = 0; this.m_lvGuiOptions.UseCompatibleStateImageBehavior = false; this.m_lvGuiOptions.View = System.Windows.Forms.View.Details; // // m_lblBannerStyle // this.m_lblBannerStyle.AutoSize = true; this.m_lblBannerStyle.Location = new System.Drawing.Point(3, 256); this.m_lblBannerStyle.Name = "m_lblBannerStyle"; this.m_lblBannerStyle.Size = new System.Drawing.Size(100, 13); this.m_lblBannerStyle.TabIndex = 4; this.m_lblBannerStyle.Text = "Dialog banner style:"; // // m_cmbBannerStyle // this.m_cmbBannerStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbBannerStyle.FormattingEnabled = true; this.m_cmbBannerStyle.Location = new System.Drawing.Point(157, 253); this.m_cmbBannerStyle.Name = "m_cmbBannerStyle"; this.m_cmbBannerStyle.Size = new System.Drawing.Size(195, 21); this.m_cmbBannerStyle.TabIndex = 5; this.m_cmbBannerStyle.SelectedValueChanged += new System.EventHandler(this.OnBannerStyleSelectedChanged); // // m_tabIntegration // this.m_tabIntegration.Controls.Add(this.m_btnSchemeOverrides); this.m_tabIntegration.Controls.Add(this.m_cbSingleClickTrayAction); this.m_tabIntegration.Controls.Add(this.m_cbAutoRun); this.m_tabIntegration.Controls.Add(this.m_grpFileExt); this.m_tabIntegration.Controls.Add(this.m_grpHotKeys); this.m_tabIntegration.Location = new System.Drawing.Point(4, 22); this.m_tabIntegration.Name = "m_tabIntegration"; this.m_tabIntegration.Size = new System.Drawing.Size(554, 311); this.m_tabIntegration.TabIndex = 4; this.m_tabIntegration.Text = "Integration"; this.m_tabIntegration.UseVisualStyleBackColor = true; // // m_btnSchemeOverrides // this.m_btnSchemeOverrides.Location = new System.Drawing.Point(435, 279); this.m_btnSchemeOverrides.Name = "m_btnSchemeOverrides"; this.m_btnSchemeOverrides.Size = new System.Drawing.Size(112, 23); this.m_btnSchemeOverrides.TabIndex = 4; this.m_btnSchemeOverrides.Text = "&URL Overrides..."; this.m_btnSchemeOverrides.UseVisualStyleBackColor = true; this.m_btnSchemeOverrides.Click += new System.EventHandler(this.OnBtnUrlOverrides); // // m_cbSingleClickTrayAction // this.m_cbSingleClickTrayAction.AutoSize = true; this.m_cbSingleClickTrayAction.Location = new System.Drawing.Point(6, 218); this.m_cbSingleClickTrayAction.Name = "m_cbSingleClickTrayAction"; this.m_cbSingleClickTrayAction.Size = new System.Drawing.Size(314, 17); this.m_cbSingleClickTrayAction.TabIndex = 3; this.m_cbSingleClickTrayAction.Text = "Single click instead of double click for default tray icon action"; this.m_cbSingleClickTrayAction.UseVisualStyleBackColor = true; // // m_cbAutoRun // this.m_cbAutoRun.AutoSize = true; this.m_cbAutoRun.Location = new System.Drawing.Point(6, 195); this.m_cbAutoRun.Name = "m_cbAutoRun"; this.m_cbAutoRun.Size = new System.Drawing.Size(250, 17); this.m_cbAutoRun.TabIndex = 2; this.m_cbAutoRun.Text = "Run KeePass at Windows startup (current user)"; this.m_cbAutoRun.UseVisualStyleBackColor = true; this.m_cbAutoRun.CheckedChanged += new System.EventHandler(this.OnCheckedChangedAutoRun); // // m_grpFileExt // this.m_grpFileExt.Controls.Add(this.m_btnFileExtRemove); this.m_grpFileExt.Controls.Add(this.m_btnFileExtCreate); this.m_grpFileExt.Controls.Add(this.m_lblFileExtHint); this.m_grpFileExt.Location = new System.Drawing.Point(6, 97); this.m_grpFileExt.Name = "m_grpFileExt"; this.m_grpFileExt.Size = new System.Drawing.Size(540, 85); this.m_grpFileExt.TabIndex = 1; this.m_grpFileExt.TabStop = false; this.m_grpFileExt.Text = "KDBX file association"; // // m_btnFileExtRemove // this.m_btnFileExtRemove.FlatStyle = System.Windows.Forms.FlatStyle.System; this.m_btnFileExtRemove.Location = new System.Drawing.Point(146, 52); this.m_btnFileExtRemove.Name = "m_btnFileExtRemove"; this.m_btnFileExtRemove.Size = new System.Drawing.Size(135, 23); this.m_btnFileExtRemove.TabIndex = 2; this.m_btnFileExtRemove.Text = "&Remove Association"; this.m_btnFileExtRemove.UseVisualStyleBackColor = true; this.m_btnFileExtRemove.Click += new System.EventHandler(this.OnBtnFileExtRemove); // // m_btnFileExtCreate // this.m_btnFileExtCreate.FlatStyle = System.Windows.Forms.FlatStyle.System; this.m_btnFileExtCreate.Location = new System.Drawing.Point(9, 52); this.m_btnFileExtCreate.Name = "m_btnFileExtCreate"; this.m_btnFileExtCreate.Size = new System.Drawing.Size(131, 23); this.m_btnFileExtCreate.TabIndex = 1; this.m_btnFileExtCreate.Text = "Create &Association"; this.m_btnFileExtCreate.UseVisualStyleBackColor = true; this.m_btnFileExtCreate.Click += new System.EventHandler(this.OnBtnFileExtCreate); // // m_lblFileExtHint // this.m_lblFileExtHint.Location = new System.Drawing.Point(6, 21); this.m_lblFileExtHint.Name = "m_lblFileExtHint"; this.m_lblFileExtHint.Size = new System.Drawing.Size(525, 28); this.m_lblFileExtHint.TabIndex = 0; this.m_lblFileExtHint.Text = "KDBX files can be associated with KeePass. When you double-click a KDBX file in W" + "indows Explorer, they will automatically be opened by KeePass."; // // m_grpHotKeys // this.m_grpHotKeys.Controls.Add(this.m_linkHotKeyHelp); this.m_grpHotKeys.Controls.Add(this.m_lblSelAutoTypeHotKey); this.m_grpHotKeys.Controls.Add(this.m_tbSelAutoTypeHotKey); this.m_grpHotKeys.Controls.Add(this.m_tbShowWindowHotKey); this.m_grpHotKeys.Controls.Add(this.m_lblGlobalAutoTypeHotKey); this.m_grpHotKeys.Controls.Add(this.m_lblRestoreHotKey); this.m_grpHotKeys.Controls.Add(this.m_tbGlobalAutoType); this.m_grpHotKeys.Location = new System.Drawing.Point(6, 12); this.m_grpHotKeys.Name = "m_grpHotKeys"; this.m_grpHotKeys.Size = new System.Drawing.Size(540, 77); this.m_grpHotKeys.TabIndex = 0; this.m_grpHotKeys.TabStop = false; this.m_grpHotKeys.Text = "System-wide hot keys"; // // m_linkHotKeyHelp // this.m_linkHotKeyHelp.AutoSize = true; this.m_linkHotKeyHelp.Location = new System.Drawing.Point(278, 47); this.m_linkHotKeyHelp.Name = "m_linkHotKeyHelp"; this.m_linkHotKeyHelp.Size = new System.Drawing.Size(177, 13); this.m_linkHotKeyHelp.TabIndex = 6; this.m_linkHotKeyHelp.TabStop = true; this.m_linkHotKeyHelp.Text = "Help: Creating system-wide hot keys"; this.m_linkHotKeyHelp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.OnHotKeyHelpLinkClicked); // // m_lblSelAutoTypeHotKey // this.m_lblSelAutoTypeHotKey.AutoSize = true; this.m_lblSelAutoTypeHotKey.Location = new System.Drawing.Point(278, 21); this.m_lblSelAutoTypeHotKey.Name = "m_lblSelAutoTypeHotKey"; this.m_lblSelAutoTypeHotKey.Size = new System.Drawing.Size(124, 13); this.m_lblSelAutoTypeHotKey.TabIndex = 2; this.m_lblSelAutoTypeHotKey.Text = "Auto-type selected entry:"; // // m_tbSelAutoTypeHotKey // this.m_tbSelAutoTypeHotKey.Location = new System.Drawing.Point(408, 18); this.m_tbSelAutoTypeHotKey.Name = "m_tbSelAutoTypeHotKey"; this.m_tbSelAutoTypeHotKey.Size = new System.Drawing.Size(123, 20); this.m_tbSelAutoTypeHotKey.TabIndex = 3; // // m_tbShowWindowHotKey // this.m_tbShowWindowHotKey.Location = new System.Drawing.Point(133, 44); this.m_tbShowWindowHotKey.Name = "m_tbShowWindowHotKey"; this.m_tbShowWindowHotKey.Size = new System.Drawing.Size(123, 20); this.m_tbShowWindowHotKey.TabIndex = 5; // // m_lblGlobalAutoTypeHotKey // this.m_lblGlobalAutoTypeHotKey.AutoSize = true; this.m_lblGlobalAutoTypeHotKey.Location = new System.Drawing.Point(6, 21); this.m_lblGlobalAutoTypeHotKey.Name = "m_lblGlobalAutoTypeHotKey"; this.m_lblGlobalAutoTypeHotKey.Size = new System.Drawing.Size(87, 13); this.m_lblGlobalAutoTypeHotKey.TabIndex = 0; this.m_lblGlobalAutoTypeHotKey.Text = "Global auto-type:"; // // m_lblRestoreHotKey // this.m_lblRestoreHotKey.AutoSize = true; this.m_lblRestoreHotKey.Location = new System.Drawing.Point(6, 47); this.m_lblRestoreHotKey.Name = "m_lblRestoreHotKey"; this.m_lblRestoreHotKey.Size = new System.Drawing.Size(121, 13); this.m_lblRestoreHotKey.TabIndex = 4; this.m_lblRestoreHotKey.Text = "Show KeePass window:"; // // m_tbGlobalAutoType // this.m_tbGlobalAutoType.Location = new System.Drawing.Point(133, 18); this.m_tbGlobalAutoType.Name = "m_tbGlobalAutoType"; this.m_tbGlobalAutoType.Size = new System.Drawing.Size(123, 20); this.m_tbGlobalAutoType.TabIndex = 1; // // m_tabAdvanced // this.m_tabAdvanced.Controls.Add(this.m_btnProxy); this.m_tabAdvanced.Controls.Add(this.m_lvAdvanced); this.m_tabAdvanced.Location = new System.Drawing.Point(4, 22); this.m_tabAdvanced.Name = "m_tabAdvanced"; this.m_tabAdvanced.Padding = new System.Windows.Forms.Padding(3); this.m_tabAdvanced.Size = new System.Drawing.Size(554, 311); this.m_tabAdvanced.TabIndex = 1; this.m_tabAdvanced.Text = "Advanced"; this.m_tabAdvanced.UseVisualStyleBackColor = true; // // m_btnProxy // this.m_btnProxy.Location = new System.Drawing.Point(472, 279); this.m_btnProxy.Name = "m_btnProxy"; this.m_btnProxy.Size = new System.Drawing.Size(75, 23); this.m_btnProxy.TabIndex = 1; this.m_btnProxy.Text = "&Proxy..."; this.m_btnProxy.UseVisualStyleBackColor = true; this.m_btnProxy.Click += new System.EventHandler(this.OnBtnProxy); // // m_lvAdvanced // this.m_lvAdvanced.CheckBoxes = true; this.m_lvAdvanced.FullRowSelect = true; this.m_lvAdvanced.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; this.m_lvAdvanced.Location = new System.Drawing.Point(6, 12); this.m_lvAdvanced.Name = "m_lvAdvanced"; this.m_lvAdvanced.ShowItemToolTips = true; this.m_lvAdvanced.Size = new System.Drawing.Size(540, 261); this.m_lvAdvanced.TabIndex = 0; this.m_lvAdvanced.UseCompatibleStateImageBehavior = false; this.m_lvAdvanced.View = System.Windows.Forms.View.Details; // // OptionsForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(586, 444); this.Controls.Add(this.m_tabMain); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.Controls.Add(this.m_bannerImage); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "OptionsForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Options"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); this.m_tabMain.ResumeLayout(false); this.m_tabSecurity.ResumeLayout(false); this.m_tabSecurity.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_numLockAfterGlobalTime)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numClipClearTime)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numDefaultExpireDays)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numLockAfterTime)).EndInit(); this.m_tabPolicy.ResumeLayout(false); this.m_tabPolicy.PerformLayout(); this.m_tabGui.ResumeLayout(false); this.m_tabGui.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_numMruCount)).EndInit(); this.m_tabIntegration.ResumeLayout(false); this.m_tabIntegration.PerformLayout(); this.m_grpFileExt.ResumeLayout(false); this.m_grpHotKeys.ResumeLayout(false); this.m_grpHotKeys.PerformLayout(); this.m_tabAdvanced.ResumeLayout(false); this.ResumeLayout(false); } #endregion private System.Windows.Forms.PictureBox m_bannerImage; private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.TabControl m_tabMain; private System.Windows.Forms.TabPage m_tabSecurity; private System.Windows.Forms.TabPage m_tabAdvanced; private System.Windows.Forms.TabPage m_tabGui; private System.Windows.Forms.ComboBox m_cmbBannerStyle; private System.Windows.Forms.Label m_lblBannerStyle; private System.Windows.Forms.CheckBox m_cbLockAfterTime; private System.Windows.Forms.NumericUpDown m_numLockAfterTime; private System.Windows.Forms.TabPage m_tabPolicy; private System.Windows.Forms.LinkLabel m_linkPolicyInfo; private System.Windows.Forms.Label m_lblPolicyMore; private System.Windows.Forms.Label m_lblPolicyRestart; private System.Windows.Forms.Label m_lblPolicyIntro; private KeePass.UI.CustomListViewEx m_lvPolicy; private KeePass.UI.CustomListViewEx m_lvGuiOptions; private System.Windows.Forms.Button m_btnSelFont; private System.Windows.Forms.TabPage m_tabIntegration; private System.Windows.Forms.TextBox m_tbGlobalAutoType; private System.Windows.Forms.Label m_lblGlobalAutoTypeHotKey; private System.Windows.Forms.GroupBox m_grpHotKeys; private System.Windows.Forms.TextBox m_tbShowWindowHotKey; private System.Windows.Forms.Label m_lblRestoreHotKey; private System.Windows.Forms.CheckBox m_cbDefaultExpireDays; private System.Windows.Forms.NumericUpDown m_numDefaultExpireDays; private System.Windows.Forms.NumericUpDown m_numClipClearTime; private System.Windows.Forms.CheckBox m_cbClipClearTime; private System.Windows.Forms.Button m_btnFileExtRemove; private System.Windows.Forms.GroupBox m_grpFileExt; private System.Windows.Forms.Button m_btnFileExtCreate; private System.Windows.Forms.Label m_lblFileExtHint; private System.Windows.Forms.CheckBox m_cbAutoRun; private System.Windows.Forms.CheckBox m_cbSingleClickTrayAction; private KeePass.UI.CustomListViewEx m_lvAdvanced; private KeePass.UI.CustomListViewEx m_lvSecurityOptions; private System.Windows.Forms.NumericUpDown m_numMruCount; private System.Windows.Forms.Label m_lblMruCount; private System.Windows.Forms.Button m_btnSchemeOverrides; private System.Windows.Forms.Label m_lblSelAutoTypeHotKey; private System.Windows.Forms.TextBox m_tbSelAutoTypeHotKey; private System.Windows.Forms.Button m_btnSelPwFont; private System.Windows.Forms.LinkLabel m_linkHotKeyHelp; private System.Windows.Forms.CheckBox m_cbLockAfterGlobalTime; private System.Windows.Forms.NumericUpDown m_numLockAfterGlobalTime; private System.Windows.Forms.Button m_btnProxy; private System.Windows.Forms.ComboBox m_cmbMenuStyle; private System.Windows.Forms.Label m_lblMenuStyle; } }KeePass/Forms/DatabaseSettingsForm.Designer.cs0000664000000000000000000010663012507243340020344 0ustar rootrootnamespace KeePass.Forms { partial class DatabaseSettingsForm { /// /// Erforderliche Designervariable. /// private System.ComponentModel.IContainer components = null; /// /// Verwendete Ressourcen bereinigen. /// /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Vom Windows Form-Designer generierter Code /// /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_grpEncAlgo = new System.Windows.Forms.GroupBox(); this.m_lblEncAlgoDesc = new System.Windows.Forms.Label(); this.m_cmbEncAlgo = new System.Windows.Forms.ComboBox(); this.m_lblTransIntro = new System.Windows.Forms.Label(); this.m_lblTransNum = new System.Windows.Forms.Label(); this.m_lblTransInfo = new System.Windows.Forms.Label(); this.m_grpKeyTrans = new System.Windows.Forms.GroupBox(); this.m_lnkCompute1SecDelay = new System.Windows.Forms.LinkLabel(); this.m_numEncRounds = new System.Windows.Forms.NumericUpDown(); this.m_btnHelp = new System.Windows.Forms.Button(); this.m_ttRect = new System.Windows.Forms.ToolTip(this.components); this.m_lblCompressionIntro = new System.Windows.Forms.Label(); this.m_tabMain = new System.Windows.Forms.TabControl(); this.m_tabGeneral = new System.Windows.Forms.TabPage(); this.m_cbColor = new System.Windows.Forms.CheckBox(); this.m_btnColor = new System.Windows.Forms.Button(); this.m_tbDefaultUser = new System.Windows.Forms.TextBox(); this.m_lblDefaultUser = new System.Windows.Forms.Label(); this.m_tbDbDesc = new KeePass.UI.PromptedTextBox(); this.m_lblDbDesc = new System.Windows.Forms.Label(); this.m_tbDbName = new KeePass.UI.PromptedTextBox(); this.m_lblDbName = new System.Windows.Forms.Label(); this.m_tabSecurity = new System.Windows.Forms.TabPage(); this.m_lblSecIntro = new System.Windows.Forms.Label(); this.m_tabCompression = new System.Windows.Forms.TabPage(); this.m_lblHeaderCpAlgo = new System.Windows.Forms.Label(); this.m_lblCpGZipPerf = new System.Windows.Forms.Label(); this.m_lblCpGZipCp = new System.Windows.Forms.Label(); this.m_lblCpNonePerf = new System.Windows.Forms.Label(); this.m_lblCpNoneCp = new System.Windows.Forms.Label(); this.m_lblHeaderPerf = new System.Windows.Forms.Label(); this.m_lblHeaderCp = new System.Windows.Forms.Label(); this.m_rbGZip = new System.Windows.Forms.RadioButton(); this.m_rbNone = new System.Windows.Forms.RadioButton(); this.m_tabRecycleBin = new System.Windows.Forms.TabPage(); this.m_cmbRecycleBin = new System.Windows.Forms.ComboBox(); this.m_lblRecycleBinGroup = new System.Windows.Forms.Label(); this.m_lblRecycleBinInfo = new System.Windows.Forms.Label(); this.m_cbRecycleBin = new System.Windows.Forms.CheckBox(); this.m_tabAdvanced = new System.Windows.Forms.TabPage(); this.m_grpHistory = new System.Windows.Forms.GroupBox(); this.m_numHistoryMaxSize = new System.Windows.Forms.NumericUpDown(); this.m_numHistoryMaxItems = new System.Windows.Forms.NumericUpDown(); this.m_cbHistoryMaxSize = new System.Windows.Forms.CheckBox(); this.m_cbHistoryMaxItems = new System.Windows.Forms.CheckBox(); this.m_grpMasterKey = new System.Windows.Forms.GroupBox(); this.m_cbKeyForce = new System.Windows.Forms.CheckBox(); this.m_cbKeyRec = new System.Windows.Forms.CheckBox(); this.m_numKeyForceDays = new System.Windows.Forms.NumericUpDown(); this.m_numKeyRecDays = new System.Windows.Forms.NumericUpDown(); this.m_grpTemplates = new System.Windows.Forms.GroupBox(); this.m_cmbEntryTemplates = new System.Windows.Forms.ComboBox(); this.m_lblTemplatesHint = new System.Windows.Forms.Label(); this.m_lblEntryTemplatesGroup = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); this.m_grpEncAlgo.SuspendLayout(); this.m_grpKeyTrans.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_numEncRounds)).BeginInit(); this.m_tabMain.SuspendLayout(); this.m_tabGeneral.SuspendLayout(); this.m_tabSecurity.SuspendLayout(); this.m_tabCompression.SuspendLayout(); this.m_tabRecycleBin.SuspendLayout(); this.m_tabAdvanced.SuspendLayout(); this.m_grpHistory.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_numHistoryMaxSize)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numHistoryMaxItems)).BeginInit(); this.m_grpMasterKey.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_numKeyForceDays)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numKeyRecDays)).BeginInit(); this.m_grpTemplates.SuspendLayout(); this.SuspendLayout(); // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(486, 60); this.m_bannerImage.TabIndex = 0; this.m_bannerImage.TabStop = false; // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(318, 399); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 1; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(399, 399); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 2; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_grpEncAlgo // this.m_grpEncAlgo.Controls.Add(this.m_lblEncAlgoDesc); this.m_grpEncAlgo.Controls.Add(this.m_cmbEncAlgo); this.m_grpEncAlgo.Location = new System.Drawing.Point(6, 37); this.m_grpEncAlgo.Name = "m_grpEncAlgo"; this.m_grpEncAlgo.Size = new System.Drawing.Size(440, 53); this.m_grpEncAlgo.TabIndex = 1; this.m_grpEncAlgo.TabStop = false; this.m_grpEncAlgo.Text = "Encryption"; // // m_lblEncAlgoDesc // this.m_lblEncAlgoDesc.AutoSize = true; this.m_lblEncAlgoDesc.Location = new System.Drawing.Point(6, 22); this.m_lblEncAlgoDesc.Name = "m_lblEncAlgoDesc"; this.m_lblEncAlgoDesc.Size = new System.Drawing.Size(169, 13); this.m_lblEncAlgoDesc.TabIndex = 0; this.m_lblEncAlgoDesc.Text = "Database file encryption algorithm:"; // // m_cmbEncAlgo // this.m_cmbEncAlgo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbEncAlgo.FormattingEnabled = true; this.m_cmbEncAlgo.Location = new System.Drawing.Point(211, 19); this.m_cmbEncAlgo.Name = "m_cmbEncAlgo"; this.m_cmbEncAlgo.Size = new System.Drawing.Size(219, 21); this.m_cmbEncAlgo.TabIndex = 1; // // m_lblTransIntro // this.m_lblTransIntro.Location = new System.Drawing.Point(6, 16); this.m_lblTransIntro.Name = "m_lblTransIntro"; this.m_lblTransIntro.Size = new System.Drawing.Size(428, 40); this.m_lblTransIntro.TabIndex = 0; this.m_lblTransIntro.Text = "The composite master key is transformed several times before being used as encryp" + "tion key for the database. This adds a constant time factor and makes dictionary" + " and guessing attacks harder."; // // m_lblTransNum // this.m_lblTransNum.AutoSize = true; this.m_lblTransNum.Location = new System.Drawing.Point(6, 63); this.m_lblTransNum.Name = "m_lblTransNum"; this.m_lblTransNum.Size = new System.Drawing.Size(183, 13); this.m_lblTransNum.TabIndex = 1; this.m_lblTransNum.Text = "Number of key transformation rounds:"; // // m_lblTransInfo // this.m_lblTransInfo.Location = new System.Drawing.Point(6, 103); this.m_lblTransInfo.Name = "m_lblTransInfo"; this.m_lblTransInfo.Size = new System.Drawing.Size(428, 28); this.m_lblTransInfo.TabIndex = 4; this.m_lblTransInfo.Text = "The higher this number the harder are dictionary attacks. But also database loadi" + "ng/saving takes more time."; // // m_grpKeyTrans // this.m_grpKeyTrans.Controls.Add(this.m_lnkCompute1SecDelay); this.m_grpKeyTrans.Controls.Add(this.m_numEncRounds); this.m_grpKeyTrans.Controls.Add(this.m_lblTransIntro); this.m_grpKeyTrans.Controls.Add(this.m_lblTransInfo); this.m_grpKeyTrans.Controls.Add(this.m_lblTransNum); this.m_grpKeyTrans.Location = new System.Drawing.Point(6, 96); this.m_grpKeyTrans.Name = "m_grpKeyTrans"; this.m_grpKeyTrans.Size = new System.Drawing.Size(440, 140); this.m_grpKeyTrans.TabIndex = 2; this.m_grpKeyTrans.TabStop = false; this.m_grpKeyTrans.Text = "Key transformation"; // // m_lnkCompute1SecDelay // this.m_lnkCompute1SecDelay.AutoSize = true; this.m_lnkCompute1SecDelay.Location = new System.Drawing.Point(208, 84); this.m_lnkCompute1SecDelay.Name = "m_lnkCompute1SecDelay"; this.m_lnkCompute1SecDelay.Size = new System.Drawing.Size(79, 13); this.m_lnkCompute1SecDelay.TabIndex = 3; this.m_lnkCompute1SecDelay.TabStop = true; this.m_lnkCompute1SecDelay.Text = "1 second delay"; this.m_lnkCompute1SecDelay.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.OnLinkClicked1SecondDelayRounds); // // m_numEncRounds // this.m_numEncRounds.Location = new System.Drawing.Point(211, 61); this.m_numEncRounds.Name = "m_numEncRounds"; this.m_numEncRounds.Size = new System.Drawing.Size(219, 20); this.m_numEncRounds.TabIndex = 2; this.m_numEncRounds.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; // // m_btnHelp // this.m_btnHelp.Location = new System.Drawing.Point(11, 399); this.m_btnHelp.Name = "m_btnHelp"; this.m_btnHelp.Size = new System.Drawing.Size(75, 23); this.m_btnHelp.TabIndex = 3; this.m_btnHelp.Text = "&Help"; this.m_btnHelp.UseVisualStyleBackColor = true; this.m_btnHelp.Click += new System.EventHandler(this.OnBtnHelp); // // m_ttRect // this.m_ttRect.AutomaticDelay = 250; this.m_ttRect.AutoPopDelay = 2500; this.m_ttRect.InitialDelay = 250; this.m_ttRect.ReshowDelay = 50; // // m_lblCompressionIntro // this.m_lblCompressionIntro.Location = new System.Drawing.Point(3, 12); this.m_lblCompressionIntro.Name = "m_lblCompressionIntro"; this.m_lblCompressionIntro.Size = new System.Drawing.Size(435, 15); this.m_lblCompressionIntro.TabIndex = 0; this.m_lblCompressionIntro.Text = "Data compression reduces the size of the database."; // // m_tabMain // this.m_tabMain.Controls.Add(this.m_tabGeneral); this.m_tabMain.Controls.Add(this.m_tabSecurity); this.m_tabMain.Controls.Add(this.m_tabCompression); this.m_tabMain.Controls.Add(this.m_tabRecycleBin); this.m_tabMain.Controls.Add(this.m_tabAdvanced); this.m_tabMain.Location = new System.Drawing.Point(12, 67); this.m_tabMain.Name = "m_tabMain"; this.m_tabMain.SelectedIndex = 0; this.m_tabMain.Size = new System.Drawing.Size(463, 320); this.m_tabMain.TabIndex = 0; // // m_tabGeneral // this.m_tabGeneral.Controls.Add(this.m_cbColor); this.m_tabGeneral.Controls.Add(this.m_btnColor); this.m_tabGeneral.Controls.Add(this.m_tbDefaultUser); this.m_tabGeneral.Controls.Add(this.m_lblDefaultUser); this.m_tabGeneral.Controls.Add(this.m_tbDbDesc); this.m_tabGeneral.Controls.Add(this.m_lblDbDesc); this.m_tabGeneral.Controls.Add(this.m_tbDbName); this.m_tabGeneral.Controls.Add(this.m_lblDbName); this.m_tabGeneral.Location = new System.Drawing.Point(4, 22); this.m_tabGeneral.Name = "m_tabGeneral"; this.m_tabGeneral.Padding = new System.Windows.Forms.Padding(3); this.m_tabGeneral.Size = new System.Drawing.Size(455, 294); this.m_tabGeneral.TabIndex = 0; this.m_tabGeneral.Text = "General"; this.m_tabGeneral.UseVisualStyleBackColor = true; // // m_cbColor // this.m_cbColor.AutoSize = true; this.m_cbColor.Location = new System.Drawing.Point(6, 269); this.m_cbColor.Name = "m_cbColor"; this.m_cbColor.Size = new System.Drawing.Size(137, 17); this.m_cbColor.TabIndex = 6; this.m_cbColor.Text = "Custom database color:"; this.m_cbColor.UseVisualStyleBackColor = true; this.m_cbColor.CheckedChanged += new System.EventHandler(this.OnColorCheckedChanged); // // m_btnColor // this.m_btnColor.Location = new System.Drawing.Point(176, 265); this.m_btnColor.Name = "m_btnColor"; this.m_btnColor.Size = new System.Drawing.Size(48, 23); this.m_btnColor.TabIndex = 7; this.m_btnColor.UseVisualStyleBackColor = true; this.m_btnColor.Click += new System.EventHandler(this.OnBtnColor); // // m_tbDefaultUser // this.m_tbDefaultUser.Location = new System.Drawing.Point(177, 239); this.m_tbDefaultUser.Name = "m_tbDefaultUser"; this.m_tbDefaultUser.Size = new System.Drawing.Size(269, 20); this.m_tbDefaultUser.TabIndex = 5; // // m_lblDefaultUser // this.m_lblDefaultUser.AutoSize = true; this.m_lblDefaultUser.Location = new System.Drawing.Point(3, 242); this.m_lblDefaultUser.Name = "m_lblDefaultUser"; this.m_lblDefaultUser.Size = new System.Drawing.Size(168, 13); this.m_lblDefaultUser.TabIndex = 4; this.m_lblDefaultUser.Text = "Default user name for new entries:"; // // m_tbDbDesc // this.m_tbDbDesc.AcceptsReturn = true; this.m_tbDbDesc.Location = new System.Drawing.Point(6, 57); this.m_tbDbDesc.Multiline = true; this.m_tbDbDesc.Name = "m_tbDbDesc"; this.m_tbDbDesc.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.m_tbDbDesc.Size = new System.Drawing.Size(440, 176); this.m_tbDbDesc.TabIndex = 3; // // m_lblDbDesc // this.m_lblDbDesc.AutoSize = true; this.m_lblDbDesc.Location = new System.Drawing.Point(3, 41); this.m_lblDbDesc.Name = "m_lblDbDesc"; this.m_lblDbDesc.Size = new System.Drawing.Size(110, 13); this.m_lblDbDesc.TabIndex = 2; this.m_lblDbDesc.Text = "Database description:"; // // m_tbDbName // this.m_tbDbName.Location = new System.Drawing.Point(94, 9); this.m_tbDbName.Name = "m_tbDbName"; this.m_tbDbName.Size = new System.Drawing.Size(352, 20); this.m_tbDbName.TabIndex = 0; // // m_lblDbName // this.m_lblDbName.AutoSize = true; this.m_lblDbName.Location = new System.Drawing.Point(3, 12); this.m_lblDbName.Name = "m_lblDbName"; this.m_lblDbName.Size = new System.Drawing.Size(85, 13); this.m_lblDbName.TabIndex = 1; this.m_lblDbName.Text = "Database name:"; // // m_tabSecurity // this.m_tabSecurity.Controls.Add(this.m_lblSecIntro); this.m_tabSecurity.Controls.Add(this.m_grpEncAlgo); this.m_tabSecurity.Controls.Add(this.m_grpKeyTrans); this.m_tabSecurity.Location = new System.Drawing.Point(4, 22); this.m_tabSecurity.Name = "m_tabSecurity"; this.m_tabSecurity.Padding = new System.Windows.Forms.Padding(3); this.m_tabSecurity.Size = new System.Drawing.Size(455, 294); this.m_tabSecurity.TabIndex = 1; this.m_tabSecurity.Text = "Security"; this.m_tabSecurity.UseVisualStyleBackColor = true; // // m_lblSecIntro // this.m_lblSecIntro.AutoSize = true; this.m_lblSecIntro.Location = new System.Drawing.Point(3, 12); this.m_lblSecIntro.Name = "m_lblSecIntro"; this.m_lblSecIntro.Size = new System.Drawing.Size(277, 13); this.m_lblSecIntro.TabIndex = 0; this.m_lblSecIntro.Text = "On this page you can configure file-level security settings."; // // m_tabCompression // this.m_tabCompression.Controls.Add(this.m_lblHeaderCpAlgo); this.m_tabCompression.Controls.Add(this.m_lblCpGZipPerf); this.m_tabCompression.Controls.Add(this.m_lblCpGZipCp); this.m_tabCompression.Controls.Add(this.m_lblCpNonePerf); this.m_tabCompression.Controls.Add(this.m_lblCpNoneCp); this.m_tabCompression.Controls.Add(this.m_lblHeaderPerf); this.m_tabCompression.Controls.Add(this.m_lblHeaderCp); this.m_tabCompression.Controls.Add(this.m_rbGZip); this.m_tabCompression.Controls.Add(this.m_rbNone); this.m_tabCompression.Controls.Add(this.m_lblCompressionIntro); this.m_tabCompression.Location = new System.Drawing.Point(4, 22); this.m_tabCompression.Name = "m_tabCompression"; this.m_tabCompression.Size = new System.Drawing.Size(455, 294); this.m_tabCompression.TabIndex = 2; this.m_tabCompression.Text = "Compression"; this.m_tabCompression.UseVisualStyleBackColor = true; // // m_lblHeaderCpAlgo // this.m_lblHeaderCpAlgo.AutoSize = true; this.m_lblHeaderCpAlgo.Location = new System.Drawing.Point(23, 56); this.m_lblHeaderCpAlgo.Name = "m_lblHeaderCpAlgo"; this.m_lblHeaderCpAlgo.Size = new System.Drawing.Size(50, 13); this.m_lblHeaderCpAlgo.TabIndex = 1; this.m_lblHeaderCpAlgo.Text = "Algorithm"; // // m_lblCpGZipPerf // this.m_lblCpGZipPerf.AutoSize = true; this.m_lblCpGZipPerf.Location = new System.Drawing.Point(189, 101); this.m_lblCpGZipPerf.Name = "m_lblCpGZipPerf"; this.m_lblCpGZipPerf.Size = new System.Drawing.Size(55, 13); this.m_lblCpGZipPerf.TabIndex = 9; this.m_lblCpGZipPerf.Text = "Very good"; // // m_lblCpGZipCp // this.m_lblCpGZipCp.AutoSize = true; this.m_lblCpGZipCp.Location = new System.Drawing.Point(91, 101); this.m_lblCpGZipCp.Name = "m_lblCpGZipCp"; this.m_lblCpGZipCp.Size = new System.Drawing.Size(52, 13); this.m_lblCpGZipCp.TabIndex = 8; this.m_lblCpGZipCp.Text = "Moderate"; // // m_lblCpNonePerf // this.m_lblCpNonePerf.AutoSize = true; this.m_lblCpNonePerf.Location = new System.Drawing.Point(189, 78); this.m_lblCpNonePerf.Name = "m_lblCpNonePerf"; this.m_lblCpNonePerf.Size = new System.Drawing.Size(52, 13); this.m_lblCpNonePerf.TabIndex = 6; this.m_lblCpNonePerf.Text = "Moderate"; // // m_lblCpNoneCp // this.m_lblCpNoneCp.AutoSize = true; this.m_lblCpNoneCp.Location = new System.Drawing.Point(91, 78); this.m_lblCpNoneCp.Name = "m_lblCpNoneCp"; this.m_lblCpNoneCp.Size = new System.Drawing.Size(83, 13); this.m_lblCpNoneCp.TabIndex = 5; this.m_lblCpNoneCp.Text = "No compression"; // // m_lblHeaderPerf // this.m_lblHeaderPerf.AutoSize = true; this.m_lblHeaderPerf.Location = new System.Drawing.Point(189, 56); this.m_lblHeaderPerf.Name = "m_lblHeaderPerf"; this.m_lblHeaderPerf.Size = new System.Drawing.Size(67, 13); this.m_lblHeaderPerf.TabIndex = 3; this.m_lblHeaderPerf.Text = "Performance"; // // m_lblHeaderCp // this.m_lblHeaderCp.AutoSize = true; this.m_lblHeaderCp.Location = new System.Drawing.Point(91, 56); this.m_lblHeaderCp.Name = "m_lblHeaderCp"; this.m_lblHeaderCp.Size = new System.Drawing.Size(67, 13); this.m_lblHeaderCp.TabIndex = 2; this.m_lblHeaderCp.Text = "Compression"; // // m_rbGZip // this.m_rbGZip.AutoSize = true; this.m_rbGZip.Location = new System.Drawing.Point(6, 99); this.m_rbGZip.Name = "m_rbGZip"; this.m_rbGZip.Size = new System.Drawing.Size(48, 17); this.m_rbGZip.TabIndex = 7; this.m_rbGZip.TabStop = true; this.m_rbGZip.Text = "GZip"; this.m_rbGZip.UseVisualStyleBackColor = true; // // m_rbNone // this.m_rbNone.AutoSize = true; this.m_rbNone.Location = new System.Drawing.Point(6, 76); this.m_rbNone.Name = "m_rbNone"; this.m_rbNone.Size = new System.Drawing.Size(51, 17); this.m_rbNone.TabIndex = 4; this.m_rbNone.TabStop = true; this.m_rbNone.Text = "None"; this.m_rbNone.UseVisualStyleBackColor = true; // // m_tabRecycleBin // this.m_tabRecycleBin.Controls.Add(this.m_cmbRecycleBin); this.m_tabRecycleBin.Controls.Add(this.m_lblRecycleBinGroup); this.m_tabRecycleBin.Controls.Add(this.m_lblRecycleBinInfo); this.m_tabRecycleBin.Controls.Add(this.m_cbRecycleBin); this.m_tabRecycleBin.Location = new System.Drawing.Point(4, 22); this.m_tabRecycleBin.Name = "m_tabRecycleBin"; this.m_tabRecycleBin.Padding = new System.Windows.Forms.Padding(3); this.m_tabRecycleBin.Size = new System.Drawing.Size(455, 294); this.m_tabRecycleBin.TabIndex = 4; this.m_tabRecycleBin.Text = "Recycle Bin"; this.m_tabRecycleBin.UseVisualStyleBackColor = true; // // m_cmbRecycleBin // this.m_cmbRecycleBin.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbRecycleBin.FormattingEnabled = true; this.m_cmbRecycleBin.Location = new System.Drawing.Point(6, 99); this.m_cmbRecycleBin.Name = "m_cmbRecycleBin"; this.m_cmbRecycleBin.Size = new System.Drawing.Size(440, 21); this.m_cmbRecycleBin.TabIndex = 3; // // m_lblRecycleBinGroup // this.m_lblRecycleBinGroup.AutoSize = true; this.m_lblRecycleBinGroup.Location = new System.Drawing.Point(3, 83); this.m_lblRecycleBinGroup.Name = "m_lblRecycleBinGroup"; this.m_lblRecycleBinGroup.Size = new System.Drawing.Size(96, 13); this.m_lblRecycleBinGroup.TabIndex = 2; this.m_lblRecycleBinGroup.Text = "Recycle bin group:"; // // m_lblRecycleBinInfo // this.m_lblRecycleBinInfo.Location = new System.Drawing.Point(22, 32); this.m_lblRecycleBinInfo.Name = "m_lblRecycleBinInfo"; this.m_lblRecycleBinInfo.Size = new System.Drawing.Size(424, 40); this.m_lblRecycleBinInfo.TabIndex = 1; this.m_lblRecycleBinInfo.Text = "If this option is enabled, KeePass moves entries/groups to the recycle bin group " + "instead of deleting them. Deleting an entry/group from the recycle bin will perm" + "anently remove it."; // // m_cbRecycleBin // this.m_cbRecycleBin.AutoSize = true; this.m_cbRecycleBin.Location = new System.Drawing.Point(6, 12); this.m_cbRecycleBin.Name = "m_cbRecycleBin"; this.m_cbRecycleBin.Size = new System.Drawing.Size(108, 17); this.m_cbRecycleBin.TabIndex = 0; this.m_cbRecycleBin.Text = "&Use a recycle bin"; this.m_cbRecycleBin.UseVisualStyleBackColor = true; // // m_tabAdvanced // this.m_tabAdvanced.Controls.Add(this.m_grpHistory); this.m_tabAdvanced.Controls.Add(this.m_grpMasterKey); this.m_tabAdvanced.Controls.Add(this.m_grpTemplates); this.m_tabAdvanced.Location = new System.Drawing.Point(4, 22); this.m_tabAdvanced.Name = "m_tabAdvanced"; this.m_tabAdvanced.Size = new System.Drawing.Size(455, 294); this.m_tabAdvanced.TabIndex = 5; this.m_tabAdvanced.Text = "Advanced"; this.m_tabAdvanced.UseVisualStyleBackColor = true; // // m_grpHistory // this.m_grpHistory.Controls.Add(this.m_numHistoryMaxSize); this.m_grpHistory.Controls.Add(this.m_numHistoryMaxItems); this.m_grpHistory.Controls.Add(this.m_cbHistoryMaxSize); this.m_grpHistory.Controls.Add(this.m_cbHistoryMaxItems); this.m_grpHistory.Location = new System.Drawing.Point(6, 117); this.m_grpHistory.Name = "m_grpHistory"; this.m_grpHistory.Size = new System.Drawing.Size(440, 75); this.m_grpHistory.TabIndex = 1; this.m_grpHistory.TabStop = false; this.m_grpHistory.Text = "Automatic entry history maintenance"; // // m_numHistoryMaxSize // this.m_numHistoryMaxSize.Location = new System.Drawing.Point(349, 43); this.m_numHistoryMaxSize.Name = "m_numHistoryMaxSize"; this.m_numHistoryMaxSize.Size = new System.Drawing.Size(81, 20); this.m_numHistoryMaxSize.TabIndex = 3; this.m_numHistoryMaxSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; // // m_numHistoryMaxItems // this.m_numHistoryMaxItems.Location = new System.Drawing.Point(349, 18); this.m_numHistoryMaxItems.Name = "m_numHistoryMaxItems"; this.m_numHistoryMaxItems.Size = new System.Drawing.Size(81, 20); this.m_numHistoryMaxItems.TabIndex = 1; this.m_numHistoryMaxItems.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; // // m_cbHistoryMaxSize // this.m_cbHistoryMaxSize.AutoSize = true; this.m_cbHistoryMaxSize.Location = new System.Drawing.Point(9, 44); this.m_cbHistoryMaxSize.Name = "m_cbHistoryMaxSize"; this.m_cbHistoryMaxSize.Size = new System.Drawing.Size(173, 17); this.m_cbHistoryMaxSize.TabIndex = 2; this.m_cbHistoryMaxSize.Text = "Limit history size per entry (MB):"; this.m_cbHistoryMaxSize.UseVisualStyleBackColor = true; this.m_cbHistoryMaxSize.CheckedChanged += new System.EventHandler(this.OnHistoryMaxSizeCheckedChanged); // // m_cbHistoryMaxItems // this.m_cbHistoryMaxItems.AutoSize = true; this.m_cbHistoryMaxItems.Location = new System.Drawing.Point(9, 19); this.m_cbHistoryMaxItems.Name = "m_cbHistoryMaxItems"; this.m_cbHistoryMaxItems.Size = new System.Drawing.Size(204, 17); this.m_cbHistoryMaxItems.TabIndex = 0; this.m_cbHistoryMaxItems.Text = "Limit number of history items per entry:"; this.m_cbHistoryMaxItems.UseVisualStyleBackColor = true; this.m_cbHistoryMaxItems.CheckedChanged += new System.EventHandler(this.OnHistoryMaxItemsCheckedChanged); // // m_grpMasterKey // this.m_grpMasterKey.Controls.Add(this.m_cbKeyForce); this.m_grpMasterKey.Controls.Add(this.m_cbKeyRec); this.m_grpMasterKey.Controls.Add(this.m_numKeyForceDays); this.m_grpMasterKey.Controls.Add(this.m_numKeyRecDays); this.m_grpMasterKey.Location = new System.Drawing.Point(6, 198); this.m_grpMasterKey.Name = "m_grpMasterKey"; this.m_grpMasterKey.Size = new System.Drawing.Size(440, 75); this.m_grpMasterKey.TabIndex = 2; this.m_grpMasterKey.TabStop = false; this.m_grpMasterKey.Text = "Master key"; // // m_cbKeyForce // this.m_cbKeyForce.AutoSize = true; this.m_cbKeyForce.Location = new System.Drawing.Point(9, 44); this.m_cbKeyForce.Name = "m_cbKeyForce"; this.m_cbKeyForce.Size = new System.Drawing.Size(172, 17); this.m_cbKeyForce.TabIndex = 2; this.m_cbKeyForce.Text = "Force changing the key (days):"; this.m_cbKeyForce.UseVisualStyleBackColor = true; this.m_cbKeyForce.CheckedChanged += new System.EventHandler(this.OnKeyForceCheckedChanged); // // m_cbKeyRec // this.m_cbKeyRec.AutoSize = true; this.m_cbKeyRec.Location = new System.Drawing.Point(9, 19); this.m_cbKeyRec.Name = "m_cbKeyRec"; this.m_cbKeyRec.Size = new System.Drawing.Size(205, 17); this.m_cbKeyRec.TabIndex = 0; this.m_cbKeyRec.Text = "Recommend changing the key (days):"; this.m_cbKeyRec.UseVisualStyleBackColor = true; this.m_cbKeyRec.CheckedChanged += new System.EventHandler(this.OnKeyRecCheckedChanged); // // m_numKeyForceDays // this.m_numKeyForceDays.Location = new System.Drawing.Point(349, 43); this.m_numKeyForceDays.Name = "m_numKeyForceDays"; this.m_numKeyForceDays.Size = new System.Drawing.Size(81, 20); this.m_numKeyForceDays.TabIndex = 3; this.m_numKeyForceDays.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; // // m_numKeyRecDays // this.m_numKeyRecDays.Location = new System.Drawing.Point(349, 18); this.m_numKeyRecDays.Name = "m_numKeyRecDays"; this.m_numKeyRecDays.Size = new System.Drawing.Size(81, 20); this.m_numKeyRecDays.TabIndex = 1; this.m_numKeyRecDays.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; // // m_grpTemplates // this.m_grpTemplates.Controls.Add(this.m_cmbEntryTemplates); this.m_grpTemplates.Controls.Add(this.m_lblTemplatesHint); this.m_grpTemplates.Controls.Add(this.m_lblEntryTemplatesGroup); this.m_grpTemplates.Location = new System.Drawing.Point(6, 7); this.m_grpTemplates.Name = "m_grpTemplates"; this.m_grpTemplates.Size = new System.Drawing.Size(440, 104); this.m_grpTemplates.TabIndex = 0; this.m_grpTemplates.TabStop = false; this.m_grpTemplates.Text = "Templates"; // // m_cmbEntryTemplates // this.m_cmbEntryTemplates.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbEntryTemplates.FormattingEnabled = true; this.m_cmbEntryTemplates.Location = new System.Drawing.Point(9, 35); this.m_cmbEntryTemplates.Name = "m_cmbEntryTemplates"; this.m_cmbEntryTemplates.Size = new System.Drawing.Size(421, 21); this.m_cmbEntryTemplates.TabIndex = 1; // // m_lblTemplatesHint // this.m_lblTemplatesHint.Location = new System.Drawing.Point(6, 68); this.m_lblTemplatesHint.Name = "m_lblTemplatesHint"; this.m_lblTemplatesHint.Size = new System.Drawing.Size(424, 28); this.m_lblTemplatesHint.TabIndex = 2; this.m_lblTemplatesHint.Text = "Click the drop-down arrow of the \'Add Entry\' toolbar button in the main window to" + " create a new entry based on a template in the group above."; // // m_lblEntryTemplatesGroup // this.m_lblEntryTemplatesGroup.AutoSize = true; this.m_lblEntryTemplatesGroup.Location = new System.Drawing.Point(6, 19); this.m_lblEntryTemplatesGroup.Name = "m_lblEntryTemplatesGroup"; this.m_lblEntryTemplatesGroup.Size = new System.Drawing.Size(112, 13); this.m_lblEntryTemplatesGroup.TabIndex = 0; this.m_lblEntryTemplatesGroup.Text = "Entry templates group:"; // // DatabaseSettingsForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(486, 434); this.Controls.Add(this.m_tabMain); this.Controls.Add(this.m_btnHelp); this.Controls.Add(this.m_bannerImage); this.Controls.Add(this.m_btnOK); this.Controls.Add(this.m_btnCancel); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "DatabaseSettingsForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = ""; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); this.m_grpEncAlgo.ResumeLayout(false); this.m_grpEncAlgo.PerformLayout(); this.m_grpKeyTrans.ResumeLayout(false); this.m_grpKeyTrans.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_numEncRounds)).EndInit(); this.m_tabMain.ResumeLayout(false); this.m_tabGeneral.ResumeLayout(false); this.m_tabGeneral.PerformLayout(); this.m_tabSecurity.ResumeLayout(false); this.m_tabSecurity.PerformLayout(); this.m_tabCompression.ResumeLayout(false); this.m_tabCompression.PerformLayout(); this.m_tabRecycleBin.ResumeLayout(false); this.m_tabRecycleBin.PerformLayout(); this.m_tabAdvanced.ResumeLayout(false); this.m_grpHistory.ResumeLayout(false); this.m_grpHistory.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_numHistoryMaxSize)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numHistoryMaxItems)).EndInit(); this.m_grpMasterKey.ResumeLayout(false); this.m_grpMasterKey.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_numKeyForceDays)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numKeyRecDays)).EndInit(); this.m_grpTemplates.ResumeLayout(false); this.m_grpTemplates.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.PictureBox m_bannerImage; private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.GroupBox m_grpEncAlgo; private System.Windows.Forms.ComboBox m_cmbEncAlgo; private System.Windows.Forms.Label m_lblEncAlgoDesc; private System.Windows.Forms.Label m_lblTransNum; private System.Windows.Forms.Label m_lblTransIntro; private System.Windows.Forms.Label m_lblTransInfo; private System.Windows.Forms.GroupBox m_grpKeyTrans; private System.Windows.Forms.NumericUpDown m_numEncRounds; private System.Windows.Forms.Button m_btnHelp; private System.Windows.Forms.LinkLabel m_lnkCompute1SecDelay; private System.Windows.Forms.ToolTip m_ttRect; private System.Windows.Forms.Label m_lblCompressionIntro; private System.Windows.Forms.TabControl m_tabMain; private System.Windows.Forms.TabPage m_tabGeneral; private System.Windows.Forms.TabPage m_tabSecurity; private System.Windows.Forms.TabPage m_tabCompression; private KeePass.UI.PromptedTextBox m_tbDbDesc; private System.Windows.Forms.Label m_lblDbDesc; private KeePass.UI.PromptedTextBox m_tbDbName; private System.Windows.Forms.Label m_lblDbName; private System.Windows.Forms.Label m_lblSecIntro; private System.Windows.Forms.RadioButton m_rbGZip; private System.Windows.Forms.RadioButton m_rbNone; private System.Windows.Forms.Label m_lblCpNonePerf; private System.Windows.Forms.Label m_lblCpNoneCp; private System.Windows.Forms.Label m_lblHeaderPerf; private System.Windows.Forms.Label m_lblHeaderCp; private System.Windows.Forms.Label m_lblCpGZipPerf; private System.Windows.Forms.Label m_lblCpGZipCp; private System.Windows.Forms.Label m_lblHeaderCpAlgo; private System.Windows.Forms.TextBox m_tbDefaultUser; private System.Windows.Forms.Label m_lblDefaultUser; private System.Windows.Forms.TabPage m_tabRecycleBin; private System.Windows.Forms.Label m_lblRecycleBinInfo; private System.Windows.Forms.CheckBox m_cbRecycleBin; private System.Windows.Forms.ComboBox m_cmbRecycleBin; private System.Windows.Forms.Label m_lblRecycleBinGroup; private System.Windows.Forms.TabPage m_tabAdvanced; private System.Windows.Forms.ComboBox m_cmbEntryTemplates; private System.Windows.Forms.Label m_lblEntryTemplatesGroup; private System.Windows.Forms.Label m_lblTemplatesHint; private System.Windows.Forms.GroupBox m_grpTemplates; private System.Windows.Forms.GroupBox m_grpMasterKey; private System.Windows.Forms.CheckBox m_cbKeyForce; private System.Windows.Forms.CheckBox m_cbKeyRec; private System.Windows.Forms.NumericUpDown m_numKeyForceDays; private System.Windows.Forms.NumericUpDown m_numKeyRecDays; private System.Windows.Forms.GroupBox m_grpHistory; private System.Windows.Forms.CheckBox m_cbHistoryMaxItems; private System.Windows.Forms.NumericUpDown m_numHistoryMaxSize; private System.Windows.Forms.NumericUpDown m_numHistoryMaxItems; private System.Windows.Forms.CheckBox m_cbHistoryMaxSize; private System.Windows.Forms.Button m_btnColor; private System.Windows.Forms.CheckBox m_cbColor; } }KeePass/Forms/MainForm.cs0000664000000000000000000024240712663104520014246 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Threading; using System.Windows.Forms; using System.Globalization; using System.Diagnostics; using System.Security; using System.Media; using KeePass.App; using KeePass.App.Configuration; using KeePass.DataExchange; using KeePass.Ecas; using KeePass.Native; using KeePass.Plugins; using KeePass.Resources; using KeePass.UI; using KeePass.Util; using KeePass.Util.Spr; using KeePassLib; using KeePassLib.Collections; using KeePassLib.Cryptography.Cipher; using KeePassLib.Cryptography.PasswordGenerator; using KeePassLib.Interfaces; using KeePassLib.Utility; using KeePassLib.Security; using KeePassLib.Delegates; using KeePassLib.Serialization; using NativeLib = KeePassLib.Native.NativeLib; namespace KeePass.Forms { /// /// KeePass main window. /// public partial class MainForm : Form, IMruExecuteHandler, IUIOperations { private NotifyIconEx m_ntfTray = null; private bool m_bFormLoaded = false; private bool m_bFormShown = false; private bool m_bCleanedUp = false; private bool m_bRestart = false; private ListSorter m_pListSorter = new ListSorter(); private ListViewSortMenu m_lvsmMenu = null; private ListViewGroupingMenu m_lvgmMenu = null; private bool m_bDraggingEntries = false; private bool m_bBlockColumnUpdates = false; private uint m_uBlockEntrySelectionEvent = 0; private bool m_bForceExitOnce = false; /// /// Default constructor. /// public MainForm() { try { m_nTaskbarButtonMessage = NativeMethods.RegisterWindowMessage( "TaskbarButtonCreated"); m_bTaskbarButtonMessage = (m_nTaskbarButtonMessage != 0); } catch(Exception) { m_nTaskbarButtonMessage = 0x1E8F46A7; // Unlikely to occur m_bTaskbarButtonMessage = false; } string strIso6391 = Program.Translation.Properties.Iso6391Code; if(!string.IsNullOrEmpty(strIso6391)) { try { CultureInfo ci = CultureInfo.CreateSpecificCulture(strIso6391); Application.CurrentCulture = ci; Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; Properties.Resources.Culture = ci; } catch(Exception) { Debug.Assert(false); } } UIUtil.Initialize(false); InitializeComponent(); Program.Translation.ApplyTo(this); Program.Translation.ApplyTo("KeePass.Forms.MainForm.m_menuMain", m_menuMain.Items); Program.Translation.ApplyTo("KeePass.Forms.MainForm.m_ctxPwList", m_ctxPwList.Items); Program.Translation.ApplyTo("KeePass.Forms.MainForm.m_ctxGroupList", m_ctxGroupList.Items); Program.Translation.ApplyTo("KeePass.Forms.MainForm.m_ctxTray", m_ctxTray.Items); m_asyncListUpdate = new AsyncPwListUpdate(m_lvEntries); m_splitHorizontal.InitEx(this.Controls, m_menuMain); m_splitVertical.InitEx(this.Controls, m_menuMain); AssignMenuShortcuts(); if(MonoWorkarounds.IsRequired(891029)) m_tabMain.Height += 5; } private bool m_bFormLoadCalled = false; private void OnFormLoad(object sender, EventArgs e) { if(m_bFormLoadCalled && MonoWorkarounds.IsRequired(3574233558U)) return; m_bFormLoadCalled = true; m_bFormLoaded = false; GlobalWindowManager.CustomizeControl(this); GlobalWindowManager.CustomizeControl(m_ctxTray); m_strNeverExpiresText = KPRes.NeverExpires; this.Text = PwDefs.ShortProductName; this.Icon = Properties.Resources.KeePass; m_imgFileSaveEnabled = Properties.Resources.B16x16_FileSave; m_imgFileSaveDisabled = Properties.Resources.B16x16_FileSave_Disabled; // m_imgFileSaveAllEnabled = Properties.Resources.B16x16_File_SaveAll; // m_imgFileSaveAllDisabled = Properties.Resources.B16x16_File_SaveAll_Disabled; // m_ilCurrentIcons = m_ilClientIcons; UpdateImageLists(true); m_ctxEntryOpenUrl.Text = KPRes.OpenCmd; m_ntfTray = new NotifyIconEx(this.components); m_ntfTray.ContextMenuStrip = m_ctxTray; m_ntfTray.Visible = true; m_ntfTray.SetHandlers(this.OnSystemTrayClick, this.OnSystemTrayDoubleClick, this.OnSystemTrayMouseDown); m_ctxTrayTray.Font = FontUtil.CreateFont(m_ctxTrayTray.Font, FontStyle.Bold); m_nLockTimerMax = (int)Program.Config.Security.WorkspaceLocking.LockAfterTime; m_nClipClearMax = Program.Config.Security.ClipboardClearAfterSeconds; NativeLib.AllowNative = Program.Config.Native.NativeKeyTransformations; m_ctxEntryPreviewContextMenu.Attach(m_richEntryView, this); m_dynCustomStrings = new DynamicMenu(m_ctxEntryCopyString.DropDownItems); m_dynCustomStrings.MenuClick += this.OnCopyCustomString; m_dynCustomBinaries = new DynamicMenu(m_ctxEntryAttachments.DropDownItems); m_dynCustomBinaries.MenuClick += this.OnEntryBinaryOpen; m_dynShowEntriesByTagsEditMenu = new DynamicMenu(m_menuEditShowByTag.DropDownItems); m_dynShowEntriesByTagsEditMenu.MenuClick += this.OnShowEntriesByTag; m_dynShowEntriesByTagsToolBar = new DynamicMenu(m_tbEntryViewsDropDown.DropDownItems); m_dynShowEntriesByTagsToolBar.MenuClick += this.OnShowEntriesByTag; m_dynAddTag = new DynamicMenu(m_ctxEntrySelectedAddTag.DropDownItems); m_dynAddTag.MenuClick += this.OnAddEntryTag; m_dynRemoveTag = new DynamicMenu(m_ctxEntrySelectedRemoveTag.DropDownItems); m_dynRemoveTag.MenuClick += this.OnRemoveEntryTag; m_dynMoveToGroup = new DynamicMenu(m_ctxEntryMoveToGroup.DropDownItems); m_dynMoveToGroup.MenuClick += this.OnEntryMoveToGroup; m_dynOpenUrl = new OpenWithMenu(m_ctxEntryUrl); m_dynOpenUrlToolBar = new OpenWithMenu(m_tbOpenUrl); EntryTemplates.Init(m_tbAddEntry); m_menuEdit.DropDownItems.Insert(0, new ToolStripSeparator()); InsertToolStripItem(m_menuEdit, m_ctxEntrySelectAll, new EventHandler(OnEntrySelectAll), true); m_menuEdit.DropDownItems.Insert(0, new ToolStripSeparator()); InsertToolStripItem(m_menuEdit, m_ctxEntryDelete, new EventHandler(OnEntryDelete), true); InsertToolStripItem(m_menuEdit, m_ctxEntryDuplicate, new EventHandler(OnEntryDuplicate), true); InsertToolStripItem(m_menuEdit, m_ctxEntryEdit, new EventHandler(OnEntryEdit), true); ToolStripMenuItem tsmiAddEntry = InsertToolStripItem(m_menuEdit, m_ctxEntryAdd, new EventHandler(OnEntryAdd), true); m_menuEdit.DropDownItems.Insert(0, new ToolStripSeparator()); InsertToolStripItem(m_menuEdit, m_ctxGroupDelete, new EventHandler(OnGroupsDelete), true); InsertToolStripItem(m_menuEdit, m_ctxGroupEdit, new EventHandler(OnGroupsEdit), true); InsertToolStripItem(m_menuEdit, m_ctxGroupAdd, new EventHandler(OnGroupsAdd), true); UIUtil.AssignShortcut(tsmiAddEntry, Keys.Control | Keys.I); UIUtil.ConfigureTbButton(m_tbNewDatabase, KPRes.ToolBarNew, null, m_menuFileNew); UIUtil.ConfigureTbButton(m_tbOpenDatabase, KPRes.ToolBarOpen, null, m_menuFileOpenLocal); UIUtil.ConfigureTbButton(m_tbSaveDatabase, KPRes.Save, null, m_menuFileSave); UIUtil.ConfigureTbButton(m_tbSaveAll, KPRes.ToolBarSaveAll, null, null); UIUtil.ConfigureTbButton(m_tbAddEntry, KPRes.AddEntry, null, null); UIUtil.ConfigureTbButton(m_tbCopyUserName, KPRes.CopyUserFull, null, m_ctxEntryCopyUserName); UIUtil.ConfigureTbButton(m_tbCopyPassword, KPRes.CopyPasswordFull, null, m_ctxEntryCopyPassword); UIUtil.ConfigureTbButton(m_tbOpenUrl, KPRes.OpenUrl, null, m_ctxEntryOpenUrl); UIUtil.ConfigureTbButton(m_tbCopyUrl, KPRes.CopyUrlToClipboard, null, m_ctxEntryCopyUrl); UIUtil.ConfigureTbButton(m_tbAutoType, KPRes.PerformAutoType, null, m_ctxEntryPerformAutoType); UIUtil.ConfigureTbButton(m_tbFind, KPRes.Find + "...", null, m_menuEditFind); UIUtil.ConfigureTbButton(m_tbEntryViewsDropDown, null, KPRes.ShowEntries, null); UIUtil.ConfigureTbButton(m_tbLockWorkspace, KPRes.LockMenuLock, null, m_menuFileLock); UIUtil.ConfigureTbButton(m_tbQuickFind, null, KPRes.SearchQuickPrompt + " (" + KPRes.KeyboardKeyCtrl + "+E)", null); UIUtil.ConfigureTbButton(m_tbCloseTab, StrUtil.RemoveAccelerator( KPRes.CloseButton), null, m_menuFileClose); CopyMenuItemText(m_tbAddEntryDefault, m_ctxEntryAdd, null); CopyMenuItemText(m_tbOpenUrlDefault, m_ctxEntryOpenUrl, KPRes.OpenUrl); CopyMenuItemText(m_tbViewsShowAll, m_menuEditShowAllEntries, null); CopyMenuItemText(m_tbViewsShowExpired, m_menuEditShowExpired, null); UIUtil.EnableAutoCompletion(m_tbQuickFind, false); bool bVisible = Program.Config.MainWindow.ToolBar.Show; m_toolMain.Visible = bVisible; UIUtil.SetChecked(m_menuViewShowToolBar, bVisible); // Make a copy of the maximized setting (the configuration item might // get changed when the window's position/size is restored) bool bMaximizedSetting = Program.Config.MainWindow.Maximized; int wndX = Program.Config.MainWindow.X; int wndY = Program.Config.MainWindow.Y; int sizeX = Program.Config.MainWindow.Width; int sizeY = Program.Config.MainWindow.Height; bool bWndValid = ((wndX != -32000) && (wndY != -32000) && (wndX != -64000) && (wndY != -64000)); if((sizeX != AppDefs.InvalidWindowValue) && (sizeY != AppDefs.InvalidWindowValue) && bWndValid) { if(MonoWorkarounds.IsRequired(686017)) { sizeX = Math.Max(250, sizeX); sizeY = Math.Max(250, sizeY); } this.Size = new Size(sizeX, sizeY); } if(MonoWorkarounds.IsRequired(686017)) this.MinimumSize = new Size(250, 250); Rectangle rectRestWindow = new Rectangle(wndX, wndY, this.Size.Width, this.Size.Height); bool bWndPartVisible = UIUtil.IsScreenAreaVisible(rectRestWindow); if((wndX != AppDefs.InvalidWindowValue) && (wndY != AppDefs.InvalidWindowValue) && bWndValid && bWndPartVisible) { this.Location = new Point(wndX, wndY); } else { Rectangle rectScreen = Screen.PrimaryScreen.WorkingArea; this.Location = new Point((rectScreen.Width - this.Size.Width) / 2, (rectScreen.Height - this.Size.Height) / 2); } SetMainWindowLayout(Program.Config.MainWindow.Layout == AceMainWindowLayout.SideBySide); ShowEntryView(Program.Config.MainWindow.EntryView.Show); UpdateColumnsEx(false); AceMainWindow mw = Program.Config.MainWindow; m_bSimpleTanView = mw.TanView.UseSimpleView; UIUtil.SetChecked(m_menuViewTanSimpleList, m_bSimpleTanView); m_bShowTanIndices = mw.TanView.ShowIndices; UIUtil.SetChecked(m_menuViewTanIndices, m_bShowTanIndices); UIUtil.SetChecked(m_menuViewShowEntriesOfSubGroups, Program.Config.MainWindow.ShowEntriesOfSubGroups); m_pListSorter = Program.Config.MainWindow.ListSorting; if((m_pListSorter.Column >= 0) && (m_pListSorter.Order != SortOrder.None)) m_lvEntries.ListViewItemSorter = m_pListSorter; else m_pListSorter = new ListSorter(); m_lvsmMenu = new ListViewSortMenu(m_menuViewSortBy, m_lvEntries, new SortCommandHandler(this.SortPasswordList)); m_lvgmMenu = new ListViewGroupingMenu(m_menuViewEntryListGrouping, this); UIUtil.SetChecked(m_menuViewAlwaysOnTop, mw.AlwaysOnTop); EnsureAlwaysOnTopOpt(); m_mruList.Initialize(this, m_menuFileRecent, m_menuFileSyncRecent); m_mruList.MarkOpened = true; SerializeMruList(false); SetListFont(Program.Config.UI.StandardFont); m_ctxEntryColorLightRed.Image = UIUtil.CreateColorBitmap24(16, 16, AppDefs.NamedEntryColor.LightRed); m_ctxEntryColorLightGreen.Image = UIUtil.CreateColorBitmap24(16, 16, AppDefs.NamedEntryColor.LightGreen); m_ctxEntryColorLightBlue.Image = UIUtil.CreateColorBitmap24(16, 16, AppDefs.NamedEntryColor.LightBlue); m_ctxEntryColorLightYellow.Image = UIUtil.CreateColorBitmap24(16, 16, AppDefs.NamedEntryColor.LightYellow); // m_lvEntries.GridLines = mw.ShowGridLines; if(UIUtil.VistaStyleListsSupported) { // m_tvGroups.ItemHeight += 1; m_tvGroups.ShowRootLines = false; m_tvGroups.ShowLines = false; UIUtil.SetExplorerTheme(m_tvGroups.Handle); UIUtil.SetExplorerTheme(m_lvEntries.Handle); } // m_tvGroups.QueryToolTip = UIUtil.GetPwGroupToolTipTN; m_clrAlternateItemBgColor = UIUtil.GetAlternateColor(m_lvEntries.BackColor); m_statusPartProgress.Visible = false; if(bMaximizedSetting) { if((this.WindowState == FormWindowState.Normal) && !IsTrayed()) { // bool bVis = this.Visible; // if(bVis) this.Visible = false; UIUtil.SetWindowState(this, FormWindowState.Maximized); // if(bVis) this.Visible = true; } } try { double dSplitPos = mw.SplitterHorizontalFrac; if(dSplitPos == double.Epsilon) dSplitPos = 0.8333; if(MonoWorkarounds.IsRequired(686017)) m_splitHorizontal.Panel1MinSize = 35; m_splitHorizontal.SplitterDistanceFrac = dSplitPos; dSplitPos = mw.SplitterVerticalFrac; if(dSplitPos == double.Epsilon) dSplitPos = 0.25; m_splitVertical.SplitterDistanceFrac = dSplitPos; } catch(Exception) { Debug.Assert(false); } string strSearchTr = ((WinUtil.IsAtLeastWindowsVista ? string.Empty : " ") + KPRes.Search); UIUtil.SetCueBanner(m_tbQuickFind, strSearchTr); #if DEBUG Program.Config.CustomConfig.SetBool("TestItem1", true); Program.Config.CustomConfig.SetULong("TestItem2", 13); Program.Config.CustomConfig.SetString("TestItem3", "TestValue"); Program.KeyProviderPool.Add(new KeePassLib.Keys.SampleKeyProvider()); #endif m_sessionLockNotifier.Install(this.OnSessionLock); IpcBroadcast.StartServer(); int nInitColProvCount = Program.ColumnProviderPool.Count; m_pluginDefaultHost.Initialize(this, Program.CommandLineArgs, CipherPool.GlobalPool); m_pluginManager.Initialize(m_pluginDefaultHost); m_pluginManager.UnloadAllPlugins(); if(AppPolicy.Current.Plugins) m_pluginManager.LoadAllPlugins(UrlUtil.GetFileDirectory( WinUtil.GetExecutable(), false, true)); // Delete old files *after* loading plugins (when timestamps // of loaded plugins have been updated already) if(Program.Config.Application.Start.PluginCacheDeleteOld) PlgxCache.DeleteOldFilesAsync(); if(Program.ColumnProviderPool.Count != nInitColProvCount) UpdateColumnsEx(false); HotKeyManager.Initialize(this); Keys kAutoTypeKey = (Keys)Program.Config.Integration.HotKeyGlobalAutoType; HotKeyManager.RegisterHotKey(AppDefs.GlobalHotKeyId.AutoType, kAutoTypeKey); Keys kAutoTypeSelKey = (Keys)Program.Config.Integration.HotKeySelectedAutoType; HotKeyManager.RegisterHotKey(AppDefs.GlobalHotKeyId.AutoTypeSelected, kAutoTypeSelKey); Keys kShowWindowKey = (Keys)Program.Config.Integration.HotKeyShowWindow; HotKeyManager.RegisterHotKey(AppDefs.GlobalHotKeyId.ShowWindow, kShowWindowKey); Keys kEntryMenuKey = (Keys)Program.Config.Integration.HotKeyEntryMenu; HotKeyManager.RegisterHotKey(AppDefs.GlobalHotKeyId.EntryMenu, kEntryMenuKey); m_statusClipboard.Visible = false; UpdateClipboardStatus(); ToolStripItem[] vSbItems = new ToolStripItem[] { m_statusPartSelected, m_statusPartProgress, m_statusClipboard }; int[] vStdSbWidths = new int[] { 140, 150, 100 }; DpiUtil.ScaleToolStripItems(vSbItems, vStdSbWidths); // Workaround for .NET ToolStrip height bug; // https://sourceforge.net/p/keepass/discussion/329220/thread/19e7c256/ Debug.Assert((m_toolMain.Height == 25) || DpiUtil.ScalingRequired); m_toolMain.LockHeight(true); UpdateTrayIcon(); UpdateTagsMenu(m_dynShowEntriesByTagsEditMenu, false, false, TagsMenuMode.EnsurePopupOnly); UpdateTagsMenu(m_dynRemoveTag, false, false, TagsMenuMode.EnsurePopupOnly); UpdateEntryMoveMenu(true); UpdateUIState(false); ApplyUICustomizations(); MonoWorkarounds.ApplyTo(this); ThreadPool.QueueUserWorkItem(new WaitCallback(OnFormLoadParallelAsync)); Program.TriggerSystem.RaiseEvent(EcasEventIDs.AppInitPost); if(Program.CommandLineArgs.FileName != null) OpenDatabase(IocFromCommandLine(), KeyUtil.KeyFromCommandLine( Program.CommandLineArgs), false); else if(Program.Config.Application.Start.OpenLastFile) { IOConnectionInfo ioLastFile = Program.Config.Application.LastUsedFile; if(ioLastFile.Path.Length > 0) OpenDatabase(ioLastFile, null, false); } UpdateCheckEx.EnsureConfigured(this); if(Program.Config.Application.Start.CheckForUpdate) UpdateCheckEx.Run(false, null); // UpdateCheck.StartAsync(PwDefs.VersionUrl, m_statusPartInfo); ResetDefaultFocus(null); MinimizeToTrayAtStartIfEnabled(true); m_bFormLoaded = true; NotifyUserActivity(); // Initialize locking timeout Program.TriggerSystem.RaiseEvent(EcasEventIDs.AppLoadPost); } private void OnFormShown(object sender, EventArgs e) { m_bFormShown = true; if(MonoWorkarounds.IsRequired(620618)) { PwGroup pg = GetCurrentEntries(); UpdateColumnsEx(false); UpdateUI(false, null, false, null, true, pg, false); } MinimizeToTrayAtStartIfEnabled(false); } private void OnFileNew(object sender, EventArgs e) { if(!AppPolicy.Try(AppPolicyId.NewFile)) return; if(!AppPolicy.Try(AppPolicyId.SaveFile)) return; SaveFileDialogEx sfd = UIUtil.CreateSaveFileDialog(KPRes.CreateNewDatabase, KPRes.NewDatabaseFileName, UIUtil.CreateFileTypeFilter( AppDefs.FileExtension.FileExt, KPRes.KdbxFiles, true), 1, AppDefs.FileExtension.FileExt, AppDefs.FileDialogContext.Database); GlobalWindowManager.AddDialog(sfd.FileDialog); DialogResult dr = sfd.ShowDialog(); GlobalWindowManager.RemoveDialog(sfd.FileDialog); string strPath = sfd.FileName; if(dr != DialogResult.OK) return; KeyCreationForm kcf = new KeyCreationForm(); kcf.InitEx(IOConnectionInfo.FromPath(strPath), true); dr = kcf.ShowDialog(); if((dr == DialogResult.Cancel) || (dr == DialogResult.Abort)) { UIUtil.DestroyForm(kcf); return; } PwDocument dsPrevActive = m_docMgr.ActiveDocument; PwDatabase pd = m_docMgr.CreateNewDocument(true).Database; pd.New(IOConnectionInfo.FromPath(strPath), kcf.CompositeKey); UIUtil.DestroyForm(kcf); DatabaseSettingsForm dsf = new DatabaseSettingsForm(); dsf.InitEx(true, pd); dr = dsf.ShowDialog(); if((dr == DialogResult.Cancel) || (dr == DialogResult.Abort)) { m_docMgr.CloseDatabase(pd); try { m_docMgr.ActiveDocument = dsPrevActive; } catch(Exception) { } // Fails if no database is open now UpdateUI(false, null, true, null, true, null, false); UIUtil.DestroyForm(dsf); return; } UIUtil.DestroyForm(dsf); // AutoEnableVisualHiding(); PwGroup pg = new PwGroup(true, true, KPRes.General, PwIcon.Folder); pd.RootGroup.AddGroup(pg, true); pg = new PwGroup(true, true, KPRes.WindowsOS, PwIcon.DriveWindows); pd.RootGroup.AddGroup(pg, true); pg = new PwGroup(true, true, KPRes.Network, PwIcon.NetworkServer); pd.RootGroup.AddGroup(pg, true); pg = new PwGroup(true, true, KPRes.Internet, PwIcon.World); pd.RootGroup.AddGroup(pg, true); pg = new PwGroup(true, true, KPRes.EMail, PwIcon.EMail); pd.RootGroup.AddGroup(pg, true); pg = new PwGroup(true, true, KPRes.Homebanking, PwIcon.Homebanking); pd.RootGroup.AddGroup(pg, true); PwEntry pe = new PwEntry(true, true); pe.Strings.Set(PwDefs.TitleField, new ProtectedString(pd.MemoryProtection.ProtectTitle, KPRes.SampleEntry)); pe.Strings.Set(PwDefs.UserNameField, new ProtectedString(pd.MemoryProtection.ProtectUserName, KPRes.UserName)); pe.Strings.Set(PwDefs.UrlField, new ProtectedString(pd.MemoryProtection.ProtectUrl, PwDefs.HomepageUrl)); pe.Strings.Set(PwDefs.PasswordField, new ProtectedString(pd.MemoryProtection.ProtectPassword, KPRes.Password)); pe.Strings.Set(PwDefs.NotesField, new ProtectedString(pd.MemoryProtection.ProtectNotes, KPRes.Notes)); pe.AutoType.Add(new AutoTypeAssociation(KPRes.TargetWindow, @"{USERNAME}{TAB}{PASSWORD}{TAB}{ENTER}")); pd.RootGroup.AddEntry(pe, true); pe = new PwEntry(true, true); pe.Strings.Set(PwDefs.TitleField, new ProtectedString(pd.MemoryProtection.ProtectTitle, KPRes.SampleEntry + " #2")); pe.Strings.Set(PwDefs.UserNameField, new ProtectedString(pd.MemoryProtection.ProtectUserName, "Michael321")); pe.Strings.Set(PwDefs.UrlField, new ProtectedString(pd.MemoryProtection.ProtectUrl, @"http://keepass.info/help/kb/testform.html")); pe.Strings.Set(PwDefs.PasswordField, new ProtectedString(pd.MemoryProtection.ProtectPassword, "12345")); pe.AutoType.Add(new AutoTypeAssociation("*Test Form - KeePass*", string.Empty)); pd.RootGroup.AddEntry(pe, true); #if DEBUG Random r = Program.GlobalRandom; for(uint iSamples = 0; iSamples < 1500; ++iSamples) { pg = pd.RootGroup.Groups.GetAt(iSamples % 5); pe = new PwEntry(true, true); pe.Strings.Set(PwDefs.TitleField, new ProtectedString(pd.MemoryProtection.ProtectTitle, Guid.NewGuid().ToString())); pe.Strings.Set(PwDefs.UserNameField, new ProtectedString(pd.MemoryProtection.ProtectUserName, Guid.NewGuid().ToString())); pe.Strings.Set(PwDefs.UrlField, new ProtectedString(pd.MemoryProtection.ProtectUrl, Guid.NewGuid().ToString())); pe.Strings.Set(PwDefs.PasswordField, new ProtectedString(pd.MemoryProtection.ProtectPassword, Guid.NewGuid().ToString())); pe.Strings.Set(PwDefs.NotesField, new ProtectedString(pd.MemoryProtection.ProtectNotes, Guid.NewGuid().ToString())); pe.IconId = (PwIcon)r.Next(0, (int)PwIcon.Count); pg.AddEntry(pe, true); } pd.CustomData.Set("Sample Custom Data 1", "0123456789"); pd.CustomData.Set("Sample Custom Data 2", "\u00B5y data"); #endif UpdateUI(true, null, true, null, true, null, true); if(this.FileCreated != null) { FileCreatedEventArgs ea = new FileCreatedEventArgs(pd); this.FileCreated(this, ea); } } private void OnFileOpen(object sender, EventArgs e) { OpenDatabase(null, null, true); } private void OnFileClose(object sender, EventArgs e) { CloseDocument(null, false, false, true); } // Public for plugins public void SaveDatabase(PwDatabase pdToSave, object sender) { PwDatabase pd = (pdToSave ?? m_docMgr.ActiveDatabase); if(!pd.IsOpen) return; if(!AppPolicy.Try(AppPolicyId.SaveFile)) return; if((pd.IOConnectionInfo == null) || (pd.IOConnectionInfo.Path.Length == 0)) { SaveDatabaseAs(pd, null, false, sender, false); return; } UIBlockInteraction(true); if(!PreSaveValidate(pd)) { UIBlockInteraction(false); return; } Guid eventGuid = Guid.NewGuid(); if(this.FileSaving != null) { FileSavingEventArgs args = new FileSavingEventArgs(false, false, pd, eventGuid); this.FileSaving(sender, args); if(args.Cancel) { UIBlockInteraction(false); return; } } Program.TriggerSystem.RaiseEvent(EcasEventIDs.SavingDatabaseFile, EcasProperty.Database, pd); ShowWarningsLogger swLogger = CreateShowWarningsLogger(); swLogger.StartLogging(KPRes.SavingDatabase, true); ShutdownBlocker sdb = new ShutdownBlocker(this.Handle, KPRes.SavingDatabase); bool bSuccess = true; try { PreSavingEx(pd, pd.IOConnectionInfo); pd.Save(swLogger); PostSavingEx(true, pd, pd.IOConnectionInfo, swLogger); } catch(Exception exSave) { MessageService.ShowSaveWarning(pd.IOConnectionInfo, exSave, true); bSuccess = false; } sdb.Dispose(); swLogger.EndLogging(); // Immediately after the UIBlockInteraction call the form might // be closed and UpdateUIState might crash, if the order of the // two methods is swapped; so first update state, then unblock UpdateUIState(false); UIBlockInteraction(false); // Calls Application.DoEvents() if(this.FileSaved != null) { FileSavedEventArgs args = new FileSavedEventArgs(bSuccess, pd, eventGuid); this.FileSaved(sender, args); } if(bSuccess) Program.TriggerSystem.RaiseEvent(EcasEventIDs.SavedDatabaseFile, EcasProperty.Database, pd); } private void OnFileSave(object sender, EventArgs e) { SaveDatabase(null, sender); } private void OnFileSaveAs(object sender, EventArgs e) { SaveDatabaseAs(null, null, false, sender, false); } private void OnFileDbSettings(object sender, EventArgs e) { PwDatabase pd = m_docMgr.ActiveDatabase; DatabaseSettingsForm dsf = new DatabaseSettingsForm(); dsf.InitEx(false, pd); if(UIUtil.ShowDialogAndDestroy(dsf) == DialogResult.OK) { // if(pd.MemoryProtection.AutoEnableVisualHiding) // { // AutoEnableVisualHiding(); // RefreshEntriesList(); // } // Update tab bar (database color might have been changed), // update group list (recycle bin group might have been changed) UpdateUI(true, null, true, null, false, null, true); RefreshEntriesList(); // History items might have been deleted } } private void OnFileChangeMasterKey(object sender, EventArgs e) { UpdateUIState(ChangeMasterKey(null)); } private void OnFilePrint(object sender, EventArgs e) { if(!m_docMgr.ActiveDatabase.IsOpen) return; PrintGroup(m_docMgr.ActiveDatabase.RootGroup); } private void OnFileLock(object sender, EventArgs e) { if(UIIsInteractionBlocked()) { Debug.Assert(false); return; } if(GlobalWindowManager.WindowCount != 0) return; PwDocument ds = m_docMgr.ActiveDocument; if(!IsFileLocked(ds)) // Lock { LockAllDocuments(); if(m_bCleanedUp) return; // Exited instead of locking } else // Unlock { PwDatabase pd = ds.Database; Debug.Assert(!pd.IsOpen); OpenDatabase(ds.LockedIoc, null, false); if(pd.IsOpen) { ds.LockedIoc = new IOConnectionInfo(); // Clear lock RestoreWindowState(pd); } } if(this.Visible) UpdateUIState(false); } private void OnFileExit(object sender, EventArgs e) { NotifyUserActivity(); if(UIIsInteractionBlocked()) { Debug.Assert(false); return; } if(GlobalWindowManager.CanCloseAllWindows) GlobalWindowManager.CloseAllWindows(); m_bForceExitOnce = true; this.Close(); } private void OnHelpHomepage(object sender, EventArgs e) { WinUtil.OpenUrl(PwDefs.HomepageUrl, null); } private void OnHelpDonate(object sender, EventArgs e) { WinUtil.OpenUrl(PwDefs.DonationsUrl, null); } private void OnHelpContents(object sender, EventArgs e) { AppHelp.ShowHelp(null, null); } private void OnHelpCheckForUpdate(object sender, EventArgs e) { // UpdateCheck.StartAsync(PwDefs.VersionUrl, null); UpdateCheckEx.Run(true, this); } private void OnHelpAbout(object sender, EventArgs e) { AboutForm abf = new AboutForm(); UIUtil.ShowDialogAndDestroy(abf); } private void OnEntryCopyUserName(object sender, EventArgs e) { PwEntry pe = GetSelectedEntry(false); Debug.Assert(pe != null); if(pe == null) return; if(ClipboardUtil.CopyAndMinimize(pe.Strings.GetSafe(PwDefs.UserNameField), true, this, pe, m_docMgr.SafeFindContainerOf(pe))) StartClipboardCountdown(); } private void OnEntryCopyPassword(object sender, EventArgs e) { PwEntry pe = GetSelectedEntry(false); Debug.Assert(pe != null); if(pe == null) return; if(EntryUtil.ExpireTanEntryIfOption(pe, m_docMgr.ActiveDatabase)) { RefreshEntriesList(); UpdateUIState(false); // Modified flag set by expiry method } if(ClipboardUtil.CopyAndMinimize(pe.Strings.GetSafe(PwDefs.PasswordField), true, this, pe, m_docMgr.SafeFindContainerOf(pe))) StartClipboardCountdown(); } private void OnEntryOpenUrl(object sender, EventArgs e) { PerformDefaultUrlAction(null, true); } private void OnEntrySaveAttachments(object sender, EventArgs e) { PwEntry[] vSelected = GetSelectedEntries(); if((vSelected == null) || (vSelected.Length == 0)) return; FolderBrowserDialog fbd = UIUtil.CreateFolderBrowserDialog(KPRes.AttachmentsSave); GlobalWindowManager.AddDialog(fbd); if(fbd.ShowDialog() == DialogResult.OK) EntryUtil.SaveEntryAttachments(vSelected, fbd.SelectedPath); GlobalWindowManager.RemoveDialog(fbd); fbd.Dispose(); } private void OnEntryPerformAutoType(object sender, EventArgs e) { PwEntry pe = GetSelectedEntry(false); if(pe != null) { try { AutoType.PerformIntoPreviousWindow(this, pe, m_docMgr.SafeFindContainerOf(pe)); } catch(Exception ex) { MessageService.ShowWarning(ex); } } } private void OnEntryAdd(object sender, EventArgs e) { PwGroup pg = GetSelectedGroup(); Debug.Assert(pg != null); if(pg == null) return; if(pg.IsVirtual) { MessageService.ShowWarning(KPRes.GroupCannotStoreEntries, KPRes.SelectDifferentGroup); return; } PwDatabase pwDb = m_docMgr.ActiveDatabase; PwEntry pwe = new PwEntry(true, true); pwe.Strings.Set(PwDefs.UserNameField, new ProtectedString( pwDb.MemoryProtection.ProtectUserName, pwDb.DefaultUserName)); ProtectedString psAutoGen = PwGeneratorUtil.GenerateAcceptable( Program.Config.PasswordGenerator.AutoGeneratedPasswordsProfile, null, pwe, pwDb); psAutoGen = psAutoGen.WithProtection(pwDb.MemoryProtection.ProtectPassword); pwe.Strings.Set(PwDefs.PasswordField, psAutoGen); int nExpireDays = Program.Config.Defaults.NewEntryExpiresInDays; if(nExpireDays >= 0) { pwe.Expires = true; pwe.ExpiryTime = DateTime.Now.AddDays(nExpireDays); } if((pg.IconId != PwIcon.Folder) && (pg.IconId != PwIcon.FolderOpen) && (pg.IconId != PwIcon.FolderPackage) && (pg.IconId != PwIcon.EMailBox)) { pwe.IconId = pg.IconId; // Inherit icon from group } pwe.CustomIconUuid = pg.CustomIconUuid; // Temporarily assume that the entry is in pg; required for retrieving // the default auto-type sequence pwe.ParentGroup = pg; PwEntryForm pForm = new PwEntryForm(); pForm.InitEx(pwe, PwEditMode.AddNewEntry, pwDb, m_ilCurrentIcons, false, false); if(UIUtil.ShowDialogAndDestroy(pForm) == DialogResult.OK) { pg.AddEntry(pwe, true); UpdateUI(false, null, pwDb.UINeedsIconUpdate, null, true, null, true, m_lvEntries); PwObjectList vSelect = new PwObjectList(); vSelect.Add(pwe); SelectEntries(vSelect, true, true); EnsureVisibleEntry(pwe.Uuid); UpdateUIState(false); } else UpdateUI(false, null, pwDb.UINeedsIconUpdate, null, pwDb.UINeedsIconUpdate, null, false); } private void OnEntryEdit(object sender, EventArgs e) { EditSelectedEntry(false); } private void OnEntryDuplicate(object sender, EventArgs e) { PwDatabase pd = m_docMgr.ActiveDatabase; PwGroup pgSelected = GetSelectedGroup(); PwEntry[] vSelected = GetSelectedEntries(); if((vSelected == null) || (vSelected.Length == 0)) return; DuplicationForm dlg = new DuplicationForm(); if(UIUtil.ShowDialogAndDestroy(dlg) != DialogResult.OK) return; PwObjectList vNewEntries = new PwObjectList(); foreach(PwEntry pe in vSelected) { PwEntry peNew = pe.Duplicate(); dlg.ApplyTo(peNew, pe, pd); Debug.Assert(pe.ParentGroup == peNew.ParentGroup); PwGroup pg = (pe.ParentGroup ?? pgSelected); if((pg == null) && (pd != null)) pg = pd.RootGroup; if(pg == null) continue; pg.AddEntry(peNew, true, true); vNewEntries.Add(peNew); } AddEntriesToList(vNewEntries); SelectEntries(vNewEntries, true, true); EnsureVisibleSelected(true); // Show all copies if possible EnsureVisibleSelected(false); // Ensure showing the first UpdateUIState(true, m_lvEntries); } private void OnEntryDelete(object sender, EventArgs e) { DeleteSelectedEntries(); } private void OnEntrySelectAll(object sender, EventArgs e) { ++m_uBlockEntrySelectionEvent; foreach(ListViewItem lvi in m_lvEntries.Items) { lvi.Selected = true; } --m_uBlockEntrySelectionEvent; ResetDefaultFocus(m_lvEntries); UpdateUIState(false); } private void OnFormClosing(object sender, FormClosingEventArgs e) { if(UIIsInteractionBlocked()) { e.Cancel = true; return; } if(!m_bForceExitOnce) // If not executed by 'File' -> 'Exit' { if((e.CloseReason != CloseReason.TaskManagerClosing) && (e.CloseReason != CloseReason.WindowsShutDown)) { if(Program.Config.MainWindow.CloseButtonMinimizesWindow) { SaveWindowPositionAndSize(); e.Cancel = true; UIUtil.SetWindowState(this, FormWindowState.Minimized); return; } } } m_bForceExitOnce = false; // Reset (flag works once only) GlobalWindowManager.CloseAllWindows(); m_docMgr.RememberActiveDocument(); if(!CloseAllDocuments(true)) { e.Cancel = true; UpdateUI(true, null, true, null, true, null, false); return; } // When shutting down, it can happen that only OnFormClosing // is called without the form actually being closed afterwards, // thus we must update the UI in this case now if((e.CloseReason == CloseReason.TaskManagerClosing) || (e.CloseReason == CloseReason.WindowsShutDown)) UpdateUI(true, null, true, null, true, null, false); } private void OnFormClosed(object sender, FormClosedEventArgs e) { CleanUpEx(); // Saves configuration and cleans up all resources if(m_bRestart) WinUtil.Restart(); } private void OnGroupsListClickNode(object sender, TreeNodeMouseClickEventArgs e) { if(e.Button == MouseButtons.Right) { m_tvGroups.SelectedNode = e.Node; return; } if(e.Button != MouseButtons.Left) return; TreeNode tn = e.Node; if((tn != null) && (tn.Tag != null)) { PwGroup pg = (tn.Tag as PwGroup); Debug.Assert(pg != null); if(pg == null) return; if(pg != m_docMgr.ActiveDatabase.RootGroup) { Debug.Assert(pg.ParentGroup != null); } m_tvGroups.SelectedNode = tn; // KPB 1757850 pg.Touch(false); UpdateUI(false, null, false, pg, true, pg, false); } } private void OnMenuChangeLanguage(object sender, EventArgs e) { LanguageForm lf = new LanguageForm(); if(UIUtil.ShowDialogAndDestroy(lf) == DialogResult.OK) { string str = KPRes.LanguageSelected + MessageService.NewParagraph + KPRes.RestartKeePassQuestion; if(MessageService.AskYesNo(str)) { m_bRestart = true; OnFileExit(sender, e); } } } private void OnShowAllEntries(object sender, EventArgs e) { PerformQuickFind(string.Empty, KPRes.AllEntriesTitle, true, false); } private void OnPwListFind(object sender, EventArgs e) { PwDatabase pd = m_docMgr.ActiveDatabase; if(!pd.IsOpen) return; PwGroup pgRoot = pd.RootGroup; if(pgRoot == null) { Debug.Assert(false); return; } SearchForm sf = new SearchForm(); sf.InitEx(pd, pgRoot); if(sf.ShowDialog() == DialogResult.OK) { PwGroup pg = sf.SearchResultsGroup; UpdateEntryList(pg, false); SelectFirstEntryIfNoneSelected(); UpdateUIState(false); ShowSearchResultsStatusMessage(pgRoot); ResetDefaultFocus(m_lvEntries); } UIUtil.DestroyForm(sf); } private void OnViewShowToolBar(object sender, EventArgs e) { Debug.Assert(m_bFormLoaded); // The following toggles! bool b = !Program.Config.MainWindow.ToolBar.Show; Program.Config.MainWindow.ToolBar.Show = b; m_toolMain.Visible = b; UIUtil.SetChecked(m_menuViewShowToolBar, b); } private void OnViewShowEntryView(object sender, EventArgs e) { Debug.Assert(m_bFormLoaded); // The following toggles! ShowEntryView(!Program.Config.MainWindow.EntryView.Show); } private void OnPwListSelectedIndexChanged(object sender, EventArgs e) { if(m_uBlockEntrySelectionEvent > 0) return; // Always defer deselection updates (to ignore item deselect // and reselect events when clicking on a selected item) if(m_lvEntries.SelectedIndices.Count == 0) { m_bUpdateUIStateOnce = true; return; } int nCurTicks = Environment.TickCount; int nTimeDiff = unchecked(nCurTicks - m_nLastSelChUpdateUIStateTicks); if(nTimeDiff < 100) // Burst, defer update { m_bUpdateUIStateOnce = true; m_nLastSelChUpdateUIStateTicks = nCurTicks; } else { UpdateUIState(false); // Update time (not to nCurTicks, as UpdateUIState might take // longer than 100 ms, which would prevent any deferral) m_nLastSelChUpdateUIStateTicks = Environment.TickCount; } } private void OnPwListMouseDoubleClick(object sender, MouseEventArgs e) { ListViewHitTestInfo lvHit = m_lvEntries.HitTest(e.Location); ListViewItem lvi = lvHit.Item; if(lvHit.SubItem != null) { int i = 0; foreach(ListViewItem.ListViewSubItem lvs in lvi.SubItems) { if(lvs == lvHit.SubItem) { PwListItem pli = (lvi.Tag as PwListItem); if(pli != null) PerformDefaultAction(sender, e, pli.Entry, i); else { Debug.Assert(false); } break; } ++i; } } else { PwListItem pli = (lvi.Tag as PwListItem); if(pli != null) PerformDefaultAction(sender, e, pli.Entry, 0); else { Debug.Assert(false); } } } private void OnQuickFindSelectedIndexChanged(object sender, EventArgs e) { if(m_bBlockQuickFind) return; m_bBlockQuickFind = true; string strSearch = m_tbQuickFind.Text; // Text, not selected index! lock(m_objQuickFindSync) { int iNow = Environment.TickCount; if(((iNow - m_iLastQuickFindTicks) <= 1000) && (strSearch == m_strLastQuickSearch)) { m_bBlockQuickFind = false; return; } m_iLastQuickFindTicks = iNow; m_strLastQuickSearch = strSearch; } string strGroupName = KPRes.SearchGroupName + " (\"" + strSearch + "\" "; strGroupName += KPRes.SearchResultsInSeparator + " "; strGroupName += m_docMgr.ActiveDatabase.RootGroup.Name + ")"; // PerformQuickFind(strSearch, strGroupName, false, true); // Lookup in combobox for the current search int nExistsAlready = -1; for(int i = 0; i < m_tbQuickFind.Items.Count; ++i) { string strItemText = (string)m_tbQuickFind.Items[i]; if(strItemText.Equals(strSearch, StrUtil.CaseIgnoreCmp)) { nExistsAlready = i; break; } } // Update the history items in the combobox if(nExistsAlready >= 0) m_tbQuickFind.Items.RemoveAt(nExistsAlready); else if(m_tbQuickFind.Items.Count >= 8) m_tbQuickFind.Items.RemoveAt(m_tbQuickFind.Items.Count - 1); m_tbQuickFind.Items.Insert(0, strSearch); // if(bDoSetText) m_tbQuickFind.Text = strSearch; m_tbQuickFind.SelectedIndex = 0; m_tbQuickFind.Select(0, strSearch.Length); // Asynchronous invocation allows to cleanly process // an Enter keypress before blocking the UI BeginInvoke(new PerformQuickFindDelegate(PerformQuickFind), strSearch, strGroupName, false, true); m_bBlockQuickFind = false; } private void OnQuickFindKeyDown(object sender, KeyEventArgs e) { if(HandleMainWindowKeyMessage(e, true)) return; bool bHandled = false; if((e.KeyCode == Keys.Return) || (e.KeyCode == Keys.Enter)) { OnQuickFindSelectedIndexChanged(sender, e); bHandled = true; } // else if((e.KeyCode == Keys.Tab) && m_pwDatabase.IsOpen) // { // UIUtil.SetFocus(m_tvGroups, this); // bHandled = true; // } if(bHandled) UIUtil.SetHandled(e, true); } private void OnQuickFindKeyUp(object sender, KeyEventArgs e) { if(HandleMainWindowKeyMessage(e, false)) return; bool bHandled = false; if((e.KeyCode == Keys.Return) || (e.KeyCode == Keys.Enter)) bHandled = true; // else if(e.KeyCode == Keys.Tab) // bHandled = true; if(bHandled) UIUtil.SetHandled(e, true); } private void OnToolsOptions(object sender, EventArgs e) { OptionsForm ofDlg = new OptionsForm(); ofDlg.InitEx(m_ilCurrentIcons, IsTrayed()); Program.Config.Application.MostRecentlyUsed.MaxItemCount = m_mruList.MaxItemCount; if(ofDlg.ShowDialog() == DialogResult.OK) { m_nLockTimerMax = (int)Program.Config.Security.WorkspaceLocking.LockAfterTime; m_nClipClearMax = Program.Config.Security.ClipboardClearAfterSeconds; // m_lvEntries.GridLines = Program.Config.MainWindow.ShowGridLines; UIUtil.SetAlternatingBgColors(m_lvEntries, m_clrAlternateItemBgColor, Program.Config.MainWindow.EntryListAlternatingBgColors); m_mruList.MaxItemCount = Program.Config.Application.MostRecentlyUsed.MaxItemCount; SetListFont(Program.Config.UI.StandardFont); if(ofDlg.RequiresUIReinitialize) { UIUtil.Initialize(true); if(MonoWorkarounds.IsRequired()) { m_menuMain.Invalidate(); m_toolMain.Invalidate(); m_statusMain.Invalidate(); } } AppConfigSerializer.Save(Program.Config); UpdateTrayIcon(); } UIUtil.DestroyForm(ofDlg); UpdateUI(false, null, true, null, true, null, false); // Fonts changed } private void OnPwListItemDrag(object sender, ItemDragEventArgs e) { if(e.Item == null) return; PwListItem pli = (((ListViewItem)e.Item).Tag as PwListItem); if(pli == null) { Debug.Assert(false); return; } PwEntry pe = pli.Entry; ListViewHitTestInfo lvHit = m_lvEntries.HitTest(m_ptLastEntriesMouseClick); ListViewItem lvi = lvHit.Item; if(lvi == null) return; string strText = string.Empty; if(!AppPolicy.Current.DragDrop) strText = AppPolicy.RequiredPolicyMessage(AppPolicyId.DragDrop); else { int i = 0; foreach(ListViewItem.ListViewSubItem lvs in lvi.SubItems) { if(lvs == lvHit.SubItem) { bool bDummy; strText = GetEntryFieldEx(pe, i, false, out bDummy); break; } ++i; } } PwDatabase pd = m_docMgr.SafeFindContainerOf(pe); string strToTransfer = SprEngine.Compile(strText, new SprContext( pe, pd, SprCompileFlags.All)); m_pgActiveAtDragStart = GetSelectedGroup(); m_bDraggingEntries = true; this.DoDragDrop(strToTransfer, DragDropEffects.Copy | DragDropEffects.Move); m_bDraggingEntries = false; pe.Touch(false); UpdateUIState(false); // SprEngine.Compile might have modified the database } private void OnGroupsListItemDrag(object sender, ItemDragEventArgs e) { TreeNode tn = (e.Item as TreeNode); if(tn == null) { Debug.Assert(false); return; } PwGroup pg = (tn.Tag as PwGroup); if(pg == null) { Debug.Assert(false); return; } if(pg == m_docMgr.ActiveDatabase.RootGroup) return; if(pg.ParentGroup == null) return; m_pgActiveAtDragStart = pg; this.DoDragDrop(pg, DragDropEffects.Copy | DragDropEffects.Move); pg.Touch(false); } private void OnGroupsListDragDrop(object sender, DragEventArgs e) { TreeViewHitTestInfo tvhi = m_tvGroups.HitTest(m_tvGroups.PointToClient( new Point(e.X, e.Y))); if(tvhi.Node == null) return; PwGroup pgSelected = (tvhi.Node.Tag as PwGroup); Debug.Assert(pgSelected != null); if(pgSelected == null) return; if(m_bDraggingEntries) MoveOrCopySelectedEntries(pgSelected, e.Effect); else if(e.Data.GetDataPresent(typeof(PwGroup))) { PwGroup pgDragged = (e.Data.GetData(typeof(PwGroup)) as PwGroup); Debug.Assert(pgDragged != null); if((pgDragged == null) || (pgDragged == pgSelected) || pgSelected.IsContainedIn(pgDragged)) { UpdateUI(false, null, true, null, true, null, false); return; } if(e.Effect == DragDropEffects.Move) { PwGroup pgParent = pgDragged.ParentGroup; Debug.Assert(pgParent != null); if(pgParent != null) { if(!pgParent.Groups.Remove(pgDragged)) { Debug.Assert(false); } } } else if(e.Effect == DragDropEffects.Copy) pgDragged = pgDragged.Duplicate(); else { Debug.Assert(false); } pgSelected.AddGroup(pgDragged, true, true); pgSelected.IsExpanded = true; UpdateUI(false, null, true, pgDragged, true, null, true); } } private void OnGroupsListDragEnter(object sender, DragEventArgs e) { OnGroupsListDragOver(sender, e); } private void OnGroupsListDragOver(object sender, DragEventArgs e) { if(m_bDraggingEntries || e.Data.GetDataPresent(typeof(PwGroup))) { Point pt = m_tvGroups.PointToClient(new Point(e.X, e.Y)); TreeNode tn = m_tvGroups.GetNodeAt(pt); if(tn == null) e.Effect = DragDropEffects.None; else { if((e.KeyState & 8) != 0) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.Move; m_tvGroups.SelectedNode = tn; } } else // No known format e.Effect = DragDropEffects.None; } private void OnGroupsListDragLeave(object sender, EventArgs e) { SetSelectedGroup(m_pgActiveAtDragStart, true); } private void OnGroupsAdd(object sender, EventArgs e) { TreeNode tn = m_tvGroups.SelectedNode; PwDatabase pd = m_docMgr.ActiveDatabase; PwGroup pgParent; if(tn != null) pgParent = (tn.Tag as PwGroup); else pgParent = pd.RootGroup; if(pgParent == null) { Debug.Assert(false); return; } PwGroup pgNew = new PwGroup(true, true, KPRes.NewGroup, PwIcon.Folder); pgParent.AddGroup(pgNew, true); // Add immediately for correct inheritance GroupForm gf = new GroupForm(); gf.InitEx(pgNew, true, m_ilCurrentIcons, pd); if(UIUtil.ShowDialogAndDestroy(gf) == DialogResult.OK) { pgParent.IsExpanded = true; UpdateUI(false, null, true, pgNew, true, null, true); } else pgParent.Groups.Remove(pgNew); } private void OnGroupsDelete(object sender, EventArgs e) { DeleteSelectedGroup(); } private void OnGroupsAfterCollapse(object sender, TreeViewEventArgs e) { TreeNode tn = e.Node; if(tn == null) return; PwGroup pg = tn.Tag as PwGroup; if(pg == null) { Debug.Assert(false); return; } pg.IsExpanded = false; } private void OnGroupsAfterExpand(object sender, TreeViewEventArgs e) { TreeNode tn = e.Node; if(tn == null) return; PwGroup pg = (tn.Tag as PwGroup); if(pg == null) { Debug.Assert(false); return; } pg.IsExpanded = true; } private void OnFileSynchronize(object sender, EventArgs e) { bool? b = ImportUtil.Synchronize(m_docMgr.ActiveDatabase, this, false, this); UpdateUI(false, null, true, null, true, null, false); if(b.HasValue) SetStatusEx(b.Value ? KPRes.SyncSuccess : KPRes.SyncFailed); } private void OnViewAlwaysOnTop(object sender, EventArgs e) { Debug.Assert(m_bFormLoaded); // The following toggles! bool bTop = !Program.Config.MainWindow.AlwaysOnTop; Program.Config.MainWindow.AlwaysOnTop = bTop; UIUtil.SetChecked(m_menuViewAlwaysOnTop, bTop); EnsureAlwaysOnTopOpt(); } private void OnGroupsPrint(object sender, EventArgs e) { if(!m_docMgr.ActiveDatabase.IsOpen) return; PrintGroup(GetSelectedGroup()); } private void OnPwListColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e) { UpdateColumnsEx(true); } private void OnFormResize(object sender, EventArgs e) { // OnFormResize may be called before OnFormLoad (e.g. on high // DPI or when running "START /MIN KeePass.exe"); we must ignore // this (otherwise e.g. the maximized state gets corrupted) if(!m_bFormLoadCalled) return; FormWindowState ws = this.WindowState; bool bAuto = !UIIsWindowStateAutoBlocked(); if((ws == FormWindowState.Normal) || (ws == FormWindowState.Maximized)) m_oszClientLast = this.ClientSize; DwmUtil.EnableWindowPeekPreview(this); if(ws == FormWindowState.Minimized) { // For default value, also see options dialog if(Program.Config.Security.WorkspaceLocking.LockOnWindowMinimize && bAuto) { if(IsAtLeastOneFileOpen()) { LockAllDocuments(); if(m_bCleanedUp) return; // Exited instead of locking } } if(Program.Config.MainWindow.MinimizeToTray && bAuto) MinimizeToTray(true); } else if(ws == FormWindowState.Maximized) Program.Config.MainWindow.Maximized = true; else if(ws == FormWindowState.Normal) Program.Config.MainWindow.Maximized = false; if(((ws == FormWindowState.Normal) || (ws == FormWindowState.Maximized)) && bAuto) { if(Program.Config.MainWindow.EntryListAutoResizeColumns && (m_lvEntries.View == View.Details)) UIUtil.ResizeColumns(m_lvEntries, true); if((m_fwsLast == FormWindowState.Minimized) && IsFileLocked(null) && !UIIsAutoUnlockBlocked()) OnFileLock(sender, e); // Unlock if((m_fwsLast == FormWindowState.Minimized) && !IsFileLocked(null) && Program.Config.MainWindow.FocusQuickFindOnRestore) ResetDefaultFocus(null); } m_fwsLast = ws; } private void OnTrayTray(object sender, EventArgs e) { if(GlobalWindowManager.ActivateTopWindow()) return; if(!IsCommandTypeInvokable(null, AppCommandType.Window)) { // If a non-Form window is being displayed, activate it // indirectly by activating the main window if(GlobalWindowManager.WindowCount > 0) { try { this.Activate(); } catch(Exception) { Debug.Assert(false); } } return; } if((this.WindowState == FormWindowState.Minimized) && !IsTrayed()) { if(Program.Config.MainWindow.Maximized) UIUtil.SetWindowState(this, FormWindowState.Maximized); else UIUtil.SetWindowState(this, FormWindowState.Normal); return; } bool bTray = !IsTrayed(); MinimizeToTray(bTray); if(!bTray) EnsureVisibleForegroundWindow(false, false); } private void OnTimerMainTick(object sender, EventArgs e) { // Prevent UI automations during auto-type if(SendInputEx.IsSending) return; if(m_nClipClearCur > 0) { --m_nClipClearCur; UpdateClipboardStatus(); } else if(m_nClipClearCur == 0) { m_nClipClearCur = -1; UpdateClipboardStatus(); ClipboardUtil.ClearIfOwner(); UpdateUIState(false); } if(m_bUpdateUIStateOnce) UpdateUIState(false); // Resets m_bUpdateUIStateOnce DateTime utcNow = DateTime.UtcNow; // Fast; DateTime internally uses UTC // Update the global inactivity timeout in every main timer tick, // *before* checking the timeout (otherwise KeePass could be locked // even though the user did something within the last second) UpdateGlobalLockTimeout(utcNow); if(m_csLockTimer.TryEnter()) { if(IsAtLeastOneFileOpen() && GlobalWindowManager.CanCloseAllWindows) { long lCurTicks = utcNow.Ticks; if((lCurTicks >= m_lLockAtTicks) || (lCurTicks >= m_lLockAtGlobalTicks)) { if(Program.Config.Security.WorkspaceLocking.ExitInsteadOfLockingAfterTime) OnFileExit(sender, e); else LockAllDocuments(); // Might exit instead of locking } } else NotifyUserActivity(); // Unclosable dialog = activity m_csLockTimer.Exit(); } GlobalMutexPool.Refresh(); } private void OnToolsPlugins(object sender, EventArgs e) { if(!AppPolicy.Try(AppPolicyId.Plugins)) return; PluginsForm pf = new PluginsForm(); pf.InitEx(m_pluginManager); UIUtil.ShowDialogAndDestroy(pf); } private void OnGroupsEdit(object sender, EventArgs e) { PwGroup pg = GetSelectedGroup(); Debug.Assert(pg != null); if(pg == null) return; PwDatabase pwDb = m_docMgr.ActiveDatabase; GroupForm gf = new GroupForm(); gf.InitEx(pg, false, m_ilCurrentIcons, pwDb); if(UIUtil.ShowDialogAndDestroy(gf) == DialogResult.OK) UpdateUI(false, null, true, null, true, null, true); else UpdateUI(false, null, pwDb.UINeedsIconUpdate, null, pwDb.UINeedsIconUpdate, null, false); } private void OnEntryCopyURL(object sender, EventArgs e) { PwEntry[] v = GetSelectedEntries(); Debug.Assert(v != null); if(v == null) return; if(ClipboardUtil.CopyAndMinimize(UrlsToString(v, true), true, this, null, null)) StartClipboardCountdown(); } private void OnEntryMassSetIcon(object sender, EventArgs e) { PwEntry[] vEntries = GetSelectedEntries(); if((vEntries == null) || (vEntries.Length == 0)) return; PwDatabase pd = m_docMgr.ActiveDatabase; IconPickerForm ipf = new IconPickerForm(); ipf.InitEx(m_ilCurrentIcons, (uint)PwIcon.Count, pd, (uint)vEntries[0].IconId, vEntries[0].CustomIconUuid); bool bSetIcons = (ipf.ShowDialog() == DialogResult.OK); if(bSetIcons) { foreach(PwEntry pe in vEntries) { if(!ipf.ChosenCustomIconUuid.Equals(PwUuid.Zero)) pe.CustomIconUuid = ipf.ChosenCustomIconUuid; else { pe.IconId = (PwIcon)ipf.ChosenIconId; pe.CustomIconUuid = PwUuid.Zero; } pe.Touch(true, false); } } bool bUpdImg = pd.UINeedsIconUpdate; bool bModified = (bSetIcons || bUpdImg); if(bModified) RefreshEntriesList(); UpdateUI(false, null, bUpdImg, null, false, null, bModified); UIUtil.DestroyForm(ipf); } private void OnEntryMoveToTop(object sender, EventArgs e) { MoveSelectedEntries(-2); } private void OnEntryMoveOneUp(object sender, EventArgs e) { MoveSelectedEntries(-1); } private void OnEntryMoveOneDown(object sender, EventArgs e) { MoveSelectedEntries(1); } private void OnEntryMoveToBottom(object sender, EventArgs e) { MoveSelectedEntries(2); } private void OnPwListColumnClick(object sender, ColumnClickEventArgs e) { SortPasswordList(true, e.Column, null, true); } private void OnPwListKeyDown(object sender, KeyEventArgs e) { if(HandleMainWindowKeyMessage(e, true)) return; if(HandleMoveKeyMessage(e, true, true)) return; bool bUnhandled = false; if(e.Control) { switch(e.KeyCode) { case Keys.A: OnEntrySelectAll(sender, e); break; case Keys.C: case Keys.Insert: if(e.Shift) OnEntryClipCopy(sender, e); else OnEntryCopyPassword(sender, e); break; case Keys.B: OnEntryCopyUserName(sender, e); break; // case Keys.E: OnEntryEdit(sender, e); break; case Keys.K: OnEntryDuplicate(sender, e); break; case Keys.U: // PerformDefaultUrlAction(null, false); if(e.Shift) OnEntryCopyURL(sender, e); else OnEntryOpenUrl(sender, e); break; case Keys.V: if(e.Shift) OnEntryClipPaste(sender, e); else OnEntryPerformAutoType(sender, e); break; default: bUnhandled = true; break; } } else if(e.Alt) bUnhandled = true; else if(e.KeyCode == Keys.Delete) OnEntryDelete(sender, e); else if((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return)) OnEntryEdit(sender, e); else if(e.KeyCode == Keys.Insert) { if(e.Shift) OnEntryClipPaste(sender, e); else OnEntryAdd(sender, e); } else if(e.KeyCode == Keys.F2) OnEntryEdit(sender, e); else bUnhandled = true; if(!bUnhandled) UIUtil.SetHandled(e, true); } private void OnPwListKeyUp(object sender, KeyEventArgs e) { if(HandleMainWindowKeyMessage(e, false)) return; if(HandleMoveKeyMessage(e, false, true)) return; bool bUnhandled = false; if(e.Control) { switch(e.KeyCode) { case Keys.A: break; case Keys.C: break; case Keys.Insert: break; case Keys.B: break; // case Keys.E: break; case Keys.K: break; case Keys.U: break; case Keys.V: break; default: bUnhandled = true; break; } } else if(e.Alt) bUnhandled = true; else if(e.KeyCode == Keys.Delete) { } else if((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return)) { } else if(e.KeyCode == Keys.Insert) { } else if(e.KeyCode == Keys.F2) { } else bUnhandled = true; if(!bUnhandled) UIUtil.SetHandled(e, true); } private void OnGroupsFind(object sender, EventArgs e) { PwGroup pg = GetSelectedGroup(); Debug.Assert(pg != null); if(pg == null) return; SearchForm sf = new SearchForm(); sf.InitEx(m_docMgr.ActiveDatabase, pg); if(sf.ShowDialog() == DialogResult.OK) { PwGroup pgResults = sf.SearchResultsGroup; UpdateEntryList(pgResults, false); UpdateUIState(false); ShowSearchResultsStatusMessage(pg); } UIUtil.DestroyForm(sf); } private void OnViewTanSimpleListClick(object sender, EventArgs e) { Debug.Assert(m_bFormLoaded); // The following toggles! m_bSimpleTanView = !m_bSimpleTanView; UIUtil.SetChecked(m_menuViewTanSimpleList, m_bSimpleTanView); UpdateEntryList(null, true); } private void OnViewTanIndicesClick(object sender, EventArgs e) { Debug.Assert(m_bFormLoaded); // The following toggles! m_bShowTanIndices = !m_bShowTanIndices; UIUtil.SetChecked(m_menuViewTanIndices, m_bShowTanIndices); RefreshEntriesList(); } private void OnToolsPwGenerator(object sender, EventArgs e) { PwDatabase pwDb = m_docMgr.ActiveDatabase; PwGeneratorForm pgf = new PwGeneratorForm(); pgf.InitEx(null, pwDb.IsOpen, IsTrayed()); if(pgf.ShowDialog() == DialogResult.OK) { if(pwDb.IsOpen) { PwGroup pg = GetSelectedGroup(); if(pg == null) pg = pwDb.RootGroup; PwEntry pe = new PwEntry(true, true); pg.AddEntry(pe, true); byte[] pbAdditionalEntropy = EntropyForm.CollectEntropyIfEnabled( pgf.SelectedProfile); ProtectedString psNew = PwGeneratorUtil.GenerateAcceptable( pgf.SelectedProfile, pbAdditionalEntropy, pe, pwDb); psNew = psNew.WithProtection(pwDb.MemoryProtection.ProtectPassword); pe.Strings.Set(PwDefs.PasswordField, psNew); UpdateUI(false, null, false, null, true, null, true, m_lvEntries); PwObjectList l = new PwObjectList(); l.Add(pe); SelectEntries(l, true, true); EnsureVisibleSelected(false); } } UIUtil.DestroyForm(pgf); } private void OnToolsShowExpired(object sender, EventArgs e) { ShowExpiredEntries(false, true, false); } private void OnToolsTanWizard(object sender, EventArgs e) { PwDatabase pwDb = m_docMgr.ActiveDatabase; if(!pwDb.IsOpen) { Debug.Assert(false); return; } PwGroup pgSelected = GetSelectedGroup(); if(pgSelected == null) return; TanWizardForm twf = new TanWizardForm(); twf.InitEx(pwDb, pgSelected); if(UIUtil.ShowDialogAndDestroy(twf) == DialogResult.OK) UpdateUI(false, null, false, null, true, null, true); } private void OnSystemTrayClick(object sender, EventArgs e) { if((m_mbLastTrayMouseButtons & MouseButtons.Left) != MouseButtons.None) { if(Program.Config.UI.TrayIcon.SingleClickDefault) OnTrayTray(sender, e); } } private void OnSystemTrayDoubleClick(object sender, EventArgs e) { if((m_mbLastTrayMouseButtons & MouseButtons.Left) != MouseButtons.None) { if(!Program.Config.UI.TrayIcon.SingleClickDefault) OnTrayTray(sender, e); } } private void OnEntryViewLinkClicked(object sender, LinkClickedEventArgs e) { string strLink = e.LinkText; if(string.IsNullOrEmpty(strLink)) { Debug.Assert(false); return; } PwEntry pe = GetSelectedEntry(false); ProtectedBinary pb = ((pe != null) ? pe.Binaries.Get(strLink) : null); string strEntryUrl = string.Empty; if(pe != null) strEntryUrl = SprEngine.Compile(pe.Strings.ReadSafe(PwDefs.UrlField), GetEntryListSprContext(pe, m_docMgr.SafeFindContainerOf(pe))); if((pe != null) && (pe.ParentGroup != null) && (pe.ParentGroup.Name == strLink)) { UpdateUI(false, null, true, pe.ParentGroup, true, null, false); TreeNode tnSel = m_tvGroups.SelectedNode; if(tnSel != null) tnSel.EnsureVisible(); EnsureVisibleSelected(false); ResetDefaultFocus(m_lvEntries); } else if(strEntryUrl == strLink) PerformDefaultUrlAction(null, false); else if(pb != null) ExecuteBinaryOpen(pe, strLink); else if(strLink.StartsWith(SprEngine.StrRefStart, StrUtil.CaseIgnoreCmp) && strLink.EndsWith(SprEngine.StrRefEnd, StrUtil.CaseIgnoreCmp)) { // If multiple references are amalgamated, only use first one string strFirstRef = strLink; int iEnd = strLink.IndexOf(SprEngine.StrRefEnd, StrUtil.CaseIgnoreCmp); if(iEnd != (strLink.Length - SprEngine.StrRefEnd.Length)) strFirstRef = strLink.Substring(0, iEnd + 1); char chScan, chWanted; PwEntry peRef = SprEngine.FindRefTarget(strFirstRef, GetEntryListSprContext( pe, m_docMgr.SafeFindContainerOf(pe)), out chScan, out chWanted); if(peRef != null) { UpdateUI(false, null, true, peRef.ParentGroup, true, null, false, m_lvEntries); PwObjectList lSel = new PwObjectList(); lSel.Add(peRef); SelectEntries(lSel, true, true); EnsureVisibleSelected(false); UpdateUIState(false); } } else WinUtil.OpenUrl(strLink, pe); } private void OnEntryClipCopy(object sender, EventArgs e) { if(!m_docMgr.ActiveDatabase.IsOpen) return; PwEntry[] vSelected = GetSelectedEntries(); if((vSelected == null) || (vSelected.Length == 0)) return; if(!AppPolicy.Try(AppPolicyId.CopyWholeEntries)) return; try { EntryUtil.CopyEntriesToClipboard(m_docMgr.ActiveDatabase, vSelected, this.Handle); } catch(Exception exCopy) { MessageService.ShowWarning(exCopy); } StartClipboardCountdown(); } private void OnEntryClipPaste(object sender, EventArgs e) { if(!m_docMgr.ActiveDatabase.IsOpen) return; PwGroup pg = GetSelectedGroup(); if(pg == null) return; try { EntryUtil.PasteEntriesFromClipboard(m_docMgr.ActiveDatabase, pg); } catch(Exception exPaste) { MessageService.ShowWarning(exPaste); } UpdateUI(false, null, false, null, true, null, true); } private void OnEntryColorStandard(object sender, EventArgs e) { SetSelectedEntryColor(Color.Empty); } private void OnEntryColorLightRed(object sender, EventArgs e) { SetSelectedEntryColor(AppDefs.NamedEntryColor.LightRed); } private void OnEntryColorLightGreen(object sender, EventArgs e) { SetSelectedEntryColor(AppDefs.NamedEntryColor.LightGreen); } private void OnEntryColorLightBlue(object sender, EventArgs e) { SetSelectedEntryColor(AppDefs.NamedEntryColor.LightBlue); } private void OnEntryColorLightYellow(object sender, EventArgs e) { SetSelectedEntryColor(AppDefs.NamedEntryColor.LightYellow); } private void OnEntryColorCustom(object sender, EventArgs e) { PwEntry pe = GetSelectedEntry(false); Color clrCur = ((pe != null) ? pe.BackgroundColor : Color.Empty); Color? clr = UIUtil.ShowColorDialog(clrCur); if(clr.HasValue) SetSelectedEntryColor(clr.Value); } private void OnPwListMouseDown(object sender, MouseEventArgs e) { m_ptLastEntriesMouseClick = e.Location; } private void OnToolsDbMaintenance(object sender, EventArgs e) { if(!m_docMgr.ActiveDatabase.IsOpen) return; DatabaseOperationsForm form = new DatabaseOperationsForm(); form.InitEx(m_docMgr.ActiveDatabase); form.ShowDialog(); // UpdateUIState(form.HasModifiedDatabase); bool bMod = form.HasModifiedDatabase; UpdateUI(false, null, bMod, null, bMod, null, bMod); UIUtil.DestroyForm(form); } private void OnCtxPwListOpening(object sender, CancelEventArgs e) { MainAppState s = UpdateUIEntryCtxState(null); m_dynCustomStrings.Clear(); m_dynCustomBinaries.Clear(); if(s.EntriesSelected != 1) { m_ctxEntryCopyString.Visible = false; m_ctxEntryAttachments.Visible = false; return; } PwEntry pe = s.SelectedEntry; if(pe == null) { Debug.Assert(false); return; } uint uStrItems = 0; List lAvailKeys = new List(PwCharSet.MenuAccels); foreach(KeyValuePair kvp in pe.Strings) { string strKey = kvp.Key; if(PwDefs.IsStandardField(strKey)) continue; strKey = StrUtil.EncodeMenuText(strKey); strKey = StrUtil.AddAccelerator(strKey, lAvailKeys); m_dynCustomStrings.AddItem(strKey, Properties.Resources.B16x16_KGPG_Info, kvp.Key); ++uStrItems; } m_ctxEntryCopyString.Visible = (uStrItems > 0); uint uBinItems = 0; lAvailKeys = new List(PwCharSet.MenuAccels); foreach(KeyValuePair kvp in pe.Binaries) { Image imgIcon; // Try a fast classification BinaryDataClass bdc = BinaryDataClassifier.ClassifyUrl(kvp.Key); if((bdc == BinaryDataClass.Text) || (bdc == BinaryDataClass.RichText)) imgIcon = Properties.Resources.B16x16_ASCII; else if(bdc == BinaryDataClass.Image) imgIcon = Properties.Resources.B16x16_Spreadsheet; else if(bdc == BinaryDataClass.WebDocument) imgIcon = Properties.Resources.B16x16_HTML; else imgIcon = Properties.Resources.B16x16_Binary; EntryBinaryDataContext ctxBin = new EntryBinaryDataContext(); ctxBin.Entry = pe; ctxBin.Name = kvp.Key; string strKey = StrUtil.EncodeMenuText(kvp.Key); strKey = StrUtil.AddAccelerator(strKey, lAvailKeys); m_dynCustomBinaries.AddItem(strKey, imgIcon, ctxBin); ++uBinItems; } m_ctxEntryAttachments.Visible = (uBinItems > 0); } private void OnToolsGeneratePasswordList(object sender, EventArgs e) { PwDatabase pwDb = m_docMgr.ActiveDatabase; if(!pwDb.IsOpen) return; PwGeneratorForm pgf = new PwGeneratorForm(); pgf.InitEx(null, true, IsTrayed()); if(pgf.ShowDialog() == DialogResult.OK) { PwGroup pg = GetSelectedGroup(); if(pg == null) pg = pwDb.RootGroup; SingleLineEditForm dlgCount = new SingleLineEditForm(); dlgCount.InitEx(KPRes.GenerateCount, KPRes.GenerateCountDesc, KPRes.GenerateCountLongDesc, Properties.Resources.B48x48_KGPG_Gen, string.Empty, null); if(dlgCount.ShowDialog() == DialogResult.OK) { uint uCount; if(!uint.TryParse(dlgCount.ResultString, out uCount)) uCount = 1; byte[] pbAdditionalEntropy = EntropyForm.CollectEntropyIfEnabled( pgf.SelectedProfile); PwObjectList l = new PwObjectList(); bool bAcceptAlways = false; for(uint i = 0; i < uCount; ++i) { PwEntry pe = new PwEntry(true, true); pg.AddEntry(pe, true); ProtectedString psNew = PwGeneratorUtil.GenerateAcceptable( pgf.SelectedProfile, pbAdditionalEntropy, pe, pwDb, ref bAcceptAlways); psNew = psNew.WithProtection(pwDb.MemoryProtection.ProtectPassword); pe.Strings.Set(PwDefs.PasswordField, psNew); l.Add(pe); } UpdateUI(false, null, false, null, true, null, true, m_lvEntries); SelectEntries(l, true, true); EnsureVisibleSelected(false); } UIUtil.DestroyForm(dlgCount); } UIUtil.DestroyForm(pgf); } private void OnViewWindowsSideBySide(object sender, EventArgs e) { SetMainWindowLayout(true); } private void OnViewWindowsStacked(object sender, EventArgs e) { SetMainWindowLayout(false); } private void OnHelpSelectSource(object sender, EventArgs e) { HelpSourceForm hsf = new HelpSourceForm(); UIUtil.ShowDialogAndDestroy(hsf); } private void OnFileOpenUrl(object sender, EventArgs e) { OpenDatabase(null, null, false); } private void OnFileSaveAsUrl(object sender, EventArgs e) { SaveDatabaseAs(null, null, true, sender, false); } private void OnFileImport(object sender, EventArgs e) { PwDatabase pwDb = m_docMgr.ActiveDatabase; bool bAppendedToRootOnly; bool? bResult = ImportUtil.Import(pwDb, out bAppendedToRootOnly, this); bool bModified = (bResult.HasValue ? bResult.Value : false); if(bAppendedToRootOnly && pwDb.IsOpen) { UpdateUI(false, null, true, pwDb.RootGroup, true, null, bModified); if(m_lvEntries.Items.Count > 0) m_lvEntries.EnsureVisible(m_lvEntries.Items.Count - 1); } else UpdateUI(false, null, true, null, true, null, bModified); } private void OnGroupsMoveToTop(object sender, EventArgs e) { MoveSelectedGroup(-2); } private void OnGroupsMoveOneUp(object sender, EventArgs e) { MoveSelectedGroup(-1); } private void OnGroupsMoveOneDown(object sender, EventArgs e) { MoveSelectedGroup(1); } private void OnGroupsMoveToBottom(object sender, EventArgs e) { MoveSelectedGroup(2); } private void OnGroupsKeyDown(object sender, KeyEventArgs e) { if(HandleMainWindowKeyMessage(e, true)) return; if(HandleMoveKeyMessage(e, true, false)) return; bool bUnhandled = false; TreeNode tn = m_tvGroups.SelectedNode; if(e.Alt) bUnhandled = true; else if(e.KeyCode == Keys.Delete) OnGroupsDelete(sender, e); else if(e.KeyCode == Keys.F2) { if(tn != null) // tn.BeginEdit(); OnGroupsEdit(sender, e); } else bUnhandled = true; if(!bUnhandled) UIUtil.SetHandled(e, true); else m_kLastUnhandledGroupsKey = e.KeyCode; } private void OnGroupsKeyUp(object sender, KeyEventArgs e) { OnGroupsKeyUpPriv(sender, e); m_kLastUnhandledGroupsKey = Keys.None; // Always reset } private void OnGroupsKeyUpPriv(object sender, KeyEventArgs e) { if(HandleMainWindowKeyMessage(e, false)) return; if(HandleMoveKeyMessage(e, false, false)) return; bool bUnhandled = false; if(e.Alt) bUnhandled = true; else if(e.KeyCode == Keys.Delete) { } else if(e.KeyCode == Keys.F2) { } else if((e.KeyCode == Keys.Up) || (e.KeyCode == Keys.Down) || (e.KeyCode == Keys.Left) || (e.KeyCode == Keys.Right) || (e.KeyCode == Keys.Home) || (e.KeyCode == Keys.End) || ((e.KeyCode >= Keys.A) && (e.KeyCode <= Keys.Z)) || ((e.KeyCode >= Keys.D0) && (e.KeyCode <= Keys.D9)) || ((e.KeyCode >= Keys.NumPad0) && (e.KeyCode <= Keys.NumPad9))) { // It is possible to receive a key up event even though the // key down event went to a different control (e.g. a menu // item); do not do anything in this case if(e.KeyCode == m_kLastUnhandledGroupsKey) UpdateUI(false, null, false, null, true, null, false); } else bUnhandled = true; if(!bUnhandled) UIUtil.SetHandled(e, true); } private void OnEntryUrlOpenInInternal(object sender, EventArgs e) { InternalBrowserForm ibf = new InternalBrowserForm(); string strUrl = string.Empty; PwEntry pe = GetSelectedEntry(false); if(pe != null) strUrl = pe.Strings.ReadSafe(PwDefs.UrlField); ibf.InitEx(strUrl, m_docMgr.ActiveDatabase.RootGroup); UIUtil.ShowDialogAndDestroy(ibf); } private void OnTabMainSelectedIndexChanged(object sender, EventArgs e) { if(m_bBlockTabChanged) return; SaveWindowState(); TabPage tbSelect = m_tabMain.SelectedTab; if(tbSelect == null) return; PwDocument ds = (tbSelect.Tag as PwDocument); MakeDocumentActive(ds); if(IsFileLocked(ds)) OnFileLock(sender, e); // Unlock } private void OnFileSaveAll(object sender, EventArgs e) { SaveAllDocuments(); } private void OnFileSaveAsCopy(object sender, EventArgs e) { SaveDatabaseAs(null, null, false, sender, true); } private void OnEntrySelectedPrint(object sender, EventArgs e) { PrintGroup(GetSelectedEntriesAsGroup()); } private void OnViewShowEntriesOfSubGroups(object sender, EventArgs e) { Debug.Assert(m_bFormLoaded); // The following toggles! bool b = !Program.Config.MainWindow.ShowEntriesOfSubGroups; Program.Config.MainWindow.ShowEntriesOfSubGroups = b; UIUtil.SetChecked(m_menuViewShowEntriesOfSubGroups, b); UpdateUI(false, null, false, null, true, null, false); } private void OnFileSynchronizeUrl(object sender, EventArgs e) { bool? b = ImportUtil.Synchronize(m_docMgr.ActiveDatabase, this, true, this); UpdateUI(false, null, true, null, true, null, false); if(b.HasValue) SetStatusEx(b.Value ? KPRes.SyncSuccess : KPRes.SyncFailed); } private void OnCtxTrayOpening(object sender, CancelEventArgs e) { UpdateTrayState(); } private void OnTrayLock(object sender, EventArgs e) { if(!IsCommandTypeInvokable(null, AppCommandType.Lock)) return; OnFileLock(sender, e); } private void OnFileExport(object sender, EventArgs e) { PerformExport(null, true); } private void OnGroupsExport(object sender, EventArgs e) { PerformExport(GetSelectedGroup(), true); } private void OnEntrySelectedExport(object sender, EventArgs e) { PerformExport(GetSelectedEntriesAsGroup(), false); } private void OnEntryViewKeyDown(object sender, KeyEventArgs e) { HandleMainWindowKeyMessage(e, true); } private void OnEntryViewKeyUp(object sender, KeyEventArgs e) { HandleMainWindowKeyMessage(e, false); } private void OnSystemTrayMouseDown(object sender, MouseEventArgs e) { m_mbLastTrayMouseButtons = e.Button; } private bool m_bInActRedir = false; private void OnFormActivated(object sender, EventArgs e) { NotifyUserActivity(); // if(m_vRedirectActivation.Count > 0) // { // Form f = m_vRedirectActivation.Peek(); // if(f != null) f.Activate(); // // SystemSounds.Beep.Play(); // Do not beep! // } // // else EnsureAlwaysOnTopOpt(); try { Form fTop = GlobalWindowManager.TopWindow; if((fTop != null) && (fTop != this) && !m_bInActRedir) { m_bInActRedir = true; try { fTop.Activate(); } finally { m_bInActRedir = false; } } } catch(Exception) { Debug.Assert(false); } } private void OnToolsTriggers(object sender, EventArgs e) { EcasTriggersForm f = new EcasTriggersForm(); if(!f.InitEx(Program.TriggerSystem, m_ilCurrentIcons)) return; UIUtil.ShowDialogAndDestroy(f); } private void OnTabMainMouseClick(object sender, MouseEventArgs e) { if(e.Button == MouseButtons.Middle) { for(int i = 0; i < m_tabMain.TabCount; ++i) { if(m_tabMain.GetTabRect(i).Contains(e.Location)) { PwDocument pd = (m_tabMain.TabPages[i].Tag as PwDocument); if(pd == null) { Debug.Assert(false); break; } CloseDocument(pd, false, false, true); break; } } } } private void OnViewConfigColumns(object sender, EventArgs e) { UpdateColumnsEx(true); // Save display indices ColumnsForm dlg = new ColumnsForm(); if(UIUtil.ShowDialogAndDestroy(dlg) == DialogResult.OK) { UpdateColumnsEx(false); UpdateUI(false, null, false, null, true, null, false); } } private void OnEditShowByTagOpening(object sender, EventArgs e) { UpdateTagsMenu(m_dynShowEntriesByTagsEditMenu, false, false, TagsMenuMode.All); } private void OnEntryViewsByTagOpening(object sender, EventArgs e) { UpdateTagsMenu(m_dynShowEntriesByTagsToolBar, true, true, TagsMenuMode.All); } private void OnEntrySelectedNewTag(object sender, EventArgs e) { OnAddEntryTag(sender, new DynamicMenuEventArgs(string.Empty, string.Empty)); } private void OnEntrySelectedAddTagOpening(object sender, EventArgs e) { UpdateTagsMenu(m_dynAddTag, true, false, TagsMenuMode.Add); } private void OnEntrySelectedRemoveTagOpening(object sender, EventArgs e) { UpdateTagsMenu(m_dynRemoveTag, false, false, TagsMenuMode.Remove); } private void OnCtxEntryClipboardOpening(object sender, EventArgs e) { try // Might fail/throw due to clipboard access timeout { m_ctxEntryClipPaste.Enabled = ClipboardUtil.ContainsData( EntryUtil.ClipFormatEntries); } catch(Exception) { m_ctxEntryClipPaste.Enabled = false; } } private void OnMenuEditOpening(object sender, EventArgs e) { MainAppState s = UpdateUIGroupCtxState(null); UpdateUIEntryCtxState(s); UpdateLinkedMenuItems(); } private void OnCtxGroupListOpening(object sender, CancelEventArgs e) { UpdateUIGroupCtxState(null); } private void OnGroupsSort(object sender, EventArgs e) { SortSubGroups(false); } private void OnGroupsSortRec(object sender, EventArgs e) { SortSubGroups(true); } private void OnPwListClick(object sender, EventArgs e) { // The following ensures a faster update when multiple items // are automatically deselected when clicking on another item UpdateUIState(false); } private void OnGroupsEmpty(object sender, EventArgs e) { EmptyRecycleBin(); } private void OnToolsDelDupEntries(object sender, EventArgs e) { PwDatabase pd = m_docMgr.ActiveDatabase; if((pd == null) || !pd.IsOpen) { Debug.Assert(false); return; } Form fOptDialog; IStatusLogger sl = StatusUtil.CreateStatusDialog(this, out fOptDialog, null, KPRes.Delete + "...", true, false); // if(fOptDialog != null) RedirectActivationPush(fOptDialog); UIBlockInteraction(true); uint uDeleted = pd.DeleteDuplicateEntries(sl); // if(fOptDialog != null) RedirectActivationPop(); UIBlockInteraction(false); sl.EndLogging(); UpdateUI(false, null, false, null, (uDeleted > 0), null, (uDeleted > 0)); SetObjectsDeletedStatus(uDeleted, true); } private void OnToolsDelEmptyGroups(object sender, EventArgs e) { PwDatabase pd = m_docMgr.ActiveDatabase; if((pd == null) || !pd.IsOpen) { Debug.Assert(false); return; } uint uDeleted = pd.DeleteEmptyGroups(); UpdateUI(false, null, (uDeleted > 0), null, false, null, (uDeleted > 0)); SetObjectsDeletedStatus(uDeleted, true); } private void OnToolsDelUnusedIcons(object sender, EventArgs e) { PwDatabase pd = m_docMgr.ActiveDatabase; if((pd == null) || !pd.IsOpen) { Debug.Assert(false); return; } uint uDeleted = pd.DeleteUnusedCustomIcons(); UpdateUI(false, null, (uDeleted > 0), null, (uDeleted > 0), null, (uDeleted > 0)); SetObjectsDeletedStatus(uDeleted, true); } private void OnTrayExit(object sender, EventArgs e) { if(!IsCommandTypeInvokable(null, AppCommandType.Window)) return; OnFileExit(sender, e); } private void OnTrayOptions(object sender, EventArgs e) { if(!IsCommandTypeInvokable(null, AppCommandType.Window)) return; OnToolsOptions(sender, e); } private void OnTrayGenPw(object sender, EventArgs e) { if(!IsCommandTypeInvokable(null, AppCommandType.Window)) return; OnToolsPwGenerator(sender, e); } private void OnGroupsDuplicate(object sender, EventArgs e) { PwGroup pgBase = GetSelectedGroup(); if(pgBase == null) { Debug.Assert(false); return; } PwGroup pgParent = pgBase.ParentGroup; if(pgParent == null) { Debug.Assert(false); return; } DuplicationForm dlg = new DuplicationForm(); if(UIUtil.ShowDialogAndDestroy(dlg) != DialogResult.OK) return; PwDatabase pd = m_docMgr.ActiveDatabase; PwGroup pg = pgBase.Duplicate(); pg.ParentGroup = pgParent; int iBase = pgParent.Groups.IndexOf(pgBase); if(iBase < 0) { Debug.Assert(false); iBase = (int)pgParent.Groups.UCount; } else ++iBase; pgParent.Groups.Insert((uint)iBase, pg); PwObjectList lBase = pgBase.GetEntries(true); PwObjectList lNew = pg.GetEntries(true); if((lBase != null) && (lNew != null) && (lBase.UCount == lNew.UCount)) { for(uint u = 0; u < lBase.UCount; ++u) dlg.ApplyTo(lNew.GetAt(u), lBase.GetAt(u), pd); } else { Debug.Assert(false); } UpdateUI(false, null, true, pg, true, null, true); } private void OnToolsXmlRep(object sender, EventArgs e) { PwDatabase pd = m_docMgr.ActiveDatabase; if((pd == null) || !pd.IsOpen) { Debug.Assert(false); return; } XmlReplaceForm dlg = new XmlReplaceForm(); dlg.InitEx(pd); if(UIUtil.ShowDialogAndDestroy(dlg) == DialogResult.OK) UpdateUI(false, null, true, null, true, null, false); } private void OnTabMainKeyDown(object sender, KeyEventArgs e) { // Ignore Tab key, otherwise it is handled twice; // https://sourceforge.net/p/keepass/discussion/329220/thread/3c82f94b/ if(e.KeyCode == Keys.Tab) return; HandleMainWindowKeyMessage(e, true); } private void OnTabMainKeyUp(object sender, KeyEventArgs e) { // Ignore Tab key, otherwise it is handled twice; // https://sourceforge.net/p/keepass/discussion/329220/thread/3c82f94b/ if(e.KeyCode == Keys.Tab) return; HandleMainWindowKeyMessage(e, false); } private void OnEntryMoveToGroupOpening(object sender, EventArgs e) { UpdateEntryMoveMenu(false); } } } KeePass/Forms/LanguageForm.resx0000664000000000000000000001326612365174524015472 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/StatusProgressForm.resx0000664000000000000000000001326612501532404016742 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/PrintForm.Designer.cs0000664000000000000000000006564212626620712016226 0ustar rootrootnamespace KeePass.Forms { partial class PrintForm { /// /// Erforderliche Designervariable. /// private System.ComponentModel.IContainer components = null; /// /// Verwendete Ressourcen bereinigen. /// /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Vom Windows Form-Designer generierter Code /// /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// private void InitializeComponent() { this.m_tabMain = new System.Windows.Forms.TabControl(); this.m_tabPreview = new System.Windows.Forms.TabPage(); this.m_wbMain = new System.Windows.Forms.WebBrowser(); this.m_lblPreviewHint = new System.Windows.Forms.Label(); this.m_tabDataLayout = new System.Windows.Forms.TabPage(); this.m_grpSorting = new System.Windows.Forms.GroupBox(); this.m_lblEntrySortHint = new System.Windows.Forms.Label(); this.m_cmbSortEntries = new System.Windows.Forms.ComboBox(); this.m_lblSortEntries = new System.Windows.Forms.Label(); this.m_grpFont = new System.Windows.Forms.GroupBox(); this.m_cbSmallMono = new System.Windows.Forms.CheckBox(); this.m_cbMonospaceForPasswords = new System.Windows.Forms.CheckBox(); this.m_rbMonospace = new System.Windows.Forms.RadioButton(); this.m_rbSansSerif = new System.Windows.Forms.RadioButton(); this.m_rbSerif = new System.Windows.Forms.RadioButton(); this.m_grpFields = new System.Windows.Forms.GroupBox(); this.m_cbTags = new System.Windows.Forms.CheckBox(); this.m_cbCustomStrings = new System.Windows.Forms.CheckBox(); this.m_cbGroups = new System.Windows.Forms.CheckBox(); this.m_linkDeselectAllFields = new System.Windows.Forms.LinkLabel(); this.m_linkSelectAllFields = new System.Windows.Forms.LinkLabel(); this.m_cbAutoType = new System.Windows.Forms.CheckBox(); this.m_cbLastMod = new System.Windows.Forms.CheckBox(); this.m_cbCreation = new System.Windows.Forms.CheckBox(); this.m_cbExpire = new System.Windows.Forms.CheckBox(); this.m_cbNotes = new System.Windows.Forms.CheckBox(); this.m_cbPassword = new System.Windows.Forms.CheckBox(); this.m_cbUrl = new System.Windows.Forms.CheckBox(); this.m_cbUser = new System.Windows.Forms.CheckBox(); this.m_cbTitle = new System.Windows.Forms.CheckBox(); this.m_grpLayout = new System.Windows.Forms.GroupBox(); this.m_lblDetailsInfo = new System.Windows.Forms.Label(); this.m_lblTabularInfo = new System.Windows.Forms.Label(); this.m_rbDetails = new System.Windows.Forms.RadioButton(); this.m_rbTabular = new System.Windows.Forms.RadioButton(); this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_btnConfigPrinter = new System.Windows.Forms.Button(); this.m_btnPrintPreview = new System.Windows.Forms.Button(); this.m_cbUuid = new System.Windows.Forms.CheckBox(); this.m_tabMain.SuspendLayout(); this.m_tabPreview.SuspendLayout(); this.m_tabDataLayout.SuspendLayout(); this.m_grpSorting.SuspendLayout(); this.m_grpFont.SuspendLayout(); this.m_grpFields.SuspendLayout(); this.m_grpLayout.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); this.SuspendLayout(); // // m_tabMain // this.m_tabMain.Controls.Add(this.m_tabPreview); this.m_tabMain.Controls.Add(this.m_tabDataLayout); this.m_tabMain.Location = new System.Drawing.Point(12, 66); this.m_tabMain.Name = "m_tabMain"; this.m_tabMain.SelectedIndex = 0; this.m_tabMain.Size = new System.Drawing.Size(601, 463); this.m_tabMain.TabIndex = 2; this.m_tabMain.SelectedIndexChanged += new System.EventHandler(this.OnTabSelectedIndexChanged); // // m_tabPreview // this.m_tabPreview.Controls.Add(this.m_wbMain); this.m_tabPreview.Controls.Add(this.m_lblPreviewHint); this.m_tabPreview.Location = new System.Drawing.Point(4, 22); this.m_tabPreview.Name = "m_tabPreview"; this.m_tabPreview.Padding = new System.Windows.Forms.Padding(3); this.m_tabPreview.Size = new System.Drawing.Size(593, 437); this.m_tabPreview.TabIndex = 0; this.m_tabPreview.Text = "Preview"; this.m_tabPreview.UseVisualStyleBackColor = true; // // m_wbMain // this.m_wbMain.AllowWebBrowserDrop = false; this.m_wbMain.Dock = System.Windows.Forms.DockStyle.Fill; this.m_wbMain.IsWebBrowserContextMenuEnabled = false; this.m_wbMain.Location = new System.Drawing.Point(3, 22); this.m_wbMain.MinimumSize = new System.Drawing.Size(20, 20); this.m_wbMain.Name = "m_wbMain"; this.m_wbMain.ScriptErrorsSuppressed = true; this.m_wbMain.Size = new System.Drawing.Size(587, 412); this.m_wbMain.TabIndex = 1; this.m_wbMain.WebBrowserShortcutsEnabled = false; // // m_lblPreviewHint // this.m_lblPreviewHint.Dock = System.Windows.Forms.DockStyle.Top; this.m_lblPreviewHint.ForeColor = System.Drawing.Color.Brown; this.m_lblPreviewHint.Location = new System.Drawing.Point(3, 3); this.m_lblPreviewHint.Name = "m_lblPreviewHint"; this.m_lblPreviewHint.Size = new System.Drawing.Size(587, 19); this.m_lblPreviewHint.TabIndex = 0; this.m_lblPreviewHint.Text = "Note that this preview is a layout preview only. To see a preview of the printed " + "document, click the \'Print Preview\' button."; // // m_tabDataLayout // this.m_tabDataLayout.Controls.Add(this.m_grpSorting); this.m_tabDataLayout.Controls.Add(this.m_grpFont); this.m_tabDataLayout.Controls.Add(this.m_grpFields); this.m_tabDataLayout.Controls.Add(this.m_grpLayout); this.m_tabDataLayout.Location = new System.Drawing.Point(4, 22); this.m_tabDataLayout.Name = "m_tabDataLayout"; this.m_tabDataLayout.Size = new System.Drawing.Size(593, 437); this.m_tabDataLayout.TabIndex = 2; this.m_tabDataLayout.Text = "Layout"; this.m_tabDataLayout.UseVisualStyleBackColor = true; // // m_grpSorting // this.m_grpSorting.Controls.Add(this.m_lblEntrySortHint); this.m_grpSorting.Controls.Add(this.m_cmbSortEntries); this.m_grpSorting.Controls.Add(this.m_lblSortEntries); this.m_grpSorting.Location = new System.Drawing.Point(10, 356); this.m_grpSorting.Name = "m_grpSorting"; this.m_grpSorting.Size = new System.Drawing.Size(571, 69); this.m_grpSorting.TabIndex = 3; this.m_grpSorting.TabStop = false; this.m_grpSorting.Text = "Sorting"; // // m_lblEntrySortHint // this.m_lblEntrySortHint.AutoSize = true; this.m_lblEntrySortHint.Location = new System.Drawing.Point(6, 46); this.m_lblEntrySortHint.Name = "m_lblEntrySortHint"; this.m_lblEntrySortHint.Size = new System.Drawing.Size(371, 13); this.m_lblEntrySortHint.TabIndex = 2; this.m_lblEntrySortHint.Text = "Entries are sorted within their groups, i.e. the group structure is not broken up" + "."; // // m_cmbSortEntries // this.m_cmbSortEntries.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbSortEntries.FormattingEnabled = true; this.m_cmbSortEntries.Location = new System.Drawing.Point(111, 19); this.m_cmbSortEntries.Name = "m_cmbSortEntries"; this.m_cmbSortEntries.Size = new System.Drawing.Size(172, 21); this.m_cmbSortEntries.TabIndex = 1; // // m_lblSortEntries // this.m_lblSortEntries.AutoSize = true; this.m_lblSortEntries.Location = new System.Drawing.Point(6, 22); this.m_lblSortEntries.Name = "m_lblSortEntries"; this.m_lblSortEntries.Size = new System.Drawing.Size(99, 13); this.m_lblSortEntries.TabIndex = 0; this.m_lblSortEntries.Text = "Sort entries by field:"; // // m_grpFont // this.m_grpFont.Controls.Add(this.m_cbSmallMono); this.m_grpFont.Controls.Add(this.m_cbMonospaceForPasswords); this.m_grpFont.Controls.Add(this.m_rbMonospace); this.m_grpFont.Controls.Add(this.m_rbSansSerif); this.m_grpFont.Controls.Add(this.m_rbSerif); this.m_grpFont.Location = new System.Drawing.Point(10, 259); this.m_grpFont.Name = "m_grpFont"; this.m_grpFont.Size = new System.Drawing.Size(571, 91); this.m_grpFont.TabIndex = 2; this.m_grpFont.TabStop = false; this.m_grpFont.Text = "Font"; // // m_cbSmallMono // this.m_cbSmallMono.AutoSize = true; this.m_cbSmallMono.Location = new System.Drawing.Point(10, 66); this.m_cbSmallMono.Name = "m_cbSmallMono"; this.m_cbSmallMono.Size = new System.Drawing.Size(176, 17); this.m_cbSmallMono.TabIndex = 4; this.m_cbSmallMono.Text = "Use extra small monospace font"; this.m_cbSmallMono.UseVisualStyleBackColor = true; // // m_cbMonospaceForPasswords // this.m_cbMonospaceForPasswords.AutoSize = true; this.m_cbMonospaceForPasswords.Checked = true; this.m_cbMonospaceForPasswords.CheckState = System.Windows.Forms.CheckState.Checked; this.m_cbMonospaceForPasswords.Location = new System.Drawing.Point(10, 43); this.m_cbMonospaceForPasswords.Name = "m_cbMonospaceForPasswords"; this.m_cbMonospaceForPasswords.Size = new System.Drawing.Size(192, 17); this.m_cbMonospaceForPasswords.TabIndex = 3; this.m_cbMonospaceForPasswords.Text = "Use monospace font for passwords"; this.m_cbMonospaceForPasswords.UseVisualStyleBackColor = true; // // m_rbMonospace // this.m_rbMonospace.AutoSize = true; this.m_rbMonospace.Font = new System.Drawing.Font("Courier New", 8.25F); this.m_rbMonospace.Location = new System.Drawing.Point(142, 19); this.m_rbMonospace.Name = "m_rbMonospace"; this.m_rbMonospace.Size = new System.Drawing.Size(88, 18); this.m_rbMonospace.TabIndex = 2; this.m_rbMonospace.Text = "Monospace"; this.m_rbMonospace.UseVisualStyleBackColor = true; // // m_rbSansSerif // this.m_rbSansSerif.AutoSize = true; this.m_rbSansSerif.Checked = true; this.m_rbSansSerif.Font = new System.Drawing.Font("Tahoma", 8.25F); this.m_rbSansSerif.Location = new System.Drawing.Point(62, 19); this.m_rbSansSerif.Name = "m_rbSansSerif"; this.m_rbSansSerif.Size = new System.Drawing.Size(74, 17); this.m_rbSansSerif.TabIndex = 1; this.m_rbSansSerif.TabStop = true; this.m_rbSansSerif.Text = "Sans-Serif"; this.m_rbSansSerif.UseVisualStyleBackColor = true; // // m_rbSerif // this.m_rbSerif.AutoSize = true; this.m_rbSerif.Font = new System.Drawing.Font("Times New Roman", 8.25F); this.m_rbSerif.Location = new System.Drawing.Point(10, 19); this.m_rbSerif.Name = "m_rbSerif"; this.m_rbSerif.Size = new System.Drawing.Size(46, 18); this.m_rbSerif.TabIndex = 0; this.m_rbSerif.Text = "Serif"; this.m_rbSerif.UseVisualStyleBackColor = true; // // m_grpFields // this.m_grpFields.Controls.Add(this.m_cbUuid); this.m_grpFields.Controls.Add(this.m_cbTags); this.m_grpFields.Controls.Add(this.m_cbCustomStrings); this.m_grpFields.Controls.Add(this.m_cbGroups); this.m_grpFields.Controls.Add(this.m_linkDeselectAllFields); this.m_grpFields.Controls.Add(this.m_linkSelectAllFields); this.m_grpFields.Controls.Add(this.m_cbAutoType); this.m_grpFields.Controls.Add(this.m_cbLastMod); this.m_grpFields.Controls.Add(this.m_cbCreation); this.m_grpFields.Controls.Add(this.m_cbExpire); this.m_grpFields.Controls.Add(this.m_cbNotes); this.m_grpFields.Controls.Add(this.m_cbPassword); this.m_grpFields.Controls.Add(this.m_cbUrl); this.m_grpFields.Controls.Add(this.m_cbUser); this.m_grpFields.Controls.Add(this.m_cbTitle); this.m_grpFields.Location = new System.Drawing.Point(10, 137); this.m_grpFields.Name = "m_grpFields"; this.m_grpFields.Size = new System.Drawing.Size(571, 116); this.m_grpFields.TabIndex = 1; this.m_grpFields.TabStop = false; this.m_grpFields.Text = "Fields"; // // m_cbTags // this.m_cbTags.AutoSize = true; this.m_cbTags.Location = new System.Drawing.Point(464, 42); this.m_cbTags.Name = "m_cbTags"; this.m_cbTags.Size = new System.Drawing.Size(50, 17); this.m_cbTags.TabIndex = 9; this.m_cbTags.Text = "Tags"; this.m_cbTags.UseVisualStyleBackColor = true; // // m_cbCustomStrings // this.m_cbCustomStrings.AutoSize = true; this.m_cbCustomStrings.Location = new System.Drawing.Point(106, 65); this.m_cbCustomStrings.Name = "m_cbCustomStrings"; this.m_cbCustomStrings.Size = new System.Drawing.Size(116, 17); this.m_cbCustomStrings.TabIndex = 11; this.m_cbCustomStrings.Text = "Custom string fields"; this.m_cbCustomStrings.UseVisualStyleBackColor = true; // // m_cbGroups // this.m_cbGroups.AutoSize = true; this.m_cbGroups.Location = new System.Drawing.Point(9, 65); this.m_cbGroups.Name = "m_cbGroups"; this.m_cbGroups.Size = new System.Drawing.Size(84, 17); this.m_cbGroups.TabIndex = 10; this.m_cbGroups.Text = "Group name"; this.m_cbGroups.UseVisualStyleBackColor = true; // // m_linkDeselectAllFields // this.m_linkDeselectAllFields.AutoSize = true; this.m_linkDeselectAllFields.Location = new System.Drawing.Point(63, 91); this.m_linkDeselectAllFields.Name = "m_linkDeselectAllFields"; this.m_linkDeselectAllFields.Size = new System.Drawing.Size(63, 13); this.m_linkDeselectAllFields.TabIndex = 14; this.m_linkDeselectAllFields.TabStop = true; this.m_linkDeselectAllFields.Text = "Deselect All"; this.m_linkDeselectAllFields.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.OnLinkDeselectAllFields); // // m_linkSelectAllFields // this.m_linkSelectAllFields.AutoSize = true; this.m_linkSelectAllFields.Location = new System.Drawing.Point(6, 91); this.m_linkSelectAllFields.Name = "m_linkSelectAllFields"; this.m_linkSelectAllFields.Size = new System.Drawing.Size(51, 13); this.m_linkSelectAllFields.TabIndex = 13; this.m_linkSelectAllFields.TabStop = true; this.m_linkSelectAllFields.Text = "Select All"; this.m_linkSelectAllFields.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.OnLinkSelectAllFields); // // m_cbAutoType // this.m_cbAutoType.AutoSize = true; this.m_cbAutoType.Location = new System.Drawing.Point(360, 42); this.m_cbAutoType.Name = "m_cbAutoType"; this.m_cbAutoType.Size = new System.Drawing.Size(75, 17); this.m_cbAutoType.TabIndex = 8; this.m_cbAutoType.Text = "Auto-Type"; this.m_cbAutoType.UseVisualStyleBackColor = true; // // m_cbLastMod // this.m_cbLastMod.AutoSize = true; this.m_cbLastMod.Location = new System.Drawing.Point(106, 42); this.m_cbLastMod.Name = "m_cbLastMod"; this.m_cbLastMod.Size = new System.Drawing.Size(127, 17); this.m_cbLastMod.TabIndex = 6; this.m_cbLastMod.Text = "Last modification time"; this.m_cbLastMod.UseVisualStyleBackColor = true; // // m_cbCreation // this.m_cbCreation.AutoSize = true; this.m_cbCreation.Location = new System.Drawing.Point(9, 42); this.m_cbCreation.Name = "m_cbCreation"; this.m_cbCreation.Size = new System.Drawing.Size(87, 17); this.m_cbCreation.TabIndex = 5; this.m_cbCreation.Text = "Creation time"; this.m_cbCreation.UseVisualStyleBackColor = true; // // m_cbExpire // this.m_cbExpire.AutoSize = true; this.m_cbExpire.Location = new System.Drawing.Point(244, 42); this.m_cbExpire.Name = "m_cbExpire"; this.m_cbExpire.Size = new System.Drawing.Size(76, 17); this.m_cbExpire.TabIndex = 7; this.m_cbExpire.Text = "Expiry time"; this.m_cbExpire.UseVisualStyleBackColor = true; // // m_cbNotes // this.m_cbNotes.AutoSize = true; this.m_cbNotes.Checked = true; this.m_cbNotes.CheckState = System.Windows.Forms.CheckState.Checked; this.m_cbNotes.Location = new System.Drawing.Point(464, 19); this.m_cbNotes.Name = "m_cbNotes"; this.m_cbNotes.Size = new System.Drawing.Size(54, 17); this.m_cbNotes.TabIndex = 4; this.m_cbNotes.Text = "Notes"; this.m_cbNotes.UseVisualStyleBackColor = true; // // m_cbPassword // this.m_cbPassword.AutoSize = true; this.m_cbPassword.Checked = true; this.m_cbPassword.CheckState = System.Windows.Forms.CheckState.Checked; this.m_cbPassword.Location = new System.Drawing.Point(244, 19); this.m_cbPassword.Name = "m_cbPassword"; this.m_cbPassword.Size = new System.Drawing.Size(72, 17); this.m_cbPassword.TabIndex = 2; this.m_cbPassword.Text = "Password"; this.m_cbPassword.UseVisualStyleBackColor = true; // // m_cbUrl // this.m_cbUrl.AutoSize = true; this.m_cbUrl.Location = new System.Drawing.Point(360, 19); this.m_cbUrl.Name = "m_cbUrl"; this.m_cbUrl.Size = new System.Drawing.Size(48, 17); this.m_cbUrl.TabIndex = 3; this.m_cbUrl.Text = "URL"; this.m_cbUrl.UseVisualStyleBackColor = true; // // m_cbUser // this.m_cbUser.AutoSize = true; this.m_cbUser.Checked = true; this.m_cbUser.CheckState = System.Windows.Forms.CheckState.Checked; this.m_cbUser.Location = new System.Drawing.Point(106, 19); this.m_cbUser.Name = "m_cbUser"; this.m_cbUser.Size = new System.Drawing.Size(77, 17); this.m_cbUser.TabIndex = 1; this.m_cbUser.Text = "User name"; this.m_cbUser.UseVisualStyleBackColor = true; // // m_cbTitle // this.m_cbTitle.AutoSize = true; this.m_cbTitle.Checked = true; this.m_cbTitle.CheckState = System.Windows.Forms.CheckState.Checked; this.m_cbTitle.Location = new System.Drawing.Point(9, 19); this.m_cbTitle.Name = "m_cbTitle"; this.m_cbTitle.Size = new System.Drawing.Size(46, 17); this.m_cbTitle.TabIndex = 0; this.m_cbTitle.Text = "Title"; this.m_cbTitle.UseVisualStyleBackColor = true; // // m_grpLayout // this.m_grpLayout.Controls.Add(this.m_lblDetailsInfo); this.m_grpLayout.Controls.Add(this.m_lblTabularInfo); this.m_grpLayout.Controls.Add(this.m_rbDetails); this.m_grpLayout.Controls.Add(this.m_rbTabular); this.m_grpLayout.Location = new System.Drawing.Point(10, 10); this.m_grpLayout.Name = "m_grpLayout"; this.m_grpLayout.Size = new System.Drawing.Size(571, 121); this.m_grpLayout.TabIndex = 0; this.m_grpLayout.TabStop = false; this.m_grpLayout.Text = "Layout"; // // m_lblDetailsInfo // this.m_lblDetailsInfo.AutoSize = true; this.m_lblDetailsInfo.Location = new System.Drawing.Point(26, 96); this.m_lblDetailsInfo.Name = "m_lblDetailsInfo"; this.m_lblDetailsInfo.Size = new System.Drawing.Size(337, 13); this.m_lblDetailsInfo.TabIndex = 3; this.m_lblDetailsInfo.Text = "Arrange the entries in blocks. The fields selected below will be printed."; // // m_lblTabularInfo // this.m_lblTabularInfo.Location = new System.Drawing.Point(26, 39); this.m_lblTabularInfo.Name = "m_lblTabularInfo"; this.m_lblTabularInfo.Size = new System.Drawing.Size(539, 28); this.m_lblTabularInfo.TabIndex = 1; this.m_lblTabularInfo.Text = "Arrange the entries in a tabular form. Each entry will occupy approximately one l" + "ine. The fields selected below will be printed; auto-type configuration is not p" + "rinted."; // // m_rbDetails // this.m_rbDetails.AutoSize = true; this.m_rbDetails.Location = new System.Drawing.Point(9, 76); this.m_rbDetails.Name = "m_rbDetails"; this.m_rbDetails.Size = new System.Drawing.Size(57, 17); this.m_rbDetails.TabIndex = 2; this.m_rbDetails.TabStop = true; this.m_rbDetails.Text = "&Details"; this.m_rbDetails.UseVisualStyleBackColor = true; // // m_rbTabular // this.m_rbTabular.AutoSize = true; this.m_rbTabular.Location = new System.Drawing.Point(9, 19); this.m_rbTabular.Name = "m_rbTabular"; this.m_rbTabular.Size = new System.Drawing.Size(61, 17); this.m_rbTabular.TabIndex = 0; this.m_rbTabular.TabStop = true; this.m_rbTabular.Text = "&Tabular"; this.m_rbTabular.UseVisualStyleBackColor = true; this.m_rbTabular.CheckedChanged += new System.EventHandler(this.OnTabularCheckedChanged); // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(625, 60); this.m_bannerImage.TabIndex = 1; this.m_bannerImage.TabStop = false; // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(457, 537); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 0; this.m_btnOK.Text = "&Print..."; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(538, 537); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 1; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_btnConfigPrinter // this.m_btnConfigPrinter.Location = new System.Drawing.Point(12, 537); this.m_btnConfigPrinter.Name = "m_btnConfigPrinter"; this.m_btnConfigPrinter.Size = new System.Drawing.Size(100, 23); this.m_btnConfigPrinter.TabIndex = 3; this.m_btnConfigPrinter.Text = "Page &Setup"; this.m_btnConfigPrinter.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; this.m_btnConfigPrinter.UseVisualStyleBackColor = true; this.m_btnConfigPrinter.Click += new System.EventHandler(this.OnBtnConfigPage); // // m_btnPrintPreview // this.m_btnPrintPreview.Location = new System.Drawing.Point(118, 537); this.m_btnPrintPreview.Name = "m_btnPrintPreview"; this.m_btnPrintPreview.Size = new System.Drawing.Size(100, 23); this.m_btnPrintPreview.TabIndex = 4; this.m_btnPrintPreview.Text = "Print Pre&view"; this.m_btnPrintPreview.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; this.m_btnPrintPreview.UseVisualStyleBackColor = true; this.m_btnPrintPreview.Click += new System.EventHandler(this.OnBtnPrintPreview); // // m_cbUuid // this.m_cbUuid.AutoSize = true; this.m_cbUuid.Location = new System.Drawing.Point(244, 65); this.m_cbUuid.Name = "m_cbUuid"; this.m_cbUuid.Size = new System.Drawing.Size(53, 17); this.m_cbUuid.TabIndex = 12; this.m_cbUuid.Text = "UUID"; this.m_cbUuid.UseVisualStyleBackColor = true; // // PrintForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(625, 572); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_tabMain); this.Controls.Add(this.m_btnOK); this.Controls.Add(this.m_btnPrintPreview); this.Controls.Add(this.m_btnConfigPrinter); this.Controls.Add(this.m_bannerImage); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.MinimumSize = new System.Drawing.Size(64, 32); this.Name = "PrintForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Print"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); this.m_tabMain.ResumeLayout(false); this.m_tabPreview.ResumeLayout(false); this.m_tabDataLayout.ResumeLayout(false); this.m_grpSorting.ResumeLayout(false); this.m_grpSorting.PerformLayout(); this.m_grpFont.ResumeLayout(false); this.m_grpFont.PerformLayout(); this.m_grpFields.ResumeLayout(false); this.m_grpFields.PerformLayout(); this.m_grpLayout.ResumeLayout(false); this.m_grpLayout.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.TabControl m_tabMain; private System.Windows.Forms.TabPage m_tabPreview; private System.Windows.Forms.PictureBox m_bannerImage; private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.WebBrowser m_wbMain; private System.Windows.Forms.TabPage m_tabDataLayout; private System.Windows.Forms.Button m_btnConfigPrinter; private System.Windows.Forms.Button m_btnPrintPreview; private System.Windows.Forms.GroupBox m_grpLayout; private System.Windows.Forms.RadioButton m_rbTabular; private System.Windows.Forms.RadioButton m_rbDetails; private System.Windows.Forms.Label m_lblDetailsInfo; private System.Windows.Forms.Label m_lblTabularInfo; private System.Windows.Forms.GroupBox m_grpFields; private System.Windows.Forms.CheckBox m_cbNotes; private System.Windows.Forms.CheckBox m_cbPassword; private System.Windows.Forms.CheckBox m_cbUrl; private System.Windows.Forms.CheckBox m_cbUser; private System.Windows.Forms.CheckBox m_cbTitle; private System.Windows.Forms.Label m_lblPreviewHint; private System.Windows.Forms.GroupBox m_grpFont; private System.Windows.Forms.CheckBox m_cbMonospaceForPasswords; private System.Windows.Forms.RadioButton m_rbMonospace; private System.Windows.Forms.RadioButton m_rbSansSerif; private System.Windows.Forms.RadioButton m_rbSerif; private System.Windows.Forms.CheckBox m_cbSmallMono; private System.Windows.Forms.CheckBox m_cbExpire; private System.Windows.Forms.CheckBox m_cbAutoType; private System.Windows.Forms.CheckBox m_cbLastMod; private System.Windows.Forms.CheckBox m_cbCreation; private System.Windows.Forms.LinkLabel m_linkDeselectAllFields; private System.Windows.Forms.LinkLabel m_linkSelectAllFields; private System.Windows.Forms.CheckBox m_cbGroups; private System.Windows.Forms.CheckBox m_cbCustomStrings; private System.Windows.Forms.GroupBox m_grpSorting; private System.Windows.Forms.ComboBox m_cmbSortEntries; private System.Windows.Forms.Label m_lblSortEntries; private System.Windows.Forms.Label m_lblEntrySortHint; private System.Windows.Forms.CheckBox m_cbTags; private System.Windows.Forms.CheckBox m_cbUuid; } }KeePass/Forms/EditStringForm.Designer.cs0000664000000000000000000002103012563316156017171 0ustar rootrootnamespace KeePass.Forms { partial class EditStringForm { /// /// Erforderliche Designervariable. /// private System.ComponentModel.IContainer components = null; /// /// Verwendete Ressourcen bereinigen. /// /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Vom Windows Form-Designer generierter Code /// /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditStringForm)); this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_lblStringValueDesc = new System.Windows.Forms.Label(); this.m_lblStringIdDesc = new System.Windows.Forms.Label(); this.m_lblIDIntro = new System.Windows.Forms.Label(); this.m_richStringValue = new KeePass.UI.CustomRichTextBoxEx(); this.m_lblSeparator = new System.Windows.Forms.Label(); this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_btnHelp = new System.Windows.Forms.Button(); this.m_cbProtect = new System.Windows.Forms.CheckBox(); this.m_lblValidationInfo = new System.Windows.Forms.Label(); this.m_cmbStringName = new System.Windows.Forms.ComboBox(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); this.SuspendLayout(); // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(409, 60); this.m_bannerImage.TabIndex = 0; this.m_bannerImage.TabStop = false; // // m_lblStringValueDesc // this.m_lblStringValueDesc.AutoSize = true; this.m_lblStringValueDesc.Location = new System.Drawing.Point(12, 156); this.m_lblStringValueDesc.Name = "m_lblStringValueDesc"; this.m_lblStringValueDesc.Size = new System.Drawing.Size(37, 13); this.m_lblStringValueDesc.TabIndex = 2; this.m_lblStringValueDesc.Text = "Value:"; // // m_lblStringIdDesc // this.m_lblStringIdDesc.AutoSize = true; this.m_lblStringIdDesc.Location = new System.Drawing.Point(12, 116); this.m_lblStringIdDesc.Name = "m_lblStringIdDesc"; this.m_lblStringIdDesc.Size = new System.Drawing.Size(38, 13); this.m_lblStringIdDesc.TabIndex = 10; this.m_lblStringIdDesc.Text = "Name:"; // // m_lblIDIntro // this.m_lblIDIntro.Location = new System.Drawing.Point(12, 67); this.m_lblIDIntro.Name = "m_lblIDIntro"; this.m_lblIDIntro.Size = new System.Drawing.Size(385, 40); this.m_lblIDIntro.TabIndex = 9; this.m_lblIDIntro.Text = resources.GetString("m_lblIDIntro.Text"); // // m_richStringValue // this.m_richStringValue.Location = new System.Drawing.Point(56, 154); this.m_richStringValue.Name = "m_richStringValue"; this.m_richStringValue.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; this.m_richStringValue.Size = new System.Drawing.Size(341, 78); this.m_richStringValue.TabIndex = 3; this.m_richStringValue.Text = ""; // // m_lblSeparator // this.m_lblSeparator.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.m_lblSeparator.Location = new System.Drawing.Point(0, 271); this.m_lblSeparator.Name = "m_lblSeparator"; this.m_lblSeparator.Size = new System.Drawing.Size(409, 2); this.m_lblSeparator.TabIndex = 5; // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(241, 282); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 6; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(322, 282); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 7; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_btnHelp // this.m_btnHelp.Location = new System.Drawing.Point(12, 282); this.m_btnHelp.Name = "m_btnHelp"; this.m_btnHelp.Size = new System.Drawing.Size(75, 23); this.m_btnHelp.TabIndex = 8; this.m_btnHelp.Text = "&Help"; this.m_btnHelp.UseVisualStyleBackColor = true; this.m_btnHelp.Click += new System.EventHandler(this.OnBtnHelp); // // m_cbProtect // this.m_cbProtect.AutoSize = true; this.m_cbProtect.Location = new System.Drawing.Point(56, 238); this.m_cbProtect.Name = "m_cbProtect"; this.m_cbProtect.Size = new System.Drawing.Size(159, 17); this.m_cbProtect.TabIndex = 4; this.m_cbProtect.Text = "Enable in-memory &protection"; this.m_cbProtect.UseVisualStyleBackColor = true; // // m_lblValidationInfo // this.m_lblValidationInfo.ForeColor = System.Drawing.Color.Crimson; this.m_lblValidationInfo.Location = new System.Drawing.Point(53, 137); this.m_lblValidationInfo.Name = "m_lblValidationInfo"; this.m_lblValidationInfo.Size = new System.Drawing.Size(344, 14); this.m_lblValidationInfo.TabIndex = 1; this.m_lblValidationInfo.Text = "<>"; // // m_cmbStringName // this.m_cmbStringName.FormattingEnabled = true; this.m_cmbStringName.Location = new System.Drawing.Point(56, 113); this.m_cmbStringName.Name = "m_cmbStringName"; this.m_cmbStringName.Size = new System.Drawing.Size(341, 21); this.m_cmbStringName.TabIndex = 0; this.m_cmbStringName.TextChanged += new System.EventHandler(this.OnNameTextChanged); // // EditStringForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(409, 317); this.Controls.Add(this.m_cmbStringName); this.Controls.Add(this.m_lblValidationInfo); this.Controls.Add(this.m_cbProtect); this.Controls.Add(this.m_btnHelp); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.Controls.Add(this.m_lblSeparator); this.Controls.Add(this.m_richStringValue); this.Controls.Add(this.m_lblIDIntro); this.Controls.Add(this.m_lblStringIdDesc); this.Controls.Add(this.m_lblStringValueDesc); this.Controls.Add(this.m_bannerImage); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "EditStringForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Edit Entry String"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.OnFormClosing); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.PictureBox m_bannerImage; private System.Windows.Forms.Label m_lblStringValueDesc; private System.Windows.Forms.Label m_lblStringIdDesc; private System.Windows.Forms.Label m_lblIDIntro; private KeePass.UI.CustomRichTextBoxEx m_richStringValue; private System.Windows.Forms.Label m_lblSeparator; private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.Button m_btnHelp; private System.Windows.Forms.CheckBox m_cbProtect; private System.Windows.Forms.Label m_lblValidationInfo; private System.Windows.Forms.ComboBox m_cmbStringName; } }KeePass/Forms/OptionsForm.cs0000664000000000000000000010676712665303524015034 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.App; using KeePass.App.Configuration; using KeePass.UI; using KeePass.UI.ToolStripRendering; using KeePass.Resources; using KeePass.Util; using KeePassLib; using KeePassLib.Serialization; using KeePassLib.Utility; using NativeLib = KeePassLib.Native.NativeLib; namespace KeePass.Forms { /// /// Options dialog. In this dialog, global program options can be configured. /// public partial class OptionsForm : Form { private ImageList m_ilIcons; private BannerStyle m_curBannerStyle = BannerStyle.KeePassWin32; private bool m_bBlockUIUpdate = false; private bool m_bLoadingSettings = false; private CheckedLVItemDXList m_cdxSecurityOptions = null; private CheckedLVItemDXList m_cdxPolicy = null; private CheckedLVItemDXList m_cdxGuiOptions = null; private CheckedLVItemDXList m_cdxAdvanced = null; private Dictionary m_dTsrUuids = new Dictionary(); private HotKeyControlEx m_hkGlobalAutoType = null; private HotKeyControlEx m_hkSelectedAutoType = null; private HotKeyControlEx m_hkShowWindow = null; private Keys m_kPrevATHKKey = Keys.None; private Keys m_kPrevATSHKKey = Keys.None; private Keys m_kPrevSWHKKey = Keys.None; private AceUrlSchemeOverrides m_aceUrlSchemeOverrides = null; private string m_strUrlOverrideAll = string.Empty; private string m_strInitialTsRenderer = string.Empty; public bool RequiresUIReinitialize { get { return (Program.Config.UI.ToolStripRenderer != m_strInitialTsRenderer); } } public OptionsForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } public void InitEx(ImageList ilIcons) { InitEx(ilIcons, false); } public void InitEx(ImageList ilIcons, bool bForceInTaskbar) { Debug.Assert(ilIcons != null); m_ilIcons = ilIcons; // Set ShowInTaskbar immediately, not later, otherwise the form // can disappear: // https://sourceforge.net/p/keepass/discussion/329220/thread/c95b5644/ if(bForceInTaskbar) this.ShowInTaskbar = true; } private void CreateDialogBanner(BannerStyle bsStyle) { if(bsStyle == m_curBannerStyle) return; m_curBannerStyle = bsStyle; m_bannerImage.Image = BannerFactory.CreateBanner(m_bannerImage.Width, m_bannerImage.Height, bsStyle, Properties.Resources.B48x48_KCMSystem, KPRes.Options, KPRes.OptionsDesc); } private void OnFormLoad(object sender, EventArgs e) { // Can be invoked by tray command; don't use CenterParent Debug.Assert(this.StartPosition == FormStartPosition.CenterScreen); // When multiline is enabled, tabs added by plugins can result // in multiple tab rows, cropping the tab content at the bottom; // https://sourceforge.net/p/keepass/discussion/329220/thread/a17a2734/ Debug.Assert(!m_tabMain.Multiline); GlobalWindowManager.AddWindow(this); this.Icon = Properties.Resources.KeePass; Debug.Assert(m_ilIcons != null); if(m_ilIcons != null) { m_tabMain.ImageList = m_ilIcons; m_tabSecurity.ImageIndex = (int)PwIcon.TerminalEncrypted; m_tabPolicy.ImageIndex = (int)PwIcon.List; m_tabGui.ImageIndex = (int)PwIcon.Screen; m_tabIntegration.ImageIndex = (int)PwIcon.Console; m_tabAdvanced.ImageIndex = (int)PwIcon.ClipboardReady; } uint uTab = Program.Config.Defaults.OptionsTabIndex; if(uTab < (uint)m_tabMain.TabPages.Count) m_tabMain.SelectedTab = m_tabMain.TabPages[(int)uTab]; m_aceUrlSchemeOverrides = Program.Config.Integration.UrlSchemeOverrides.CloneDeep(); m_strUrlOverrideAll = Program.Config.Integration.UrlOverride; Debug.Assert(!m_cmbMenuStyle.Sorted); m_cmbMenuStyle.Items.Add(KPRes.Auto + " (" + KPRes.Recommended + ")"); m_cmbMenuStyle.Items.Add(new string('-', 24)); int nTsrs = 2, iTsrSel = 0, nSuffixes = 0; foreach(TsrFactory fTsr in TsrPool.Factories) { string strSuffix = string.Empty; if(!fTsr.IsSupported()) { strSuffix = " (" + KPRes.IncompatibleEnv + ")"; ++nSuffixes; } string strUuid = Convert.ToBase64String(fTsr.Uuid.UuidBytes); if(Program.Config.UI.ToolStripRenderer == strUuid) iTsrSel = nTsrs; m_cmbMenuStyle.Items.Add((fTsr.Name ?? string.Empty) + strSuffix); m_dTsrUuids[nTsrs] = strUuid; ++nTsrs; } Debug.Assert(m_cmbMenuStyle.Items.Count == nTsrs); m_cmbMenuStyle.SelectedIndex = iTsrSel; if(nSuffixes > 0) m_cmbMenuStyle.DropDownWidth = m_cmbMenuStyle.Width * 2; if(AppConfigEx.IsOptionEnforced(Program.Config.UI, "ToolStripRenderer")) { m_lblMenuStyle.Enabled = false; m_cmbMenuStyle.Enabled = false; } Debug.Assert(!m_cmbBannerStyle.Sorted); m_cmbBannerStyle.Items.Add("(" + KPRes.CurrentStyle + ")"); m_cmbBannerStyle.Items.Add("Windows XP Login"); m_cmbBannerStyle.Items.Add("Windows Vista Black"); m_cmbBannerStyle.Items.Add("KeePass Win32"); m_cmbBannerStyle.Items.Add("Blue Carbon"); CreateDialogBanner(BannerStyle.Default); // Default forces generation m_cmbBannerStyle.SelectedIndex = (int)BannerStyle.Default; if((BannerFactory.CustomGenerator != null) || AppConfigEx.IsOptionEnforced(Program.Config.UI, "BannerStyle")) { m_lblBannerStyle.Enabled = false; m_cmbBannerStyle.Enabled = false; } int nWidth = m_lvPolicy.ClientSize.Width - UIUtil.GetVScrollBarWidth(); m_lvPolicy.Columns.Add(KPRes.Feature, (nWidth * 10) / 29); m_lvPolicy.Columns.Add(KPRes.Description, (nWidth * 19) / 29); m_hkGlobalAutoType = HotKeyControlEx.ReplaceTextBox(m_grpHotKeys, m_tbGlobalAutoType, false); m_hkSelectedAutoType = HotKeyControlEx.ReplaceTextBox(m_grpHotKeys, m_tbSelAutoTypeHotKey, false); m_hkShowWindow = HotKeyControlEx.ReplaceTextBox(m_grpHotKeys, m_tbShowWindowHotKey, false); if(!NativeLib.IsUnix()) { UIUtil.SetShield(m_btnFileExtCreate, true); UIUtil.SetShield(m_btnFileExtRemove, true); m_linkHotKeyHelp.Visible = false; } else // Unix { m_hkGlobalAutoType.TextNone = KPRes.External; m_hkSelectedAutoType.TextNone = KPRes.External; m_hkShowWindow.TextNone = KPRes.External; m_hkGlobalAutoType.Enabled = m_hkSelectedAutoType.Enabled = m_hkShowWindow.Enabled = false; m_btnFileExtCreate.Enabled = m_btnFileExtRemove.Enabled = false; m_cbAutoRun.Enabled = false; } UIUtil.SetExplorerTheme(m_lvSecurityOptions, false); UIUtil.SetExplorerTheme(m_lvPolicy, false); UIUtil.SetExplorerTheme(m_lvGuiOptions, false); UIUtil.SetExplorerTheme(m_lvAdvanced, false); AppConfigEx.ClearXmlPathCache(); LoadOptions(); // if(Program.Config.Meta.IsEnforcedConfiguration) // m_lvPolicy.Enabled = false; UpdateUIState(); } private void LoadOptions() { m_bLoadingSettings = true; LoadSecurityOptions(); LoadPolicyOptions(); LoadGuiOptions(); LoadIntegrationOptions(); LoadAdvancedOptions(); m_bLoadingSettings = false; } private void LoadSecurityOptions() { AceWorkspaceLocking aceWL = Program.Config.Security.WorkspaceLocking; uint uLockTime = aceWL.LockAfterTime; bool bLockTime = (uLockTime > 0); m_numLockAfterTime.Value = (bLockTime ? uLockTime : 300); m_cbLockAfterTime.Checked = bLockTime; if(AppConfigEx.IsOptionEnforced(aceWL, "LockAfterTime")) m_cbLockAfterTime.Enabled = false; uLockTime = aceWL.LockAfterGlobalTime; bLockTime = (uLockTime > 0); m_numLockAfterGlobalTime.Value = (bLockTime ? uLockTime : 240); m_cbLockAfterGlobalTime.Checked = bLockTime; if(AppConfigEx.IsOptionEnforced(aceWL, "LockAfterGlobalTime")) m_cbLockAfterGlobalTime.Enabled = false; int nDefaultExpireDays = Program.Config.Defaults.NewEntryExpiresInDays; if(nDefaultExpireDays < 0) m_cbDefaultExpireDays.Checked = false; else { m_cbDefaultExpireDays.Checked = true; try { m_numDefaultExpireDays.Value = nDefaultExpireDays; } catch(Exception) { Debug.Assert(false); } } if(AppConfigEx.IsOptionEnforced(Program.Config.Defaults, "NewEntryExpiresInDays")) m_cbDefaultExpireDays.Enabled = false; int nClipClear = Program.Config.Security.ClipboardClearAfterSeconds; if(nClipClear >= 0) { m_cbClipClearTime.Checked = true; m_numClipClearTime.Value = nClipClear; } else m_cbClipClearTime.Checked = false; if(AppConfigEx.IsOptionEnforced(Program.Config.Security, "ClipboardClearAfterSeconds")) m_cbClipClearTime.Enabled = false; m_lvSecurityOptions.Columns.Add(string.Empty); // Resize below ListViewGroup lvg = new ListViewGroup(KPRes.Options); m_lvSecurityOptions.Groups.Add(lvg); Debug.Assert(lvg.ListView == m_lvSecurityOptions); m_cdxSecurityOptions = new CheckedLVItemDXList(m_lvSecurityOptions, true); bool? obNoSEv = null; // Allow read-only by enforced config string strSEvSuffix = string.Empty; if(MonoWorkarounds.IsRequired(1378)) { obNoSEv = true; strSEvSuffix = " (" + KPRes.UnsupportedByMono + ")"; } m_cdxSecurityOptions.CreateItem(aceWL, "LockOnWindowMinimize", lvg, KPRes.LockOnMinimize); m_cdxSecurityOptions.CreateItem(aceWL, "LockOnSessionSwitch", lvg, KPRes.LockOnSessionSwitch + strSEvSuffix, obNoSEv); m_cdxSecurityOptions.CreateItem(aceWL, "LockOnSuspend", lvg, KPRes.LockOnSuspend + strSEvSuffix, obNoSEv); m_cdxSecurityOptions.CreateItem(aceWL, "LockOnRemoteControlChange", lvg, KPRes.LockOnRemoteControlChange + strSEvSuffix, obNoSEv); m_cdxSecurityOptions.CreateItem(aceWL, "ExitInsteadOfLockingAfterTime", lvg, KPRes.ExitInsteadOfLockingAfterTime); m_cdxSecurityOptions.CreateItem(aceWL, "AlwaysExitInsteadOfLocking", lvg, KPRes.ExitInsteadOfLockingAlways); m_cdxSecurityOptions.CreateItem(Program.Config.Security, "ClipboardClearOnExit", lvg, KPRes.ClipboardClearOnExit); m_cdxSecurityOptions.CreateItem(Program.Config.Security, "UseClipboardViewerIgnoreFormat", lvg, KPRes.ClipboardViewerIgnoreFormat + " " + KPRes.NotRecommended); if(NativeLib.IsLibraryInstalled()) m_cdxSecurityOptions.CreateItem(Program.Config.Native, "NativeKeyTransformations", lvg, KPRes.NativeLibUse); bool? obNoWin = null; // Allow read-only by enforced config if(NativeLib.IsUnix()) obNoWin = true; m_cdxSecurityOptions.CreateItem(Program.Config.Security, "MasterKeyOnSecureDesktop", lvg, KPRes.MasterKeyOnSecureDesktop, obNoWin); m_cdxSecurityOptions.CreateItem(Program.Config.Security, "ClearKeyCommandLineParams", lvg, KPRes.ClearKeyCmdLineParams); m_cdxSecurityOptions.UpdateData(false); UIUtil.ResizeColumns(m_lvSecurityOptions, true); } private void LoadPolicyOption(string strPropertyName, string strDisplayName, string strDisplayDesc) { ListViewItem lvi = m_cdxPolicy.CreateItem(Program.Config.Security.Policy, strPropertyName, null, strDisplayName + "*"); lvi.SubItems.Add(strDisplayDesc); } private void LoadPolicyOptions() { m_cdxPolicy = new CheckedLVItemDXList(m_lvPolicy, true); LoadPolicyOption("Plugins", KPRes.Plugins, KPRes.PolicyPluginsDesc); LoadPolicyOption("Export", KPRes.Export, KPRes.PolicyExportDesc2); LoadPolicyOption("ExportNoKey", KPRes.Export + " - " + KPRes.NoKeyRepeat, KPRes.PolicyExportNoKeyDesc); LoadPolicyOption("Import", KPRes.Import, KPRes.PolicyImportDesc); LoadPolicyOption("Print", KPRes.Print, KPRes.PolicyPrintDesc); LoadPolicyOption("PrintNoKey", KPRes.Print + " - " + KPRes.NoKeyRepeat, KPRes.PolicyPrintNoKeyDesc); LoadPolicyOption("NewFile", KPRes.NewDatabase, KPRes.PolicyNewDatabaseDesc); LoadPolicyOption("SaveFile", KPRes.SaveDatabase, KPRes.PolicySaveDatabaseDesc); LoadPolicyOption("AutoType", KPRes.AutoType, KPRes.PolicyAutoTypeDesc); LoadPolicyOption("AutoTypeWithoutContext", KPRes.AutoType + " - " + KPRes.WithoutContext, KPRes.PolicyAutoTypeWithoutContextDesc); LoadPolicyOption("CopyToClipboard", KPRes.Copy, KPRes.PolicyClipboardDesc); LoadPolicyOption("CopyWholeEntries", KPRes.CopyWholeEntries, KPRes.PolicyCopyWholeEntriesDesc); LoadPolicyOption("DragDrop", KPRes.DragDrop, KPRes.PolicyDragDropDesc); LoadPolicyOption("UnhidePasswords", KPRes.UnhidePasswords, KPRes.UnhidePasswordsDesc); LoadPolicyOption("ChangeMasterKey", KPRes.ChangeMasterKey, KPRes.PolicyChangeMasterKey); LoadPolicyOption("ChangeMasterKeyNoKey", KPRes.ChangeMasterKey + " - " + KPRes.NoKeyRepeat, KPRes.PolicyChangeMasterKeyNoKeyDesc); LoadPolicyOption("EditTriggers", KPRes.TriggersEdit, KPRes.PolicyTriggersEditDesc); m_cdxPolicy.UpdateData(false); } private void LoadGuiOptions() { m_strInitialTsRenderer = Program.Config.UI.ToolStripRenderer; bool? obNoMin = null; if(MonoWorkarounds.IsRequired(1418)) obNoMin = true; m_lvGuiOptions.Columns.Add(KPRes.Options); // Resize below ListViewGroup lvg = new ListViewGroup(KPRes.MainWindow); m_lvGuiOptions.Groups.Add(lvg); Debug.Assert(lvg.ListView == m_lvGuiOptions); m_cdxGuiOptions = new CheckedLVItemDXList(m_lvGuiOptions, true); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "CloseButtonMinimizesWindow", lvg, KPRes.CloseButtonMinimizes); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "MinimizeToTray", lvg, KPRes.MinimizeToTray); m_cdxGuiOptions.CreateItem(Program.Config.UI.TrayIcon, "ShowOnlyIfTrayed", lvg, KPRes.ShowTrayOnlyIfTrayed); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "ShowFullPathInTitle", lvg, KPRes.ShowFullPathInTitleBar); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "DropToBackAfterClipboardCopy", lvg, KPRes.DropToBackOnCopy); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "MinimizeAfterClipboardCopy", lvg, KPRes.MinimizeAfterCopy); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "MinimizeAfterLocking", lvg, KPRes.MinimizeAfterLocking); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "MinimizeAfterOpeningDatabase", lvg, KPRes.MinimizeAfterOpeningDatabase, obNoMin); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "DisableSaveIfNotModified", lvg, KPRes.DisableSaveIfNotModified); lvg = new ListViewGroup(KPRes.EntryList); m_lvGuiOptions.Groups.Add(lvg); // m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "ShowGridLines", // m_lvGuiOptions, lvg, KPRes.ShowGridLines); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "EntryListAutoResizeColumns", lvg, KPRes.EntryListAutoResizeColumns); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "EntryListAlternatingBgColors", lvg, KPRes.AlternatingBgColors); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "CopyUrlsInsteadOfOpening", lvg, KPRes.CopyUrlsInsteadOfOpening); if(!Program.Config.MainWindow.EntryListShowDerefData) { Debug.Assert(!Program.Config.MainWindow.EntryListShowDerefDataAsync); Program.Config.MainWindow.EntryListShowDerefDataAsync = false; } ListViewItem lviDeref = m_cdxGuiOptions.CreateItem( Program.Config.MainWindow, "EntryListShowDerefData", lvg, KPRes.ShowDerefData + " (" + KPRes.Slow + ")"); ListViewItem lviDerefAsync = m_cdxGuiOptions.CreateItem( Program.Config.MainWindow, "EntryListShowDerefDataAsync", lvg, KPRes.ShowDerefDataAsync + " (" + KPRes.IncompatibleWithSorting + ")"); m_cdxGuiOptions.AddLink(lviDeref, lviDerefAsync, CheckItemLinkType.UncheckedUnchecked); m_cdxGuiOptions.AddLink(lviDerefAsync, lviDeref, CheckItemLinkType.CheckedChecked); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "EntryListShowDerefDataAndRefs", lvg, KPRes.ShowDerefDataAndRefs); // lvg = new ListViewGroup(KPRes.EntryView); // m_lvGuiOptions.Groups.Add(lvg); // m_cdxGuiOptions.CreateItem(Program.Config.MainWindow.EntryView, "HideProtectedCustomStrings", // lvg, KPRes.EntryViewHideProtectedCustomStrings); lvg = new ListViewGroup(KPRes.QuickSearchTb); m_lvGuiOptions.Groups.Add(lvg); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "QuickFindSearchInPasswords", lvg, KPRes.QuickSearchInPwFields); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "QuickFindExcludeExpired", lvg, KPRes.QuickSearchExclExpired); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "QuickFindDerefData", lvg, KPRes.QuickSearchDerefData + " (" + KPRes.Slow + ")"); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "FocusResultsAfterQuickFind", lvg, KPRes.FocusResultsAfterQuickSearch); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "FocusQuickFindOnRestore", lvg, KPRes.FocusQuickFindOnRestore); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "FocusQuickFindOnUntray", lvg, KPRes.FocusQuickFindOnUntray); lvg = new ListViewGroup(KPRes.Dialogs); m_lvGuiOptions.Groups.Add(lvg); m_cdxGuiOptions.CreateItem(Program.Config.UI, "ShowRecycleConfirmDialog", lvg, KPRes.RecycleShowConfirm); m_cdxGuiOptions.CreateItem(Program.Config.UI, "ShowDbMntncResultsDialog", lvg, KPRes.DbMntncResults); lvg = new ListViewGroup(KPRes.Advanced); m_lvGuiOptions.Groups.Add(lvg); m_cdxGuiOptions.CreateItem(Program.Config.UI, "RepeatPasswordOnlyWhenHidden", lvg, KPRes.RepeatOnlyWhenHidden); // m_cdxGuiOptions.CreateItem(Program.Config.UI, "UseCustomToolStripRenderer", // lvg, KPRes.UseCustomToolStripRenderer); m_cdxGuiOptions.CreateItem(Program.Config.UI, "ForceSystemFontUnix", lvg, KPRes.ForceSystemFontUnix); m_cdxGuiOptions.UpdateData(false); UIUtil.ResizeColumns(m_lvGuiOptions, true); try { m_numMruCount.Value = Program.Config.Application.MostRecentlyUsed.MaxItemCount; } catch(Exception) { Debug.Assert(false); m_numMruCount.Value = AceMru.DefaultMaxItemCount; } if(AppConfigEx.IsOptionEnforced(Program.Config.Application.MostRecentlyUsed, "MaxItemCount")) { m_lblMruCount.Enabled = false; m_numMruCount.Enabled = false; } if(AppConfigEx.IsOptionEnforced(Program.Config.UI, "StandardFont")) m_btnSelFont.Enabled = false; if(AppConfigEx.IsOptionEnforced(Program.Config.UI, "PasswordFont") || MonoWorkarounds.IsRequired(5795)) m_btnSelPwFont.Enabled = false; } private void LoadIntegrationOptions() { Keys kAT = (Keys)Program.Config.Integration.HotKeyGlobalAutoType; m_hkGlobalAutoType.HotKey = (kAT & Keys.KeyCode); m_hkGlobalAutoType.HotKeyModifiers = (kAT & Keys.Modifiers); m_hkGlobalAutoType.RenderHotKey(); m_kPrevATHKKey = (m_hkGlobalAutoType.HotKey | m_hkGlobalAutoType.HotKeyModifiers); if(AppConfigEx.IsOptionEnforced(Program.Config.Integration, "HotKeyGlobalAutoType")) m_hkGlobalAutoType.Enabled = false; Keys kATS = (Keys)Program.Config.Integration.HotKeySelectedAutoType; m_hkSelectedAutoType.HotKey = (kATS & Keys.KeyCode); m_hkSelectedAutoType.HotKeyModifiers = (kATS & Keys.Modifiers); m_hkSelectedAutoType.RenderHotKey(); m_kPrevATSHKKey = (m_hkSelectedAutoType.HotKey | m_hkSelectedAutoType.HotKeyModifiers); if(AppConfigEx.IsOptionEnforced(Program.Config.Integration, "HotKeySelectedAutoType")) m_hkSelectedAutoType.Enabled = false; Keys kSW = (Keys)Program.Config.Integration.HotKeyShowWindow; m_hkShowWindow.HotKey = (kSW & Keys.KeyCode); m_hkShowWindow.HotKeyModifiers = (kSW & Keys.Modifiers); m_hkShowWindow.RenderHotKey(); m_kPrevSWHKKey = (m_hkShowWindow.HotKey | m_hkShowWindow.HotKeyModifiers); if(AppConfigEx.IsOptionEnforced(Program.Config.Integration, "HotKeyShowWindow")) m_hkShowWindow.Enabled = false; m_cbAutoRun.Checked = ShellUtil.GetStartWithWindows(AppDefs.AutoRunName); m_cbSingleClickTrayAction.Checked = Program.Config.UI.TrayIcon.SingleClickDefault; if(AppConfigEx.IsOptionEnforced(Program.Config.UI.TrayIcon, "SingleClickDefault")) m_cbSingleClickTrayAction.Enabled = false; } private void LoadAdvancedOptions() { bool? obNoMin = null; if(MonoWorkarounds.IsRequired(1418)) obNoMin = true; m_lvAdvanced.Columns.Add(string.Empty); // Resize below m_cdxAdvanced = new CheckedLVItemDXList(m_lvAdvanced, true); ListViewGroup lvg = new ListViewGroup(KPRes.StartAndExit); m_lvAdvanced.Groups.Add(lvg); m_cdxAdvanced.CreateItem(Program.Config.Application.Start, "OpenLastFile", lvg, KPRes.AutoRememberOpenLastFile); m_cdxAdvanced.CreateItem(Program.Config.Integration, "LimitToSingleInstance", lvg, KPRes.LimitSingleInstance); m_cdxAdvanced.CreateItem(Program.Config.Application.Start, "CheckForUpdate", lvg, KPRes.CheckForUpdAtStart); m_cdxAdvanced.CreateItem(Program.Config.Application.Start, "MinimizedAndLocked", lvg, KPRes.StartMinimizedAndLocked, obNoMin); m_cdxAdvanced.CreateItem(Program.Config.Application.FileClosing, "AutoSave", lvg, KPRes.AutoSaveAtExit); lvg = new ListViewGroup(KPRes.AfterDatabaseOpen); m_lvAdvanced.Groups.Add(lvg); m_cdxAdvanced.CreateItem(Program.Config.Application.FileOpening, "ShowExpiredEntries", lvg, KPRes.AutoShowExpiredEntries); m_cdxAdvanced.CreateItem(Program.Config.Application.FileOpening, "ShowSoonToExpireEntries", lvg, KPRes.AutoShowSoonToExpireEntries); lvg = new ListViewGroup(KPRes.AutoType); m_lvAdvanced.Groups.Add(lvg); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeMatchByTitle", lvg, KPRes.AutoTypeMatchByTitle); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeMatchByUrlInTitle", lvg, KPRes.AutoTypeMatchByUrlInTitle); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeMatchByUrlHostInTitle", lvg, KPRes.AutoTypeMatchByUrlHostInTitle); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeMatchByTagInTitle", lvg, KPRes.AutoTypeMatchByTagInTitle); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeExpiredCanMatch", lvg, KPRes.ExpiredEntriesCanMatch); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeAlwaysShowSelDialog", lvg, KPRes.AutoTypeAlwaysShowSelDialog); lvg = new ListViewGroup(KPRes.AutoType + " - " + KPRes.SendingNoun); m_lvAdvanced.Groups.Add(lvg); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypePrependInitSequenceForIE", lvg, KPRes.AutoTypePrependInitSeqForIE); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeReleaseAltWithKeyPress", lvg, KPRes.AutoTypeReleaseAltWithKeyPress); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeAdjustKeyboardLayout", lvg, KPRes.SameKeybLayout); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeAllowInterleaved", lvg, KPRes.InterleavedKeySending); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeCancelOnWindowChange", lvg, KPRes.AutoTypeCancelOnWindowChange); m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeCancelOnTitleChange", lvg, KPRes.AutoTypeCancelOnTitleChange); lvg = new ListViewGroup(KPRes.IOConnectionLong); m_lvAdvanced.Groups.Add(lvg); m_cdxAdvanced.CreateItem(Program.Config.Application, "VerifyWrittenFileAfterSaving", lvg, KPRes.VerifyWrittenFileAfterSave); m_cdxAdvanced.CreateItem(Program.Config.Application, "UseTransactedFileWrites", lvg, KPRes.UseTransactedDatabaseWrites); m_cdxAdvanced.CreateItem(Program.Config.Application, "UseFileLocks", lvg, KPRes.UseFileLocks + " " + KPRes.NotRecommended); m_cdxAdvanced.CreateItem(Program.Config.Application, "SaveForceSync", lvg, KPRes.SaveForceSync); m_cdxAdvanced.CreateItem(Program.Config.Security, "SslCertsAcceptInvalid", lvg, KPRes.SslCertsAcceptInvalid); lvg = new ListViewGroup(KPRes.Advanced); m_lvAdvanced.Groups.Add(lvg); if(!Program.Config.Integration.SearchKeyFiles) Program.Config.Integration.SearchKeyFilesOnRemovableMedia = false; ListViewItem lviSearch = m_cdxAdvanced.CreateItem( Program.Config.Integration, "SearchKeyFiles", lvg, KPRes.SearchKeyFiles); ListViewItem lviSearchRmv = m_cdxAdvanced.CreateItem( Program.Config.Integration, "SearchKeyFilesOnRemovableMedia", lvg, KPRes.SearchKeyFilesAlsoOnRemovable); m_cdxAdvanced.AddLink(lviSearch, lviSearchRmv, CheckItemLinkType.UncheckedUnchecked); m_cdxAdvanced.AddLink(lviSearchRmv, lviSearch, CheckItemLinkType.CheckedChecked); m_cdxAdvanced.CreateItem(Program.Config.Defaults, "RememberKeySources", lvg, KPRes.RememberKeySources); m_cdxAdvanced.CreateItem(Program.Config.Application, "RememberWorkingDirectories", lvg, KPRes.RememberWorkingDirectories); m_cdxAdvanced.CreateItem(Program.Config.UI.Hiding, "SeparateHidingSettings", lvg, KPRes.RememberHidingSettings); m_cdxAdvanced.CreateItem(Program.Config.UI.Hiding, "UnhideButtonAlsoUnhidesSource", lvg, KPRes.UnhideSourceCharactersToo); m_cdxAdvanced.CreateItem(Program.Config.Defaults, "TanExpiresOnUse", lvg, KPRes.TanExpiresOnUse); m_cdxAdvanced.CreateItem(Program.Config.Defaults, "RecycleBinCollapse", lvg, KPRes.RecycleBinCollapse); m_cdxAdvanced.CreateItem(Program.Config.UI, "SecureDesktopPlaySound", lvg, KPRes.SecDeskPlaySound); m_cdxAdvanced.CreateItem(Program.Config.UI, "OptimizeForScreenReader", lvg, KPRes.OptimizeForScreenReader); m_cdxAdvanced.UpdateData(false); UIUtil.ResizeColumns(m_lvAdvanced, true); if(AppConfigEx.IsOptionEnforced(Program.Config.Integration, "ProxyType") || AppConfigEx.IsOptionEnforced(Program.Config.Integration, "ProxyAddress")) m_btnProxy.Enabled = false; } private bool ValidateOptions() { m_hkGlobalAutoType.ResetIfModifierOnly(); m_hkSelectedAutoType.ResetIfModifierOnly(); m_hkShowWindow.ResetIfModifierOnly(); bool bAltMod = false; bAltMod |= ((m_hkGlobalAutoType.HotKeyModifiers == Keys.Alt) || (m_hkGlobalAutoType.HotKeyModifiers == (Keys.Alt | Keys.Shift))); bAltMod |= ((m_hkSelectedAutoType.HotKeyModifiers == Keys.Alt) || (m_hkSelectedAutoType.HotKeyModifiers == (Keys.Alt | Keys.Shift))); bAltMod |= ((m_hkShowWindow.HotKeyModifiers == Keys.Alt) || (m_hkShowWindow.HotKeyModifiers == (Keys.Alt | Keys.Shift))); if(bAltMod) { if(!MessageService.AskYesNo(KPRes.HotKeyAltOnly + MessageService.NewParagraph + KPRes.HotKeyAltOnlyHint + MessageService.NewParagraph + KPRes.HotKeyAltOnlyQuestion, null, false)) return false; } return true; } private void SaveOptions() { if(!m_cbLockAfterTime.Checked) Program.Config.Security.WorkspaceLocking.LockAfterTime = 0; else Program.Config.Security.WorkspaceLocking.LockAfterTime = (uint)m_numLockAfterTime.Value; if(!m_cbLockAfterGlobalTime.Checked) Program.Config.Security.WorkspaceLocking.LockAfterGlobalTime = 0; else Program.Config.Security.WorkspaceLocking.LockAfterGlobalTime = (uint)m_numLockAfterGlobalTime.Value; if(m_cbDefaultExpireDays.Checked) Program.Config.Defaults.NewEntryExpiresInDays = (int)m_numDefaultExpireDays.Value; else Program.Config.Defaults.NewEntryExpiresInDays = -1; if(m_cbClipClearTime.Checked) Program.Config.Security.ClipboardClearAfterSeconds = (int)m_numClipClearTime.Value; else Program.Config.Security.ClipboardClearAfterSeconds = -1; m_cdxSecurityOptions.UpdateData(true); NativeLib.AllowNative = Program.Config.Native.NativeKeyTransformations; m_cdxPolicy.UpdateData(true); m_cdxGuiOptions.UpdateData(true); string strUuid; m_dTsrUuids.TryGetValue(m_cmbMenuStyle.SelectedIndex, out strUuid); Program.Config.UI.ToolStripRenderer = (strUuid ?? string.Empty); if(m_cmbBannerStyle.SelectedIndex != (int)BannerStyle.Default) Program.Config.UI.BannerStyle = (BannerStyle) m_cmbBannerStyle.SelectedIndex; Program.Config.Application.MostRecentlyUsed.MaxItemCount = (uint)m_numMruCount.Value; ChangeHotKey(ref m_kPrevATHKKey, m_hkGlobalAutoType, AppDefs.GlobalHotKeyId.AutoType); ChangeHotKey(ref m_kPrevATSHKKey, m_hkSelectedAutoType, AppDefs.GlobalHotKeyId.AutoTypeSelected); ChangeHotKey(ref m_kPrevSWHKKey, m_hkShowWindow, AppDefs.GlobalHotKeyId.ShowWindow); Program.Config.UI.TrayIcon.SingleClickDefault = m_cbSingleClickTrayAction.Checked; Program.Config.Integration.UrlSchemeOverrides = m_aceUrlSchemeOverrides; Program.Config.Integration.UrlOverride = m_strUrlOverrideAll; m_cdxAdvanced.UpdateData(true); Program.Config.Apply(AceApplyFlags.All); } private void CleanUpEx() { int nTab = m_tabMain.SelectedIndex; if((nTab >= 0) && (nTab < m_tabMain.TabPages.Count)) Program.Config.Defaults.OptionsTabIndex = (uint)nTab; m_tabMain.ImageList = null; // Detach event handlers m_cdxSecurityOptions.Release(); m_cdxPolicy.Release(); m_cdxGuiOptions.Release(); m_cdxAdvanced.Release(); AppConfigEx.ClearXmlPathCache(); } private static void ChangeHotKey(ref Keys kPrevHK, HotKeyControlEx hkControl, int nHotKeyID) { Keys kNew = (hkControl.HotKey | hkControl.HotKeyModifiers); if(kPrevHK != kNew) { kPrevHK = kNew; if(nHotKeyID == AppDefs.GlobalHotKeyId.AutoType) Program.Config.Integration.HotKeyGlobalAutoType = (ulong)kNew; else if(nHotKeyID == AppDefs.GlobalHotKeyId.AutoTypeSelected) Program.Config.Integration.HotKeySelectedAutoType = (ulong)kNew; else if(nHotKeyID == AppDefs.GlobalHotKeyId.ShowWindow) Program.Config.Integration.HotKeyShowWindow = (ulong)kNew; HotKeyManager.UnregisterHotKey(nHotKeyID); if(kPrevHK != Keys.None) HotKeyManager.RegisterHotKey(nHotKeyID, kPrevHK); } } private void UpdateUIState() { if(m_bBlockUIUpdate) return; m_bBlockUIUpdate = true; m_numLockAfterTime.Enabled = (m_cbLockAfterTime.Checked && m_cbLockAfterTime.Enabled); if(WinUtil.IsWindows9x || NativeLib.IsUnix()) { m_cbLockAfterGlobalTime.Checked = false; m_cbLockAfterGlobalTime.Enabled = false; m_numLockAfterGlobalTime.Enabled = false; } else m_numLockAfterGlobalTime.Enabled = (m_cbLockAfterGlobalTime.Checked && m_cbLockAfterGlobalTime.Enabled); m_numDefaultExpireDays.Enabled = (m_cbDefaultExpireDays.Checked && m_cbDefaultExpireDays.Enabled); m_numClipClearTime.Enabled = (m_cbClipClearTime.Checked && m_cbClipClearTime.Enabled); m_bBlockUIUpdate = false; } private void OnBtnOK(object sender, EventArgs e) { if(!ValidateOptions()) { this.DialogResult = DialogResult.None; return; } SaveOptions(); } private void OnBtnCancel(object sender, EventArgs e) { } private void OnBannerStyleSelectedChanged(object sender, EventArgs e) { int nIndex = m_cmbBannerStyle.SelectedIndex; BannerStyle bs = (BannerStyle)nIndex; CreateDialogBanner(bs); } private void OnLockAfterTimeCheckedChanged(object sender, EventArgs e) { UpdateUIState(); } private void OnBtnSelListFont(object sender, EventArgs e) { FontDialog dlg = UIUtil.CreateFontDialog(false); AceFont fOld = Program.Config.UI.StandardFont; if(fOld.OverrideUIDefault) dlg.Font = fOld.ToFont(); else { try { dlg.Font = m_lvSecurityOptions.Font; } catch(Exception) { Debug.Assert(false); } } if(dlg.ShowDialog() == DialogResult.OK) { Program.Config.UI.StandardFont = new AceFont(dlg.Font); Program.Config.UI.StandardFont.OverrideUIDefault = true; } dlg.Dispose(); } private void OnBtnSelPwFont(object sender, EventArgs e) { FontDialog dlg = UIUtil.CreateFontDialog(false); AceFont fOld = Program.Config.UI.PasswordFont; if(fOld.OverrideUIDefault) dlg.Font = fOld.ToFont(); else if(FontUtil.MonoFont != null) dlg.Font = FontUtil.MonoFont; else { try { dlg.Font = new Font(FontFamily.GenericMonospace, m_lvSecurityOptions.Font.SizeInPoints); } catch(Exception) { Debug.Assert(false); } } if(dlg.ShowDialog() == DialogResult.OK) { Program.Config.UI.PasswordFont = new AceFont(dlg.Font); Program.Config.UI.PasswordFont.OverrideUIDefault = true; } dlg.Dispose(); } private void OnDefaultExpireDaysCheckedChanged(object sender, EventArgs e) { UpdateUIState(); } private void OnBtnFileExtCreate(object sender, EventArgs e) { // ShellUtil.RegisterExtension(AppDefs.FileExtension.FileExt, AppDefs.FileExtension.ExtId, // KPRes.FileExtName, WinUtil.GetExecutable(), PwDefs.ShortProductName, true); WinUtil.RunElevated(WinUtil.GetExecutable(), "-" + AppDefs.CommandLineOptions.FileExtRegister, false); } private void OnBtnFileExtRemove(object sender, EventArgs e) { // ShellUtil.UnregisterExtension(AppDefs.FileExtension.FileExt, // AppDefs.FileExtension.ExtId); WinUtil.RunElevated(WinUtil.GetExecutable(), "-" + AppDefs.CommandLineOptions.FileExtUnregister, false); } private void OnCheckedChangedAutoRun(object sender, EventArgs e) { if(m_bLoadingSettings) return; bool bRequested = m_cbAutoRun.Checked; bool bCurrent = ShellUtil.GetStartWithWindows(AppDefs.AutoRunName); if(bRequested != bCurrent) { string strPath = WinUtil.GetExecutable().Trim(); if(strPath.StartsWith("\"") == false) strPath = "\"" + strPath + "\""; ShellUtil.SetStartWithWindows(AppDefs.AutoRunName, strPath, bRequested); bool bNew = ShellUtil.GetStartWithWindows(AppDefs.AutoRunName); if(bNew != bRequested) m_cbAutoRun.Checked = bNew; } } private void OnFormClosed(object sender, FormClosedEventArgs e) { CleanUpEx(); GlobalWindowManager.RemoveWindow(this); } private void OnPolicyInfoLinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { AppHelp.ShowHelp(AppDefs.HelpTopics.AppPolicy, null); } private void OnClipboardClearTimeCheckedChanged(object sender, EventArgs e) { UpdateUIState(); } private void OnBtnUrlOverrides(object sender, EventArgs e) { UrlOverridesForm dlg = new UrlOverridesForm(); dlg.InitEx(m_aceUrlSchemeOverrides, m_strUrlOverrideAll); if(dlg.ShowDialog() == DialogResult.OK) m_strUrlOverrideAll = dlg.UrlOverrideAll; UIUtil.DestroyForm(dlg); } private void OnHotKeyHelpLinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { AppHelp.ShowHelp(AppDefs.HelpTopics.Setup, AppDefs.HelpTopics.SetupMono); } private void OnLockAfterGlobalTimeCheckedChanged(object sender, EventArgs e) { UpdateUIState(); } private void OnBtnProxy(object sender, EventArgs e) { ProxyForm dlg = new ProxyForm(); UIUtil.ShowDialogAndDestroy(dlg); } } } KeePass/Forms/FileBrowserForm.cs0000664000000000000000000003655612641461340015615 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Text; using System.Windows.Forms; using System.IO; using System.Diagnostics; using KeePass.Native; using KeePass.Resources; using KeePass.UI; using KeePass.Util; using KeePassLib; using KeePassLib.Utility; namespace KeePass.Forms { public partial class FileBrowserForm : Form { private bool m_bSaveMode = false; private string m_strTitle = PwDefs.ShortProductName; private string m_strHint = string.Empty; private string m_strContext = null; private ImageList m_ilFolders = null; private List m_vFolderImages = new List(); private ImageList m_ilFiles = null; private List m_vFileImages = new List(); private int m_nIconDim = DpiUtil.ScaleIntY(16); private const string StrDummyNode = "66913D76EA3F4F2A8B1A0899B7322EC3"; private sealed class FbfPrivTviComparer : IComparer { public int Compare(TreeNode x, TreeNode y) { Debug.Assert((x != null) && (y != null)); return StrUtil.CompareNaturally(x.Text, y.Text); } } private sealed class FbfPrivLviComparer : IComparer { public int Compare(ListViewItem x, ListViewItem y) { Debug.Assert((x != null) && (y != null)); return StrUtil.CompareNaturally(x.Text, y.Text); } } private string m_strSelectedFile = null; public string SelectedFile { get { return m_strSelectedFile; } } public void InitEx(bool bSaveMode, string strTitle, string strHint, string strContext) { m_bSaveMode = bSaveMode; if(strTitle != null) m_strTitle = strTitle; if(strHint != null) m_strHint = strHint; m_strContext = strContext; } public FileBrowserForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { GlobalWindowManager.AddWindow(this); this.Icon = Properties.Resources.KeePass; this.Text = m_strTitle; m_nIconDim = m_tvFolders.ItemHeight; if(UIUtil.VistaStyleListsSupported) { m_tvFolders.ShowLines = false; UIUtil.SetExplorerTheme(m_tvFolders, true); UIUtil.SetExplorerTheme(m_lvFiles, true); } m_btnOK.Text = (m_bSaveMode ? KPRes.SaveCmd : KPRes.OpenCmd); m_lblHint.Text = m_strHint; if(UIUtil.ColorsEqual(m_lblHint.ForeColor, Color.Black)) m_lblHint.ForeColor = Color.FromArgb(96, 96, 96); int nWidth = m_lvFiles.ClientSize.Width - UIUtil.GetVScrollBarWidth(); m_lvFiles.Columns.Add(KPRes.Name, (nWidth * 3) / 4); m_lvFiles.Columns.Add(KPRes.Size, nWidth / 4, HorizontalAlignment.Right); InitialPopulateFolders(); string strWorkDir = Program.Config.Application.GetWorkingDirectory(m_strContext); if(string.IsNullOrEmpty(strWorkDir)) strWorkDir = WinUtil.GetHomeDirectory(); BrowseToFolder(strWorkDir); EnableControlsEx(); } private void OnFormClosed(object sender, FormClosedEventArgs e) { m_tvFolders.Nodes.Clear(); m_lvFiles.Items.Clear(); m_tvFolders.ImageList = null; m_lvFiles.SmallImageList = null; if(m_ilFolders != null) { m_ilFolders.Dispose(); m_ilFolders = null; } if(m_ilFiles != null) { m_ilFiles.Dispose(); m_ilFiles = null; } foreach(Image imgFld in m_vFolderImages) imgFld.Dispose(); m_vFolderImages.Clear(); foreach(Image imgFile in m_vFileImages) imgFile.Dispose(); m_vFileImages.Clear(); GlobalWindowManager.RemoveWindow(this); } private void EnableControlsEx() { m_btnOK.Enabled = (m_lvFiles.SelectedIndices.Count == 1); } private void InitialPopulateFolders() { List l = new List(); string str = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); if(!string.IsNullOrEmpty(str)) { TreeNode tn = CreateFolderNode(str, false, null); if(tn != null) l.Add(tn); } str = Environment.GetEnvironmentVariable("USERPROFILE"); if(!string.IsNullOrEmpty(str)) { TreeNode tn = CreateFolderNode(str, false, null); if(tn != null) l.Add(tn); } DriveInfo[] vDrives = DriveInfo.GetDrives(); foreach(DriveInfo drv in vDrives) { try { DirectoryInfo diDrive = drv.RootDirectory; TreeNode tn = CreateFolderNode(diDrive.FullName, true, drv); if(tn != null) l.Add(tn); } catch(Exception) { Debug.Assert(false); } } RebuildFolderImageList(); m_tvFolders.Nodes.AddRange(l.ToArray()); } private void GetObjectProps(string strPath, DriveInfo drvHint, out Image img, ref string strDisplayName) { GetObjectPropsUnscaled(strPath, drvHint, out img, ref strDisplayName); if(img != null) { if((img.Width != m_nIconDim) || (img.Height != m_nIconDim)) { Image imgScaled = GfxUtil.ScaleImage(img, m_nIconDim, m_nIconDim, ScaleTransformFlags.UIIcon); img.Dispose(); // Dispose unscaled version img = imgScaled; } } } private void GetObjectPropsUnscaled(string strPath, DriveInfo drvHint, out Image img, ref string strDisplayName) { img = null; try { string strName; NativeMethods.SHGetFileInfo(strPath, m_nIconDim, out img, out strName); if(!string.IsNullOrEmpty(strName) && (strName.IndexOf( Path.DirectorySeparatorChar) < 0)) strDisplayName = strName; if(img != null) return; } catch(Exception) { Debug.Assert(false); } ImageList.ImageCollection icons = Program.MainForm.ClientIcons.Images; if((strPath.Length <= 3) && (drvHint != null)) { switch(drvHint.DriveType) { case DriveType.Fixed: img = new Bitmap(icons[(int)PwIcon.Drive]); break; case DriveType.CDRom: img = new Bitmap(icons[(int)PwIcon.CDRom]); break; case DriveType.Network: img = new Bitmap(icons[(int)PwIcon.NetworkServer]); break; case DriveType.Ram: img = new Bitmap(icons[(int)PwIcon.Memory]); break; case DriveType.Removable: img = new Bitmap(icons[(int)PwIcon.Disk]); break; default: img = new Bitmap(icons[(int)PwIcon.Folder]); break; } return; } img = UIUtil.GetFileIcon(strPath, m_nIconDim, m_nIconDim); if(img != null) return; if(Directory.Exists(strPath)) { img = new Bitmap(icons[(int)PwIcon.Folder]); return; } if(File.Exists(strPath)) { img = new Bitmap(icons[(int)PwIcon.PaperNew]); return; } Debug.Assert(false); img = new Bitmap(icons[(int)PwIcon.Star]); } private TreeNode CreateFolderNode(string strDir, bool bForcePlusMinus, DriveInfo drvHint) { try { DirectoryInfo di = new DirectoryInfo(strDir); Image img; string strText = di.Name; GetObjectProps(di.FullName, drvHint, out img, ref strText); m_vFolderImages.Add(img); TreeNode tn = new TreeNode(strText, m_vFolderImages.Count - 1, m_vFolderImages.Count - 1); tn.Tag = di.FullName; InitNodePlusMinus(tn, di, bForcePlusMinus); return tn; } catch(Exception) { Debug.Assert(false); } return null; } private static void InitNodePlusMinus(TreeNode tn, DirectoryInfo di, bool bForce) { bool bMark = true; if(!bForce) { try { DirectoryInfo[] vDirs = di.GetDirectories(); bool bFoundDir = false; foreach(DirectoryInfo diSub in vDirs) { if(!IsValidFileSystemObject(diSub)) continue; bFoundDir = true; break; } if(!bFoundDir) bMark = false; } catch(Exception) { bMark = false; } // Usually unauthorized } if(bMark) { tn.Nodes.Add(StrDummyNode); tn.Collapse(); } } private void RebuildFolderImageList() { ImageList imgNew = UIUtil.BuildImageListUnscaled( m_vFolderImages, m_nIconDim, m_nIconDim); m_tvFolders.ImageList = imgNew; if(m_ilFolders != null) m_ilFolders.Dispose(); m_ilFolders = imgNew; } private void BuildFilesList(DirectoryInfo di) { m_lvFiles.BeginUpdate(); m_lvFiles.Items.Clear(); DirectoryInfo[] vDirs; FileInfo[] vFiles; try { vDirs = di.GetDirectories(); vFiles = di.GetFiles(); } catch(Exception) { m_lvFiles.EndUpdate(); return; } // Unauthorized foreach(Image imgFile in m_vFileImages) imgFile.Dispose(); m_vFileImages.Clear(); List lDirItems = new List(); List lFileItems = new List(); foreach(DirectoryInfo diSub in vDirs) { AddFileItem(diSub, m_vFileImages, lDirItems, -1); } foreach(FileInfo fi in vFiles) { AddFileItem(fi, m_vFileImages, lFileItems, fi.Length); } m_lvFiles.SmallImageList = null; if(m_ilFiles != null) m_ilFiles.Dispose(); m_ilFiles = UIUtil.BuildImageListUnscaled(m_vFileImages, m_nIconDim, m_nIconDim); m_lvFiles.SmallImageList = m_ilFiles; lDirItems.Sort(new FbfPrivLviComparer()); m_lvFiles.Items.AddRange(lDirItems.ToArray()); lFileItems.Sort(new FbfPrivLviComparer()); m_lvFiles.Items.AddRange(lFileItems.ToArray()); m_lvFiles.EndUpdate(); EnableControlsEx(); } private static bool IsValidFileSystemObject(FileSystemInfo fsi) { if(fsi == null) { Debug.Assert(false); return false; } string strName = fsi.Name; if(string.IsNullOrEmpty(strName) || (strName == ".") || (strName == "..")) return false; if(strName.EndsWith(".lnk", StrUtil.CaseIgnoreCmp)) return false; if(strName.EndsWith(".url", StrUtil.CaseIgnoreCmp)) return false; FileAttributes fa = fsi.Attributes; if((long)(fa & FileAttributes.ReparsePoint) != 0) return false; if(((long)(fa & FileAttributes.System) != 0) && ((long)(fa & FileAttributes.Hidden) != 0)) return false; return true; } private void AddFileItem(FileSystemInfo fsi, List lImages, List lItems, long lFileLength) { if(!IsValidFileSystemObject(fsi)) return; Image img; string strText = fsi.Name; GetObjectProps(fsi.FullName, null, out img, ref strText); lImages.Add(img); ListViewItem lvi = new ListViewItem(strText, lImages.Count - 1); lvi.Tag = fsi.FullName; if(lFileLength < 0) lvi.SubItems.Add(string.Empty); else lvi.SubItems.Add(StrUtil.FormatDataSizeKB((ulong)lFileLength)); lItems.Add(lvi); } private bool PerformFileSelection() { ListView.SelectedListViewItemCollection lvsic = m_lvFiles.SelectedItems; if((lvsic == null) || (lvsic.Count != 1)) { Debug.Assert(false); return false; } string str = (lvsic[0].Tag as string); if(string.IsNullOrEmpty(str)) { Debug.Assert(false); return false; } try { if(Directory.Exists(str)) { TreeNode tn = m_tvFolders.SelectedNode; if(tn == null) { Debug.Assert(false); return false; } if(!tn.IsExpanded) tn.Expand(); foreach(TreeNode tnSub in tn.Nodes) { string strSub = (tnSub.Tag as string); if(string.IsNullOrEmpty(strSub)) { Debug.Assert(false); continue; } if(strSub.Equals(str, StrUtil.CaseIgnoreCmp)) { m_tvFolders.SelectedNode = tnSub; tnSub.EnsureVisible(); return false; // Success, but not a file selection! } } Debug.Assert(false); } else if(File.Exists(str)) { m_strSelectedFile = str; Program.Config.Application.SetWorkingDirectory(m_strContext, UrlUtil.GetFileDirectory(str, false, true)); return true; } else { Debug.Assert(false); } } catch(Exception) { Debug.Assert(false); } return false; } private void OnBtnOK(object sender, EventArgs e) { if(!PerformFileSelection()) this.DialogResult = DialogResult.None; } private void OnFilesItemActivate(object sender, EventArgs e) { if(PerformFileSelection()) this.DialogResult = DialogResult.OK; } private void OnFoldersBeforeExpand(object sender, TreeViewCancelEventArgs e) { TreeNode tn = e.Node; if(tn == null) { Debug.Assert(false); e.Cancel = true; return; } if((tn.Nodes.Count == 1) && (tn.Nodes[0].Text == StrDummyNode)) { tn.Nodes.Clear(); List lNodes = new List(); try { DirectoryInfo di = new DirectoryInfo(tn.Tag as string); DirectoryInfo[] vSubDirs = di.GetDirectories(); foreach(DirectoryInfo diSub in vSubDirs) { if(!IsValidFileSystemObject(diSub)) continue; TreeNode tnSub = CreateFolderNode(diSub.FullName, false, null); if(tnSub != null) lNodes.Add(tnSub); } } catch(Exception) { Debug.Assert(false); } RebuildFolderImageList(); lNodes.Sort(new FbfPrivTviComparer()); tn.Nodes.AddRange(lNodes.ToArray()); } } private void BrowseToFolder(string strPath) { try { DirectoryInfo di = new DirectoryInfo(strPath); string[] vPath = di.FullName.Split(new char[]{ Path.DirectorySeparatorChar }); if((vPath == null) || (vPath.Length == 0)) { Debug.Assert(false); return; } TreeNode tn = null; string str = string.Empty; for(int i = 0; i < vPath.Length; ++i) { if(i > 0) str = UrlUtil.EnsureTerminatingSeparator(str, false); str += vPath[i]; if(i == 0) str = UrlUtil.EnsureTerminatingSeparator(str, false); TreeNodeCollection tnc = ((tn != null) ? tn.Nodes : m_tvFolders.Nodes); tn = null; foreach(TreeNode tnSub in tnc) { string strSub = (tnSub.Tag as string); if(string.IsNullOrEmpty(strSub)) { Debug.Assert(false); continue; } if(strSub.Equals(str, StrUtil.CaseIgnoreCmp)) { tn = tnSub; break; } } if(tn == null) { Debug.Assert(false); break; } if((i != (vPath.Length - 1)) && !tn.IsExpanded) tn.Expand(); } if(tn != null) { m_tvFolders.SelectedNode = tn; tn.EnsureVisible(); } else { Debug.Assert(false); } } catch(Exception) { Debug.Assert(false); } } private void OnFoldersAfterSelect(object sender, TreeViewEventArgs e) { TreeNode tn = e.Node; string strPath = (tn.Tag as string); if(strPath == null) { Debug.Assert(false); return; } try { DirectoryInfo di = new DirectoryInfo(strPath); BuildFilesList(di); } catch(Exception) { Debug.Assert(false); } } private void OnFilesSelectedIndexChanged(object sender, EventArgs e) { EnableControlsEx(); } } } KeePass/Forms/ColumnsForm.resx0000664000000000000000000001326612501527004015352 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/EcasConditionForm.resx0000664000000000000000000001326612501527700016457 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/EntryListForm.cs0000664000000000000000000001162012641461340015310 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.UI; using KeePass.Resources; using KeePass.Native; using KeePassLib; using KeePassLib.Collections; using KeePassLib.Utility; namespace KeePass.Forms { public partial class EntryListForm : Form { private string m_strTitle = string.Empty; private string m_strDescShort = string.Empty; private string m_strDescLong = string.Empty; private Image m_imgIcon = null; private ImageList m_ilIcons = null; private PwObjectList m_vEntries = null; private PwEntry m_peSelected = null; private bool m_bEnsureForeground = false; public PwEntry SelectedEntry { get { return m_peSelected; } } public bool EnsureForeground { get { return m_bEnsureForeground; } set { m_bEnsureForeground = value; } } public void InitEx(string strTitle, string strDescShort, string strDescLong, Image imgIcon, ImageList ilIcons, PwObjectList vEntries) { m_strTitle = strTitle; m_strDescShort = strDescShort; m_strDescLong = strDescLong; m_imgIcon = imgIcon; m_ilIcons = UIUtil.CloneImageList(ilIcons, true); m_vEntries = vEntries; } public EntryListForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } private void OnFormLoad(object sender, EventArgs e) { Debug.Assert(m_strTitle.Length > 0); Debug.Assert(m_imgIcon != null); Debug.Assert(m_ilIcons != null); GlobalWindowManager.AddWindow(this); BannerFactory.CreateBannerEx(this, m_bannerImage, m_imgIcon, m_strTitle, m_strDescShort); m_lblText.Text = m_strDescLong; this.Text = m_strTitle; this.Icon = Properties.Resources.KeePass; if(m_ilIcons != null) m_lvEntries.SmallImageList = m_ilIcons; else m_ilIcons = new ImageList(); List> vColumns = new List>(); vColumns.Add(new KeyValuePair(PwDefs.TitleField, KPRes.Title)); vColumns.Add(new KeyValuePair(PwDefs.UserNameField, KPRes.UserName)); vColumns.Add(new KeyValuePair(PwDefs.UrlField, KPRes.Url)); UIUtil.CreateEntryList(m_lvEntries, m_vEntries, vColumns, m_ilIcons); ProcessResize(); if(m_bEnsureForeground) { this.BringToFront(); this.Activate(); } EnableControlsEx(); } private void EnableControlsEx() { bool bCond = (m_lvEntries.SelectedIndices.Count > 0); bool bCur = m_btnOK.Enabled; if(bCond != bCur) m_btnOK.Enabled = bCond; } private void ProcessResize() { UIUtil.ResizeColumns(m_lvEntries, true); } private bool GetSelectedEntry(bool bSetDialogResult) { ListView.SelectedListViewItemCollection slvic = m_lvEntries.SelectedItems; if(slvic.Count == 1) { m_peSelected = (slvic[0].Tag as PwEntry); if(bSetDialogResult) this.DialogResult = DialogResult.OK; return true; } return false; } private void OnBtnOK(object sender, EventArgs e) { if(GetSelectedEntry(false) == false) this.DialogResult = DialogResult.None; } private void OnBtnCancel(object sender, EventArgs e) { } private void CleanUpEx() { if(m_ilIcons != null) { m_lvEntries.SmallImageList = null; // Detach event handlers m_ilIcons.Dispose(); m_ilIcons = null; } } private void OnEntriesItemActivate(object sender, EventArgs e) { if(GetSelectedEntry(true)) m_lvEntries.Enabled = false; } private void OnEntriesSelectedIndexChanged(object sender, EventArgs e) { EnableControlsEx(); // ListView.SelectedIndexCollection lvsic = m_lvEntries.SelectedIndices; // if((lvsic != null) && (lvsic.Count == 1)) // NativeMethods.EnsureVisible(m_lvEntries, lvsic[0], false); } private void OnFormClosed(object sender, FormClosedEventArgs e) { CleanUpEx(); GlobalWindowManager.RemoveWindow(this); } } } KeePass/Forms/EcasTriggerForm.Designer.cs0000664000000000000000000007030412501530246017312 0ustar rootrootnamespace KeePass.Forms { partial class EcasTriggerForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_btnPrev = new System.Windows.Forms.Button(); this.m_btnNext = new System.Windows.Forms.Button(); this.m_tabMain = new System.Windows.Forms.TabControl(); this.m_tabProps = new System.Windows.Forms.TabPage(); this.m_lblEnabledDesc = new System.Windows.Forms.Label(); this.m_cbTurnOffAfterAction = new System.Windows.Forms.CheckBox(); this.m_tbComments = new System.Windows.Forms.TextBox(); this.m_lblTriggerComments = new System.Windows.Forms.Label(); this.m_lblInitiallyOnDesc = new System.Windows.Forms.Label(); this.m_cbInitiallyOn = new System.Windows.Forms.CheckBox(); this.m_cbEnabled = new System.Windows.Forms.CheckBox(); this.m_tbName = new System.Windows.Forms.TextBox(); this.m_lblTriggerName = new System.Windows.Forms.Label(); this.m_tabEvents = new System.Windows.Forms.TabPage(); this.m_btnEventMoveDown = new System.Windows.Forms.Button(); this.m_btnEventMoveUp = new System.Windows.Forms.Button(); this.m_btnEventEdit = new System.Windows.Forms.Button(); this.m_btnEventDelete = new System.Windows.Forms.Button(); this.m_btnEventAdd = new System.Windows.Forms.Button(); this.m_lblEventsIntro = new System.Windows.Forms.Label(); this.m_lvEvents = new KeePass.UI.CustomListViewEx(); this.m_tabConditions = new System.Windows.Forms.TabPage(); this.m_btnConditionMoveDown = new System.Windows.Forms.Button(); this.m_btnConditionMoveUp = new System.Windows.Forms.Button(); this.m_btnConditionEdit = new System.Windows.Forms.Button(); this.m_lblConditionsEmptyHint = new System.Windows.Forms.Label(); this.m_btnConditionDelete = new System.Windows.Forms.Button(); this.m_btnConditionAdd = new System.Windows.Forms.Button(); this.m_lblConditionsIntro = new System.Windows.Forms.Label(); this.m_lvConditions = new KeePass.UI.CustomListViewEx(); this.m_tabActions = new System.Windows.Forms.TabPage(); this.m_btnActionMoveDown = new System.Windows.Forms.Button(); this.m_btnActionMoveUp = new System.Windows.Forms.Button(); this.m_btnActionEdit = new System.Windows.Forms.Button(); this.m_btnActionDelete = new System.Windows.Forms.Button(); this.m_btnActionAdd = new System.Windows.Forms.Button(); this.m_lvActions = new KeePass.UI.CustomListViewEx(); this.m_lblActionsIntro = new System.Windows.Forms.Label(); this.m_btnHelp = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); this.m_tabMain.SuspendLayout(); this.m_tabProps.SuspendLayout(); this.m_tabEvents.SuspendLayout(); this.m_tabConditions.SuspendLayout(); this.m_tabActions.SuspendLayout(); this.SuspendLayout(); // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(594, 60); this.m_bannerImage.TabIndex = 0; this.m_bannerImage.TabStop = false; // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(426, 389); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 4; this.m_btnOK.Text = "&Finish"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(507, 389); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 5; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_btnPrev // this.m_btnPrev.Location = new System.Drawing.Point(258, 389); this.m_btnPrev.Name = "m_btnPrev"; this.m_btnPrev.Size = new System.Drawing.Size(75, 23); this.m_btnPrev.TabIndex = 2; this.m_btnPrev.Text = "< &Back"; this.m_btnPrev.UseVisualStyleBackColor = true; this.m_btnPrev.Click += new System.EventHandler(this.OnBtnPrev); // // m_btnNext // this.m_btnNext.Location = new System.Drawing.Point(333, 389); this.m_btnNext.Name = "m_btnNext"; this.m_btnNext.Size = new System.Drawing.Size(75, 23); this.m_btnNext.TabIndex = 3; this.m_btnNext.Text = "&Next >"; this.m_btnNext.UseVisualStyleBackColor = true; this.m_btnNext.Click += new System.EventHandler(this.OnBtnNext); // // m_tabMain // this.m_tabMain.Controls.Add(this.m_tabProps); this.m_tabMain.Controls.Add(this.m_tabEvents); this.m_tabMain.Controls.Add(this.m_tabConditions); this.m_tabMain.Controls.Add(this.m_tabActions); this.m_tabMain.Location = new System.Drawing.Point(12, 69); this.m_tabMain.Name = "m_tabMain"; this.m_tabMain.SelectedIndex = 0; this.m_tabMain.Size = new System.Drawing.Size(570, 314); this.m_tabMain.TabIndex = 0; this.m_tabMain.SelectedIndexChanged += new System.EventHandler(this.OnTabMainSelectedIndexChanged); // // m_tabProps // this.m_tabProps.Controls.Add(this.m_lblEnabledDesc); this.m_tabProps.Controls.Add(this.m_cbTurnOffAfterAction); this.m_tabProps.Controls.Add(this.m_tbComments); this.m_tabProps.Controls.Add(this.m_lblTriggerComments); this.m_tabProps.Controls.Add(this.m_lblInitiallyOnDesc); this.m_tabProps.Controls.Add(this.m_cbInitiallyOn); this.m_tabProps.Controls.Add(this.m_cbEnabled); this.m_tabProps.Controls.Add(this.m_tbName); this.m_tabProps.Controls.Add(this.m_lblTriggerName); this.m_tabProps.Location = new System.Drawing.Point(4, 22); this.m_tabProps.Name = "m_tabProps"; this.m_tabProps.Padding = new System.Windows.Forms.Padding(3); this.m_tabProps.Size = new System.Drawing.Size(562, 288); this.m_tabProps.TabIndex = 0; this.m_tabProps.Text = "Properties"; this.m_tabProps.UseVisualStyleBackColor = true; // // m_lblEnabledDesc // this.m_lblEnabledDesc.AutoSize = true; this.m_lblEnabledDesc.Location = new System.Drawing.Point(26, 81); this.m_lblEnabledDesc.Name = "m_lblEnabledDesc"; this.m_lblEnabledDesc.Size = new System.Drawing.Size(204, 13); this.m_lblEnabledDesc.TabIndex = 3; this.m_lblEnabledDesc.Text = "If not enabled, the trigger has no function."; // // m_cbTurnOffAfterAction // this.m_cbTurnOffAfterAction.AutoSize = true; this.m_cbTurnOffAfterAction.Location = new System.Drawing.Point(9, 263); this.m_cbTurnOffAfterAction.Name = "m_cbTurnOffAfterAction"; this.m_cbTurnOffAfterAction.Size = new System.Drawing.Size(224, 17); this.m_cbTurnOffAfterAction.TabIndex = 8; this.m_cbTurnOffAfterAction.Text = "Turn off after executing actions (run once)"; this.m_cbTurnOffAfterAction.UseVisualStyleBackColor = true; // // m_tbComments // this.m_tbComments.AcceptsReturn = true; this.m_tbComments.Location = new System.Drawing.Point(9, 164); this.m_tbComments.Multiline = true; this.m_tbComments.Name = "m_tbComments"; this.m_tbComments.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.m_tbComments.Size = new System.Drawing.Size(543, 83); this.m_tbComments.TabIndex = 7; // // m_lblTriggerComments // this.m_lblTriggerComments.AutoSize = true; this.m_lblTriggerComments.Location = new System.Drawing.Point(6, 148); this.m_lblTriggerComments.Name = "m_lblTriggerComments"; this.m_lblTriggerComments.Size = new System.Drawing.Size(59, 13); this.m_lblTriggerComments.TabIndex = 6; this.m_lblTriggerComments.Text = "Comments:"; // // m_lblInitiallyOnDesc // this.m_lblInitiallyOnDesc.AutoSize = true; this.m_lblInitiallyOnDesc.Location = new System.Drawing.Point(26, 126); this.m_lblInitiallyOnDesc.Name = "m_lblInitiallyOnDesc"; this.m_lblInitiallyOnDesc.Size = new System.Drawing.Size(319, 13); this.m_lblInitiallyOnDesc.TabIndex = 5; this.m_lblInitiallyOnDesc.Text = "When checked, the trigger will initially be on when KeePass starts."; // // m_cbInitiallyOn // this.m_cbInitiallyOn.AutoSize = true; this.m_cbInitiallyOn.Location = new System.Drawing.Point(9, 106); this.m_cbInitiallyOn.Name = "m_cbInitiallyOn"; this.m_cbInitiallyOn.Size = new System.Drawing.Size(72, 17); this.m_cbInitiallyOn.TabIndex = 4; this.m_cbInitiallyOn.Text = "Initially on"; this.m_cbInitiallyOn.UseVisualStyleBackColor = true; // // m_cbEnabled // this.m_cbEnabled.AutoSize = true; this.m_cbEnabled.Location = new System.Drawing.Point(9, 61); this.m_cbEnabled.Name = "m_cbEnabled"; this.m_cbEnabled.Size = new System.Drawing.Size(65, 17); this.m_cbEnabled.TabIndex = 2; this.m_cbEnabled.Text = "Enabled"; this.m_cbEnabled.UseVisualStyleBackColor = true; // // m_tbName // this.m_tbName.Location = new System.Drawing.Point(9, 26); this.m_tbName.Name = "m_tbName"; this.m_tbName.Size = new System.Drawing.Size(543, 20); this.m_tbName.TabIndex = 1; // // m_lblTriggerName // this.m_lblTriggerName.AutoSize = true; this.m_lblTriggerName.Location = new System.Drawing.Point(6, 10); this.m_lblTriggerName.Name = "m_lblTriggerName"; this.m_lblTriggerName.Size = new System.Drawing.Size(38, 13); this.m_lblTriggerName.TabIndex = 0; this.m_lblTriggerName.Text = "Name:"; // // m_tabEvents // this.m_tabEvents.Controls.Add(this.m_btnEventMoveDown); this.m_tabEvents.Controls.Add(this.m_btnEventMoveUp); this.m_tabEvents.Controls.Add(this.m_btnEventEdit); this.m_tabEvents.Controls.Add(this.m_btnEventDelete); this.m_tabEvents.Controls.Add(this.m_btnEventAdd); this.m_tabEvents.Controls.Add(this.m_lblEventsIntro); this.m_tabEvents.Controls.Add(this.m_lvEvents); this.m_tabEvents.Location = new System.Drawing.Point(4, 22); this.m_tabEvents.Name = "m_tabEvents"; this.m_tabEvents.Padding = new System.Windows.Forms.Padding(3); this.m_tabEvents.Size = new System.Drawing.Size(562, 288); this.m_tabEvents.TabIndex = 1; this.m_tabEvents.Text = "Events"; this.m_tabEvents.UseVisualStyleBackColor = true; // // m_btnEventMoveDown // this.m_btnEventMoveDown.Image = global::KeePass.Properties.Resources.B16x16_1DownArrow; this.m_btnEventMoveDown.Location = new System.Drawing.Point(478, 161); this.m_btnEventMoveDown.Name = "m_btnEventMoveDown"; this.m_btnEventMoveDown.Size = new System.Drawing.Size(75, 23); this.m_btnEventMoveDown.TabIndex = 6; this.m_btnEventMoveDown.UseVisualStyleBackColor = true; this.m_btnEventMoveDown.Click += new System.EventHandler(this.OnBtnEventMoveDown); // // m_btnEventMoveUp // this.m_btnEventMoveUp.Image = global::KeePass.Properties.Resources.B16x16_1UpArrow; this.m_btnEventMoveUp.Location = new System.Drawing.Point(478, 132); this.m_btnEventMoveUp.Name = "m_btnEventMoveUp"; this.m_btnEventMoveUp.Size = new System.Drawing.Size(75, 23); this.m_btnEventMoveUp.TabIndex = 5; this.m_btnEventMoveUp.UseVisualStyleBackColor = true; this.m_btnEventMoveUp.Click += new System.EventHandler(this.OnBtnEventMoveUp); // // m_btnEventEdit // this.m_btnEventEdit.Location = new System.Drawing.Point(478, 55); this.m_btnEventEdit.Name = "m_btnEventEdit"; this.m_btnEventEdit.Size = new System.Drawing.Size(75, 23); this.m_btnEventEdit.TabIndex = 3; this.m_btnEventEdit.Text = "&Edit..."; this.m_btnEventEdit.UseVisualStyleBackColor = true; this.m_btnEventEdit.Click += new System.EventHandler(this.OnEventEdit); // // m_btnEventDelete // this.m_btnEventDelete.Location = new System.Drawing.Point(478, 84); this.m_btnEventDelete.Name = "m_btnEventDelete"; this.m_btnEventDelete.Size = new System.Drawing.Size(75, 23); this.m_btnEventDelete.TabIndex = 4; this.m_btnEventDelete.Text = "&Delete"; this.m_btnEventDelete.UseVisualStyleBackColor = true; this.m_btnEventDelete.Click += new System.EventHandler(this.OnEventDelete); // // m_btnEventAdd // this.m_btnEventAdd.Location = new System.Drawing.Point(478, 26); this.m_btnEventAdd.Name = "m_btnEventAdd"; this.m_btnEventAdd.Size = new System.Drawing.Size(75, 23); this.m_btnEventAdd.TabIndex = 2; this.m_btnEventAdd.Text = "&Add..."; this.m_btnEventAdd.UseVisualStyleBackColor = true; this.m_btnEventAdd.Click += new System.EventHandler(this.OnEventAdd); // // m_lblEventsIntro // this.m_lblEventsIntro.AutoSize = true; this.m_lblEventsIntro.Location = new System.Drawing.Point(6, 10); this.m_lblEventsIntro.Name = "m_lblEventsIntro"; this.m_lblEventsIntro.Size = new System.Drawing.Size(297, 13); this.m_lblEventsIntro.TabIndex = 0; this.m_lblEventsIntro.Text = "The trigger will fire when any of the events listed below occur."; // // m_lvEvents // this.m_lvEvents.FullRowSelect = true; this.m_lvEvents.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.m_lvEvents.HideSelection = false; this.m_lvEvents.Location = new System.Drawing.Point(9, 26); this.m_lvEvents.Name = "m_lvEvents"; this.m_lvEvents.ShowItemToolTips = true; this.m_lvEvents.Size = new System.Drawing.Size(463, 253); this.m_lvEvents.TabIndex = 1; this.m_lvEvents.UseCompatibleStateImageBehavior = false; this.m_lvEvents.View = System.Windows.Forms.View.Details; this.m_lvEvents.ItemActivate += new System.EventHandler(this.OnEventsItemActivate); this.m_lvEvents.SelectedIndexChanged += new System.EventHandler(this.OnEventsSelectedIndexChanged); // // m_tabConditions // this.m_tabConditions.Controls.Add(this.m_btnConditionMoveDown); this.m_tabConditions.Controls.Add(this.m_btnConditionMoveUp); this.m_tabConditions.Controls.Add(this.m_btnConditionEdit); this.m_tabConditions.Controls.Add(this.m_lblConditionsEmptyHint); this.m_tabConditions.Controls.Add(this.m_btnConditionDelete); this.m_tabConditions.Controls.Add(this.m_btnConditionAdd); this.m_tabConditions.Controls.Add(this.m_lblConditionsIntro); this.m_tabConditions.Controls.Add(this.m_lvConditions); this.m_tabConditions.Location = new System.Drawing.Point(4, 22); this.m_tabConditions.Name = "m_tabConditions"; this.m_tabConditions.Size = new System.Drawing.Size(562, 288); this.m_tabConditions.TabIndex = 2; this.m_tabConditions.Text = "Conditions"; this.m_tabConditions.UseVisualStyleBackColor = true; // // m_btnConditionMoveDown // this.m_btnConditionMoveDown.Image = global::KeePass.Properties.Resources.B16x16_1DownArrow; this.m_btnConditionMoveDown.Location = new System.Drawing.Point(478, 161); this.m_btnConditionMoveDown.Name = "m_btnConditionMoveDown"; this.m_btnConditionMoveDown.Size = new System.Drawing.Size(75, 23); this.m_btnConditionMoveDown.TabIndex = 6; this.m_btnConditionMoveDown.UseVisualStyleBackColor = true; this.m_btnConditionMoveDown.Click += new System.EventHandler(this.OnBtnConditionMoveDown); // // m_btnConditionMoveUp // this.m_btnConditionMoveUp.Image = global::KeePass.Properties.Resources.B16x16_1UpArrow; this.m_btnConditionMoveUp.Location = new System.Drawing.Point(478, 132); this.m_btnConditionMoveUp.Name = "m_btnConditionMoveUp"; this.m_btnConditionMoveUp.Size = new System.Drawing.Size(75, 23); this.m_btnConditionMoveUp.TabIndex = 5; this.m_btnConditionMoveUp.UseVisualStyleBackColor = true; this.m_btnConditionMoveUp.Click += new System.EventHandler(this.OnBtnConditionMoveUp); // // m_btnConditionEdit // this.m_btnConditionEdit.Location = new System.Drawing.Point(478, 55); this.m_btnConditionEdit.Name = "m_btnConditionEdit"; this.m_btnConditionEdit.Size = new System.Drawing.Size(75, 23); this.m_btnConditionEdit.TabIndex = 3; this.m_btnConditionEdit.Text = "&Edit..."; this.m_btnConditionEdit.UseVisualStyleBackColor = true; this.m_btnConditionEdit.Click += new System.EventHandler(this.OnConditionEdit); // // m_lblConditionsEmptyHint // this.m_lblConditionsEmptyHint.AutoSize = true; this.m_lblConditionsEmptyHint.Location = new System.Drawing.Point(6, 266); this.m_lblConditionsEmptyHint.Name = "m_lblConditionsEmptyHint"; this.m_lblConditionsEmptyHint.Size = new System.Drawing.Size(306, 13); this.m_lblConditionsEmptyHint.TabIndex = 7; this.m_lblConditionsEmptyHint.Text = "If no conditions are specified, the actions are always performed."; // // m_btnConditionDelete // this.m_btnConditionDelete.Location = new System.Drawing.Point(478, 84); this.m_btnConditionDelete.Name = "m_btnConditionDelete"; this.m_btnConditionDelete.Size = new System.Drawing.Size(75, 23); this.m_btnConditionDelete.TabIndex = 4; this.m_btnConditionDelete.Text = "&Delete"; this.m_btnConditionDelete.UseVisualStyleBackColor = true; this.m_btnConditionDelete.Click += new System.EventHandler(this.OnConditionDelete); // // m_btnConditionAdd // this.m_btnConditionAdd.Location = new System.Drawing.Point(478, 26); this.m_btnConditionAdd.Name = "m_btnConditionAdd"; this.m_btnConditionAdd.Size = new System.Drawing.Size(75, 23); this.m_btnConditionAdd.TabIndex = 2; this.m_btnConditionAdd.Text = "&Add..."; this.m_btnConditionAdd.UseVisualStyleBackColor = true; this.m_btnConditionAdd.Click += new System.EventHandler(this.OnConditionAdd); // // m_lblConditionsIntro // this.m_lblConditionsIntro.AutoSize = true; this.m_lblConditionsIntro.Location = new System.Drawing.Point(6, 10); this.m_lblConditionsIntro.Name = "m_lblConditionsIntro"; this.m_lblConditionsIntro.Size = new System.Drawing.Size(329, 13); this.m_lblConditionsIntro.TabIndex = 0; this.m_lblConditionsIntro.Text = "The trigger actions are only performed if all conditions below are met."; // // m_lvConditions // this.m_lvConditions.FullRowSelect = true; this.m_lvConditions.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.m_lvConditions.HideSelection = false; this.m_lvConditions.Location = new System.Drawing.Point(9, 26); this.m_lvConditions.Name = "m_lvConditions"; this.m_lvConditions.ShowItemToolTips = true; this.m_lvConditions.Size = new System.Drawing.Size(463, 237); this.m_lvConditions.TabIndex = 1; this.m_lvConditions.UseCompatibleStateImageBehavior = false; this.m_lvConditions.View = System.Windows.Forms.View.Details; this.m_lvConditions.ItemActivate += new System.EventHandler(this.OnConditionsItemActivate); this.m_lvConditions.SelectedIndexChanged += new System.EventHandler(this.OnConditionsSelectedIndexChanged); // // m_tabActions // this.m_tabActions.Controls.Add(this.m_btnActionMoveDown); this.m_tabActions.Controls.Add(this.m_btnActionMoveUp); this.m_tabActions.Controls.Add(this.m_btnActionEdit); this.m_tabActions.Controls.Add(this.m_btnActionDelete); this.m_tabActions.Controls.Add(this.m_btnActionAdd); this.m_tabActions.Controls.Add(this.m_lvActions); this.m_tabActions.Controls.Add(this.m_lblActionsIntro); this.m_tabActions.Location = new System.Drawing.Point(4, 22); this.m_tabActions.Name = "m_tabActions"; this.m_tabActions.Size = new System.Drawing.Size(562, 288); this.m_tabActions.TabIndex = 3; this.m_tabActions.Text = "Actions"; this.m_tabActions.UseVisualStyleBackColor = true; // // m_btnActionMoveDown // this.m_btnActionMoveDown.Image = global::KeePass.Properties.Resources.B16x16_1DownArrow; this.m_btnActionMoveDown.Location = new System.Drawing.Point(478, 161); this.m_btnActionMoveDown.Name = "m_btnActionMoveDown"; this.m_btnActionMoveDown.Size = new System.Drawing.Size(75, 23); this.m_btnActionMoveDown.TabIndex = 6; this.m_btnActionMoveDown.UseVisualStyleBackColor = true; this.m_btnActionMoveDown.Click += new System.EventHandler(this.OnBtnActionMoveDown); // // m_btnActionMoveUp // this.m_btnActionMoveUp.Image = global::KeePass.Properties.Resources.B16x16_1UpArrow; this.m_btnActionMoveUp.Location = new System.Drawing.Point(478, 132); this.m_btnActionMoveUp.Name = "m_btnActionMoveUp"; this.m_btnActionMoveUp.Size = new System.Drawing.Size(75, 23); this.m_btnActionMoveUp.TabIndex = 5; this.m_btnActionMoveUp.UseVisualStyleBackColor = true; this.m_btnActionMoveUp.Click += new System.EventHandler(this.OnBtnActionMoveUp); // // m_btnActionEdit // this.m_btnActionEdit.Location = new System.Drawing.Point(478, 55); this.m_btnActionEdit.Name = "m_btnActionEdit"; this.m_btnActionEdit.Size = new System.Drawing.Size(75, 23); this.m_btnActionEdit.TabIndex = 3; this.m_btnActionEdit.Text = "&Edit..."; this.m_btnActionEdit.UseVisualStyleBackColor = true; this.m_btnActionEdit.Click += new System.EventHandler(this.OnActionEdit); // // m_btnActionDelete // this.m_btnActionDelete.Location = new System.Drawing.Point(478, 84); this.m_btnActionDelete.Name = "m_btnActionDelete"; this.m_btnActionDelete.Size = new System.Drawing.Size(75, 23); this.m_btnActionDelete.TabIndex = 4; this.m_btnActionDelete.Text = "&Delete"; this.m_btnActionDelete.UseVisualStyleBackColor = true; this.m_btnActionDelete.Click += new System.EventHandler(this.OnActionDelete); // // m_btnActionAdd // this.m_btnActionAdd.Location = new System.Drawing.Point(478, 26); this.m_btnActionAdd.Name = "m_btnActionAdd"; this.m_btnActionAdd.Size = new System.Drawing.Size(75, 23); this.m_btnActionAdd.TabIndex = 2; this.m_btnActionAdd.Text = "&Add..."; this.m_btnActionAdd.UseVisualStyleBackColor = true; this.m_btnActionAdd.Click += new System.EventHandler(this.OnActionAdd); // // m_lvActions // this.m_lvActions.FullRowSelect = true; this.m_lvActions.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.m_lvActions.HideSelection = false; this.m_lvActions.Location = new System.Drawing.Point(9, 26); this.m_lvActions.Name = "m_lvActions"; this.m_lvActions.ShowItemToolTips = true; this.m_lvActions.Size = new System.Drawing.Size(463, 253); this.m_lvActions.TabIndex = 1; this.m_lvActions.UseCompatibleStateImageBehavior = false; this.m_lvActions.View = System.Windows.Forms.View.Details; this.m_lvActions.ItemActivate += new System.EventHandler(this.OnActionsItemActivate); this.m_lvActions.SelectedIndexChanged += new System.EventHandler(this.OnActionsSelectedIndexChanged); // // m_lblActionsIntro // this.m_lblActionsIntro.AutoSize = true; this.m_lblActionsIntro.Location = new System.Drawing.Point(6, 10); this.m_lblActionsIntro.Name = "m_lblActionsIntro"; this.m_lblActionsIntro.Size = new System.Drawing.Size(224, 13); this.m_lblActionsIntro.TabIndex = 0; this.m_lblActionsIntro.Text = "The trigger will perform all actions listed below."; // // m_btnHelp // this.m_btnHelp.Location = new System.Drawing.Point(12, 389); this.m_btnHelp.Name = "m_btnHelp"; this.m_btnHelp.Size = new System.Drawing.Size(75, 23); this.m_btnHelp.TabIndex = 1; this.m_btnHelp.Text = "&Help"; this.m_btnHelp.UseVisualStyleBackColor = true; this.m_btnHelp.Click += new System.EventHandler(this.OnBtnHelp); // // EcasTriggerForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(594, 424); this.Controls.Add(this.m_btnHelp); this.Controls.Add(this.m_tabMain); this.Controls.Add(this.m_btnNext); this.Controls.Add(this.m_btnPrev); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.Controls.Add(this.m_bannerImage); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "EcasTriggerForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); this.m_tabMain.ResumeLayout(false); this.m_tabProps.ResumeLayout(false); this.m_tabProps.PerformLayout(); this.m_tabEvents.ResumeLayout(false); this.m_tabEvents.PerformLayout(); this.m_tabConditions.ResumeLayout(false); this.m_tabConditions.PerformLayout(); this.m_tabActions.ResumeLayout(false); this.m_tabActions.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.PictureBox m_bannerImage; private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.Button m_btnPrev; private System.Windows.Forms.Button m_btnNext; private System.Windows.Forms.TabControl m_tabMain; private System.Windows.Forms.TabPage m_tabProps; private System.Windows.Forms.TabPage m_tabEvents; private System.Windows.Forms.TabPage m_tabConditions; private System.Windows.Forms.TabPage m_tabActions; private System.Windows.Forms.CheckBox m_cbEnabled; private System.Windows.Forms.TextBox m_tbName; private System.Windows.Forms.Label m_lblTriggerName; private System.Windows.Forms.Label m_lblTriggerComments; private System.Windows.Forms.Label m_lblInitiallyOnDesc; private System.Windows.Forms.CheckBox m_cbInitiallyOn; private System.Windows.Forms.TextBox m_tbComments; private System.Windows.Forms.Label m_lblEnabledDesc; private System.Windows.Forms.CheckBox m_cbTurnOffAfterAction; private System.Windows.Forms.Label m_lblEventsIntro; private KeePass.UI.CustomListViewEx m_lvEvents; private System.Windows.Forms.Button m_btnEventDelete; private System.Windows.Forms.Button m_btnEventAdd; private KeePass.UI.CustomListViewEx m_lvConditions; private System.Windows.Forms.Label m_lblConditionsIntro; private System.Windows.Forms.Label m_lblConditionsEmptyHint; private System.Windows.Forms.Button m_btnConditionDelete; private System.Windows.Forms.Button m_btnConditionAdd; private System.Windows.Forms.Button m_btnActionDelete; private System.Windows.Forms.Button m_btnActionAdd; private KeePass.UI.CustomListViewEx m_lvActions; private System.Windows.Forms.Label m_lblActionsIntro; private System.Windows.Forms.Button m_btnEventEdit; private System.Windows.Forms.Button m_btnConditionEdit; private System.Windows.Forms.Button m_btnActionEdit; private System.Windows.Forms.Button m_btnEventMoveDown; private System.Windows.Forms.Button m_btnEventMoveUp; private System.Windows.Forms.Button m_btnConditionMoveDown; private System.Windows.Forms.Button m_btnConditionMoveUp; private System.Windows.Forms.Button m_btnActionMoveDown; private System.Windows.Forms.Button m_btnActionMoveUp; private System.Windows.Forms.Button m_btnHelp; } }KeePass/Forms/DataViewerForm.resx0000664000000000000000000001410512267251736015775 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 126, 17 17, 17 KeePass/Forms/MainForm_Functions.cs0000664000000000000000000051640712666077320016314 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Text; using System.Text.RegularExpressions; using System.Drawing; using System.Collections; using System.Collections.Generic; using System.Windows.Forms; using System.IO; using System.Threading; using System.Xml.Serialization; using System.Diagnostics; using KeePass.App; using KeePass.App.Configuration; using KeePass.DataExchange; using KeePass.Ecas; using KeePass.Native; using KeePass.Plugins; using KeePass.Resources; using KeePass.UI; using KeePass.Util; using KeePass.Util.Archive; using KeePass.Util.Spr; using KeePassLib; using KeePassLib.Collections; using KeePassLib.Cryptography; using KeePassLib.Cryptography.PasswordGenerator; using KeePassLib.Delegates; using KeePassLib.Interfaces; using KeePassLib.Keys; using KeePassLib.Utility; using KeePassLib.Security; using KeePassLib.Serialization; namespace KeePass.Forms { public partial class MainForm : Form { private DocumentManagerEx m_docMgr = new DocumentManagerEx(); private ListViewGroup m_lvgLastEntryGroup = null; private bool m_bEntryGrouping = false; private DateTime m_dtCachedNow = DateTime.Now; private bool m_bOnlyTans = false; private Font m_fontExpired = null; private Font m_fontBoldUI = null; private Font m_fontBoldTree = null; private Font m_fontItalicTree = null; private Color m_clrAlternateItemBgColor = Color.Empty; private Point m_ptLastEntriesMouseClick = new Point(0, 0); private RichTextBoxContextMenu m_ctxEntryPreviewContextMenu = new RichTextBoxContextMenu(); private DynamicMenu m_dynCustomStrings; private DynamicMenu m_dynCustomBinaries; private DynamicMenu m_dynShowEntriesByTagsEditMenu; private DynamicMenu m_dynShowEntriesByTagsToolBar; private DynamicMenu m_dynAddTag; private DynamicMenu m_dynRemoveTag; private DynamicMenu m_dynMoveToGroup; private OpenWithMenu m_dynOpenUrl; private OpenWithMenu m_dynOpenUrlToolBar; private AsyncPwListUpdate m_asyncListUpdate = null; private MruList m_mruList = new MruList(); private SessionLockNotifier m_sessionLockNotifier = new SessionLockNotifier(); private DefaultPluginHost m_pluginDefaultHost = new DefaultPluginHost(); private PluginManager m_pluginManager = new PluginManager(); private CriticalSectionEx m_csLockTimer = new CriticalSectionEx(); private int m_nLockTimerMax = 0; // private volatile int m_nLockTimerCur = 0; private long m_lLockAtTicks = long.MaxValue; private uint m_uLastInputTime = uint.MaxValue; private long m_lLockAtGlobalTicks = long.MaxValue; private bool m_bBlockQuickFind = false; private object m_objQuickFindSync = new object(); private int m_iLastQuickFindTicks = Environment.TickCount - 1500; private string m_strLastQuickSearch = string.Empty; private ToolStripSeparator m_tsSepCustomToolBar = null; private List m_vCustomToolBarButtons = new List(); private int m_nClipClearMax = 0; private int m_nClipClearCur = -1; private string m_strNeverExpiresText = string.Empty; private bool m_bSimpleTanView = true; private bool m_bShowTanIndices = true; private Image m_imgFileSaveEnabled = null; private Image m_imgFileSaveDisabled = null; // private Image m_imgFileSaveAllEnabled = null; // private Image m_imgFileSaveAllDisabled = null; private List m_lStdClientImages = null; private ImageList m_ilCurrentIcons = null; private KeyValuePair m_kvpIcoMain = new KeyValuePair(Color.Empty, null); private KeyValuePair m_kvpIcoTrayNormal = new KeyValuePair(Color.Empty, null); private KeyValuePair m_kvpIcoTrayLocked = new KeyValuePair(Color.Empty, null); private List m_lTabImages = new List(); private ImageList m_ilTabImages = null; private bool m_bIsAutoTyping = false; private bool m_bBlockTabChanged = false; private uint m_uForceSave = 0; private uint m_uUIBlocked = 0; private uint m_uUnlockAutoBlocked = 0; private MouseButtons m_mbLastTrayMouseButtons = MouseButtons.None; private uint m_uWindowStateAutoBlocked = 0; private bool m_bUpdateUIStateOnce = false; private int m_nLastSelChUpdateUIStateTicks = 0; private readonly int m_nAppMessage = Program.ApplicationMessage; private readonly int m_nTaskbarButtonMessage; private bool m_bTaskbarButtonMessage; private List> m_vLinkedToolStripItems = new List>(); private FormWindowState m_fwsLast = FormWindowState.Normal; private PwGroup m_pgActiveAtDragStart = null; private Keys m_kLastUnhandledGroupsKey = Keys.None; // private Stack
m_vRedirectActivation = new Stack(); private Size? m_oszClientLast = null; internal Size LastClientSize { get { if(m_oszClientLast.HasValue) return m_oszClientLast.Value; return this.ClientSize; } } public DocumentManagerEx DocumentManager { get { return m_docMgr; } } public PwDatabase ActiveDatabase { get { return m_docMgr.ActiveDatabase; } } public ImageList ClientIcons { get { return m_ilCurrentIcons; } } /// /// Get a reference to the main menu. /// public MenuStrip MainMenu { get { return m_menuMain; } } /// /// Get a reference to the 'Tools' popup menu in the main menu. It is /// recommended that you use this reference instead of searching the /// main menu for the 'Tools' item. /// public ToolStripMenuItem ToolsMenu { get { return m_menuTools; } } public ContextMenuStrip EntryContextMenu { get { return m_ctxPwList; } } public ContextMenuStrip GroupContextMenu { get { return m_ctxGroupList; } } public ContextMenuStrip TrayContextMenu { get { return m_ctxTray; } } public ToolStripProgressBar MainProgressBar { get { return m_statusPartProgress; } } public NotifyIcon MainNotifyIcon { get { return m_ntfTray.NotifyIcon; } } public MruList FileMruList { get { return m_mruList; } } internal PluginManager PluginManager { get { return m_pluginManager; } } private struct MainAppState { public bool FileLocked; public bool DatabaseOpened; public int EntriesCount; public int EntriesSelected; public bool EnableLockCmd; public bool NoWindowShown; public PwEntry SelectedEntry; public bool CanCopyUserName; public bool CanCopyPassword; public bool CanOpenUrl; public bool CanPerformAutoType; public bool IsOneTan; public string LockUnlock; } private enum AppCommandType { Window = 0, Lock = 1 } /// /// Check if the main window is trayed (i.e. only the tray icon is visible). /// /// Returns true, if the window is trayed. public bool IsTrayed() { return !this.Visible; } public bool IsFileLocked(PwDocument ds) { if(ds == null) ds = m_docMgr.ActiveDocument; return (ds.LockedIoc.Path.Length != 0); } public bool IsAtLeastOneFileOpen() { foreach(PwDocument ds in m_docMgr.Documents) { if(ds.Database.IsOpen) return true; } return false; } private void CleanUpEx() { m_asyncListUpdate.CancelPendingUpdatesAsync(); Program.TriggerSystem.RaiseEvent(EcasEventIDs.AppExit); MonoWorkarounds.Release(this); m_nClipClearCur = -1; if(Program.Config.Security.ClipboardClearOnExit) ClipboardUtil.ClearIfOwner(); m_pluginManager.UnloadAllPlugins(); // Before SaveConfig // Just unregister the events; no need to remove the buttons foreach(ToolStripButton tbCustom in m_vCustomToolBarButtons) tbCustom.Click -= OnCustomToolBarButtonClicked; m_vCustomToolBarButtons.Clear(); SaveConfig(); m_sessionLockNotifier.Uninstall(); HotKeyManager.UnregisterAll(); EntryTemplates.Release(); m_dynCustomBinaries.MenuClick -= this.OnEntryBinaryOpen; m_dynCustomStrings.MenuClick -= this.OnCopyCustomString; m_dynShowEntriesByTagsEditMenu.MenuClick -= this.OnShowEntriesByTag; m_dynShowEntriesByTagsToolBar.MenuClick -= this.OnShowEntriesByTag; m_dynAddTag.MenuClick -= this.OnAddEntryTag; m_dynRemoveTag.MenuClick -= this.OnRemoveEntryTag; m_dynMoveToGroup.MenuClick -= this.OnEntryMoveToGroup; m_dynOpenUrl.Destroy(); m_dynOpenUrlToolBar.Destroy(); m_ctxEntryPreviewContextMenu.Detach(); m_lvsmMenu.Release(); m_lvgmMenu.Release(); m_mruList.Release(); m_ntfTray.Visible = false; // Debug.Assert(m_vRedirectActivation.Count == 0); Debug.Assert(m_uUIBlocked == 0); Debug.Assert(m_uUnlockAutoBlocked == 0); this.Visible = false; if(m_fontBoldUI != null) { m_fontBoldUI.Dispose(); m_fontBoldUI = null; } if(m_fontBoldTree != null) { m_fontBoldTree.Dispose(); m_fontBoldTree = null; } if(m_fontItalicTree != null) { m_fontItalicTree.Dispose(); m_fontItalicTree = null; } m_asyncListUpdate.WaitAll(); m_bCleanedUp = true; } /// /// Save the current configuration. The configuration is saved using the /// cascading configuration files mechanism and the default paths are used. /// public void SaveConfig() { SaveWindowPositionAndSize(); AceMainWindow mw = Program.Config.MainWindow; mw.Layout = ((m_splitHorizontal.Orientation != Orientation.Horizontal) ? AceMainWindowLayout.SideBySide : AceMainWindowLayout.Default); UpdateColumnsEx(true); Debug.Assert(m_bSimpleTanView == m_menuViewTanSimpleList.Checked); mw.TanView.UseSimpleView = m_bSimpleTanView; Debug.Assert(m_bShowTanIndices == m_menuViewTanIndices.Checked); mw.TanView.ShowIndices = m_bShowTanIndices; Program.Config.MainWindow.ListSorting = m_pListSorter; SerializeMruList(true); // mw.ShowGridLines = m_lvEntries.GridLines; AppConfigSerializer.Save(Program.Config); } private void SaveWindowPositionAndSize() { if(!m_bFormLoadCalled) { Debug.Assert(false); return; } FormWindowState ws = this.WindowState; if(ws == FormWindowState.Normal) { Program.Config.MainWindow.X = this.Location.X; Program.Config.MainWindow.Y = this.Location.Y; Program.Config.MainWindow.Width = this.Size.Width; Program.Config.MainWindow.Height = this.Size.Height; } if((ws == FormWindowState.Normal) || (ws == FormWindowState.Maximized)) { Program.Config.MainWindow.SplitterHorizontalFrac = m_splitHorizontal.SplitterDistanceFrac; Program.Config.MainWindow.SplitterVerticalFrac = m_splitVertical.SplitterDistanceFrac; } // Program.Config.MainWindow.Maximized = (ws == FormWindowState.Maximized); } /// /// Update the UI state, i.e. enable/disable menu items depending on the state /// of the database (open, closed, locked, modified) and the selected items in /// the groups and entries list. You must call this function after all /// state-changing operations. For example, if you add a new entry the state /// needs to be updated (as the database has been modified) and you must call /// this function. /// /// If this parameter is true, the currently /// opened database is marked as modified. private void UpdateUIState(bool bSetModified) { UpdateUIState(bSetModified, null); } private void UpdateUIState(bool bSetModified, Control cOptFocus) { // For instance when running "START /MIN KeePass.exe", // we can get called before OnFormLoad has been called if(!m_bFormLoadCalled) return; NotifyUserActivity(); m_bUpdateUIStateOnce = false; // We do it now MainAppState s = GetMainAppState(); if(s.DatabaseOpened && bSetModified) m_docMgr.ActiveDatabase.Modified = true; bool bGroupsEnabled = m_tvGroups.Enabled; if(bGroupsEnabled && !s.DatabaseOpened) { m_tvGroups.BackColor = AppDefs.ColorControlDisabled; m_tvGroups.Enabled = false; } else if(!bGroupsEnabled && s.DatabaseOpened) { m_tvGroups.Enabled = true; m_tvGroups.BackColor = AppDefs.ColorControlNormal; } PwGroup pgInitial = GetSelectedGroup(); PwEntry pe = s.SelectedEntry; if(pe != null) { PwGroup pgToSel = pe.ParentGroup; if((pgToSel != null) && (pgToSel != pgInitial)) SetSelectedGroup(pgToSel, true); } m_lvEntries.Enabled = s.DatabaseOpened; m_statusPartSelected.Text = s.EntriesSelected.ToString() + " " + KPRes.OfLower + " " + s.EntriesCount.ToString() + " " + KPRes.SelectedLower; SetStatusEx(null); string strWindowText = PwDefs.ShortProductName; string strNtfText = PwDefs.ShortProductName; int qSmall = UIUtil.GetSmallIconSize(32, 32).Width; if(s.FileLocked) { IOConnectionInfo iocLck = m_docMgr.ActiveDocument.LockedIoc; string strWindowEnd = @" [" + KPRes.Locked + @"] - " + PwDefs.ShortProductName; string strFileDesc = iocLck.Path; if(!Program.Config.MainWindow.ShowFullPathInTitle) strFileDesc = UrlUtil.GetFileName(strFileDesc); int iMaxChars = 63 - strWindowEnd.Length; if(iMaxChars >= 0) strFileDesc = WinUtil.CompactPath(strFileDesc, iMaxChars); else { Debug.Assert(false); } strWindowText = strFileDesc + strWindowEnd; string strNtfPre = PwDefs.ShortProductName + " - " + KPRes.WorkspaceLocked + MessageService.NewLine; strFileDesc = iocLck.Path; iMaxChars = 63 - strNtfPre.Length; if(iMaxChars >= 0) strFileDesc = WinUtil.CompactPath(strFileDesc, iMaxChars); else { Debug.Assert(false); } strNtfText = strNtfPre + strFileDesc; Icon icoDisposable, icoAssignable; CreateColorizedIcon(Properties.Resources.QuadLocked, qSmall, ref m_kvpIcoTrayLocked, out icoAssignable, out icoDisposable); m_ntfTray.Icon = icoAssignable; if(icoDisposable != null) icoDisposable.Dispose(); TaskbarList.SetOverlayIcon(this, Properties.Resources.LockOverlay, KPRes.Locked); } else if(s.DatabaseOpened == false) { Icon icoDisposable, icoAssignable; CreateColorizedIcon(Properties.Resources.QuadNormal, qSmall, ref m_kvpIcoTrayNormal, out icoAssignable, out icoDisposable); m_ntfTray.Icon = icoAssignable; if(icoDisposable != null) icoDisposable.Dispose(); TaskbarList.SetOverlayIcon(this, null, string.Empty); } else // Database open and not locked { string strWindowEnd = (m_docMgr.ActiveDatabase.Modified ? "* - " : " - ") + PwDefs.ShortProductName; string strFileDesc = m_docMgr.ActiveDatabase.IOConnectionInfo.Path; if(!Program.Config.MainWindow.ShowFullPathInTitle) strFileDesc = UrlUtil.GetFileName(strFileDesc); strFileDesc = WinUtil.CompactPath(strFileDesc, 63 - strWindowEnd.Length); strWindowText = strFileDesc + strWindowEnd; string strNtfPre = PwDefs.ShortProductName + MessageService.NewLine; strNtfText = strNtfPre + WinUtil.CompactPath( m_docMgr.ActiveDatabase.IOConnectionInfo.Path, 63 - strNtfPre.Length); Icon icoDisposable, icoAssignable; CreateColorizedIcon(Properties.Resources.QuadNormal, qSmall, ref m_kvpIcoTrayNormal, out icoAssignable, out icoDisposable); m_ntfTray.Icon = icoAssignable; if(icoDisposable != null) icoDisposable.Dispose(); TaskbarList.SetOverlayIcon(this, null, string.Empty); } DwmUtil.EnableWindowPeekPreview(this); bool bFormShownRaised = false; if(MonoWorkarounds.IsRequired(801414)) bFormShownRaised = MonoWorkarounds.ExchangeFormShownRaised(this, false); // Clip the strings again (it could be that a translator used // a string in KPRes that is too long to be displayed) this.Text = StrUtil.CompactString3Dots(strWindowText, 63); if(MonoWorkarounds.IsRequired(801414)) MonoWorkarounds.ExchangeFormShownRaised(this, bFormShownRaised); strNtfText = StrUtil.EncodeToolTipText(strNtfText); m_ntfTray.Text = StrUtil.CompactString3Dots(strNtfText, 63); Icon icoToDispose, icoToAssign; if(CreateColorizedIcon(Properties.Resources.KeePass, 0, ref m_kvpIcoMain, out icoToAssign, out icoToDispose)) this.Icon = icoToAssign; if(icoToDispose != null) icoToDispose.Dispose(); // Main menu UIUtil.SetEnabledFast(s.DatabaseOpened, m_menuFileSaveAs, m_menuFileSaveAsLocal, m_menuFileSaveAsUrl, m_menuFileSaveAsCopy, m_menuFileDbSettings, m_menuFileChangeMasterKey, m_menuFilePrint); m_menuFileClose.Enabled = (s.DatabaseOpened || s.FileLocked); UIUtil.SetEnabledFast(s.EnableLockCmd, m_menuFileLock, m_tbLockWorkspace); UIUtil.SetEnabledFast(s.DatabaseOpened, m_menuEditFind, m_menuToolsGeneratePwList, m_menuToolsTanWizard, m_menuEditShowAllEntries, m_menuEditShowExpired, m_menuEditShowByTag); UIUtil.SetEnabledFast(s.DatabaseOpened, m_menuToolsDbMaintenance, m_menuToolsDbDelDupEntries, m_menuToolsDbDelEmptyGroups, m_menuToolsDbDelUnusedIcons, m_menuToolsDbXmlRep); UIUtil.SetEnabledFast(s.DatabaseOpened, m_menuFileImport, m_menuFileExport); // UIUtil.SetEnabledFast((s.DatabaseOpened && // m_docMgr.ActiveDatabase.IOConnectionInfo.IsLocalFile() && // (m_docMgr.ActiveDatabase.IOConnectionInfo.Path.Length > 0)), // m_menuFileSync, m_menuFileSyncFile, m_menuFileSyncUrl); UIUtil.SetEnabledFast(s.DatabaseOpened, m_menuFileSync, m_menuFileSyncFile, m_menuFileSyncUrl, m_menuFileSyncRecent); UIUtil.SetEnabledFast(s.DatabaseOpened, m_tbFind, m_tbViewsShowAll, m_tbViewsShowExpired, m_tbEntryViewsDropDown); if(Program.Config.MainWindow.DisableSaveIfNotModified) { m_tbSaveDatabase.Image = m_imgFileSaveEnabled; UIUtil.SetEnabledFast((s.DatabaseOpened && m_docMgr.ActiveDatabase.Modified), m_menuFileSave, m_tbSaveDatabase); } else { m_tbSaveDatabase.Image = (m_docMgr.ActiveDatabase.Modified ? m_imgFileSaveEnabled : m_imgFileSaveDisabled); UIUtil.SetEnabledFast(s.DatabaseOpened, m_menuFileSave, m_tbSaveDatabase); } m_tbQuickFind.Enabled = s.DatabaseOpened; m_tbAddEntry.Enabled = s.DatabaseOpened; ShowEntryDetails(pe); m_tbCopyUserName.Enabled = s.CanCopyUserName; m_tbCopyPassword.Enabled = s.CanCopyPassword; UIUtil.SetEnabledFast(s.CanOpenUrl, m_tbOpenUrl, m_tbOpenUrlDefault, m_tbCopyUrl); m_tbAutoType.Enabled = s.CanPerformAutoType; m_menuFileLock.Text = s.LockUnlock; string strLockText = StrUtil.RemoveAccelerator(s.LockUnlock); m_tbLockWorkspace.Text = m_ctxTrayLock.Text = strLockText; m_tbLockWorkspace.ToolTipText = strLockText + " (" + m_menuFileLock.ShortcutKeyDisplayString + ")"; m_tabMain.Visible = m_tbSaveAll.Visible = m_tbCloseTab.Visible = (m_docMgr.DocumentCount > 1); m_tbCloseTab.Enabled = (s.DatabaseOpened || s.FileLocked); bool bAtLeastOneModified = false; foreach(TabPage tabPage in m_tabMain.TabPages) { PwDocument dsPage = (PwDocument)tabPage.Tag; bAtLeastOneModified |= dsPage.Database.Modified; string strTabText = tabPage.Text; if(dsPage.Database.Modified && !strTabText.EndsWith("*")) tabPage.Text += "*"; else if(!dsPage.Database.Modified && strTabText.EndsWith("*")) tabPage.Text = strTabText.Substring(0, strTabText.Length - 1); } // m_tbSaveAll.Image = (bAtLeastOneModified ? m_imgFileSaveAllEnabled : // m_imgFileSaveAllDisabled); m_tbSaveAll.Enabled = bAtLeastOneModified; UpdateUITabs(); UpdateLinkedMenuItems(); if(cOptFocus != null) ResetDefaultFocus(cOptFocus); if(this.UIStateUpdated != null) this.UIStateUpdated(this, EventArgs.Empty); Program.TriggerSystem.RaiseEvent(EcasEventIDs.UpdatedUIState); } private MainAppState UpdateUIGroupCtxState(MainAppState? stOpt) { MainAppState s = (stOpt.HasValue ? stOpt.Value : GetMainAppState()); PwGroup pg = GetSelectedGroup(); PwGroup pgParent = ((pg != null) ? pg.ParentGroup : null); PwDatabase pd = m_docMgr.ActiveDatabase; if((pd != null) && !pd.IsOpen) pd = null; // Null if closed PwGroup pgRoot = ((pd != null) ? pd.RootGroup : null); bool bChildOps = (s.DatabaseOpened && (pg != pgRoot)); bool bMoveOps = (bChildOps && (pgParent != null) && (pgParent.Groups.UCount > 1)); uint uSubGroups = 0, uSubEntries = 0; if(pg != null) pg.GetCounts(true, out uSubGroups, out uSubEntries); UIUtil.SetEnabledFast(s.DatabaseOpened, m_ctxGroupAdd, m_ctxGroupEdit, m_ctxGroupFind, m_ctxGroupPrint); UIUtil.SetEnabledFast(bChildOps, m_ctxGroupDuplicate, m_ctxGroupDelete); UIUtil.SetEnabledFast((bMoveOps && (pgParent.Groups.IndexOf(pg) >= 1)), m_ctxGroupMoveToTop, m_ctxGroupMoveOneUp); UIUtil.SetEnabledFast((bMoveOps && (pgParent.Groups.IndexOf(pg) < ((int)pgParent.Groups.UCount - 1))), m_ctxGroupMoveOneDown, m_ctxGroupMoveToBottom); m_ctxGroupSort.Enabled = ((pg != null) && (pg.Groups.UCount > 1)); m_ctxGroupSortRec.Enabled = (uSubGroups > 1); bool bShowEmpty = false, bEnableEmpty = false; if((pd != null) && pd.RecycleBinEnabled) { PwGroup pgRecycleBin = pd.RootGroup.FindGroup(pd.RecycleBinUuid, true); bShowEmpty = ((pgRecycleBin != null) && (pg == pgRecycleBin)); if(bShowEmpty) bEnableEmpty = ((pg.Groups.UCount > 0) || (pg.Entries.UCount > 0)); } m_ctxGroupEmpty.Enabled = bEnableEmpty; m_ctxGroupEmpty.Visible = bShowEmpty; return s; } private MainAppState UpdateUIEntryCtxState(MainAppState? stOpt) { MainAppState s = (stOpt.HasValue ? stOpt.Value : GetMainAppState()); m_ctxEntryAdd.Enabled = s.DatabaseOpened; m_ctxEntryEdit.Enabled = (s.EntriesSelected == 1); m_ctxEntryDelete.Enabled = (s.EntriesSelected > 0); UIUtil.SetEnabledFast((s.EntriesSelected > 0), m_ctxEntryDuplicate, m_ctxEntryMassSetIcon, m_ctxEntrySelectedPrint, m_ctxEntrySelectedExport); UIUtil.SetEnabledFast(((m_pListSorter.Column < 0) && (s.EntriesSelected > 0)), m_ctxEntryMoveToTop, m_ctxEntryMoveToBottom, m_ctxEntryMoveOneDown, m_ctxEntryMoveOneUp); m_ctxEntrySelectAll.Enabled = (s.DatabaseOpened && (s.EntriesCount > 0)); m_ctxEntryClipCopy.Enabled = (s.EntriesSelected > 0); // For the 'Paste' command, see the menu drop-down opening handler UIUtil.SetEnabledFast((s.EntriesSelected > 0), m_ctxEntryColorStandard, m_ctxEntryColorLightRed, m_ctxEntryColorLightGreen, m_ctxEntryColorLightBlue, m_ctxEntryColorLightYellow, m_ctxEntryColorCustom); m_ctxEntrySelectedNewTag.Enabled = (s.EntriesSelected > 0); PwEntry pe = s.SelectedEntry; m_ctxEntryCopyUserName.Enabled = s.CanCopyUserName; m_ctxEntryCopyPassword.Enabled = s.CanCopyPassword; m_ctxEntryUrlOpenInInternal.Enabled = ((s.EntriesSelected == 1) && (pe != null) && !pe.Strings.GetSafe(PwDefs.UrlField).IsEmpty); UIUtil.SetEnabledFast(s.CanOpenUrl, m_ctxEntryOpenUrl, m_ctxEntryCopyUrl); m_ctxEntryPerformAutoType.Enabled = s.CanPerformAutoType; bool bAttach = ((s.EntriesSelected >= 2) || ((pe != null) && (pe.Binaries.UCount > 0))); m_ctxEntrySaveAttachedFiles.Enabled = bAttach; m_ctxEntrySaveAttachedFiles.Visible = bAttach; m_ctxEntryCopyUserName.Visible = !s.IsOneTan; m_ctxEntryUrl.Visible = !s.IsOneTan; m_ctxEntryCopyPassword.Text = (s.IsOneTan ? KPRes.CopyTanMenu : KPRes.CopyPasswordMenu); return s; } private MainAppState GetMainAppState() { MainAppState s = new MainAppState(); s.FileLocked = IsFileLocked(null); s.DatabaseOpened = m_docMgr.ActiveDatabase.IsOpen; s.EntriesCount = (s.DatabaseOpened ? m_lvEntries.Items.Count : 0); s.EntriesSelected = (s.DatabaseOpened ? m_lvEntries.SelectedIndices.Count : 0); s.EnableLockCmd = (s.DatabaseOpened || s.FileLocked); s.NoWindowShown = (GlobalWindowManager.WindowCount == 0); s.SelectedEntry = GetSelectedEntry(true); s.CanCopyUserName = ((s.EntriesSelected == 1) && (s.SelectedEntry != null) && !s.SelectedEntry.Strings.GetSafe(PwDefs.UserNameField).IsEmpty); s.CanCopyPassword = ((s.EntriesSelected == 1) && (s.SelectedEntry != null) && !s.SelectedEntry.Strings.GetSafe(PwDefs.PasswordField).IsEmpty); s.CanOpenUrl = ((s.EntriesSelected > 1) || ((s.SelectedEntry != null) && !s.SelectedEntry.Strings.GetSafe(PwDefs.UrlField).IsEmpty)); s.CanPerformAutoType = ((s.EntriesSelected == 1) && (s.SelectedEntry != null) && s.SelectedEntry.GetAutoTypeEnabled()); s.IsOneTan = (s.EntriesSelected == 1); if(s.SelectedEntry != null) s.IsOneTan &= PwDefs.IsTanEntry(s.SelectedEntry); else s.IsOneTan = false; s.LockUnlock = (s.FileLocked ? KPRes.LockMenuUnlock : KPRes.LockMenuLock); return s; } /// /// Set the main status bar text. /// /// New status bar text. public void SetStatusEx(string strStatusText) { if(strStatusText == null) m_statusPartInfo.Text = KPRes.Ready; else m_statusPartInfo.Text = strStatusText; } private void UpdateClipboardStatus() { // Fix values in case the maximum time has been changed in the // options while the countdown is running if((m_nClipClearMax < 0) && (m_nClipClearCur > 0)) m_nClipClearCur = 0; else if((m_nClipClearCur > m_nClipClearMax) && (m_nClipClearMax >= 0)) m_nClipClearCur = m_nClipClearMax; if((m_nClipClearCur > 0) && (m_nClipClearMax > 0)) m_statusClipboard.Value = ((m_nClipClearCur * 100) / m_nClipClearMax); else if(m_nClipClearCur == 0) m_statusClipboard.Visible = false; } /// /// Start the clipboard countdown (set the current tick count to the /// maximum value and decrease it each second -- at 0 the clipboard /// is cleared automatically). This function is asynchronous. /// public void StartClipboardCountdown() { if(m_nClipClearMax >= 0) { m_nClipClearCur = m_nClipClearMax; m_statusClipboard.Visible = true; UpdateClipboardStatus(); string strText = KPRes.ClipboardDataCopied + " " + KPRes.ClipboardClearInSeconds + "."; strText = strText.Replace(@"[PARAM]", m_nClipClearMax.ToString()); SetStatusEx(strText); // if(m_ntfTray.Visible) // m_ntfTray.ShowBalloonTip(0, KPRes.ClipboardAutoClear, // strText, ToolTipIcon.Info); } } /// /// Gets the focused or first selected entry. /// /// Matching entry or null. public PwEntry GetSelectedEntry(bool bRequireSelected) { return GetSelectedEntry(bRequireSelected, false); } public PwEntry GetSelectedEntry(bool bRequireSelected, bool bGetLastSelectedEntry) { if(!m_docMgr.ActiveDatabase.IsOpen) return null; if(!bRequireSelected) { ListViewItem lviFocused = m_lvEntries.FocusedItem; if(lviFocused != null) return ((PwListItem)lviFocused.Tag).Entry; } ListView.SelectedListViewItemCollection coll = m_lvEntries.SelectedItems; if(coll.Count > 0) { ListViewItem lvi = coll[bGetLastSelectedEntry ? (coll.Count - 1) : 0]; if(lvi != null) return ((PwListItem)lvi.Tag).Entry; } return null; } /// /// Get all selected entries. /// /// A list of all selected entries. public PwEntry[] GetSelectedEntries() { if(!m_docMgr.ActiveDatabase.IsOpen) return null; ListView.SelectedListViewItemCollection coll = m_lvEntries.SelectedItems; if(coll == null) { Debug.Assert(false); return null; } int n = coll.Count; // Getting Count sends a message if(n == 0) return null; PwEntry[] vSelected = new PwEntry[n]; int i = 0; // LVSLVIC: one access by index requires O(n) time, thus use // enumerator instead (which requires O(1) for each element) foreach(ListViewItem lvi in coll) { if(i >= n) { Debug.Assert(false); break; } vSelected[i] = ((PwListItem)lvi.Tag).Entry; ++i; } Debug.Assert(i == n); return vSelected; } public uint GetSelectedEntriesCount() { if(!m_docMgr.ActiveDatabase.IsOpen) return 0; return (uint)m_lvEntries.SelectedIndices.Count; } public PwGroup GetSelectedEntriesAsGroup() { PwGroup pg = new PwGroup(true, true); // Copying group properties would confuse users // PwGroup pgSel = GetSelectedGroup(); // if(pgSel != null) // { // pg.Name = pgSel.Name; // pg.IconId = pgSel.IconId; // pg.CustomIconUuid = pgSel.CustomIconUuid; // } PwEntry[] vSel = GetSelectedEntries(); if((vSel == null) || (vSel.Length == 0)) return pg; foreach(PwEntry pe in vSel) pg.AddEntry(pe, false); return pg; } /// /// Get the currently selected group. The selected TreeNode is /// automatically translated to a PwGroup. /// /// Selected PwGroup. public PwGroup GetSelectedGroup() { if(!m_docMgr.ActiveDatabase.IsOpen) return null; TreeNode tn = m_tvGroups.SelectedNode; if(tn == null) return null; return (tn.Tag as PwGroup); } internal void SetSelectedGroup(PwGroup pg, bool bEnsureVisible) { if(pg == null) { Debug.Assert(false); return; } TreeNode tn = GuiFindGroup(pg.Uuid, null); if(tn != null) { m_tvGroups.SelectedNode = tn; if(bEnsureVisible) tn.EnsureVisible(); } else { Debug.Assert(false); } } /// /// Create or set an entry list view item. /// /// Entry. /// If null, a new list view item is /// created and added to the list (a group is created if necessary). /// If not null, the properties are stored in this item (no /// list view group is created and the list view item is not added /// to the list). /// Created or modified list view item. private ListViewItem SetListEntry(PwEntry pe, ListViewItem lviTarget) { if(pe == null) { Debug.Assert(false); return null; } ListViewItem lvi = (lviTarget ?? new ListViewItem()); PwListItem pli = new PwListItem(pe); if(lviTarget == null) lvi.Tag = pli; // Lock below (when adding it) else { lock(m_asyncListUpdate.ListEditSyncObject) { lvi.Tag = pli; } } int iIndexHint = ((lviTarget != null) ? lviTarget.Index : m_lvEntries.Items.Count); if(pe.Expires && (pe.ExpiryTime <= m_dtCachedNow)) { lvi.ImageIndex = (int)PwIcon.Expired; if(m_fontExpired != null) lvi.Font = m_fontExpired; } else // Not expired { // Reset font, if item was expired previously (i.e. has expired font) if((lviTarget != null) && (lvi.ImageIndex == (int)PwIcon.Expired)) lvi.Font = m_lvEntries.Font; if(pe.CustomIconUuid.Equals(PwUuid.Zero)) lvi.ImageIndex = (int)pe.IconId; else lvi.ImageIndex = (int)PwIcon.Count + m_docMgr.ActiveDatabase.GetCustomIconIndex(pe.CustomIconUuid); } if(m_bEntryGrouping && (lviTarget == null)) { PwGroup pgContainer = pe.ParentGroup; PwGroup pgLast = ((m_lvgLastEntryGroup != null) ? (PwGroup)m_lvgLastEntryGroup.Tag : null); Debug.Assert(pgContainer != null); if(pgContainer != null) { if(pgContainer != pgLast) { m_lvgLastEntryGroup = new ListViewGroup( pgContainer.GetFullPath(" - ", false)); m_lvgLastEntryGroup.Tag = pgContainer; m_lvEntries.Groups.Add(m_lvgLastEntryGroup); } lvi.Group = m_lvgLastEntryGroup; } } if(!pe.ForegroundColor.IsEmpty) lvi.ForeColor = pe.ForegroundColor; else if(lviTarget != null) lvi.ForeColor = m_lvEntries.ForeColor; else { Debug.Assert(UIUtil.ColorsEqual(lvi.ForeColor, m_lvEntries.ForeColor)); } if(!pe.BackgroundColor.IsEmpty) lvi.BackColor = pe.BackgroundColor; // else if(Program.Config.MainWindow.EntryListAlternatingBgColors && // ((m_lvEntries.Items.Count & 1) == 1)) // lvi.BackColor = m_clrAlternateItemBgColor; else if(lviTarget != null) lvi.BackColor = m_lvEntries.BackColor; else { Debug.Assert(UIUtil.ColorsEqual(lvi.BackColor, m_lvEntries.BackColor)); } bool bAsync; // m_bOnlyTans &= PwDefs.IsTanEntry(pe); if(m_bShowTanIndices && m_bOnlyTans) { string strIndex = pe.Strings.ReadSafe(PwDefs.TanIndexField); // KPF 1151 if(Program.Config.MainWindow.EntryListShowDerefData && SprEngine.MightDeref(strIndex)) strIndex = AsyncPwListUpdate.SprCompileFn(strIndex, pli); if(strIndex.Length > 0) lvi.Text = strIndex; else lvi.Text = PwDefs.TanTitle; } else { string strMain = GetEntryFieldEx(pe, 0, true, out bAsync); lvi.Text = strMain; if(bAsync) m_asyncListUpdate.Queue(strMain, pli, iIndexHint, 0, AsyncPwListUpdate.SprCompileFn); } int nColumns = m_lvEntries.Columns.Count; if(lviTarget == null) { for(int iColumn = 1; iColumn < nColumns; ++iColumn) { string strSub = GetEntryFieldEx(pe, iColumn, true, out bAsync); lvi.SubItems.Add(strSub); if(bAsync) m_asyncListUpdate.Queue(strSub, pli, iIndexHint, iColumn, AsyncPwListUpdate.SprCompileFn); } } else { int nSubItems = lvi.SubItems.Count; for(int iColumn = 1; iColumn < nColumns; ++iColumn) { string strSub = GetEntryFieldEx(pe, iColumn, true, out bAsync); if(iColumn < nSubItems) lvi.SubItems[iColumn].Text = strSub; else lvi.SubItems.Add(strSub); if(bAsync) m_asyncListUpdate.Queue(strSub, pli, iIndexHint, iColumn, AsyncPwListUpdate.SprCompileFn); } Debug.Assert(lvi.SubItems.Count == nColumns); } if(lviTarget == null) { lock(m_asyncListUpdate.ListEditSyncObject) { m_lvEntries.Items.Add(lvi); } } return lvi; } private void AddEntriesToList(PwObjectList vEntries) { if(vEntries == null) { Debug.Assert(false); return; } m_bEntryGrouping = m_lvEntries.ShowGroups; ListViewStateEx lvseCachedState = new ListViewStateEx(m_lvEntries); foreach(PwEntry pe in vEntries) { if(pe == null) { Debug.Assert(false); continue; } if(m_bEntryGrouping) { PwGroup pg = pe.ParentGroup; foreach(ListViewGroup lvg in m_lvEntries.Groups) { PwGroup pgList = (lvg.Tag as PwGroup); Debug.Assert(pgList != null); if((pgList != null) && (pg == pgList)) { m_lvgLastEntryGroup = lvg; break; } } } SetListEntry(pe, null); } Debug.Assert(lvseCachedState.CompareTo(m_lvEntries)); UIUtil.SetAlternatingBgColors(m_lvEntries, m_clrAlternateItemBgColor, Program.Config.MainWindow.EntryListAlternatingBgColors); } /// /// Update the group list. This function completely rebuilds the groups /// view. You must call this function after you made any changes to the /// groups structure of the currently opened database. /// /// If this parameter is null, the /// previously selected group is selected again (after the list was /// rebuilt). If this parameter is non-null, the specified /// PwGroup is selected after the function returns. private void UpdateGroupList(PwGroup pgNewSelected) { NotifyUserActivity(); PwDatabase pwDb = m_docMgr.ActiveDatabase; PwGroup pg = (pgNewSelected ?? GetSelectedGroup()); PwGroup pgTop = null; TreeNode tnTop = m_tvGroups.TopNode; if(tnTop != null) pgTop = (tnTop.Tag as PwGroup); m_tvGroups.BeginUpdate(); m_tvGroups.Nodes.Clear(); UpdateImageLists(false); m_dtCachedNow = DateTime.Now; TreeNode tnRoot = null; if(pwDb.RootGroup != null) { int nIconID = ((!pwDb.RootGroup.CustomIconUuid.Equals(PwUuid.Zero)) ? ((int)PwIcon.Count + pwDb.GetCustomIconIndex( pwDb.RootGroup.CustomIconUuid)) : (int)pwDb.RootGroup.IconId); if(pwDb.RootGroup.Expires && (pwDb.RootGroup.ExpiryTime <= m_dtCachedNow)) nIconID = (int)PwIcon.Expired; tnRoot = new TreeNode(pwDb.RootGroup.Name, // + GetGroupSuffixText(pwDb.RootGroup), nIconID, nIconID); tnRoot.Tag = pwDb.RootGroup; if(m_fontBoldTree != null) tnRoot.NodeFont = m_fontBoldTree; UIUtil.SetGroupNodeToolTip(tnRoot, pwDb.RootGroup); m_tvGroups.Nodes.Add(tnRoot); } TreeNode tnSelected = null; RecursiveAddGroup(tnRoot, pwDb.RootGroup, pg, ref tnSelected); if(tnRoot != null) tnRoot.Expand(); if(tnSelected != null) { // Ensure all parent tree nodes are expanded List lParents = new List(); TreeNode tnUp = tnSelected; while(true) { tnUp = tnUp.Parent; if(tnUp == null) break; lParents.Add(tnUp); } for(int i = (lParents.Count - 1); i >= 0; --i) lParents[i].Expand(); m_tvGroups.SelectedNode = tnSelected; } else if(m_tvGroups.Nodes.Count > 0) m_tvGroups.SelectedNode = m_tvGroups.Nodes[0]; // Restore view *after* changing the selection if(pgTop != null) SetTopVisibleGroup(pgTop.Uuid); m_tvGroups.EndUpdate(); } /// /// Update the entries list. This function completely rebuilds the entries /// list. You must call this function after you've made any changes to /// the entries of the currently selected group. Note that if you only /// made small changes (like editing an existing entry), the /// RefreshEntriesList function could be a better choice, as it only /// updates currently listed items and doesn't rebuild the whole list as /// UpdateEntryList. /// /// Group whose entries should be shown. If this /// parameter is null, the entries of the currently selected group /// (groups view) are displayed, otherwise the entries of the pgSelected /// group are displayed. private void UpdateEntryList(PwGroup pgSelected, bool bOnlyUpdateCurrentlyShown) { NotifyUserActivity(); UpdateImageLists(false); PwEntry peTop = GetTopEntry(), peFocused = GetSelectedEntry(false); PwEntry[] vSelected = GetSelectedEntries(); int iScrollY = NativeMethods.GetScrollPosY(m_lvEntries.Handle); bool bSubEntries = Program.Config.MainWindow.ShowEntriesOfSubGroups; PwGroup pg = (pgSelected ?? GetSelectedGroup()); if(bOnlyUpdateCurrentlyShown) { Debug.Assert(pgSelected == null); pg = GetCurrentEntries(); } PwObjectList pwlSource = ((pg != null) ? pg.GetEntries(bSubEntries) : new PwObjectList()); m_bOnlyTans = ListContainsOnlyTans(pwlSource); m_asyncListUpdate.CancelPendingUpdatesAsync(); m_lvEntries.BeginUpdate(); lock(m_asyncListUpdate.ListEditSyncObject) { m_lvEntries.Items.Clear(); } m_lvEntries.Groups.Clear(); m_lvgLastEntryGroup = null; // m_bEntryGrouping = (((pg != null) ? pg.IsVirtual : false) || bSubEntries); m_bEntryGrouping = bSubEntries; if(pg != null) { PwDatabase pd = m_docMgr.ActiveDatabase; if(bOnlyUpdateCurrentlyShown && !m_lvEntries.ShowGroups && EntryUtil.EntriesHaveSameParent(pwlSource) && pd.IsOpen) { // Just reorder, don't enable grouping EntryUtil.ReorderEntriesAsInDatabase(pwlSource, pd); peTop = null; // Don't scroll to previous top item } else m_bEntryGrouping |= pg.IsVirtual; } int iLg = Program.Config.MainWindow.ListGrouping; if((iLg & (int)AceListGrouping.Primary) == (int)AceListGrouping.On) m_bEntryGrouping = true; else if((iLg & (int)AceListGrouping.Primary) == (int)AceListGrouping.Off) m_bEntryGrouping = false; m_lvEntries.ShowGroups = m_bEntryGrouping; int nTopIndex = -1; ListViewItem lviFocused = null; m_dtCachedNow = DateTime.Now; ListViewStateEx lvseCachedState = new ListViewStateEx(m_lvEntries); if(pg != null) { foreach(PwEntry pe in pwlSource) { ListViewItem lvi = SetListEntry(pe, null); if(vSelected != null) { if(Array.IndexOf(vSelected, pe) >= 0) lvi.Selected = true; } if(pe == peTop) nTopIndex = m_lvEntries.Items.Count - 1; if(pe == peFocused) lviFocused = lvi; } } Debug.Assert(lvseCachedState.CompareTo(m_lvEntries)); UIUtil.SetAlternatingBgColors(m_lvEntries, m_clrAlternateItemBgColor, Program.Config.MainWindow.EntryListAlternatingBgColors); Debug.Assert(m_bEntryGrouping == m_lvEntries.ShowGroups); if(UIUtil.GetGroupsEnabled(m_lvEntries)) { // Test nTopIndex to ensure we're not scrolling an unrelated list if((nTopIndex >= 0) && (iScrollY > 0)) NativeMethods.Scroll(m_lvEntries, 0, iScrollY); } else { Debug.Assert((nTopIndex != 0) || (UIUtil.GetTopVisibleItem( m_lvEntries) == 0)); // No scrolling required for item 0 if(nTopIndex > 0) UIUtil.SetTopVisibleItem(m_lvEntries, nTopIndex, false); } if(lviFocused != null) UIUtil.SetFocusedItem(m_lvEntries, lviFocused, false); View view = m_lvEntries.View; if(m_bSimpleTanView) { if(m_lvEntries.Items.Count == 0) m_lvEntries.View = View.Details; else if(m_bOnlyTans && (view != View.List)) { // SortPasswordList(false, 0, false); m_lvEntries.View = View.List; } else if(!m_bOnlyTans && (view != View.Details)) m_lvEntries.View = View.Details; } else // m_bSimpleTanView == false { if(view != View.Details) m_lvEntries.View = View.Details; } m_lvEntries.EndUpdate(); // Resize columns *after* EndUpdate, otherwise sizing problem // caused by the scrollbar if(Program.Config.MainWindow.EntryListAutoResizeColumns && (m_lvEntries.View == View.Details)) UIUtil.ResizeColumns(m_lvEntries, true); } /// /// Refresh the entries list. All currently displayed entries are updated. /// If you made changes to the list that change the number of visible entries /// (like adding or removing an entry), you must use the UpdateEntryList /// function instead. /// public void RefreshEntriesList() { UpdateImageLists(false); // Important m_lvEntries.BeginUpdate(); m_dtCachedNow = DateTime.Now; foreach(ListViewItem lvi in m_lvEntries.Items) { SetListEntry(((PwListItem)lvi.Tag).Entry, lvi); } UIUtil.SetAlternatingBgColors(m_lvEntries, m_clrAlternateItemBgColor, Program.Config.MainWindow.EntryListAlternatingBgColors); m_lvEntries.EndUpdate(); } private PwEntry GetTopEntry() { PwEntry peTop = null; try { int idxTop = UIUtil.GetTopVisibleItem(m_lvEntries); if(idxTop >= 0) peTop = ((PwListItem)m_lvEntries.Items[idxTop].Tag).Entry; } catch(Exception) { Debug.Assert(false); } return peTop; } private void RecursiveAddGroup(TreeNode tnParent, PwGroup pgContainer, PwGroup pgFind, ref TreeNode tnFound) { if(pgContainer == null) return; TreeNodeCollection tnc; if(tnParent == null) tnc = m_tvGroups.Nodes; else tnc = tnParent.Nodes; PwDatabase pd = m_docMgr.ActiveDatabase; foreach(PwGroup pg in pgContainer.Groups) { bool bExpired = (pg.Expires && (pg.ExpiryTime <= m_dtCachedNow)); string strName = pg.Name; // + GetGroupSuffixText(pg); int nIconID = ((!pg.CustomIconUuid.Equals(PwUuid.Zero)) ? ((int)PwIcon.Count + pd.GetCustomIconIndex(pg.CustomIconUuid)) : (int)pg.IconId); if(bExpired) nIconID = (int)PwIcon.Expired; TreeNode tn = new TreeNode(strName, nIconID, nIconID); tn.Tag = pg; UIUtil.SetGroupNodeToolTip(tn, pg); if(pd.RecycleBinEnabled && pg.Uuid.Equals(pd.RecycleBinUuid) && (m_fontItalicTree != null)) tn.NodeFont = m_fontItalicTree; else if(bExpired && (m_fontExpired != null)) tn.NodeFont = m_fontExpired; tnc.Add(tn); RecursiveAddGroup(tn, pg, pgFind, ref tnFound); if(tn.Nodes.Count > 0) { if((tn.IsExpanded) && (!pg.IsExpanded)) tn.Collapse(); else if((!tn.IsExpanded) && (pg.IsExpanded)) tn.Expand(); } if(pg == pgFind) tnFound = tn; } } private void SortPasswordList(bool bEnableSorting, int nColumn, SortOrder? soForce, bool bUpdateEntryList) { AceColumnType colType = GetAceColumn(nColumn).Type; if(bEnableSorting) { bool bSortTimes = AceColumn.IsTimeColumn(colType); bool bSortNaturally = (colType != AceColumnType.Uuid); int nOldColumn = m_pListSorter.Column; SortOrder sortOrder = m_pListSorter.Order; if(soForce.HasValue) sortOrder = soForce.Value; else if(nColumn == nOldColumn) { if(sortOrder == SortOrder.None) sortOrder = SortOrder.Ascending; else if(sortOrder == SortOrder.Ascending) sortOrder = SortOrder.Descending; else if(sortOrder == SortOrder.Descending) sortOrder = SortOrder.None; else { Debug.Assert(false); } } else sortOrder = SortOrder.Ascending; if(sortOrder != SortOrder.None) { m_pListSorter = new ListSorter(nColumn, sortOrder, bSortNaturally, bSortTimes); m_lvEntries.ListViewItemSorter = m_pListSorter; // Workaround for XP bug if(bUpdateEntryList && !KeePassLib.Native.NativeLib.IsUnix() && WinUtil.IsWindowsXP) UpdateEntryList(null, true); // Only required on XP } else { m_pListSorter = new ListSorter(); m_lvEntries.ListViewItemSorter = null; if(bUpdateEntryList) UpdateEntryList(null, true); } } else // Disable sorting { m_pListSorter = new ListSorter(); m_lvEntries.ListViewItemSorter = null; if(bUpdateEntryList) UpdateEntryList(null, true); } UpdateColumnSortingIcons(); UIUtil.SetAlternatingBgColors(m_lvEntries, m_clrAlternateItemBgColor, Program.Config.MainWindow.EntryListAlternatingBgColors); UpdateUI(false, null, false, null, false, null, false); // KPB 1134 } private void UpdateColumnSortingIcons() { if(UIUtil.SetSortIcon(m_lvEntries, m_pListSorter.Column, m_pListSorter.Order)) return; // if(m_lvEntries.SmallImageList == null) return; if(m_pListSorter.Column < 0) { Debug.Assert(m_lvEntries.ListViewItemSorter == null); } string strAsc = " \u2191"; // Must have same length string strDsc = " \u2193"; // Must have same length if(WinUtil.IsWindows9x || WinUtil.IsWindows2000 || WinUtil.IsWindowsXP || KeePassLib.Native.NativeLib.IsUnix()) { strAsc = @" ^"; strDsc = @" v"; } else if(WinUtil.IsAtLeastWindowsVista) { strAsc = " \u25B3"; strDsc = " \u25BD"; } foreach(ColumnHeader ch in m_lvEntries.Columns) { string strCur = ch.Text, strNew = null; if(strCur.EndsWith(strAsc) || strCur.EndsWith(strDsc)) { strNew = strCur.Substring(0, strCur.Length - strAsc.Length); strCur = strNew; } if((ch.Index == m_pListSorter.Column) && (m_pListSorter.Order != SortOrder.None)) { if(m_pListSorter.Order == SortOrder.Ascending) strNew = strCur + strAsc; else if(m_pListSorter.Order == SortOrder.Descending) strNew = strCur + strDsc; } if(strNew != null) ch.Text = strNew; } } private void ShowEntryView(bool bShow) { UIUtil.SetChecked(m_menuViewShowEntryView, bShow); Program.Config.MainWindow.EntryView.Show = bShow; m_richEntryView.Visible = bShow; m_splitHorizontal.Panel2Collapsed = !bShow; } private void ShowEntryDetails(PwEntry pe) { if(pe == null) { m_richEntryView.Text = string.Empty; return; } RichTextBuilder rb = new RichTextBuilder(); AceFont af = Program.Config.UI.StandardFont; Font fontUI = (UISystemFonts.ListFont ?? m_lvEntries.Font); // string strFontFace = (af.OverrideUIDefault ? af.Family : fontUI.Name); // float fFontSize = (af.OverrideUIDefault ? af.ToFont().SizeInPoints : fontUI.SizeInPoints); if(af.OverrideUIDefault) rb.DefaultFont = af.ToFont(); else rb.DefaultFont = fontUI; string strItemSeparator = ((m_splitHorizontal.Orientation == Orientation.Horizontal) ? ", " : Environment.NewLine); // StringBuilder sb = new StringBuilder(); // StrUtil.InitRtf(sb, strFontFace, fFontSize); rb.Append(KPRes.Group, FontStyle.Bold, null, null, ":", " "); int nGroupUrlStart = KPRes.Group.Length + 2; PwGroup pg = pe.ParentGroup; if(pg != null) rb.Append(pg.Name); AceMainWindow mw = Program.Config.MainWindow; EvAppendEntryField(rb, strItemSeparator, KPRes.Title, mw.IsColumnHidden(AceColumnType.Title) ? PwDefs.HiddenPassword : pe.Strings.ReadSafe(PwDefs.TitleField), pe); EvAppendEntryField(rb, strItemSeparator, KPRes.UserName, mw.IsColumnHidden(AceColumnType.UserName) ? PwDefs.HiddenPassword : pe.Strings.ReadSafe(PwDefs.UserNameField), pe); EvAppendEntryField(rb, strItemSeparator, KPRes.Password, mw.IsColumnHidden(AceColumnType.Password) ? PwDefs.HiddenPassword : pe.Strings.ReadSafe(PwDefs.PasswordField), pe); EvAppendEntryField(rb, strItemSeparator, KPRes.Url, mw.IsColumnHidden(AceColumnType.Url) ? PwDefs.HiddenPassword : pe.Strings.ReadSafe(PwDefs.UrlField), pe); foreach(KeyValuePair kvp in pe.Strings) { if(PwDefs.IsStandardField(kvp.Key)) continue; string strCustomValue = (mw.ShouldHideCustomString(kvp.Key, kvp.Value) ? PwDefs.HiddenPassword : kvp.Value.ReadString()); EvAppendEntryField(rb, strItemSeparator, kvp.Key, strCustomValue, pe); } EvAppendEntryField(rb, strItemSeparator, KPRes.CreationTime, TimeUtil.ToDisplayString(pe.CreationTime), null); EvAppendEntryField(rb, strItemSeparator, KPRes.LastModificationTime, TimeUtil.ToDisplayString(pe.LastModificationTime), null); if((Program.Config.UI.UIFlags & (ulong)AceUIFlags.ShowLastAccessTime) != 0) EvAppendEntryField(rb, strItemSeparator, KPRes.LastAccessTime, TimeUtil.ToDisplayString(pe.LastAccessTime), null); if(pe.Expires) EvAppendEntryField(rb, strItemSeparator, KPRes.ExpiryTime, TimeUtil.ToDisplayString(pe.ExpiryTime), null); if(pe.Binaries.UCount > 0) EvAppendEntryField(rb, strItemSeparator, KPRes.Attachments, pe.Binaries.KeysToString(), null); EvAppendEntryField(rb, strItemSeparator, KPRes.UrlOverride, pe.OverrideUrl, pe); EvAppendEntryField(rb, strItemSeparator, KPRes.Tags, StrUtil.TagsToString(pe.Tags, true), null); string strNotes = (mw.IsColumnHidden(AceColumnType.Notes) ? PwDefs.HiddenPassword : pe.Strings.ReadSafe(PwDefs.NotesField)); if(strNotes.Length != 0) { rb.AppendLine(); rb.AppendLine(); KeyValuePair kvpBold = RichTextBuilder.GetStyleIdCodes( FontStyle.Bold); KeyValuePair kvpItalic = RichTextBuilder.GetStyleIdCodes( FontStyle.Italic); KeyValuePair kvpUnderline = RichTextBuilder.GetStyleIdCodes( FontStyle.Underline); strNotes = strNotes.Replace(@"", kvpBold.Key); strNotes = strNotes.Replace(@"", kvpBold.Value); strNotes = strNotes.Replace(@"", kvpItalic.Key); strNotes = strNotes.Replace(@"", kvpItalic.Value); strNotes = strNotes.Replace(@"", kvpUnderline.Key); strNotes = strNotes.Replace(@"", kvpUnderline.Value); rb.Append(strNotes); } // sb.Append("\\pard }"); // m_richEntryView.Rtf = sb.ToString(); rb.Build(m_richEntryView); UIUtil.RtfLinkifyReferences(m_richEntryView, false); Debug.Assert(m_richEntryView.HideSelection); // Flicker otherwise if(pg != null) { m_richEntryView.Select(nGroupUrlStart, pg.Name.Length); UIUtil.RtfSetSelectionLink(m_richEntryView); } // Linkify the URL string strUrl = SprEngine.Compile(pe.Strings.ReadSafe(PwDefs.UrlField), GetEntryListSprContext(pe, m_docMgr.SafeFindContainerOf(pe))); if(strUrl != PwDefs.HiddenPassword) UIUtil.RtfLinkifyText(m_richEntryView, strUrl, false); // Linkify the attachments foreach(KeyValuePair kvpBin in pe.Binaries) UIUtil.RtfLinkifyText(m_richEntryView, kvpBin.Key, false); m_richEntryView.Select(0, 0); } private void EvAppendEntryField(RichTextBuilder rb, string strItemSeparator, string strName, string strRawValue, PwEntry peSprCompile) { if(strRawValue == null) { Debug.Assert(false); return; } string strValue = strRawValue.Trim(); if(strValue.Length == 0) return; rb.Append(strName, FontStyle.Bold, strItemSeparator, null, ":", " "); if((peSprCompile == null) || !SprEngine.MightDeref(strValue)) rb.Append(strValue); else { string strCmp = SprEngine.Compile(strValue, GetEntryListSprContext(peSprCompile, m_docMgr.SafeFindContainerOf(peSprCompile))); if(strCmp == strValue) rb.Append(strValue); else { rb.Append(strCmp.Trim() + " - "); rb.Append(strValue, FontStyle.Italic); } } } private void PerformDefaultAction(object sender, EventArgs e, PwEntry pe, int colID) { Debug.Assert(pe != null); if(pe == null) return; if(this.DefaultEntryAction != null) { CancelEntryEventArgs args = new CancelEntryEventArgs(pe, colID); this.DefaultEntryAction(sender, args); if(args.Cancel) return; } bool bCnt = false; AceColumn col = GetAceColumn(colID); AceColumnType colType = col.Type; switch(colType) { case AceColumnType.Title: if(PwDefs.IsTanEntry(pe)) OnEntryCopyPassword(sender, e); else OnEntryEdit(sender, e); break; case AceColumnType.UserName: OnEntryCopyUserName(sender, e); break; case AceColumnType.Password: OnEntryCopyPassword(sender, e); break; case AceColumnType.Url: PerformDefaultUrlAction(null, false); break; case AceColumnType.Notes: bCnt = ClipboardUtil.CopyAndMinimize(pe.Strings.GetSafe( PwDefs.NotesField), true, this, pe, m_docMgr.ActiveDatabase); break; case AceColumnType.CreationTime: bCnt = ClipboardUtil.CopyAndMinimize(TimeUtil.ToDisplayString( pe.CreationTime), true, this, pe, null); break; case AceColumnType.LastModificationTime: bCnt = ClipboardUtil.CopyAndMinimize(TimeUtil.ToDisplayString( pe.LastModificationTime), true, this, pe, null); break; case AceColumnType.LastAccessTime: bCnt = ClipboardUtil.CopyAndMinimize(TimeUtil.ToDisplayString( pe.LastAccessTime), true, this, pe, null); break; case AceColumnType.ExpiryTime: if(pe.Expires) bCnt = ClipboardUtil.CopyAndMinimize(TimeUtil.ToDisplayString( pe.ExpiryTime), true, this, pe, null); else bCnt = ClipboardUtil.CopyAndMinimize(m_strNeverExpiresText, true, this, pe, null); break; case AceColumnType.Attachment: case AceColumnType.AttachmentCount: PerformDefaultAttachmentAction(); break; case AceColumnType.Uuid: bCnt = ClipboardUtil.CopyAndMinimize(pe.Uuid.ToHexString(), true, this, pe, null); break; case AceColumnType.CustomString: bCnt = ClipboardUtil.CopyAndMinimize(pe.Strings.ReadSafe( col.CustomName), true, this, pe, m_docMgr.ActiveDatabase); break; case AceColumnType.PluginExt: if(Program.ColumnProviderPool.SupportsCellAction(col.CustomName)) Program.ColumnProviderPool.PerformCellAction(col.CustomName, pe); else bCnt = ClipboardUtil.CopyAndMinimize( Program.ColumnProviderPool.GetCellData(col.CustomName, pe), true, this, pe, m_docMgr.ActiveDatabase); break; case AceColumnType.OverrideUrl: bCnt = ClipboardUtil.CopyAndMinimize(pe.OverrideUrl, true, this, pe, null); break; case AceColumnType.Tags: bCnt = ClipboardUtil.CopyAndMinimize(StrUtil.TagsToString(pe.Tags, true), true, this, pe, null); break; case AceColumnType.ExpiryTimeDateOnly: if(pe.Expires) bCnt = ClipboardUtil.CopyAndMinimize(TimeUtil.ToDisplayStringDateOnly( pe.ExpiryTime), true, this, pe, null); else bCnt = ClipboardUtil.CopyAndMinimize(m_strNeverExpiresText, true, this, pe, null); break; case AceColumnType.Size: bCnt = ClipboardUtil.CopyAndMinimize(StrUtil.FormatDataSizeKB( pe.GetSize()), true, this, pe, null); break; case AceColumnType.HistoryCount: EditSelectedEntry(true); break; default: Debug.Assert(false); break; } if(bCnt) StartClipboardCountdown(); } internal void PerformDefaultUrlAction(PwEntry[] vOptEntries, bool bForceOpen) { PwEntry[] v = (vOptEntries ?? GetSelectedEntries()); Debug.Assert(v != null); if(v == null) return; bool bCopy = Program.Config.MainWindow.CopyUrlsInsteadOfOpening; if(bForceOpen) bCopy = false; if(bCopy) { // bool bMinimize = Program.Config.MainWindow.MinimizeAfterClipboardCopy; // Form frmMin = (bMinimize ? this : null); if(ClipboardUtil.CopyAndMinimize(UrlsToString(v, true), true, this, null, null)) StartClipboardCountdown(); } else // Open { foreach(PwEntry pe in v) WinUtil.OpenEntryUrl(pe); } } private void PerformDefaultAttachmentAction() { PwEntry pe = GetSelectedEntry(false); if(pe == null) return; foreach(KeyValuePair kvp in pe.Binaries) { ExecuteBinaryOpen(pe, kvp.Key); break; } } private void ExecuteBinaryOpen(PwEntry pe, string strBinName) { EntryBinaryDataContext ctx = new EntryBinaryDataContext(); ctx.Entry = pe; ctx.Name = strBinName; DynamicMenuEventArgs args = new DynamicMenuEventArgs(strBinName, ctx); OnEntryBinaryOpen(null, args); } private string UrlsToString(PwEntry[] vEntries, bool bActive) { if((vEntries == null) || (vEntries.Length == 0)) return string.Empty; StringBuilder sb = new StringBuilder(); foreach(PwEntry pe in vEntries) { if(sb.Length > 0) sb.Append(MessageService.NewLine); PwDatabase pd = m_docMgr.SafeFindContainerOf(pe); string strUrl = pe.Strings.ReadSafe(PwDefs.UrlField); strUrl = SprEngine.Compile(strUrl, new SprContext(pe, pd, (bActive ? SprCompileFlags.All : SprCompileFlags.NonActive))); sb.Append(strUrl); } UpdateUIState(false); // SprEngine.Compile might have modified the database return sb.ToString(); } private delegate void PerformQuickFindDelegate(string strSearch, string strGroupName, bool bForceShowExpired, bool bRespectEntrySearchingDisabled); /// /// Do a quick find. All entries of the currently opened database are searched /// for a string and the results are automatically displayed in the main window. /// /// String to search the entries for. /// Group name of the group that receives the search /// results. private void PerformQuickFind(string strSearch, string strGroupName, bool bForceShowExpired, bool bRespectEntrySearchingDisabled) { Debug.Assert(strSearch != null); if(strSearch == null) return; Debug.Assert(strGroupName != null); if(strGroupName == null) return; PwGroup pg = new PwGroup(true, true, strGroupName, PwIcon.EMailSearch); pg.IsVirtual = true; SearchParameters sp = new SearchParameters(); if(strSearch.StartsWith(@"//") && strSearch.EndsWith(@"//") && (strSearch.Length > 4)) { string strRegex = strSearch.Substring(2, strSearch.Length - 4); try // Validate regular expression { Regex rx = new Regex(strRegex, RegexOptions.IgnoreCase); rx.IsMatch("ABCD"); } catch(Exception exReg) { MessageService.ShowWarning(exReg.Message); return; } sp.SearchString = strRegex; sp.RegularExpression = true; } else sp.SearchString = strSearch; sp.SearchInTitles = sp.SearchInUserNames = sp.SearchInUrls = sp.SearchInNotes = sp.SearchInOther = sp.SearchInUuids = sp.SearchInGroupNames = sp.SearchInTags = true; sp.SearchInPasswords = Program.Config.MainWindow.QuickFindSearchInPasswords; sp.RespectEntrySearchingDisabled = bRespectEntrySearchingDisabled; if(!bForceShowExpired) sp.ExcludeExpired = Program.Config.MainWindow.QuickFindExcludeExpired; SearchUtil.SetTransformation(sp, (Program.Config.MainWindow.QuickFindDerefData ? SearchUtil.StrTrfDeref : string.Empty)); StatusBarLogger sl = null; bool bBlock = (strSearch.Length > 0); // Showing all is fast if(bBlock) { Application.DoEvents(); // Finalize UI messages before blocking UIBlockInteraction(true); sl = CreateStatusBarLogger(); sl.StartLogging(KPRes.SearchingOp + "...", false); } PwDatabase pd = m_docMgr.ActiveDatabase; PwGroup pgRoot = pd.RootGroup; AutoAdjustMemProtSettings(pd, sp); pgRoot.SearchEntries(sp, pg.Entries, sl); if(bBlock) { sl.EndLogging(); UIBlockInteraction(false); } UpdateEntryList(pg, false); SelectFirstEntryIfNoneSelected(); UpdateUIState(false); ShowSearchResultsStatusMessage(bRespectEntrySearchingDisabled ? pgRoot : null); if(Program.Config.MainWindow.FocusResultsAfterQuickFind && (pg.Entries.UCount > 0)) { ResetDefaultFocus(m_lvEntries); } } private void ShowExpiredEntries(bool bOnlyIfExists, bool bShowExpired, bool bShowSoonToExpire) { if(!bShowExpired && !bShowSoonToExpire) return; PwDatabase pd = m_docMgr.ActiveDatabase; // https://sourceforge.net/p/keepass/bugs/1150/ if(!pd.IsOpen || (pd.RootGroup == null)) return; PwGroup pg = new PwGroup(true, true, string.Empty, PwIcon.Expired); pg.IsVirtual = true; const int iSkipDays = 7; DateTime dtNow = DateTime.Now; DateTime dtLimit = dtNow.Add(new TimeSpan(iSkipDays, 0, 0, 0)); EntryHandler eh = delegate(PwEntry pe) { if(!pe.Expires) return true; if(PwDefs.IsTanEntry(pe)) return true; // Exclude TANs if((bShowExpired && (pe.ExpiryTime <= dtNow)) || (bShowSoonToExpire && (pe.ExpiryTime <= dtLimit) && (pe.ExpiryTime > dtNow))) pg.AddEntry(pe, false); return true; }; pd.RootGroup.TraverseTree(TraversalMethod.PreOrder, null, eh); if((pg.Entries.UCount > 0) || !bOnlyIfExists) { UpdateEntryList(pg, false); UpdateUIState(false); ShowSearchResultsStatusMessage(null); } } public void PerformExport(PwGroup pgDataSource, bool bExportDeleted) { Debug.Assert(m_docMgr.ActiveDatabase.IsOpen); if(!m_docMgr.ActiveDatabase.IsOpen) return; if(!AppPolicy.Try(AppPolicyId.Export)) return; PwDatabase pd = m_docMgr.ActiveDatabase; if((pd == null) || !pd.IsOpen) return; if(!AppPolicy.Current.ExportNoKey) { if(!KeyUtil.ReAskKey(pd, true)) return; } PwGroup pg = (pgDataSource ?? pd.RootGroup); PwExportInfo pwInfo = new PwExportInfo(pg, pd, bExportDeleted); MessageService.ExternalIncrementMessageCount(); ShowWarningsLogger swLogger = CreateShowWarningsLogger(); swLogger.StartLogging(KPRes.ExportingStatusMsg, true); ExportUtil.Export(pwInfo, swLogger); swLogger.EndLogging(); MessageService.ExternalDecrementMessageCount(); UpdateUIState(false); } internal static IOConnectionInfo CompleteConnectionInfo(IOConnectionInfo ioc, bool bSave, bool bCanRememberCred, bool bTestConnection, bool bForceShow) { if(ioc == null) { Debug.Assert(false); return null; } if(!bForceShow && ((ioc.CredSaveMode == IOCredSaveMode.SaveCred) || ioc.IsLocalFile() || ioc.IsComplete)) return ioc.CloneDeep(); IOConnectionForm dlg = new IOConnectionForm(); dlg.InitEx(bSave, ioc, bCanRememberCred, bTestConnection); if(UIUtil.ShowDialogNotValue(dlg, DialogResult.OK)) return null; IOConnectionInfo iocResult = dlg.IOConnectionInfo; UIUtil.DestroyForm(dlg); return iocResult; } internal IOConnectionInfo CompleteConnectionInfoUsingMru(IOConnectionInfo ioc) { if(ioc == null) { Debug.Assert(false); return null; } if(ioc.Password.Length > 0) return ioc; for(uint u = 0; u < m_mruList.ItemCount; ++u) { IOConnectionInfo iocMru = (m_mruList.GetItem(u).Value as IOConnectionInfo); if(iocMru == null) { Debug.Assert(false); continue; } if(iocMru.Path.Equals(ioc.Path, StrUtil.CaseIgnoreCmp)) { if((ioc.UserName.Length > 0) && !ioc.UserName.Equals( iocMru.UserName, StrUtil.CaseIgnoreCmp)) continue; return iocMru.CloneDeep(); } } return ioc; } private sealed class OdKpfConstructParams { public IOConnectionInfo IOConnectionInfo = null; public bool CanExit = false; public bool SecureDesktopMode = false; // Must be false by default } private static Form OdKpfConstruct(object objParam) { OdKpfConstructParams p = (objParam as OdKpfConstructParams); if(p == null) { Debug.Assert(false); return null; } KeyPromptForm kpf = new KeyPromptForm(); kpf.InitEx(p.IOConnectionInfo, p.CanExit, true); kpf.SecureDesktopMode = p.SecureDesktopMode; return kpf; } private sealed class OdKpfResult { public CompositeKey Key = null; public bool ShowHelpAfterClose = false; public bool HasClosedWithExit = false; } private static object OdKpfBuildResult(Form f) { KeyPromptForm kpf = (f as KeyPromptForm); if(kpf == null) { Debug.Assert(false); return null; } OdKpfResult kpfResult = new OdKpfResult(); kpfResult.Key = kpf.CompositeKey; kpfResult.ShowHelpAfterClose = kpf.ShowHelpAfterClose; kpfResult.HasClosedWithExit = kpf.HasClosedWithExit; return kpfResult; } /// /// Open a database. This function opens the specified database and updates /// the user interface. /// public void OpenDatabase(IOConnectionInfo ioConnection, CompositeKey cmpKey, bool bOpenLocal) { if(!m_bFormLoaded && Program.Config.Application.Start.MinimizedAndLocked && (ioConnection != null) && (ioConnection.Path.Length > 0)) { PwDocument ds = m_docMgr.CreateNewDocument(true); ds.LockedIoc = ioConnection.CloneDeep(); UpdateUI(true, ds, true, null, true, null, false); return; } SaveWindowState(); // KPF 1093 IOConnectionInfo ioc; if(ioConnection == null) { if(bOpenLocal) { OpenFileDialogEx ofdDb = UIUtil.CreateOpenFileDialog(KPRes.OpenDatabaseFile, UIUtil.CreateFileTypeFilter(AppDefs.FileExtension.FileExt, KPRes.KdbxFiles, true), 1, null, false, AppDefs.FileDialogContext.Database); GlobalWindowManager.AddDialog(ofdDb.FileDialog); DialogResult dr = ofdDb.ShowDialog(); GlobalWindowManager.RemoveDialog(ofdDb.FileDialog); if(dr != DialogResult.OK) return; ioc = IOConnectionInfo.FromPath(ofdDb.FileName); } else { ioc = CompleteConnectionInfo(new IOConnectionInfo(), false, true, true, true); if(ioc == null) return; } } else // ioConnection != null { ioc = CompleteConnectionInfo(ioConnection, false, true, true, false); if(ioc == null) return; } if(!ioc.CanProbablyAccess()) { MessageService.ShowWarning(ioc.GetDisplayName(), KPRes.FileNotFoundError); return; } if(OpenDatabaseRestoreIfOpened(ioc)) return; PwDatabase pwOpenedDb = null; bool bAbort; if(cmpKey == null) { for(int iTry = 0; iTry < 3; ++iTry) { OdKpfConstructParams kpfParams = new OdKpfConstructParams(); kpfParams.IOConnectionInfo = ioc; kpfParams.CanExit = IsFileLocked(null); DialogResult dr; OdKpfResult kpfResult; if(Program.Config.Security.MasterKeyOnSecureDesktop && WinUtil.IsAtLeastWindows2000 && !KeePassLib.Native.NativeLib.IsUnix()) { kpfParams.SecureDesktopMode = true; ProtectedDialog dlg = new ProtectedDialog(OdKpfConstruct, OdKpfBuildResult); object objResult; dr = dlg.ShowDialog(out objResult, kpfParams); if(dr == DialogResult.None) { Debug.Assert(false); dr = DialogResult.Cancel; } kpfResult = (objResult as OdKpfResult); if(kpfResult == null) { Debug.Assert(false); continue; } if(kpfResult.ShowHelpAfterClose) AppHelp.ShowHelp(AppDefs.HelpTopics.KeySources, null); } else // Show dialog on normal desktop { Form dlg = OdKpfConstruct(kpfParams); dr = dlg.ShowDialog(); kpfResult = (OdKpfBuildResult(dlg) as OdKpfResult); UIUtil.DestroyForm(dlg); if(kpfResult == null) { Debug.Assert(false); continue; } } if(dr == DialogResult.Cancel) break; else if(kpfResult.HasClosedWithExit) { Debug.Assert(dr == DialogResult.Abort); OnFileExit(null, null); return; } pwOpenedDb = OpenDatabaseInternal(ioc, kpfResult.Key, out bAbort); if((pwOpenedDb != null) || bAbort) break; } } else // cmpKey != null { pwOpenedDb = OpenDatabaseInternal(ioc, cmpKey, out bAbort); } if((pwOpenedDb == null) || !pwOpenedDb.IsOpen) { UpdateUIState(false); // Reset status bar text return; } string strName = pwOpenedDb.IOConnectionInfo.GetDisplayName(); m_mruList.AddItem(strName, pwOpenedDb.IOConnectionInfo.CloneDeep()); PwDocument dsExisting = m_docMgr.FindDocument(pwOpenedDb); if(dsExisting != null) m_docMgr.ActiveDocument = dsExisting; bool bCorrectDbActive = (m_docMgr.ActiveDocument.Database == pwOpenedDb); Debug.Assert(bCorrectDbActive); // AutoEnableVisualHiding(); // SetLastUsedFile(pwOpenedDb.IOConnectionInfo); RememberKeySources(pwOpenedDb); PwGroup pgRestoreSelect = null; if(bCorrectDbActive) { m_docMgr.ActiveDocument.LockedIoc = new IOConnectionInfo(); // Clear pgRestoreSelect = pwOpenedDb.RootGroup.FindGroup( pwOpenedDb.LastSelectedGroup, true); } UpdateUI(true, null, true, pgRestoreSelect, true, null, false); if(bCorrectDbActive) { SetTopVisibleGroup(pwOpenedDb.LastTopVisibleGroup); if(pgRestoreSelect != null) SetTopVisibleEntry(pgRestoreSelect.LastTopVisibleEntry); } UpdateColumnSortingIcons(); if((pwOpenedDb.MasterKeyChangeForce >= 0) && ((DateTime.Now - pwOpenedDb.MasterKeyChanged).Days >= pwOpenedDb.MasterKeyChangeForce)) { while(true) { MessageService.ShowInfo(pwOpenedDb.IOConnectionInfo.GetDisplayName() + MessageService.NewParagraph + KPRes.MasterKeyChangeForce + MessageService.NewParagraph + KPRes.MasterKeyChangeInfo); if(ChangeMasterKey(pwOpenedDb)) { UpdateUIState(true); break; } if(!AppPolicy.Current.ChangeMasterKey) break; // Prevent endless loop } } else if((pwOpenedDb.MasterKeyChangeRec >= 0) && ((DateTime.Now - pwOpenedDb.MasterKeyChanged).Days >= pwOpenedDb.MasterKeyChangeRec)) { if(MessageService.AskYesNo(pwOpenedDb.IOConnectionInfo.GetDisplayName() + MessageService.NewParagraph + KPRes.MasterKeyChangeRec + MessageService.NewParagraph + KPRes.MasterKeyChangeQ)) UpdateUIState(ChangeMasterKey(pwOpenedDb)); } if(FixDuplicateUuids(pwOpenedDb, pwOpenedDb.IOConnectionInfo)) UpdateUIState(false); // Already marked as modified if(this.FileOpened != null) { FileOpenedEventArgs ea = new FileOpenedEventArgs(pwOpenedDb); this.FileOpened(this, ea); } Program.TriggerSystem.RaiseEvent(EcasEventIDs.OpenedDatabaseFile, EcasProperty.Database, pwOpenedDb); if(bCorrectDbActive && pwOpenedDb.IsOpen) { ShowExpiredEntries(true, Program.Config.Application.FileOpening.ShowExpiredEntries, Program.Config.Application.FileOpening.ShowSoonToExpireEntries); // Avoid view being destroyed by the unlocking routine pwOpenedDb.LastSelectedGroup = PwUuid.Zero; } if(Program.Config.MainWindow.MinimizeAfterOpeningDatabase) UIUtil.SetWindowState(this, FormWindowState.Minimized); ResetDefaultFocus(null); } private PwDatabase OpenDatabaseInternal(IOConnectionInfo ioc, CompositeKey cmpKey, out bool bAbort) { bAbort = false; PerformSelfTest(); ShowWarningsLogger swLogger = CreateShowWarningsLogger(); swLogger.StartLogging(KPRes.OpeningDatabase, true); PwDocument ds = null; string strPathNrm = ioc.Path.Trim().ToLower(); for(int iScan = 0; iScan < m_docMgr.Documents.Count; ++iScan) { if(m_docMgr.Documents[iScan].LockedIoc.Path.Trim().ToLower() == strPathNrm) ds = m_docMgr.Documents[iScan]; else if(m_docMgr.Documents[iScan].Database.IOConnectionInfo.Path == strPathNrm) ds = m_docMgr.Documents[iScan]; } PwDatabase pwDb; if(ds == null) pwDb = m_docMgr.CreateNewDocument(true).Database; else pwDb = ds.Database; Exception ex = null; try { pwDb.Open(ioc, cmpKey, swLogger); #if DEBUG byte[] pbDiskDirect = WinUtil.HashFile(ioc); Debug.Assert(MemUtil.ArraysEqual(pbDiskDirect, pwDb.HashOfFileOnDisk)); #endif } catch(Exception exLoad) { ex = exLoad; pwDb = null; } swLogger.EndLogging(); if(pwDb == null) { if(ds == null) m_docMgr.CloseDatabase(m_docMgr.ActiveDatabase); } if(ex != null) { string strMsg = MessageService.GetLoadWarningMessage( ioc.GetDisplayName(), ex, (Program.CommandLineArgs[AppDefs.CommandLineOptions.Debug] != null)); bool bShowStd = true; if(!ioc.IsLocalFile()) { VistaTaskDialog vtd = new VistaTaskDialog(); vtd.CommandLinks = false; vtd.Content = strMsg; vtd.DefaultButtonID = (int)DialogResult.Cancel; // vtd.VerificationText = KPRes.CredSpecifyDifferent; vtd.WindowTitle = PwDefs.ShortProductName; vtd.SetIcon(VtdIcon.Warning); vtd.AddButton((int)DialogResult.Cancel, KPRes.Ok, null); vtd.AddButton((int)DialogResult.Retry, KPRes.CredSpecifyDifferent, null); if(vtd.ShowDialog(this)) { bShowStd = false; // if(vtd.ResultVerificationChecked) if(vtd.Result == (int)DialogResult.Retry) { IOConnectionInfo iocNew = ioc.CloneDeep(); // iocNew.ClearCredentials(false); iocNew.CredSaveMode = IOCredSaveMode.NoSave; iocNew.IsComplete = false; // iocNew.Password = string.Empty; OpenDatabase(iocNew, null, false); bAbort = true; } } } if(bShowStd) MessageService.ShowWarning(strMsg); // MessageService.ShowLoadWarning(ioc.GetDisplayName(), ex, // (Program.CommandLineArgs[AppDefs.CommandLineOptions.Debug] != null)); } return pwDb; } private bool OpenDatabaseRestoreIfOpened(IOConnectionInfo ioc) { if(ioc == null) { Debug.Assert(false); return false; } string strPathNrm = ioc.Path.Trim().ToLower(); foreach(PwDocument ds in m_docMgr.Documents) { if(((ds.LockedIoc == null) || (ds.LockedIoc.Path.Length == 0)) && (ds.Database.IOConnectionInfo.Path.Trim().ToLower() == strPathNrm)) { MakeDocumentActive(ds); return true; } } return false; } // private void AutoEnableVisualHiding() // { // // KPF 1802197 // // Turn on visual hiding if option is selected // if(m_docMgr.ActiveDatabase.MemoryProtection.AutoEnableVisualHiding) // { // if(m_docMgr.ActiveDatabase.MemoryProtection.ProtectTitle && !m_viewHideFields.ProtectTitle) // m_menuViewHideTitles.Checked = m_viewHideFields.ProtectTitle = true; // if(m_docMgr.ActiveDatabase.MemoryProtection.ProtectUserName && !m_viewHideFields.ProtectUserName) // m_menuViewHideUserNames.Checked = m_viewHideFields.ProtectUserName = true; // if(m_docMgr.ActiveDatabase.MemoryProtection.ProtectPassword && !m_viewHideFields.ProtectPassword) // m_menuViewHidePasswords.Checked = m_viewHideFields.ProtectPassword = true; // if(m_docMgr.ActiveDatabase.MemoryProtection.ProtectUrl && !m_viewHideFields.ProtectUrl) // m_menuViewHideURLs.Checked = m_viewHideFields.ProtectUrl = true; // if(m_docMgr.ActiveDatabase.MemoryProtection.ProtectNotes && !m_viewHideFields.ProtectNotes) // m_menuViewHideNotes.Checked = m_viewHideFields.ProtectNotes = true; // } // } private TreeNode GuiFindGroup(PwUuid puSearch, TreeNode tnContainer) { if(puSearch == null) { Debug.Assert(false); return null; } if(tnContainer == null) { if(m_tvGroups.Nodes.Count == 0) return null; tnContainer = m_tvGroups.Nodes[0]; } PwGroup pg = (tnContainer.Tag as PwGroup); if(pg != null) { if(pg.Uuid.Equals(puSearch)) return tnContainer; } else { Debug.Assert(false); } foreach(TreeNode tn in tnContainer.Nodes) { if(tn != tnContainer) { TreeNode tnRet = GuiFindGroup(puSearch, tn); if(tnRet != null) return tnRet; } else { Debug.Assert(false); } } return null; } private ListViewItem GuiFindEntry(PwUuid puSearch) { Debug.Assert(puSearch != null); if(puSearch == null) return null; foreach(ListViewItem lvi in m_lvEntries.Items) { if(((PwListItem)lvi.Tag).Entry.Uuid.Equals(puSearch)) return lvi; } return null; } private void PrintGroup(PwGroup pg) { Debug.Assert(pg != null); if(pg == null) return; if(!AppPolicy.Try(AppPolicyId.Print)) return; PwDatabase pd = m_docMgr.ActiveDatabase; if((pd == null) || !pd.IsOpen) return; if(!AppPolicy.Current.PrintNoKey) { if(!KeyUtil.ReAskKey(pd, true)) return; } PrintForm pf = new PrintForm(); pf.InitEx(pg, true, m_pListSorter.Column); UIUtil.ShowDialogAndDestroy(pf); } private ToolStripMenuItem InsertToolStripItem(ToolStripMenuItem tsContainer, ToolStripMenuItem tsTemplate, EventHandler ev, bool bPermanentlyLinkToTemplate) { ToolStripMenuItem tsmi = new ToolStripMenuItem(tsTemplate.Text, tsTemplate.Image); tsmi.Click += ev; Debug.Assert(tsTemplate.ShortcutKeys == Keys.None); // tsmi.ShortcutKeys = tsTemplate.ShortcutKeys; tsmi.ShowShortcutKeys = tsTemplate.ShowShortcutKeys; string strKeys = tsTemplate.ShortcutKeyDisplayString; if(!string.IsNullOrEmpty(strKeys)) tsmi.ShortcutKeyDisplayString = strKeys; if(bPermanentlyLinkToTemplate) m_vLinkedToolStripItems.Add(new KeyValuePair( tsTemplate, tsmi)); tsContainer.DropDownItems.Insert(0, tsmi); return tsmi; } /// /// Set the linked menu item's Enabled state to the state of their parents. /// public void UpdateLinkedMenuItems() { foreach(KeyValuePair kvp in m_vLinkedToolStripItems) kvp.Value.Enabled = kvp.Key.Enabled; } public void OnMruExecute(string strDisplayName, object oTag, ToolStripMenuItem tsmiParent) { if(tsmiParent == null) { Debug.Assert(false); return; } IOConnectionInfo ioc = (oTag as IOConnectionInfo); if(ioc == null) { Debug.Assert(false); return; } if(tsmiParent == m_menuFileRecent) OpenDatabase(ioc, null, false); else if(tsmiParent == m_menuFileSyncRecent) { PwDatabase pd = m_docMgr.ActiveDatabase; if(!pd.IsOpen) return; ioc = CompleteConnectionInfo(ioc, false, true, true, false); if(ioc == null) return; bool? b = ImportUtil.Synchronize(pd, this, ioc, false, this); UpdateUI(false, null, true, null, true, null, false); if(b.HasValue) SetStatusEx(b.Value ? KPRes.SyncSuccess : KPRes.SyncFailed); } else { Debug.Assert(false); } } public void OnMruClear() { m_mruList.Clear(); } /// /// Function to update the tray icon based on the current window state. /// public void UpdateTrayIcon() { if(m_ntfTray == null) { Debug.Assert(false); return; } // Required bool bWindowVisible = this.Visible; bool bTrayVisible = m_ntfTray.Visible; if(Program.Config.UI.TrayIcon.ShowOnlyIfTrayed) m_ntfTray.Visible = !bWindowVisible; else if(bWindowVisible && !bTrayVisible) m_ntfTray.Visible = true; } private void OnSessionLock(object sender, SessionLockEventArgs e) { // Shutdown is handled through OnFormClosing (the default // WndProc of the Form class tries to close the window when // receiving WM_QUERYENDSESSION or WM_ENDSESSION) if((e.Reason == SessionLockReason.RemoteControlChange) && Program.Config.Security.WorkspaceLocking.LockOnRemoteControlChange) { } else if(((e.Reason == SessionLockReason.Lock) || (e.Reason == SessionLockReason.Ending) || (e.Reason == SessionLockReason.UserSwitch)) && Program.Config.Security.WorkspaceLocking.LockOnSessionSwitch) { } else if((e.Reason == SessionLockReason.Suspend) && Program.Config.Security.WorkspaceLocking.LockOnSuspend) { } else return; if(IsAtLeastOneFileOpen()) LockAllDocuments(); } /// /// This function resets the internal user-inactivity timer. /// public void NotifyUserActivity() { // m_nLockTimerCur = m_nLockTimerMax; if(m_nLockTimerMax == 0) m_lLockAtTicks = long.MaxValue; else { DateTime utcLockAt = DateTime.UtcNow; utcLockAt = utcLockAt.AddSeconds((double)m_nLockTimerMax); m_lLockAtTicks = utcLockAt.Ticks; } if(this.UserActivityPost != null) this.UserActivityPost(null, EventArgs.Empty); } private void UpdateGlobalLockTimeout(DateTime utcNow) { uint uLockGlobal = Program.Config.Security.WorkspaceLocking.LockAfterGlobalTime; if(uLockGlobal == 0) { m_lLockAtGlobalTicks = long.MaxValue; return; } uint? uLastInputTime = NativeMethods.GetLastInputTime(); if(!uLastInputTime.HasValue) return; if(uLastInputTime.Value != m_uLastInputTime) { DateTime utcLockAt = utcNow.AddSeconds((double)uLockGlobal); m_lLockAtGlobalTicks = utcLockAt.Ticks; m_uLastInputTime = uLastInputTime.Value; } } /// /// Move selected entries. /// /// Must be -2/2 to move to top/bottom, -1/1 to /// move one up/down. private void MoveSelectedEntries(int iMove) { // Don't allow moving when sorting is enabled if((m_pListSorter.Column >= 0) && (m_pListSorter.Order != SortOrder.None)) return; PwEntry[] vEntries = GetSelectedEntries(); Debug.Assert(vEntries != null); if(vEntries == null) return; Debug.Assert(vEntries.Length > 0); if(vEntries.Length == 0) return; PwGroup pg = vEntries[0].ParentGroup; if(pg == null) { Debug.Assert(false); return; } foreach(PwEntry pe in vEntries) { if(pe.ParentGroup != pg) { MessageService.ShowWarning(KPRes.CannotMoveEntriesBcsGroup); return; } } if((iMove == -1) || (iMove == 1)) pg.Entries.MoveOne(vEntries, (iMove < 0)); else if((iMove == -2) || (iMove == 2)) pg.Entries.MoveTopBottom(vEntries, (iMove < 0)); else { Debug.Assert(false); return; } DateTime dtNow = DateTime.Now; foreach(PwEntry peUpd in vEntries) peUpd.LocationChanged = dtNow; m_lvEntries.BeginUpdate(); bool bScrollOne = ((Math.Abs(iMove) == 1) && !UIUtil.GetGroupsEnabled(m_lvEntries)); int iTop = UIUtil.GetTopVisibleItem(m_lvEntries); ListView.SelectedIndexCollection lvsic = m_lvEntries.SelectedIndices; if(lvsic.Count > 0) { int pCrit = lvsic[(iMove < 0) ? 0 : (lvsic.Count - 1)]; if(iMove < 0) { if(pCrit <= iTop) bScrollOne = false; else if((pCrit - iTop) <= 3) { } // Auto-scroll else bScrollOne = false; } else // iMove > 0 { int nVisible = UIUtil.GetMaxVisibleItemCount(m_lvEntries); if(pCrit < (iTop + nVisible - 4)) bScrollOne = false; } } else { Debug.Assert(false); bScrollOne = false; } if(bScrollOne) { // if(UIUtil.GetGroupsEnabled(m_lvEntries)) // { // if(m_lvEntries.Items.Count > 0) // { // int dy = m_lvEntries.Items[0].Bounds.Height; // if(dy > 1) // NativeMethods.Scroll(m_lvEntries, 0, // iMove * (dy + (dy / 4))); // With spacing added // } // } // if(!UIUtil.GetGroupsEnabled(m_lvEntries)) // { iTop += iMove; iTop = Math.Max(Math.Min(iTop, m_lvEntries.Items.Count - 1), 0); UIUtil.SetTopVisibleItem(m_lvEntries, iTop, false); // } } UpdateEntryList(null, false); EnsureVisibleSelected(iMove > 0); // In all cases m_lvEntries.EndUpdate(); UpdateUIState(true); } public StatusBarLogger CreateStatusBarLogger() { StatusBarLogger sl = new StatusBarLogger(); sl.SetControls(m_statusPartInfo, m_statusPartProgress); return sl; } /// /// Create a new warnings logger object that logs directly into /// the main status bar until the first warning is shown (in that /// case a dialog is opened displaying the warning). /// /// Reference to the new logger object. public ShowWarningsLogger CreateShowWarningsLogger() { StatusBarLogger sl = CreateStatusBarLogger(); return new ShowWarningsLogger(sl, this); } internal void HandleHotKey(int wParam) { switch(wParam) { case AppDefs.GlobalHotKeyId.AutoType: ExecuteGlobalAutoType(); break; case AppDefs.GlobalHotKeyId.AutoTypeSelected: ExecuteEntryAutoType(); break; case AppDefs.GlobalHotKeyId.ShowWindow: bool bWndVisible = ((this.WindowState != FormWindowState.Minimized) && !IsTrayed()); EnsureVisibleForegroundWindow(true, true); if(bWndVisible && IsFileLocked(null) && IsCommandTypeInvokable( null, AppCommandType.Lock)) OnFileLock(null, EventArgs.Empty); // Unlock break; case AppDefs.GlobalHotKeyId.EntryMenu: EntryMenu.Show(); break; default: Debug.Assert(false); break; } } protected override void WndProc(ref Message m) { if(m.Msg == NativeMethods.WM_HOTKEY) { NotifyUserActivity(); HandleHotKey((int)m.WParam); } else if((m.Msg == m_nAppMessage) && (m_nAppMessage != 0)) ProcessAppMessage(m.WParam, m.LParam); else if(m.Msg == NativeMethods.WM_SYSCOMMAND) { if((m.WParam == (IntPtr)NativeMethods.SC_MINIMIZE) || (m.WParam == (IntPtr)NativeMethods.SC_MAXIMIZE)) { SaveWindowPositionAndSize(); } } else if((m.Msg == NativeMethods.WM_POWERBROADCAST) && ((m.WParam == (IntPtr)NativeMethods.PBT_APMQUERYSUSPEND) || (m.WParam == (IntPtr)NativeMethods.PBT_APMSUSPEND))) { OnSessionLock(null, new SessionLockEventArgs(SessionLockReason.Suspend)); } else if((m.Msg == m_nTaskbarButtonMessage) && m_bTaskbarButtonMessage) { m_bTaskbarButtonMessage = false; UpdateUIState(false, null); // Set overlay icon m_bTaskbarButtonMessage = true; } else if(m.Msg == DwmUtil.WM_DWMSENDICONICTHUMBNAIL) { DwmUtil.SetIconicThumbnail(this, Properties.Resources.KeePass, ref m); return; } else if(m.Msg == DwmUtil.WM_DWMSENDICONICLIVEPREVIEWBITMAP) { DwmUtil.SetIconicPreview(this, Properties.Resources.KeePass, ref m); return; } base.WndProc(ref m); } public void ProcessAppMessage(IntPtr wParam, IntPtr lParam) { NotifyUserActivity(); if(wParam == (IntPtr)Program.AppMessage.RestoreWindow) EnsureVisibleForegroundWindow(true, true); else if(wParam == (IntPtr)Program.AppMessage.Exit) OnFileExit(null, EventArgs.Empty); else if(wParam == (IntPtr)Program.AppMessage.IpcByFile) IpcUtilEx.ProcessGlobalMessage(lParam.ToInt32(), this); else if(wParam == (IntPtr)Program.AppMessage.AutoType) ExecuteGlobalAutoType(); else if(wParam == (IntPtr)Program.AppMessage.Lock) LockAllDocuments(); else if(wParam == (IntPtr)Program.AppMessage.Unlock) { if(IsFileLocked(null)) { EnsureVisibleForegroundWindow(false, false); if(IsCommandTypeInvokable(null, AppCommandType.Lock)) OnFileLock(null, EventArgs.Empty); // Unlock } } else if(wParam == (IntPtr)Program.AppMessage.AutoTypeSelected) ExecuteEntryAutoType(); } public void ExecuteGlobalAutoType() { if(m_bIsAutoTyping) return; m_bIsAutoTyping = true; if(!IsAtLeastOneFileOpen()) { try { IntPtr hPrevWnd = NativeMethods.GetForegroundWindowHandle(); EnsureVisibleForegroundWindow(false, false); if(!IsCommandTypeInvokable(null, AppCommandType.Lock)) { m_bIsAutoTyping = false; return; } // The window restoration function above maybe // restored the window already, therefore only // try to unlock if it's locked *now* if(IsFileLocked(null)) { // https://sourceforge.net/p/keepass/bugs/1163/ bool bFirst = true; EventHandler eh = delegate(object sender, GwmWindowEventArgs e) { if(!bFirst) return; bFirst = false; GlobalWindowManager.ActivateTopWindow(); }; GlobalWindowManager.WindowAdded += eh; OnFileLock(null, EventArgs.Empty); GlobalWindowManager.WindowAdded -= eh; } NativeMethods.EnsureForegroundWindow(hPrevWnd); } catch(Exception exAT) { MessageService.ShowWarning(exAT); } } if(!IsAtLeastOneFileOpen()) { m_bIsAutoTyping = false; return; } try { AutoType.PerformGlobal(m_docMgr.GetOpenDatabases(), m_ilCurrentIcons); } catch(Exception exGlobal) { MessageService.ShowWarning(exGlobal); } m_bIsAutoTyping = false; } private void ExecuteEntryAutoType() { try { IntPtr hFG = NativeMethods.GetForegroundWindowHandle(); if(!AutoType.IsValidAutoTypeWindow(hFG, true)) return; } catch(Exception) { Debug.Assert(false); return; } PwEntry peSel = GetSelectedEntry(true); if(peSel != null) AutoType.PerformIntoCurrentWindow(peSel, m_docMgr.SafeFindContainerOf(peSel)); else { EnsureVisibleForegroundWindow(true, true); MessageService.ShowWarning(KPRes.AutoTypeSelectedNoEntry, KPRes.AutoTypeGlobalHint); } } public void EnsureVisibleForegroundWindow(bool bUntray, bool bRestoreWindow) { if(GlobalWindowManager.ActivateTopWindow()) return; if(bUntray && IsTrayed()) MinimizeToTray(false); if(bRestoreWindow && (this.WindowState == FormWindowState.Minimized)) UIUtil.SetWindowState(this, FormWindowState.Normal); UIUtil.EnsureInsideScreen(this); try { if(this.Visible) // && (this.WindowState != FormWindowState.Minimized) { this.BringToFront(); this.Activate(); } } catch(Exception) { Debug.Assert(false); } } private void SetListFont(AceFont font) { if((font != null) && font.OverrideUIDefault) { m_tvGroups.Font = font.ToFont(); m_lvEntries.Font = font.ToFont(); m_richEntryView.Font = font.ToFont(); Program.Config.UI.StandardFont = font; } else { if(UIUtil.VistaStyleListsSupported) { Font fontUI = UISystemFonts.ListFont; m_tvGroups.Font = fontUI; m_lvEntries.Font = fontUI; m_richEntryView.Font = fontUI; } Program.Config.UI.StandardFont.OverrideUIDefault = false; } m_fontExpired = FontUtil.CreateFont(m_lvEntries.Font, FontStyle.Strikeout); m_fontBoldUI = FontUtil.CreateFont(m_tabMain.Font, FontStyle.Bold); m_fontBoldTree = FontUtil.CreateFont(m_lvEntries.Font, FontStyle.Bold); m_fontItalicTree = FontUtil.CreateFont(m_lvEntries.Font, FontStyle.Italic); } private void SetSelectedEntryColor(Color clrBack) { if(m_docMgr.ActiveDatabase.IsOpen == false) return; PwEntry[] vSelected = GetSelectedEntries(); if((vSelected == null) || (vSelected.Length == 0)) return; foreach(PwEntry pe in vSelected) { pe.BackgroundColor = clrBack; pe.Touch(true, false); } RefreshEntriesList(); UpdateUIState(true); } private void OnCopyCustomString(object sender, DynamicMenuEventArgs e) { string strKey = (e.Tag as string); if(strKey == null) { Debug.Assert(false); return; } PwEntry pe = GetSelectedEntry(false); if(pe == null) { Debug.Assert(false); return; } if(ClipboardUtil.CopyAndMinimize(pe.Strings.GetSafe(strKey), true, this, pe, m_docMgr.ActiveDatabase)) StartClipboardCountdown(); } private void SetMainWindowLayout(bool bSideBySide) { if(!bSideBySide && (m_splitHorizontal.Orientation != Orientation.Horizontal)) { m_splitHorizontal.Orientation = Orientation.Horizontal; UpdateUIState(false); } else if(bSideBySide && (m_splitHorizontal.Orientation != Orientation.Vertical)) { m_splitHorizontal.Orientation = Orientation.Vertical; UpdateUIState(false); } UIUtil.SetChecked(m_menuViewWindowsStacked, !bSideBySide); UIUtil.SetChecked(m_menuViewWindowsSideBySide, bSideBySide); } private void AssignMenuShortcuts() { UIUtil.AssignShortcut(m_menuFileNew, Keys.Control | Keys.N); UIUtil.AssignShortcut(m_menuFileOpenLocal, Keys.Control | Keys.O); UIUtil.AssignShortcut(m_menuFileOpenUrl, Keys.Control | Keys.Shift | Keys.O); UIUtil.AssignShortcut(m_menuFileClose, Keys.Control | Keys.W); UIUtil.AssignShortcut(m_menuFileSave, Keys.Control | Keys.S); UIUtil.AssignShortcut(m_menuFilePrint, Keys.Control | Keys.P); UIUtil.AssignShortcut(m_menuFileSyncFile, Keys.Control | Keys.R); UIUtil.AssignShortcut(m_menuFileSyncUrl, Keys.Control | Keys.Shift | Keys.R); UIUtil.AssignShortcut(m_menuFileLock, Keys.Control | Keys.L); UIUtil.AssignShortcut(m_menuEditFind, Keys.Control | Keys.F); // UIUtil.AssignShortcut(m_menuViewHidePasswords, Keys.Control | Keys.H); // UIUtil.AssignShortcut(m_menuViewHideUserNames, Keys.Control | Keys.J); UIUtil.AssignShortcut(m_menuHelpContents, Keys.F1); UIUtil.AssignShortcut(m_ctxGroupFind, Keys.Control | Keys.Shift | Keys.F); string strCtrl = KPRes.KeyboardKeyCtrl + "+", strAlt = KPRes.KeyboardKeyAlt + "+", strShift = KPRes.KeyboardKeyShift + "+"; string strCtrlShift = strCtrl + strShift; bool bMonoMove = MonoWorkarounds.IsRequired(1245); string strMoveMod = (bMonoMove ? strCtrlShift : strAlt); m_ctxEntryCopyUserName.ShortcutKeyDisplayString = strCtrl + "B"; m_ctxEntryCopyPassword.ShortcutKeyDisplayString = strCtrl + "C"; m_ctxEntryOpenUrl.ShortcutKeyDisplayString = strCtrl + "U"; m_ctxEntryCopyUrl.ShortcutKeyDisplayString = strCtrlShift + "U"; m_ctxEntryPerformAutoType.ShortcutKeyDisplayString = strCtrl + "V"; m_ctxEntryAdd.ShortcutKeyDisplayString = strCtrl + "I"; m_ctxEntryEdit.ShortcutKeyDisplayString = KPRes.KeyboardKeyReturn; m_ctxEntryDuplicate.ShortcutKeyDisplayString = strCtrl + "K"; m_ctxEntryDelete.ShortcutKeyDisplayString = UIUtil.GetKeysName(Keys.Delete); // "Del" m_ctxEntrySelectAll.ShortcutKeyDisplayString = strCtrl + "A"; m_ctxEntryClipCopy.ShortcutKeyDisplayString = strCtrl + strShift + "C"; m_ctxEntryClipPaste.ShortcutKeyDisplayString = strCtrl + strShift + "V"; m_ctxEntryMoveToTop.ShortcutKeyDisplayString = strMoveMod + UIUtil.GetKeysName(bMonoMove ? Keys.F5 : Keys.Home); m_ctxEntryMoveOneUp.ShortcutKeyDisplayString = strMoveMod + UIUtil.GetKeysName(bMonoMove ? Keys.F6 : Keys.Up); m_ctxEntryMoveOneDown.ShortcutKeyDisplayString = strMoveMod + UIUtil.GetKeysName(bMonoMove ? Keys.F7 : Keys.Down); m_ctxEntryMoveToBottom.ShortcutKeyDisplayString = strMoveMod + UIUtil.GetKeysName(bMonoMove ? Keys.F8 : Keys.End); m_ctxGroupDelete.ShortcutKeyDisplayString = UIUtil.GetKeysName(Keys.Delete); // "Del" m_ctxGroupMoveToTop.ShortcutKeyDisplayString = strMoveMod + UIUtil.GetKeysName(bMonoMove ? Keys.F5 : Keys.Home); m_ctxGroupMoveOneUp.ShortcutKeyDisplayString = strMoveMod + UIUtil.GetKeysName(bMonoMove ? Keys.F6 : Keys.Up); m_ctxGroupMoveOneDown.ShortcutKeyDisplayString = strMoveMod + UIUtil.GetKeysName(bMonoMove ? Keys.F7 : Keys.Down); m_ctxGroupMoveToBottom.ShortcutKeyDisplayString = strMoveMod + UIUtil.GetKeysName(bMonoMove ? Keys.F8 : Keys.End); } private static void CopyMenuItemText(ToolStripMenuItem tsmiTarget, ToolStripMenuItem tsmiCopyFrom, string strTextOpt) { tsmiTarget.Text = (strTextOpt ?? tsmiCopyFrom.Text); string strSh = tsmiCopyFrom.ShortcutKeyDisplayString; if(!string.IsNullOrEmpty(strSh)) tsmiTarget.ShortcutKeyDisplayString = strSh; } // Public for plugins public void SaveDatabaseAs(PwDatabase pdToSave, IOConnectionInfo iocTo, bool bOnline, object sender, bool bCopy) { PwDatabase pd = (pdToSave ?? m_docMgr.ActiveDatabase); if(!pd.IsOpen) return; if(!AppPolicy.Try(AppPolicyId.SaveFile)) return; Guid eventGuid = Guid.NewGuid(); if(this.FileSaving != null) { FileSavingEventArgs args = new FileSavingEventArgs(true, bCopy, pd, eventGuid); this.FileSaving(sender, args); if(args.Cancel) return; } DialogResult dr; IOConnectionInfo ioc = iocTo; if((ioc != null) && (ioc.Path.Length > 0)) { dr = DialogResult.OK; // Caller (plugin) specified target file } else if(bOnline) { IOConnectionForm iocf = new IOConnectionForm(); iocf.InitEx(true, pd.IOConnectionInfo, true, true); dr = iocf.ShowDialog(); ioc = iocf.IOConnectionInfo; UIUtil.DestroyForm(iocf); } else { SaveFileDialogEx sfdDb = UIUtil.CreateSaveFileDialog(KPRes.SaveDatabase, UrlUtil.GetFileName(pd.IOConnectionInfo.Path), UIUtil.CreateFileTypeFilter(AppDefs.FileExtension.FileExt, KPRes.KdbxFiles, true), 1, AppDefs.FileExtension.FileExt, AppDefs.FileDialogContext.Database); GlobalWindowManager.AddDialog(sfdDb.FileDialog); dr = sfdDb.ShowDialog(); GlobalWindowManager.RemoveDialog(sfdDb.FileDialog); if(dr == DialogResult.OK) ioc = IOConnectionInfo.FromPath(sfdDb.FileName); } if(dr == DialogResult.OK) { EcasPropertyDictionary dProps = new EcasPropertyDictionary(); dProps.Set(EcasProperty.IOConnectionInfo, ioc); dProps.Set(EcasProperty.Database, pd); Program.TriggerSystem.RaiseEvent(EcasEventIDs.SavingDatabaseFile, dProps); UIBlockInteraction(true); ShowWarningsLogger swLogger = CreateShowWarningsLogger(); swLogger.StartLogging(KPRes.SavingDatabase, true); ShutdownBlocker sdb = new ShutdownBlocker(this.Handle, KPRes.SavingDatabase); bool bSuccess = true; try { PreSavingEx(pd, ioc); pd.SaveAs(ioc, !bCopy, swLogger); PostSavingEx(!bCopy, pd, ioc, swLogger); } catch(Exception exSaveAs) { MessageService.ShowSaveWarning(ioc, exSaveAs, true); bSuccess = false; } sdb.Dispose(); swLogger.EndLogging(); // Immediately after the UIBlockInteraction call the form might // be closed and UpdateUIState might crash, if the order of the // two methods is swapped; so first update state, then unblock UpdateUIState(false); UIBlockInteraction(false); // Calls Application.DoEvents() if(this.FileSaved != null) { FileSavedEventArgs args = new FileSavedEventArgs(bSuccess, pd, eventGuid); this.FileSaved(sender, args); } if(bSuccess) Program.TriggerSystem.RaiseEvent(EcasEventIDs.SavedDatabaseFile, dProps); } } private void PreSavingEx(PwDatabase pd, IOConnectionInfo ioc) { PerformSelfTest(); FixDuplicateUuids(pd, ioc); pd.UseFileTransactions = Program.Config.Application.UseTransactedFileWrites; pd.UseFileLocks = Program.Config.Application.UseFileLocks; // AceColumn col = Program.Config.MainWindow.FindColumn(AceColumnType.Title); // if((col != null) && !col.HideWithAsterisks) // pd.MemoryProtection.ProtectTitle = false; // col = Program.Config.MainWindow.FindColumn(AceColumnType.UserName); // if((col != null) && !col.HideWithAsterisks) // pd.MemoryProtection.ProtectUserName = false; // col = Program.Config.MainWindow.FindColumn(AceColumnType.Url); // if((col != null) && !col.HideWithAsterisks) // pd.MemoryProtection.ProtectUrl = false; // col = Program.Config.MainWindow.FindColumn(AceColumnType.Notes); // if((col != null) && !col.HideWithAsterisks) // pd.MemoryProtection.ProtectNotes = false; if(pd == m_docMgr.ActiveDatabase) SaveWindowState(); } private void PostSavingEx(bool bPrimary, PwDatabase pwDatabase, IOConnectionInfo ioc, IStatusLogger sl) { if(ioc == null) { Debug.Assert(false); return; } byte[] pbIO = null; if(Program.Config.Application.VerifyWrittenFileAfterSaving) { pbIO = WinUtil.HashFile(ioc); Debug.Assert((pbIO != null) && (pwDatabase.HashOfLastIO != null)); if(!MemUtil.ArraysEqual(pbIO, pwDatabase.HashOfLastIO)) MessageService.ShowWarning(ioc.GetDisplayName(), KPRes.FileVerifyHashFail, KPRes.FileVerifyHashFailRec); } if(bPrimary) { #if DEBUG Debug.Assert(MemUtil.ArraysEqual(pbIO, pwDatabase.HashOfFileOnDisk)); try { PwDatabase pwCheck = new PwDatabase(); pwCheck.Open(ioc.CloneDeep(), pwDatabase.MasterKey, null); Debug.Assert(MemUtil.ArraysEqual(pwDatabase.HashOfLastIO, pwCheck.HashOfLastIO)); uint uGroups1, uGroups2, uEntries1, uEntries2; pwDatabase.RootGroup.GetCounts(true, out uGroups1, out uEntries1); pwCheck.RootGroup.GetCounts(true, out uGroups2, out uEntries2); Debug.Assert((uGroups1 == uGroups2) && (uEntries1 == uEntries2)); } catch(Exception exVerify) { Debug.Assert(false, exVerify.Message); } #endif m_mruList.AddItem(ioc.GetDisplayName(), ioc.CloneDeep()); // SetLastUsedFile(ioc); // if(Program.Config.Application.CreateBackupFileAfterSaving && bHashValid) // { // try { pwDatabase.CreateBackupFile(sl); } // catch(Exception exBackup) // { // MessageService.ShowWarning(KPRes.FileBackupFailed, exBackup); // } // } // ulong uTotalBinSize = 0; // EntryHandler ehCnt = delegate(PwEntry pe) // { // foreach(KeyValuePair kvpCnt in pe.Binaries) // { // uTotalBinSize += kvpCnt.Value.Length; // } // // return true; // }; // pwDatabase.RootGroup.TraverseTree(TraversalMethod.PreOrder, null, ehCnt); } RememberKeySources(pwDatabase); WinUtil.FlushStorageBuffers(ioc.Path, true); } public bool UIFileSave(bool bForceSave) { Control cFocus = UIUtil.GetActiveControl(this); PwDatabase pd = m_docMgr.ActiveDatabase; pd.Modified = true; if(bForceSave) ++m_uForceSave; OnFileSave(null, EventArgs.Empty); if(bForceSave) --m_uForceSave; if(cFocus != null) ResetDefaultFocus(cFocus); return !pd.Modified; } public void ResetDefaultFocus(Control cExplicit) { Control c = cExplicit; if(c == null) { // QuickFind must be the first choice (see e.g. // the option FocusQuickFindOnUntray) if(m_tbQuickFind.Visible && m_tbQuickFind.Enabled) c = m_tbQuickFind.Control; else if(m_lvEntries.Visible && m_lvEntries.Enabled) c = m_lvEntries; else if(m_tvGroups.Visible && m_tvGroups.Enabled) c = m_tvGroups; else if(m_richEntryView.Visible && m_richEntryView.Enabled) c = m_richEntryView; else c = m_lvEntries; } if(this.FocusChanging != null) { FocusEventArgs ea = new FocusEventArgs(cExplicit, c); this.FocusChanging(null, ea); if(ea.Cancel) return; } UIUtil.SetFocus(c, this); } private static bool PrepareLock() { if(GlobalWindowManager.WindowCount == 0) return true; if(GlobalWindowManager.CanCloseAllWindows) { GlobalWindowManager.CloseAllWindows(); return true; } return false; } private void UpdateImageLists(bool bForce) { if(!bForce) { if(!m_docMgr.ActiveDatabase.UINeedsIconUpdate) return; m_docMgr.ActiveDatabase.UINeedsIconUpdate = false; } int cx = DpiUtil.ScaleIntX(16); int cy = DpiUtil.ScaleIntY(16); // // foreach(Image img in m_ilClientIcons.Images) imgList.Images.Add(img); // List lStdImages = new List(); // foreach(Image imgStd in m_ilClientIcons.Images) // { // // Plugins may supply DPI-scaled images by changing m_ilClientIcons // bool bStd = (imgStd.Height == 16); // lStdImages.Add(bStd ? DpiUtil.ScaleImage(imgStd, false) : imgStd); // } if(m_lStdClientImages == null) { ImageArchive arStd = new ImageArchive(); arStd.Load(DpiUtil.ScalingRequired ? Properties.Resources.Images_Client_HighRes : Properties.Resources.Images_Client_16); m_lStdClientImages = arStd.GetImages(cx, cy, true); } // ImageList imgListCustom = UIUtil.BuildImageList( // m_docMgr.ActiveDatabase.CustomIcons, cx, cy); // foreach(Image imgCustom in imgListCustom.Images) // imgList.Images.Add(imgCustom); // Breaks alpha partially List lCustom = UIUtil.BuildImageListEx( m_docMgr.ActiveDatabase.CustomIcons, cx, cy); List lAll = new List(m_lStdClientImages); lAll.AddRange(lCustom); ImageList imgList = new ImageList(); imgList.ImageSize = new Size(cx, cy); imgList.ColorDepth = ColorDepth.Depth32Bit; imgList.Images.AddRange(lAll.ToArray()); Debug.Assert(imgList.Images.Count == ((int)PwIcon.Count + lCustom.Count)); m_ilCurrentIcons = imgList; if(UIUtil.VistaStyleListsSupported) { m_tvGroups.ImageList = imgList; m_lvEntries.SmallImageList = imgList; } else { ImageList imgSafe = UIUtil.ConvertImageList24(lAll, cx, cy, AppDefs.ColorControlNormal); m_tvGroups.ImageList = imgSafe; // TreeView doesn't fully support alpha on < Vista m_lvEntries.SmallImageList = ((WinUtil.IsAtLeastWindowsVista || WinUtil.IsWindowsXP) ? imgList : imgSafe); } } private void MoveSelectedGroup(int iMove) { PwGroup pgMove = GetSelectedGroup(); if(pgMove == null) { Debug.Assert(false); return; } PwGroup pgParent = pgMove.ParentGroup; if(pgParent == null) return; PwGroup[] pgAffected = new PwGroup[] { pgMove }; if(iMove == -2) pgParent.Groups.MoveTopBottom(pgAffected, true); else if(iMove == -1) pgParent.Groups.MoveOne(pgMove, true); else if(iMove == 1) pgParent.Groups.MoveOne(pgMove, false); else if(iMove == 2) pgParent.Groups.MoveTopBottom(pgAffected, false); else { Debug.Assert(false); return; } pgMove.LocationChanged = DateTime.Now; UpdateUI(false, null, true, null, true, null, true); } private void OnEntryBinaryOpen(object sender, DynamicMenuEventArgs e) { if(e == null) { Debug.Assert(false); return; } EntryBinaryDataContext ctx = (e.Tag as EntryBinaryDataContext); if(ctx == null) { Debug.Assert(false); return; } PwEntry pe = ctx.Entry; if(pe == null) { Debug.Assert(false); return; } Debug.Assert(object.ReferenceEquals(pe, GetSelectedEntry(false))); if(string.IsNullOrEmpty(ctx.Name)) { Debug.Assert(false); return; } ProtectedBinary pb = pe.Binaries.Get(ctx.Name); if(pb == null) { Debug.Assert(false); return; } ProtectedBinary pbMod = BinaryDataUtil.Open(ctx.Name, pb, ctx.Options); if(pbMod != null) { pe.Binaries.Set(ctx.Name, pbMod); pe.Touch(true, false); RefreshEntriesList(); UpdateUIState(true); } } private void SaveWindowState() { PwDatabase pd = m_docMgr.ActiveDatabase; PwGroup pgSelected = GetSelectedGroup(); if(pgSelected != null) pd.LastSelectedGroup = new PwUuid(pgSelected.Uuid.UuidBytes); TreeNode tnTop = m_tvGroups.TopNode; if(tnTop != null) { PwGroup pgTop = (tnTop.Tag as PwGroup); if(pgTop != null) pd.LastTopVisibleGroup = new PwUuid(pgTop.Uuid.UuidBytes); else { Debug.Assert(false); } } PwEntry peTop = GetTopEntry(); if((peTop != null) && (pgSelected != null)) pgSelected.LastTopVisibleEntry = new PwUuid(peTop.Uuid.UuidBytes); } private void RestoreWindowState(PwDatabase pd) { PwGroup pgSelect = null; if(!pd.LastSelectedGroup.Equals(PwUuid.Zero)) { pgSelect = pd.RootGroup.FindGroup(pd.LastSelectedGroup, true); UpdateGroupList(pgSelect); UpdateEntryList(pgSelect, false); } SetTopVisibleGroup(pd.LastTopVisibleGroup); if(pgSelect != null) SetTopVisibleEntry(pgSelect.LastTopVisibleEntry); } private void SetTopVisibleGroup(PwUuid uuidGroup) { TreeNode tnTop = GuiFindGroup(uuidGroup, null); if(tnTop != null) m_tvGroups.TopNode = tnTop; } private void SetTopVisibleEntry(PwUuid uuidEntry) { ListViewItem lviTop = GuiFindEntry(uuidEntry); if(lviTop != null) UIUtil.SetTopVisibleItem(m_lvEntries, lviTop.Index, false); } internal void CloseDocument(PwDocument dsToClose, bool bLocking, bool bExiting, bool bUpdateUI) { PwDocument ds = (dsToClose ?? m_docMgr.ActiveDocument); PwDatabase pd = ds.Database; bool bIsActive = (ds == m_docMgr.ActiveDocument); Program.TriggerSystem.RaiseEvent(EcasEventIDs.ClosingDatabaseFilePre, EcasProperty.Database, pd); if(this.FileClosingPre != null) { FileClosingEventArgs fcea = new FileClosingEventArgs(pd); this.FileClosingPre(null, fcea); if(fcea.Cancel) return; } if(pd.Modified) // Implies pd.IsOpen { bool bInvokeSave = false; // https://sourceforge.net/p/keepass/discussion/329220/thread/c3c823c6/ bool bCanAutoSave = AppPolicy.Current.SaveFile; if(Program.Config.Application.FileClosing.AutoSave && bCanAutoSave) bInvokeSave = true; else { FileSaveOrigin fso = FileSaveOrigin.Closing; if(bLocking) fso = FileSaveOrigin.Locking; if(bExiting) fso = FileSaveOrigin.Exiting; DialogResult dr = FileDialogsEx.ShowFileSaveQuestion( pd.IOConnectionInfo.GetDisplayName(), fso); if(dr == DialogResult.Cancel) return; else if(dr == DialogResult.Yes) bInvokeSave = true; else if(dr == DialogResult.No) { } // Changes are lost } if(bInvokeSave) { SaveDatabase(pd, null); if(pd.Modified) return; } } Program.TriggerSystem.RaiseEvent(EcasEventIDs.ClosingDatabaseFilePost, EcasProperty.Database, pd); if(this.FileClosingPost != null) { FileClosingEventArgs fcea = new FileClosingEventArgs(pd); this.FileClosingPost(null, fcea); if(fcea.Cancel) return; } IOConnectionInfo ioClosing = pd.IOConnectionInfo.CloneDeep(); pd.Close(); if(!bLocking) m_docMgr.CloseDatabase(pd); if(bIsActive) { m_tbQuickFind.Items.Clear(); m_tbQuickFind.Text = string.Empty; if(!bLocking) { m_docMgr.ActiveDatabase.UINeedsIconUpdate = true; ResetDefaultFocus(null); } } if(bUpdateUI) UpdateUI(true, null, true, null, true, null, false); // NativeMethods.ClearIconicBitmaps(this.Handle); if(this.FileClosed != null) { FileClosedEventArgs fcea = new FileClosedEventArgs(ioClosing); this.FileClosed(null, fcea); } } // Public for plugins public void LockAllDocuments() { NotifyUserActivity(); if(Program.Config.Security.WorkspaceLocking.AlwaysExitInsteadOfLocking) { OnFileExit(null, EventArgs.Empty); return; } if(UIIsInteractionBlocked()) { Debug.Assert(false); return; } if(!PrepareLock()) return; // Unable to lock SaveWindowState(); List lDocs = m_docMgr.GetDocuments(int.MaxValue); foreach(PwDocument ds in lDocs) { PwDatabase pd = ds.Database; if(!pd.IsOpen) continue; // Nothing to lock IOConnectionInfo ioIoc = pd.IOConnectionInfo; Debug.Assert(ioIoc != null); CloseDocument(ds, true, false, false); if(pd.IsOpen) continue; ds.LockedIoc = ioIoc; } UpdateUI(true, null, true, null, true, null, false); if(Program.Config.MainWindow.MinimizeAfterLocking && !IsAtLeastOneFileOpen()) UIUtil.SetWindowState(this, FormWindowState.Minimized); } private void SaveAllDocuments() { List lDocs = m_docMgr.GetDocuments(int.MaxValue); foreach(PwDocument ds in lDocs) { PwDatabase pd = ds.Database; if(!IsFileLocked(ds) && pd.Modified) SaveDatabase(pd, null); } UpdateUI(false, null, true, null, true, null, false); } // Does not update the UI (for performance when exiting) private bool CloseAllDocuments(bool bExiting) { if(UIIsInteractionBlocked()) { Debug.Assert(false); return false; } while(true) { List lDocs = m_docMgr.GetDocuments(int.MaxValue); if(lDocs.Count <= 0) { Debug.Assert(false); break; } PwDocument ds = lDocs[0]; if((lDocs.Count == 1) && !ds.Database.IsOpen) break; CloseDocument(ds, false, bExiting, false); if(ds.Database.IsOpen) return false; } return true; } private void RecreateUITabs() { m_bBlockTabChanged = true; m_tabMain.TabPages.Clear(); m_tabMain.ImageList = null; if(m_ilTabImages != null) m_ilTabImages.Dispose(); foreach(Image img in m_lTabImages) img.Dispose(); m_lTabImages.Clear(); List lPages = new List(); for(int i = 0; i < m_docMgr.Documents.Count; ++i) { PwDocument ds = m_docMgr.Documents[i]; TabPage tb = new TabPage(); tb.Tag = ds; string strName, strTip; GetTabText(ds, out strName, out strTip); tb.Text = strName; tb.ToolTipText = strTip; if((ds == null) || (ds.Database == null) || !ds.Database.IsOpen || UIUtil.ColorsEqual(ds.Database.Color, Color.Empty)) { } else { m_lTabImages.Add(UIUtil.CreateTabColorImage(ds.Database.Color, m_tabMain)); tb.ImageIndex = m_lTabImages.Count - 1; } lPages.Add(tb); } int qSize = ((m_lTabImages.Count > 0) ? m_lTabImages[0].Height : 15); m_ilTabImages = UIUtil.BuildImageListUnscaled(m_lTabImages, qSize, qSize); m_tabMain.ImageList = m_ilTabImages; m_tabMain.TabPages.AddRange(lPages.ToArray()); // m_tabMain.SelectedTab.Font = m_fontBoldUI; m_bBlockTabChanged = false; } private void SelectUITab() { m_bBlockTabChanged = true; PwDocument dsSelect = m_docMgr.ActiveDocument; foreach(TabPage tb in m_tabMain.TabPages) { if((PwDocument)tb.Tag == dsSelect) { m_tabMain.SelectedTab = tb; break; } } m_bBlockTabChanged = false; } public void MakeDocumentActive(PwDocument ds) { if(ds == null) { Debug.Assert(false); return; } ds.Database.UINeedsIconUpdate = true; UpdateUI(false, ds, true, null, true, null, false); RestoreWindowState(ds.Database); UpdateUIState(false); } private void GetTabText(PwDocument dsInfo, out string strName, out string strTip) { if(!IsFileLocked(dsInfo)) { string strPath = dsInfo.Database.IOConnectionInfo.Path; strName = UrlUtil.GetFileName(strPath); if(dsInfo.Database.Modified) strName += "*"; strTip = StrUtil.EncodeToolTipText(strPath); if(dsInfo.Database.IsOpen) { if(dsInfo.Database.Name.Length > 0) strTip += "\r\n" + StrUtil.EncodeToolTipText( dsInfo.Database.Name); } } else // Locked { string strPath = dsInfo.LockedIoc.Path; strName = UrlUtil.GetFileName(strPath); strName += " [" + KPRes.Locked + "]"; strTip = StrUtil.EncodeToolTipText(strPath); } } private void UpdateUITabs() { foreach(TabPage tb in m_tabMain.TabPages) { PwDocument ds = (PwDocument)tb.Tag; string strName, strTip; GetTabText(ds, out strName, out strTip); tb.Text = strName; tb.ToolTipText = strTip; } } public void UpdateUI(bool bRecreateTabBar, PwDocument dsSelect, bool bUpdateGroupList, PwGroup pgSelect, bool bUpdateEntryList, PwGroup pgEntrySource, bool bSetModified) { UpdateUI(bRecreateTabBar, dsSelect, bUpdateGroupList, pgSelect, bUpdateEntryList, pgEntrySource, bSetModified, null); } public void UpdateUI(bool bRecreateTabBar, PwDocument dsSelect, bool bUpdateGroupList, PwGroup pgSelect, bool bUpdateEntryList, PwGroup pgEntrySource, bool bSetModified, Control cOptFocus) { if(bRecreateTabBar) RecreateUITabs(); if(dsSelect != null) m_docMgr.ActiveDocument = dsSelect; SelectUITab(); UpdateImageLists(false); if(bUpdateGroupList) UpdateGroupList(pgSelect); if(bUpdateEntryList) UpdateEntryList(pgEntrySource, false); else { Debug.Assert(pgEntrySource == null); } UpdateUIState(bSetModified, cOptFocus); } private void ShowSearchResultsStatusMessage(PwGroup pgSearchSkippedRoot) { const string strParam = @"{PARAM}"; StringBuilder sb = new StringBuilder(); int n = m_lvEntries.Items.Count; if(n == 1) sb.Append(KPRes.SearchEntriesFound1); else { string strFound = KPRes.SearchEntriesFound; string str = StrUtil.ReplaceCaseInsensitive(strFound, strParam, n.ToString()); if(str == strFound) { Debug.Assert(false); return; } sb.Append(str); } if(pgSearchSkippedRoot != null) { List lSkipped = pgSearchSkippedRoot.GetTopSearchSkippedGroups(); if(lSkipped.Count > 0) { sb.Append(", "); if(lSkipped.Count == 1) sb.Append(KPRes.GroupsSkipped1); else { string strSkipped = KPRes.GroupsSkipped; string str = StrUtil.ReplaceCaseInsensitive(strSkipped, strParam, lSkipped.Count.ToString()); if(str == strSkipped) { Debug.Assert(false); return; } sb.Append(str); } sb.Append(" ("); int m = Math.Min(lSkipped.Count, 3); for(int i = 0; i < m; ++i) { if(i > 0) sb.Append(", "); sb.Append('\''); sb.Append(StrUtil.EncodeMenuText(lSkipped[i].Name.Trim())); sb.Append('\''); } if(m < lSkipped.Count) sb.Append(", ..."); sb.Append(')'); } } sb.Append('.'); SetStatusEx(sb.ToString()); } private void MinimizeToTray(bool bMinimize) { if(bMinimize) // Order of Visible and ShowInTaskbar is important { // if(MonoWorkarounds.IsRequired(649266)) this.ShowInTaskbar = false; this.Visible = false; } else { this.Visible = true; // if(MonoWorkarounds.IsRequired(649266)) this.ShowInTaskbar = true; } if(!bMinimize) // Restore { // EnsureVisibleForegroundWindow(false, false); // Don't! if(this.WindowState == FormWindowState.Minimized) UIUtil.SetWindowState(this, (Program.Config.MainWindow.Maximized ? FormWindowState.Maximized : FormWindowState.Normal)); else if(IsFileLocked(null) && !UIIsAutoUnlockBlocked()) OnFileLock(null, EventArgs.Empty); // Unlock if(Program.Config.MainWindow.FocusQuickFindOnUntray) ResetDefaultFocus(null); } UpdateTrayIcon(); } private bool GetStartMinimized() { return (Program.Config.Application.Start.MinimizedAndLocked || (Program.CommandLineArgs[AppDefs.CommandLineOptions.Minimize] != null)); } private void MinimizeToTrayAtStartIfEnabled(bool bFormLoading) { if(GetStartMinimized()) { if(bFormLoading) UIUtil.SetWindowState(this, FormWindowState.Minimized); else { // The following isn't required anymore, because the // TaskbarButtonCreated message is handled // Set the lock overlay icon again (the first time // Windows ignores the call, maybe because the window // wasn't fully constructed at that time yet) // if(IsFileLocked(null)) // TaskbarList.SetOverlayIcon(this, // Properties.Resources.LockOverlay, KPRes.Locked); } if(Program.Config.MainWindow.MinimizeToTray) MinimizeToTray(true); else if(!bFormLoading) UIUtil.SetWindowState(this, FormWindowState.Minimized); } // Remove taskbar item if(Program.Config.MainWindow.MinimizeAfterOpeningDatabase && Program.Config.MainWindow.MinimizeToTray && (bFormLoading == false) && IsAtLeastOneFileOpen()) { MinimizeToTray(true); } } private void SelectFirstEntryIfNoneSelected() { if((m_lvEntries.Items.Count > 0) && (m_lvEntries.SelectedIndices.Count == 0)) UIUtil.SetFocusedItem(m_lvEntries, m_lvEntries.Items[0], true); } internal void SelectEntries(PwObjectList lEntries, bool bDeselectOthers, bool bFocusFirst) { ++m_uBlockEntrySelectionEvent; bool bFirst = true; for(int i = 0; i < m_lvEntries.Items.Count; ++i) { PwEntry pe = ((PwListItem)m_lvEntries.Items[i].Tag).Entry; if(pe == null) { Debug.Assert(false); continue; } bool bFound = false; foreach(PwEntry peFocus in lEntries) { if(pe == peFocus) { m_lvEntries.Items[i].Selected = true; if(bFirst && bFocusFirst) { UIUtil.SetFocusedItem(m_lvEntries, m_lvEntries.Items[i], false); bFirst = false; } bFound = true; break; } } if(bDeselectOthers && !bFound) m_lvEntries.Items[i].Selected = false; } --m_uBlockEntrySelectionEvent; } internal PwGroup GetCurrentEntries() { PwGroup pg = new PwGroup(true, true); pg.IsVirtual = true; if(!m_lvEntries.ShowGroups) { foreach(ListViewItem lvi in m_lvEntries.Items) pg.AddEntry(((PwListItem)lvi.Tag).Entry, false); } else // Groups { foreach(ListViewGroup lvg in m_lvEntries.Groups) { foreach(ListViewItem lvi in lvg.Items) pg.AddEntry(((PwListItem)lvi.Tag).Entry, false); } } return pg; } // Public for plugins public void EnsureVisibleEntry(PwUuid uuid) { ListViewItem lvi = GuiFindEntry(uuid); if(lvi == null) { Debug.Assert(false); return; } m_lvEntries.EnsureVisible(lvi.Index); } private void EnsureVisibleSelected(bool bLastMatchingEntry) { PwEntry pe = GetSelectedEntry(true, bLastMatchingEntry); if(pe == null) return; EnsureVisibleEntry(pe.Uuid); } private void RemoveEntriesFromList(List lEntries, bool bLockUIUpdate) { Debug.Assert(lEntries != null); if(lEntries == null) return; if(lEntries.Count == 0) return; RemoveEntriesFromList(lEntries.ToArray(), bLockUIUpdate); } private void RemoveEntriesFromList(PwEntry[] vEntries, bool bLockUIUpdate) { Debug.Assert(vEntries != null); if(vEntries == null) return; if(vEntries.Length == 0) return; if(bLockUIUpdate) m_lvEntries.BeginUpdate(); lock(m_asyncListUpdate.ListEditSyncObject) { for(int i = m_lvEntries.Items.Count - 1; i >= 0; --i) { PwEntry pe = ((PwListItem)m_lvEntries.Items[i].Tag).Entry; Debug.Assert(pe != null); if(Array.IndexOf(vEntries, pe) >= 0) m_lvEntries.Items.RemoveAt(i); } } // Refresh alternating item background colors UIUtil.SetAlternatingBgColors(m_lvEntries, m_clrAlternateItemBgColor, Program.Config.MainWindow.EntryListAlternatingBgColors); if(bLockUIUpdate) m_lvEntries.EndUpdate(); } private bool PreSaveValidate(PwDatabase pd) { if(m_uForceSave > 0) return true; byte[] pbOnDisk = WinUtil.HashFile(pd.IOConnectionInfo); if((pbOnDisk != null) && (pd.HashOfFileOnDisk != null) && !MemUtil.ArraysEqual(pbOnDisk, pd.HashOfFileOnDisk)) { DialogResult dr = DialogResult.Yes; if(!Program.Config.Application.SaveForceSync) dr = AskIfSynchronizeInstead(pd.IOConnectionInfo); if(dr == DialogResult.Yes) // Synchronize { bool? b = ImportUtil.Synchronize(pd, this, pd.IOConnectionInfo, true, this); UpdateUI(false, null, true, null, true, null, false); if(b.HasValue) SetStatusEx(b.Value ? KPRes.SyncSuccess : KPRes.SyncFailed); return false; } else if(dr == DialogResult.Cancel) return false; else { Debug.Assert(dr == DialogResult.No); } } return true; } private static DialogResult AskIfSynchronizeInstead(IOConnectionInfo ioc) { VistaTaskDialog dlg = new VistaTaskDialog(); string strText = string.Empty; if(ioc.GetDisplayName().Length > 0) strText += ioc.GetDisplayName() + MessageService.NewParagraph; strText += KPRes.FileChanged; dlg.CommandLinks = true; dlg.WindowTitle = PwDefs.ShortProductName; dlg.Content = strText; dlg.SetIcon(VtdCustomIcon.Question); dlg.MainInstruction = KPRes.OverwriteExistingFileQuestion; dlg.AddButton((int)DialogResult.Yes, KPRes.Synchronize, KPRes.FileChangedSync); dlg.AddButton((int)DialogResult.No, KPRes.Overwrite, KPRes.FileChangedOverwrite); dlg.AddButton((int)DialogResult.Cancel, KPRes.Cancel, KPRes.FileSaveQOpCancel); DialogResult dr; if(dlg.ShowDialog()) dr = (DialogResult)dlg.Result; else { strText += MessageService.NewParagraph; strText += @"[" + KPRes.Yes + @"]: " + KPRes.Synchronize + @". " + KPRes.FileChangedSync + MessageService.NewParagraph; strText += @"[" + KPRes.No + @"]: " + KPRes.Overwrite + @". " + KPRes.FileChangedOverwrite + MessageService.NewParagraph; strText += @"[" + KPRes.Cancel + @"]: " + KPRes.FileSaveQOpCancel; dr = MessageService.Ask(strText, PwDefs.ShortProductName, MessageBoxButtons.YesNoCancel); } return dr; } private void ActivateNextDocumentEx(int iDir) { int n = m_tabMain.TabPages.Count; if(n > 1) m_tabMain.SelectedIndex = ((m_tabMain.SelectedIndex + iDir + n) % n); } private bool HandleMainWindowKeyMessage(KeyEventArgs e, bool bDown) { if(e == null) { Debug.Assert(false); return false; } bool bHandled = false; // Enforce that Alt is up (e.g. on Polish systems AltGr+E, // i.e. Ctrl+Alt+E, is used to enter a character) if(e.Control && !e.Alt) { if(e.KeyCode == Keys.Tab) { if(bDown) ActivateNextDocumentEx(e.Shift ? -1 : 1); bHandled = true; } // When changing Ctrl+E, also change the tooltip of the quick search box else if(e.KeyCode == Keys.E) // Standard key for quick searches { ResetDefaultFocus(m_tbQuickFind.Control); // In both cases (RTF) bHandled = true; } else if(e.KeyCode == Keys.H) { if(bDown) ToggleFieldAsterisks(AceColumnType.Password); bHandled = true; } else if(e.KeyCode == Keys.J) { if(bDown) ToggleFieldAsterisks(AceColumnType.UserName); bHandled = true; } } else if((e.KeyCode == Keys.F3) && !e.Control && !e.Alt) { if(bDown) OnPwListFind(null, e); bHandled = true; } if(bHandled) UIUtil.SetHandled(e, true); return bHandled; } private bool HandleMoveKeyMessage(KeyEventArgs e, bool bDown, bool bEntry) { // Mono does not raise key events while Alt is down bool bMoveMod = e.Alt; if(MonoWorkarounds.IsRequired(1245)) bMoveMod = (e.Control && e.Shift); if(!bMoveMod) return false; // Mono raises key events *after* changing the selection, // thus we cannot use any navigation keys Keys[] vMove = new Keys[] { Keys.Home, Keys.Up, Keys.Down, Keys.End }; if(MonoWorkarounds.IsRequired(1245)) vMove = new Keys[] { Keys.F5, Keys.F6, Keys.F7, Keys.F8 }; int m = Array.IndexOf(vMove, e.KeyCode); if(m < 0) return false; if(bDown) { EventHandler[] vHandlers; if(bEntry) vHandlers = new EventHandler[] { OnEntryMoveToTop, OnEntryMoveOneUp, OnEntryMoveOneDown, OnEntryMoveToBottom }; else vHandlers = new EventHandler[] { OnGroupsMoveToTop, OnGroupsMoveOneUp, OnGroupsMoveOneDown, OnGroupsMoveToBottom }; vHandlers[m].Invoke(null, e); } UIUtil.SetHandled(e, true); return true; } public bool UIIsInteractionBlocked() { return (m_uUIBlocked > 0); } public void UIBlockInteraction(bool bBlock) { NotifyUserActivity(); if(bBlock) ++m_uUIBlocked; else if(m_uUIBlocked > 0) --m_uUIBlocked; else { Debug.Assert(false); } bool bNotBlocked = !UIIsInteractionBlocked(); this.Enabled = bNotBlocked; if(bNotBlocked) { try { if(!IsPrimaryControlFocused()) ResetDefaultFocus(null); } catch(Exception) { Debug.Assert(false); } } Application.DoEvents(); // Allow controls update/redraw } public bool UIIsAutoUnlockBlocked() { return (m_uUnlockAutoBlocked > 0); } public void UIBlockAutoUnlock(bool bBlock) { if(bBlock) ++m_uUnlockAutoBlocked; else if(m_uUnlockAutoBlocked > 0) --m_uUnlockAutoBlocked; else { Debug.Assert(false); } } public bool UIIsWindowStateAutoBlocked() { return (m_uWindowStateAutoBlocked > 0); } public void UIBlockWindowStateAuto(bool bBlock) { if(bBlock) ++m_uWindowStateAutoBlocked; else if(m_uWindowStateAutoBlocked > 0) --m_uWindowStateAutoBlocked; else { Debug.Assert(false); } } private static void EnsureRecycleBin(ref PwGroup pgRecycleBin, PwDatabase pdContext, ref bool bGroupListUpdateRequired) { if(pdContext == null) { Debug.Assert(false); return; } if(pgRecycleBin == pdContext.RootGroup) { Debug.Assert(false); pgRecycleBin = null; } if(pgRecycleBin == null) { pgRecycleBin = new PwGroup(true, true, KPRes.RecycleBin, PwIcon.TrashBin); pgRecycleBin.EnableAutoType = false; pgRecycleBin.EnableSearching = false; pgRecycleBin.IsExpanded = !Program.Config.Defaults.RecycleBinCollapse; pdContext.RootGroup.AddGroup(pgRecycleBin, true); pdContext.RecycleBinUuid = pgRecycleBin.Uuid; bGroupListUpdateRequired = true; } else { Debug.Assert(pgRecycleBin.Uuid.Equals(pdContext.RecycleBinUuid)); } } private void DeleteSelectedEntries() { PwEntry[] vSelected = GetSelectedEntries(); if((vSelected == null) || (vSelected.Length == 0)) return; PwDatabase pd = m_docMgr.ActiveDatabase; PwGroup pgRecycleBin = pd.RootGroup.FindGroup(pd.RecycleBinUuid, true); bool bShiftPressed = ((Control.ModifierKeys & Keys.Shift) != Keys.None); bool bAtLeastOnePermanent = false; if(pd.RecycleBinEnabled == false) bAtLeastOnePermanent = true; else if(bShiftPressed) bAtLeastOnePermanent = true; else if(pgRecycleBin == null) { } // Not permanent else { foreach(PwEntry peEnum in vSelected) { if((peEnum.ParentGroup == pgRecycleBin) || peEnum.ParentGroup.IsContainedIn(pgRecycleBin)) { bAtLeastOnePermanent = true; break; } } } bool bSingle = (vSelected.Length == 1); string strSummary = EntryUtil.CreateSummaryList(null, vSelected); if(bAtLeastOnePermanent) { VistaTaskDialog dlg = new VistaTaskDialog(); dlg.CommandLinks = false; dlg.Content = strSummary; dlg.MainInstruction = (bSingle ? KPRes.DeleteEntriesQuestionSingle : KPRes.DeleteEntriesQuestion); dlg.SetIcon(VtdCustomIcon.Question); dlg.WindowTitle = PwDefs.ShortProductName; dlg.AddButton((int)DialogResult.OK, KPRes.DeleteCmd, null); dlg.AddButton((int)DialogResult.Cancel, KPRes.Cancel, null); if(dlg.ShowDialog()) { if(dlg.Result == (int)DialogResult.Cancel) return; } else { string strText = (bSingle ? KPRes.DeleteEntriesQuestionSingle : KPRes.DeleteEntriesQuestion); if(strSummary.Length > 0) strText += MessageService.NewParagraph + strSummary; if(!MessageService.AskYesNo(strText, (bSingle ? KPRes.DeleteEntriesTitleSingle : KPRes.DeleteEntriesTitle))) return; } } else if(Program.Config.UI.ShowRecycleConfirmDialog) { VistaTaskDialog dlg = new VistaTaskDialog(); dlg.CommandLinks = false; dlg.Content = strSummary; dlg.MainInstruction = (bSingle ? KPRes.RecycleEntryConfirmSingle : KPRes.RecycleEntryConfirm); dlg.SetIcon(VtdCustomIcon.Question); dlg.VerificationText = KPRes.DialogNoShowAgain; dlg.WindowTitle = PwDefs.ShortProductName; dlg.AddButton((int)DialogResult.OK, KPRes.YesCmd, null); dlg.AddButton((int)DialogResult.Cancel, KPRes.NoCmd, null); if(dlg.ShowDialog()) { if(dlg.Result == (int)DialogResult.Cancel) return; if(dlg.ResultVerificationChecked) Program.Config.UI.ShowRecycleConfirmDialog = false; } else { string strText = (bSingle ? KPRes.RecycleEntryConfirmSingle : KPRes.RecycleEntryConfirm); if(strSummary.Length > 0) strText += MessageService.NewParagraph + strSummary; if(!MessageService.AskYesNo(strText, (bSingle ? KPRes.DeleteEntriesTitleSingle : KPRes.DeleteEntriesTitle))) return; } } bool bUpdateGroupList = false; DateTime dtNow = DateTime.Now; foreach(PwEntry pe in vSelected) { PwGroup pgParent = pe.ParentGroup; if(pgParent == null) continue; // Can't remove pgParent.Entries.Remove(pe); bool bPermanent = false; if(pd.RecycleBinEnabled == false) bPermanent = true; else if(bShiftPressed) bPermanent = true; else if(pgRecycleBin == null) { } // Recycle else if(pgParent == pgRecycleBin) bPermanent = true; else if(pgParent.IsContainedIn(pgRecycleBin)) bPermanent = true; if(bPermanent) { PwDeletedObject pdo = new PwDeletedObject(pe.Uuid, dtNow); pd.DeletedObjects.Add(pdo); } else // Recycle { EnsureRecycleBin(ref pgRecycleBin, pd, ref bUpdateGroupList); pgRecycleBin.AddEntry(pe, true, true); pe.Touch(false); } } RemoveEntriesFromList(vSelected, true); UpdateUI(false, null, bUpdateGroupList, null, false, null, true); } private void DeleteSelectedGroup() { PwGroup pg = GetSelectedGroup(); if(pg == null) { Debug.Assert(false); return; } PwGroup pgParent = pg.ParentGroup; if(pgParent == null) return; // Can't remove virtual or root group PwDatabase pd = m_docMgr.ActiveDatabase; PwGroup pgRecycleBin = pd.RootGroup.FindGroup(pd.RecycleBinUuid, true); bool bShiftPressed = ((Control.ModifierKeys & Keys.Shift) != Keys.None); bool bPermanent = false; if(pd.RecycleBinEnabled == false) bPermanent = true; else if(bShiftPressed) bPermanent = true; else if(pgRecycleBin == null) { } else if(pg == pgRecycleBin) bPermanent = true; else if(pg.IsContainedIn(pgRecycleBin)) bPermanent = true; else if(pgRecycleBin.IsContainedIn(pg)) bPermanent = true; string strContent = EntryUtil.CreateSummaryList(pg, false); if(strContent.Length > 0) strContent = KPRes.DeleteGroupInfo + MessageService.NewParagraph + strContent; if(bPermanent) { VistaTaskDialog dlg = new VistaTaskDialog(); dlg.CommandLinks = false; dlg.Content = strContent; dlg.MainInstruction = KPRes.DeleteGroupQuestion; dlg.SetIcon(VtdCustomIcon.Question); dlg.WindowTitle = PwDefs.ShortProductName; dlg.AddButton((int)DialogResult.OK, KPRes.DeleteCmd, null); dlg.AddButton((int)DialogResult.Cancel, KPRes.Cancel, null); if(dlg.ShowDialog()) { if(dlg.Result == (int)DialogResult.Cancel) return; } else { string strText = KPRes.DeleteGroupQuestion; if(strContent.Length > 0) strText += MessageService.NewParagraph + strContent; if(!MessageService.AskYesNo(strText, KPRes.DeleteGroupTitle)) return; } } else if(Program.Config.UI.ShowRecycleConfirmDialog) { VistaTaskDialog dlg = new VistaTaskDialog(); dlg.CommandLinks = false; dlg.Content = strContent; dlg.MainInstruction = KPRes.RecycleGroupConfirm; dlg.SetIcon(VtdCustomIcon.Question); dlg.VerificationText = KPRes.DialogNoShowAgain; dlg.WindowTitle = PwDefs.ShortProductName; dlg.AddButton((int)DialogResult.OK, KPRes.YesCmd, null); dlg.AddButton((int)DialogResult.Cancel, KPRes.NoCmd, null); if(dlg.ShowDialog()) { if(dlg.Result == (int)DialogResult.Cancel) return; if(dlg.ResultVerificationChecked) Program.Config.UI.ShowRecycleConfirmDialog = false; } else { string strText = KPRes.RecycleGroupConfirm; if(strContent.Length > 0) strText += MessageService.NewParagraph + strContent; if(!MessageService.AskYesNo(strText, KPRes.DeleteGroupTitle)) return; } } pgParent.Groups.Remove(pg); if(bPermanent) { pg.DeleteAllObjects(pd); PwDeletedObject pdo = new PwDeletedObject(pg.Uuid, DateTime.Now); pd.DeletedObjects.Add(pdo); } else // Recycle { bool bDummy = false; EnsureRecycleBin(ref pgRecycleBin, pd, ref bDummy); pgRecycleBin.AddGroup(pg, true, true); pg.Touch(false); } UpdateUI(false, null, true, pgParent, true, null, true); } private void EmptyRecycleBin() { PwDatabase pd = m_docMgr.ActiveDatabase; PwGroup pg = pd.RootGroup.FindGroup(pd.RecycleBinUuid, true); if(pg == null) { Debug.Assert(false); return; } if(pg != GetSelectedGroup()) { Debug.Assert(false); return; } string strSummary = EntryUtil.CreateSummaryList(pg, false); VistaTaskDialog dlg = new VistaTaskDialog(); dlg.CommandLinks = false; dlg.Content = strSummary; dlg.MainInstruction = KPRes.EmptyRecycleBinQuestion; dlg.SetIcon(VtdCustomIcon.Question); dlg.WindowTitle = PwDefs.ShortProductName; dlg.AddButton((int)DialogResult.OK, KPRes.DeleteCmd, null); dlg.AddButton((int)DialogResult.Cancel, KPRes.Cancel, null); if(dlg.ShowDialog()) { if(dlg.Result == (int)DialogResult.Cancel) return; } else { string strText = KPRes.EmptyRecycleBinQuestion; if(strSummary.Length > 0) strText += MessageService.NewParagraph + strSummary; if(!MessageService.AskYesNo(strText)) return; } pg.DeleteAllObjects(pd); UpdateUI(false, null, true, pg, true, null, true); } // private static string GetGroupSuffixText(PwGroup pg) // { // if(pg == null) { Debug.Assert(false); return string.Empty; } // if(pg.Entries.UCount == 0) return string.Empty; // if(GroupOnlyContainsTans(pg, true) == false) return string.Empty; // DateTime dtNow = DateTime.Now; // uint uValid = 0; // foreach(PwEntry pe in pg.Entries) // { // if(pe.Expires && (pe.ExpiryTime <= dtNow)) { } // else ++uValid; // } // return (" (" + uValid.ToString() + "/" + pg.Entries.UCount.ToString() + ")"); // } public void AddCustomToolBarButton(string strID, string strName, string strDesc) { if(string.IsNullOrEmpty(strID)) { Debug.Assert(false); return; } // No throw if(string.IsNullOrEmpty(strName)) { Debug.Assert(false); return; } // No throw if(m_vCustomToolBarButtons.Count == 0) { m_tsSepCustomToolBar = new ToolStripSeparator(); m_toolMain.Items.Add(m_tsSepCustomToolBar); } ToolStripButton btn = new ToolStripButton(strName); btn.Tag = strID; btn.Click += OnCustomToolBarButtonClicked; if(!string.IsNullOrEmpty(strDesc)) btn.ToolTipText = strDesc; m_toolMain.Items.Add(btn); m_vCustomToolBarButtons.Add(btn); } public void RemoveCustomToolBarButton(string strID) { if(string.IsNullOrEmpty(strID)) { Debug.Assert(false); return; } // No throw foreach(ToolStripButton tb in m_vCustomToolBarButtons) { string str = (tb.Tag as string); if(string.IsNullOrEmpty(str)) { Debug.Assert(false); continue; } if(str.Equals(strID, StrUtil.CaseIgnoreCmp)) { tb.Click -= OnCustomToolBarButtonClicked; m_toolMain.Items.Remove(tb); m_vCustomToolBarButtons.Remove(tb); break; } } if((m_vCustomToolBarButtons.Count == 0) && (m_tsSepCustomToolBar != null)) { m_toolMain.Items.Remove(m_tsSepCustomToolBar); m_tsSepCustomToolBar = null; } } private void OnCustomToolBarButtonClicked(object sender, EventArgs e) { ToolStripButton btn = (sender as ToolStripButton); if(btn == null) { Debug.Assert(false); return; } string strID = (btn.Tag as string); if(string.IsNullOrEmpty(strID)) { Debug.Assert(false); return; } Program.TriggerSystem.RaiseEvent(EcasEventIDs.CustomTbButtonClicked, EcasProperty.CommandID, strID); } internal IOConnectionInfo IocFromCommandLine() { CommandLineArgs args = Program.CommandLineArgs; IOConnectionInfo ioc = IOConnectionInfo.FromPath(args.FileName ?? string.Empty); if(ioc.IsLocalFile()) // Expand relative path to absolute ioc.Path = UrlUtil.MakeAbsolutePath(UrlUtil.EnsureTerminatingSeparator( WinUtil.GetWorkingDirectory(), false) + "Sentinel", ioc.Path); // Set the user name, which acts as a filter for the MRU items string strUserName = args[AppDefs.CommandLineOptions.IoCredUserName]; if(strUserName != null) ioc.UserName = strUserName; if(args[AppDefs.CommandLineOptions.IoCredFromRecent] != null) ioc = CompleteConnectionInfoUsingMru(ioc); // Override the password string strPassword = args[AppDefs.CommandLineOptions.IoCredPassword]; if(strPassword != null) ioc.Password = strPassword; string strComplete = args[AppDefs.CommandLineOptions.IoCredIsComplete]; if(strComplete != null) ioc.IsComplete = true; return ioc; } private static void RememberKeySources(PwDatabase pwDb) { if(pwDb == null) { Debug.Assert(false); return; } Program.Config.Defaults.SetKeySources(pwDb.IOConnectionInfo, pwDb.MasterKey); } private void SerializeMruList(bool bStore) { AceMru aceMru = Program.Config.Application.MostRecentlyUsed; if(bStore) { if(!m_mruList.IsValid) { Debug.Assert(false); return; } aceMru.MaxItemCount = m_mruList.MaxItemCount; aceMru.Items.Clear(); // Count <= max is not guaranteed, therefore take minimum of both uint uMax = Math.Min(m_mruList.MaxItemCount, m_mruList.ItemCount); for(uint uMru = 0; uMru < uMax; ++uMru) { KeyValuePair kvpMru = m_mruList.GetItem(uMru); IOConnectionInfo ioMru = (kvpMru.Value as IOConnectionInfo); if(ioMru != null) aceMru.Items.Add(ioMru); else { Debug.Assert(false); } } } else // Load { m_mruList.MaxItemCount = aceMru.MaxItemCount; int nMax = Math.Min((int)m_mruList.MaxItemCount, aceMru.Items.Count); for(int iMru = 0; iMru < nMax; ++iMru) { IOConnectionInfo ioMru = aceMru.Items[nMax - iMru - 1]; m_mruList.AddItem(ioMru.GetDisplayName(), ioMru.CloneDeep()); } } } [Obsolete] public void RedirectActivationPush(Form formTarget) { // m_vRedirectActivation.Push(formTarget); } [Obsolete] public void RedirectActivationPop() { // if(m_vRedirectActivation.Count == 0) { Debug.Assert(false); return; } // m_vRedirectActivation.Pop(); } private bool ChangeMasterKey(PwDatabase pdOf) { if(!AppPolicy.Try(AppPolicyId.ChangeMasterKey)) return false; PwDatabase pd = (pdOf ?? m_docMgr.ActiveDatabase); if((pd == null) || !pd.IsOpen) { Debug.Assert(false); return false; } if(!AppPolicy.Current.ChangeMasterKeyNoKey) { if(!KeyUtil.ReAskKey(pd, true)) return false; } KeyCreationForm kcf = new KeyCreationForm(); kcf.InitEx(pd.IOConnectionInfo, false); if(UIUtil.ShowDialogNotValue(kcf, DialogResult.OK)) return false; // No UI update pd.MasterKey = kcf.CompositeKey; pd.MasterKeyChanged = DateTime.Now; MessageService.ShowInfoEx(PwDefs.ShortProductName + " - " + KPRes.KeyChanged, KPRes.MasterKeyChanged, KPRes.MasterKeyChangedSavePrompt); UIUtil.DestroyForm(kcf); return true; // No UI update } private void UpdateColumnsEx(bool bGuiToInternal) { if(m_bBlockColumnUpdates) return; m_bBlockColumnUpdates = true; if(!bGuiToInternal) // Internal to GUI { m_asyncListUpdate.CancelPendingUpdatesAsync(); m_lvEntries.BeginUpdate(); lock(m_asyncListUpdate.ListEditSyncObject) { m_lvEntries.Items.Clear(); } m_lvEntries.Columns.Clear(); if(Program.Config.MainWindow.EntryListColumns.Count == 0) { int nWidth = (m_lvEntries.ClientRectangle.Width - UIUtil.GetVScrollBarWidth()) / 5; EntryListAddColumn(AceColumnType.Title, nWidth, false); EntryListAddColumn(AceColumnType.UserName, nWidth, false); EntryListAddColumn(AceColumnType.Password, nWidth, true); EntryListAddColumn(AceColumnType.Url, nWidth, false); EntryListAddColumn(AceColumnType.Notes, nWidth, false); } int nDefaultWidth = m_lvEntries.ClientRectangle.Width / Program.Config.MainWindow.EntryListColumns.Count; foreach(AceColumn col in Program.Config.MainWindow.EntryListColumns) { ColumnHeader ch = m_lvEntries.Columns.Add(col.GetDisplayName(), col.SafeGetWidth(nDefaultWidth)); HorizontalAlignment ha; if(col.Type == AceColumnType.PluginExt) ha = Program.ColumnProviderPool.GetTextAlign(col.CustomName); else ha = AceColumn.GetTextAlign(col.Type); if(ha != HorizontalAlignment.Left) ch.TextAlign = ha; } int[] vDisplayIndices = StrUtil.DeserializeIntArray( Program.Config.MainWindow.EntryListColumnDisplayOrder); UIUtil.SetDisplayIndices(m_lvEntries, vDisplayIndices); m_lvEntries.EndUpdate(); UpdateColumnSortingIcons(); } else // GUI to internal { List l = Program.Config.MainWindow.EntryListColumns; if(l.Count == m_lvEntries.Columns.Count) { int[] vDisplayIndices = new int[l.Count]; for(int i = 0; i < l.Count; ++i) { l[i].Width = m_lvEntries.Columns[i].Width; vDisplayIndices[i] = m_lvEntries.Columns[i].DisplayIndex; } Program.Config.MainWindow.EntryListColumnDisplayOrder = StrUtil.SerializeIntArray(vDisplayIndices); } else { Debug.Assert(false); } } m_bBlockColumnUpdates = false; } private static void EntryListAddColumn(AceColumnType t, int nWidth, bool bHide) { AceColumn c = new AceColumn(t, string.Empty, bHide, nWidth); Program.Config.MainWindow.EntryListColumns.Add(c); } private string GetEntryFieldEx(PwEntry pe, int iColumnID, bool bFormatForDisplay, out bool bRequestAsync) { List l = Program.Config.MainWindow.EntryListColumns; if((iColumnID < 0) || (iColumnID >= l.Count)) { Debug.Assert(false); bRequestAsync = false; return string.Empty; } AceColumn col = l[iColumnID]; if(bFormatForDisplay && col.HideWithAsterisks) { bRequestAsync = false; return PwDefs.HiddenPassword; } string str; switch(col.Type) { case AceColumnType.Title: str = pe.Strings.ReadSafe(PwDefs.TitleField); break; case AceColumnType.UserName: str = pe.Strings.ReadSafe(PwDefs.UserNameField); break; case AceColumnType.Password: str = pe.Strings.ReadSafe(PwDefs.PasswordField); break; case AceColumnType.Url: str = pe.Strings.ReadSafe(PwDefs.UrlField); break; case AceColumnType.Notes: if(!bFormatForDisplay) str = pe.Strings.ReadSafe(PwDefs.NotesField); else str = StrUtil.MultiToSingleLine(pe.Strings.ReadSafe(PwDefs.NotesField)); break; case AceColumnType.CreationTime: str = TimeUtil.ToDisplayString(pe.CreationTime); break; case AceColumnType.LastModificationTime: str = TimeUtil.ToDisplayString(pe.LastModificationTime); break; case AceColumnType.LastAccessTime: str = TimeUtil.ToDisplayString(pe.LastAccessTime); break; case AceColumnType.ExpiryTime: if(pe.Expires) str = TimeUtil.ToDisplayString(pe.ExpiryTime); else str = m_strNeverExpiresText; break; case AceColumnType.Uuid: str = pe.Uuid.ToHexString(); break; case AceColumnType.Attachment: str = pe.Binaries.KeysToString(); break; case AceColumnType.CustomString: if(!bFormatForDisplay) str = pe.Strings.ReadSafe(col.CustomName); else str = StrUtil.MultiToSingleLine(pe.Strings.ReadSafe(col.CustomName)); break; case AceColumnType.PluginExt: if(!bFormatForDisplay) str = Program.ColumnProviderPool.GetCellData(col.CustomName, pe); else str = StrUtil.MultiToSingleLine(Program.ColumnProviderPool.GetCellData(col.CustomName, pe)); break; case AceColumnType.OverrideUrl: str = pe.OverrideUrl; break; case AceColumnType.Tags: str = StrUtil.TagsToString(pe.Tags, true); break; case AceColumnType.ExpiryTimeDateOnly: if(pe.Expires) str = TimeUtil.ToDisplayStringDateOnly(pe.ExpiryTime); else str = m_strNeverExpiresText; break; case AceColumnType.Size: str = StrUtil.FormatDataSizeKB(pe.GetSize()); break; case AceColumnType.HistoryCount: str = pe.History.UCount.ToString(); break; case AceColumnType.AttachmentCount: uint uc = pe.Binaries.UCount; str = ((uc > 0) ? uc.ToString() : string.Empty); break; default: Debug.Assert(false); str = string.Empty; break; } if(Program.Config.MainWindow.EntryListShowDerefData) { switch(col.Type) { case AceColumnType.Title: case AceColumnType.UserName: case AceColumnType.Password: case AceColumnType.Url: case AceColumnType.Notes: case AceColumnType.CustomString: bRequestAsync = SprEngine.MightDeref(str); break; default: bRequestAsync = false; break; } if(!Program.Config.MainWindow.EntryListShowDerefDataAsync && bRequestAsync) { PwListItem pli = new PwListItem(pe); str = AsyncPwListUpdate.SprCompileFn(str, pli); bRequestAsync = false; } } else bRequestAsync = false; return str; } private static AceColumn GetAceColumn(int nColID) { List v = Program.Config.MainWindow.EntryListColumns; if((nColID < 0) || (nColID >= v.Count)) { Debug.Assert(false); return new AceColumn(); } return v[nColID]; } private void ToggleFieldAsterisks(AceColumnType colType) { List l = Program.Config.MainWindow.EntryListColumns; foreach(AceColumn c in l) { if(c.Type == colType) { if((colType == AceColumnType.Password) && c.HideWithAsterisks && !AppPolicy.Try(AppPolicyId.UnhidePasswords)) return; c.HideWithAsterisks = !c.HideWithAsterisks; } } RefreshEntriesList(); UpdateUIState(false); // Update entry view } private void EditSelectedEntry(bool bSwitchToHistoryTab) { PwEntry pe = GetSelectedEntry(false); if(pe == null) return; // Do not assert PwDatabase pwDb = m_docMgr.ActiveDatabase; PwEntryForm pForm = new PwEntryForm(); pForm.InitEx(pe, PwEditMode.EditExistingEntry, pwDb, m_ilCurrentIcons, false, false); pForm.InitSwitchToHistoryTab = bSwitchToHistoryTab; if(pForm.ShowDialog() == DialogResult.OK) { bool bUpdImg = pwDb.UINeedsIconUpdate; RefreshEntriesList(); // Update entry UpdateUI(false, null, bUpdImg, null, false, null, pForm.HasModifiedEntry); } else { bool bUpdImg = pwDb.UINeedsIconUpdate; RefreshEntriesList(); // Update last access time UpdateUI(false, null, bUpdImg, null, false, null, false); } UIUtil.DestroyForm(pForm); } private static bool ListContainsOnlyTans(PwObjectList vEntries) { if(vEntries == null) { Debug.Assert(false); return true; } foreach(PwEntry pe in vEntries) { if(!PwDefs.IsTanEntry(pe)) return false; } return true; } private void OnShowEntriesByTag(object sender, DynamicMenuEventArgs e) { if(e == null) { Debug.Assert(false); return; } ShowEntriesByTag(e.Tag as string); } internal void ShowEntriesByTag(string strTag) { if(strTag == null) { Debug.Assert(false); return; } if(strTag.Length == 0) return; // No assert PwDatabase pd = m_docMgr.ActiveDatabase; if((pd == null) || !pd.IsOpen) return; // No assert (call from trigger) PwObjectList vEntries = new PwObjectList(); pd.RootGroup.FindEntriesByTag(strTag, vEntries, true); PwGroup pgResults = new PwGroup(true, true); pgResults.IsVirtual = true; foreach(PwEntry pe in vEntries) pgResults.AddEntry(pe, false); UpdateUI(false, null, false, null, true, pgResults, false); } private enum TagsMenuMode { All = 0, Add = 1, Remove = 2, EnsurePopupOnly = 127 // Ensure drawing of menu popup arrow } private void UpdateTagsMenu(DynamicMenu dm, bool bWithSeparator, bool bPrefixTag, TagsMenuMode tmm) { if(dm == null) { Debug.Assert(false); return; } dm.Clear(); if(bWithSeparator) dm.AddSeparator(); string strNoTags = "(" + KPRes.TagsNotFound + ")"; PwDatabase pd = m_docMgr.ActiveDatabase; if(!pd.IsOpen || (tmm == TagsMenuMode.EnsurePopupOnly)) { ToolStripMenuItem tsmi = dm.AddItem(strNoTags, null, string.Empty); tsmi.Enabled = false; return; } bool bReqEntrySel = ((tmm == TagsMenuMode.Add) || (tmm == TagsMenuMode.Remove)); IDictionary dAllTags = pd.RootGroup.BuildEntryTagsDict(true); PwGroup pgSel = GetSelectedEntriesAsGroup(); uint uSelCount = pgSel.Entries.UCount; bool bForceDisabled = (bReqEntrySel && (uSelCount == 0)); Dictionary dEnabledTags = null; if((tmm == TagsMenuMode.Add) && (uSelCount > 0)) { dEnabledTags = new Dictionary(StrUtil.CaseIgnoreComparer); List lIntersect = pgSel.Entries.GetAt(0).Tags; for(uint u = 1; u < uSelCount; ++u) lIntersect = new List(MemUtil.Intersect(lIntersect, pgSel.Entries.GetAt(u).Tags, StrUtil.CaseIgnoreComparer)); foreach(string strTag in MemUtil.Except(dAllTags.Keys, lIntersect, StrUtil.CaseIgnoreComparer)) dEnabledTags[strTag] = true; } else if(tmm == TagsMenuMode.Remove) { dEnabledTags = new Dictionary(StrUtil.CaseIgnoreComparer); List lSelectedTags = pgSel.BuildEntryTagsList(false); foreach(string strTag in lSelectedTags) dEnabledTags[strTag] = true; } string strPrefix = StrUtil.EncodeMenuText(KPRes.Tag + ": "); Image imgIcon = Properties.Resources.B16x16_KNotes; List lAvailKeys = new List(PwCharSet.MenuAccels); foreach(KeyValuePair kvp in dAllTags) { string strTag = kvp.Key; string strText = StrUtil.EncodeMenuText(strTag); strText = StrUtil.AddAccelerator(strText, lAvailKeys); if(bPrefixTag) strText = strPrefix + strText; ToolStripMenuItem tsmi = dm.AddItem(strText, imgIcon, strTag); if(tmm == TagsMenuMode.All) tsmi.ShortcutKeyDisplayString = "(" + kvp.Value.ToString() + ")"; if(bForceDisabled) tsmi.Enabled = false; else if(dEnabledTags != null) { if(!dEnabledTags.ContainsKey(strTag)) tsmi.Enabled = false; } } if(dAllTags.Count == 0) { ToolStripMenuItem tsmi = dm.AddItem(strNoTags, null, string.Empty); tsmi.Enabled = false; } } private void OnAddEntryTag(object sender, DynamicMenuEventArgs e) { string strTag = (e.Tag as string); if(strTag == null) { Debug.Assert(false); return; } if(strTag.Length == 0) { SingleLineEditForm dlg = new SingleLineEditForm(); dlg.InitEx(KPRes.TagNew, KPRes.TagAddNew, KPRes.Name + ":", Properties.Resources.B48x48_KMag, string.Empty, null); if(UIUtil.ShowDialogNotValue(dlg, DialogResult.OK)) return; strTag = dlg.ResultString; UIUtil.DestroyForm(dlg); } if(!string.IsNullOrEmpty(strTag)) AddOrRemoveTagsToFromSelectedEntries(strTag, true); } private void OnRemoveEntryTag(object sender, DynamicMenuEventArgs e) { string strTag = (e.Tag as string); if(strTag == null) { Debug.Assert(false); return; } if(strTag.Length == 0) return; AddOrRemoveTagsToFromSelectedEntries(strTag, false); } private void AddOrRemoveTagsToFromSelectedEntries(string strTags, bool bAdd) { if(strTags == null) { Debug.Assert(false); return; } if(strTags.Length == 0) return; PwDatabase pd = m_docMgr.ActiveDatabase; PwEntry[] vEntries = GetSelectedEntries(); if((vEntries == null) || (vEntries.Length == 0)) return; List vToProcess = StrUtil.StringToTags(strTags); List vModified = new List(); foreach(string strTag in vToProcess) { foreach(PwEntry pe in vEntries) { if(bAdd && !pe.HasTag(strTag)) // Add tag { if(vModified.IndexOf(pe) < 0) // Backup entries only once { pe.CreateBackup(pd); vModified.Add(pe); } if(!pe.AddTag(strTag)) { Debug.Assert(false); } } else if(!bAdd && pe.HasTag(strTag)) // Remove tag { if(vModified.IndexOf(pe) < 0) // Backup entries only once { pe.CreateBackup(pd); vModified.Add(pe); } if(!pe.RemoveTag(strTag)) { Debug.Assert(false); } } } } foreach(PwEntry pe in vModified) { pe.Touch(true, false); } RefreshEntriesList(); UpdateUIState(vModified.Count > 0); } internal static void AutoAdjustMemProtSettings(PwDatabase pd, SearchParameters sp) { if(pd == null) { Debug.Assert(false); return; } // if(sp != null) // { // if(sp.SearchInTitles) pd.MemoryProtection.ProtectTitle = false; // if(sp.SearchInUserNames) pd.MemoryProtection.ProtectUserName = false; // // if(sp.SearchInPasswords) pd.MemoryProtection.ProtectPassword = false; // if(sp.SearchInUrls) pd.MemoryProtection.ProtectUrl = false; // if(sp.SearchInNotes) pd.MemoryProtection.ProtectNotes = false; // } } private static bool? m_bCachedSelfTestResult = null; private static bool PerformSelfTest() { if(m_bCachedSelfTestResult.HasValue) return m_bCachedSelfTestResult.Value; bool bResult = true; try { SelfTest.Perform(); } catch(Exception exSelfTest) { MessageService.ShowWarning(KPRes.SelfTestFailed, exSelfTest); bResult = false; } m_bCachedSelfTestResult = bResult; return bResult; } private void SortSubGroups(bool bRecursive) { PwGroup pg = GetSelectedGroup(); if(pg == null) return; if(!bRecursive && (pg.Groups.UCount <= 1)) return; // Nothing to do if(pg.Groups.UCount == 0) return; // Nothing to do pg.SortSubGroups(bRecursive); UpdateUI(false, null, true, null, false, null, true); } private bool CreateColorizedIcon(Icon icoBase, int qSize, ref KeyValuePair kvpStore, out Icon icoAssignable, out Icon icoDisposable) { PwDatabase pd = m_docMgr.ActiveDatabase; Color clrNew = Color.Empty; if((pd == null) || !pd.IsOpen || pd.Color.IsEmpty || (pd.Color.A < 255)) { } else clrNew = pd.Color; if(UIUtil.ColorsEqual(clrNew, kvpStore.Key)) { icoDisposable = null; icoAssignable = (kvpStore.Value ?? icoBase); return false; } icoDisposable = kvpStore.Value; if(UIUtil.ColorsEqual(clrNew, Color.Empty)) { kvpStore = new KeyValuePair(Color.Empty, null); icoAssignable = icoBase; } else { kvpStore = new KeyValuePair(clrNew, UIUtil.CreateColorizedIcon(icoBase, clrNew, qSize)); icoAssignable = kvpStore.Value; } return true; } private void SetObjectsDeletedStatus(uint uDeleted, bool bDbMntnc) { string str = (StrUtil.ReplaceCaseInsensitive(KPRes.ObjectsDeleted, @"{PARAM}", uDeleted.ToString()) + "."); SetStatusEx(str); if(!bDbMntnc || !Program.Config.UI.ShowDbMntncResultsDialog) return; VistaTaskDialog dlg = new VistaTaskDialog(); dlg.CommandLinks = false; dlg.Content = str; dlg.SetIcon(VtdIcon.Information); dlg.VerificationText = KPRes.DialogNoShowAgain; dlg.WindowTitle = PwDefs.ShortProductName; if(dlg.ShowDialog()) { if(dlg.ResultVerificationChecked) Program.Config.UI.ShowDbMntncResultsDialog = false; } else MessageService.ShowInfo(str); } private void ApplyUICustomizations() { ulong u = Program.Config.UI.UIFlags; if((u & (ulong)AceUIFlags.DisableOptions) != 0) m_menuToolsOptions.Enabled = false; if((u & (ulong)AceUIFlags.DisablePlugins) != 0) m_menuToolsPlugins.Enabled = false; if((u & (ulong)AceUIFlags.DisableTriggers) != 0) m_menuToolsTriggers.Enabled = false; } private static void OnFormLoadParallelAsync(object stateInfo) { try { PopularPasswords.Add(Properties.Resources.MostPopularPasswords, true); string strShInstUtil = UrlUtil.GetFileDirectory( WinUtil.GetExecutable(), true, false) + AppDefs.ShInstUtil; // Unblock the application such that the user isn't // prompted next time anymore WinUtil.RemoveZoneIdentifier(WinUtil.GetExecutable()); WinUtil.RemoveZoneIdentifier(AppHelp.LocalHelpFile); WinUtil.RemoveZoneIdentifier(strShInstUtil); // http://stackoverflow.com/questions/26256917/how-can-i-prevent-my-application-from-causing-a-0xc0000142-error-in-csc-exe XmlSerializer xs = new XmlSerializer(typeof(IpcParamEx)); IpcParamEx ipc = new IpcParamEx(); MemoryStream ms = new MemoryStream(); xs.Serialize(ms, ipc); ms.Close(); } catch(Exception) { Debug.Assert(false); } } private bool IsCommandTypeInvokable(MainAppState? sContext, AppCommandType t) { MainAppState s = (sContext.HasValue ? sContext.Value : GetMainAppState()); if(t == AppCommandType.Window) return (s.NoWindowShown && !UIIsInteractionBlocked()); if(t == AppCommandType.Lock) return (s.NoWindowShown && !UIIsInteractionBlocked() && s.EnableLockCmd); return false; } private void UpdateTrayState() { UpdateUIState(false); // Update tray lock text ulong u = Program.Config.UI.UIFlags; bool bOptions = ((u & (ulong)AceUIFlags.DisableOptions) == 0); MainAppState s = GetMainAppState(); bool bInvkWnd = IsCommandTypeInvokable(s, AppCommandType.Window); m_ctxTrayTray.Enabled = bInvkWnd; m_ctxTrayGenPw.Enabled = bInvkWnd; m_ctxTrayOptions.Enabled = (bInvkWnd && bOptions); m_ctxTrayLock.Enabled = IsCommandTypeInvokable(s, AppCommandType.Lock); m_ctxTrayFileExit.Enabled = bInvkWnd; } internal static SprContext GetEntryListSprContext(PwEntry pe, PwDatabase pd) { SprContext ctx = new SprContext(pe, pd, SprCompileFlags.Deref); ctx.ForcePlainTextPasswords = false; return ctx; } private void EnsureAlwaysOnTopOpt() { bool bWish = Program.Config.MainWindow.AlwaysOnTop; if(KeePassLib.Native.NativeLib.IsUnix()) { this.TopMost = bWish; return; } // Workaround for issue reported in KPB 3475997 this.TopMost = false; if(bWish) this.TopMost = true; } private bool IsPrimaryControlFocused() { try { return (m_lvEntries.Focused || m_tvGroups.Focused || m_richEntryView.Focused || m_tbQuickFind.Focused); } catch(Exception) { Debug.Assert(false); } return false; } protected override void SetVisibleCore(bool value) { if(MonoWorkarounds.IsRequired(3574233558U)) { if(!value && m_bFormShown && (this.WindowState == FormWindowState.Minimized)) { // Mono destroys window when trying to hide minimized // window; so, restore it before hiding this.WindowState = FormWindowState.Normal; Application.DoEvents(); Thread.Sleep(250); } if(m_bFormShown) m_menuMain.Visible = value; } base.SetVisibleCore(value); } private void MoveOrCopySelectedEntries(PwGroup pgTo, DragDropEffects e) { PwEntry[] vSelected = GetSelectedEntries(); if((vSelected == null) || (vSelected.Length == 0)) return; PwGroup pgSafeView = (m_pgActiveAtDragStart ?? new PwGroup()); bool bFullUpdateView = false; List vNowInvisible = new List(); if(e == DragDropEffects.Move) { foreach(PwEntry pe in vSelected) { PwGroup pgParent = pe.ParentGroup; if(pgParent == pgTo) continue; if(pgParent != null) // Remove from parent { if(!pgParent.Entries.Remove(pe)) { Debug.Assert(false); } } pgTo.AddEntry(pe, true, true); if(pe.IsContainedIn(pgSafeView)) bFullUpdateView = true; else vNowInvisible.Add(pe); } } else if(e == DragDropEffects.Copy) { foreach(PwEntry pe in vSelected) { PwEntry peCopy = pe.Duplicate(); pgTo.AddEntry(peCopy, true, true); if(peCopy.IsContainedIn(pgSafeView)) bFullUpdateView = true; } } else { Debug.Assert(false); } if(!bFullUpdateView) { RemoveEntriesFromList(vNowInvisible, true); UpdateUI(false, null, true, m_pgActiveAtDragStart, false, null, true); } else UpdateUI(false, null, true, m_pgActiveAtDragStart, true, null, true); m_pgActiveAtDragStart = null; } private void UpdateEntryMoveMenu(bool bDummyOnly) { PwDatabase pd = m_docMgr.ActiveDatabase; DynamicMenu dm = m_dynMoveToGroup; if(dm == null) { Debug.Assert(false); return; } dm.Clear(); PwGroup pgRoot = pd.RootGroup; if((pd == null) || !pd.IsOpen || (pgRoot == null) || bDummyOnly) { ToolStripMenuItem tsmi = dm.AddItem("(" + KPRes.None + ")", null); tsmi.Enabled = false; return; } List lAvailKeys = new List(PwCharSet.MenuAccels); GroupHandler gh = delegate(PwGroup pg) { string strName = StrUtil.EncodeMenuText(pg.Name); strName = StrUtil.AddAccelerator(strName, lAvailKeys); strName = strName.PadLeft(((int)pg.GetLevel() * 4) + strName.Length); int nIconID = ((!pg.CustomIconUuid.Equals(PwUuid.Zero)) ? ((int)PwIcon.Count + pd.GetCustomIconIndex( pg.CustomIconUuid)) : (int)pg.IconId); ToolStripMenuItem tsmi = dm.AddItem(strName, m_ilCurrentIcons.Images[nIconID], pg); if(pd.RecycleBinEnabled && pg.Uuid.Equals(pd.RecycleBinUuid) && (m_fontItalicTree != null)) tsmi.Font = m_fontItalicTree; return true; }; gh(pgRoot); pgRoot.TraverseTree(TraversalMethod.PreOrder, gh, null); } private void OnEntryMoveToGroup(object sender, DynamicMenuEventArgs e) { PwGroup pgTo = (e.Tag as PwGroup); if(pgTo == null) { Debug.Assert(false); return; } m_pgActiveAtDragStart = GetSelectedGroup(); MoveOrCopySelectedEntries(pgTo, DragDropEffects.Move); } private bool FixDuplicateUuids(PwDatabase pd, IOConnectionInfo ioc) { if(pd == null) { Debug.Assert(false); return false; } if(!pd.HasDuplicateUuids()) return false; string str = string.Empty; if(ioc != null) { string strFile = ioc.GetDisplayName(); if(!string.IsNullOrEmpty(strFile)) str += strFile + MessageService.NewParagraph; } str += KPRes.UuidDupInDb + MessageService.NewParagraph + KPRes.CorruptionByExt + MessageService.NewParagraph + KPRes.UuidFix; if(VistaTaskDialog.ShowMessageBoxEx(str, null, PwDefs.ShortProductName, VtdIcon.Warning, null, KPRes.RepairCmd, (int)DialogResult.Cancel, null, 0) < 0) MessageService.ShowWarning(str); pd.FixDuplicateUuids(); pd.Modified = true; return true; } } } KeePass/Forms/StatusLoggerForm.Designer.cs0000664000000000000000000001003712501532366017540 0ustar rootrootnamespace KeePass.Forms { partial class StatusLoggerForm { /// /// Erforderliche Designervariable. /// private System.ComponentModel.IContainer components = null; /// /// Verwendete Ressourcen bereinigen. /// /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Vom Windows Form-Designer generierter Code /// /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// private void InitializeComponent() { this.m_btnCancel = new System.Windows.Forms.Button(); this.m_lvMessages = new KeePass.UI.CustomListViewEx(); this.m_pbProgress = new System.Windows.Forms.ProgressBar(); this.m_tbDetails = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(392, 276); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 0; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_lvMessages // this.m_lvMessages.FullRowSelect = true; this.m_lvMessages.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; this.m_lvMessages.Location = new System.Drawing.Point(12, 12); this.m_lvMessages.MultiSelect = false; this.m_lvMessages.Name = "m_lvMessages"; this.m_lvMessages.Size = new System.Drawing.Size(455, 134); this.m_lvMessages.TabIndex = 1; this.m_lvMessages.UseCompatibleStateImageBehavior = false; this.m_lvMessages.View = System.Windows.Forms.View.Details; this.m_lvMessages.SelectedIndexChanged += new System.EventHandler(this.OnMessagesSelectedIndexChanged); // // m_pbProgress // this.m_pbProgress.Location = new System.Drawing.Point(12, 152); this.m_pbProgress.Name = "m_pbProgress"; this.m_pbProgress.Size = new System.Drawing.Size(455, 17); this.m_pbProgress.TabIndex = 2; // // m_tbDetails // this.m_tbDetails.Location = new System.Drawing.Point(12, 175); this.m_tbDetails.Multiline = true; this.m_tbDetails.Name = "m_tbDetails"; this.m_tbDetails.ReadOnly = true; this.m_tbDetails.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.m_tbDetails.Size = new System.Drawing.Size(455, 95); this.m_tbDetails.TabIndex = 3; // // StatusLoggerForm // this.AcceptButton = this.m_btnCancel; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(479, 311); this.Controls.Add(this.m_tbDetails); this.Controls.Add(this.m_pbProgress); this.Controls.Add(this.m_lvMessages); this.Controls.Add(this.m_btnCancel); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "StatusLoggerForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button m_btnCancel; private KeePass.UI.CustomListViewEx m_lvMessages; private System.Windows.Forms.ProgressBar m_pbProgress; private System.Windows.Forms.TextBox m_tbDetails; } }KeePass/Forms/KeyPromptForm.cs0000664000000000000000000004542012641461340015312 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.IO; using System.Windows.Forms; using System.Diagnostics; using System.Threading; using KeePass.App; using KeePass.App.Configuration; using KeePass.Resources; using KeePass.UI; using KeePass.Util; using KeePassLib; using KeePassLib.Delegates; using KeePassLib.Keys; using KeePassLib.Native; using KeePassLib.Utility; using KeePassLib.Serialization; namespace KeePass.Forms { public partial class KeyPromptForm : Form { private CompositeKey m_pKey = null; private IOConnectionInfo m_ioInfo = new IOConnectionInfo(); private string m_strCustomTitle = null; // private bool m_bRedirectActivation = false; private bool m_bCanExit = false; private bool m_bHasExited = false; private SecureEdit m_secPassword = new SecureEdit(); private bool m_bInitializing = true; private bool m_bDisposed = false; private AceKeyAssoc m_aKeyAssoc = null; private bool m_bCanModKeyFile = false; private List m_lKeyFileNames = new List(); // private List m_lKeyFileImages = new List(); private bool m_bUaStatePreset = false; public CompositeKey CompositeKey { get { return m_pKey; } } public bool HasClosedWithExit { get { return m_bHasExited; } } private bool m_bSecureDesktop = false; public bool SecureDesktopMode { get { return m_bSecureDesktop; } set { m_bSecureDesktop = value; } } private bool m_bShowHelpAfterClose = false; public bool ShowHelpAfterClose { get { return m_bShowHelpAfterClose; } } public KeyPromptForm() { InitializeComponent(); Program.Translation.ApplyTo(this); } public void InitEx(IOConnectionInfo ioInfo, bool bCanExit, bool bRedirectActivation) { InitEx(ioInfo, bCanExit, bRedirectActivation, null); } public void InitEx(IOConnectionInfo ioInfo, bool bCanExit, bool bRedirectActivation, string strCustomTitle) { if(ioInfo != null) m_ioInfo = ioInfo; m_bCanExit = bCanExit; // m_bRedirectActivation = bRedirectActivation; m_strCustomTitle = strCustomTitle; } private void OnFormLoad(object sender, EventArgs e) { m_bInitializing = true; GlobalWindowManager.AddWindow(this); // if(m_bRedirectActivation) Program.MainForm.RedirectActivationPush(this); string strBannerTitle = (!string.IsNullOrEmpty(m_strCustomTitle) ? m_strCustomTitle : KPRes.EnterCompositeKey); string strBannerDesc = WinUtil.CompactPath(m_ioInfo.Path, 45); BannerFactory.CreateBannerEx(this, m_bannerImage, Properties.Resources.B48x48_KGPG_Key2, strBannerTitle, strBannerDesc); this.Icon = Properties.Resources.KeePass; FontUtil.SetDefaultFont(m_cbPassword); FontUtil.AssignDefaultBold(m_cbPassword); FontUtil.AssignDefaultBold(m_cbKeyFile); FontUtil.AssignDefaultBold(m_cbUserAccount); // m_ttRect.SetToolTip(m_cbHidePassword, KPRes.TogglePasswordAsterisks); m_ttRect.SetToolTip(m_btnOpenKeyFile, KPRes.KeyFileSelect); PwInputControlGroup.ConfigureHideButton(m_cbHidePassword, m_ttRect); string strStart = (!string.IsNullOrEmpty(m_strCustomTitle) ? m_strCustomTitle : KPRes.OpenDatabase); string strNameEx = UrlUtil.GetFileName(m_ioInfo.Path); if(!string.IsNullOrEmpty(strNameEx)) this.Text = strStart + " - " + strNameEx; else this.Text = strStart; m_tbPassword.Text = string.Empty; m_secPassword.SecureDesktopMode = m_bSecureDesktop; m_secPassword.Attach(m_tbPassword, ProcessTextChangedPassword, true); // m_cmbKeyFile.OrderedImageList = m_lKeyFileImages; AddKeyFileSuggPriv(KPRes.NoKeyFileSpecifiedMeta, true); // Do not directly compare with Program.CommandLineArgs.FileName, // because this may be a relative path instead of an absolute one string strCmdLineFile = Program.CommandLineArgs.FileName; if((strCmdLineFile != null) && (Program.MainForm != null)) strCmdLineFile = Program.MainForm.IocFromCommandLine().Path; if((strCmdLineFile != null) && strCmdLineFile.Equals(m_ioInfo.Path, StrUtil.CaseIgnoreCmp)) { string str; str = Program.CommandLineArgs[AppDefs.CommandLineOptions.Password]; if(str != null) { m_cbPassword.Checked = true; m_tbPassword.Text = str; } str = Program.CommandLineArgs[AppDefs.CommandLineOptions.PasswordEncrypted]; if(str != null) { m_cbPassword.Checked = true; m_tbPassword.Text = StrUtil.DecryptString(str); } str = Program.CommandLineArgs[AppDefs.CommandLineOptions.PasswordStdIn]; if(str != null) { KcpPassword kcpPw = KeyUtil.ReadPasswordStdIn(true); if(kcpPw != null) { m_cbPassword.Checked = true; m_tbPassword.Text = kcpPw.Password.ReadString(); } } str = Program.CommandLineArgs[AppDefs.CommandLineOptions.KeyFile]; if(str != null) { m_cbKeyFile.Checked = true; AddKeyFileSuggPriv(str, true); } str = Program.CommandLineArgs[AppDefs.CommandLineOptions.PreSelect]; if(str != null) { m_cbKeyFile.Checked = true; AddKeyFileSuggPriv(str, true); } } m_cbHidePassword.Checked = true; OnCheckedHidePassword(sender, e); Debug.Assert(m_cmbKeyFile.Text.Length != 0); m_btnExit.Enabled = m_bCanExit; m_btnExit.Visible = m_bCanExit; ulong uKpf = Program.Config.UI.KeyPromptFlags; UIUtil.ApplyKeyUIFlags(uKpf, m_cbPassword, m_cbKeyFile, m_cbUserAccount, m_cbHidePassword); if((uKpf & (ulong)AceKeyUIFlags.DisableKeyFile) != 0) { UIUtil.SetEnabled(m_cmbKeyFile, m_cbKeyFile.Checked); UIUtil.SetEnabled(m_btnOpenKeyFile, m_cbKeyFile.Checked); } if(((uKpf & (ulong)AceKeyUIFlags.CheckUserAccount) != 0) || ((uKpf & (ulong)AceKeyUIFlags.UncheckUserAccount) != 0)) m_bUaStatePreset = true; CustomizeForScreenReader(); EnableUserControls(); m_bInitializing = false; // E.g. command line options have higher priority m_bCanModKeyFile = (m_cmbKeyFile.SelectedIndex == 0); m_aKeyAssoc = Program.Config.Defaults.GetKeySources(m_ioInfo); if(m_aKeyAssoc != null) { if(m_aKeyAssoc.KeyFilePath.Length > 0) AddKeyFileSuggPriv(m_aKeyAssoc.KeyFilePath, null); if(m_aKeyAssoc.UserAccount && !m_bUaStatePreset) m_cbUserAccount.Checked = true; } foreach(KeyProvider prov in Program.KeyProviderPool) AddKeyFileSuggPriv(prov.Name, null); // Local, but thread will continue to run anyway Thread th = new Thread(new ThreadStart(this.AsyncFormLoad)); th.Start(); // ThreadPool.QueueUserWorkItem(new WaitCallback(this.AsyncFormLoad)); this.BringToFront(); this.Activate(); // UIUtil.SetFocus(m_tbPassword, this); // See OnFormShown } private void OnFormShown(object sender, EventArgs e) { // Focusing doesn't always work in OnFormLoad; // https://sourceforge.net/p/keepass/feature-requests/1735/ if(m_tbPassword.CanFocus) UIUtil.ResetFocus(m_tbPassword, this); else if(m_cmbKeyFile.CanFocus) UIUtil.SetFocus(m_cmbKeyFile, this); else if(m_btnOK.CanFocus) UIUtil.SetFocus(m_btnOK, this); else { Debug.Assert(false); } } private void CustomizeForScreenReader() { if(!Program.Config.UI.OptimizeForScreenReader) return; m_cbHidePassword.Text = KPRes.HideUsingAsterisks; m_btnOpenKeyFile.Text = KPRes.SelectFile; } private void CleanUpEx() { Debug.Assert(m_cmbKeyFile.Items.Count == m_lKeyFileNames.Count); if(m_bDisposed) { Debug.Assert(false); return; } m_bDisposed = true; // m_cmbKeyFile.OrderedImageList = null; // m_lKeyFileImages.Clear(); m_secPassword.Detach(); } private bool CreateCompositeKey() { m_pKey = new CompositeKey(); if(m_cbPassword.Checked) // Use a password { byte[] pb = m_secPassword.ToUtf8(); m_pKey.AddUserKey(new KcpPassword(pb)); Array.Clear(pb, 0, pb.Length); } string strKeyFile = m_cmbKeyFile.Text; Debug.Assert(strKeyFile != null); if(strKeyFile == null) strKeyFile = string.Empty; bool bIsProvKey = Program.KeyProviderPool.IsKeyProvider(strKeyFile); if(m_cbKeyFile.Checked && !strKeyFile.Equals(KPRes.NoKeyFileSpecifiedMeta) && !bIsProvKey) { if(!ValidateKeyFile()) return false; try { m_pKey.AddUserKey(new KcpKeyFile(strKeyFile)); } catch(Exception) { MessageService.ShowWarning(strKeyFile, KPRes.KeyFileError); return false; } } else if(m_cbKeyFile.Checked && !strKeyFile.Equals(KPRes.NoKeyFileSpecifiedMeta) && bIsProvKey) { KeyProvider kp = Program.KeyProviderPool.Get(strKeyFile); if((kp != null) && m_bSecureDesktop) { if(!kp.SecureDesktopCompatible) { MessageService.ShowWarning(KPRes.KeyProvIncmpWithSD, KPRes.KeyProvIncmpWithSDHint); return false; } } KeyProviderQueryContext ctxKP = new KeyProviderQueryContext( m_ioInfo, false, m_bSecureDesktop); bool bPerformHash; byte[] pbProvKey = Program.KeyProviderPool.GetKey(strKeyFile, ctxKP, out bPerformHash); if((pbProvKey != null) && (pbProvKey.Length > 0)) { try { m_pKey.AddUserKey(new KcpCustomKey(strKeyFile, pbProvKey, bPerformHash)); } catch(Exception exCKP) { MessageService.ShowWarning(exCKP); return false; } Array.Clear(pbProvKey, 0, pbProvKey.Length); } else return false; // Provider has shown error message } if(m_cbUserAccount.Checked) { try { m_pKey.AddUserKey(new KcpUserAccount()); } catch(Exception exUA) { MessageService.ShowWarning(exUA); return false; } } return true; } private bool ValidateKeyFile() { string strKeyFile = m_cmbKeyFile.Text; Debug.Assert(strKeyFile != null); if(strKeyFile == null) strKeyFile = string.Empty; if(strKeyFile.Equals(KPRes.NoKeyFileSpecifiedMeta)) return true; if(Program.KeyProviderPool.IsKeyProvider(strKeyFile)) return true; bool bSuccess = true; IOConnectionInfo ioc = IOConnectionInfo.FromPath(strKeyFile); if(!IOConnection.FileExists(ioc)) { MessageService.ShowWarning(strKeyFile, KPRes.FileNotFoundError); bSuccess = false; } // if(!bSuccess) // { // int nPos = m_cmbKeyFile.Items.IndexOf(strKeyFile); // if(nPos >= 0) // { // m_cmbKeyFile.Items.RemoveAt(nPos); // m_lKeyFileNames.RemoveAt(nPos); // } // m_cmbKeyFile.SelectedIndex = 0; // } return bSuccess; } private void EnableUserControls() { string strKeyFile = m_cmbKeyFile.Text; Debug.Assert(strKeyFile != null); if(strKeyFile == null) strKeyFile = string.Empty; if(m_cbKeyFile.Checked && strKeyFile.Equals(KPRes.NoKeyFileSpecifiedMeta)) UIUtil.SetEnabled(m_btnOK, false); else UIUtil.SetEnabled(m_btnOK, true); bool bExclusiveProv = false; KeyProvider prov = Program.KeyProviderPool.Get(strKeyFile); if(prov != null) bExclusiveProv = prov.Exclusive; if(bExclusiveProv) { m_tbPassword.Text = string.Empty; UIUtil.SetChecked(m_cbPassword, false); UIUtil.SetChecked(m_cbUserAccount, false); } bool bPwAllowed = ((Program.Config.UI.KeyPromptFlags & (ulong)AceKeyUIFlags.DisablePassword) == 0); bool bPwInput = (bPwAllowed || m_cbPassword.Checked); UIUtil.SetEnabled(m_cbPassword, !bExclusiveProv && bPwAllowed); UIUtil.SetEnabled(m_tbPassword, !bExclusiveProv && bPwInput); if((Program.Config.UI.KeyPromptFlags & (ulong)AceKeyUIFlags.DisableHidePassword) == 0) UIUtil.SetEnabled(m_cbHidePassword, !bExclusiveProv && bPwInput); bool bUaAllowed = ((Program.Config.UI.KeyPromptFlags & (ulong)AceKeyUIFlags.DisableUserAccount) == 0); bUaAllowed &= !(WinUtil.IsWindows9x || NativeLib.IsUnix()); UIUtil.SetEnabled(m_cbUserAccount, !bExclusiveProv && bUaAllowed); } private void OnCheckedPassword(object sender, EventArgs e) { if(m_cbPassword.Checked) UIUtil.SetFocus(m_tbPassword, this); } private void OnCheckedKeyFile(object sender, EventArgs e) { if(m_bInitializing) return; if(!m_cbKeyFile.Checked) m_cmbKeyFile.SelectedIndex = 0; EnableUserControls(); } private void ProcessTextChangedPassword(object sender, EventArgs e) { if(((Program.Config.UI.KeyPromptFlags & (ulong)AceKeyUIFlags.CheckPassword) == 0) && ((Program.Config.UI.KeyPromptFlags & (ulong)AceKeyUIFlags.UncheckPassword) == 0)) UIUtil.SetChecked(m_cbPassword, m_tbPassword.TextLength > 0); } private void OnCheckedHidePassword(object sender, EventArgs e) { bool bHide = m_cbHidePassword.Checked; if(!bHide && !AppPolicy.Try(AppPolicyId.UnhidePasswords)) { m_cbHidePassword.Checked = true; return; } m_secPassword.EnableProtection(bHide); if(!m_bInitializing) UIUtil.SetFocus(m_tbPassword, this); } private void OnBtnOK(object sender, EventArgs e) { if(!CreateCompositeKey()) this.DialogResult = DialogResult.None; } private void OnBtnCancel(object sender, EventArgs e) { m_pKey = null; } private void OnBtnHelp(object sender, EventArgs e) { if(m_bSecureDesktop) { m_bShowHelpAfterClose = true; this.DialogResult = DialogResult.Cancel; } else AppHelp.ShowHelp(AppDefs.HelpTopics.KeySources, null); } private void OnClickKeyFileBrowse(object sender, EventArgs e) { string strFile = null; if(m_bSecureDesktop) { FileBrowserForm dlg = new FileBrowserForm(); dlg.InitEx(false, KPRes.KeyFileSelect, KPRes.SecDeskFileDialogHint, AppDefs.FileDialogContext.KeyFile); if(dlg.ShowDialog() == DialogResult.OK) strFile = dlg.SelectedFile; UIUtil.DestroyForm(dlg); } else { string strFilter = UIUtil.CreateFileTypeFilter("key", KPRes.KeyFiles, true); OpenFileDialogEx ofd = UIUtil.CreateOpenFileDialog(KPRes.KeyFileSelect, strFilter, 2, null, false, AppDefs.FileDialogContext.KeyFile); if(ofd.ShowDialog() == DialogResult.OK) strFile = ofd.FileName; } if(!string.IsNullOrEmpty(strFile)) { if((Program.Config.UI.KeyPromptFlags & (ulong)AceKeyUIFlags.UncheckKeyFile) == 0) UIUtil.SetChecked(m_cbKeyFile, true); AddKeyFileSuggPriv(strFile, true); } EnableUserControls(); } private void OnKeyFileSelectedIndexChanged(object sender, EventArgs e) { if(m_bInitializing) return; string strKeyFile = m_cmbKeyFile.Text; Debug.Assert(strKeyFile != null); if(strKeyFile == null) strKeyFile = string.Empty; if(!strKeyFile.Equals(KPRes.NoKeyFileSpecifiedMeta)) { // if(ValidateKeyFile()) // { if((Program.Config.UI.KeyPromptFlags & (ulong)AceKeyUIFlags.UncheckKeyFile) == 0) UIUtil.SetChecked(m_cbKeyFile, true); // } } else if((Program.Config.UI.KeyPromptFlags & (ulong)AceKeyUIFlags.CheckKeyFile) == 0) UIUtil.SetChecked(m_cbKeyFile, false); EnableUserControls(); } private void AsyncFormLoad() { try { PopulateKeyFileSuggestions(); } catch(Exception) { Debug.Assert(false); } } private void PopulateKeyFileSuggestions() { if(Program.Config.Integration.SearchKeyFiles) { bool bSearchOnRemovable = Program.Config.Integration.SearchKeyFilesOnRemovableMedia; DriveInfo[] vDrives = DriveInfo.GetDrives(); foreach(DriveInfo di in vDrives) { if(di.DriveType == DriveType.NoRootDirectory) continue; else if((di.DriveType == DriveType.Removable) && !bSearchOnRemovable) continue; else if(di.DriveType == DriveType.CDRom) continue; ThreadPool.QueueUserWorkItem(new WaitCallback( this.AddKeyDriveSuggAsync), di); } } } private void AddKeyDriveSuggAsync(object oDriveInfo) { try { DriveInfo di = (oDriveInfo as DriveInfo); if(di == null) { Debug.Assert(false); return; } if(!di.IsReady) return; List lFiles = UrlUtil.GetFileInfos(di.RootDirectory, "*." + AppDefs.FileExtension.KeyFile, SearchOption.TopDirectoryOnly); foreach(FileInfo fi in lFiles) AddKeyFileSuggAsync(fi.FullName, null); } catch(Exception) { Debug.Assert(false); } } private void AddKeyFileSuggAsync(string str, bool? obSelect) { if(m_cmbKeyFile.InvokeRequired) m_cmbKeyFile.BeginInvoke(new AkfsDelegate( this.AddKeyFileSuggPriv), str, obSelect); else AddKeyFileSuggPriv(str, obSelect); } private delegate void AkfsDelegate(string str, bool? obSelect); private void AddKeyFileSuggPriv(string str, bool? obSelect) { try { if(m_bDisposed) return; // Slow drive if(string.IsNullOrEmpty(str)) { Debug.Assert(false); return; } int iIndex = m_lKeyFileNames.IndexOf(str); if(iIndex < 0) { iIndex = m_lKeyFileNames.Count; m_lKeyFileNames.Add(str); // m_lKeyFileImages.Add(img); if(m_cmbKeyFile.Items.Add(str) != iIndex) { Debug.Assert(false); } } if(obSelect.HasValue) { if(obSelect.Value) m_cmbKeyFile.SelectedIndex = iIndex; } else if((m_aKeyAssoc != null) && m_bCanModKeyFile) { if(str.Equals(m_aKeyAssoc.KeyFilePath, StrUtil.CaseIgnoreCmp) || str.Equals(m_aKeyAssoc.KeyProvider, StrUtil.CaseIgnoreCmp)) { m_cmbKeyFile.SelectedIndex = iIndex; m_bCanModKeyFile = false; } } } catch(Exception) { Debug.Assert(false); } } private void OnFormClosed(object sender, FormClosedEventArgs e) { GlobalWindowManager.RemoveWindow(this); } private void OnBtnExit(object sender, EventArgs e) { if(!m_bCanExit) { Debug.Assert(false); this.DialogResult = DialogResult.None; return; } m_bHasExited = true; } private void OnFormClosing(object sender, FormClosingEventArgs e) { // if(m_bRedirectActivation) Program.MainForm.RedirectActivationPop(); CleanUpEx(); } } } KeePass/Forms/TanWizardForm.Designer.cs0000664000000000000000000002004012501532426017010 0ustar rootrootnamespace KeePass.Forms { partial class TanWizardForm { /// /// Erforderliche Designervariable. /// private System.ComponentModel.IContainer components = null; /// /// Verwendete Ressourcen bereinigen. /// /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Vom Windows Form-Designer generierter Code /// /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TanWizardForm)); this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_lblIntro = new System.Windows.Forms.Label(); this.m_tbTANs = new System.Windows.Forms.TextBox(); this.m_cbNumberTans = new System.Windows.Forms.CheckBox(); this.m_lblSeparator = new System.Windows.Forms.Label(); this.m_numTANsIndex = new System.Windows.Forms.NumericUpDown(); this.m_lblTanChars = new System.Windows.Forms.Label(); this.m_tbTanChars = new System.Windows.Forms.TextBox(); this.m_lblToGroup = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numTANsIndex)).BeginInit(); this.SuspendLayout(); // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(403, 423); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 3; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(484, 423); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 4; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(571, 60); this.m_bannerImage.TabIndex = 2; this.m_bannerImage.TabStop = false; // // m_lblIntro // this.m_lblIntro.Location = new System.Drawing.Point(9, 91); this.m_lblIntro.Name = "m_lblIntro"; this.m_lblIntro.Size = new System.Drawing.Size(550, 29); this.m_lblIntro.TabIndex = 5; this.m_lblIntro.Text = resources.GetString("m_lblIntro.Text"); // // m_tbTANs // this.m_tbTANs.AcceptsReturn = true; this.m_tbTANs.Location = new System.Drawing.Point(12, 124); this.m_tbTANs.Multiline = true; this.m_tbTANs.Name = "m_tbTANs"; this.m_tbTANs.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.m_tbTANs.Size = new System.Drawing.Size(547, 208); this.m_tbTANs.TabIndex = 0; // // m_cbNumberTans // this.m_cbNumberTans.AutoSize = true; this.m_cbNumberTans.Location = new System.Drawing.Point(12, 344); this.m_cbNumberTans.Name = "m_cbNumberTans"; this.m_cbNumberTans.Size = new System.Drawing.Size(275, 17); this.m_cbNumberTans.TabIndex = 1; this.m_cbNumberTans.Text = "Number TANs consecutively, starting from this value:"; this.m_cbNumberTans.UseVisualStyleBackColor = true; this.m_cbNumberTans.CheckedChanged += new System.EventHandler(this.OnNumberTANsCheckedChanged); // // m_lblSeparator // this.m_lblSeparator.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.m_lblSeparator.Location = new System.Drawing.Point(0, 416); this.m_lblSeparator.Name = "m_lblSeparator"; this.m_lblSeparator.Size = new System.Drawing.Size(571, 2); this.m_lblSeparator.TabIndex = 6; // // m_numTANsIndex // this.m_numTANsIndex.Location = new System.Drawing.Point(293, 343); this.m_numTANsIndex.Maximum = new decimal(new int[] { 65535, 0, 0, 0}); this.m_numTANsIndex.Name = "m_numTANsIndex"; this.m_numTANsIndex.Size = new System.Drawing.Size(72, 20); this.m_numTANsIndex.TabIndex = 2; this.m_numTANsIndex.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; // // m_lblTanChars // this.m_lblTanChars.AutoSize = true; this.m_lblTanChars.Location = new System.Drawing.Point(9, 368); this.m_lblTanChars.Name = "m_lblTanChars"; this.m_lblTanChars.Size = new System.Drawing.Size(200, 13); this.m_lblTanChars.TabIndex = 7; this.m_lblTanChars.Text = "TANs consist of the following characters:"; // // m_tbTanChars // this.m_tbTanChars.Location = new System.Drawing.Point(12, 384); this.m_tbTanChars.Name = "m_tbTanChars"; this.m_tbTanChars.Size = new System.Drawing.Size(547, 20); this.m_tbTanChars.TabIndex = 8; // // m_lblToGroup // this.m_lblToGroup.Location = new System.Drawing.Point(9, 71); this.m_lblToGroup.Name = "m_lblToGroup"; this.m_lblToGroup.Size = new System.Drawing.Size(550, 15); this.m_lblToGroup.TabIndex = 9; this.m_lblToGroup.Text = "TANs are imported into the currently selected group"; // // TanWizardForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(571, 458); this.Controls.Add(this.m_lblToGroup); this.Controls.Add(this.m_tbTanChars); this.Controls.Add(this.m_lblTanChars); this.Controls.Add(this.m_numTANsIndex); this.Controls.Add(this.m_lblSeparator); this.Controls.Add(this.m_cbNumberTans); this.Controls.Add(this.m_tbTANs); this.Controls.Add(this.m_lblIntro); this.Controls.Add(this.m_bannerImage); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "TanWizardForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.OnFormClosing); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.m_numTANsIndex)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.PictureBox m_bannerImage; private System.Windows.Forms.Label m_lblIntro; private System.Windows.Forms.TextBox m_tbTANs; private System.Windows.Forms.CheckBox m_cbNumberTans; private System.Windows.Forms.Label m_lblSeparator; private System.Windows.Forms.NumericUpDown m_numTANsIndex; private System.Windows.Forms.Label m_lblTanChars; private System.Windows.Forms.TextBox m_tbTanChars; private System.Windows.Forms.Label m_lblToGroup; } }KeePass/Forms/GroupForm.Designer.cs0000664000000000000000000003760512501531202016207 0ustar rootrootnamespace KeePass.Forms { partial class GroupForm { /// /// Erforderliche Designervariable. /// private System.ComponentModel.IContainer components = null; /// /// Verwendete Ressourcen bereinigen. /// /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Vom Windows Form-Designer generierter Code /// /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// private void InitializeComponent() { this.m_lblName = new System.Windows.Forms.Label(); this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_tbName = new System.Windows.Forms.TextBox(); this.m_lblIcon = new System.Windows.Forms.Label(); this.m_btnIcon = new System.Windows.Forms.Button(); this.m_tabMain = new System.Windows.Forms.TabControl(); this.m_tabGeneral = new System.Windows.Forms.TabPage(); this.m_dtExpires = new System.Windows.Forms.DateTimePicker(); this.m_cbExpires = new System.Windows.Forms.CheckBox(); this.m_tabNotes = new System.Windows.Forms.TabPage(); this.m_lblNotesHint = new System.Windows.Forms.Label(); this.m_tbNotes = new System.Windows.Forms.TextBox(); this.m_tabBehavior = new System.Windows.Forms.TabPage(); this.m_cmbEnableSearching = new System.Windows.Forms.ComboBox(); this.m_cmbEnableAutoType = new System.Windows.Forms.ComboBox(); this.m_lblEnableSearching = new System.Windows.Forms.Label(); this.m_lblEnableAutoType = new System.Windows.Forms.Label(); this.m_tabAutoType = new System.Windows.Forms.TabPage(); this.m_btnAutoTypeEdit = new System.Windows.Forms.Button(); this.m_rbAutoTypeOverride = new System.Windows.Forms.RadioButton(); this.m_rbAutoTypeInherit = new System.Windows.Forms.RadioButton(); this.m_lblAutoTypeDesc = new System.Windows.Forms.Label(); this.m_tbDefaultAutoTypeSeq = new System.Windows.Forms.TextBox(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); this.m_tabMain.SuspendLayout(); this.m_tabGeneral.SuspendLayout(); this.m_tabNotes.SuspendLayout(); this.m_tabBehavior.SuspendLayout(); this.m_tabAutoType.SuspendLayout(); this.SuspendLayout(); // // m_lblName // this.m_lblName.AutoSize = true; this.m_lblName.Location = new System.Drawing.Point(3, 11); this.m_lblName.Name = "m_lblName"; this.m_lblName.Size = new System.Drawing.Size(38, 13); this.m_lblName.TabIndex = 1; this.m_lblName.Text = "Name:"; // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(388, 60); this.m_bannerImage.TabIndex = 1; this.m_bannerImage.TabStop = false; // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(220, 238); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 1; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(301, 238); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 2; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_tbName // this.m_tbName.Location = new System.Drawing.Point(60, 11); this.m_tbName.Name = "m_tbName"; this.m_tbName.Size = new System.Drawing.Size(286, 20); this.m_tbName.TabIndex = 0; // // m_lblIcon // this.m_lblIcon.AutoSize = true; this.m_lblIcon.Location = new System.Drawing.Point(3, 39); this.m_lblIcon.Name = "m_lblIcon"; this.m_lblIcon.Size = new System.Drawing.Size(31, 13); this.m_lblIcon.TabIndex = 2; this.m_lblIcon.Text = "Icon:"; // // m_btnIcon // this.m_btnIcon.Location = new System.Drawing.Point(60, 37); this.m_btnIcon.Name = "m_btnIcon"; this.m_btnIcon.Size = new System.Drawing.Size(33, 23); this.m_btnIcon.TabIndex = 3; this.m_btnIcon.UseVisualStyleBackColor = true; this.m_btnIcon.Click += new System.EventHandler(this.OnBtnIcon); // // m_tabMain // this.m_tabMain.Controls.Add(this.m_tabGeneral); this.m_tabMain.Controls.Add(this.m_tabNotes); this.m_tabMain.Controls.Add(this.m_tabBehavior); this.m_tabMain.Controls.Add(this.m_tabAutoType); this.m_tabMain.Location = new System.Drawing.Point(12, 66); this.m_tabMain.Name = "m_tabMain"; this.m_tabMain.SelectedIndex = 0; this.m_tabMain.Size = new System.Drawing.Size(364, 166); this.m_tabMain.TabIndex = 0; // // m_tabGeneral // this.m_tabGeneral.Controls.Add(this.m_dtExpires); this.m_tabGeneral.Controls.Add(this.m_cbExpires); this.m_tabGeneral.Controls.Add(this.m_lblName); this.m_tabGeneral.Controls.Add(this.m_btnIcon); this.m_tabGeneral.Controls.Add(this.m_tbName); this.m_tabGeneral.Controls.Add(this.m_lblIcon); this.m_tabGeneral.Location = new System.Drawing.Point(4, 22); this.m_tabGeneral.Name = "m_tabGeneral"; this.m_tabGeneral.Size = new System.Drawing.Size(356, 140); this.m_tabGeneral.TabIndex = 0; this.m_tabGeneral.Text = "General"; this.m_tabGeneral.UseVisualStyleBackColor = true; // // m_dtExpires // this.m_dtExpires.Format = System.Windows.Forms.DateTimePickerFormat.Custom; this.m_dtExpires.Location = new System.Drawing.Point(87, 105); this.m_dtExpires.Name = "m_dtExpires"; this.m_dtExpires.Size = new System.Drawing.Size(259, 20); this.m_dtExpires.TabIndex = 5; // // m_cbExpires // this.m_cbExpires.AutoSize = true; this.m_cbExpires.Location = new System.Drawing.Point(6, 105); this.m_cbExpires.Name = "m_cbExpires"; this.m_cbExpires.Size = new System.Drawing.Size(63, 17); this.m_cbExpires.TabIndex = 4; this.m_cbExpires.Text = "Expires:"; this.m_cbExpires.UseVisualStyleBackColor = true; // // m_tabNotes // this.m_tabNotes.Controls.Add(this.m_lblNotesHint); this.m_tabNotes.Controls.Add(this.m_tbNotes); this.m_tabNotes.Location = new System.Drawing.Point(4, 22); this.m_tabNotes.Name = "m_tabNotes"; this.m_tabNotes.Size = new System.Drawing.Size(356, 140); this.m_tabNotes.TabIndex = 2; this.m_tabNotes.Text = "Notes"; this.m_tabNotes.UseVisualStyleBackColor = true; // // m_lblNotesHint // this.m_lblNotesHint.AutoSize = true; this.m_lblNotesHint.Location = new System.Drawing.Point(3, 121); this.m_lblNotesHint.Name = "m_lblNotesHint"; this.m_lblNotesHint.Size = new System.Drawing.Size(167, 13); this.m_lblNotesHint.TabIndex = 1; this.m_lblNotesHint.Text = "Notes are shown in group tooltips."; // // m_tbNotes // this.m_tbNotes.AcceptsReturn = true; this.m_tbNotes.Location = new System.Drawing.Point(6, 10); this.m_tbNotes.Multiline = true; this.m_tbNotes.Name = "m_tbNotes"; this.m_tbNotes.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.m_tbNotes.Size = new System.Drawing.Size(341, 107); this.m_tbNotes.TabIndex = 0; // // m_tabBehavior // this.m_tabBehavior.Controls.Add(this.m_cmbEnableSearching); this.m_tabBehavior.Controls.Add(this.m_cmbEnableAutoType); this.m_tabBehavior.Controls.Add(this.m_lblEnableSearching); this.m_tabBehavior.Controls.Add(this.m_lblEnableAutoType); this.m_tabBehavior.Location = new System.Drawing.Point(4, 22); this.m_tabBehavior.Name = "m_tabBehavior"; this.m_tabBehavior.Size = new System.Drawing.Size(356, 140); this.m_tabBehavior.TabIndex = 3; this.m_tabBehavior.Text = "Behavior"; this.m_tabBehavior.UseVisualStyleBackColor = true; // // m_cmbEnableSearching // this.m_cmbEnableSearching.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbEnableSearching.FormattingEnabled = true; this.m_cmbEnableSearching.Location = new System.Drawing.Point(9, 74); this.m_cmbEnableSearching.Name = "m_cmbEnableSearching"; this.m_cmbEnableSearching.Size = new System.Drawing.Size(334, 21); this.m_cmbEnableSearching.TabIndex = 3; // // m_cmbEnableAutoType // this.m_cmbEnableAutoType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbEnableAutoType.FormattingEnabled = true; this.m_cmbEnableAutoType.Location = new System.Drawing.Point(9, 25); this.m_cmbEnableAutoType.Name = "m_cmbEnableAutoType"; this.m_cmbEnableAutoType.Size = new System.Drawing.Size(334, 21); this.m_cmbEnableAutoType.TabIndex = 1; // // m_lblEnableSearching // this.m_lblEnableSearching.AutoSize = true; this.m_lblEnableSearching.Location = new System.Drawing.Point(6, 58); this.m_lblEnableSearching.Name = "m_lblEnableSearching"; this.m_lblEnableSearching.Size = new System.Drawing.Size(152, 13); this.m_lblEnableSearching.TabIndex = 2; this.m_lblEnableSearching.Text = "Searching entries in this group:"; // // m_lblEnableAutoType // this.m_lblEnableAutoType.AutoSize = true; this.m_lblEnableAutoType.Location = new System.Drawing.Point(6, 9); this.m_lblEnableAutoType.Name = "m_lblEnableAutoType"; this.m_lblEnableAutoType.Size = new System.Drawing.Size(168, 13); this.m_lblEnableAutoType.TabIndex = 0; this.m_lblEnableAutoType.Text = "Auto-Type for entries in this group:"; // // m_tabAutoType // this.m_tabAutoType.Controls.Add(this.m_btnAutoTypeEdit); this.m_tabAutoType.Controls.Add(this.m_rbAutoTypeOverride); this.m_tabAutoType.Controls.Add(this.m_rbAutoTypeInherit); this.m_tabAutoType.Controls.Add(this.m_lblAutoTypeDesc); this.m_tabAutoType.Controls.Add(this.m_tbDefaultAutoTypeSeq); this.m_tabAutoType.Location = new System.Drawing.Point(4, 22); this.m_tabAutoType.Name = "m_tabAutoType"; this.m_tabAutoType.Size = new System.Drawing.Size(356, 140); this.m_tabAutoType.TabIndex = 1; this.m_tabAutoType.Text = "Auto-Type"; this.m_tabAutoType.UseVisualStyleBackColor = true; // // m_btnAutoTypeEdit // this.m_btnAutoTypeEdit.Location = new System.Drawing.Point(315, 54); this.m_btnAutoTypeEdit.Name = "m_btnAutoTypeEdit"; this.m_btnAutoTypeEdit.Size = new System.Drawing.Size(32, 23); this.m_btnAutoTypeEdit.TabIndex = 3; this.m_btnAutoTypeEdit.UseVisualStyleBackColor = true; this.m_btnAutoTypeEdit.Click += new System.EventHandler(this.OnBtnAutoTypeEdit); // // m_rbAutoTypeOverride // this.m_rbAutoTypeOverride.AutoSize = true; this.m_rbAutoTypeOverride.Location = new System.Drawing.Point(9, 33); this.m_rbAutoTypeOverride.Name = "m_rbAutoTypeOverride"; this.m_rbAutoTypeOverride.Size = new System.Drawing.Size(153, 17); this.m_rbAutoTypeOverride.TabIndex = 1; this.m_rbAutoTypeOverride.TabStop = true; this.m_rbAutoTypeOverride.Text = "Override default sequence:"; this.m_rbAutoTypeOverride.UseVisualStyleBackColor = true; // // m_rbAutoTypeInherit // this.m_rbAutoTypeInherit.AutoSize = true; this.m_rbAutoTypeInherit.Location = new System.Drawing.Point(9, 10); this.m_rbAutoTypeInherit.Name = "m_rbAutoTypeInherit"; this.m_rbAutoTypeInherit.Size = new System.Drawing.Size(272, 17); this.m_rbAutoTypeInherit.TabIndex = 0; this.m_rbAutoTypeInherit.TabStop = true; this.m_rbAutoTypeInherit.Text = "Inherit default auto-type sequence from parent group"; this.m_rbAutoTypeInherit.UseVisualStyleBackColor = true; this.m_rbAutoTypeInherit.CheckedChanged += new System.EventHandler(this.OnAutoTypeInheritCheckedChanged); // // m_lblAutoTypeDesc // this.m_lblAutoTypeDesc.Location = new System.Drawing.Point(26, 79); this.m_lblAutoTypeDesc.Name = "m_lblAutoTypeDesc"; this.m_lblAutoTypeDesc.Size = new System.Drawing.Size(321, 27); this.m_lblAutoTypeDesc.TabIndex = 4; this.m_lblAutoTypeDesc.Text = "All subgroups and entries in the current group that inherit the group\'s auto-type" + " sequence will use the one entered above."; // // m_tbDefaultAutoTypeSeq // this.m_tbDefaultAutoTypeSeq.Location = new System.Drawing.Point(29, 56); this.m_tbDefaultAutoTypeSeq.Name = "m_tbDefaultAutoTypeSeq"; this.m_tbDefaultAutoTypeSeq.Size = new System.Drawing.Size(280, 20); this.m_tbDefaultAutoTypeSeq.TabIndex = 2; // // GroupForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(388, 273); this.Controls.Add(this.m_tabMain); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.Controls.Add(this.m_bannerImage); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "GroupForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = ""; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); this.m_tabMain.ResumeLayout(false); this.m_tabGeneral.ResumeLayout(false); this.m_tabGeneral.PerformLayout(); this.m_tabNotes.ResumeLayout(false); this.m_tabNotes.PerformLayout(); this.m_tabBehavior.ResumeLayout(false); this.m_tabBehavior.PerformLayout(); this.m_tabAutoType.ResumeLayout(false); this.m_tabAutoType.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Label m_lblName; private System.Windows.Forms.PictureBox m_bannerImage; private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.TextBox m_tbName; private System.Windows.Forms.Label m_lblIcon; private System.Windows.Forms.Button m_btnIcon; private System.Windows.Forms.TabControl m_tabMain; private System.Windows.Forms.TabPage m_tabGeneral; private System.Windows.Forms.TabPage m_tabAutoType; private System.Windows.Forms.Label m_lblAutoTypeDesc; private System.Windows.Forms.TextBox m_tbDefaultAutoTypeSeq; private System.Windows.Forms.CheckBox m_cbExpires; private System.Windows.Forms.DateTimePicker m_dtExpires; private System.Windows.Forms.RadioButton m_rbAutoTypeInherit; private System.Windows.Forms.RadioButton m_rbAutoTypeOverride; private System.Windows.Forms.Button m_btnAutoTypeEdit; private System.Windows.Forms.TabPage m_tabNotes; private System.Windows.Forms.TextBox m_tbNotes; private System.Windows.Forms.TabPage m_tabBehavior; private System.Windows.Forms.Label m_lblEnableSearching; private System.Windows.Forms.Label m_lblEnableAutoType; private System.Windows.Forms.ComboBox m_cmbEnableSearching; private System.Windows.Forms.ComboBox m_cmbEnableAutoType; private System.Windows.Forms.Label m_lblNotesHint; } }KeePass/Forms/UrlOverrideForm.resx0000664000000000000000000001326612501532514016176 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/CsvImportForm.resx0000664000000000000000000001326612650414546015673 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/EntryReportForm.resx0000664000000000000000000001326611072634014016231 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/FileBrowserForm.resx0000664000000000000000000001326612501531110016146 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 KeePass/Forms/EditStringForm.resx0000664000000000000000000001377112501530454016012 0ustar rootroot text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 A string field consists of a name and a value. A string field name is a generic string describing the field ("User Name", "Credit Card Number", ...). Names must be unique. An entry for example cannot have two string fields named "URL". KeePass/Forms/ColumnsForm.Designer.cs0000664000000000000000000001612512501527004016532 0ustar rootrootnamespace KeePass.Forms { partial class ColumnsForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_lblChoose = new System.Windows.Forms.Label(); this.m_lblReorderHint = new System.Windows.Forms.Label(); this.m_lvColumns = new KeePass.UI.CustomListViewEx(); this.m_bannerImage = new System.Windows.Forms.PictureBox(); this.m_lblSortHint = new System.Windows.Forms.Label(); this.m_grpColumn = new System.Windows.Forms.GroupBox(); this.m_cbHide = new System.Windows.Forms.CheckBox(); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).BeginInit(); this.m_grpColumn.SuspendLayout(); this.SuspendLayout(); // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(518, 87); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 0; this.m_btnOK.Text = "OK"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(518, 116); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 1; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; this.m_btnCancel.Click += new System.EventHandler(this.OnBtnCancel); // // m_lblChoose // this.m_lblChoose.AutoSize = true; this.m_lblChoose.Location = new System.Drawing.Point(9, 72); this.m_lblChoose.Name = "m_lblChoose"; this.m_lblChoose.Size = new System.Drawing.Size(239, 13); this.m_lblChoose.TabIndex = 2; this.m_lblChoose.Text = "Choose the columns to show in the main window:"; // // m_lblReorderHint // this.m_lblReorderHint.AutoSize = true; this.m_lblReorderHint.Location = new System.Drawing.Point(9, 447); this.m_lblReorderHint.Name = "m_lblReorderHint"; this.m_lblReorderHint.Size = new System.Drawing.Size(344, 13); this.m_lblReorderHint.TabIndex = 5; this.m_lblReorderHint.Text = "To reorder columns, drag&&drop the column headers in the main window."; // // m_lvColumns // this.m_lvColumns.CheckBoxes = true; this.m_lvColumns.FullRowSelect = true; this.m_lvColumns.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.m_lvColumns.Location = new System.Drawing.Point(12, 88); this.m_lvColumns.MultiSelect = false; this.m_lvColumns.Name = "m_lvColumns"; this.m_lvColumns.Size = new System.Drawing.Size(500, 300); this.m_lvColumns.TabIndex = 3; this.m_lvColumns.UseCompatibleStateImageBehavior = false; this.m_lvColumns.View = System.Windows.Forms.View.Details; this.m_lvColumns.SelectedIndexChanged += new System.EventHandler(this.OnColumnsSelectedIndexChanged); // // m_bannerImage // this.m_bannerImage.Dock = System.Windows.Forms.DockStyle.Top; this.m_bannerImage.Location = new System.Drawing.Point(0, 0); this.m_bannerImage.Name = "m_bannerImage"; this.m_bannerImage.Size = new System.Drawing.Size(605, 60); this.m_bannerImage.TabIndex = 6; this.m_bannerImage.TabStop = false; // // m_lblSortHint // this.m_lblSortHint.AutoSize = true; this.m_lblSortHint.Location = new System.Drawing.Point(9, 465); this.m_lblSortHint.Name = "m_lblSortHint"; this.m_lblSortHint.Size = new System.Drawing.Size(419, 13); this.m_lblSortHint.TabIndex = 6; this.m_lblSortHint.Text = "To sort entries by a field, click on the corresponding column header in the main " + "window."; // // m_grpColumn // this.m_grpColumn.Controls.Add(this.m_cbHide); this.m_grpColumn.Location = new System.Drawing.Point(12, 394); this.m_grpColumn.Name = "m_grpColumn"; this.m_grpColumn.Size = new System.Drawing.Size(500, 45); this.m_grpColumn.TabIndex = 4; this.m_grpColumn.TabStop = false; this.m_grpColumn.Text = "<>"; // // m_cbHide // this.m_cbHide.AutoSize = true; this.m_cbHide.Location = new System.Drawing.Point(10, 19); this.m_cbHide.Name = "m_cbHide"; this.m_cbHide.Size = new System.Drawing.Size(144, 17); this.m_cbHide.TabIndex = 0; this.m_cbHide.Text = "&Hide data using asterisks"; this.m_cbHide.UseVisualStyleBackColor = true; this.m_cbHide.CheckedChanged += new System.EventHandler(this.OnHideCheckedChanged); // // ColumnsForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(605, 487); this.Controls.Add(this.m_grpColumn); this.Controls.Add(this.m_lblSortHint); this.Controls.Add(this.m_bannerImage); this.Controls.Add(this.m_lblReorderHint); this.Controls.Add(this.m_lvColumns); this.Controls.Add(this.m_lblChoose); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ColumnsForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); ((System.ComponentModel.ISupportInitialize)(this.m_bannerImage)).EndInit(); this.m_grpColumn.ResumeLayout(false); this.m_grpColumn.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.Label m_lblChoose; private KeePass.UI.CustomListViewEx m_lvColumns; private System.Windows.Forms.Label m_lblReorderHint; private System.Windows.Forms.PictureBox m_bannerImage; private System.Windows.Forms.Label m_lblSortHint; private System.Windows.Forms.GroupBox m_grpColumn; private System.Windows.Forms.CheckBox m_cbHide; } }KeePass/Forms/CsvImportForm.Designer.cs0000664000000000000000000006243312650414546017056 0ustar rootrootnamespace KeePass.Forms { partial class CsvImportForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.m_tabMain = new System.Windows.Forms.TabControl(); this.m_tabEnc = new System.Windows.Forms.TabPage(); this.m_rtbEncPreview = new KeePass.UI.CustomRichTextBoxEx(); this.m_lblEncPreview = new System.Windows.Forms.Label(); this.m_cmbEnc = new System.Windows.Forms.ComboBox(); this.m_lblEnc = new System.Windows.Forms.Label(); this.m_tabStructure = new System.Windows.Forms.TabPage(); this.m_grpSem = new System.Windows.Forms.GroupBox(); this.m_grpFieldAdd = new System.Windows.Forms.GroupBox(); this.m_btnFieldAdd = new System.Windows.Forms.Button(); this.m_linkFieldFormat = new System.Windows.Forms.LinkLabel(); this.m_cmbFieldFormat = new System.Windows.Forms.ComboBox(); this.m_lblFieldFormat = new System.Windows.Forms.Label(); this.m_tbFieldName = new System.Windows.Forms.TextBox(); this.m_lblFieldName = new System.Windows.Forms.Label(); this.m_cmbFieldType = new System.Windows.Forms.ComboBox(); this.m_lblFieldType = new System.Windows.Forms.Label(); this.m_btnFieldMoveDown = new System.Windows.Forms.Button(); this.m_btnFieldMoveUp = new System.Windows.Forms.Button(); this.m_btnFieldDel = new System.Windows.Forms.Button(); this.m_lblFields = new System.Windows.Forms.Label(); this.m_lvFields = new KeePass.UI.CustomListViewEx(); this.m_grpSyntax = new System.Windows.Forms.GroupBox(); this.m_cbIgnoreFirst = new System.Windows.Forms.CheckBox(); this.m_cbTrim = new System.Windows.Forms.CheckBox(); this.m_cmbTextQual = new System.Windows.Forms.ComboBox(); this.m_lblTextQual = new System.Windows.Forms.Label(); this.m_cbBackEscape = new System.Windows.Forms.CheckBox(); this.m_lblFieldSep = new System.Windows.Forms.Label(); this.m_cmbFieldSep = new System.Windows.Forms.ComboBox(); this.m_cmbRecSep = new System.Windows.Forms.ComboBox(); this.m_lblRecSep = new System.Windows.Forms.Label(); this.m_tabPreview = new System.Windows.Forms.TabPage(); this.m_cbMergeGroups = new System.Windows.Forms.CheckBox(); this.m_lvImportPreview = new KeePass.UI.CustomListViewEx(); this.m_btnOK = new System.Windows.Forms.Button(); this.m_btnCancel = new System.Windows.Forms.Button(); this.m_btnTabBack = new System.Windows.Forms.Button(); this.m_btnTabNext = new System.Windows.Forms.Button(); this.m_btnHelp = new System.Windows.Forms.Button(); this.m_tabMain.SuspendLayout(); this.m_tabEnc.SuspendLayout(); this.m_tabStructure.SuspendLayout(); this.m_grpSem.SuspendLayout(); this.m_grpFieldAdd.SuspendLayout(); this.m_grpSyntax.SuspendLayout(); this.m_tabPreview.SuspendLayout(); this.SuspendLayout(); // // m_tabMain // this.m_tabMain.Controls.Add(this.m_tabEnc); this.m_tabMain.Controls.Add(this.m_tabStructure); this.m_tabMain.Controls.Add(this.m_tabPreview); this.m_tabMain.Location = new System.Drawing.Point(12, 12); this.m_tabMain.Name = "m_tabMain"; this.m_tabMain.SelectedIndex = 0; this.m_tabMain.Size = new System.Drawing.Size(684, 462); this.m_tabMain.TabIndex = 2; this.m_tabMain.SelectedIndexChanged += new System.EventHandler(this.OnTabMainSelectedIndexChanged); // // m_tabEnc // this.m_tabEnc.Controls.Add(this.m_rtbEncPreview); this.m_tabEnc.Controls.Add(this.m_lblEncPreview); this.m_tabEnc.Controls.Add(this.m_cmbEnc); this.m_tabEnc.Controls.Add(this.m_lblEnc); this.m_tabEnc.Location = new System.Drawing.Point(4, 22); this.m_tabEnc.Name = "m_tabEnc"; this.m_tabEnc.Padding = new System.Windows.Forms.Padding(3); this.m_tabEnc.Size = new System.Drawing.Size(676, 436); this.m_tabEnc.TabIndex = 0; this.m_tabEnc.Text = "Encoding"; this.m_tabEnc.UseVisualStyleBackColor = true; // // m_rtbEncPreview // this.m_rtbEncPreview.AcceptsTab = true; this.m_rtbEncPreview.DetectUrls = false; this.m_rtbEncPreview.Location = new System.Drawing.Point(9, 60); this.m_rtbEncPreview.Name = "m_rtbEncPreview"; this.m_rtbEncPreview.ReadOnly = true; this.m_rtbEncPreview.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical; this.m_rtbEncPreview.Size = new System.Drawing.Size(657, 366); this.m_rtbEncPreview.TabIndex = 3; this.m_rtbEncPreview.Text = ""; // // m_lblEncPreview // this.m_lblEncPreview.AutoSize = true; this.m_lblEncPreview.Location = new System.Drawing.Point(6, 44); this.m_lblEncPreview.Name = "m_lblEncPreview"; this.m_lblEncPreview.Size = new System.Drawing.Size(71, 13); this.m_lblEncPreview.TabIndex = 2; this.m_lblEncPreview.Text = "Text preview:"; // // m_cmbEnc // this.m_cmbEnc.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbEnc.FormattingEnabled = true; this.m_cmbEnc.Location = new System.Drawing.Point(91, 13); this.m_cmbEnc.Name = "m_cmbEnc"; this.m_cmbEnc.Size = new System.Drawing.Size(298, 21); this.m_cmbEnc.TabIndex = 1; this.m_cmbEnc.SelectedIndexChanged += new System.EventHandler(this.OnEncSelectedIndexChanged); // // m_lblEnc // this.m_lblEnc.AutoSize = true; this.m_lblEnc.Location = new System.Drawing.Point(6, 16); this.m_lblEnc.Name = "m_lblEnc"; this.m_lblEnc.Size = new System.Drawing.Size(78, 13); this.m_lblEnc.TabIndex = 0; this.m_lblEnc.Text = "Text encoding:"; // // m_tabStructure // this.m_tabStructure.Controls.Add(this.m_grpSem); this.m_tabStructure.Controls.Add(this.m_grpSyntax); this.m_tabStructure.Location = new System.Drawing.Point(4, 22); this.m_tabStructure.Name = "m_tabStructure"; this.m_tabStructure.Padding = new System.Windows.Forms.Padding(3); this.m_tabStructure.Size = new System.Drawing.Size(676, 436); this.m_tabStructure.TabIndex = 1; this.m_tabStructure.Text = "Structure"; this.m_tabStructure.UseVisualStyleBackColor = true; // // m_grpSem // this.m_grpSem.Controls.Add(this.m_grpFieldAdd); this.m_grpSem.Controls.Add(this.m_btnFieldMoveDown); this.m_grpSem.Controls.Add(this.m_btnFieldMoveUp); this.m_grpSem.Controls.Add(this.m_btnFieldDel); this.m_grpSem.Controls.Add(this.m_lblFields); this.m_grpSem.Controls.Add(this.m_lvFields); this.m_grpSem.Location = new System.Drawing.Point(6, 140); this.m_grpSem.Name = "m_grpSem"; this.m_grpSem.Size = new System.Drawing.Size(662, 290); this.m_grpSem.TabIndex = 1; this.m_grpSem.TabStop = false; this.m_grpSem.Text = "Semantics"; // // m_grpFieldAdd // this.m_grpFieldAdd.Controls.Add(this.m_btnFieldAdd); this.m_grpFieldAdd.Controls.Add(this.m_linkFieldFormat); this.m_grpFieldAdd.Controls.Add(this.m_cmbFieldFormat); this.m_grpFieldAdd.Controls.Add(this.m_lblFieldFormat); this.m_grpFieldAdd.Controls.Add(this.m_tbFieldName); this.m_grpFieldAdd.Controls.Add(this.m_lblFieldName); this.m_grpFieldAdd.Controls.Add(this.m_cmbFieldType); this.m_grpFieldAdd.Controls.Add(this.m_lblFieldType); this.m_grpFieldAdd.Location = new System.Drawing.Point(380, 143); this.m_grpFieldAdd.Name = "m_grpFieldAdd"; this.m_grpFieldAdd.Size = new System.Drawing.Size(272, 137); this.m_grpFieldAdd.TabIndex = 5; this.m_grpFieldAdd.TabStop = false; this.m_grpFieldAdd.Text = "Add field"; // // m_btnFieldAdd // this.m_btnFieldAdd.Location = new System.Drawing.Point(188, 103); this.m_btnFieldAdd.Name = "m_btnFieldAdd"; this.m_btnFieldAdd.Size = new System.Drawing.Size(75, 23); this.m_btnFieldAdd.TabIndex = 7; this.m_btnFieldAdd.Text = "&Add"; this.m_btnFieldAdd.UseVisualStyleBackColor = true; this.m_btnFieldAdd.Click += new System.EventHandler(this.OnBtnFieldAdd); // // m_linkFieldFormat // this.m_linkFieldFormat.AutoSize = true; this.m_linkFieldFormat.Location = new System.Drawing.Point(234, 75); this.m_linkFieldFormat.Name = "m_linkFieldFormat"; this.m_linkFieldFormat.Size = new System.Drawing.Size(29, 13); this.m_linkFieldFormat.TabIndex = 6; this.m_linkFieldFormat.TabStop = true; this.m_linkFieldFormat.Text = "Help"; this.m_linkFieldFormat.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.OnFieldFormatLinkClicked); // // m_cmbFieldFormat // this.m_cmbFieldFormat.FormattingEnabled = true; this.m_cmbFieldFormat.Location = new System.Drawing.Point(74, 72); this.m_cmbFieldFormat.Name = "m_cmbFieldFormat"; this.m_cmbFieldFormat.Size = new System.Drawing.Size(154, 21); this.m_cmbFieldFormat.TabIndex = 5; // // m_lblFieldFormat // this.m_lblFieldFormat.AutoSize = true; this.m_lblFieldFormat.Location = new System.Drawing.Point(6, 75); this.m_lblFieldFormat.Name = "m_lblFieldFormat"; this.m_lblFieldFormat.Size = new System.Drawing.Size(19, 13); this.m_lblFieldFormat.TabIndex = 4; this.m_lblFieldFormat.Text = "<>"; // // m_tbFieldName // this.m_tbFieldName.Location = new System.Drawing.Point(74, 46); this.m_tbFieldName.Name = "m_tbFieldName"; this.m_tbFieldName.Size = new System.Drawing.Size(189, 20); this.m_tbFieldName.TabIndex = 3; // // m_lblFieldName // this.m_lblFieldName.AutoSize = true; this.m_lblFieldName.Location = new System.Drawing.Point(6, 49); this.m_lblFieldName.Name = "m_lblFieldName"; this.m_lblFieldName.Size = new System.Drawing.Size(38, 13); this.m_lblFieldName.TabIndex = 2; this.m_lblFieldName.Text = "Name:"; // // m_cmbFieldType // this.m_cmbFieldType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cmbFieldType.FormattingEnabled = true; this.m_cmbFieldType.Location = new System.Drawing.Point(74, 19); this.m_cmbFieldType.Name = "m_cmbFieldType"; this.m_cmbFieldType.Size = new System.Drawing.Size(189, 21); this.m_cmbFieldType.TabIndex = 1; this.m_cmbFieldType.SelectedIndexChanged += new System.EventHandler(this.OnFieldTypeSelectedIndexChanged); // // m_lblFieldType // this.m_lblFieldType.AutoSize = true; this.m_lblFieldType.Location = new System.Drawing.Point(6, 22); this.m_lblFieldType.Name = "m_lblFieldType"; this.m_lblFieldType.Size = new System.Drawing.Size(34, 13); this.m_lblFieldType.TabIndex = 0; this.m_lblFieldType.Text = "Type:"; // // m_btnFieldMoveDown // this.m_btnFieldMoveDown.Image = global::KeePass.Properties.Resources.B16x16_1DownArrow; this.m_btnFieldMoveDown.Location = new System.Drawing.Point(380, 96); this.m_btnFieldMoveDown.Name = "m_btnFieldMoveDown"; this.m_btnFieldMoveDown.Size = new System.Drawing.Size(75, 23); this.m_btnFieldMoveDown.TabIndex = 4; this.m_btnFieldMoveDown.UseVisualStyleBackColor = true; this.m_btnFieldMoveDown.Click += new System.EventHandler(this.OnBtnFieldMoveDown); // // m_btnFieldMoveUp // this.m_btnFieldMoveUp.Image = global::KeePass.Properties.Resources.B16x16_1UpArrow; this.m_btnFieldMoveUp.Location = new System.Drawing.Point(380, 67); this.m_btnFieldMoveUp.Name = "m_btnFieldMoveUp"; this.m_btnFieldMoveUp.Size = new System.Drawing.Size(75, 23); this.m_btnFieldMoveUp.TabIndex = 3; this.m_btnFieldMoveUp.UseVisualStyleBackColor = true; this.m_btnFieldMoveUp.Click += new System.EventHandler(this.OnBtnFieldMoveUp); // // m_btnFieldDel // this.m_btnFieldDel.Location = new System.Drawing.Point(380, 38); this.m_btnFieldDel.Name = "m_btnFieldDel"; this.m_btnFieldDel.Size = new System.Drawing.Size(75, 23); this.m_btnFieldDel.TabIndex = 2; this.m_btnFieldDel.Text = "&Delete"; this.m_btnFieldDel.UseVisualStyleBackColor = true; this.m_btnFieldDel.Click += new System.EventHandler(this.OnBtnFieldDel); // // m_lblFields // this.m_lblFields.AutoSize = true; this.m_lblFields.Location = new System.Drawing.Point(6, 22); this.m_lblFields.Name = "m_lblFields"; this.m_lblFields.Size = new System.Drawing.Size(268, 13); this.m_lblFields.TabIndex = 0; this.m_lblFields.Text = "Specify the layout (fields and their order) of the CSV file:"; // // m_lvFields // this.m_lvFields.FullRowSelect = true; this.m_lvFields.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.m_lvFields.HideSelection = false; this.m_lvFields.Location = new System.Drawing.Point(9, 38); this.m_lvFields.Name = "m_lvFields"; this.m_lvFields.ShowItemToolTips = true; this.m_lvFields.Size = new System.Drawing.Size(365, 242); this.m_lvFields.TabIndex = 1; this.m_lvFields.UseCompatibleStateImageBehavior = false; this.m_lvFields.View = System.Windows.Forms.View.Details; this.m_lvFields.SelectedIndexChanged += new System.EventHandler(this.OnFieldsSelectedIndexChanged); // // m_grpSyntax // this.m_grpSyntax.Controls.Add(this.m_cbIgnoreFirst); this.m_grpSyntax.Controls.Add(this.m_cbTrim); this.m_grpSyntax.Controls.Add(this.m_cmbTextQual); this.m_grpSyntax.Controls.Add(this.m_lblTextQual); this.m_grpSyntax.Controls.Add(this.m_cbBackEscape); this.m_grpSyntax.Controls.Add(this.m_lblFieldSep); this.m_grpSyntax.Controls.Add(this.m_cmbFieldSep); this.m_grpSyntax.Controls.Add(this.m_cmbRecSep); this.m_grpSyntax.Controls.Add(this.m_lblRecSep); this.m_grpSyntax.Location = new System.Drawing.Point(6, 13); this.m_grpSyntax.Name = "m_grpSyntax"; this.m_grpSyntax.Size = new System.Drawing.Size(662, 121); this.m_grpSyntax.TabIndex = 0; this.m_grpSyntax.TabStop = false; this.m_grpSyntax.Text = "Syntax"; // // m_cbIgnoreFirst // this.m_cbIgnoreFirst.AutoSize = true; this.m_cbIgnoreFirst.Location = new System.Drawing.Point(9, 73); this.m_cbIgnoreFirst.Name = "m_cbIgnoreFirst"; this.m_cbIgnoreFirst.Size = new System.Drawing.Size(95, 17); this.m_cbIgnoreFirst.TabIndex = 7; this.m_cbIgnoreFirst.Text = "Ignore first row"; this.m_cbIgnoreFirst.UseVisualStyleBackColor = true; // // m_cbTrim // this.m_cbTrim.AutoSize = true; this.m_cbTrim.Checked = true; this.m_cbTrim.CheckState = System.Windows.Forms.CheckState.Checked; this.m_cbTrim.Location = new System.Drawing.Point(9, 96); this.m_cbTrim.Name = "m_cbTrim"; this.m_cbTrim.Size = new System.Drawing.Size(331, 17); this.m_cbTrim.TabIndex = 8; this.m_cbTrim.Text = "Remove white space characters from the beginning/end of fields"; this.m_cbTrim.UseVisualStyleBackColor = true; // // m_cmbTextQual // this.m_cmbTextQual.FormattingEnabled = true; this.m_cmbTextQual.Location = new System.Drawing.Point(91, 46); this.m_cmbTextQual.Name = "m_cmbTextQual"; this.m_cmbTextQual.Size = new System.Drawing.Size(112, 21); this.m_cmbTextQual.TabIndex = 5; this.m_cmbTextQual.SelectedIndexChanged += new System.EventHandler(this.OnTextQualSelectedIndexChanged); this.m_cmbTextQual.TextUpdate += new System.EventHandler(this.OnTextQualTextUpdate); // // m_lblTextQual // this.m_lblTextQual.AutoSize = true; this.m_lblTextQual.Location = new System.Drawing.Point(6, 49); this.m_lblTextQual.Name = "m_lblTextQual"; this.m_lblTextQual.Size = new System.Drawing.Size(70, 13); this.m_lblTextQual.TabIndex = 4; this.m_lblTextQual.Text = "Text qualifier:"; // // m_cbBackEscape // this.m_cbBackEscape.AutoSize = true; this.m_cbBackEscape.Checked = true; this.m_cbBackEscape.CheckState = System.Windows.Forms.CheckState.Checked; this.m_cbBackEscape.Location = new System.Drawing.Point(248, 48); this.m_cbBackEscape.Name = "m_cbBackEscape"; this.m_cbBackEscape.Size = new System.Drawing.Size(192, 17); this.m_cbBackEscape.TabIndex = 6; this.m_cbBackEscape.Text = "Interpret \'\\\' as an escape character"; this.m_cbBackEscape.UseVisualStyleBackColor = true; // // m_lblFieldSep // this.m_lblFieldSep.AutoSize = true; this.m_lblFieldSep.Location = new System.Drawing.Point(6, 22); this.m_lblFieldSep.Name = "m_lblFieldSep"; this.m_lblFieldSep.Size = new System.Drawing.Size(79, 13); this.m_lblFieldSep.TabIndex = 0; this.m_lblFieldSep.Text = "Field separator:"; // // m_cmbFieldSep // this.m_cmbFieldSep.FormattingEnabled = true; this.m_cmbFieldSep.Location = new System.Drawing.Point(91, 19); this.m_cmbFieldSep.Name = "m_cmbFieldSep"; this.m_cmbFieldSep.Size = new System.Drawing.Size(112, 21); this.m_cmbFieldSep.TabIndex = 1; this.m_cmbFieldSep.SelectedIndexChanged += new System.EventHandler(this.OnFieldSepSelectedIndexChanged); this.m_cmbFieldSep.TextUpdate += new System.EventHandler(this.OnFieldSepTextUpdate); // // m_cmbRecSep // this.m_cmbRecSep.FormattingEnabled = true; this.m_cmbRecSep.Location = new System.Drawing.Point(343, 19); this.m_cmbRecSep.Name = "m_cmbRecSep"; this.m_cmbRecSep.Size = new System.Drawing.Size(112, 21); this.m_cmbRecSep.TabIndex = 3; this.m_cmbRecSep.SelectedIndexChanged += new System.EventHandler(this.OnRecSepSelectedIndexChanged); this.m_cmbRecSep.TextUpdate += new System.EventHandler(this.OnRecSepTextUpdate); // // m_lblRecSep // this.m_lblRecSep.AutoSize = true; this.m_lblRecSep.Location = new System.Drawing.Point(245, 22); this.m_lblRecSep.Name = "m_lblRecSep"; this.m_lblRecSep.Size = new System.Drawing.Size(92, 13); this.m_lblRecSep.TabIndex = 2; this.m_lblRecSep.Text = "Record separator:"; // // m_tabPreview // this.m_tabPreview.Controls.Add(this.m_cbMergeGroups); this.m_tabPreview.Controls.Add(this.m_lvImportPreview); this.m_tabPreview.Location = new System.Drawing.Point(4, 22); this.m_tabPreview.Name = "m_tabPreview"; this.m_tabPreview.Size = new System.Drawing.Size(676, 436); this.m_tabPreview.TabIndex = 2; this.m_tabPreview.Text = "Preview"; this.m_tabPreview.UseVisualStyleBackColor = true; // // m_cbMergeGroups // this.m_cbMergeGroups.AutoSize = true; this.m_cbMergeGroups.Location = new System.Drawing.Point(6, 414); this.m_cbMergeGroups.Name = "m_cbMergeGroups"; this.m_cbMergeGroups.Size = new System.Drawing.Size(342, 17); this.m_cbMergeGroups.TabIndex = 1; this.m_cbMergeGroups.Text = "&Merge imported groups with groups already existing in the database"; this.m_cbMergeGroups.UseVisualStyleBackColor = true; // // m_lvImportPreview // this.m_lvImportPreview.FullRowSelect = true; this.m_lvImportPreview.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.m_lvImportPreview.HideSelection = false; this.m_lvImportPreview.Location = new System.Drawing.Point(6, 13); this.m_lvImportPreview.Name = "m_lvImportPreview"; this.m_lvImportPreview.ShowItemToolTips = true; this.m_lvImportPreview.Size = new System.Drawing.Size(662, 395); this.m_lvImportPreview.TabIndex = 0; this.m_lvImportPreview.UseCompatibleStateImageBehavior = false; this.m_lvImportPreview.View = System.Windows.Forms.View.Details; // // m_btnOK // this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.m_btnOK.Location = new System.Drawing.Point(539, 480); this.m_btnOK.Name = "m_btnOK"; this.m_btnOK.Size = new System.Drawing.Size(75, 23); this.m_btnOK.TabIndex = 0; this.m_btnOK.Text = "&Finish"; this.m_btnOK.UseVisualStyleBackColor = true; this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK); // // m_btnCancel // this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.m_btnCancel.Location = new System.Drawing.Point(620, 480); this.m_btnCancel.Name = "m_btnCancel"; this.m_btnCancel.Size = new System.Drawing.Size(75, 23); this.m_btnCancel.TabIndex = 1; this.m_btnCancel.Text = "Cancel"; this.m_btnCancel.UseVisualStyleBackColor = true; // // m_btnTabBack // this.m_btnTabBack.Location = new System.Drawing.Point(383, 480); this.m_btnTabBack.Name = "m_btnTabBack"; this.m_btnTabBack.Size = new System.Drawing.Size(75, 23); this.m_btnTabBack.TabIndex = 4; this.m_btnTabBack.Text = "< &Back"; this.m_btnTabBack.UseVisualStyleBackColor = true; this.m_btnTabBack.Click += new System.EventHandler(this.OnBtnTabBack); // // m_btnTabNext // this.m_btnTabNext.Location = new System.Drawing.Point(458, 480); this.m_btnTabNext.Name = "m_btnTabNext"; this.m_btnTabNext.Size = new System.Drawing.Size(75, 23); this.m_btnTabNext.TabIndex = 5; this.m_btnTabNext.Text = "&Next >"; this.m_btnTabNext.UseVisualStyleBackColor = true; this.m_btnTabNext.Click += new System.EventHandler(this.OnBtnTabNext); // // m_btnHelp // this.m_btnHelp.Location = new System.Drawing.Point(11, 480); this.m_btnHelp.Name = "m_btnHelp"; this.m_btnHelp.Size = new System.Drawing.Size(75, 23); this.m_btnHelp.TabIndex = 3; this.m_btnHelp.Text = "&Help"; this.m_btnHelp.UseVisualStyleBackColor = true; this.m_btnHelp.Click += new System.EventHandler(this.OnBtnHelp); // // CsvImportForm // this.AcceptButton = this.m_btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.m_btnCancel; this.ClientSize = new System.Drawing.Size(708, 515); this.Controls.Add(this.m_btnHelp); this.Controls.Add(this.m_btnTabNext); this.Controls.Add(this.m_btnTabBack); this.Controls.Add(this.m_btnCancel); this.Controls.Add(this.m_btnOK); this.Controls.Add(this.m_tabMain); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "CsvImportForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "<>"; this.Load += new System.EventHandler(this.OnFormLoad); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); this.m_tabMain.ResumeLayout(false); this.m_tabEnc.ResumeLayout(false); this.m_tabEnc.PerformLayout(); this.m_tabStructure.ResumeLayout(false); this.m_grpSem.ResumeLayout(false); this.m_grpSem.PerformLayout(); this.m_grpFieldAdd.ResumeLayout(false); this.m_grpFieldAdd.PerformLayout(); this.m_grpSyntax.ResumeLayout(false); this.m_grpSyntax.PerformLayout(); this.m_tabPreview.ResumeLayout(false); this.m_tabPreview.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.TabControl m_tabMain; private System.Windows.Forms.TabPage m_tabEnc; private System.Windows.Forms.TabPage m_tabStructure; private System.Windows.Forms.Button m_btnOK; private System.Windows.Forms.Button m_btnCancel; private System.Windows.Forms.TabPage m_tabPreview; private System.Windows.Forms.ComboBox m_cmbEnc; private System.Windows.Forms.Label m_lblEnc; private KeePass.UI.CustomRichTextBoxEx m_rtbEncPreview; private System.Windows.Forms.Label m_lblEncPreview; private System.Windows.Forms.ComboBox m_cmbRecSep; private System.Windows.Forms.Label m_lblRecSep; private System.Windows.Forms.Label m_lblFieldSep; private System.Windows.Forms.ComboBox m_cmbFieldSep; private System.Windows.Forms.GroupBox m_grpSyntax; private System.Windows.Forms.GroupBox m_grpSem; private System.Windows.Forms.Button m_btnFieldDel; private System.Windows.Forms.Label m_lblFields; private KeePass.UI.CustomListViewEx m_lvFields; private System.Windows.Forms.GroupBox m_grpFieldAdd; private System.Windows.Forms.Label m_lblFieldFormat; private System.Windows.Forms.TextBox m_tbFieldName; private System.Windows.Forms.Label m_lblFieldName; private System.Windows.Forms.ComboBox m_cmbFieldType; private System.Windows.Forms.Label m_lblFieldType; private System.Windows.Forms.Button m_btnFieldMoveDown; private System.Windows.Forms.Button m_btnFieldMoveUp; private System.Windows.Forms.Button m_btnFieldAdd; private System.Windows.Forms.LinkLabel m_linkFieldFormat; private System.Windows.Forms.ComboBox m_cmbFieldFormat; private KeePass.UI.CustomListViewEx m_lvImportPreview; private System.Windows.Forms.CheckBox m_cbBackEscape; private System.Windows.Forms.ComboBox m_cmbTextQual; private System.Windows.Forms.Label m_lblTextQual; private System.Windows.Forms.CheckBox m_cbTrim; private System.Windows.Forms.Button m_btnTabBack; private System.Windows.Forms.Button m_btnTabNext; private System.Windows.Forms.CheckBox m_cbIgnoreFirst; private System.Windows.Forms.Button m_btnHelp; private System.Windows.Forms.CheckBox m_cbMergeGroups; } }KeePass/Forms/CharPickerForm.cs0000664000000000000000000002267312641461340015400 0ustar rootroot/* KeePass Password Safe - The Open-Source Password Manager Copyright (C) 2003-2016 Dominik Reichl 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using KeePass.App; using KeePass.App.Configuration; using KeePass.Native; using KeePass.Resources; using KeePass.UI; using KeePassLib; using KeePassLib.Security; using NativeLib = KeePassLib.Native.NativeLib; namespace KeePass.Forms { public partial class CharPickerForm : Form { private ProtectedString m_psWord = null; private ProtectedString m_psSelected = ProtectedString.Empty; private SecureEdit m_secWord = new SecureEdit(); private List